DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_PROJECT_PUB

Source


1 PACKAGE BODY pa_project_pub AS
2 /* $Header: PAPMPRPB.pls 120.75.12010000.20 2009/02/12 13:52:52 kjai ship $ */
3 --Global constants to be used in error messages
4 G_PKG_NAME      CONSTANT VARCHAR2(30) := 'PA_PROJECT_PUB';
5 G_PROJECT_CODE    CONSTANT VARCHAR2(7)  := 'PROJECT';
6 G_CUSTOMER_CODE    CONSTANT VARCHAR2(8)  := 'CUSTOMER';
7 G_KEY_MEMBER    CONSTANT VARCHAR2(10) := 'KEY_MEMBER';
8 G_CLASS_CATEGORY_CODE  CONSTANT VARCHAR2(14) := 'CLASS_CATEGORY';
9 G_TASK_CODE    CONSTANT VARCHAR2(4)  := 'TASK';
10 -- anlee org role changes
11 G_ORG_ROLE    CONSTANT VARCHAR2(10) := 'ORG_ROLE';
12 --Added by rtarway for FP.M Mapping
13 G_PROJECT_SHARING_TYPE VARCHAR2(250);
14 --Added by rtarway for FP.M Mapping
15 --PACKAGE GLOBAL to be used during updates -------------------------------------------
16 G_USER_ID      CONSTANT NUMBER := FND_GLOBAL.user_id;
17 G_LOGIN_ID    CONSTANT NUMBER := FND_GLOBAL.login_id;
18 
19 l_pm_product_code       VARCHAR2(30) := 'Z'; /*for bug 2413400 a new variable defined.*/
20                                /* increased the lenght for bug 2665656 */
21 
22 -- PACKAGE CURSORS -------------------------------------------------------------------------
23 --needed to get the field values associated to a particular project_type
24 
25    CURSOR   l_project_type_csr
26        (p_project_type pa_project_types.project_type%type)
27    IS
28    SELECT   *
29    FROM   pa_project_types
30    WHERE   project_type = p_project_type;
31 
32 --needed to get the field values associated to a particular project
33 
34    CURSOR  l_project_csr
35     (p_pa_project_id pa_projects.project_id%type)
36    IS
37    SELECT   *
38    FROM    pa_projects p
39    WHERE  p.project_id = p_pa_project_id;
40 
41       /*new cursor for bug no 2413400*/
42    Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
43   Is
44   Select 'X'
45   from pa_lookups
46   where lookup_type='PM_PRODUCT_CODE'
47    and lookup_code = p_pm_product_code;
48 
49   --FP.M Changes by rtarway for Mapping and Set Financial Task
50   --This cursor gets the record version number from pa_tasks for the passed task version id
51      CURSOR c_get_pa_record_version_number (l_task_version_id NUMBER , l_project_id NUMBER)
52      IS
53      SELECT
54             allTasks.record_version_number
55 
56      FROM
57           PA_TASKS allTasks,
58            pa_proj_element_versions elever
59      WHERE
60           elever.element_version_id = l_task_version_id
61      AND
62           elever.project_id = l_project_id
63      AND  elever.proj_element_id  = allTasks.task_id
64      AND  allTasks.project_id = elever.project_id;
65 --End FP.M Changes by rtarway for Mapping and Set Financial Task
66 
67 --
68 -- ================================================
69 --
70 --Name:               Create_Project
71 --Type:                 Procedure
72 --Description:  This procedure can be used to create a project on basis
73 --                      of an existing project or template.
74 --
75 --Called subprograms: pa_project_core1.copy_project
76 --
77 --
78 --
79 --History:
80 --      31-JUL-1996        L. de Werker      Created
81 --      04-MAR-1997   L. de Werker  - workflow enabling added
82 --
83 --  22-DEC-97  jwhite    - Added OUT-parameter p_workflow_started
84 --             for workflow.
85 --      19-JAN-01       anlee           - Added l_team_template_id, l_country_code,
86 --                                        l_region, and l_city params for team template
87 --      09-MAY-02       Maansari        - Project Structure Integration
88 --                                      - Added call to PA_PROJ_TASK_STRUC.COPY_STRUCTURE api.
89 --      19-may-2003     sramesh         -Fixed the bug 2910972.Defaulting of the key member start
90 --                                       date
91 --    15-jul-2003      sramesh        -- Added the code for bug 2982057.
92 --                                       Changed the logic to populate the long_task_name
93 --                                       with task_name when the long_task_name is null.
94 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
95 --                                        dependency_type and lag days to tasks and create dependencies.
96 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
97 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
98 --      03-Mar-04       Puneet         3435905 FP M Changes for Deliverables : Start
99 --      17-Jun-2004     Avaithia       3683732 : Provided Default Values for p_class_categories and p_key_members parameters
100 --                                     In  Create_Project and Update_Project API
101 --      11-Dec-2005     Sunkalya       Bug 4870305: Modified create_project. Passed pm_product_code
102 --                                     parameter to the call to function check_unique_project_reference.Changes Tagged.
103 --      12-Feb-2009      KJai          Bug 7830143 : In Procedure Create_project, called PA_MOAC_UTILS.SET_POLICY_CONTEXT() to set context.
104 --
105 PROCEDURE Create_Project
106 (
107   p_api_version_number    IN  NUMBER
108  ,p_commit                IN  VARCHAR2  := FND_API.G_FALSE
109  ,p_init_msg_list         IN  VARCHAR2  := FND_API.G_FALSE
110  ,p_msg_count             OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
111  ,p_msg_data              OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
112  ,p_return_status         OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
113  ,p_workflow_started      OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
114  ,p_pm_product_code       IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
115  ,p_op_validate_flag      IN VARCHAR2   := 'Y' --added by rtarway 4218977
116  ,p_project_in            IN  project_in_rec_type
117  ,p_project_out           OUT NOCOPY  project_out_rec_type /*Added the nocopy check for bug 2674619*/
118   /* Added for tracking bug - add customers */
119  ,p_customers_in     IN  pa_project_pub.customer_tbl_type := G_customers_in_tbl
120 /* Added Default Value for p_class_categories and p_key_members */
121  ,p_key_members           IN  project_role_tbl_type := G_key_members_in_tbl
122  ,p_class_categories      IN  class_category_tbl_type := G_class_categories_in_tbl
123  ,p_tasks_in              IN  task_in_tbl_type
124  ,p_tasks_out             OUT NOCOPY  task_out_tbl_type /*added the nocopy check for the bug 2674619*/
125  -- anlee org role changes
126  ,p_org_roles             IN      project_role_tbl_type := G_org_roles_in_tbl
127 --project structures
128  ,p_structure_in          IN      structure_in_rec_type := G_structure_in_rec
129 -- ,p_structure_out    OUT  structure_out_rec_type := G_structure_out_rec
130  ,p_ext_attr_tbl_in       IN   PA_EXT_ATTR_TABLE_TYPE := G_ext_attr_in_tbl -- <EA added parameter for Ext Attr/>
131 --project structures
132 --FP M : deliverables
133  ,p_deliverables_in           IN  deliverable_in_tbl_type := G_deliverables_in_tbl -- 3435905 passing default value
134 -- ,p_deliverables_out          OUT NOCOPY  deliverable_out_tbl_type -- 3435905 removed
135  ,p_deliverable_actions_in    IN  action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default value
136 -- ,p_deliverable_actions_out   OUT NOCOPY  action_out_tbl_type -- 3435905 removed
137 --FP M : deliverables
138 )
139 IS
140 
141    --needed to get the overridable fields for this project template source
142 
143    CURSOR  l_override_fields_csr
144     (p_pa_source_template_id NUMBER)
145    IS
146    SELECT  DISTINCT *
147    FROM    pa_override_fields_v pof
148    WHERE  pof.pa_source_template_id = p_pa_source_template_id;
149 
150 
151    -- 4363092 TCA changes, replaced RA views with HZ tables
152    -- commented out below cursor as it is not used anywhere
153    --needed to default the address_id to that of the primary customer
154 /*
155    CURSOR  l_address_csr
156     (p_customer_id NUMBER)
157    IS
158    SELECT  a.address_id
159    FROM    ra_addresses a
160    ,    ra_site_uses su
161    WHERE  a.customer_id = p_customer_id
162    AND    a.address_id = su.address_id
163    AND    nvl(su.status,'A') = 'A'
164    AND    su.site_use_code = 'SHIP_TO'
165    AND    su.primary_flag = 'Y';
166    */
167    -- 4363092 end
168 
169    --needed for validation of distribution rule
170    CURSOR l_source_project_type_csr (p_source_template_id IN NUMBER )IS
171    SELECT project_type
172    FROM pa_projects
173    WHERE project_id = p_source_template_id;
174 
175 CURSOR l_get_wf_status_csr (l_project_id IN NUMBER)
176 IS
177 SELECT wf_status_code
178 FROM pa_projects
179 WHERE project_id = l_project_id;
180 
181 -- IC and Multi National Currency changes Starts ...
182 
183    Cursor l_customer_csr (p_customer_id NUMBER)
184    Is
185    Select inv_currency_code,
186           inv_rate_type,
187           inv_rate_date,
188           inv_exchange_rate,
189           allow_inv_user_rate_type_flag,
190           bill_another_project_flag,
191           receiver_task_id
192    From   pa_project_customers
193    Where  customer_id = p_customer_id;
194 
195 -- IC and Multi National Currency changes Ends ...
196 
197 -- below cursor added for bug 2254661
198    Cursor l_temp_flag_csr(p_proj_id NUMBER)
199    Is
200    select NVL(template_flag,'N')
201    from pa_projects
202    where project_id = p_proj_id;
203 
204    -- 5182868 Added below cursor to validate template for effectiveness
205 
206    Cursor l_temp_eff_flag_csr(p_proj_id NUMBER)
207    Is
208    select 'N'
209    from pa_projects_all
210    where project_id = p_proj_id
211      and template_flag = 'Y'
212      and ((nvl(trunc(template_start_date_active), trunc(sysdate)) > trunc(sysdate)) or
213       (nvl(trunc(template_end_date_active), trunc(sysdate)) < trunc(sysdate)));
214 
215    l_temp_eff_flag VARCHAR2(1) := 'Y'; -- added local variable
216 
217    -- 5182868 end
218 
219 /* added the below cursor for bug 3000981 */
220    CURSOR cur_pa_impl
221    IS
222    SELECT default_rate_type
223      FROM pa_implementations;
224 
225    TYPE override_fields_tbl_type IS TABLE OF l_override_fields_csr%rowtype
226      INDEX BY BINARY_INTEGER;
227 
228    l_api_name      CONSTANT  VARCHAR2(30)     := 'create_project';
229 
230    l_return_status        VARCHAR2(1);
231    l_copy_task_flag            VARCHAR2(1)  := 'N';  --used by copy_project
232    l_copy_budget_flag          VARCHAR2(1)  := 'N';  --idem
233    l_use_override_flag         VARCHAR2(1)  := 'Y';  --idem
234    l_copy_assignment_flag                       VARCHAR2(1)     := 'N';
235    l_template_flag             VARCHAR2(1)  := 'N';  --idem
236    l_err_code          NUMBER(15);
237    l_err_stage                 VARCHAR2(2000);
238    l_err_stack          VARCHAR2(2000);
239    i            NUMBER    := 0; --counter
240    j            NUMBER    := 0; --counter
241    l_is_overridable        BOOLEAN    := FALSE;
242    l_project_type_rec        pa_project_types%rowtype;
243    l_project_rec        pa_projects%rowtype;
244    l_project_in_rec        project_in_rec_type;
245    l_override_fields_rec      l_override_fields_csr%rowtype;
246    l_override_fields_tab      override_fields_tbl_type;
247    l_key_members        project_role_tbl_type;
248 -- anlee org role changes
249    l_org_roles                                  project_role_tbl_type;
250    l_class_categories                           class_category_tbl_type;
251    l_project_id          NUMBER;
252    l_task_id          NUMBER;
253    l_wbs_level          NUMBER    := 1;
254    l_top_task_id        NUMBER;
255    l_parent_task_id        NUMBER;
256    l_address_id          NUMBER;
257    l_task_in_rec        task_in_rec_type;
258    l_bill_to_address_id        NUMBER := NULL; --Initialized to NULL for Bug 3911782
259    l_ship_to_address_id        NUMBER := NULl; --Initialized to NULL for Bug 3911782
260    l_bill_to_contact_id        NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : Bug 4633405
261    l_ship_to_contact_id        NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : Bug 4633405
262    l_source_project_type                        VARCHAR2(80);
263    l_project_start_date                         DATE;
264    l_project_completion_date                    DATE;
265    l_msg_count          NUMBER ;
266    l_msg_data          VARCHAR2(2000);
267    l_function_allowed        VARCHAR2(1);
268    l_resp_id          NUMBER := 0;
269    l_proj_num_numeric                           NUMBER;
270    l_attribute_category        VARCHAR2(30);
271    l_attribute1          VARCHAR2(150);
272    l_attribute2          VARCHAR2(150);
273    l_attribute3          VARCHAR2(150);
274    l_attribute4          VARCHAR2(150);
275    l_attribute5          VARCHAR2(150);
276    l_attribute6          VARCHAR2(150);
277    l_attribute7          VARCHAR2(150);
278    l_attribute8          VARCHAR2(150);
279    l_attribute9          VARCHAR2(150);
280    l_attribute10        VARCHAR2        (150);
281    l_team_template_id                           NUMBER;
282    l_country_code                               VARCHAR2(2);
283    l_region                                     VARCHAR2(240);
284    l_city                                       VARCHAR2(80);
285 --Sakthi
286    l_agreement_currency        VARCHAR2(10);
287    l_agreement_amount          NUMBER;
288    l_agreement_org_id          NUMBER;
289 --Sakthi
290 -- Tax Code changes starts ...
291    l_output_tax_code                VARCHAR2(30);
292    l_retention_tax_code            VARCHAR2(30);
293 -- Tax Code changes ends ...
294 
295 -- CC and Multi National Currency Starts ...
296 -- Project ...
297    l_project_currency_code            VARCHAR2(15);
298    l_allow_cross_charge_flag          VARCHAR2(1);
299    l_project_rate_date                DATE;
300    l_project_rate_type                VARCHAR2(30);
301    l_cc_process_labor_flag            VARCHAR2(1);
302    l_labor_tp_schedule_id             NUMBER;
303    l_labor_tp_fixed_date              DATE;
304    l_cc_process_nl_flag            VARCHAR2(1);
305    l_nl_tp_schedule_id             NUMBER;
306    l_nl_tp_fixed_date              DATE;
307    l_cc_tax_task_id                NUMBER;
308 -- Customer ...
309    l_inv_currency_code              VARCHAR2(15);
310    l_inv_rate_type                  VARCHAR2(30);
311    l_inv_rate_date                  DATE;
312    l_inv_exchange_rate              NUMBER;
313    l_allow_inv_rate_type_fg         VARCHAR2(1);
314    l_bill_another_prj_flag          VARCHAR2(1);
315    l_receiver_task_id               NUMBER;
316 -- CC and Multi National Currency Ends ...
317 
318 -- ORM Changes Starts here ...
319 
320    l_role_list_id                     NUMBER;
321    l_work_type_id                     NUMBER;
322    l_calendar_id                      NUMBER;
323    l_location_id                      NUMBER;
324    l_probability_member_id            NUMBER;
325    l_project_value                    NUMBER;
326    l_expected_approval_date           DATE;
327    l_cost_job_group_id                NUMBER;
328    l_bill_job_group_id                NUMBER;
329 
330 -- ORM Changes Ends here ...
331 
332    l_emp_bill_rate_schedule_id        NUMBER;
333    l_job_bill_rate_schedule_id        NUMBER;
334 
335 -- opportunity value changes
336 -- anlee
337    l_opp_value_currency_code          VARCHAR2(15);
338 -- end of opportunity value changes
339 --Priority Code in quick entry
340    l_priority_code                    VARCHAR2(30);
341    l_security_level                   NUMBER;
342 
343    l_project_number_out                         VARCHAR2(30);
344    l_actual_start_date               DATE;
345    l_actual_finish_date       DATE;
346    l_early_start_date               DATE;
347    l_early_finish_date               DATE;
348    l_late_start_date               DATE;
349    l_late_finish_date               DATE;
350    l_scheduled_start_date       DATE;
351    l_scheduled_finish_date       DATE;
352    l_out_start_date        DATE;
353    l_out_completion_date      DATE;
354    l_error_code                NUMBER;
355    l_error_message        VARCHAR2(100);
356    l_relationship_type                          VARCHAR2(30);
357    l_wf_status_code                             VARCHAR2(30);
358    l_create_project_number                      VARCHAR2(25);
359 
360 
361 --used for starting approve_project workflow
362    l_workflow_is_used         VARCHAR2(1);
363    l_start_wf_automatically       VARCHAR2(1);
364    p_multiple_task_msg           VARCHAR2(1) := 'T';
365    l_class_code_categories                      NUMBER;
366    l_key_member                                 NUMBER;
367 --below two variables added for bug 2254661
368   l_created_from_proj_id                       NUMBER;
369   l_temp_flag                                  VARCHAR2(1);
370 --end 2254661
371 --anlee org role changes
372    l_org_role                                   NUMBER;
373    l_party_id                      NUMBER;
374    l_project_party_id              NUMBER;
375    l_resource_id                   NUMBER;
376    l_wf_item_type                  VARCHAR2(30);
377    l_wf_type                       VARCHAR2(30);
378    l_wf_party_process              VARCHAR2(30);
379    l_assignment_id                 NUMBER;
380    l_end_date_active               DATE;
381 
382    CURSOR l_check_org_csr(c_customer_id IN NUMBER)  IS
383    SELECT PARTY_ID
384    FROM PA_CUSTOMERS_V
385    WHERE CUSTOMER_ID = c_customer_id
386    AND   PARTY_TYPE = 'ORGANIZATION';
387 
388    --Project Structures
389    l_structure_in_rec             structure_in_rec_type;
390    v_task_id                      NUMBER;
391    v_parent_task_id               NUMBER;
392    l_amg_segment1       VARCHAR2(25);
393    l_amg_task_number       VARCHAR2(50);
394    l_task_version_id        NUMBER;
395    l_delta                  NUMBER;
396    --Project Structures
397 
398    --proj conn
399    v_first_index            NUMBER;
400    l_ref_task_id     NUMBER;
401    --proj conn
402 
403    -- <EA>
404    l_failed_row_id_list VARCHAR2(32767);
405    l_errorcode      VARCHAR2(150);
406    -- </EA>
407 
408    --Bug 2931183
409    l_debug_mode               varchar2(1);
410    g_module_name              VARCHAR2(100) := 'pa.plsql.CREATE_PROJECT';
411 
412   /* Bug 3077676 */
413    l_cust_acc_rel_code pa_implementations.cust_acc_rel_code%TYPE;
414    CURSOR get_cust_acc_rel_code IS
415    Select cust_acc_rel_code
416    From pa_implementations;
417 
418 -- FP-M Bug # 3301192
419    l_d_task_ver_id NUMBER;
420    l_d_task_id NUMBER;
421    l_d_structure_version_id NUMBER;
422    l_d_loop_count NUMBER;
423 
424    l_deliverable_id NUMBER; -- 3435905
425    i_actn           NUMBER := 0; -- 3435905
426 
427 --Begin Add by rtarway for FP.M Set Financial Task Changes
428    l_patask_record_version_number NUMBER;
429 --End Add by rtarway for FP.M Set Financial Task Changes
430 
431 --Bug 3279981
432      CURSOR cur_get_orig_tt_cust_flag( c_project_id IN NUMBER ) IS
433      SELECT enable_top_task_customer_flag
434      FROM   pa_projects_all
435      WHERE  project_id = c_project_id ;
436 
437      l_orig_def_tt_flag VARCHAR2(1);
438      l_cust_bill_split  NUMBER;
439      l_def_tt_cust_flag VARCHAR2(1);
440      l_en_top_task_customer_flag VARCHAR2(1);
441      l_en_top_task_inv_mth_flag  VARCHAR2(1);
442 
443 
444 
445 --Bug 3279981
446 l_dup_name_flag VARCHAR2(1); --bug 2450064
447 
448 l1 number;
449 l2 varchar2(1);
450 l3 number;
451 l4 varchar2(1);
452 
453 l_in_customer_id NUMBER; -- Added for the bug 3825528
454 
455 l_bug_wp_enabled  VARCHAR2(1); -- Bug 4146369
456 l_bug_fp_enabled  VARCHAR2(1); -- Bug 4146369
457 
458 /* Start of code for bug #2111806 */
459 
460 -- Start of Bug fix 4878696
461 -- Commented this cursor for Performance Bug 4878696
462 -- CURSOR c_prj(c_project_id IN NUMBER ) IS
463 -- select project_system_status_code
464 --    ,project_type_class_code
465 -- from pa_projects_v
466 -- where project_id = c_project_id;
467 
468 -- Added the following cursor instead of the commented one as above for Performance Bug 4878696
469 CURSOR c_prj(c_project_id IN NUMBER ) IS
470 select PROJECT_SYSTEM_STATUS_CODE , PROJECT_TYPE_CLASS_CODE
471        from pa_projects_all ppa,pa_project_statuses pps,pa_project_types ppt
472 where ppa.project_id = c_project_id
473   and ppa.PROJECT_STATUS_CODE = pps.PROJECT_STATUS_CODE
474   and ppa.PROJECT_TYPE = ppt.PROJECT_TYPE
475   and pps.STATUS_TYPE = 'PROJECT'
476   and ppt.ORG_ID= ppa.ORG_ID ;
477 
478 -- End of Bug fix 4878696
479 
480 CURSOR c_prj_count(c_project_id IN NUMBER ) IS
481 select count(*)
482   from pa_project_players
483  where project_id = c_project_id
484    and project_role_type='PROJECT MANAGER';
485 
486 l_proj_status       pa_projects_all.project_status_code%TYPE;
487 l_proj_type_class       pa_project_types_all.project_type_class_code%TYPE;
488 l_prj_mgr_count         NUMBER;
489 /* End of code for bug #2111806. */
490 
491 -- 4193743 Added below local variables
492 l_bill_to_customer_id NUMBER;
493 l_ship_to_customer_id NUMBER;
494 l_enable_top_task_cust_flag  VARCHAR2(1)    := 'N'; --added for tracking bug  by aditi
495 l_project_relationship_code PA_PROJECT_CUSTOMERS.PROJECT_RELATIONSHIP_CODE%TYPE; --Variable added by aditi for tracking bug
496 
497 -- 5191417 Added below cursor to validate priority_code
498 
499 l_valid_prio_code VARCHAR2(1) := 'N';
500 
501 CURSOR priority_code_csr(p_priority_code IN VARCHAR2) IS
502 Select
503         'Y'
504 from
505         pa_lookups
506 where
507         lookup_type = 'PA_PROJECT_PRIORITY_CODE'
508    and  lookup_code = p_priority_code ;
509 
510 -- 5191417 end
511 
512 -- Bug#5191699. Added the cursor and the local variable below for validating
513 --              project security level.This can be either 'Enterprise' or 'Secured'.
514 
515 l_check_sec_level       VARCHAR2(1) := 'N';
516 
517 CURSOR cur_check_sec_level(p_proj_sec_level IN VARCHAR2 ) IS
518 SELECT 'Y'  FROM
519 dual
520 WHERE EXISTS
521         (SELECT NULL FROM pa_lookups
522          WHERE
523                 lookup_type     =       'PA_PROJECT_ACCESS_LEVEL' AND
524                 lookup_code     =       p_proj_sec_level
525         );
526 -- End of code changes for Bug#5191699 in declare section
527 
528 --Bug#5191521.  Added the cursor and the local variable below for validating
529 --              probability member id.
530 
531 l_check_prob_id VARCHAR2(1) := 'N';
532 
533 CURSOR  cur_validate_prob_member( p_project_id IN NUMBER ,p_probability_member_id IN NUMBER )
534 IS
535 SELECT 'Y' FROM dual
536 WHERE  EXISTS
537         (
538                 SELECT
539                 NULL
540                 FROM
541                         pa_probability_members ppm,
542                         pa_projects pp,
543                         pa_project_types ppt
544                 WHERE
545                         pp.project_type                 =       ppt.project_type AND
546                         pp.org_id                       =       ppt.org_id AND
547                         ppt.probability_list_id         =       ppm.probability_list_id AND
548                         pp.project_id                   =       p_project_id AND
549                         ppm.probability_member_id       =       p_probability_member_id AND
550                         trunc(sysdate) BETWEEN ppm.start_date_active AND nvl(ppm.end_date_active,trunc(sysdate))
551         );
552 --End of code changes for Bug#5191521 in declare section
553 
554 
555     --sunkalya:federal bug#5511353
556      l_date_eff_funds_flag VARCHAR2(1);
557      l_orig_date_eff_funds_flag VARCHAR2(1);
558      CURSOR get_date_eff_funds_flag( c_project_id IN NUMBER )
559      IS
560      SELECT
561      nvl(DATE_EFF_FUNDS_CONSUMPTION,'N')
562      FROM
563      pa_projects_all
564      WHERE project_id = c_project_id ;
565 
566      /* 7508661 : EnC : Start */
567 
568      l_ar_rec_notify_flag VARCHAR2(1);
569      l_orig_ar_rec_notify_flag VARCHAR2(1);
570 
571      CURSOR get_ar_rec_notify_flag( c_project_id IN NUMBER )
572      IS
573      SELECT
574      nvl(AR_REC_NOTIFY_FLAG,'N')
575      FROM
576      pa_projects_all
577      WHERE project_id = c_project_id ;
578 
579      l_auto_release_pwp_inv VARCHAR2(1);
580      l_orig_auto_release_pwp_inv VARCHAR2(1);
581 
582      CURSOR get_auto_release_pwp_inv( c_project_id IN NUMBER )
583      IS
584      SELECT
585      nvl(AUTO_RELEASE_PWP_INV,'Y')
586      FROM
587      pa_projects_all
588      WHERE project_id = c_project_id ;
589 
590      /* 7508661 : EnC : End */
591 
592 	CURSOR cur_enable_funds_flag(p_project_id IN VARCHAR2)
593 	IS
594 	SELECT 'Y'
595 	FROM
596 	pa_projects_all p,
597 	pa_project_types_all pt
598 	WHERE
599 	p.project_id			=	p_project_id	AND
600 	pt.project_type_class_code	=	'CONTRACT'	AND
601 	p.project_type			=	pt.project_type AND
602 	pt.CC_PRVDR_FLAG		=	'N'		AND
603 	p.org_id			=	pt.org_id;
604 
605 
606 	l_enable_funds_flag	VARCHAR2(1);
607 
608 /*	CURSOR cur_rev_inv(p_project_id IN VARCHAR2)
609 	IS
610 	SELECT 'Y'
611 	FROM dual
612 	WHERE EXISTS
613 		(SELECT  NULL
614 		 FROM
615 		 pa_draft_revenues r
616 		 WHERE
617 		 r.project_id		=	p_project_id
618 		)
619 	OR EXISTS
620 		(SELECT  NULL
621 		 FROM
622 		 pa_draft_invoices i
623 		 WHERE
624 		 i.project_id		=	p_project_id
625 		);
626 	l_chk_rev_inv_flag	VARCHAR2(1) := NULL;
627 
628 */
629 	CURSOR chk_task_level_funding(p_project_id IN VARCHAR2)
630 	IS
631 	SELECT 'Y'
632 	FROM sys.dual
633 	WHERE exists
634 		(	select 1
635 			from  pa_summary_project_fundings
636 			where project_id = p_project_id
637 			and task_id is not null
638 		);
639 
640 	l_chk_task_level_funding VARCHAR2(1) := NULL;
641 
642 	CURSOR count_cust(p_project_id IN VARCHAR2)
643 	IS
644 	SELECT count(*)
645 	FROM pa_project_customers
646 	WHERE project_id =  p_project_id;
647 
648 	l_count_cust	VARCHAR2(1) := NULL;
649 
650      --sunkalya:federal bug#5511353
651 
652  /* Adding new cursor for bug 6408593 */
653 
654  CURSOR c_prj_key_role_type(c_key_role_meaning IN VARCHAR) IS
655  select project_role_type
656  from pa_project_role_types_vl
657  where meaning like c_key_role_meaning;
658 
659 /*Added for bug 7830143*/
660 CURSOR c_get_org_id(c_project_id NUMBER) IS
661 select org_id
662 from pa_projects_all
663 where project_id = c_project_id;
664 
665 l_org_id NUMBER ;
666 /*Added for bug 7830143*/
667 
668 BEGIN
669 
670 --  Standard begin of API savepoint
671 
672     SAVEPOINT create_project_pub;
673 
674     l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
675 --  Standard call to check for call compatibility.
676 
677 
678     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
679                                p_api_version_number  ,
680                                l_api_name         ,
681                                G_PKG_NAME         )
682     THEN
683 
684   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
685 
686     END IF;
687 
688 
689      l_resp_id := FND_GLOBAL.Resp_id;
690 
691 
692 --Bug#5559292
693 
694 G_PROJECT_NUMBER_GEN_MODE := PA_PROJECT_UTILS.GetProjNumMode;
695 G_PROJECT_NUMBER_TYPE     := PA_PROJECT_UTILS.GetProjNumType;
696 
697 --Bug#5559292
698 
699 
700     -- Actions performed using the APIs would be subject to
701     -- function security. If the responsibility does not allow
702     -- such functions to be executed, the API should not proceed further
703     -- since the user does not have access to such functions
704 
705     PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := null;  --bug 2471668 ( not in the project context )
706 
707     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
708       (p_api_version_number => p_api_version_number,
709        p_responsibility_id  => l_resp_id,
710        p_function_name      => 'PA_PM_CREATE_PROJECT',
711        p_msg_count      => l_msg_count,
712        p_msg_data           => l_msg_data,
713        p_return_status      => l_return_status,
714        p_function_allowed   => l_function_allowed
715        );
716 
717 
718      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
719       THEN
720       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
721 
722       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
723       THEN
724       RAISE FND_API.G_EXC_ERROR;
725       END IF;
726         IF l_function_allowed = 'N' THEN
727          pa_interface_utils_pub.map_new_amg_msg
728            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
729             ,p_msg_attribute    => 'CHANGE'
730             ,p_resize_flag      => 'Y'
731             ,p_msg_context      => 'GENERAL'
732             ,p_attribute1       => ''
733             ,p_attribute2       => ''
734             ,p_attribute3       => ''
735             ,p_attribute4       => ''
736             ,p_attribute5       => '');
737      p_project_out.return_status := FND_API.G_RET_STS_ERROR;
738      RAISE FND_API.G_EXC_ERROR;
739         END IF;
740 
741 
742     --  Initialize the message table if requested.
743 
744     IF FND_API.TO_BOOLEAN( p_init_msg_list )
745     THEN
746 
747   FND_MSG_PUB.initialize;
748 
749     END IF;
750 
751     --  Set API return status to success
752 
753     p_return_status     := FND_API.G_RET_STS_SUCCESS;
754     p_project_out.return_status := FND_API.G_RET_STS_SUCCESS;
755 
756 -- 22-DEC-97, jwhite:
757 --  Initialize New OUT-parameter to indicate workflow status
758 
759 -- Set Worflow Started Status -------------------------------------------------
760 
761     p_workflow_started    := 'N';
762 -- ------------------------------------------------------------------------------------
763 
764 
765 
766     --Move incoming project record to a local project record
767     --Needs to be done to change incoming values to default values
768 
769     l_project_in_rec := p_project_in;
770 
771     --project structures
772     l_structure_in_rec := p_structure_in;
773     --project structures
774 
775 --Added by rtarway for BUG 3703440, 3717026: Populate Global Structure Type Record
776     G_structure_in_rec.pa_project_id                  := l_structure_in_rec.pa_project_id;
777     G_structure_in_rec.structure_type                 := l_structure_in_rec.structure_type;
778     G_structure_in_rec.structure_version_name         := l_structure_in_rec.structure_version_name;
779     G_structure_in_rec.structure_version_id           := l_structure_in_rec.structure_version_id;
780     G_structure_in_rec.DESCRIPTION                    := l_structure_in_rec.DESCRIPTION;
781 --End Add by rtarway for BUG 3703440, 3717026
782 
783 
784 
785     -- CHECK FOR MANDATORY FIELDS
786     -- check whether mandatory incoming parameters exist
787     -- some of the fields for projects are checked by procedure COPY_PROJECT
788 --bug 2841158
789 --    IF p_pm_product_code IS NULL
790 --    OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
791     IF p_pm_product_code IS NOT NULL
792     AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
793 --bug 2841158
794     THEN
795 
796   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
797   THEN
798          pa_interface_utils_pub.map_new_amg_msg
799            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
800             ,p_msg_attribute    => 'CHANGE'
801             ,p_resize_flag      => 'N'
802             ,p_msg_context      => 'GENERAL'
803             ,p_attribute1       => ''
804             ,p_attribute2       => ''
805             ,p_attribute3       => ''
806             ,p_attribute4       => ''
807             ,p_attribute5       => '');
808   END IF;
809   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
810   p_return_status             := FND_API.G_RET_STS_ERROR;
811   RAISE FND_API.G_EXC_ERROR;
812     END IF;
813 
814 --bug 2841158
815     IF p_pm_product_code <> 'WORKPLAN'
816        AND p_pm_product_code IS NOT NULL
817        AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
818     THEN
819 --bug 2841158
820           /*added for bug no :2413400*/
821         OPEN p_product_code_csr (p_pm_product_code);
822         FETCH p_product_code_csr INTO l_pm_product_code;
823         CLOSE p_product_code_csr;
824 
825         IF l_pm_product_code <> 'X'
826         THEN
827 
828         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
829         THEN
830          pa_interface_utils_pub.map_new_amg_msg
831            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
832             ,p_msg_attribute    => 'CHANGE'
833             ,p_resize_flag      => 'N'
834             ,p_msg_context      => 'GENERAL'
835             ,p_attribute1       => ''
836             ,p_attribute2       => ''
837             ,p_attribute3       => ''
838             ,p_attribute4       => ''
839             ,p_attribute5       => '');
840         END IF;
841         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
842         p_return_status             := FND_API.G_RET_STS_ERROR;
843         RAISE FND_API.G_EXC_ERROR;
844         END IF;
845     END IF; --bug 2841158
846 
847     IF l_project_in_rec.pm_project_reference IS NULL
848     OR l_project_in_rec.pm_project_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
849     THEN
850 
851   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
852   THEN
853          pa_interface_utils_pub.map_new_amg_msg
854            ( p_old_message_code => 'PA_PROJECT_REF_IS_MISSING'
855             ,p_msg_attribute    => 'CHANGE'
856             ,p_resize_flag      => 'N'
857             ,p_msg_context      => 'PROJ'
858             ,p_attribute1       => l_project_in_rec.pm_project_reference
859             ,p_attribute2       => ''
860             ,p_attribute3       => ''
861             ,p_attribute4       => ''
862             ,p_attribute5       => '');
863   END IF;
864   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
865   p_return_status             := FND_API.G_RET_STS_ERROR;
866   RAISE FND_API.G_EXC_ERROR;
867     END IF;
868 
869     IF l_project_in_rec.project_name IS NULL
870     OR l_project_in_rec.project_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
871     THEN
872 
873   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
874   THEN
875          pa_interface_utils_pub.map_new_amg_msg
876            ( p_old_message_code => 'PA_PROJECT_NAME_IS_MISSING'
877             ,p_msg_attribute    => 'CHANGE'
878             ,p_resize_flag      => 'N'
879             ,p_msg_context      => 'PROJ'
880             ,p_attribute1       => l_project_in_rec.pm_project_reference
881             ,p_attribute2       => ''
882             ,p_attribute3       => ''
883             ,p_attribute4       => ''
884             ,p_attribute5       => '');
885   END IF;
886   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
887   p_return_status             := FND_API.G_RET_STS_ERROR;
888   RAISE FND_API.G_EXC_ERROR;
889     END IF;
890 
891 -- Ensure that Project name is unique
892 
893     IF  pa_project_utils.check_unique_project_name
894                  (l_project_in_rec.project_name,
895                   NULL ) = 0 THEN
896   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
897   THEN
898          pa_interface_utils_pub.map_new_amg_msg
899            ( p_old_message_code => 'PA_PR_EPR_PROJ_NAME_NOT_UNIQUE'
900             ,p_msg_attribute    => 'CHANGE'
901             ,p_resize_flag      => 'Y'
902             ,p_msg_context      => 'ADDP'
903             ,p_attribute1       => l_project_in_rec.pm_project_reference
904             ,p_attribute2       => ''
905             ,p_attribute3       => ''
906             ,p_attribute4       => ''
907             ,p_attribute5       => '');
908   END IF;
909   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
910   p_return_status             := FND_API.G_RET_STS_ERROR;
911   RAISE FND_API.G_EXC_ERROR;
912   /*Adding for the bug 2450064*/
913 ELSE
914   pjm_seiban_pkg.project_name_dup(l_project_in_rec.project_name,l_dup_name_flag);
915 
916   IF l_dup_name_flag = 'Y' THEN
917         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
918   THEN
919          pa_interface_utils_pub.map_new_amg_msg
920            ( p_old_message_code => 'PA_SEIBAN_NAME_NOT_UNIQUE'
921             ,p_msg_attribute    => 'CHANGE'
922             ,p_resize_flag      => 'Y'
923             ,p_msg_context      => 'ADDP'
924             ,p_attribute1       => l_project_in_rec.pm_project_reference
925             ,p_attribute2       => ''
926             ,p_attribute3       => ''
927             ,p_attribute4       => ''
928             ,p_attribute5       => '');
929   END IF;
930   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
931   p_return_status             := FND_API.G_RET_STS_ERROR;
932   RAISE FND_API.G_EXC_ERROR;
933   END IF;
934   /*Adding for the bug 2450064*/
935     END IF;
936 
937 -- Bug#2638968 Ensure that Long name is unique
938   IF l_project_in_rec.long_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
939      AND l_project_in_rec.long_name IS NOT NULL THEN
940     IF  pa_project_utils.check_unique_long_name
941                  (l_project_in_rec.long_name,
942                   NULL ) = 0 THEN
943         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
944         THEN
945          pa_interface_utils_pub.map_new_amg_msg
946            ( p_old_message_code => 'PA_PR_EPR_LONG_NAME_NOT_UNIQUE'
947             ,p_msg_attribute    => 'CHANGE'
948             ,p_resize_flag      => 'Y'
949             ,p_msg_context      => 'ADDP'
950             ,p_attribute1       => l_project_in_rec.pm_project_reference
951             ,p_attribute2       => ''
952             ,p_attribute3       => ''
953             ,p_attribute4       => ''
954             ,p_attribute5       => '');
955         END IF;
956         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
957         p_return_status             := FND_API.G_RET_STS_ERROR;
958         RAISE FND_API.G_EXC_ERROR;
959     END IF;
960   END IF;
961 
962   -- bug#3014919: Ensure Project Reference is unique
963   IF l_project_in_rec.pm_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
964      AND l_project_in_rec.pm_project_reference IS NOT NULL THEN
965      IF  pa_project_utils.check_unique_project_reference
966                     (l_project_in_rec.pm_project_reference,
967                      p_pm_product_code,  -- added for bug 4870305
968                      NULL ) = 0
969      THEN
970         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
971         THEN
972             pa_interface_utils_pub.map_new_amg_msg
973               ( p_old_message_code => 'PA_PROJECT_REF_NOT_UNIQUE'
974                ,p_msg_attribute    => 'CHANGE'
975                ,p_resize_flag      => 'Y'
976                ,p_msg_context      => 'ADDP'
977                   ,p_attribute1       => l_project_in_rec.pm_project_reference
978                ,p_attribute2       => ''
979                ,p_attribute3       => ''
980                ,p_attribute4       => ''
981                   ,p_attribute5       => '');
982         END IF;
983      p_project_out.return_status := FND_API.G_RET_STS_ERROR;
984      p_return_status             := FND_API.G_RET_STS_ERROR;
985      RAISE FND_API.G_EXC_ERROR;
986     END IF;
987   END IF;
988 
989 -- Check for implementation defined Project number generation mode
990 -- If project number generation is manual then input project
991 -- reference would be copied to project number
992 -- Hence, need to ensure that this is unique
993 -- First check whether a project number is passed.If so , use that
994 -- else use the project reference
995 
996   IF (l_project_in_rec.pa_project_number IS NOT NULL AND
997      l_project_in_rec.pa_project_number <>
998      PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  THEN
999      l_create_project_number := l_project_in_rec.pa_project_number;
1000   ELSE
1001      l_create_project_number := l_project_in_rec.pm_project_reference;
1002   END IF;
1003 
1004 
1005   IF G_PROJECT_NUMBER_GEN_MODE = 'MANUAL' THEN
1006       IF  pa_project_utils.check_unique_project_number
1007           (l_create_project_number,
1008            NULL ) = 0 THEN
1009   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1010          pa_interface_utils_pub.map_new_amg_msg
1011            ( p_old_message_code => 'PA_PR_EPR_PROJ_NUM_NOT_UNIQUE'
1012             ,p_msg_attribute    => 'CHANGE'
1013             ,p_resize_flag      => 'Y'
1014             ,p_msg_context      => 'ADDP'
1015             ,p_attribute1       => l_project_in_rec.pm_project_reference
1016             ,p_attribute2       => ''
1017             ,p_attribute3       => ''
1018             ,p_attribute4       => ''
1019             ,p_attribute5       => '');
1020   END IF;
1021   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1022   p_return_status             := FND_API.G_RET_STS_ERROR;
1023   RAISE FND_API.G_EXC_ERROR;
1024       /*Adding for the bug 2450064*/
1025   ELSE
1026     pjm_seiban_pkg.project_number_dup(l_create_project_number,l_dup_name_flag);
1027 
1028     IF l_dup_name_flag = 'Y' THEN
1029           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1030     THEN
1031            pa_interface_utils_pub.map_new_amg_msg
1032              ( p_old_message_code => 'PA_SEIBAN_NUM_NOT_UNIQUE'
1033               ,p_msg_attribute    => 'CHANGE'
1034               ,p_resize_flag      => 'Y'
1035               ,p_msg_context      => ' '
1036               ,p_attribute1       => l_project_in_rec.pm_project_reference
1037               ,p_attribute2       => ''
1038               ,p_attribute3       => ''
1039               ,p_attribute4       => ''
1040               ,p_attribute5       => '');
1041     END IF;
1042     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1043     p_return_status             := FND_API.G_RET_STS_ERROR;
1044         RAISE FND_API.G_EXC_ERROR;
1045   END IF;
1046   /*Adding for the bug 2450064*/
1047       END IF;
1048       -- Check for project number being numeric if project number type is
1049       -- defined as numeric
1050 
1051          BEGIN
1052           IF G_PROJECT_NUMBER_TYPE = 'NUMERIC' THEN
1053              l_proj_num_numeric  :=
1054                TO_NUMBER(l_create_project_number);
1055           END IF;
1056          EXCEPTION
1057           WHEN VALUE_ERROR THEN
1058       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1059           pa_interface_utils_pub.map_new_amg_msg
1060            ( p_old_message_code => 'PA_PR_NUMERIC_NUM_REQ'
1061             ,p_msg_attribute    => 'CHANGE'
1062             ,p_resize_flag      => 'N'
1063             ,p_msg_context      => 'PROJ'
1064             ,p_attribute1       => l_project_in_rec.pm_project_reference
1065             ,p_attribute2       => ''
1066             ,p_attribute3       => ''
1067             ,p_attribute4       => ''
1068             ,p_attribute5       => '');
1069       END IF;
1070       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1071       p_return_status             := FND_API.G_RET_STS_ERROR;
1072       RAISE FND_API.G_EXC_ERROR;
1073          END ;
1074   END IF;
1075 
1076     IF l_project_in_rec.created_from_project_id IS NULL
1077     OR l_project_in_rec.created_from_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1078     THEN
1079 
1080           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1081           THEN
1082                  pa_interface_utils_pub.map_new_amg_msg
1083                    ( p_old_message_code => 'PA_SOURCE_TEMPLATE_IS_MISSING'
1084                     ,p_msg_attribute    => 'CHANGE'
1085                     ,p_resize_flag      => 'Y'
1086                     ,p_msg_context      => 'PROJ'
1087                     ,p_attribute1       => l_project_in_rec.pm_project_reference
1088                     ,p_attribute2       => ''
1089                     ,p_attribute3       => ''
1090                     ,p_attribute4       => ''
1091                     ,p_attribute5       => '');
1092           END IF;
1093           p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1094           RAISE FND_API.G_EXC_ERROR;
1095     END IF;
1096 
1097     -- mandatory fields for tasks is checked here
1098 
1099 /*Added for bug 7830143*/
1100             OPEN c_get_org_id(l_project_in_rec.created_from_project_id);
1101 	    FETCH c_get_org_id INTO l_org_id;
1102 	    CLOSE c_get_org_id;
1103 
1104 	    IF NVL(PA_MOAC_UTILS.GET_CURRENT_ORG_ID,-1234) <>  l_org_id THEN
1105 		PA_MOAC_UTILS.SET_POLICY_CONTEXT('S', l_org_id);
1106 	    END IF;
1107 /*Added for bug 7830143*/
1108 
1109      -- code addition for bug 2254661 starts
1110         Open l_temp_flag_csr(l_project_in_rec.created_from_project_id);
1111         FETCH l_temp_flag_csr INTO l_temp_flag;
1112         IF l_temp_flag_csr%NOTFOUND
1113         THEN
1114                CLOSE l_temp_flag_csr;
1115                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1116                THEN
1117                   pa_interface_utils_pub.map_new_amg_msg
1118                    ( p_old_message_code => 'PA_SOURCE_TEMPLATE_INVALID'
1119                     ,p_msg_attribute    => 'CHANGE'
1120                     ,p_resize_flag      => 'N'
1121                     ,p_msg_context      => 'PROJ'
1122                     ,p_attribute1       => l_project_in_rec.pm_project_reference
1123                     ,p_attribute2       => ''
1124                     ,p_attribute3       => ''
1125                     ,p_attribute4       => ''
1126                     ,p_attribute5       => '');
1127                 END IF;
1128                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1129                 RAISE FND_API.G_EXC_ERROR;
1130         END IF;
1131         CLOSE l_temp_flag_csr;
1132 
1133      if l_temp_flag = 'Y' then
1134 
1135         -- 5182868 Validate the template for effectiveness
1136 
1137         Open l_temp_eff_flag_csr(l_project_in_rec.created_from_project_id);
1138         FETCH l_temp_eff_flag_csr INTO l_temp_eff_flag;
1139         CLOSE l_temp_eff_flag_csr;
1140 
1141         -- if template is inactive then throw error message
1142 
1143         IF l_temp_eff_flag = 'N' THEN
1144 
1145                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1146 
1147                 pa_utils.add_message
1148                  (
1149                    p_app_short_name   => 'PA'
1150                   ,p_msg_name         => 'PA_TEMPLATE_NOT_ACTIVE'
1151                  );
1152 
1153                 END IF;
1154 
1155                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1156                 RAISE FND_API.G_EXC_ERROR;
1157 
1158         END IF;
1159 
1160         -- 5182868 end
1161 
1162         l_created_from_proj_id := l_project_in_rec.created_from_project_id;
1163      else
1164         select created_from_project_id into l_created_from_proj_id
1165         from pa_projects_all
1166         where project_id = l_project_in_rec.created_from_project_id;
1167      end if;
1168     --code addition for bug 2254661 ends
1169 
1170 
1171     --CHECK FOR OVERRIDABILITY
1172     --get all the overridable fields for this project template source
1173     --changed the argument to the cursor below for bug 2254661
1174     OPEN l_override_fields_csr(l_created_from_proj_id);
1175     i := 0;
1176     LOOP
1177       i := i + 1;
1178       FETCH l_override_fields_csr INTO l_override_fields_rec;
1179       EXIT WHEN l_override_fields_csr%NOTFOUND;
1180       l_override_fields_tab(i) := l_override_fields_rec;
1181 
1182     END LOOP;
1183     i := 0;
1184     CLOSE l_override_fields_csr;
1185 
1186 ----dbms_output.put_line('Checking for Customer Overridability');
1187 --example of how to check for overridability
1188 /*
1189     ELSE
1190       l_is_overridable := FALSE;
1191   i := l_override_fields_tab.first;
1192   WHILE i IS NOT NULL LOOP
1193     IF l_override_fields_tab(i).pa_field_name = 'DESCRIPTION'
1194     THEN
1195       l_is_overridable := TRUE;
1196       EXIT;
1197     END IF;
1198     i := l_override_fields_tab.next(i);
1199   END LOOP;
1200 
1201   IF NOT l_is_overridable
1202   THEN
1203       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1204       THEN
1205         FND_MESSAGE.SET_NAME('PA','PA_DESCRIPTION_NOT_OVERRIDABLE');
1206         FND_MSG_PUB.add;
1207       END IF;
1208 
1209       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1210       RAISE FND_API.G_EXC_ERROR;
1211   END IF;
1212 */
1213 /* Code below is added for Customer Issue tracking bug. Customer Can still continue to project_in_rec_type to insert customers
1214   or can use the new record type for the same. However he cannot use both together in the same script*/
1215   ----dbms_output.put_line('Checking for Customer Overridability -- print till here ');
1216 ----dbms_output.put_line('value of l_project_in_rec.customer_id'||l_project_in_rec.customer_id);
1217 ------dbms_output.put_line('value of p_customers_in(1).customer_id'||p_customers_in(1).customer_id);
1218 
1219 i := p_customers_in.first;
1220 ----dbms_output.put_line('value of i'||i);
1221 IF NOT(p_customers_in.exists(i)) THEN
1222  If l_project_in_rec.customer_id IS NOT NULL Then
1223  l_in_customer_id := l_project_in_rec.customer_id;
1224  l_bill_to_customer_id := l_project_in_rec.bill_to_customer_id;
1225  l_ship_to_customer_id := l_project_in_rec.ship_to_customer_id;
1226  l_bill_to_address_id := l_project_in_rec.bill_to_address_id;
1227  l_ship_to_address_id := l_project_in_rec.ship_to_address_id;
1228 
1229  /* commenting this code for Bug#5517655 */
1230  /*
1231  If l_project_in_rec.project_relationship_code IS NULL OR l_project_in_rec.project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1232  Then
1233 
1234 
1235                 l_project_relationship_code := 'Primary';
1236 
1237  Else
1238 
1239 
1240                 l_project_relationship_code := l_project_in_rec.project_relationship_code;
1241 
1242  End If;
1243 
1244  */ --  End of commenting for Bug#5517655
1245 
1246  l_cust_bill_split := 100; --default contribution for any customer that is being created
1247  l_enable_top_task_cust_flag := l_project_in_rec.enable_top_task_customer_flag;
1248  End If;
1249 ElSIF p_customers_in(i).customer_id IS NOT NULL then
1250   ------dbms_output.put_line('Comes in this loop');
1251  l_in_customer_id := p_customers_in(1).customer_id;
1252  l_bill_to_customer_id:=p_customers_in(1).bill_to_customer_id;
1253  l_ship_to_customer_id:=p_customers_in(1).ship_to_customer_id;
1254  l_bill_to_address_id :=p_customers_in(1).bill_to_address_id;
1255  l_ship_to_address_id :=p_customers_in(1).ship_to_address_id;
1256 
1257  /* commenting this code for Bug#5517655 */
1258  /*
1259  If p_customers_in(1).PROJECT_RELATIONSHIP_CODE IS NULL OR p_customers_in(1).PROJECT_RELATIONSHIP_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1260  Then
1261 
1262                 l_project_relationship_code := 'Primary';
1263  Else
1264 
1265                 l_project_relationship_code := p_customers_in(1).PROJECT_RELATIONSHIP_CODE;
1266  End If;
1267  */ -- End of commenting for Bug#5517655
1268  l_cust_bill_split := p_customers_in(1).Customer_Bill_Split;
1269  End If;
1270 
1271 ----dbms_output.put_line('value of l_in_customer_id'||l_in_customer_id);
1272 ----dbms_output.put_line('value of l_bill_to_customer_id'||l_bill_to_customer_id);
1273 ----dbms_output.put_line('value of l_ship_to_customer_id'||l_ship_to_customer_id);
1274 ----dbms_output.put_line('value of l_bill_to_address_id'||l_bill_to_address_id);
1275 ----dbms_output.put_line('value of l_ship_to_address_id'||l_ship_to_address_id);
1276 ----dbms_output.put_line('value of l_project_relationship_code'||l_project_relationship_code);
1277 ----dbms_output.put_line('value of l_cust_bill_split'||l_cust_bill_split);
1278 
1279  /* End of code changes for tracking bug */
1280 
1281 /*Start Code for Bug 6408593 */
1282 
1283 l_key_members := p_key_members;
1284 
1285 i := l_key_members.first;
1286 WHILE i IS NOT NULL LOOP
1287    IF(l_key_members(i).project_role_meaning <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1288    THEN
1289      OPEN c_prj_key_role_type(l_key_members(i).project_role_meaning);
1290      FETCH c_prj_key_role_type INTO l_key_members(i).project_role_type;
1291      CLOSE c_prj_key_role_type;
1292    END IF;
1293    i := l_key_members.next(i);
1294 END LOOP;
1295 /*End Code for Bug 6408593 */
1296 
1297 /* code added for the bug#1891621, starts here  */
1298     i := l_override_fields_tab.first;
1299 
1300     WHILE i IS NOT NULL LOOP
1301       IF l_override_fields_tab(i).mandatory_flag = 'Y' THEN
1302         IF l_override_fields_tab(i).pa_field_name = 'CARRYING_OUT_ORGANIZATION_ID' THEN
1303           IF l_project_in_rec.carrying_out_organization_id IS NULL
1304            OR l_project_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1305           THEN
1306 
1307             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1308             THEN
1309             pa_interface_utils_pub.map_new_amg_msg
1310             ( p_old_message_code => 'PA_ORGANIZATION_ID_IS_NULL'
1311              ,p_msg_attribute    => 'CHANGE'
1312              ,p_resize_flag      => 'N'
1313              ,p_msg_context      => 'PROJ'
1314              ,p_attribute1       => l_project_in_rec.pm_project_reference
1315              ,p_attribute2       => 'Organization'
1316              ,p_attribute3       => ''
1317              ,p_attribute4       => ''
1318              ,p_attribute5       => '');
1319             END IF;
1320             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1321             p_return_status             := FND_API.G_RET_STS_ERROR;
1322             RAISE FND_API.G_EXC_ERROR;
1323 
1324           END IF;
1325 
1326         ELSIF l_override_fields_tab(i).pa_field_name = 'CLASSIFICATION' THEN
1327 
1328           l_class_categories := p_class_categories;
1329           j := l_class_categories.first;
1330 
1331           IF j IS NULL THEN
1332 
1333             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1334             THEN
1335             pa_interface_utils_pub.map_new_amg_msg
1336             ( p_old_message_code => 'PA_CLASSIFICATION_IS_NULL'
1337              ,p_msg_attribute    => 'CHANGE'
1338              ,p_resize_flag      => 'N'
1339              ,p_msg_context      => 'PROJ'
1340              ,p_attribute1       => l_project_in_rec.pm_project_reference
1341              ,p_attribute2       => ''
1342              ,p_attribute3       => ''
1343              ,p_attribute4       => ''
1344              ,p_attribute5       => '');
1345             END IF;
1346             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1347             p_return_status             := FND_API.G_RET_STS_ERROR;
1348             RAISE FND_API.G_EXC_ERROR;
1349 
1350           END IF;
1351 
1352           l_class_code_categories := 0;
1353 
1354           WHILE j IS NOT NULL LOOP
1355             IF upper(l_override_fields_tab(i).type) = upper(l_class_categories(j).class_category)
1356             AND l_class_categories(j).class_code IS NOT NULL
1357             THEN
1358              l_class_code_categories := 1;
1359               -- check whether the class category and class code combination is a valid one
1360              IF pa_project_pvt.check_class_code_valid(l_class_categories(j).class_category,
1361                                        l_class_categories(j).class_code) = 'N'
1362              THEN
1363                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1364                THEN
1365                pa_interface_utils_pub.map_new_amg_msg
1366               ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
1367                ,p_msg_attribute    => 'CHANGE'
1368                ,p_resize_flag      => 'N'
1369                ,p_msg_context      => 'PROJ'
1370                ,p_attribute1       => l_project_in_rec.pm_project_reference
1371                ,p_attribute2       => ''
1372                ,p_attribute3       => ''
1373                ,p_attribute4       => ''
1374                ,p_attribute5       => '');
1375                END IF;
1376                p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1377                p_return_status             := FND_API.G_RET_STS_ERROR;
1378                RAISE FND_API.G_EXC_ERROR;
1379              END IF;
1380 
1381              EXIT;
1382             END IF;
1383             j := l_class_categories.next(j);
1384           END LOOP;
1385 
1386           IF l_class_code_categories <> 1
1387           THEN
1388             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1389             THEN
1390              pa_interface_utils_pub.map_new_amg_msg
1391               ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
1392                ,p_msg_attribute    => 'CHANGE'
1393                ,p_resize_flag      =>'N' --'Y'is Replaced with 'N';bug#1891621
1394                ,p_msg_context      => 'PROJ'
1395                ,p_attribute1       => l_project_in_rec.pm_project_reference
1396                ,p_attribute2       => ''
1397                ,p_attribute3       => ''
1398                ,p_attribute4       => ''
1399                ,p_attribute5       => '');
1400              END IF;
1401              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1402              p_return_status             := FND_API.G_RET_STS_ERROR;
1403              RAISE FND_API.G_EXC_ERROR;
1404           END IF;
1405         ELSIF l_override_fields_tab(i).pa_field_name = 'COMPLETION_DATE' THEN
1406           IF l_project_in_rec.completion_date IS NULL
1407            OR l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1408           THEN
1409 
1410             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1411             THEN
1412             pa_interface_utils_pub.map_new_amg_msg
1413             ( p_old_message_code => 'PA_COMPLETION_DATE_IS_NULL'
1414              ,p_msg_attribute    => 'CHANGE'
1415              ,p_resize_flag      => 'N'
1416              ,p_msg_context      => 'PROJ'
1417              ,p_attribute1       => l_project_in_rec.pm_project_reference
1418              ,p_attribute2       => ''
1419              ,p_attribute3       => ''
1420              ,p_attribute4       => ''
1421              ,p_attribute5       => '');
1422             END IF;
1423             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1424             p_return_status             := FND_API.G_RET_STS_ERROR;
1425             RAISE FND_API.G_EXC_ERROR;
1426 
1427           END IF;
1428 
1429         ELSIF l_override_fields_tab(i).pa_field_name = 'START_DATE' THEN
1430           IF l_project_in_rec.start_date IS NULL
1431            OR l_project_in_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1432           THEN
1433 
1434             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1435             THEN
1436             pa_interface_utils_pub.map_new_amg_msg
1437             ( p_old_message_code => 'PA_START_DATE_IS_NULL'
1438              ,p_msg_attribute    => 'CHANGE'
1439              ,p_resize_flag      => 'N'
1440              ,p_msg_context      => 'PROJ'
1441              ,p_attribute1       => l_project_in_rec.pm_project_reference
1442              ,p_attribute2       => ''
1443              ,p_attribute3       => ''
1444              ,p_attribute4       => ''
1445              ,p_attribute5       => '');
1446             END IF;
1447             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1448             p_return_status             := FND_API.G_RET_STS_ERROR;
1449             RAISE FND_API.G_EXC_ERROR;
1450 
1451           END IF;
1452         ELSIF l_override_fields_tab(i).pa_field_name = 'CUSTOMER_NAME' THEN
1453          /* Code commented for tracking bug
1454          IF l_project_in_rec.customer_id IS NULL
1455            OR l_project_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1456             /* Code added for tracking bug by aditi */
1457             ----dbms_output.put_line('value of l_in_customer_id'||l_in_customer_id);
1458          IF l_in_customer_id IS NULL
1459            OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1460             /* End of Code changes */
1461           THEN
1462             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1463             THEN
1464             pa_interface_utils_pub.map_new_amg_msg
1465             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
1466              ,p_msg_attribute    => 'CHANGE'
1467              ,p_resize_flag      => 'N'
1468              ,p_msg_context      => 'PROJ'
1469              ,p_attribute1       => l_project_in_rec.pm_project_reference
1470              ,p_attribute2       => ''
1471              ,p_attribute3       => ''
1472              ,p_attribute4       => ''
1473              ,p_attribute5       => '');
1474             END IF;
1475             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1476             p_return_status             := FND_API.G_RET_STS_ERROR;
1477             RAISE FND_API.G_EXC_ERROR;
1478 
1479           END IF;
1480 
1481 --Customer Account relationship Changes:
1482 
1483         ELSIF l_override_fields_tab(i).pa_field_name = 'BILL_TO_CUSTOMER' THEN
1484           /* Code commented for tracking bug
1485           IF l_project_in_rec.bill_to_customer_id IS NULL
1486            OR l_project_in_rec.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1487            /* Code added for tracking bug by aditi */
1488            IF l_bill_to_customer_id IS NULL
1489            OR l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1490             /* End of Code changes */
1491           THEN
1492 
1493             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1494             THEN
1495             pa_interface_utils_pub.map_new_amg_msg
1496             ( p_old_message_code => 'PA_BILL_TO_CUST_ID_IS_NULL'
1497              ,p_msg_attribute    => 'CHANGE'
1498              ,p_resize_flag      => 'N'
1499              ,p_msg_context      => 'PROJ'
1500              ,p_attribute1       => l_project_in_rec.pm_project_reference
1501              ,p_attribute2       => ''
1502              ,p_attribute3       => ''
1503              ,p_attribute4       => ''
1504              ,p_attribute5       => '');
1505             END IF;
1506             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1507             p_return_status             := FND_API.G_RET_STS_ERROR;
1508             RAISE FND_API.G_EXC_ERROR;
1509 
1510           END IF;
1511 
1512         ELSIF l_override_fields_tab(i).pa_field_name = 'SHIP_TO_CUSTOMER' THEN
1513          /* Code commented for tracking bug
1514           IF l_project_in_rec.ship_to_customer_id IS NULL
1515            OR l_project_in_rec.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1516             /* Code added for tracking bug by aditi */
1517         IF l_ship_to_customer_id IS NULL
1518            OR l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1519              /* End of Code changes */
1520           THEN
1521 
1522             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1523             THEN
1524             pa_interface_utils_pub.map_new_amg_msg
1525             ( p_old_message_code => 'PA_SHIP_TO_CUST_ID_IS_NULL'
1526              ,p_msg_attribute    => 'CHANGE'
1527              ,p_resize_flag      => 'N'
1528              ,p_msg_context      => 'PROJ'
1529              ,p_attribute1       => l_project_in_rec.pm_project_reference
1530              ,p_attribute2       => ''
1531              ,p_attribute3       => ''
1532              ,p_attribute4       => ''
1533              ,p_attribute5       => '');
1534             END IF;
1535             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1536             p_return_status             := FND_API.G_RET_STS_ERROR;
1537             RAISE FND_API.G_EXC_ERROR;
1538 
1539           END IF;
1540 
1541 ----dbms_output.put_line('Overriding bill to cst and ship to cst');
1542 
1543         ELSIF l_override_fields_tab(i).pa_field_name = 'DESCRIPTION' THEN
1544           IF l_project_in_rec.description IS NULL
1545            OR l_project_in_rec.description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1546           THEN
1547 
1548             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1549             THEN
1550             pa_interface_utils_pub.map_new_amg_msg
1551             ( p_old_message_code => 'PA_DESCRIPTION_IS_NULL'
1552              ,p_msg_attribute    => 'CHANGE'
1553              ,p_resize_flag      => 'N'
1554              ,p_msg_context      => 'PROJ'
1555              ,p_attribute1       => l_project_in_rec.pm_project_reference
1556              ,p_attribute2       => ''
1557              ,p_attribute3       => ''
1558              ,p_attribute4       => ''
1559              ,p_attribute5       => '');
1560             END IF;
1561             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1562             p_return_status             := FND_API.G_RET_STS_ERROR;
1563             RAISE FND_API.G_EXC_ERROR;
1564 
1565           END IF;
1566 
1567         ELSIF l_override_fields_tab(i).pa_field_name = 'KEY_MEMBER' THEN
1568 
1569     --       l_key_members := p_key_members; Commented for Bug 6408593
1570           j := l_key_members.first;
1571 
1572           IF j IS NULL THEN
1573 
1574             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1575             THEN
1576             pa_interface_utils_pub.map_new_amg_msg
1577             ( p_old_message_code => 'PA_KEY_MEMBER_IS_NULL'
1578              ,p_msg_attribute    => 'CHANGE'
1579              ,p_resize_flag      => 'N'
1580              ,p_msg_context      => 'PROJ'
1581              ,p_attribute1       => l_project_in_rec.pm_project_reference
1582              ,p_attribute2       => ''
1583              ,p_attribute3       => ''
1584              ,p_attribute4       => ''
1585              ,p_attribute5       => '');
1586             END IF;
1587             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1588             p_return_status             := FND_API.G_RET_STS_ERROR;
1589             RAISE FND_API.G_EXC_ERROR;
1590 
1591           END IF;
1592 
1593           l_key_member := 0;
1594 
1595           WHILE j IS NOT NULL LOOP
1596             IF upper(l_override_fields_tab(i).type) = upper(l_key_members(j).project_role_type)
1597             AND l_key_members(j).person_id IS NOT NULL
1598             THEN
1599              l_key_member := 1;
1600              EXIT;
1601             END IF;
1602             j := l_key_members.next(j);
1603           END LOOP;
1604 
1605           IF l_key_member <> 1
1606           THEN
1607             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1608             THEN
1609              pa_interface_utils_pub.map_new_amg_msg
1610               ( p_old_message_code => 'PA_KEY_MEMBER_IS_NULL'
1611                ,p_msg_attribute    => 'CHANGE'
1612                ,p_resize_flag      => 'N'
1613                ,p_msg_context      => 'PROJ'
1614                ,p_attribute1       => l_project_in_rec.pm_project_reference
1615                ,p_attribute2       => ''
1616                ,p_attribute3       => ''
1617                ,p_attribute4       => ''
1618                ,p_attribute5       => '');
1619              END IF;
1620              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1621              p_return_status             := FND_API.G_RET_STS_ERROR;
1622              RAISE FND_API.G_EXC_ERROR;
1623           END IF;
1624 
1625         ELSIF l_override_fields_tab(i).pa_field_name = 'DISTRIBUTION_RULE' THEN
1626           IF l_project_in_rec.distribution_rule IS NULL
1627            OR l_project_in_rec.distribution_rule = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1628           THEN
1629 
1630             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1631             THEN
1632             pa_interface_utils_pub.map_new_amg_msg
1633             ( p_old_message_code => 'PA_DISTRIBUTION_RULE_NULL'
1634              ,p_msg_attribute    => 'CHANGE'
1635              ,p_resize_flag      => 'N'
1636              ,p_msg_context      => 'PROJ'
1637              ,p_attribute1       => l_project_in_rec.pm_project_reference
1638              ,p_attribute2       => ''
1639              ,p_attribute3       => ''
1640              ,p_attribute4       => ''
1641              ,p_attribute5       => '');
1642             END IF;
1643             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1644             p_return_status             := FND_API.G_RET_STS_ERROR;
1645             RAISE FND_API.G_EXC_ERROR;
1646 
1647           END IF;
1648 
1649         ELSIF l_override_fields_tab(i).pa_field_name = 'PROJECT_STATUS_CODE' THEN
1650           IF l_project_in_rec.project_status_code IS NULL
1651            OR l_project_in_rec.project_status_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1652           THEN
1653             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1654             THEN
1655             pa_interface_utils_pub.map_new_amg_msg
1656             ( p_old_message_code => 'PA_PRJ_STATUS_CODE_IS_NULL'
1657              ,p_msg_attribute    => 'CHANGE'
1658              ,p_resize_flag      => 'N'
1659              ,p_msg_context      => 'PROJ'
1660              ,p_attribute1       => l_project_in_rec.pm_project_reference
1661              ,p_attribute2       => ''
1662              ,p_attribute3       => ''
1663              ,p_attribute4       => ''
1664              ,p_attribute5       => '');
1665             END IF;
1666             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1667             p_return_status             := FND_API.G_RET_STS_ERROR;
1668             RAISE FND_API.G_EXC_ERROR;
1669 
1670           END IF;
1671 
1672         ELSIF l_override_fields_tab(i).pa_field_name = 'PUBLIC_SECTOR_FLAG' THEN
1673           IF l_project_in_rec.public_sector_flag IS NULL
1674            OR l_project_in_rec.public_sector_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1675           THEN
1676 
1677             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1678             THEN
1679             pa_interface_utils_pub.map_new_amg_msg
1680             ( p_old_message_code => 'PA_PUB_SECTOR_FLAG_IS_NULL'
1681              ,p_msg_attribute    => 'CHANGE'
1682              ,p_resize_flag      => 'N'
1683              ,p_msg_context      => 'PROJ'
1684              ,p_attribute1       => l_project_in_rec.pm_project_reference
1685              ,p_attribute2       => ''
1686              ,p_attribute3       => ''
1687              ,p_attribute4       => ''
1688              ,p_attribute5       => '');
1689             END IF;
1690             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1691             p_return_status             := FND_API.G_RET_STS_ERROR;
1692             RAISE FND_API.G_EXC_ERROR;
1693 
1694           END IF;
1695 
1696         ELSIF l_override_fields_tab(i).pa_field_name = 'TEAM_TEMPLATE_ID' THEN
1697           IF l_project_in_rec.team_template_id IS NULL
1698            OR l_project_in_rec.team_template_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1699           THEN
1700 
1701             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1702             THEN
1703             pa_interface_utils_pub.map_new_amg_msg
1704             ( p_old_message_code => 'PA_TEAM_TMPLT_ID_IS_NULL'
1705              ,p_msg_attribute    => 'CHANGE'
1706              ,p_resize_flag      => 'N'
1707              ,p_msg_context      => 'PROJ'
1708              ,p_attribute1       => l_project_in_rec.pm_project_reference
1709              ,p_attribute2       => ''
1710              ,p_attribute3       => ''
1711              ,p_attribute4       => ''
1712              ,p_attribute5       => '');
1713             END IF;
1714             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1715             p_return_status             := FND_API.G_RET_STS_ERROR;
1716             RAISE FND_API.G_EXC_ERROR;
1717 
1718           END IF;
1719 
1720         ELSIF l_override_fields_tab(i).pa_field_name = 'COUNTRY' THEN
1721           IF l_project_in_rec.country_code IS NULL
1722            OR l_project_in_rec.country_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1723           THEN
1724 
1725             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1726             THEN
1727             pa_interface_utils_pub.map_new_amg_msg
1728             ( p_old_message_code => 'PA_COUNTRY_CODE_IS_NULL'
1729              ,p_msg_attribute    => 'CHANGE'
1730              ,p_resize_flag      => 'N'
1731              ,p_msg_context      => 'PROJ'
1732              ,p_attribute1       => l_project_in_rec.pm_project_reference
1733              ,p_attribute2       => ''
1734              ,p_attribute3       => ''
1735              ,p_attribute4       => ''
1736              ,p_attribute5       => '');
1737             END IF;
1738             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1739             p_return_status             := FND_API.G_RET_STS_ERROR;
1740             RAISE FND_API.G_EXC_ERROR;
1741 
1742           END IF;
1743 
1744         ELSIF l_override_fields_tab(i).pa_field_name = 'STATE_REGION' THEN
1745           IF l_project_in_rec.region IS NULL
1746            OR l_project_in_rec.region = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1747           THEN
1748 
1749             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1750             THEN
1751             pa_interface_utils_pub.map_new_amg_msg
1752             ( p_old_message_code => 'PA_REGION_IS_NULL'
1753              ,p_msg_attribute    => 'CHANGE'
1754              ,p_resize_flag      => 'N'
1755              ,p_msg_context      => 'PROJ'
1756              ,p_attribute1       => l_project_in_rec.pm_project_reference
1757              ,p_attribute2       => ''
1758              ,p_attribute3       => ''
1759              ,p_attribute4       => ''
1760              ,p_attribute5       => '');
1761             END IF;
1762             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1763             p_return_status             := FND_API.G_RET_STS_ERROR;
1764             RAISE FND_API.G_EXC_ERROR;
1765 
1766           END IF;
1767 
1768         ELSIF l_override_fields_tab(i).pa_field_name = 'CITY' THEN
1769           IF l_project_in_rec.city IS NULL
1770            OR l_project_in_rec.city = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1771           THEN
1772 
1773             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1774             THEN
1775             pa_interface_utils_pub.map_new_amg_msg
1776             ( p_old_message_code => 'PA_CITY_IS_NULL'
1777              ,p_msg_attribute    => 'CHANGE'
1778              ,p_resize_flag      => 'N'
1779              ,p_msg_context      => 'PROJ'
1780              ,p_attribute1       => l_project_in_rec.pm_project_reference
1781              ,p_attribute2       => ''
1782              ,p_attribute3       => ''
1783              ,p_attribute4       => ''
1784              ,p_attribute5       => '');
1785             END IF;
1786             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1787             p_return_status             := FND_API.G_RET_STS_ERROR;
1788             RAISE FND_API.G_EXC_ERROR;
1789 
1790           END IF;
1791 
1792         ELSIF l_override_fields_tab(i).pa_field_name = 'EXPECTED_APPROVAL_DATE' THEN
1793           IF l_project_in_rec.expected_approval_date IS NULL
1794            OR l_project_in_rec.expected_approval_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1795           THEN
1796 
1797             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1798             THEN
1799             pa_interface_utils_pub.map_new_amg_msg
1800             ( p_old_message_code => 'PA_EXP_APPR_DATE_IS_NULL'
1801              ,p_msg_attribute    => 'CHANGE'
1802              ,p_resize_flag      => 'N'
1803              ,p_msg_context      => 'PROJ'
1804              ,p_attribute1       => l_project_in_rec.pm_project_reference
1805              ,p_attribute2       => ''
1806              ,p_attribute3       => ''
1807              ,p_attribute4       => ''
1808              ,p_attribute5       => '');
1809             END IF;
1810             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1811             p_return_status             := FND_API.G_RET_STS_ERROR;
1812             RAISE FND_API.G_EXC_ERROR;
1813 
1814           END IF;
1815 
1816         ELSIF l_override_fields_tab(i).pa_field_name = 'PROBABILITY_MEMBER_ID' THEN
1817           IF l_project_in_rec.probability_member_id IS NULL
1818            OR l_project_in_rec.probability_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1819           THEN
1820 
1821             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1822             THEN
1823             pa_interface_utils_pub.map_new_amg_msg
1824             ( p_old_message_code => 'PA_PROB_MEMBER_ID_IS_NULL'
1825              ,p_msg_attribute    => 'CHANGE'
1826              ,p_resize_flag      => 'N'
1827              ,p_msg_context      => 'PROJ'
1828              ,p_attribute1       => l_project_in_rec.pm_project_reference
1829              ,p_attribute2       => ''
1830              ,p_attribute3       => ''
1831              ,p_attribute4       => ''
1832              ,p_attribute5       => '');
1833             END IF;
1834             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1835             p_return_status             := FND_API.G_RET_STS_ERROR;
1836             RAISE FND_API.G_EXC_ERROR;
1837 
1838           END IF;
1839 
1840         ELSIF l_override_fields_tab(i).pa_field_name = 'PROJECT_VALUE' THEN
1841           IF l_project_in_rec.project_value IS NULL
1842            OR l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1843           THEN
1844 
1845             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1846             THEN
1847             pa_interface_utils_pub.map_new_amg_msg
1848             ( p_old_message_code => 'PA_PROJECT_VALUE_IS_NULL'
1849              ,p_msg_attribute    => 'CHANGE'
1850              ,p_resize_flag      => 'N'
1851              ,p_msg_context      => 'PROJ'
1852              ,p_attribute1       => l_project_in_rec.pm_project_reference
1853              ,p_attribute2       => ''
1854              ,p_attribute3       => ''
1855              ,p_attribute4       => ''
1856              ,p_attribute5       => '');
1857             END IF;
1858             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1859             p_return_status             := FND_API.G_RET_STS_ERROR;
1860             RAISE FND_API.G_EXC_ERROR;
1861 
1862           END IF;
1863 
1864 -- anlee opportunity value changes
1865         ELSIF l_override_fields_tab(i).pa_field_name = 'OPP_VALUE_CURRENCY_CODE' THEN
1866           IF l_project_in_rec.project_value IS NULL
1867            OR l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1868           THEN
1869 
1870             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1871             THEN
1872             pa_interface_utils_pub.map_new_amg_msg
1873             ( p_old_message_code => 'PA_OPP_CURR_CODE_IS_NULL'
1874              ,p_msg_attribute    => 'CHANGE'
1875              ,p_resize_flag      => 'N'
1876              ,p_msg_context      => 'PROJ'
1877              ,p_attribute1       => l_project_in_rec.pm_project_reference
1878              ,p_attribute2       => ''
1879              ,p_attribute3       => ''
1880              ,p_attribute4       => ''
1881              ,p_attribute5       => '');
1882             END IF;
1883             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1884             p_return_status             := FND_API.G_RET_STS_ERROR;
1885             RAISE FND_API.G_EXC_ERROR;
1886 
1887           END IF;
1888 
1889 -- anlee org role changes
1890         ELSIF l_override_fields_tab(i).pa_field_name = 'ORG_ROLE' THEN
1891 
1892           l_org_roles := p_org_roles;
1893           j := l_org_roles.first;
1894 
1895           IF j IS NULL THEN
1896 
1897             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1898             THEN
1899             pa_interface_utils_pub.map_new_amg_msg
1900             ( p_old_message_code => 'PA_ORG_ROLE_IS_NULL'
1901              ,p_msg_attribute    => 'CHANGE'
1902              ,p_resize_flag      => 'N'
1903              ,p_msg_context      => 'PROJ'
1904              ,p_attribute1       => l_project_in_rec.pm_project_reference
1905              ,p_attribute2       => ''
1906              ,p_attribute3       => ''
1907              ,p_attribute4       => ''
1908              ,p_attribute5       => '');
1909             END IF;
1910             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1911             p_return_status             := FND_API.G_RET_STS_ERROR;
1912             RAISE FND_API.G_EXC_ERROR;
1913 
1914           END IF;
1915 
1916           l_org_role := 0;
1917 
1918           WHILE j IS NOT NULL LOOP
1919             IF upper(l_override_fields_tab(i).type) = upper(l_org_roles(j).project_role_type)
1920             AND l_org_roles(j).person_id IS NOT NULL
1921             THEN
1922              l_org_role := 1;
1923              EXIT;
1924             END IF;
1925             j := l_org_roles.next(j);
1926           END LOOP;
1927 
1928           IF l_org_role <> 1
1929           THEN
1930             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1931             THEN
1932              pa_interface_utils_pub.map_new_amg_msg
1933               ( p_old_message_code => 'PA_ORG_ROLE_IS_NULL'
1934                ,p_msg_attribute    => 'CHANGE'
1935                ,p_resize_flag      => 'N'
1936                ,p_msg_context      => 'PROJ'
1937                ,p_attribute1       => l_project_in_rec.pm_project_reference
1938                ,p_attribute2       => ''
1939                ,p_attribute3       => ''
1940                ,p_attribute4       => ''
1941                ,p_attribute5       => '');
1942              END IF;
1943              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1944              p_return_status             := FND_API.G_RET_STS_ERROR;
1945              RAISE FND_API.G_EXC_ERROR;
1946           END IF;
1947 
1948 /* Added this code for bug#2672646 if Long Name is an Quick Entry Field */
1949 
1950      ELSIF   l_override_fields_tab(i).pa_field_name = 'LONG_NAME' THEN
1951           IF l_project_in_rec.long_name IS NULL
1952            OR l_project_in_rec.long_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1953           THEN
1954             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1955             THEN
1956             pa_interface_utils_pub.map_new_amg_msg
1957             ( p_old_message_code => 'PA_PRJ_LONG_NAME_IS_NULL'
1958              ,p_msg_attribute    => 'CHANGE'
1959              ,p_resize_flag      => 'N'
1960              ,p_msg_context      => 'PROJ'
1961              ,p_attribute1       => l_project_in_rec.pm_project_reference
1962              ,p_attribute2       => ''
1963              ,p_attribute3       => ''
1964              ,p_attribute4       => ''
1965              ,p_attribute5       => '');
1966             END IF;
1967             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1968             p_return_status             := FND_API.G_RET_STS_ERROR;
1969             RAISE FND_API.G_EXC_ERROR;
1970           END IF;
1971 
1972 /* End of code added for bug#2672646 */
1973 
1974         END IF;    /* l_override_fields_tab(i).pa_field_name  */
1975       END IF;     /* mandatory_flag = 'Y'  */
1976       i := l_override_fields_tab.next(i);
1977     END LOOP;
1978 
1979 /* code added for the bug#1891621, ends here  */
1980 
1981 
1982 /* Bug#2672646 - If long name is passed as null or has default value, then we must default to the project name,
1983             This if loop will succeed only if long name is not a mandatory quick entry field, otherwise error
1984       would have been given above itself
1985 Start of code for bug#2672646 */
1986 
1987    IF l_project_in_rec.long_name IS NULL
1988       OR l_project_in_rec.long_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1989    THEN
1990        l_project_in_rec.long_name := l_project_in_rec.project_name;
1991    END IF;
1992 
1993 /* End of code for bug#2672646 */
1994 
1995 -- Need to get the project type of the source template, to validate
1996    -- distribution rule
1997    -- Validates the ID of the source template as well.
1998 
1999       OPEN l_source_project_type_csr(l_project_in_rec.created_from_project_id);
2000       FETCH l_source_project_type_csr INTO l_source_project_type;
2001 
2002       IF l_source_project_type_csr%NOTFOUND
2003       THEN
2004     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2005     THEN
2006          pa_interface_utils_pub.map_new_amg_msg
2007            ( p_old_message_code => 'PA_SOURCE_TEMPLATE_INVALID'
2008             ,p_msg_attribute    => 'CHANGE'
2009             ,p_resize_flag      => 'N'
2010             ,p_msg_context      => 'PROJ'
2011             ,p_attribute1       => l_project_in_rec.pm_project_reference
2012             ,p_attribute2       => ''
2013             ,p_attribute3       => ''
2014             ,p_attribute4       => ''
2015             ,p_attribute5       => '');
2016     END IF;
2017 
2018     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
2019     CLOSE l_source_project_type_csr;
2020     RAISE FND_API.G_EXC_ERROR;
2021       END IF;
2022 
2023       CLOSE l_source_project_type_csr;
2024 
2025     IF  l_project_in_rec.distribution_rule <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2026     AND l_project_in_rec.distribution_rule IS NOT NULL
2027     THEN
2028           IF pa_project_pvt.check_valid_dist_rule
2029              (l_source_project_type,
2030               l_project_in_rec.distribution_rule,
2031               l_project_in_rec.enable_top_task_inv_mth_flag ) = 'N'  --Bug 3279981
2032           THEN
2033     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2034     THEN
2035          pa_interface_utils_pub.map_new_amg_msg
2036            ( p_old_message_code => 'PA_INVALID_DIST_RULE'
2037             ,p_msg_attribute    => 'CHANGE'
2038             ,p_resize_flag      => 'N'
2039             ,p_msg_context      => 'PROJ'
2040             ,p_attribute1       => l_project_in_rec.pm_project_reference
2041             ,p_attribute2       => ''
2042             ,p_attribute3       => ''
2043             ,p_attribute4       => ''
2044             ,p_attribute5       => '');
2045                 END IF;
2046 
2047                 RAISE  FND_API.G_EXC_ERROR;
2048           END IF;
2049     END IF;
2050 
2051     IF  l_project_in_rec.carrying_out_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2052     AND l_project_in_rec.carrying_out_organization_id IS NOT NULL
2053     THEN
2054        IF pa_project_pvt.check_valid_org
2055           (l_project_in_rec.carrying_out_organization_id) = 'N'
2056        THEN
2057     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2058     THEN
2059          pa_interface_utils_pub.map_new_amg_msg
2060            ( p_old_message_code => 'PA_INVALID_ORG'
2061             ,p_msg_attribute    => 'CHANGE'
2062             ,p_resize_flag      => 'N'
2063             ,p_msg_context      => 'PROJ'
2064             ,p_attribute1       => l_project_in_rec.pm_project_reference
2065             ,p_attribute2       => ''
2066             ,p_attribute3       => ''
2067             ,p_attribute4       => ''
2068             ,p_attribute5       => '');
2069              END IF;
2070 
2071              RAISE  FND_API.G_EXC_ERROR;
2072        END IF;
2073     END IF;
2074 
2075        l_project_start_date      := l_project_in_rec.start_date;
2076        l_project_completion_date := l_project_in_rec.completion_date;
2077 
2078     -- completion date can be specified only if there is a start date
2079        IF  l_project_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2080        AND ( l_project_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2081               OR l_project_start_date IS NULL )
2082        THEN
2083     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2084     THEN
2085          pa_interface_utils_pub.map_new_amg_msg
2086            ( p_old_message_code => 'PA_PR_START_DATE_NEEDED'
2087             ,p_msg_attribute    => 'CHANGE'
2088             ,p_resize_flag      => 'N'
2089             ,p_msg_context      => 'PROJ'
2090             ,p_attribute1       => l_project_in_rec.pm_project_reference
2091             ,p_attribute2       => ''
2092             ,p_attribute3       => ''
2093             ,p_attribute4       => ''
2094             ,p_attribute5       => '');
2095                END IF;
2096                        RAISE  FND_API.G_EXC_ERROR;
2097        END IF;
2098 
2099     -- completion date cannot be less than start date
2100     IF     l_project_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2101        AND l_project_start_date IS NOT NULL
2102        AND l_project_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2103        AND l_project_completion_date IS NOT NULL
2104        AND l_project_completion_date < l_project_start_date
2105        THEN
2106 
2107             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2108             THEN
2109 
2110                 -- 5182972 Commented below code , which was throwing wrong error message
2111                 /*
2112                  pa_interface_utils_pub.map_new_amg_msg
2113                    ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
2114                     ,p_msg_attribute    => 'CHANGE'
2115                     ,p_resize_flag      => 'N'
2116                     ,p_msg_context      => 'PROJ'
2117                     ,p_attribute1       => l_project_in_rec.pm_project_reference
2118                     ,p_attribute2       => ''
2119                     ,p_attribute3       => ''
2120                     ,p_attribute4       => ''
2121                     ,p_attribute5       => '');
2122                 */
2123 
2124                 -- Added below code which throws correct error message
2125                 pa_utils.add_message
2126                  (
2127                    p_app_short_name   => 'PA'
2128                   ,p_msg_name         => 'PA_SU_INVALID_DATES'
2129                  );
2130 
2131                 -- 5182972 end
2132              END IF;
2133 
2134      RAISE  FND_API.G_EXC_ERROR;
2135      END IF;
2136 /*
2137        IF l_project_in_rec.actual_start_date IS NULL OR
2138           l_project_in_rec.actual_start_date =
2139             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2140           l_actual_start_date := NULL;
2141        ELSE
2142           l_actual_start_date := l_project_in_rec.actual_start_date;
2143        END IF;
2144 
2145        IF l_project_in_rec.actual_finish_date IS NULL OR
2146           l_project_in_rec.actual_finish_date =
2147             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2148           l_actual_finish_date := NULL;
2149        ELSE
2150           l_actual_finish_date := l_project_in_rec.actual_finish_date;
2151        END IF;
2152 */
2153 
2154        l_actual_start_date := null;
2155        l_actual_finish_date := null;
2156 --Task progress changes. These dates will be passed from task progress
2157 
2158        IF l_project_in_rec.early_start_date IS NULL OR
2159           l_project_in_rec.early_start_date =
2160             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2161           l_early_start_date := NULL;
2162        ELSE
2163           l_early_start_date := l_project_in_rec.early_start_date;
2164        END IF;
2165 
2166 
2167        IF l_project_in_rec.early_start_date IS NULL OR
2168           l_project_in_rec.early_start_date =
2169             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2170           l_early_start_date := NULL;
2171        ELSE
2172           l_early_start_date := l_project_in_rec.early_start_date;
2173        END IF;
2174 
2175 
2176        IF l_project_in_rec.early_finish_date IS NULL OR
2177           l_project_in_rec.early_finish_date =
2178             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2179           l_early_finish_date := NULL;
2180        ELSIF l_early_start_date IS NOT NULL THEN
2181                    --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
2182                    IF  l_project_in_rec.early_finish_date < l_early_start_date THEN
2183 
2184                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2185 
2186                                  pa_utils.add_message
2187                                  (
2188                                    p_app_short_name   => 'PA'
2189                                   ,p_msg_name         => 'PA_SU_INVALID_DATES'
2190                                  );
2191 
2192                         END IF;
2193 
2194                         RAISE  FND_API.G_EXC_ERROR;
2195                    END IF;
2196                    l_early_finish_date := l_project_in_rec.early_finish_date;
2197 
2198        ELSE        --End of Logic added to check whether the finish date is earlier than the start date.Bug#5185673
2199           l_early_finish_date := l_project_in_rec.early_finish_date;
2200        END IF;
2201 
2202 
2203        IF l_project_in_rec.late_start_date IS NULL OR
2204           l_project_in_rec.late_start_date =
2205             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2206           l_late_start_date := NULL;
2207        ELSE
2208           l_late_start_date := l_project_in_rec.late_start_date;
2209        END IF;
2210 
2211        IF l_project_in_rec.late_finish_date IS NULL OR
2212           l_project_in_rec.late_finish_date =
2213             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2214           l_late_finish_date := NULL;
2215        ELSIF l_late_start_date IS NOT NULL THEN
2216                    --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
2217                    IF  l_project_in_rec.late_finish_date < l_late_start_date THEN
2218 
2219                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2220 
2221                                  pa_utils.add_message
2222                                  (
2223                                    p_app_short_name   => 'PA'
2224                                   ,p_msg_name         => 'PA_SU_INVALID_DATES'
2225                                  );
2226 
2227                         END IF;
2228 
2229                         RAISE  FND_API.G_EXC_ERROR;
2230                    END IF;
2231                    l_late_finish_date := l_project_in_rec.late_finish_date;
2232        ELSE        --End of Logic added to check whether the finish date is earlier than the start date.Bug#5185673
2233           l_late_finish_date := l_project_in_rec.late_finish_date;
2234        END IF;
2235 
2236        IF l_project_in_rec.scheduled_start_date IS NULL OR
2237           l_project_in_rec.scheduled_start_date =
2238             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2239           l_scheduled_start_date := NULL;
2240        ELSE
2241           l_scheduled_start_date := l_project_in_rec.scheduled_start_date;
2242        END IF;
2243 
2244        IF l_project_in_rec.scheduled_finish_date IS NULL OR
2245           l_project_in_rec.scheduled_finish_date =
2246             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2247           l_scheduled_finish_date := NULL;
2248        ELSE
2249           l_scheduled_finish_date := l_project_in_rec.scheduled_finish_date;
2250        END IF;
2251 
2252 --  Call the client extension to override the default values for
2253 --  project start/completion dates
2254 
2255        PA_Client_Extn_PM.customize_dates (
2256        p_pm_project_reference       => l_project_in_rec.pm_project_reference,
2257        p_pm_product_code            => p_pm_product_code,
2258        p_in_start_date              => l_project_in_rec.start_date,
2259        p_in_completion_date         => l_project_in_rec.completion_date,
2260        p_actual_start_date          => l_actual_start_date,
2261        p_actual_finish_date         => l_actual_finish_date,
2262        p_early_start_date           => l_early_start_date,
2263        p_early_finish_date          => l_early_finish_date,
2264        p_late_start_date            => l_late_start_date,
2265        p_late_finish_date           => l_late_finish_date,
2266        p_scheduled_start_date       => l_scheduled_start_date,
2267        p_scheduled_finish_date      => l_scheduled_finish_date,
2268        p_out_start_date             => l_out_start_date,
2269        p_out_completion_date        => l_out_completion_date,
2270        p_error_code        => l_error_code,
2271        p_error_message        => l_error_message );
2272 
2273       IF l_error_code <> 0 THEN
2274    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2275          pa_interface_utils_pub.map_new_amg_msg
2276            ( p_old_message_code => 'PA_ERROR_IN_CLIENT_EXTN'
2277             ,p_msg_attribute    => 'CHANGE'
2278             ,p_resize_flag      => 'N'
2279             ,p_msg_context      => 'PROJ'
2280             ,p_attribute1       => l_project_in_rec.pm_project_reference
2281             ,p_attribute2       => ''
2282             ,p_attribute3       => ''
2283             ,p_attribute4       => ''
2284             ,p_attribute5       => '');
2285          END IF;
2286          RAISE  FND_API.G_EXC_ERROR;
2287       END IF;
2288 
2289 
2290     -- Check to ensure that the dates returned by the API are valid
2291     -- the out completion date cannot be less than out start date
2292      IF    l_out_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2293        AND l_out_start_date IS NOT NULL
2294        AND l_out_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2295        AND l_out_completion_date IS NOT NULL
2296        AND l_out_completion_date < l_out_start_date
2297        THEN
2298             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2299             THEN
2300 
2301                 -- 5182972 Commented below code , which was throwing wrong error message
2302                 /*
2303                  pa_interface_utils_pub.map_new_amg_msg
2304                    ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
2305                     ,p_msg_attribute    => 'CHANGE'
2306                     ,p_resize_flag      => 'N'
2307                     ,p_msg_context      => 'PROJ'
2308                     ,p_attribute1       => l_project_in_rec.pm_project_reference
2309                     ,p_attribute2       => ''
2310                     ,p_attribute3       => ''
2311                     ,p_attribute4       => ''
2312                     ,p_attribute5       => '');
2313                 */
2314 
2315                 -- Added below code which throws correct error message
2316                 pa_utils.add_message
2317                  (
2318                    p_app_short_name   => 'PA'
2319                   ,p_msg_name         => 'PA_SU_INVALID_DATES'
2320                  );
2321 
2322                 -- 5182972 end
2323             END IF;
2324 
2325     RAISE  FND_API.G_EXC_ERROR;
2326     END IF;
2327 
2328     --Since this is an insert API (and not an update API),
2329     --all missing incoming parameters will be defaulted to NULL
2330 
2331     IF l_project_in_rec.description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2332     THEN l_project_in_rec.description := NULL;
2333     END IF;
2334 
2335     IF l_project_in_rec.project_status_code =
2336        PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2337        OR l_project_in_rec.project_status_code IS NULL THEN
2338         l_project_in_rec.project_status_code :=
2339           pa_project_stus_utils.Get_Default_Starting_Status
2340           (x_project_type => l_source_project_type);
2341     ELSE
2342       IF pa_project_pvt.check_valid_project_status
2343       ( p_project_status => l_project_in_rec.project_status_code ) = 'N'
2344   THEN
2345     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2346     THEN
2347          pa_interface_utils_pub.map_new_amg_msg
2348            ( p_old_message_code => 'PA_PROJECT_STATUS_INVALID'
2349             ,p_msg_attribute    => 'CHANGE'
2350             ,p_resize_flag      => 'N'
2351             ,p_msg_context      => 'PROJ'
2352             ,p_attribute1       => l_project_in_rec.pm_project_reference
2353             ,p_attribute2       => ''
2354             ,p_attribute3       => ''
2355             ,p_attribute4       => ''
2356             ,p_attribute5       => '');
2357                 END IF;
2358                 RAISE  FND_API.G_EXC_ERROR;
2359   END IF;
2360         IF pa_project_stus_utils.Is_Starting_Status
2361            (l_project_in_rec.project_status_code) = 'N' THEN
2362             pa_interface_utils_pub.map_new_amg_msg
2363               ( p_old_message_code => 'PA_NOT_STARTING_STATUS'
2364                ,p_msg_attribute    => 'CHANGE'
2365                ,p_resize_flag      => 'N'
2366                ,p_msg_context      => 'PROJ'
2367                ,p_attribute1       => l_project_in_rec.pm_project_reference
2368                ,p_attribute2       => ''
2369                ,p_attribute3       => ''
2370                ,p_attribute4       => ''
2371                ,p_attribute5       => '');
2372             RAISE  FND_API.G_EXC_ERROR;
2373         END IF;
2374 
2375     END IF;
2376 
2377 
2378     IF l_project_in_rec.distribution_rule = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2379     THEN l_project_in_rec.distribution_rule := NULL;
2380     END IF;
2381 
2382 
2383     IF l_project_in_rec.public_sector_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2384     OR l_project_in_rec.public_sector_flag IS NULL
2385     THEN l_project_in_rec.public_sector_flag := NULL;
2386     ELSE
2387       IF l_project_in_rec.public_sector_flag NOT IN ('Y','N')
2388       THEN
2389         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2390     THEN
2391          pa_interface_utils_pub.map_new_amg_msg
2392            ( p_old_message_code => 'PA_PUBLIC_SECTOR_INVALID'
2393             ,p_msg_attribute    => 'CHANGE'
2394             ,p_resize_flag      => 'N'
2395             ,p_msg_context      => 'PROJ'
2396             ,p_attribute1       => l_project_in_rec.pm_project_reference
2397             ,p_attribute2       => ''
2398             ,p_attribute3       => ''
2399             ,p_attribute4       => ''
2400             ,p_attribute5       => '');
2401                 END IF;
2402                 RAISE  FND_API.G_EXC_ERROR;
2403         END IF;
2404     END IF;
2405 
2406      --When descriptive flex fields are not passed set them to NULL
2407 
2408      IF l_project_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2409      THEN
2410        l_attribute_category := NULL;
2411      ELSE
2412   l_attribute_category := l_project_in_rec.attribute_category;
2413      END IF;
2414      IF l_project_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2415      THEN
2416        l_attribute1 := NULL;
2417      ELSE
2418   l_attribute1 := l_project_in_rec.attribute1;
2419      END IF;
2420      IF l_project_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2421      THEN
2422        l_attribute2 := NULL;
2423      ELSE
2424   l_attribute2 := l_project_in_rec.attribute2;
2425      END IF;
2426      IF l_project_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2427      THEN
2428        l_attribute3 := NULL;
2429      ELSE
2430   l_attribute3 := l_project_in_rec.attribute3;
2431      END IF;
2432      IF l_project_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2433      THEN
2434        l_attribute4 := NULL;
2435      ELSE
2436   l_attribute4 := l_project_in_rec.attribute4;
2437      END IF;
2438 
2439      IF l_project_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2440      THEN
2441        l_attribute5 := NULL;
2442      ELSE
2443   l_attribute5 := l_project_in_rec.attribute5;
2444 
2445      END IF;
2446 
2447      IF l_project_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2448      THEN
2449        l_attribute6 := NULL;
2450      ELSE
2451   l_attribute6 := l_project_in_rec.attribute6;
2452      END IF;
2453 
2454      IF l_project_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2455      THEN
2456        l_attribute7 := NULL;
2457      ELSE
2458   l_attribute7 := l_project_in_rec.attribute7;
2459      END IF;
2460 
2461      IF l_project_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2462      THEN
2463        l_attribute8 := NULL;
2464      ELSE
2465   l_attribute8 := l_project_in_rec.attribute8;
2466      END IF;
2467      IF l_project_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2468      THEN
2469        l_attribute9 := NULL;
2470      ELSE
2471   l_attribute9 := l_project_in_rec.attribute9;
2472      END IF;
2473      IF l_project_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2474      THEN
2475        l_attribute10 := NULL;
2476      ELSE
2477   l_attribute10 := l_project_in_rec.attribute10;
2478      END IF;
2479 
2480 -- Team template parameters
2481      IF l_project_in_rec.team_template_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2482      THEN
2483        l_team_template_id := NULL;
2484      ELSE
2485   l_team_template_id := l_project_in_rec.team_template_id;
2486      END IF;
2487      IF l_project_in_rec.country_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2488      THEN
2489        l_country_code := NULL;
2490      ELSE
2491   l_country_code := l_project_in_rec.country_code;
2492      END IF;
2493      IF l_project_in_rec.region = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2494      THEN
2495        l_region := NULL;
2496      ELSE
2497   l_region := l_project_in_rec.region;
2498      END IF;
2499      IF l_project_in_rec.city = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2500      THEN
2501        l_city := NULL;
2502      ELSE
2503   l_city := l_project_in_rec.city;
2504      END IF;
2505 
2506 -- Tax Code changes starts ...
2507 
2508      IF l_project_in_rec.output_tax_code =
2509 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2510      THEN
2511       l_output_tax_code := NULL;
2512      ELSE
2513    l_output_tax_code := l_project_in_rec.output_tax_code;
2514      END IF;
2515 
2516      IF l_project_in_rec.retention_tax_code =
2517 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2518      THEN
2519       l_retention_tax_code := NULL;
2520      ELSE
2521    l_retention_tax_code := l_project_in_rec.retention_tax_code;
2522      END IF;
2523 
2524 -- Tax Code changes Ends ...
2525 
2526 -- IC AND Multi National Currency Changes starts here ...
2527 
2528      IF l_project_in_rec.project_currency_code =
2529         PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2530 --Bugfix 2293158 issue 2 --Start
2531  /*  Changing AND to OR and IS NOT NULL condition to IS NULL as The if condition has to be true
2532    when l_project_in_rec.project_currency_code is NULL or the default G_PA_MISS_ CHAR */
2533     /* AND */
2534    OR  l_project_in_rec.project_currency_code IS NULL  /* NOT NULL */
2535 --Bugfix 2293158 issue 2 --end.
2536      THEN
2537 --Bugfix 2293158 issue 1 --Start
2538 --      l_project_currency_code := 'USD';
2539         l_project_currency_code := pa_multi_currency.get_acct_currency_code;
2540 --Bugfix 2293158 issue 1 --End
2541      ELSE
2542       l_project_currency_code := l_project_in_rec.project_currency_code;
2543      END IF;
2544 
2545      IF l_project_in_rec.allow_cross_charge_flag =
2546 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2547      THEN
2548       l_allow_cross_charge_flag := 'N';
2549      ELSE
2550    l_allow_cross_charge_flag := l_project_in_rec.allow_cross_charge_flag;
2551      END IF;
2552 
2553      IF l_project_in_rec.project_rate_date =
2554 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2555      THEN
2556       l_project_rate_date := NULL;
2557      ELSE
2558    l_project_rate_date := l_project_in_rec.project_rate_date;
2559      END IF;
2560 
2561      IF l_project_in_rec.project_rate_type =
2562 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2563      THEN
2564       l_project_rate_type := NULL;
2565      ELSE
2566    l_project_rate_type := l_project_in_rec.project_rate_type;
2567      END IF;
2568 
2569      IF l_project_in_rec.cc_process_labor_flag =
2570 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2571      THEN
2572       l_cc_process_labor_flag := 'N';
2573      ELSE
2574    l_cc_process_labor_flag := l_project_in_rec.cc_process_labor_flag;
2575      END IF;
2576 
2577      IF l_project_in_rec.labor_tp_schedule_id =
2578 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2579      THEN
2580       l_labor_tp_schedule_id := NULL;
2581      ELSE
2582    l_labor_tp_schedule_id := l_project_in_rec.labor_tp_schedule_id;
2583      END IF;
2584 
2585      IF l_project_in_rec.labor_tp_fixed_date =
2586 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2587      THEN
2588       l_labor_tp_fixed_date := NULL;
2589      ELSE
2590    l_labor_tp_fixed_date := l_project_in_rec.labor_tp_fixed_date;
2591      END IF;
2592 
2593      IF l_project_in_rec.cc_process_nl_flag =
2594 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2595      THEN
2596       l_cc_process_nl_flag := 'N';
2597      ELSE
2598    l_cc_process_nl_flag := l_project_in_rec.cc_process_nl_flag;
2599      END IF;
2600 
2601      IF l_project_in_rec.nl_tp_schedule_id =
2602 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2603      THEN
2604       l_nl_tp_schedule_id := NULL;
2605      ELSE
2606    l_nl_tp_schedule_id := l_project_in_rec.nl_tp_schedule_id;
2607      END IF;
2608 
2609      IF l_project_in_rec.nl_tp_fixed_date =
2610 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2611      THEN
2612       l_nl_tp_fixed_date := NULL;
2613      ELSE
2614    l_nl_tp_fixed_date := l_project_in_rec.nl_tp_fixed_date;
2615      END IF;
2616 
2617      IF l_project_in_rec.cc_tax_task_id =
2618 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2619      THEN
2620       l_cc_tax_task_id := NULL;
2621      ELSE
2622    l_cc_tax_task_id := l_project_in_rec.cc_tax_task_id;
2623      END IF;
2624 
2625 -- IC and Multi National Currency Changes Ends here ...
2626 
2627 -- ORM Code change starts here ...
2628 
2629      IF l_project_in_rec.role_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2630      THEN
2631       l_role_list_id := NULL;
2632      ELSE
2633       l_role_list_id := l_project_in_rec.role_list_id;
2634      END IF;
2635 
2636      IF l_project_in_rec.work_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2637      THEN
2638 -- If work type attribute change to NOT Null, we need to call default API here.
2639       l_work_type_id := NULL;
2640      ELSE
2641       l_work_type_id := l_project_in_rec.work_type_id;
2642      END IF;
2643 
2644      IF l_project_in_rec.calendar_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2645      THEN
2646       l_calendar_id := NULL;
2647      ELSE
2648       l_calendar_id := l_project_in_rec.calendar_id;
2649      END IF;
2650 
2651     IF l_project_in_rec.location_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2652      THEN
2653       l_location_id := NULL;
2654      ELSE
2655       l_location_id := l_project_in_rec.location_id;
2656      END IF;
2657 
2658      IF ( nvl(l_project_in_rec.probability_member_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
2659      THEN
2660                 l_probability_member_id := NULL;
2661      ELSE
2662                 --Bug#5191521 included validation for probability_member_id
2663 
2664                 OPEN  cur_validate_prob_member( l_project_in_rec.created_from_project_id,l_project_in_rec.probability_member_id);
2665                 FETCH cur_validate_prob_member INTO l_check_prob_id;
2666                 CLOSE cur_validate_prob_member;
2667 
2668                 IF l_check_prob_id ='Y' THEN
2669 
2670                         l_probability_member_id := l_project_in_rec.probability_member_id;
2671                 ELSE
2672                         l_probability_member_id := NULL;
2673                 END IF;
2674                 -- ENd of changes for Bug#5191521.
2675 
2676      END IF;
2677 
2678      IF l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2679      THEN
2680       l_project_value := NULL;
2681 
2682      ELSE
2683 --Added for bug 5214431
2684              IF l_project_in_rec.project_value IS NOT NULL AND l_project_in_rec.project_value   < 0 THEN
2685                         PA_UTILS.ADD_MESSAGE
2686                          ( p_app_short_name   => 'PA'
2687                           ,p_msg_name         => 'PA_INVLD_OPPORTUNITY_VALUE');
2688                            RAISE FND_API.G_EXC_ERROR;
2689             ELSE
2690              l_project_value := l_project_in_rec.project_value;
2691            END IF;
2692      END IF;
2693 
2694 
2695      IF l_project_in_rec.expected_approval_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2696      THEN
2697         l_expected_approval_date := NULL;
2698      ELSE
2699         l_expected_approval_date := l_project_in_rec.expected_approval_date;
2700      END IF;
2701 
2702      IF l_project_in_rec.cost_job_group_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2703      THEN
2704       l_cost_job_group_id := NULL;
2705      ELSE
2706       l_cost_job_group_id := l_project_in_rec.cost_job_group_id;
2707      END IF;
2708 
2709      IF l_project_in_rec.bill_job_group_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2710      THEN
2711       l_bill_job_group_id := NULL;
2712      ELSE
2713       l_bill_job_group_id := l_project_in_rec.bill_job_group_id;
2714      END IF;
2715 
2716 -- ORM Code change ends here ...
2717 
2718      -- Bug 6144566: Changes start
2719      -- Bug 6144566: Introduced MCB related validations
2720 
2721      IF l_project_in_rec.multi_currency_billing_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2722         OR l_project_in_rec.multi_currency_billing_flag IS NULL  THEN
2723         l_project_in_rec.multi_currency_billing_flag :=null;
2724      ELSE
2725         IF l_project_in_rec.multi_currency_billing_flag = 'Y' THEN
2726            -- do MCB related validations
2727 
2728            -- Project Currency related attributes
2729            IF l_project_in_rec.PROJECT_BIL_RATE_TYPE is NULL
2730               OR l_project_in_rec.PROJECT_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PROJ_RATE_TYPE_INV_AMG:The project exchage rate type is invalid
2731               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2732      	    FND_MESSAGE.SET_NAME('PA','PA_PROJ_RATE_TYPE_INV_AMG');
2733      	    FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
2734      	    FND_MSG_PUB.ADD;
2735      	    RAISE  FND_API.G_EXC_ERROR;
2736               END IF;
2737            ELSE
2738               IF l_project_in_rec.PROJECT_BIL_RATE_TYPE = 'User' THEN
2739                  IF l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE is NULL
2740                     OR l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2741                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PC_AMG:Project Exchange Rate cannot be null when project rate type is User.
2742      	          FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PC_AMG');
2743      	          FND_MSG_PUB.ADD;
2744      	          RAISE  FND_API.G_EXC_ERROR;
2745                     END IF;
2746                  END IF;
2747               ELSE  -- non-User type
2748                  IF l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE is NULL
2749                     OR l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2750 
2751                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2752                        FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2753                        FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
2754                        FND_MSG_PUB.ADD;
2755                        RAISE  FND_API.G_EXC_ERROR;
2756                     END IF;
2757                  ELSE
2758                     IF l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE = 'Fixed Date' THEN
2759                        IF l_project_in_rec.PROJECT_BIL_RATE_DATE is NULL
2760                           OR l_project_in_rec.PROJECT_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2761                           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2762      	        	FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2763                              FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
2764      	        	FND_MSG_PUB.ADD;
2765      	        	RAISE  FND_API.G_EXC_ERROR;
2766                           END IF;
2767                        END IF;
2768                     END IF;
2769                  END IF;
2770               END IF;
2771            END IF;
2772 
2773            -- Project Functional Currency related attributes
2774            IF l_project_in_rec.PROJFUNC_BIL_RATE_TYPE is NULL
2775               OR l_project_in_rec.PROJFUNC_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PFC_RATE_TYPE_INV_AMG:The project functional exchage rate type is invalid
2776               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2777                  FND_MESSAGE.SET_NAME('PA','PA_PFC_RATE_TYPE_INV_AMG');
2778                  FND_MSG_PUB.ADD;
2779                  RAISE  FND_API.G_EXC_ERROR;
2780               END IF;
2781            ELSE
2782               IF l_project_in_rec.PROJFUNC_BIL_RATE_TYPE = 'User' THEN
2783                  IF l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE is NULL
2784                     OR l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2785                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN  -- PA_EXCH_RATE_NULL_PF_AMG:Project Functional Exchange Rate cannot be null when  project functional rate type is User.
2786              	  FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PF_AMG');
2787              	  FND_MSG_PUB.ADD;
2788              	  RAISE  FND_API.G_EXC_ERROR;
2789                     END IF;
2790                  END IF;
2791 
2792               ELSE  -- non-User type
2793                  IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE is NULL
2794                     OR l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2795                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2796                        FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2797                        FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
2798                        FND_MSG_PUB.ADD;
2799                        RAISE  FND_API.G_EXC_ERROR;
2800                     END IF;
2801                  ELSE
2802                     IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE = 'Fixed Date' THEN
2803                        IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE is NULL
2804                           OR l_project_in_rec.PROJFUNC_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2805                           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2806      	        	FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2807                              FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
2808              		FND_MSG_PUB.ADD;
2809              		RAISE  FND_API.G_EXC_ERROR;
2810                           END IF;
2811                        END IF;
2812                     END IF;
2813                  END IF;
2814               END IF;
2815            END IF;
2816 
2817 
2818            -- Funding Currency related attributes
2819            IF l_project_in_rec.FUNDING_RATE_TYPE is NULL
2820               OR l_project_in_rec.FUNDING_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_FUND_RATE_TYPE_INV_AMG:The funding exchage rate type is invalid
2821               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2822                  FND_MESSAGE.SET_NAME('PA','PA_FUND_RATE_TYPE_INV_AMG');
2823                  FND_MSG_PUB.ADD;
2824                  RAISE  FND_API.G_EXC_ERROR;
2825               END IF;
2826            ELSE
2827               IF l_project_in_rec.FUNDING_RATE_TYPE = 'User' THEN
2828                  IF l_project_in_rec.FUNDING_EXCHANGE_RATE is NULL
2829                     OR l_project_in_rec.FUNDING_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2830                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN  -- PA_EXCHANGE_RATE_NULL:Exchange rate cannot be null when rate type is User.
2831              	  FND_MESSAGE.SET_NAME('PA','PA_EXCHANGE_RATE_NULL');
2832              	  FND_MSG_PUB.ADD;
2833              	  RAISE  FND_API.G_EXC_ERROR;
2834                     END IF;
2835                  END IF;
2836 
2837               ELSE  -- non-User type
2838                  IF l_project_in_rec.FUNDING_RATE_DATE_CODE is NULL
2839                     OR l_project_in_rec.FUNDING_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2840                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2841                        FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2842                        FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
2843                        FND_MSG_PUB.ADD;
2844                        RAISE  FND_API.G_EXC_ERROR;
2845                     END IF;
2846                  ELSE
2847                     IF l_project_in_rec.FUNDING_RATE_DATE_CODE = 'Fixed Date' THEN
2848                        IF l_project_in_rec.FUNDING_RATE_DATE is NULL
2849                           OR l_project_in_rec.FUNDING_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2850                           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2851      	        	FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2852                              FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
2853              		FND_MSG_PUB.ADD;
2854              		RAISE  FND_API.G_EXC_ERROR;
2855                           END IF;
2856                        END IF;
2857                     END IF;
2858                  END IF;
2859               END IF;
2860            END IF;
2861 
2862         ELSE -- MCB flag is not 'Y'
2863            -- set all currency conversion attributes to NULL
2864 
2865            l_project_in_rec.PROJECT_BIL_RATE_TYPE := NULL;
2866            l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE := NULL;
2867            l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE := NULL;
2868            l_project_in_rec.PROJECT_BIL_RATE_DATE := NULL;
2869 
2870            l_project_in_rec.PROJFUNC_BIL_RATE_TYPE := NULL;
2871            l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE := NULL;
2872            l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE := NULL;
2873            l_project_in_rec.PROJFUNC_BIL_RATE_DATE := NULL;
2874 
2875            l_project_in_rec.FUNDING_RATE_TYPE := NULL;
2876            l_project_in_rec.FUNDING_EXCHANGE_RATE := NULL;
2877            l_project_in_rec.FUNDING_RATE_DATE_CODE := NULL;
2878            l_project_in_rec.FUNDING_RATE_DATE := NULL;
2879 
2880         END IF;
2881      END IF;
2882 
2883 -- Bug 6144566: Changes end
2884 
2885      IF l_project_in_rec.emp_bill_rate_schedule_id =
2886 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2887      THEN
2888       l_emp_bill_rate_schedule_id := NULL;
2889      ELSE
2890    l_emp_bill_rate_schedule_id := l_project_in_rec.emp_bill_rate_schedule_id;
2891      END IF;
2892 
2893      IF l_project_in_rec.job_bill_rate_schedule_id =
2894 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2895      THEN
2896       l_job_bill_rate_schedule_id := NULL;
2897      ELSE
2898    l_job_bill_rate_schedule_id := l_project_in_rec.job_bill_rate_schedule_id;
2899      END IF;
2900 
2901     IF l_project_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2902     THEN l_project_in_rec.carrying_out_organization_id := NULL;
2903     END IF;
2904 
2905 
2906     IF l_project_in_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2907     THEN l_project_in_rec.start_date := NULL;
2908     END IF;
2909 
2910 
2911     IF l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2912     THEN l_project_in_rec.completion_date := NULL;
2913     END IF;
2914 
2915 
2916 --added to remove bug# 604762 : Ashia Bagai - 9-jan-98
2917     IF l_out_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE Then
2918        l_out_start_date := NULL ;
2919     END IF ;
2920 
2921     IF l_out_completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE Then
2922        l_out_completion_date := NULL ;
2923     END IF ;
2924 
2925 --end of addition to remove bug# 604762
2926 
2927 -- opportunity value changes
2928 -- anlee
2929    IF l_project_in_rec.opp_value_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2930      THEN
2931        l_opp_value_currency_code := NULL;
2932      ELSE
2933        l_opp_value_currency_code := l_project_in_rec.opp_value_currency_code;
2934    END IF;
2935 
2936 --Priority code
2937 
2938    IF l_project_in_rec.priority_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2939      THEN
2940        l_priority_code := NULL;
2941      ELSE
2942        l_priority_code := l_project_in_rec.priority_code;
2943    END IF;
2944 
2945    -- 5191417 validate l_priority_code for valid value
2946 
2947    IF l_priority_code IS NOT NULL THEN
2948 
2949         OPEN priority_code_csr(l_priority_code);
2950         FETCH priority_code_csr into l_valid_prio_code;
2951         CLOSE priority_code_csr;
2952 
2953         -- if not valid throw , error message
2954 
2955         IF l_valid_prio_code = 'N' THEN
2956 
2957           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2958 
2959             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
2960                                 ,p_msg_name         => 'PA_INVALID_PRIORITY_CODE');
2961 
2962             l_return_status := FND_API.G_RET_STS_ERROR;
2963 
2964             RAISE  FND_API.G_EXC_ERROR;
2965 
2966           END IF;
2967 
2968         END IF;
2969 
2970    END IF;
2971 
2972    -- 5191417 end
2973 
2974 IF l_project_in_rec.security_level = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2975 
2976        l_security_level := NULL;
2977 ELSE
2978         --Modified this else part for security level validations.Bug#5191699.
2979         --If the user passes an invalid value or if the user passes explicitly as null,
2980         --we need to handle that as,
2981         --security level is mandatory parameter and cant be null and it can take values only
2982         --from the lookup.Hence we update with default value 'Enterprise'.
2983 
2984         OPEN  cur_check_sec_level(l_project_in_rec.security_level);
2985         FETCH cur_check_sec_level INTO l_check_sec_level;
2986         CLOSE cur_check_sec_level;
2987 
2988         IF l_check_sec_level = 'Y' THEN
2989                 -- Not null and a Valid value has been passed
2990                 l_security_level := l_project_in_rec.security_level;
2991         ELSE
2992                 -- Either null has been explicitly passed or invalid value
2993                 -- is passed. Then update it with default value of 'Enterprise'
2994                 -- as this will be always present and cant be deleted or end dated.
2995 
2996                 l_security_level := 1; --1 lookup_code corresponds to 'Enterprise'.
2997         END IF;
2998         --End if code changes for Bug#5191699.
2999 END IF;
3000 /*Addtion started for bug 3825528*/
3001     /* Code added for tracking bug by aditi */
3002 --    --dbms_output.put_line('value of p_customers_in(1).customer_id'||p_customers_in(1).customer_id);
3003      IF l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3004   /* End of Code changes */
3005    -- IF l_project_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM Commented for tracking bug
3006     THEN
3007        l_in_customer_id := NULL;
3008 --    ELSE
3009   --     l_in_customer_id := l_project_in_rec.customer_id;
3010     END IF;
3011 ----dbms_output.put_line('value of l_in_customer_id at the end '||l_in_customer_id);
3012 /*Addtion ends for bug 3825528*/
3013 
3014 
3015 
3016 --sunkalya:federal changes bug#5511353
3017 
3018 OPEN  get_date_eff_funds_flag(l_project_in_rec.created_from_project_id);
3019 FETCH get_date_eff_funds_flag INTO l_orig_date_eff_funds_flag;
3020 CLOSE get_date_eff_funds_flag;
3021 
3022 OPEN  get_ar_rec_notify_flag(l_project_in_rec.created_from_project_id);   -- 7508661 : EnC : Added
3023 FETCH get_ar_rec_notify_flag INTO l_orig_ar_rec_notify_flag;
3024 CLOSE get_ar_rec_notify_flag;
3025 
3026 OPEN  get_auto_release_pwp_inv(l_project_in_rec.created_from_project_id);   -- 7508661 : EnC : Added
3027 FETCH get_auto_release_pwp_inv INTO l_orig_auto_release_pwp_inv;
3028 CLOSE get_auto_release_pwp_inv;
3029 
3030 OPEN  cur_get_orig_tt_cust_flag(l_project_in_rec.created_from_project_id);
3031 FETCH cur_get_orig_tt_cust_flag INTO l_orig_def_tt_flag;
3032 CLOSE cur_get_orig_tt_cust_flag;
3033 
3034 
3035 IF (l_project_in_rec.date_eff_funds_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3036    (l_project_in_rec.date_eff_funds_flag IS NULL)
3037 THEN
3038 
3039 	l_date_eff_funds_flag := NULL;
3040 
3041 ELSE
3042 
3043 	OPEN  cur_enable_funds_flag(l_project_in_rec.created_from_project_id);
3044 	FETCH cur_enable_funds_flag INTO l_enable_funds_flag;
3045 	CLOSE cur_enable_funds_flag;
3046 
3047 /*
3048 	OPEN  cur_rev_inv(l_project_in_rec.created_from_project_id);
3049 	FETCH cur_rev_inv INTO l_chk_rev_inv_flag;
3050 	CLOSE cur_rev_inv;
3051 */
3052 	IF nvl(l_enable_funds_flag,'N')='N'  AND l_project_in_rec.date_eff_funds_flag ='Y' THEN
3053 
3054 		PA_UTILS.ADD_MESSAGE(	 p_app_short_name  =>  'PA'
3055 					,p_msg_name         => 'PA_FUNDS_FLAG_CANT_ENABLED'
3056 				    );
3057 
3058 		l_return_status := FND_API.G_RET_STS_ERROR;
3059 
3060 		RAISE  FND_API.G_EXC_ERROR;
3061 	END IF;
3062 /*
3063 	IF nvl(l_chk_rev_inv_flag,'N') ='Y' AND l_project_in_rec.date_eff_funds_flag <> l_orig_date_eff_funds_flag THEN
3064 
3065 		PA_UTILS.ADD_MESSAGE(	 p_app_short_name  =>  'PA'
3066 					,p_msg_name         => 'PA_FUNDS_FLAG_NOT_UPDATBL'
3067 				    );
3068 
3069 		l_return_status := FND_API.G_RET_STS_ERROR;
3070 
3071 		RAISE  FND_API.G_EXC_ERROR;
3072 	END IF;
3073 */
3074 		l_date_eff_funds_flag := l_project_in_rec.date_eff_funds_flag;
3075 END IF;
3076 --sunkalya:federal changes bug#5511353
3077 
3078 
3079 /* 7508661 : EnC : Start */
3080 
3081 IF (l_project_in_rec.ar_rec_notify_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3082    (l_project_in_rec.ar_rec_notify_flag IS NULL)
3083 THEN
3084     l_ar_rec_notify_flag := 'N';
3085 ELSE
3086     l_ar_rec_notify_flag := l_orig_ar_rec_notify_flag;
3087 END IF;
3088 
3089 IF (l_project_in_rec.auto_release_pwp_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3090    (l_project_in_rec.auto_release_pwp_inv IS NULL)
3091 THEN
3092     l_auto_release_pwp_inv := 'Y';
3093 ELSE
3094     l_auto_release_pwp_inv := l_orig_auto_release_pwp_inv;
3095 END IF;
3096 
3097 /* 7508661 : EnC : End */
3098 
3099 
3100 --Bug 3279981 Review
3101    IF (l_project_in_rec.enable_top_task_customer_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3102      (p_project_in.enable_top_task_customer_flag IS NULL) --Added or condition for bug 4762153
3103    THEN
3104        l_en_top_task_customer_flag := NULL;
3105    ELSE
3106        IF l_project_in_rec.enable_top_task_customer_flag IN ('Y','N') THEN
3107           -- Function Security Check
3108           PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3109           ( p_api_version_number => p_api_version_number,
3110             p_responsibility_id  => l_resp_id,
3111             p_function_name      => 'PA_PAXPREPR_CUST_TOP_TASK',
3112             p_msg_count          => l_msg_count,
3113             p_msg_data           => l_msg_data,
3114             p_return_status      => l_return_status,
3115             p_function_allowed   => l_function_allowed);
3116           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3117                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3118           ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3119                RAISE FND_API.G_EXC_ERROR;
3120           END IF;
3121 
3122           IF l_function_allowed = 'N' THEN
3123                pa_interface_utils_pub.map_new_amg_msg
3124                 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3125                  ,p_msg_attribute    => 'CHANGE'
3126                  ,p_resize_flag      => 'Y'
3127                  ,p_msg_context      => 'GENERAL'
3128                  ,p_attribute1       => ''
3129                  ,p_attribute2       => ''
3130                  ,p_attribute3       => ''
3131                  ,p_attribute4       => ''
3132                  ,p_attribute5       => '');
3133                p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3134                RAISE FND_API.G_EXC_ERROR;
3135           END IF;
3136        ELSE
3137           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3138                pa_interface_utils_pub.map_new_amg_msg
3139                ( p_old_message_code => 'PA_TOP_TASK_CUST_FLAG_INVALID'
3140                 ,p_msg_attribute    => 'NOCHANGE' -- Changed to NOCHANGE for Bug  4762153
3141                 ,p_resize_flag      => 'N'
3142                 ,p_msg_context      => 'PROJ'
3143                 ,p_attribute1       => l_project_in_rec.pm_project_reference
3144                 ,p_attribute2       => ''
3145                 ,p_attribute3       => ''
3146                 ,p_attribute4       => ''
3147                 ,p_attribute5       => '');
3148           END IF;
3149           RAISE  FND_API.G_EXC_ERROR;
3150        END IF;
3151        l_en_top_task_customer_flag := l_project_in_rec.enable_top_task_customer_flag;
3152    END IF;
3153 
3154    IF l_project_in_rec.enable_top_task_inv_mth_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3155        l_en_top_task_inv_mth_flag := NULL;
3156    ELSE
3157        IF l_project_in_rec.enable_top_task_inv_mth_flag IN ('Y','N') THEN
3158           -- Function Security Check
3159           PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3160           ( p_api_version_number => p_api_version_number,
3161             p_responsibility_id  => l_resp_id,
3162             p_function_name      => 'PA_PAXPREPR_INV_MTH_TOP_TASK',
3163             p_msg_count          => l_msg_count,
3164             p_msg_data           => l_msg_data,
3165             p_return_status      => l_return_status,
3166             p_function_allowed   => l_function_allowed);
3167           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3168                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3169           ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3170                RAISE FND_API.G_EXC_ERROR;
3171           END IF;
3172 
3173           IF l_function_allowed = 'N' THEN
3174                pa_interface_utils_pub.map_new_amg_msg
3175                 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3176                  ,p_msg_attribute    => 'CHANGE'
3177                  ,p_resize_flag      => 'Y'
3178                  ,p_msg_context      => 'GENERAL'
3179                  ,p_attribute1       => ''
3180                  ,p_attribute2       => ''
3181                  ,p_attribute3       => ''
3182                  ,p_attribute4       => ''
3183                  ,p_attribute5       => '');
3184                p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3185                RAISE FND_API.G_EXC_ERROR;
3186           END IF;
3187        ELSE
3188           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3189                pa_interface_utils_pub.map_new_amg_msg
3190                ( p_old_message_code => 'PA_TT_INV_MTH_FLAG_INVALID'
3191                 ,p_msg_attribute    => 'CHANGE'
3192                 ,p_resize_flag      => 'N'
3193                 ,p_msg_context      => 'PROJ'
3194                 ,p_attribute1       => l_project_in_rec.pm_project_reference
3195                 ,p_attribute2       => ''
3196                 ,p_attribute3       => ''
3197                 ,p_attribute4       => ''
3198                 ,p_attribute5       => '');
3199           END IF;
3200           RAISE  FND_API.G_EXC_ERROR;
3201        END IF;
3202        l_en_top_task_inv_mth_flag := l_project_in_rec.enable_top_task_inv_mth_flag;
3203    END IF;
3204 --Bug 3279981 Review
3205 
3206     --PROJECT
3207     --create a new project using a template or other project as basis
3208 ----dbms_output.put_line('before calling Copy_Project');
3209     pa_project_core1.copy_project  (
3210      x_orig_project_id => l_project_in_rec.created_from_project_id
3211     ,x_project_name    => RTRIM(l_project_in_rec.project_name)
3212     ,x_long_name       => RTRIM(l_project_in_rec.long_name)
3213     ,x_project_number  => RTRIM(l_create_project_number)
3214     ,x_description     => RTRIM(l_project_in_rec.description)
3215     ,x_project_type    => NULL --project_type is always defaulted from template
3216     ,x_project_status_code => l_project_in_rec.project_status_code
3217     ,x_distribution_rule   => l_project_in_rec.distribution_rule
3218     ,x_public_sector_flag  => l_project_in_rec.public_sector_flag
3219     ,x_organization_id     => l_project_in_rec.carrying_out_organization_id
3220     ,x_start_date          => l_out_start_date
3221     ,x_completion_date     => l_out_completion_date
3222     ,x_probability_member_id => l_probability_member_id
3223     ,x_project_value         => l_project_value
3224     ,x_expected_approval_date => l_expected_approval_date
3225 --Sakthi MCB
3226     ,x_agreement_currency     =>   l_agreement_currency
3227     ,x_agreement_amount       =>   l_agreement_amount
3228     ,x_agreement_org_id       =>   l_agreement_org_id
3229 --Sakthi MCB
3230     ,x_copy_task_flag      => l_copy_task_flag
3231     ,x_copy_budget_flag    => l_copy_budget_flag
3232     ,x_use_override_flag   => l_use_override_flag
3233     ,x_copy_assignment_flag => l_copy_assignment_flag
3234     ,x_template_flag       => l_template_flag
3235     ,x_project_id          => l_project_id
3236     ,x_err_code            => l_err_code
3237     ,x_err_stage           => l_err_stage
3238     ,x_err_stack           => l_err_stack
3239     ,x_new_project_number  => l_project_number_out
3240     ,x_pm_product_code     => p_pm_product_code
3241     ,x_pm_project_reference => RTRIM(l_project_in_rec.pm_project_reference)
3242     ,x_attribute_category  => RTRIM(l_attribute_category)
3243     ,x_attribute1          => RTRIM(l_attribute1)
3244     ,x_attribute2          => RTRIM(l_attribute2)
3245     ,x_attribute3          => RTRIM(l_attribute3)
3246     ,x_attribute4          => RTRIM(l_attribute4)
3247     ,x_attribute5          => RTRIM(l_attribute5)
3248     ,x_attribute6          => RTRIM(l_attribute6)
3249     ,x_attribute7          => RTRIM(l_attribute7)
3250     ,x_attribute8          => RTRIM(l_attribute8)
3251     ,x_attribute9          => RTRIM(l_attribute9)
3252     ,x_attribute10         => RTRIM(l_attribute10)
3253     ,x_actual_start_date   => l_actual_start_date
3254     ,x_actual_finish_date  => l_actual_finish_date
3255     ,x_early_start_date    => l_early_start_date
3256     ,x_early_finish_date   => l_early_finish_date
3257     ,x_late_start_date     => l_late_start_date
3258     ,x_late_finish_date    => l_late_finish_date
3259     ,x_scheduled_start_date => l_scheduled_start_date
3260     ,x_scheduled_finish_date => l_scheduled_finish_date
3261     ,x_team_template_id    => l_team_template_id
3262     ,x_country_code        => l_country_code
3263     ,x_region              => l_region
3264     ,x_city                => l_city
3265 -- anlee opportunity changes
3266     ,x_opp_value_currency_code => l_opp_value_currency_code
3267     ,x_org_project_copy_flag  => 'N'
3268     ,x_priority_code       => l_priority_code
3269     ,x_security_level       => l_security_level
3270     ,x_customer_id          =>  l_in_customer_id  --Modified for bug 3825528 l_project_in_rec.customer_id Bug no 3106256
3271     --Bug 3279981 Review FP_M development
3272     ,p_en_top_task_cust_flag    => l_en_top_task_customer_flag
3273     ,p_en_top_task_inv_mth_flag => l_en_top_task_inv_mth_flag
3274     ,p_date_eff_funds_flag => l_date_eff_funds_flag   --sunkalya:federal changes bug#5511353
3275     ,p_ar_rec_notify_flag   =>  l_ar_rec_notify_flag   -- 7508661 : EnC
3276     ,p_auto_release_pwp_inv =>  l_auto_release_pwp_inv -- 7508661 : EnC
3277     );
3278 
3279     IF l_err_code > 0
3280     then
3281    p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3282 
3283    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3284    THEN
3285 
3286       IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3287       THEN
3288 
3289          pa_interface_utils_pub.map_new_amg_msg('PA_COPY_PROJECT_FAILED','CHANGE','N',
3290                       'PROJ',l_project_in_rec.pm_project_reference,
3291                       '','','','');
3292       ELSE
3293 
3294 
3295          pa_interface_utils_pub.map_new_amg_msg(l_err_stage,'CHANGE','Y',
3296                       'PROJ',l_project_in_rec.pm_project_reference,
3297                       '','','','');
3298       END IF;
3299 
3300    END IF;
3301 
3302    p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3303    RAISE FND_API.G_EXC_ERROR;
3304 
3305     ELSIF l_err_code < 0
3306     then
3307 
3308    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3309 
3310    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3311    THEN
3312       pa_interface_utils_pub.map_new_amg_msg('PA_COPY_PROJECT_FAILED','CHANGE','N',
3313                       'PROJ',l_project_in_rec.pm_project_reference,
3314                       '','','','');
3315       /*  Added the following code for bug 3725338 */
3316       FND_MESSAGE.SET_NAME('PA','PA_UNEXPECTED_ERR_AMG');
3317       FND_MESSAGE.SET_TOKEN('ORAERR',  l_err_stage);
3318       FND_MSG_PUB.add;
3319       /* Code addition ended for bug 3725338 */
3320    END IF;
3321 
3322    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3323    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3324 
3325     end IF;
3326 
3327 /*  Not required anymore since they are passed as input to copy project
3328     UPDATE pa_projects
3329     SET pm_project_reference = l_project_in_rec.pm_project_reference
3330     ,   pm_product_code      = p_pm_product_code
3331     WHERE project_id = l_project_id;
3332 */
3333 
3334     --get the values associated to the project
3335     OPEN l_project_csr(l_project_id);
3336     FETCH l_project_csr INTO l_project_rec;
3337     CLOSE l_project_csr;
3338 
3339     -- ADD CUSTOMERS
3340     -- add overridable Primary Customers and their contacts
3341 
3342   /*  IF l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3343     AND l_project_in_rec.customer_id IS NOT NULL */ --commented for tracking bug
3344     IF l_in_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3345     AND l_in_customer_id IS NOT NULL
3346 
3347     THEN
3348 
3349       l_is_overridable := FALSE;
3350   i := l_override_fields_tab.first;
3351   WHILE i IS NOT NULL LOOP
3352 
3353 
3354     IF l_override_fields_tab(i).pa_field_name = 'CUSTOMER_NAME'
3355     THEN
3356       l_is_overridable := TRUE;
3357 			l_project_relationship_code := l_override_fields_tab(i).type; --introduced for Bug#5517655
3358                         --l_relationship_type := l_override_fields_tab(i).type; commented for Bug#5517655
3359       EXIT;
3360     END IF;
3361     i := l_override_fields_tab.next(i);
3362   END LOOP;
3363 
3364   IF NOT l_is_overridable
3365   THEN
3366       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3367       THEN
3368             pa_interface_utils_pub.map_new_amg_msg
3369               ( p_old_message_code => 'PA_CUSTOMER_NOT_OVERRIDABLE'
3370                ,p_msg_attribute    => 'CHANGE'
3371                ,p_resize_flag      => 'Y'
3372                ,p_msg_context      => 'PROJ'
3373                ,p_attribute1       => l_project_in_rec.pm_project_reference
3374                ,p_attribute2       => ''
3375                ,p_attribute3       => ''
3376                ,p_attribute4       => ''
3377                ,p_attribute5       => '');
3378       END IF;
3379 
3380       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3381       RAISE FND_API.G_EXC_ERROR;
3382 
3383   END IF;
3384 
3385   /*Customer Account Relationship Changes*/
3386         IF l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3387     AND l_bill_to_customer_id IS NOT NULL
3388     THEN
3389 
3390         l_is_overridable := FALSE;
3391         i := l_override_fields_tab.first;
3392         WHILE i IS NOT NULL LOOP
3393 
3394 
3395                 IF l_override_fields_tab(i).pa_field_name = 'BILL_TO_CUSTOMER'
3396                 THEN
3397                         l_is_overridable := TRUE;
3398                         EXIT;
3399                 END IF;
3400                 i := l_override_fields_tab.next(i);
3401         END LOOP;
3402 
3403         IF NOT l_is_overridable
3404         THEN
3405                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3406                         THEN
3407             pa_interface_utils_pub.map_new_amg_msg
3408               ( p_old_message_code => 'PA_BILL_TO_NOT_OVERRIDABLE'
3409                ,p_msg_attribute    => 'CHANGE'
3410                ,p_resize_flag      => 'Y'
3411                ,p_msg_context      => 'PROJ'
3412                ,p_attribute1       => l_project_in_rec.pm_project_reference
3413                ,p_attribute2       => ''
3414                ,p_attribute3       => ''
3415                ,p_attribute4       => ''
3416                ,p_attribute5       => '');
3417                         END IF;
3418 
3419                         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3420                         RAISE FND_API.G_EXC_ERROR;
3421 
3422         END IF;
3423       END IF;
3424 
3425     IF l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3426     AND l_ship_to_customer_id IS NOT NULL
3427     THEN
3428 
3429         l_is_overridable := FALSE;
3430         i := l_override_fields_tab.first;
3431         WHILE i IS NOT NULL LOOP
3432 
3433 
3434                 IF l_override_fields_tab(i).pa_field_name = 'SHIP_TO_CUSTOMER'
3435                 THEN
3436                         l_is_overridable := TRUE;
3437                         EXIT;
3438                 END IF;
3439                 i := l_override_fields_tab.next(i);
3440         END LOOP;
3441 
3442         IF NOT l_is_overridable
3443         THEN
3444                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3445                         THEN
3446             pa_interface_utils_pub.map_new_amg_msg
3447               ( p_old_message_code => 'PA_SHIP_TO_NOT_OVERRIDABLE'
3448                ,p_msg_attribute    => 'CHANGE'
3449                ,p_resize_flag      => 'Y'
3450                ,p_msg_context      => 'PROJ'
3451                ,p_attribute1       => l_project_in_rec.pm_project_reference
3452                ,p_attribute2       => ''
3453                ,p_attribute3       => ''
3454                ,p_attribute4       => ''
3455                ,p_attribute5       => '');
3456                         END IF;
3457 
3458                         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3459                         RAISE FND_API.G_EXC_ERROR;
3460 
3461         END IF;
3462      END IF;
3463      ----dbms_output.put_line('Does the control come till here');
3464 /*Customer account relationship changes */
3465 /* Tracking bug ..customer code added in a loop */
3466 i := p_customers_in.first;
3467 ----dbms_output.put_line('value of i'||i);
3468 IF p_customers_in.exists(i) THEN
3469  ----dbms_output.put_line('if CUSTOMER ARE PASSED TO CREATE_PROJECT ');
3470   ----dbms_output.put_line('Value of p_project_in.customer_id'||p_customers_in(i).customer_id);
3471 
3472    /*
3473    These assignments have already been done
3474    l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
3475    l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
3476  --added for bug 3911782
3477    l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
3478    l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
3479    l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
3480    l_cust_bill_split := p_customers_in(i).Customer_Bill_Split; */
3481    ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3482    ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3483    ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3484    ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3485    --changes end for Bug 3911782
3486    IF p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3487      /* Commented the below code for Bug#5517655 */
3488 
3489      /*IF p_customers_in(i).project_relationship_code IS NULL OR
3490         p_customers_in(i).project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
3491           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3492               THEN
3493                pa_utils.add_message
3494                 ( p_app_short_name   => 'PA'-- new message for AA TRACKING
3495                  ,p_msg_name    => 'PA_RELATIONSHIP_CODE_REQD'
3496                  ,p_token1           => 'PROJECT_NAME'
3497                  ,p_value1           => l_project_rec.segment1
3498                  ,p_token2           => 'CUSTOMER_ID'
3499                  ,p_value2           => p_customers_in(i).customer_id
3500                 );
3501              END IF;
3502              RAISE FND_API.G_EXC_ERROR;
3503          END IF;
3504       */ --End of commenting for Bug#5517655
3505 
3506       IF p_customers_in(i).CUSTOMER_BILL_SPLIT IS NULL OR
3507         p_customers_in(i).CUSTOMER_BILL_SPLIT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
3508         l_cust_bill_split := 100; --Default it to 100
3509       END If;
3510 /* End of tracking changes */
3511  END IF;
3512    /* Code added for tracking bug */
3513        ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
3514    If (p_customers_in(i).CONTACT_ID IS NOT NULL) AND (p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3515       then
3516         ----dbms_output.put_line('is this fired');
3517 
3518          IF (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE IS NULL) OR (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )THEN
3519            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3520               THEN
3521                pa_utils.add_message
3522               ( p_app_short_name   => 'PA'-- new message for tracking bug
3523                  ,p_msg_name    => 'PA_CONTACT_TYPE_REQD'
3524                  ,p_token1           => 'PROJECT_NAME'
3525                  ,p_value1           => l_project_in_rec.pm_project_reference
3526                  ,p_token2           => 'CUSTOMER_ID'
3527                  ,p_value2           => p_customers_in(i).customer_id
3528                  ,p_token3           => 'CONTACT_ID'
3529                  ,p_value3           => p_customers_in(i).CONTACT_ID
3530               );
3531            END IF;
3532             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3533             p_return_status             := FND_API.G_RET_STS_ERROR;
3534             RAISE FND_API.G_EXC_ERROR;
3535          END IF;
3536    end if;
3537         ----dbms_output.put_line('Error is hrown soon after this');
3538       If  p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
3539         l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
3540 	l_ship_to_contact_id := NULL; -- Bug 5622539
3541       ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
3542         l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
3543 	l_bill_to_contact_id := NULL; -- Bug 5622539
3544       Else
3545         l_bill_to_contact_id := NULL;
3546         l_ship_to_contact_id := NULL;
3547       End If;
3548       /** end of chnages for tracking bug by aditi **/
3549 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
3550 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
3551 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
3552 
3553 /* Code changes end for tracking bug */
3554 If (l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3555        OR (l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3556         OR (p_customers_in(1).CONTACT_ID IS NOT NULL AND p_customers_in(1).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)--added for tracking bug by aditi
3557 
3558 --bug 3716805
3559     THEN
3560       If l_in_customer_id IS NULL OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3561        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3562             THEN
3563             pa_interface_utils_pub.map_new_amg_msg
3564             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
3565              ,p_msg_attribute    => 'CHANGE'
3566              ,p_resize_flag      => 'N'
3567              ,p_msg_context      => 'PROJ'
3568              ,p_attribute1       => l_project_in_rec.pm_project_reference
3569              ,p_attribute2       => ''
3570              ,p_attribute3       => ''
3571              ,p_attribute4       => ''
3572              ,p_attribute5       => '');
3573         END IF;
3574             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3575             p_return_status             := FND_API.G_RET_STS_ERROR;
3576             RAISE FND_API.G_EXC_ERROR;
3577     end if;
3578 
3579 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
3580 END if; -- end here
3581 -------------------------------------------------------------------------------------------
3582 ----dbms_output.put_line('before calling get_customer_info');
3583 ----dbms_output.put_line('If project_in_rec_type is there - then control will directl come here');
3584 
3585 
3586    If (l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3587        OR (l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3588 
3589 --bug 3716805
3590     THEN
3591       If l_in_customer_id IS NULL OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3592        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3593             THEN
3594             pa_interface_utils_pub.map_new_amg_msg
3595             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
3596              ,p_msg_attribute    => 'CHANGE'
3597              ,p_resize_flag      => 'N'
3598              ,p_msg_context      => 'PROJ'
3599              ,p_attribute1       => l_project_in_rec.pm_project_reference
3600              ,p_attribute2       => ''
3601              ,p_attribute3       => ''
3602              ,p_attribute4       => ''
3603              ,p_attribute5       => '');
3604         END IF;
3605             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3606             p_return_status             := FND_API.G_RET_STS_ERROR;
3607             RAISE FND_API.G_EXC_ERROR;
3608     end if;
3609 
3610 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
3611 
3612 
3613 /* Bug 3077676 Begin */
3614 
3615  -- Not adding this error message in get_customer_info as that is called from lot of other places too
3616  -- and it would be a risk changing that.
3617 
3618    OPEN  get_cust_acc_rel_code;
3619    FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
3620    CLOSE get_cust_acc_rel_code;
3621  -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
3622    -- relations ship code is N.
3623    /* CODE COMMENTED FOR TRACKING BUG
3624    IF(NVL(l_cust_acc_rel_code,'N') ='N' and
3625       l_project_in_rec.customer_id IS NOT NULL AND l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
3626     ((l_project_in_rec.bill_to_customer_id IS NOT NULL AND l_project_in_rec.bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3627       l_project_in_rec.customer_id <> l_project_in_rec.bill_to_customer_id
3628      ) or
3629      (
3630       l_project_in_rec.ship_to_customer_id  IS NOT NULL AND l_project_in_rec.ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3631       l_project_in_rec.customer_id <> l_project_in_rec.ship_to_customer_id
3632     ))
3633    THEN
3634             pa_interface_utils_pub.map_new_amg_msg
3635               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3636                ,p_msg_attribute    => 'CHANGE'
3637                ,p_resize_flag      => 'Y'
3638                ,p_msg_context      => 'PROJ'
3639                ,p_attribute1       => l_project_in_rec.pm_project_reference
3640                ,p_attribute2       => ''
3641                ,p_attribute3       => ''
3642                ,p_attribute4       => ''
3643                ,p_attribute5       => '');
3644            RAISE FND_API.G_EXC_ERROR;
3645    END IF; */
3646   /* Code added for tracking bug */
3647      IF(NVL(l_cust_acc_rel_code,'N') ='N' and
3648       l_in_customer_id IS NOT NULL AND l_in_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
3649     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3650       l_in_customer_id <> l_bill_to_customer_id
3651      ) or
3652      (
3653       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3654      l_in_customer_id <> l_ship_to_customer_id
3655     ))
3656    THEN
3657             pa_interface_utils_pub.map_new_amg_msg
3658               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3659                ,p_msg_attribute    => 'CHANGE'
3660                ,p_resize_flag      => 'Y'
3661                ,p_msg_context      => 'PROJ'
3662                ,p_attribute1       => l_project_in_rec.pm_project_reference
3663                ,p_attribute2       => ''
3664                ,p_attribute3       => ''
3665                ,p_attribute4       => ''
3666                ,p_attribute5       => '');
3667            RAISE FND_API.G_EXC_ERROR;
3668    END IF;
3669 
3670    /* End of part 1 tracking */
3671 
3672 
3673    /* Bug 3123361. Commenting the following validation as the complete validation of the below is done above.
3674    IF NVL(l_cust_acc_rel_code,'N') ='N'
3675            AND l_project_in_rec.customer_id IS NOT NULL AND l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3676        AND l_project_in_rec.bill_to_customer_id IS NOT NULL AND l_project_in_rec.bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3677        AND l_project_in_rec.ship_to_customer_id  IS NOT NULL AND l_project_in_rec.ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3678        AND l_project_in_rec.customer_id <> l_project_in_rec.bill_to_customer_id
3679        AND l_project_in_rec.customer_id <> l_project_in_rec.ship_to_customer_id
3680    THEN
3681             pa_interface_utils_pub.map_new_amg_msg
3682               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3683                ,p_msg_attribute    => 'CHANGE'
3684                ,p_resize_flag      => 'Y'
3685                ,p_msg_context      => 'PROJ'
3686                ,p_attribute1       => l_project_in_rec.pm_project_reference
3687                ,p_attribute2       => ''
3688                ,p_attribute3       => ''
3689                ,p_attribute4       => ''
3690                ,p_attribute5       => '');
3691            RAISE FND_API.G_EXC_ERROR;
3692 
3693    END IF;
3694    */
3695 /* Bug 3077676 End */
3696 
3697       -- 4193743 IF bill_to_cutomer_id and ship_to_customer_id are not passed set it to NULL
3698       -- as get_customer_info relies on NULL value not the PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3699       -- Using the local variables l_ship_to_customer_id and l_bill_to_customer_id for further processing
3700 /* The code below is being commented by aditi for tracking bug..these assignmentd have already been made
3701 at the begiinning of the customers addition code
3702 
3703       IF l_project_in_rec.bill_to_customer_id IS NOT NULL AND
3704          l_project_in_rec.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3705       THEN
3706          l_bill_to_customer_id := NULL;
3707       ELSE
3708          -- if value is passed assign it to local variable
3709          l_bill_to_customer_id := l_project_in_rec.bill_to_customer_id; -- 4193743 review comment
3710       END IF;
3711 
3712       IF l_project_in_rec.ship_to_customer_id IS NOT NULL AND
3713          l_project_in_rec.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3714       THEN
3715          l_ship_to_customer_id := NULL;
3716       ELSE
3717          -- if value is passed assign it to local variable
3718          l_ship_to_customer_id := l_project_in_rec.ship_to_customer_id; --  4193743 review comment
3719       END IF;
3720 
3721      -- 4193743 end */
3722 
3723 /* Start of changes for bug 5482997 */
3724 
3725       IF l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3726          l_bill_to_customer_id := NULL;
3727       END IF;
3728 
3729       IF l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3730          l_ship_to_customer_id := NULL;
3731       END IF;
3732 
3733 /* End of changes for bug 5482997 */
3734 
3735 
3736 ----dbms_output.put_line('Before CALLING get_cstomer_info');
3737 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3738 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3739 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3740 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3741 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3742 ----dbms_output.put_line('Value of l_bill_to_contact_id'||l_bill_to_contact_id);
3743 ----dbms_output.put_line('Value of l_ship_to_contact_id'||l_ship_to_contact_id);
3744 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3745 
3746 /* Bug 5731766 This code was moved to before get_customer_info call
3747        We need to bypass call get_customer_info if l_proj_type_class
3748        is 'contract'.*/
3749 IF l_project_id IS NOT NULL THEN
3750 OPEN  c_prj(l_project_id);
3751 FETCH c_prj INTO l_proj_status, l_proj_type_class;
3752 CLOSE c_prj;
3753 END IF;
3754 
3755 --if condition introduced for bug 5731766
3756 --dbms_output.put_line('Value of l_source_project_type '||l_proj_type_class);
3757 If nvl(l_proj_type_class,'NONE') = 'CONTRACT' then
3758       pa_customer_info.get_customer_info( X_project_ID          => l_project_id      --CAR changes
3759                                          ,X_Customer_Id         => l_in_customer_id -- l_project_in_rec.customer_id tracking
3760                                          ,X_Bill_To_Customer_Id => l_bill_to_customer_id -- 4193743 l_project_in_rec.bill_to_customer_id  -- car changes
3761                                          ,X_Ship_To_Customer_Id => l_ship_to_customer_id -- 4193743 l_project_in_rec.ship_to_customer_id  -- car changes
3762                                          ,X_Bill_To_Address_Id  => l_bill_to_address_id
3763                                          ,X_Ship_To_Address_Id  => l_ship_to_address_id
3764                                          ,X_Bill_To_Contact_Id  => l_bill_to_contact_id
3765                                          ,X_Ship_To_Contact_Id  => l_ship_to_contact_id
3766                                          ,X_Err_Code            => l_err_code
3767                                          ,X_Err_Stage           => l_err_stage
3768                                          ,X_Err_Stack           => l_err_stack
3769                                          ,p_calling_module      => 'AMG' --added for Bug#4770535
3770                                         );
3771 
3772 
3773 ----dbms_output.put_line('AFTER calling get_customer_info l_err_code'||l_err_code);
3774 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3775 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3776 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3777 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3778 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3779 ----dbms_output.put_line('Value of l_bill_to_contact_id'||l_bill_to_contact_id);
3780 ----dbms_output.put_line('Value of l_ship_to_contact_id'||l_ship_to_contact_id);
3781 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3782 -- For this API,error code 10 is a warning.Anything above 10 is an error
3783       IF l_err_code > 10
3784       THEN
3785 
3786     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3787     THEN
3788 
3789       IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3790       THEN
3791             pa_interface_utils_pub.map_new_amg_msg
3792               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
3793                ,p_msg_attribute    => 'CHANGE'
3794                ,p_resize_flag      => 'Y'
3795                ,p_msg_context      => 'PROJ'
3796                ,p_attribute1       => l_project_in_rec.pm_project_reference
3797                ,p_attribute2       => ''
3798                ,p_attribute3       => ''
3799                ,p_attribute4       => ''
3800                ,p_attribute5       => '');
3801          ELSE
3802             pa_interface_utils_pub.map_new_amg_msg
3803               ( p_old_message_code => l_err_stage
3804                ,p_msg_attribute    => 'CHANGE'
3805                ,p_resize_flag      => 'Y'
3806                ,p_msg_context      => 'PROJ'
3807                ,p_attribute1       => l_project_in_rec.pm_project_reference
3808                ,p_attribute2       => ''
3809                ,p_attribute3       => ''
3810                ,p_attribute4       => ''
3811                ,p_attribute5       => '');
3812       END IF;
3813 
3814     END IF;
3815 
3816     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3817     RAISE FND_API.G_EXC_ERROR;
3818 
3819       ELSIF l_err_code < 0
3820       THEN
3821 
3822     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3823     THEN
3824             pa_interface_utils_pub.map_new_amg_msg
3825               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
3826                ,p_msg_attribute    => 'CHANGE'
3827                ,p_resize_flag      => 'Y'
3828                ,p_msg_context      => 'PROJ'
3829                ,p_attribute1       => l_project_in_rec.pm_project_reference
3830                ,p_attribute2       => ''
3831                ,p_attribute3       => ''
3832                ,p_attribute4       => ''
3833                ,p_attribute5       => '');
3834     END IF;
3835 
3836     p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3837     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3838       END IF;
3839 end if;  --bug 5731766
3840 --bug 5731766
3841 If l_bill_to_customer_id is null then
3842     l_bill_to_customer_id := l_in_customer_id;
3843 end if;
3844 
3845 If l_ship_to_customer_id is null then
3846     l_ship_to_customer_id := l_in_customer_id;
3847 end if;
3848 --bug 5731766
3849 
3850 -- IC and Multi National Currency Changes starts here ...
3851 
3852 /* commented for bug 3000981*/
3853 /*    OPEN l_customer_csr (l_project_in_rec.customer_id);
3854     FETCH l_customer_csr INTO l_inv_currency_code,
3855                               l_inv_rate_type,
3856                               l_inv_rate_date,
3857                               l_inv_exchange_rate,
3858                               l_allow_inv_rate_type_fg,
3859                               l_bill_another_prj_flag,
3860                               l_receiver_task_id;
3861     CLOSE l_customer_csr;
3862 */
3863 /* commented till here for bug 3000981*/
3864 
3865 /* added for bug 3000981*/
3866     OPEN cur_pa_impl;
3867     FETCH cur_pa_impl INTO l_inv_rate_type;
3868     CLOSE cur_pa_impl;
3869 /* added till for bug 3000981*/
3870 
3871 
3872 -- IC and Multi National Currency Changes ends here ...
3873 
3874 --  Removed because of the ALL OR NOTHING decision
3875 --  --only create customer when there is a billing and shipping address
3876 --  IF l_err_code <> 20
3877 --  THEN
3878 
3879 -- Bug 3279981
3880 -- Set the values of customer bill split and default top task customer flag colums based on
3881 -- whether the top task customer flag is checked or not
3882 
3883 --sunkalya federal changes. Bug#5511353
3884 
3885 IF l_project_in_rec.enable_top_task_customer_flag = 'Y' OR l_project_in_rec.date_eff_funds_flag ='Y' THEN
3886 
3887      l_cust_bill_split := null;
3888 
3889      IF (l_project_in_rec.enable_top_task_customer_flag = 'Y') THEN
3890 
3891 	l_def_tt_cust_flag := 'Y';
3892      ELSE
3893 	l_def_tt_cust_flag := 'N';
3894      END IF;
3895 
3896 ELSIF l_project_in_rec.enable_top_task_customer_flag = 'N' AND l_project_in_rec.date_eff_funds_flag ='N' THEN
3897       l_cust_bill_split := 100;
3898       l_def_tt_cust_flag := 'N';
3899 
3900 ELSIF l_project_in_rec.enable_top_task_customer_flag ='N' OR l_project_in_rec.date_eff_funds_flag ='N' THEN
3901 
3902       IF l_project_in_rec.enable_top_task_customer_flag ='N' THEN
3903 		IF l_orig_date_eff_funds_flag ='Y' THEN
3904 			l_cust_bill_split := null;
3905 			l_def_tt_cust_flag := 'N';
3906 		ELSE
3907 			l_cust_bill_split := 100;
3908 			l_def_tt_cust_flag := 'N';
3909 		END IF;
3910       ELSIF l_project_in_rec.date_eff_funds_flag ='N' THEN
3911 		IF l_orig_def_tt_flag ='Y' THEN
3912 			l_cust_bill_split := null;
3913 			l_def_tt_cust_flag := 'Y';
3914 		ELSE
3915 			l_cust_bill_split := 100;
3916 			l_def_tt_cust_flag := 'N';
3917 		END IF;
3918       END IF;
3919 
3920 ELSIF l_orig_def_tt_flag = 'Y' OR l_orig_date_eff_funds_flag ='Y' THEN
3921 
3922      l_cust_bill_split := null;
3923 
3924      IF l_orig_def_tt_flag = 'Y' THEN
3925 	l_def_tt_cust_flag := 'Y';
3926      END IF;
3927 ELSE
3928 
3929      l_cust_bill_split := 100;
3930      l_def_tt_cust_flag := 'N';
3931 
3932 END IF;
3933 --sunkalya:federal changes bug#5511353
3934 ----dbms_output.put_line('Before Calling create_customer_contacts');
3935 
3936   pa_customer_info.create_customer_contacts
3937                                ( l_project_id
3938                                 ,l_in_customer_id -- l_project_in_rec.customer_id
3939                                 ,l_project_relationship_code -- l_relationship_type tracking
3940                                 --Bug 3279981
3941                                 --,100
3942                                 ,l_cust_bill_split
3943                                 ,l_bill_to_customer_id -- 4193743 l_project_in_rec.bill_to_customer_id  -- car changes
3944                                 ,l_ship_to_customer_id -- 4193743 l_project_in_rec.ship_to_customer_id  -- car changes
3945                                 ,l_bill_to_address_id
3946                                 ,l_ship_to_address_id
3947                                 ,l_bill_to_contact_id
3948                                 ,l_ship_to_contact_id
3949                                           --bug 2293158
3950                                 --,nvl(l_inv_currency_code, l_project_currency_code)
3951                                 ,l_project_currency_code -- bug 3000981
3952                                 ,l_inv_rate_type
3953                                 ,l_inv_rate_date
3954                                 ,l_inv_exchange_rate
3955                                 ,l_allow_inv_rate_type_fg
3956                                 ,l_bill_another_prj_flag
3957                                 ,l_receiver_task_id
3958                                 ,l_def_tt_cust_flag   --Bug 3279981
3959                                 ,fnd_global.user_id
3960                                 ,fnd_global.login_id
3961                                 ,l_err_code
3962                                 ,l_err_stage
3963                                 ,l_err_stack );
3964 ----dbms_output.put_line('After  Calling create_customer_contacts l_err_code'||l_err_code);
3965 
3966 
3967   IF l_err_code > 0
3968    THEN
3969 
3970       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3971       THEN
3972 
3973         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3974         THEN
3975                                     pa_interface_utils_pub.map_new_amg_msg
3976                                        ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
3977                                         ,p_msg_attribute    => 'CHANGE'
3978                                         ,p_resize_flag      => 'N'
3979                                         ,p_msg_context      => 'PROJ'
3980                                         ,p_attribute1       => l_project_in_rec.pm_project_reference
3981                                         ,p_attribute2       => ''
3982                                         ,p_attribute3       => ''
3983                                         ,p_attribute4       => ''
3984                                         ,p_attribute5       => '');
3985                                 ELSE
3986                                      pa_interface_utils_pub.map_new_amg_msg
3987                                         ( p_old_message_code => l_err_stage
3988                                          ,p_msg_attribute    => 'CHANGE'
3989                                          ,p_resize_flag      => 'N'
3990                                          ,p_msg_context      => 'PROJ'
3991                                          ,p_attribute1       => l_project_in_rec.pm_project_reference
3992                                          ,p_attribute2       => ''
3993                                          ,p_attribute3       => ''
3994                                          ,p_attribute4       => ''
3995                                          ,p_attribute5       => '');
3996         END IF;
3997 
3998       END IF;
3999 
4000       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4001       RAISE FND_API.G_EXC_ERROR;
4002 
4003         ELSIF l_err_code < 0
4004         THEN
4005 
4006       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4007       THEN
4008                             pa_interface_utils_pub.map_new_amg_msg
4009                              ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
4010                               ,p_msg_attribute    => 'CHANGE'
4011                               ,p_resize_flag      => 'N'
4012                               ,p_msg_context      => 'PROJ'
4013                               ,p_attribute1       => l_project_in_rec.pm_project_reference
4014                               ,p_attribute2       => ''
4015                               ,p_attribute3       => ''
4016                               ,p_attribute4       => ''
4017                               ,p_attribute5       => '');
4018       END IF;
4019 
4020       p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4021       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4022         END IF;
4023         --END if;
4024 
4025                 --Call copy retention after all customers are created.
4026                 DECLARE
4027                 BEGIN
4028                      pa_retention_util.copy_retention_setup (
4029                             p_fr_project_id             => l_project_in_rec.created_from_project_id
4030                            ,p_to_project_id             => l_project_id
4031                            ,p_fr_date                   => l_project_rec.start_date
4032                            ,p_to_date                   => l_project_rec.completion_date
4033                            ,x_return_status             => l_return_status
4034                            ,x_msg_count                 => l_msg_count
4035                            ,x_msg_data                  => l_msg_data);
4036 
4037                      l_msg_count := FND_MSG_PUB.count_msg;
4038                      IF l_msg_count > 0 THEN
4039                         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4040                         RAISE  FND_API.G_EXC_ERROR;
4041                      END IF;
4042                 END;
4043                 --End copy retention changes.
4044 
4045 --  END IF; --l_err_code <> 20
4046 
4047        -- anlee org role changes
4048        -- create a project party if the added customer is an organization
4049        l_party_id := null;
4050        l_project_party_id := null;
4051        OPEN l_check_org_csr(l_in_customer_id);
4052        FETCH l_check_org_csr INTO l_party_id;
4053        IF l_check_org_csr%NOTFOUND then
4054          l_party_id := null;
4055        END IF;
4056        CLOSE l_check_org_csr;
4057 
4058        if l_party_id is not null then
4059 
4060           PA_PROJECT_PARTIES_PUB.CREATE_PROJECT_PARTY(
4061             p_validate_only              => FND_API.G_FALSE
4062           , p_object_id                  => l_project_id
4063           , p_OBJECT_TYPE                => 'PA_PROJECTS'
4064           , p_project_role_id            => 100
4065           , p_project_role_type          => 'CUSTOMER_ORG'
4066           , p_RESOURCE_TYPE_ID           => 112
4067           , p_resource_source_id         => l_party_id
4068           , p_start_date_active          => null
4069           , p_calling_module             => 'FORM'
4070           , p_project_id                 => l_project_id
4071           , p_project_end_date           => null
4072           , p_end_date_active            => l_end_date_active
4073           , x_project_party_id           => l_project_party_id
4074           , x_resource_id                => l_resource_id
4075           , x_wf_item_type               => l_wf_item_type
4076           , x_wf_type                    => l_wf_type
4077           , x_wf_process                 => l_wf_party_process
4078           , x_assignment_id              => l_assignment_id
4079           , x_return_status              => l_return_status
4080           , x_msg_count                  => l_msg_count
4081           , x_msg_data                   => l_msg_data );
4082 
4083           l_msg_count := FND_MSG_PUB.count_msg;
4084           IF l_msg_count > 0 THEN
4085             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4086             RAISE  FND_API.G_EXC_ERROR;
4087           END IF;
4088 
4089           -- Add the new project party ID to the customers row
4090           UPDATE PA_PROJECT_CUSTOMERS
4091           SET project_party_id = l_project_party_id
4092           WHERE project_id = l_project_id
4093           AND customer_id = l_in_customer_id; -- l_project_in_rec.customer_id; Tracking
4094        end if;
4095 
4096     END IF; --customer exists
4097 /*
4098 
4099 --Sunkalya federal. Bug#5511353
4100     OPEN  count_cust(l_project_id);
4101     FETCH count_cust INTO l_count_cust;
4102     CLOSE count_cust;
4103 
4104     OPEN  chk_task_level_funding(l_project_id);
4105     FETCH chk_task_level_funding INTO l_chk_task_level_funding;
4106     CLOSE chk_task_level_funding;
4107 
4108 
4109     IF l_count_cust > 1										AND
4110        l_chk_task_level_funding = 'Y'								AND
4111        l_project_in_rec.date_eff_funds_flag = 'N'						AND
4112        l_orig_date_eff_funds_flag= 'Y'								AND
4113        (
4114 		l_project_in_rec.enable_top_task_customer_flag = 'N' OR
4115 			(
4116 				nvl(l_project_in_rec.enable_top_task_customer_flag,
4117 				PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
4118 				l_orig_def_tt_flag = 'N'
4119 			)
4120        )
4121 THEN
4122 		PA_UTILS.ADD_MESSAGE(	 p_app_short_name  =>  'PA'
4123 					,p_msg_name         => 'PA_TASK_FUNDING_EXIST'
4124 				    );
4125 
4126 		l_return_status := FND_API.G_RET_STS_ERROR;
4127 
4128 		RAISE  FND_API.G_EXC_ERROR;
4129 
4130 END IF;
4131 --Sunkalya federal. Bug#5511353
4132 
4133 */
4134 
4135     -- KEY_MEMBER
4136     -- add overridable Key Members
4137 
4138     -- l_key_members := p_key_members; Commented for Bug 6408593
4139 
4140     i := l_key_members.first;
4141 
4142     IF l_key_members.exists(i)
4143     THEN
4144 
4145     --checking for overridability is done in the called procedure add_key_members
4146 
4147   WHILE i IS NOT NULL LOOP
4148 
4149         /*Commented the below code for the bug 2910972 since the defaulting is handled in the
4150         pa_project_parties_pub.create_project_party when a null value is passed*/
4151 
4152    /*IF l_key_members(i).start_date IS NULL
4153     OR l_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4154     THEN   IF l_project_rec.start_date IS NULL
4155       OR l_project_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4156       THEN l_key_members(i).start_date := trunc(sysdate);
4157       ELSE l_key_members(i).start_date := l_project_rec.start_date;
4158       END IF;
4159     END IF;*/
4160 
4161      /*Bug#2910972-Adding the below code*/
4162 
4163      IF l_key_members(i).start_date =
4164         PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4165      THEN
4166         l_key_members(i).start_date := NULL;
4167      END IF;
4168 
4169 /*
4170 -- Not required.Key member end date can be left blank.Otherwise poses
4171 -- problems with security,since a key member has to be currently active
4172 -- to be able to update a project and defaulting the end date to the
4173 -- project's end date would result in inability to update projects
4174 -- with earlier completion dates
4175 
4176     IF l_key_members(i).end_date IS NULL
4177     OR l_key_members(i).end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4178     THEN   IF l_project_rec.completion_date IS NULL
4179       OR l_project_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4180       THEN l_key_members(i).end_date := NULL;
4181       ELSE l_key_members(i).end_date := l_project_rec.completion_date;
4182       END IF;
4183     END IF;
4184 */
4185     IF l_key_members(i).end_date =
4186                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
4187        l_key_members(i).end_date := NULL;
4188                 END IF;
4189 
4190     i := l_key_members.next(i);
4191 
4192   END LOOP;
4193 
4194   pa_project_pvt.add_key_members(l_return_status
4195               ,l_project_in_rec.created_from_project_id
4196               ,l_project_id
4197               ,l_key_members
4198                );
4199 
4200       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4201       THEN
4202       p_project_out.return_status := l_return_status;
4203       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4204 
4205       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4206       THEN
4207       p_project_out.return_status := l_return_status;
4208       RAISE FND_API.G_EXC_ERROR;
4209       END IF;
4210 
4211       /* Start of code for bug #2111806
4212          Call the check_manager_date_range to check if the Project
4213      Manager exists for the complete duration of the Project. */
4214 
4215       pa_project_check_pvt.check_manager_date_range(p_project_id    =>  l_project_id
4216                                ,p_return_status =>  l_return_status);
4217 
4218       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4219       THEN
4220         p_project_out.return_status := l_return_status;
4221     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4222 
4223       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4224       THEN
4225         p_project_out.return_status := l_return_status;
4226         RAISE FND_API.G_EXC_ERROR;
4227       END IF;
4228       /* End of code for bug #2111806 */
4229 
4230     END IF;
4231 
4232     /* Start of code for bug #2111806
4233        Throw an error if there are no Project Managers assigned.
4234        This has to be thrown irrespective of whether there are any Key Member records
4235        being passed or not. So, it cannot be done in the above IF condition. */
4236 
4237 
4238     /* Bug 5731766 This code was moved to before get_customer_info call
4239        We need to bypass call get_customer_info if l_proj_type_class
4240        is 'contract'.
4241     IF l_project_id IS NOT NULL THEN
4242     OPEN  c_prj(l_project_id);
4243     FETCH c_prj INTO l_proj_status, l_proj_type_class;
4244     CLOSE c_prj;
4245     END IF;
4246     */
4247     /* The check has to be done only for an Approved Contract Type project. */
4248     IF (nvl(l_proj_type_class,'NONE') = 'CONTRACT' AND
4249         nvl(l_proj_status,'UNAPPROVED') = 'APPROVED') THEN
4250     OPEN c_prj_count(l_project_id);
4251     FETCH c_prj_count INTO l_prj_mgr_count;
4252     CLOSE c_prj_count;
4253         IF l_prj_mgr_count = 0 THEN
4254           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4255          pa_utils.add_message
4256           ( p_app_short_name   => 'PA'
4257            ,p_msg_name         => 'PA_PR_INSUF_PROJ_MGR'
4258           );
4259               RAISE FND_API.G_EXC_ERROR;
4260           END IF;
4261         END IF;
4262     END IF;
4263     /* End of code for bug #2111806 */
4264 
4265     -- anlee org role changes
4266     -- ORG_ROLE
4267     -- add overridable Org Roles
4268 
4269     l_org_roles := p_org_roles;
4270 
4271     i := l_org_roles.first;
4272 
4273     IF l_org_roles.exists(i)
4274     THEN
4275 
4276     --checking for overridability is done in the called procedure add_org_roles
4277 
4278   WHILE i IS NOT NULL LOOP
4279 
4280     IF l_org_roles(i).start_date IS NULL
4281     OR l_org_roles(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4282     THEN   IF l_project_rec.start_date IS NULL
4283       OR l_project_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4284       THEN l_org_roles(i).start_date := trunc(sysdate);
4285       ELSE l_org_roles(i).start_date := l_project_rec.start_date;
4286       END IF;
4287     END IF;
4288 
4289     IF l_org_roles(i).end_date =
4290                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
4291        l_org_roles(i).end_date := NULL;
4292                 END IF;
4293 
4294     i := l_org_roles.next(i);
4295 
4296   END LOOP;
4297 
4298   pa_project_pvt.add_org_roles(l_return_status
4299               ,l_project_in_rec.created_from_project_id
4300               ,l_project_id
4301               ,l_org_roles
4302                );
4303 
4304       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4305       THEN
4306       p_project_out.return_status := l_return_status;
4307       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4308 
4309       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4310       THEN
4311       p_project_out.return_status := l_return_status;
4312       RAISE FND_API.G_EXC_ERROR;
4313       END IF;
4314 
4315     END IF;
4316 
4317 
4318     --CLASS_CATEGORY
4319     --add overidable Class Categories
4320 
4321 
4322     i := p_class_categories.first;
4323 
4324     IF p_class_categories.exists(i)
4325     THEN
4326 
4327     --checking for overridability is done in the called procedure add_class_categories
4328 
4329   pa_project_pvt.add_class_categories(l_return_status
4330                                      ,l_project_in_rec.created_from_project_id
4331              ,l_project_id
4332              ,p_class_categories
4333           );
4334 
4335      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4336       THEN
4337       p_project_out.return_status := l_return_status;
4338       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4339 
4340       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4341       THEN
4342           p_project_out.return_status := l_return_status;
4343       RAISE FND_API.G_EXC_ERROR;
4344       END IF;
4345 
4346     END IF;
4347 
4348 
4349     -- need to understand feature of p_multiple_task_msg := 'F';
4350 
4351 --Project Structure Integration
4352 --This creates the
4353 /*  not required as
4354         l_delta := PA_PROJ_TASK_STRUC_PUB.get_proj_dates_delta(
4355                        l_project_in_rec.created_from_project_id
4356                       ,l_out_start_date );
4357 */
4358 
4359 /*--bug 2805602 we dont this anymore as copy project will take care of creating structures only
4360         PA_PROJ_TASK_STRUC_PUB.COPY_STRUCTURE(
4361                    p_dest_project_id         => l_project_id
4362                   ,p_src_project_id          => l_project_in_rec.created_from_project_id
4363                   ,p_delta                   => l_delta
4364                   ,p_copy_task_flag          => 'N'
4365                   ,x_msg_count               => l_msg_count
4366                   ,x_msg_data                => l_msg_data
4367                   ,x_return_status           => l_return_status  );
4368 
4369        --The following code is copied from create_project_party call above.
4370        l_msg_count := FND_MSG_PUB.count_msg;
4371        IF l_msg_count > 0 THEN
4372           p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4373           RAISE  FND_API.G_EXC_ERROR;
4374        END IF;
4375 */
4376 
4377 --Project Connect 4.0
4378       PA_PROJECT_PVT.get_structure_version(
4379                p_project_id             => l_project_id
4380               ,p_structure_versions_out => g_struc_out_tbl
4381             );
4382 
4383 --Project Connect 4.0
4384 
4385        --syns up pa_proj_elements with pa_tasks
4386 /* not required this anymore
4387 
4388        --Clean up first the unwanted tasks that are created by copy_structure in pa_proj_elements
4389        --although they had not been created in pa_tasks.
4390 
4391        PA_PROJ_TASK_STRUC_PUB.Clean_unwanted_tasks(
4392              p_project_id         => l_project_id
4393             ,x_msg_count          => l_msg_count
4394             ,x_msg_data           => l_msg_data
4395             ,x_return_status      => l_return_status
4396            );
4397 
4398        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4399        THEN
4400            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4401 
4402        ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4403        THEN
4404            RAISE FND_API.G_EXC_ERROR;
4405        END IF;
4406 */
4407 
4408 --Project Structure Integration
4409 
4410    --bug 2738747      --create project api. Here ther is actually no pupose of this call
4411    G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
4412    G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
4413    G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
4414    --bug 2738747
4415 
4416    G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
4417     --Begin Add by rtarway FP.M changes for mapping
4418    G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
4419    --End Add by rtarway FP.M changes for mapping
4420 
4421 --TASK
4422 --add tasks to the just created project
4423 
4424 --ISSUE
4425 --Where do I get the info about automatic numbering for SEGMENT1
4426 
4427 --  l_structure_type := p_structure_in.structure_type;
4428 
4429 i := p_tasks_in.first;
4430 
4431 v_first_index := i;          --proj conn
4432 
4433 -- Bug 4146369 : Added following condition so that the error comes if user has passed tasks
4434 -- and when both the structures are disbaled in the source project.
4435 -- If we do not raise error here, then user will get Invalid Paramters passed error
4436 -- which will not make much sense to users.
4437 l_bug_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( l_project_in_rec.created_from_project_id );
4438 l_bug_fp_enabled := PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( l_project_in_rec.created_from_project_id );
4439 
4440 IF l_bug_wp_enabled = 'N' AND l_bug_fp_enabled = 'N' AND p_tasks_in.exists(i)
4441 THEN
4442     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4443               p_msg_name       =>'PA_WRONG_STR_TYPE_AMG'); -- 'PA_TASKS_NOT_ALLOWD_AMG'  -- It is decided to use the same message in this case too
4444               -- Workplan or Financial Structures must be enabled at source project/template level in order to enter Tasks.
4445     RAISE FND_API.G_EXC_ERROR ;
4446 ELSIF  l_bug_wp_enabled = 'Y' AND l_bug_fp_enabled = 'N' AND p_tasks_in.exists(i) AND l_structure_in_rec.structure_type = 'FINANCIAL'
4447 THEN
4448     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4449               p_msg_name       => 'PA_WRONG_STR_TYPE_AMG' );
4450               -- Please enter the correct structure type or enable the Workplan/Financial structure at the source project/template level.
4451     RAISE FND_API.G_EXC_ERROR ;
4452 ELSIF  l_bug_wp_enabled = 'N' AND l_bug_fp_enabled = 'Y' AND p_tasks_in.exists(i) AND l_structure_in_rec.structure_type = 'WORKPLAN'
4453 THEN
4454     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4455               p_msg_name       => 'PA_WRONG_STR_TYPE_AMG' );
4456               -- Please enter the correct structure type or enable the Workplan/Financial structure at the source project/template level.
4457     RAISE FND_API.G_EXC_ERROR ;
4458 END IF;
4459 
4460 IF p_tasks_in.exists(i)
4461    --Project Structures
4462    AND l_structure_in_rec.structure_type = 'FINANCIAL'
4463    --Project Structures
4464 THEN
4465 
4466    --Inserting tasks will be done in 2 steps
4467    --1> an INSERT step to get a task_id linked to task_reference
4468    --2> and then an UPDATE step to get the appropriate parent id and toptask id.
4469    --This second step will also be used to default data from parents to children.
4470 
4471    --get the project_type_class_code and service_code associated to the project_type
4472 
4473    OPEN l_project_type_csr(l_project_rec.project_type);
4474    FETCH l_project_type_csr INTO l_project_type_rec;
4475    CLOSE l_project_type_csr;
4476 
4477 
4478    --ROUND TRIP 1
4479 
4480    WHILE i IS NOT NULL LOOP
4481 
4482   --initialize return status to success
4483   p_tasks_out(i).return_status   := FND_API.G_RET_STS_SUCCESS;
4484 
4485   l_task_in_rec := p_tasks_in(i);
4486 
4487         pa_project_pvt.validate_billing_info (
4488 	   p_project_id         =>l_project_id,  -- Added for Bug 5643876
4489            p_project_class_code =>l_project_type_rec.project_type_class_code,
4490            p_in_task_rec        =>l_task_in_rec,
4491            p_return_status      =>l_return_status
4492   );
4493 
4494 
4495      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4496       THEN
4497       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4498 
4499       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4500       THEN
4501             p_multiple_task_msg := 'F';
4502 --          RAISE FND_API.G_EXC_ERROR;
4503       END IF;
4504 
4505     -- Actions performed using the APIs would be subject to
4506     -- function security. If the responsibility does not allow
4507     -- such functions to be executed, the API should not proceed further
4508     -- since the user does not have access to such functions
4509 
4510     -- Function security procedure check whether user have the
4511     -- privilege to add task or not
4512 
4513     --Bug 2471668: we do not need to assign project id to the global variable as it is already done
4514     --above before checking for create_project function.
4515 
4516       PA_PM_FUNCTION_SECURITY_PUB.check_function_security
4517       (p_api_version_number => p_api_version_number,
4518        p_responsibility_id  => l_resp_id,
4519        p_function_name      => 'PA_PM_ADD_TASK',
4520        p_msg_count       => l_msg_count,
4521        p_msg_data           => l_msg_data,
4522        p_return_status      => l_return_status,
4523        p_function_allowed   => l_function_allowed);
4524 
4525 
4526       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4527       THEN
4528          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4529 
4530       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4531       THEN
4532             p_multiple_task_msg := 'F';
4533 --          RAISE FND_API.G_EXC_ERROR;
4534       END IF;
4535 
4536       IF l_function_allowed = 'N' THEN
4537          pa_interface_utils_pub.map_new_amg_msg
4538            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
4539             ,p_msg_attribute    => 'CHANGE'
4540             ,p_resize_flag      => 'Y'
4541             ,p_msg_context      => 'GENERAL'
4542             ,p_attribute1       => ''
4543             ,p_attribute2       => ''
4544             ,p_attribute3       => ''
4545             ,p_attribute4       => ''
4546             ,p_attribute5       => '');
4547          p_return_status := FND_API.G_RET_STS_ERROR;
4548             p_multiple_task_msg := 'F';
4549 --          RAISE FND_API.G_EXC_ERROR;
4550       END IF;
4551 
4552       /*Code added for bug 2982057*/
4553 
4554        IF l_task_in_rec.long_task_name IS NULL
4555        OR l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4556        THEN
4557          l_task_in_rec.long_task_name := l_task_in_rec.task_name;
4558        ELSE
4559          l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
4560        END IF;
4561 
4562        /*Code addition for bug 2982057 ends*/
4563 
4564      pa_project_pvt.add_task_round_one(l_return_status
4565               ,l_project_rec
4566               ,l_task_in_rec
4567               ,l_project_type_rec.project_type_class_code
4568               ,l_project_type_rec.service_type_code
4569               ,l_task_id);
4570 
4571   -- assign the appropriate values to the task out record
4572   p_tasks_out(i).return_status    := l_return_status;
4573   p_tasks_out(i).pa_task_id    := l_task_id;
4574   p_tasks_out(i).pm_task_reference := l_task_in_rec.pm_task_reference;
4575 
4576      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4577       THEN
4578       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4579 
4580       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4581       THEN
4582             p_multiple_task_msg := 'F';
4583 --          RAISE FND_API.G_EXC_ERROR;
4584       END IF;
4585 
4586   i := p_tasks_in.next(i);
4587 
4588    END LOOP;
4589 
4590    --ROUND TRIP 2
4591 
4592    i := p_tasks_in.first;
4593 
4594    WHILE i IS NOT NULL LOOP
4595 
4596   --move the incoming record to a local record
4597   l_task_in_rec   := p_tasks_in(i);
4598 
4599   --get the unique task ID for this task
4600   l_task_id  := p_tasks_out(i).pa_task_id;
4601 
4602   pa_project_pvt.add_task_round_two(l_return_status
4603               ,l_project_rec
4604               ,l_task_id
4605               ,l_task_in_rec
4606                --project structures
4607                ,null
4608                ,p_tasks_in
4609                ,p_tasks_out
4610                ,l_task_version_id
4611                ,'N'               -- Bug 2931183 p_create_task_structure param.
4612             -- distinguishes bulk calling context.
4613                --project structures
4614                );
4615 
4616   -- assign the return_status to the task out record
4617   p_tasks_out(i).return_status := l_return_status;
4618   p_tasks_out(i).task_version_id := l_task_version_id;
4619 
4620      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4621       THEN
4622       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4623 
4624       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4625       THEN
4626             p_multiple_task_msg := 'F';
4627 --          RAISE FND_API.G_EXC_ERROR;
4628       END IF;
4629 
4630   --move to next task in task pl/sql table
4631   i := p_tasks_in.next(i);
4632 
4633    END LOOP;
4634 
4635 --Project Structures
4636 ELSIF p_tasks_in.exists(i)
4637    AND l_structure_in_rec.structure_type = 'WORKPLAN'
4638 THEN
4639 
4640     IF G_WP_STR_EXISTS = 'N' OR
4641        G_IS_WP_SEPARATE_FROM_FN = 'N' --bug 2876703         --create project
4642     THEN
4643         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4644         THEN
4645             pa_interface_utils_pub.map_new_amg_msg
4646               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
4647                   ,p_msg_attribute    => 'CHANGE'
4648                   ,p_resize_flag      => 'N'
4649                   ,p_msg_context      => 'GENERAL'
4650                   ,p_attribute1       => ''
4651                   ,p_attribute2       => ''
4652                   ,p_attribute3       => ''
4653                   ,p_attribute4       => ''
4654                   ,p_attribute5       => '');
4655         END IF;
4656         RAISE FND_API.G_EXC_ERROR;
4657     END IF;
4658 
4659     -- Actions performed using the APIs would be subject to
4660     -- function security. If the responsibility does not allow
4661     -- such functions to be executed, the API should not proceed further
4662     -- since the user does not have access to such functions
4663 
4664     -- Function security procedure check whether user have the
4665     -- privilege to add task or not
4666 
4667     --Bug 2471668: we do not need to assign project id to the global variable as it is already done
4668     --above before checking for create_project function.
4669 
4670       PA_PM_FUNCTION_SECURITY_PUB.check_function_security
4671       (p_api_version_number => p_api_version_number,
4672        p_responsibility_id  => l_resp_id,
4673        p_function_name      => 'PA_PM_ADD_TASK',
4674        p_msg_count       => l_msg_count,
4675        p_msg_data           => l_msg_data,
4676        p_return_status      => l_return_status,
4677        p_function_allowed   => l_function_allowed);
4678 
4679 
4680       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4681       THEN
4682          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4683 
4684       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4685       THEN
4686             p_multiple_task_msg := 'F';
4687             RAISE FND_API.G_EXC_ERROR;
4688       END IF;
4689 
4690       IF l_function_allowed = 'N' THEN
4691          pa_interface_utils_pub.map_new_amg_msg
4692            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
4693             ,p_msg_attribute    => 'CHANGE'
4694             ,p_resize_flag      => 'Y'
4695             ,p_msg_context      => 'GENERAL'
4696             ,p_attribute1       => ''
4697             ,p_attribute2       => ''
4698             ,p_attribute3       => ''
4699             ,p_attribute4       => ''
4700             ,p_attribute5       => '');
4701          p_return_status := FND_API.G_RET_STS_ERROR;
4702             p_multiple_task_msg := 'F';
4703             RAISE FND_API.G_EXC_ERROR;
4704       END IF;
4705    /*
4706    FP K one off Bug 2931183
4707    Commenting out this loop. Instead of this processing, we will call process_task_structure_bulk
4708    API which needs to be called only once.
4709 
4710 
4711 
4712    WHILE i IS NOT NULL LOOP
4713 
4714         --initialize return status to success
4715         p_tasks_out(i).return_status    := FND_API.G_RET_STS_SUCCESS;
4716 
4717         l_task_in_rec := p_tasks_in(i);
4718 
4719      IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
4720   AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
4721      THEN
4722         v_parent_task_id := l_task_in_rec.pa_parent_task_id;
4723      ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4724      AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
4725      THEN
4726        --convert pm_parent_task_reference to parent_task_id.
4727        --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
4728        PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
4729               p_pm_parent_task_reference      =>  l_task_in_rec.pm_parent_task_reference
4730              ,p_project_id                    =>  l_project_id
4731              ,x_parent_task_id                =>  v_parent_task_id
4732              ,x_return_status                 =>  l_return_status
4733            );
4734 
4735        IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4736        THEN
4737            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4738      THEN
4739                      pa_interface_utils_pub.map_new_amg_msg
4740                      ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
4741                       ,p_msg_attribute    => 'CHANGE'
4742                       ,p_resize_flag      => 'N'
4743                       ,p_msg_context      => 'TASK'
4744                       ,p_attribute1       => l_amg_segment1
4745                       ,p_attribute2       => l_amg_task_number
4746                       ,p_attribute3       => ''
4747                       ,p_attribute4       => ''
4748                       ,p_attribute5       => '');
4749            END IF;
4750            RAISE  FND_API.G_EXC_ERROR;
4751        END IF;
4752 
4753      ELSE
4754         v_parent_task_id := null;
4755      END IF;
4756 
4757      --proj conn
4758      IF i = v_first_index
4759      THEN
4760         l_ref_task_id := null;
4761      ELSE
4762         l_ref_task_id := v_task_id;
4763      END IF;
4764     --proj conn
4765 
4766      PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
4767               p_project_id                   => l_project_id
4768              ,p_task_id                      => l_task_in_rec.pa_task_id
4769              ,p_parent_task_id               => v_parent_task_id
4770              ,p_ref_task_id                  => l_ref_task_id   --proj conn
4771              ,p_task_number                  => l_task_in_rec.pa_task_number
4772              ,p_task_name                    => l_task_in_rec.long_task_name    --bug 2833194
4773              ,p_task_description             => l_task_in_rec.task_description
4774              ,p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id
4775              ,p_calling_module               => 'AMG'
4776              ,p_structure_type               => l_structure_in_rec.structure_type
4777              ,p_OBLIGATION_START_DATE        => l_task_in_rec.OBLIGATION_START_DATE
4778              ,p_OBLIGATION_FINISH_DATE       => l_task_in_rec.OBLIGATION_FINISH_DATE
4779              ,p_ESTIMATED_START_DATE         => l_task_in_rec.ESTIMATED_START_DATE
4780              ,p_ESTIMATED_FINISH_DATE        => l_task_in_rec.ESTIMATED_FINISH_DATE
4781              ,p_BASELINE_START_DATE          => l_task_in_rec.BASELINE_START_DATE
4782              ,p_BASELINE_FINISH_DATE         => l_task_in_rec.BASELINE_FINISH_DATE
4783              ,p_CLOSED_DATE                  => l_task_in_rec.CLOSED_DATE
4784              ,p_WQ_UOM_CODE                  => l_task_in_rec.WQ_UOM_CODE
4785              ,p_WQ_ITEM_CODE                 => l_task_in_rec.WQ_ITEM_CODE
4786              ,p_STATUS_CODE                  => l_task_in_rec.STATUS_CODE
4787              ,p_WF_STATUS_CODE               => l_task_in_rec.WF_STATUS_CODE
4788              ,p_PM_SOURCE_CODE               => p_PM_product_code
4789              ,p_PRIORITY_CODE                => l_task_in_rec.PRIORITY_CODE
4790              ,p_MILESTONE_FLAG               => l_task_in_rec.MILESTONE_FLAG
4791              ,p_CRITICAL_FLAG                => l_task_in_rec.CRITICAL_FLAG
4792              ,p_INC_PROJ_PROGRESS_FLAG       => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
4793              ,p_LINK_TASK_FLAG               => l_task_in_rec.LINK_TASK_FLAG
4794              ,p_CALENDAR_ID                  => l_task_in_rec.CALENDAR_ID
4795              ,p_PLANNED_EFFORT               => l_task_in_rec.PLANNED_EFFORT
4796              ,p_DURATION                     => l_task_in_rec.DURATION
4797              ,p_PLANNED_WORK_QUANTITY        => l_task_in_rec.PLANNED_WORK_QUANTITY
4798              ,p_TASK_TYPE                    => l_task_in_rec.TASK_TYPE
4799              ,p_actual_start_date                  => l_task_in_rec.actual_start_date
4800              ,p_actual_finish_date                 => l_task_in_rec.actual_finish_date
4801              ,p_early_start_date                   => l_task_in_rec.early_start_date
4802              ,p_early_finish_date                  => l_task_in_rec.early_finish_date
4803              ,p_late_start_date                    => l_task_in_rec.late_start_date
4804              ,p_late_finish_date                   => l_task_in_rec.late_finish_date
4805              ,p_scheduled_start_date               => l_task_in_rec.scheduled_start_date
4806              ,p_scheduled_finish_date              => l_task_in_rec.scheduled_finish_date
4807              ,P_PM_SOURCE_reference                => l_task_in_rec.pm_task_reference
4808              ,p_location_id                        => l_task_in_rec.address_id
4809              ,p_manager_person_id                  => l_task_in_rec.task_manager_person_id
4810 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
4811              ,p_ext_act_duration                   => l_task_in_rec.ext_act_duration
4812              ,p_ext_remain_duration                => l_task_in_rec.ext_remain_duration
4813              ,p_ext_sch_duration                   => l_task_in_rec.ext_sch_duration
4814 -- (End venkat) new params for bug #3450684 -------------------------------------------------
4815              ,x_task_version_id                    => l_task_version_id
4816              ,x_task_id                            => v_task_id
4817              ,x_msg_count                    => l_msg_count
4818              ,x_msg_data                     => l_msg_data
4819              ,x_return_status                => l_return_status
4820                      );
4821 
4822         -- assign the appropriate values to the task out record
4823         p_tasks_out(i).return_status     := l_return_status;
4824         p_tasks_out(i).pa_task_id        := v_task_id;
4825         p_tasks_out(i).task_version_id   := l_task_version_id;
4826         p_tasks_out(i).pm_task_reference := l_task_in_rec.pm_task_reference;
4827 
4828         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4829         THEN
4830            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4831 
4832         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4833         THEN
4834           p_multiple_task_msg := 'F';
4835           RAISE FND_API.G_EXC_ERROR;
4836         END IF;
4837 
4838         i := p_tasks_in.next(i);
4839 
4840    END LOOP;
4841 
4842    FP K one off Bug 2931183
4843    */
4844 --Project Structures
4845 
4846 END IF; --p_tasks_in.exists(i)
4847 
4848 -- Bug 5622539
4849        pa_project_pvt.validate_data(
4850             p_calling_context  => 'CREATE_PROJECT',
4851             p_project_id       => l_project_id,
4852             x_msg_count        => l_msg_count,
4853             x_msg_data         => l_msg_data,
4854             x_return_status    => l_return_status
4855         );
4856        p_return_status := l_return_status;
4857 
4858         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4859             THEN
4860                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4861 
4862         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4863             THEN
4864                 RAISE FND_API.G_EXC_ERROR;
4865         END IF;
4866 
4867 -- Made the following changes for post FP K one off. Bug 2931183
4868 -- Performance changes.
4869 IF l_debug_mode = 'Y' THEN
4870    pa_debug.g_err_stage := 'Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
4871    pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
4872 END IF;
4873 
4874 --Set the global variable G_OP_VALIDATE_FLAG.
4875 --BUG 4218977
4876 G_OP_VALIDATE_FLAG := p_op_validate_flag;
4877 
4878 PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK
4879    (  p_api_version_number              => p_api_version_number
4880      ,p_commit                          => FND_API.G_FALSE --p_commit : Bug 3668424: passing p_commit as FND_API.G_FALSE
4881      ,p_project_id                      => l_project_id                 -- Changed during UT.
4882      ,p_source_project_id               => l_project_in_rec.created_from_project_id --ADUT. Included this new param.
4883      ,p_pm_product_code                 => p_pm_product_code
4884      ,p_structure_type                  => p_structure_in.structure_type
4885      ,p_tasks_in_tbl                    => p_tasks_in
4886      ,p_wp_str_exists                   => G_WP_STR_EXISTS
4887      ,p_is_wp_separate_from_fn          => G_IS_WP_SEPARATE_FROM_FN
4888      ,p_is_wp_versioning_enabled        => G_IS_WP_VERSIONING_ENABLED
4889      ,p_structure_version_id            => null
4890      ,p_process_mode                    => l_project_in_rec.process_mode -- PA L Changes 3010538
4891      ,px_tasks_out_tbl                  => p_tasks_out
4892      ,x_return_status                   => p_return_status
4893      ,x_msg_count                       => p_msg_count
4894      ,x_msg_data                        => p_msg_data
4895     );
4896 
4897 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4898      IF l_debug_mode = 'Y' THEN
4899         pa_debug.g_err_stage := 'Errors in PROCESS_TASK_STRUCTURE_BULK ' ;
4900         pa_debug.write(g_module_name,pa_debug.g_err_stage,4);
4901      END IF;
4902      p_multiple_task_msg := 'F';
4903 END IF;
4904 
4905 IF l_debug_mode = 'Y' THEN
4906    pa_debug.g_err_stage := 'Returned from PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
4907    pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
4908 END IF;
4909 
4910 /* Post FP K one off. Bug 2931183
4911    Commenting this code as this is done in PA_PROJ_TASK_STRUC_PUB.process_task_structure_bulk.
4912 --bug 2732895   --create_project
4913 IF ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
4914    ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND  l_structure_in_rec.structure_type = 'WORKPLAN' )  --should not call fif tasks are added to financial structure version
4915 THEN
4916   PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
4917              p_tasks_in             => p_tasks_out
4918             ,p_task_version_id      => null
4919             ,x_msg_count            => l_msg_count
4920             ,x_msg_data             => l_msg_data
4921             ,x_return_status        => l_return_status
4922        );
4923 
4924         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4925         THEN
4926            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4927 
4928         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4929         THEN
4930           p_multiple_task_msg := 'F';
4931           RAISE FND_API.G_EXC_ERROR;
4932         END IF;
4933 
4934   --bug 2856033
4935 
4936   PA_PROJ_TASK_STRUC_PUB.rollup_dates(
4937              p_tasks_in             => p_tasks_out
4938             ,p_task_version_id      => null
4939             ,p_project_id           => l_project_id
4940             ,P_structure_version_id => null
4941             ,x_msg_count            => l_msg_count
4942             ,x_msg_data             => l_msg_data
4943             ,x_return_status        => l_return_status
4944        );
4945 
4946         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4947         THEN
4948            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4949 
4950         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4951         THEN
4952           p_multiple_task_msg := 'F';
4953           RAISE FND_API.G_EXC_ERROR;
4954         END IF;
4955 
4956   --bug 2856033
4957 
4958 END IF;
4959 --bug 2732895
4960 Post FP K one off. Bug 2931183
4961 */
4962    IF p_multiple_task_msg = 'F'
4963    THEN
4964       RAISE FND_API.G_EXC_ERROR;
4965    END IF;
4966 
4967 -- FP-M Bug # 3301192 --create project
4968    l_d_loop_count := p_tasks_in.first;
4969    WHILE l_d_loop_count IS NOT NULL LOOP
4970       l_task_in_rec := p_tasks_in(l_d_loop_count);
4971 
4972       /*PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_project_out.pa_project_id
4973                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
4974                                               ,p_out_task_id => l_d_task_id
4975                                               ,p_return_status => l_return_status);*/
4976 
4977       --Begin Comment by rtarway for FP.M Changes,
4978       --This call is redundant because Task Id is already available,
4979       --Also CONVERT_PM_TASKREF_TO_ID will fail is Spilt_mapping
4980       -- p_project_out.pa_project_id is not available till this point. Should be replaced by following.
4981       -- l_d_task_id := p_tasks_out(l_d_loop_count).pa_task_id;
4982 
4983       --Commented by rtarway FP.M Changes for Mapping
4984       --IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(p_project_out.pa_project_id) = 'Y') THEN
4985       IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
4986 
4987 --maansari5/18 replaced api call CONVERT_PM_TASKREF_TO_ID to CONVERT_PM_TASKREF_TO_ID_all
4988       IF l_d_task_id IS NULL AND
4989          l_task_in_rec.pm_task_reference IS NOT NULL AND
4990          l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4991       THEN
4992         PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id
4993                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
4994                                               ,p_structure_type => p_structure_in.structure_type
4995                                               ,p_out_task_id => l_d_task_id
4996                                               ,p_return_status => l_return_status);
4997 
4998            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4999            THEN
5000               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5001            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5002            THEN
5003               p_multiple_task_msg := 'F';
5004               RAISE FND_API.G_EXC_ERROR;
5005            END IF;
5006         END IF;
5007 --maansari5/18
5008 
5009           --Set the global variable G_OP_VALIDATE_FLAG before going for dependence validation.
5010 
5011           IF NVL(PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED,'N') = 'Y'
5012           THEN
5013              l_d_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
5014           ELSE
5015              l_d_structure_version_id :=  PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID( l_project_id, 'WORKPLAN');
5016           END IF;
5017 
5018           l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_d_structure_version_id
5019                       ,p_task_id => l_d_task_id);
5020 
5021           pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
5022                                  ,p_delimeter => l_task_in_rec.pred_delimiter
5023                                  ,p_task_version_Id => l_d_task_ver_id
5024                                  ,x_return_status => l_return_status
5025                                  ,x_msg_count => l_msg_count
5026                                  ,x_msg_data  => l_msg_data);
5027 
5028            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5029            THEN
5030               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5031            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5032            THEN
5033               p_multiple_task_msg := 'F';
5034               RAISE FND_API.G_EXC_ERROR;
5035            END IF;
5036            l_d_task_id := null;
5037 
5038    END IF;
5039    l_d_loop_count := p_tasks_in.next(l_d_loop_count);
5040   END LOOP;
5041 -- Check to see if WF had been enabled by Copy projects
5042 -- If so, then need to commit.
5043 
5044 OPEN l_get_wf_status_csr (l_project_id);
5045 FETCH l_get_wf_status_csr INTO l_wf_status_code;
5046 CLOSE l_get_wf_status_csr;
5047 
5048 p_project_out.pa_project_id   := l_project_id;
5049 p_project_out.pa_project_number := l_project_number_out;
5050 
5051 -- Need to commit if either workflow had been started
5052 -- or p_commit was TRUE
5053 
5054 -- 22-DEC-97, jwhite ----------------------------------------------------------
5055 -- Added new OUT-paramter p_workflow_started
5056 
5057 IF (l_wf_status_code = 'IN_ROUTE' )
5058  THEN
5059   p_workflow_started    := 'Y';
5060 END IF;
5061 -- -----------------------------------------------------------------------------------
5062 
5063 --<EA Add Project/Task level Extensible Attributes>
5064 
5065     i := p_ext_attr_tbl_in.first;
5066 
5067     IF p_ext_attr_tbl_in.exists(i)
5068     THEN
5069      PA_USER_ATTR_PUB.Process_User_Attrs_Data(
5070          p_ext_attr_data_table   => p_ext_attr_tbl_in,
5071          p_project_id            => l_project_id,
5072          p_structure_type        => l_structure_in_rec.structure_type,
5073          x_failed_row_id_list    => l_failed_row_id_list,
5074          x_errorcode             => l_errorcode,
5075          x_msg_count             => l_msg_count,
5076          x_msg_data              => l_msg_data,
5077          x_return_status         => l_return_status      );
5078 
5079       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5080       THEN
5081          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5082       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5083       THEN
5084          RAISE FND_API.G_EXC_ERROR;
5085       END IF;
5086    END IF;
5087 --</EA Add Project/Task level Extensible Attributes>
5088 --Begin Add by rtarway for set financial task
5089 
5090 IF (G_PROJECT_SHARING_TYPE='SHARE_PARTIAL' AND l_structure_in_rec.structure_type = 'FINANCIAL' )
5091 THEN
5092      i := p_tasks_in.first();
5093 
5094      WHILE i IS NOT NULL LOOP
5095           --Initialize the return status to success
5096           p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
5097           l_task_in_rec := p_tasks_in(i);
5098           l_patask_record_version_number := NULL;
5099           --No Function Security Check required
5100 
5101           --Get record version number from pa_tasks table
5102          OPEN  c_get_pa_record_version_number ( p_tasks_out(i).task_version_id  , l_project_id);
5103          FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
5104          CLOSE c_get_pa_record_version_number;
5105 
5106          --If the record version Number is null, initialize it to 1 , considering in create project, It will be new record
5107          IF (l_patask_record_version_number IS NULL)
5108                THEN l_patask_record_version_number := 1;
5109          END IF;
5110 
5111         IF (
5112              l_task_in_rec.financial_task_flag IS NOT NULL
5113              AND
5114              l_task_in_rec.financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5115            )
5116         THEN
5117 
5118              PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
5119               (
5120                  p_api_version               => p_api_version_number
5121                , p_init_msg_list             => FND_API.G_FALSE
5122                , p_commit                    => FND_API.G_FALSE--BUG 3766967
5123                , p_calling_module            => 'AMG'
5124                , p_debug_mode                => FND_API.G_TRUE
5125                , p_task_version_id           => p_tasks_out(i).task_version_id
5126                , p_checked_flag              => l_task_in_rec.financial_task_flag
5127                , p_record_version_number     => l_patask_record_version_number
5128                , p_project_id                => l_project_id
5129                , p_published_version_exists  => G_Published_version_exists
5130                , x_return_status             => l_return_status
5131                , x_msg_count                 => l_msg_count
5132                , x_msg_data                  => l_msg_data
5133              );
5134 
5135              -- Populating the appropriate values in task out records
5136               p_tasks_out(i).return_status    := l_return_status;
5137               IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
5138                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5139               ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
5140                    RAISE FND_API.G_EXC_ERROR;
5141               END IF;
5142         END IF;
5143         i := p_tasks_in.next(i);
5144      END LOOP;
5145 END IF;
5146 --End Set Financial Task Changes
5147 --End Add by rtarway FP.M Changes for Set Financial Tasks
5148 
5149 --Begin Add by rtarway FP.M Changes for Mapping
5150 --Add the call to create mapping
5151 IF (G_PROJECT_SHARING_TYPE='SPLIT_MAPPING' AND l_structure_in_rec.structure_type = 'WORKPLAN' )
5152 THEN
5153      i := p_tasks_in.first();
5154      WHILE i IS NOT NULL LOOP
5155           --Initialize the return status to success
5156           l_return_status := FND_API.G_RET_STS_SUCCESS;
5157           l_task_in_rec := p_tasks_in(i);
5158 
5159           --No Function Security Check required
5160           --Call the create_mapping only id p_mapped_task_reference or p_mapped_task_id is passed
5161           IF (
5162                ( p_tasks_in(i).mapped_task_id IS NOT NULL AND p_tasks_in(i).mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
5163                OR
5164                ( p_tasks_in(i).mapped_task_reference IS NOT NULL AND p_tasks_in(i).mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5165              )
5166           THEN
5167                pa_project_pub.create_mapping
5168                (
5169                    p_api_version                  => p_api_version_number
5170                  , p_init_msg_list                => FND_API.G_FALSE
5171                  , p_commit                       => FND_API.G_FALSE--bug 3766967
5172                  , p_debug_mode                   => FND_API.G_TRUE
5173                  , p_project_id                   => l_project_id
5174                  , p_proj_source_reference        => null
5175                  , p_wkp_structure_version_id     => l_d_structure_version_id
5176                  , p_wkp_task_id                  => p_tasks_out(i).pa_task_id--Since the tasks are already created , this will have task Ids
5177                  , px_mapped_task_id              => p_tasks_in(i).mapped_task_id
5178                  , p_mapped_task_reference        => p_tasks_in(i).mapped_task_reference
5179                  , x_return_status                => l_return_status
5180                  , x_msg_count                    => l_msg_count
5181                  , x_msg_data                     => l_msg_data
5182                );
5183                -- Populating the appropriate values in task out records
5184                p_tasks_out(i).return_status    := l_return_status;
5185                IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
5186                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5187                ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
5188                      RAISE FND_API.G_EXC_ERROR;
5189                END IF;
5190           END IF;
5191           i := p_tasks_in.next(i);
5192      END LOOP;
5193 END IF;
5194 --End Create Mapping
5195 --End Add by rtarway FP.M Changes for Mapping
5196 
5197 ------ 3435905 : FP M : Deliverables Changes For AMG Start-----------
5198 
5199     -- 3700247, added code to check for source template/project deliverable is enabled or not
5200     -- if deliverable is enabled for source, call enable_deliverable api to enable deliverable for target project
5201     -- if deliverable is not enabled for source and for target deliverables are loaded, throw error message
5202 
5203     G_DLVR_STRUCTURE_ENABLED := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_in_rec.created_from_project_id);
5204 
5205     IF l_debug_mode = 'Y' THEN
5206        pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
5207        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
5208     END IF;
5209 
5210     i := p_deliverables_in.first();
5211 
5212     IF ( G_DLVR_STRUCTURE_ENABLED = 'Y' ) THEN
5213         Pa_Deliverable_Utils.enable_deliverable(
5214                p_api_version            => p_api_version_number
5215              , p_init_msg_list          => FND_API.G_FALSE
5216              , p_commit                 => FND_API.G_FALSE--bug 3766967
5217              , p_debug_mode             => l_debug_mode
5218              , p_validate_only          => FND_API.G_FALSE
5219              , p_project_id             => l_project_id
5220              , x_return_status          => l_return_status
5221              , x_msg_count              => l_msg_count
5222              , x_msg_data               => l_msg_data
5223              );
5224 
5225         -- 3700247 Added code to validate return status after enable_deliverabl call
5226         -- if return status is not 'S', raise the exception
5227 
5228         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
5229               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5230         ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
5231               RAISE FND_API.G_EXC_ERROR;
5232         END IF;
5233 
5234     ELSE
5235         IF i IS NOT NULL THEN
5236             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
5237                                 ,p_msg_name         => 'PA_DLV_STRUCTURE_DISABLED');
5238             l_return_status := FND_API.G_RET_STS_ERROR;
5239             RAISE FND_API.G_EXC_ERROR;
5240         END IF;
5241     END IF;
5242 
5243     WHILE i IS NOT NULL LOOP
5244       l_deliverable_id := null;
5245 
5246   -- A call to Create_Deliverables api creates one deliverable and its
5247   -- assoicated actions.
5248 
5249   -- Invoking the Create Deliverable API
5250       Pa_Project_Pub.create_deliverable
5251       ( p_api_version            => p_api_version_number
5252       , p_init_msg_list          => p_init_msg_list
5253       -- 3735792, passing p_commit as false to next level api calls
5254       , p_commit                 => FND_API.G_FALSE
5255       , x_return_status          => l_return_status
5256       , p_deliverable_name       => p_deliverables_in(i).deliverable_name
5257       , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
5258       , p_deliverable_type_id    => p_deliverables_in(i).deliverable_type_id
5259       , p_deliverable_owner_id   => p_deliverables_in(i).deliverable_owner_id
5260       , p_description            => p_deliverables_in(i).description
5261       , p_status_code            => p_deliverables_in(i).status_code
5262       , p_due_date               => p_deliverables_in(i).due_date
5263       , p_completion_date        => p_deliverables_in(i).completion_date
5264       , p_progress_weight        => p_deliverables_in(i).progress_weight
5265       , px_deliverable_id        => l_deliverable_id
5266       , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
5267       -- for bug# 3729250
5268 --      , p_carrying_out_org_id    => p_deliverables_in(i).carrying_out_org_id
5269       , p_task_id                => p_deliverables_in(i).task_id
5270       , p_task_source_reference  => p_deliverables_in(i).task_source_reference
5271       , p_project_id             => l_project_id
5272       , p_proj_source_reference  => null
5273       , p_action_in_tbl          => p_deliverable_actions_in
5274       -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
5275 --    , x_action_out_tbl       => p_deliverable_actions_out
5276       , x_action_out_tbl         => G_deliverable_actions_out_tbl
5277       , p_item_id                => p_deliverables_in(i).item_id     --Added for bug 3630378
5278       , p_inventory_org_id       => p_deliverables_in(i).inventory_org_id
5279       , p_quantity               => p_deliverables_in(i).quantity
5280       , p_uom_code               => p_deliverables_in(i).uom_code
5281       -- for bug# 3729250
5282 --      , p_item_description       => p_deliverables_in(i).item_description
5283       , p_unit_price             => p_deliverables_in(i).unit_price
5284       , p_unit_number            => p_deliverables_in(i).unit_number
5285       , p_currency_code          => p_deliverables_in(i).currency_code
5286       , p_pm_source_code         =>  p_pm_product_code                       /* Bug no. 3651113 */
5287       , x_msg_count              => l_msg_count
5288       , x_msg_data               => l_msg_data
5289       );
5290 
5291     G_deliverables_out_tbl(i).return_status := l_return_status;
5292     G_deliverables_out_tbl(i).deliverable_id := l_deliverable_id;
5293 
5294   -- Populating the appropriate values in deliverables out records
5295 
5296   -- 3435905 return status and deliverable id is directly assigned to
5297   -- global deliverable table
5298   -- removed the p_deliverables_out parameter and added global table
5299 --      p_deliverables_out(i).return_status    := l_return_status;
5300 --      p_deliverables_out(i).deliverable_id   := l_deliverable_id;
5301 
5302     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
5303           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5304     ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
5305           RAISE FND_API.G_EXC_ERROR;
5306     END IF;
5307 
5308     i := p_deliverables_in.next(i);
5309 
5310     END LOOP;
5311 
5312    ------ 3435905 : FP M : Deliverables Changes For AMG END-----------
5313 --4218977, rtarway, unset this global variable upon successfull completion of create project
5314 G_OP_VALIDATE_FLAG := null;
5315 IF (FND_API.to_boolean( p_commit ) OR
5316    l_wf_status_code = 'IN_ROUTE' )
5317 THEN
5318   COMMIT WORK;
5319 END IF;
5320 
5321 
5322 EXCEPTION
5323   WHEN FND_API.G_EXC_ERROR
5324   THEN
5325 
5326     ROLLBACK TO create_project_pub;
5327 
5328     -- Bug 7335526
5329     IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5330       PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name    => 'PA_PROJECTS',
5331                                                 p_user_id       => FND_GLOBAL.USER_ID,
5332                                                 p_unique_number => to_number(l_project_number_out));
5333     END IF;
5334 
5335      --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5336      G_OP_VALIDATE_FLAG := null;
5337     p_return_status := FND_API.G_RET_STS_ERROR;
5338 
5339     FND_MSG_PUB.Count_And_Get
5340       (   p_count    =>  p_msg_count  ,
5341           p_data    =>  p_msg_data  );
5342 
5343   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
5344   THEN
5345   ROLLBACK TO create_project_pub;
5346 
5347   -- Bug 7335526
5348   IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5349     PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name    => 'PA_PROJECTS',
5350                                               p_user_id       => FND_GLOBAL.USER_ID,
5351                                               p_unique_number => to_number(l_project_number_out));
5352   END IF;
5353 
5354    --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5355      G_OP_VALIDATE_FLAG := null;
5356   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5357 
5358   FND_MSG_PUB.Count_And_Get
5359       (   p_count    =>  p_msg_count  ,
5360           p_data    =>  p_msg_data  );
5361 
5362   WHEN OTHERS
5363   THEN
5364   ROLLBACK TO create_project_pub;
5365 
5366   -- Bug 7335526
5367   IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5368     PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name    => 'PA_PROJECTS',
5369                                               p_user_id       => FND_GLOBAL.USER_ID,
5370                                               p_unique_number => to_number(l_project_number_out));
5371   END IF;
5372 
5373   --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5374    G_OP_VALIDATE_FLAG := null;
5375   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5376 
5377   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5378   THEN
5379     FND_MSG_PUB.add_exc_msg
5380         ( p_pkg_name    => G_PKG_NAME
5381         , p_procedure_name  => l_api_name  );
5382 
5383   END IF;
5384 
5385   FND_MSG_PUB.Count_And_Get
5386       (   p_count    =>  p_msg_count  ,
5387           p_data    =>  p_msg_data  );
5388 
5389 END create_project;
5390 
5391 --------------------------------------------------------------------------------
5392 --Name:               add_task
5393 --Type:               Procedure
5394 --Description:        This procedure adds a task to a OP project, when this is allowed.
5395 --
5396 --
5397 --
5398 --Called subprograms: check_add_subtask_ok
5399 --
5400 --
5401 --
5402 --History:
5403 --    28-AUG-1996        L. de Werker    Created
5404 --    28-NOV-1996   L. de Werker   Added 11 parameters for descriptive flexfields
5405 --    10-DEC-1996   L. de Werker   Added parameter p_address_id
5406 --    27-MAY-1999   ODEO     Added parameter p_pa_parent_task_id *O
5407 --
5408 --      09-MAY-02       Maansari        - Project Structure Integration
5409 --                                      - Added call to PA_PROJ_TASK_STRUC.CREATE_DEFAULT_TASK_STRUCTURE api.
5410 --    17-APR-2002        amksingh        Bug 2316713 initialized the
5411 --                                       l_task_in_rec.pa_parent_task_id with the Appropriate
5412 --                                       parent_task_id.
5413 --    15-jul-2003      sramesh        -- Added the code for bug 2982057.
5414 --                                       Changed the logic to populate the long_task_name
5415 --                                       with task_name when the long_task_name is null.
5416 --    31-Jul-2003      Amit              Bug 3075623 : Added condition in add_task to throw error
5417 --                                       if no ref task id is passed
5418 --    12-Aug-2003      sacgupta          Bug 3086001. initialized l_task_in_rec.task_type with the
5419 --                                       appropriate value.
5420 --
5421 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
5422 --                                        dependency_type and lag days to tasks and create dependencies.
5423 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
5424 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
5425 
5426 --  07-JUL-2004  Rakesh Raghavan   Bug # 3663166. Modified API: add_task().
5427 --  09-01-2006   vkadimes          Bug 4689326 Modified the customer_id validation part.
5428 
5429 PROCEDURE add_task
5430 ( p_api_version_number      IN  NUMBER
5431  ,p_commit        IN  VARCHAR2  := FND_API.G_FALSE
5432  ,p_init_msg_list      IN  VARCHAR2  := FND_API.G_FALSE
5433  ,p_msg_count        OUT NOCOPY  NUMBER  /*Added the nocopy check for 4537865 */
5434  ,p_msg_data        OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5435  ,p_return_status      OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5436  ,p_pm_product_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5437  ,p_pm_project_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5438  ,p_pa_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5439  ,p_pm_task_reference      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5440  ,p_pa_task_number            IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5441 --Project Structures
5442  ,p_ref_task_id               IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5443 --Project Structures
5444 
5445  ,p_task_name        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5446  ,p_long_task_name      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5447  ,p_task_description      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5448  ,p_task_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5449  ,p_task_completion_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5450  ,p_pm_parent_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5451  ,p_pa_parent_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5452  ,p_address_id        IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5453  ,p_carrying_out_organization_id  IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5454  ,p_service_type_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5455  ,p_task_manager_person_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5456  ,p_billable_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5457  ,p_chargeable_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5458  ,p_ready_to_bill_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5459  ,p_ready_to_distribute_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5460  ,p_limit_to_txn_controls_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5461  ,p_labor_bill_rate_org_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5462  ,p_labor_std_bill_rate_schdl    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5463  ,p_labor_schedule_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5464  ,p_labor_schedule_discount    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5465  ,p_nl_bill_rate_org_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5466  ,p_nl_std_bill_rate_schdl    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5467  ,p_nl_schedule_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5468  ,p_nl_schedule_discount    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5469  ,p_labor_cost_multiplier_name    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5470  ,p_cost_ind_rate_sch_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5471  ,p_rev_ind_rate_sch_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5472  ,p_inv_ind_rate_sch_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5473  ,p_cost_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5474  ,p_rev_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5475  ,p_inv_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5476  ,p_labor_sch_type      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5477  ,p_nl_sch_type        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5478  ,p_actual_start_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5479  ,p_actual_finish_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5480  ,p_early_start_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5481  ,p_early_finish_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5482  ,p_late_start_date                     IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5483  ,p_late_finish_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5484  ,p_scheduled_start_date                IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5485  ,p_scheduled_finish_date               IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5486  ,p_tasks_dff                    IN VARCHAR2    := 'N' --bug 6153503
5487  ,p_attribute_category      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5488  ,p_attribute1        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5489  ,p_attribute2        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5490  ,p_attribute3        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5491  ,p_attribute4        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5492  ,p_attribute5        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5493  ,p_attribute6        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5494  ,p_attribute7        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5495  ,p_attribute8        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5496  ,p_attribute9        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5497  ,p_attribute10        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5498  --bug 6153503
5499  ,p_attribute11        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5500  ,p_attribute12        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5501  ,p_attribute13        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5502  ,p_attribute14        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5503  ,p_attribute15        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5504  --end bug 6153503
5505  ,p_allow_cross_charge_flag            IN VARCHAR2 :=
5506 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5507  ,p_project_rate_date               IN      DATE   :=
5508 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5509  ,p_project_rate_type            IN VARCHAR2       :=
5510 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5511  ,p_cc_process_labor_flag  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5512  ,p_labor_tp_schedule_id   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5513  ,p_labor_tp_fixed_date    IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5514  ,p_cc_process_nl_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5515  ,p_nl_tp_schedule_id      IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5516  ,p_nl_tp_fixed_date       IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5517  ,p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5518  ,p_work_type_id           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5519  ,p_emp_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5520  ,p_job_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5521 --Sakthi  MCB
5522  ,p_non_lab_std_bill_rt_sch_id  IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5523  ,p_taskfunc_cost_rate_type     IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5524  ,p_taskfunc_cost_rate_date     IN DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5525 --Sakthi  MCB
5526 --Project Structures
5527  ,p_structure_type                     IN VARCHAR2 := 'FINANCIAL'
5528  ,p_structure_version_id               IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5529  ,P_OBLIGATION_START_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5530  ,P_OBLIGATION_FINISH_DATE             IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5531  ,P_ESTIMATED_START_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5532  ,P_ESTIMATED_FINISH_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5533  ,P_BASELINE_START_DATE                IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5534  ,P_BASELINE_FINISH_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5535  ,P_CLOSED_DATE                        IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5536  ,P_WQ_UOM_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5537  ,P_WQ_ITEM_CODE                       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5538  ,P_STATUS_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5539  ,P_WF_STATUS_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5540  ,P_PM_SOURCE_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5541  ,P_PRIORITY_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5542  ,P_MILESTONE_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5543  ,P_CRITICAL_FLAG                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5544  ,P_INC_PROJ_PROGRESS_FLAG             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5545  ,P_LINK_TASK_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5546  ,P_CALENDAR_ID                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5547  ,P_PLANNED_EFFORT                     IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5548  ,P_DURATION                           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5549  ,P_PLANNED_WORK_QUANTITY              IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5550  ,P_TASK_TYPE                          IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5551 --Project Structures
5552  ,p_labor_disc_reason_code             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5553  ,p_non_labor_disc_reason_code         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5554 --PA L changes -- bug 2872708   --Add task
5555  ,p_retirement_cost_flag               VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5556  ,p_cint_eligible_flag            VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5557  ,p_cint_stop_date                DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5558 --end PA L changes -- bug 2872708
5559  ,p_pa_project_id_out              OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
5560  ,p_pa_project_number_out          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5561  ,p_task_id                        OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
5562  -- PA L Changes 3010538
5563  ,p_process_mode                   IN VARCHAR2 := 'ONLINE'
5564 -- FP-M Bug # 3301192
5565  ,p_pred_string                    IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5566 -- ,p_pred_delimiter                     VARCHAR2    DEFAULT ','
5567   ,p_pred_delimiter                IN VARCHAR2   :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5568 -- FP M changes begin (venkat)
5569   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5570   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5571   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5572   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5573   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5574   ,p_total_slack                   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5575   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5576   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5577   ,p_invoice_method                IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5578   ,p_customer_id                   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5579   ,p_gen_etc_source_code             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5580 -- FP M changes end (venkat)
5581 -- FP M changes start (Mapping )
5582   ,p_financial_task_flag        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5583   ,p_mapped_task_id             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5584   ,p_mapped_task_reference      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5585 -- FP M changes end (Mapping )
5586  ,p_deliverable                 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5587  ,p_deliverable_id              IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM -- 3661788 added IN parameter
5588 -- (Begin venkat) Bug #3450684 ------------------------------------------------------------------
5589  ,p_ext_act_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5590  ,p_ext_remain_duration         IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5591  ,p_ext_sch_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5592 -- (End venkat) Bug #3450684   -------------------------------------------------------------------
5593  ,p_op_validate_flag            IN VARCHAR2 := 'Y' --added by rtarway for bug 4218977
5594  ,p_structure_updates_flag      IN VARCHAR2 := 'Y' --Added for Bug 7264422
5595 
5596 )
5597 IS
5598 
5599    l_api_name      CONSTANT  VARCHAR2(30)     := 'add_task';
5600    l_return_status        VARCHAR2(1);
5601    l_add_subtask_ok_flag      VARCHAR2(1);
5602 
5603 -- FP-M Bug # 3301192
5604    l_d_task_id NUMBER;
5605    l_d_task_ver_id NUMBER;
5606    l_d_struct_ver_id NUMBER;
5607 
5608 --custom parameters
5609    l_project_type_rec       pa_project_types%rowtype;
5610    l_project_rec            pa_projects%rowtype;
5611    l_task_in_rec            task_in_rec_type;
5612    l_project_id             pa_projects.project_id%type;
5613    l_task_id                pa_tasks.task_id%type;
5614    l_msg_count              NUMBER ;
5615    l_msg_data               VARCHAR2(2000);
5616    l_function_allowed       VARCHAR2(1);
5617    l_resp_id                NUMBER := 0;
5618    l_user_id                NUMBER := 0;
5619    l_module_name            VARCHAR2(80);
5620    l_process_code           VARCHAR2(30) ;
5621    l_task_weight_basis_code VARCHAR2(30) ;
5622    l_update_wbs_flag        VARCHAR2(1) ;
5623    l_customer_name	    VARCHAR2(360); -- Added for Bug 4689888 -- Modified to VARCHAR2(360) for bug 5856469
5624 --needed to get the field values associated to a AMG message
5625 
5626    CURSOR   l_amg_project_csr
5627       (p_pa_project_id pa_projects.project_id%type)
5628    IS
5629    SELECT   segment1
5630    FROM     pa_projects p
5631    WHERE p.project_id = p_pa_project_id;
5632 
5633    --Added for bug 3280610
5634    --needed to get task_id of a task using project_id and task_reference.
5635    CURSOR   l_task_ref_to_id_csr
5636         (cp_project_id pa_tasks.project_id%TYPE
5637         ,cp_pm_task_reference pa_tasks.pm_task_reference%TYPE)
5638    IS
5639    SELECT   t.task_id
5640    FROM     pa_tasks t
5641    WHERE    t.project_id = cp_project_id
5642    AND      t.pm_task_reference = cp_pm_task_reference;
5643 
5644    --Bug 3279981. Fetch project information
5645    CURSOR cur_get_proj_billing_info IS
5646    SELECT enable_top_task_customer_flag, enable_top_task_inv_mth_flag,
5647           revenue_accrual_method, invoice_method, project_type
5648    FROM   pa_projects_all
5649    WHERE  project_id = p_pa_project_id;
5650 
5651    CURSOR cur_check_proj_cust_exist (c_customer_id IN NUMBER ) IS
5652    SELECT 'Y'
5653    FROM  pa_project_customers
5654    WHERE project_id = p_pa_project_id
5655    AND   customer_id = c_customer_id ;
5656 
5657 --Added for bug 3746912
5658 CURSOR cur_get_str_type_from_str_id( c_structure_version_id IN NUMBER ) IS
5659 SELECT pst.structure_type
5660 FROM   pa_proj_element_versions ppev
5661       ,pa_proj_structure_types ppst
5662       ,pa_structure_types pst
5663 WHERE ppev.element_version_id = c_structure_version_id
5664 AND   ppev.proj_element_id = ppst.proj_element_id
5665 AND   ppst.structure_type_id = pst.structure_type_id ;
5666 -- Added This cursor for Bug No 4689326
5667 CURSOR l_cur_customer_name(l_customer_id NUMBER)
5668  IS
5669   SELECT customer_name from PA_CUSTOMERS_V
5670   WHERE customer_id = l_customer_id;
5671 
5672 l_str_type VARCHAR2(150);
5673 --End : added for bug 3746912
5674 
5675    l_amg_segment1       VARCHAR2(25);
5676    l_amg_task_number       VARCHAR2(50);
5677 
5678    --Project Structures
5679      l_ref_task_id   NUMBER;
5680      l_tasks_in      pa_project_pub.task_in_tbl_type;       --dummy variables.
5681      l_tasks_out     pa_project_pub.task_out_tbl_type ;     --dummy variables.
5682    --Project Structures
5683    --bug 2738747
5684      l_structure_type    VARCHAR2(25);
5685    --bug 2738747
5686      l_task_version_id   NUMBER;
5687 
5688      -- Bug 3091798.
5689      l_request_id        pa_proj_elem_ver_structure.conc_request_id%TYPE;
5690 
5691      --bug 3098668
5692      struct_ver_updatable  VARCHAR2(1);
5693      l_str_ver_type        VARCHAR2(1);
5694      --bug 3098668
5695 
5696      -- Bug 3106457
5697      l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
5698      --Begin Add by rtarway For FP.M Changes for Mapping and Set Financial Task
5699      l_patask_record_version_number NUMBER;
5700      --End Add by rtarway For FP.M Changes for Mapping and Set Financial Task
5701      --Bug 3279981 To store the project's flags
5702      l_proj_top_task_customer_flag VARCHAR2(1);
5703      l_proj_top_task_inv_mth_flag  VARCHAR2(1);
5704      l_proj_revenue_acc_method     VARCHAR2(30);
5705      l_proj_invoice_method         VARCHAR2(30);
5706      l_proj_type                   VARCHAR2(20);
5707      l_dummy                       VARCHAR2(1);
5708 
5709      l_deliverable_id              NUMBER := NULL;  -- 3661788 added local variable
5710 
5711 -- Begin fix for Bug # 4373055.
5712 
5713 l_str_ver_id            NUMBER:= null;
5714 l_conc_request_id       NUMBER := null;
5715 l_message_name  VARCHAR2(30) := null;
5716 l_message_type  VARCHAR2(30) := null;
5717 
5718 -- End fix for Bug # 4373055.
5719 
5720 --Added for Bug 6026370
5721    CURSOR   l_default_parent_task_csr (c_pa_parent_task_id pa_tasks.task_id%type) IS
5722    SELECT   allow_cross_charge_flag,
5723             cc_process_labor_flag,
5724             labor_tp_schedule_id,
5725             labor_tp_fixed_date,
5726             cc_process_nl_flag,
5727             nl_tp_schedule_id,
5728             nl_tp_fixed_date
5729    FROM     pa_tasks
5730    WHERE task_id = c_pa_parent_task_id;
5731 
5732 --Initializiing all the CC attributes to missing values so that if the new task is top task then values of these CC attibites
5733 --will be populated from project CC attributes in  pa_project_pvt.add_task_round_one api
5734 l_allow_cross_charge_flag VARCHAR(1) :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5735 l_cc_process_labor_flag VARCHAR(1) :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5736 l_labor_tp_schedule_id NUMBER :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
5737 l_labor_tp_fixed_date DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
5738 l_cc_process_nl_flag VARCHAR(1) :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5739 l_nl_tp_schedule_id NUMBER :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
5740 l_nl_tp_fixed_date DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
5741 
5742 --End for Bug 6026370
5743 
5744 --bug 6153503
5745 l_validate_dff               VARCHAR2(1);
5746 l_attribute_category         VARCHAR2(30);
5747 l_attribute1                 VARCHAR2(150);
5748 l_attribute2                 VARCHAR2(150);
5749 l_attribute3                 VARCHAR2(150);
5750 l_attribute4                 VARCHAR2(150);
5751 l_attribute5                 VARCHAR2(150);
5752 l_attribute6                 VARCHAR2(150);
5753 l_attribute7                 VARCHAR2(150);
5754 l_attribute8                 VARCHAR2(150);
5755 l_attribute9                 VARCHAR2(150);
5756 l_attribute10                VARCHAR2(150);
5757 l_attribute11                VARCHAR2(150);
5758 l_attribute12                VARCHAR2(150);
5759 l_attribute13                VARCHAR2(150);
5760 l_attribute14                VARCHAR2(150);
5761 l_attribute15                VARCHAR2(150);
5762 
5763 -- Bug 6410745
5764 l_financial_task_flag         VARCHAR2(1);
5765 l_share_code                  VARCHAR2(30);
5766 l_shared                      VARCHAR(1) := 'N';
5767 
5768 BEGIN
5769 
5770 --  Standard begin of API savepoint
5771 
5772     SAVEPOINT add_task_pub;
5773 
5774 --  Standard call to check for call compatibility.
5775 
5776     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
5777                                p_api_version_number  ,
5778                                l_api_name         ,
5779                                G_PKG_NAME         )
5780     THEN
5781 
5782   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5783 
5784     END IF;
5785 
5786 
5787     --  Initialize the message table if requested.
5788     --  pm_product_code is mandatory
5789 
5790 --bug 2841158
5791 --    IF p_pm_product_code IS NULL
5792 --    OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5793     IF p_pm_product_code IS NOT NULL
5794     AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5795 --bug 2841158
5796     THEN
5797 
5798   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5799   THEN
5800          pa_interface_utils_pub.map_new_amg_msg
5801            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
5802             ,p_msg_attribute    => 'CHANGE'
5803             ,p_resize_flag      => 'N'
5804             ,p_msg_context      => 'GENERAL'
5805             ,p_attribute1       => ''
5806             ,p_attribute2       => ''
5807             ,p_attribute3       => ''
5808             ,p_attribute4       => ''
5809             ,p_attribute5       => '');
5810   END IF;
5811   RAISE FND_API.G_EXC_ERROR;
5812     END IF;
5813 
5814 
5815     l_resp_id := FND_GLOBAL.Resp_id;
5816     l_user_id := FND_GLOBAL.User_id;
5817     --l_module_name := p_pm_product_code||'.'||'PA_PM_ADD_TASK';
5818     l_module_name := 'PA_PM_ADD_TASK';
5819 
5820 --Moved from below for bug 2471668
5821 -- get the project ID
5822 
5823         PA_PROJECT_PVT.Convert_pm_projref_to_id
5824         (        p_pm_project_reference =>      p_pm_project_reference
5825                  ,  p_pa_project_id     =>      p_pa_project_id
5826                  ,  p_out_project_id    =>      l_project_id
5827                  ,  p_return_status     =>      l_return_status
5828         );
5829 
5830 
5831         IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5832 
5833                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
5834 
5835         ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
5836 
5837                 RAISE  FND_API.G_EXC_ERROR;
5838         END IF;
5839 --Moved from below for bug 2471668
5840 
5841 -- Added for bug 3746912, reopened rtarway
5842 --Added initialization code for l_str_type for reopened bug , now l_str_type will always be initialized with passed structure type
5843 --and will be overridden if structure version id is passed.
5844                l_str_type := p_structure_type;
5845 
5846 -- Added for bug 3746912
5847      --If the structure version id is passed, it gets priority over the structure type.
5848      --And the structure type should be derived from the version id in such a case
5849      IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5850           OPEN  cur_get_str_type_from_str_id(p_structure_version_id);
5851           FETCH cur_get_str_type_from_str_id INTO l_str_type;
5852           IF cur_get_str_type_from_str_id%NOTFOUND THEN
5853                l_str_type := p_structure_type;
5854            --Foll IF condition added for Bug 3810365
5855           ELSIF 'N' = PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) THEN
5856                l_str_type := 'FINANCIAL';
5857           END IF;
5858           CLOSE cur_get_str_type_from_str_id;
5859      END IF;
5860 -- End : Added for bug 3746912
5861 
5862 -- Moved from above for bug 3106457. The customer might pass only the project reference and not the project
5863 -- id. So we should derive the id and use it.
5864 -- PA L Changes 3010538
5865 -- Need not use map new amg msg api here as we donot have context information to be displayed and
5866 -- _AMG messages are not defined.
5867 -- Using PA_UTILS.ADD_MESSAGE
5868     --IF p_structure_type IS NOT NULL THEN  Replaced p_structure_type by l_str_type for 3746912
5869     IF l_str_type IS NOT NULL THEN
5870 
5871 -- Begin fix for Bug # 4373055.
5872 
5873 /*
5874 
5875           l_process_code :=
5876                       PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id --p_pa_project_id 3106457
5877                                                                         ,p_structure_type => l_str_type ); --p_structure_type 3746912
5878           IF nvl(l_process_code,'-1') = 'WUP' THEN
5879                     l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id -- bug 3106457 p_pa_project_id  -- Bug 3091798
5880                                                                                   ,p_structure_type => l_str_type ); --p_structure_type 3746912
5881 
5882                PA_UTILS.ADD_MESSAGE
5883                      (p_app_short_name => 'PA',
5884                       --p_msg_name       => 'PA_PS_VD_UPDWBS_PRC_INPROC');
5885                       p_msg_name       => 'PA_PS_UPDWBS_PRC_INPROC_AMG',  -- Bug 3091798. Message includes the request id.
5886                       p_token1         => 'REQUESTID',
5887                       p_value1         => l_request_id);
5888 
5889 
5890                RAISE FND_API.G_EXC_ERROR;
5891 
5892           ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
5893                     l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id -- bug 3106457 p_pa_project_id  -- Bug 3091798
5894                                                                                   ,p_structure_type => l_str_type ); --p_structure_type 3746912
5895 
5896                PA_UTILS.ADD_MESSAGE
5897                      (p_app_short_name => 'PA',
5898                      -- p_msg_name       => 'PA_PS_VD_UPD_WBS_PRC_ERR');
5899                       p_msg_name       => 'PA_PS_UPDWBS_PRC_ERR_AMG',  -- Bug 3091798. Message includes the request id.
5900                       p_token1         => 'REQUESTID',
5901                       p_value1         => l_request_id);
5902 
5903 
5904               RAISE FND_API.G_EXC_ERROR;
5905 
5906           END IF;
5907 
5908 */
5909 
5910     PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
5911         p_project_id              => l_project_id
5912         , p_structure_type        => l_str_type
5913         , p_structure_version_id  => null
5914         , p_context               => 'UPDATE_AMG'
5915         , x_message_name          => l_message_name
5916         , x_message_type          => l_message_type
5917         , x_structure_version_id  => l_str_ver_id
5918         , x_conc_request_id       => l_conc_request_id);
5919 
5920 
5921     if l_message_name is not null then
5922 
5923              PA_UTILS.ADD_MESSAGE(
5924                      p_app_short_name => 'PA'
5925                      , p_msg_name       => l_message_name
5926                      , p_token1         => 'REQUESTID'
5927                      , p_value1         => l_conc_request_id);
5928 
5929                   RAISE FND_API.G_EXC_ERROR;
5930     end if;
5931 
5932 -- End fix for Bug # 4373055.
5933 
5934     END IF ;
5935   --  END IF ;
5936 
5937   -- PA L Changes 3010538
5938 
5939     -- As part of enforcing project security, which would determine
5940     -- whether the user has the necessary privileges to update the project
5941     -- need to call the pa_security package
5942 
5943     pa_security.initialize (X_user_id        => l_user_id,
5944                             X_calling_module => l_module_name);
5945 
5946     -- Actions performed using the APIs would be subject to
5947     -- function security. If the responsibility does not allow
5948     -- such functions to be executed, the API should not proceed further
5949     -- since the user does not have access to such functions
5950 
5951     -- Function security procedure check whether user have the
5952     -- privilege to add task or not
5953 
5954       PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id;  --bug 2471668 ( in the project context )
5955 
5956       PA_PM_FUNCTION_SECURITY_PUB.check_function_security
5957       (p_api_version_number => p_api_version_number,
5958        p_responsibility_id  => l_resp_id,
5959        p_function_name      => 'PA_PM_ADD_TASK',
5960        p_msg_count      => l_msg_count,
5961        p_msg_data           => l_msg_data,
5962        p_return_status      => l_return_status,
5963        p_function_allowed   => l_function_allowed);
5964 
5965        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5966        THEN
5967       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5968 
5969        ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5970        THEN
5971       RAISE FND_API.G_EXC_ERROR;
5972        END IF;
5973 
5974        IF l_function_allowed = 'N' THEN
5975          pa_interface_utils_pub.map_new_amg_msg
5976            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
5977             ,p_msg_attribute    => 'CHANGE'
5978             ,p_resize_flag      => 'Y'
5979             ,p_msg_context      => 'GENERAL'
5980             ,p_attribute1       => ''
5981             ,p_attribute2       => ''
5982             ,p_attribute3       => ''
5983             ,p_attribute4       => ''
5984             ,p_attribute5       => '');
5985          p_return_status := FND_API.G_RET_STS_ERROR;
5986          RAISE FND_API.G_EXC_ERROR;
5987        END IF;
5988 
5989     IF FND_API.TO_BOOLEAN( p_init_msg_list )
5990     THEN
5991 
5992   FND_MSG_PUB.initialize;
5993 
5994     END IF;
5995 
5996 --  Set API return status to success
5997 
5998     p_return_status := FND_API.G_RET_STS_SUCCESS;
5999 
6000 
6001 /* Moving this code before calling the security API. Although p_pa_project_id contains the project id but
6002    it is converted and l_project_id is used subsequently.
6003    --bug 2471668
6004 -- get the project ID
6005 
6006   PA_PROJECT_PVT.Convert_pm_projref_to_id
6007   (   p_pm_project_reference  =>  p_pm_project_reference
6008      ,  p_pa_project_id   =>  p_pa_project_id
6009      ,  p_out_project_id   =>  l_project_id
6010      ,  p_return_status   =>  l_return_status
6011   );
6012 
6013 
6014   IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6015 
6016     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
6017 
6018   ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
6019 
6020     RAISE  FND_API.G_EXC_ERROR;
6021   END IF;
6022 */
6023 
6024       -- Now verify whether project security allows the user to update
6025       -- the project
6026 
6027       IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
6028 
6029          -- The user does not have query privileges on this project
6030          -- Hence, cannot update the project.Raise error
6031          pa_interface_utils_pub.map_new_amg_msg
6032            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
6033             ,p_msg_attribute    => 'CHANGE'
6034             ,p_resize_flag      => 'Y'
6035             ,p_msg_context      => 'GENERAL'
6036             ,p_attribute1       => ''
6037             ,p_attribute2       => ''
6038             ,p_attribute3       => ''
6039             ,p_attribute4       => ''
6040             ,p_attribute5       => '');
6041      p_return_status := FND_API.G_RET_STS_ERROR;
6042      RAISE FND_API.G_EXC_ERROR;
6043       ELSE
6044             -- If the user has query privileges, then check whether
6045             -- update privileges are also available
6046          IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
6047 
6048             -- The user does not have update privileges on this project
6049             -- Hence , raise error
6050 
6051          pa_interface_utils_pub.map_new_amg_msg
6052            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
6053             ,p_msg_attribute    => 'CHANGE'
6054             ,p_resize_flag      => 'Y'
6055             ,p_msg_context      => 'GENERAL'
6056             ,p_attribute1       => ''
6057             ,p_attribute2       => ''
6058             ,p_attribute3       => ''
6059             ,p_attribute4       => ''
6060             ,p_attribute5       => '');
6061      p_return_status := FND_API.G_RET_STS_ERROR;
6062      RAISE FND_API.G_EXC_ERROR;
6063         END IF;
6064      END IF;
6065 
6066 -- Get segment1 for AMG messages
6067 
6068    OPEN l_amg_project_csr( l_project_id );
6069    FETCH l_amg_project_csr INTO l_amg_segment1;
6070    CLOSE l_amg_project_csr;
6071 
6072    --bug 2738747    ---Add task
6073    G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
6074    G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
6075    G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
6076    --bug 2738747
6077    G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
6078    G_OP_VALIDATE_FLAG         := p_op_validate_flag; --added by rtarway for bug 4218977
6079 
6080 --bug 2876703   --Add_task
6081    IF G_IS_WP_SEPARATE_FROM_FN = 'N' AND
6082       l_str_type = 'WORKPLAN' --p_structure_type = 'WORKPLAN' 3746912
6083    THEN
6084         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6085         THEN
6086             pa_interface_utils_pub.map_new_amg_msg
6087               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
6088                   ,p_msg_attribute    => 'CHANGE'
6089                   ,p_resize_flag      => 'N'
6090                   ,p_msg_context      => 'GENERAL'
6091                   ,p_attribute1       => ''
6092                   ,p_attribute2       => ''
6093                   ,p_attribute3       => ''
6094                   ,p_attribute4       => ''
6095                   ,p_attribute5       => '');
6096         END IF;
6097         RAISE FND_API.G_EXC_ERROR;
6098    END IF;
6099 --bug 2876703
6100 
6101    --bug 2738747
6102    IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
6103       AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
6104       AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
6105       AND l_str_type /*p_structure_type 3746912*/= 'FINANCIAL'
6106    THEN
6107        --Change the flow to WORKPLAN
6108        l_structure_type := 'WORKPLAN';
6109 
6110    ELSE
6111        l_structure_type := l_str_type; --p_structure_type  3746912
6112    END IF;
6113    --bug 2738747
6114 
6115 /* Though it does not matter but for clarity should only be done for Financial
6116    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6117     (p_task_number=> p_task_name
6118     ,p_task_reference => p_pm_task_reference
6119     ,p_task_id => '');
6120 */
6121 
6122 --check for parent task,when no parent task is given,the new task will become a
6123 --top task and a top task can alway be added.
6124 --modified to allow creation of sub-task for a parent not create through AMG
6125 --A non AMG created task could have its pm_parent_task_reference NULL. *O
6126 
6127 --project structure
6128 --This validation should be done for only FINANCIAL structrues
6129 --IF p_structure_type = 'FINANCIAL'    bug 2738747
6130 IF l_structure_type = 'FINANCIAL'      --bug 2738747
6131 THEN
6132 --project structure
6133 
6134    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6135     (p_task_number=> p_task_name
6136     ,p_task_reference => p_pm_task_reference
6137     ,p_task_id => '');
6138 
6139    IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
6140    (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
6141    THEN
6142 
6143      check_add_subtask_ok(    p_api_version_number   => p_api_version_number
6144                 ,p_init_msg_list  => FND_API.G_FALSE
6145                 ,p_msg_data    => p_msg_data
6146               ,p_msg_count    => p_msg_count
6147               ,p_return_status  => l_return_status
6148               ,p_project_id     => l_project_id
6149               ,p_pm_project_reference  => NULL
6150               ,p_task_id    => p_pa_parent_task_id
6151               ,p_pm_task_reference  => p_pm_parent_task_reference
6152               ,p_add_subtask_ok_flag  => l_add_subtask_ok_flag  );
6153 
6154    END IF;
6155 
6156    IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6157    THEN
6158     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6159 
6160    ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6161    THEN
6162 
6163     RAISE FND_API.G_EXC_ERROR;
6164    END IF;
6165 
6166    IF l_add_subtask_ok_flag <> 'Y'
6167    then
6168   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6169   THEN
6170          pa_interface_utils_pub.map_new_amg_msg
6171            ( p_old_message_code => 'PA_TASK_CAN_NOT_BE_ADDED'
6172             ,p_msg_attribute    => 'CHANGE'
6173             ,p_resize_flag      => 'N'
6174             ,p_msg_context      => 'TASK'
6175             ,p_attribute1       => l_amg_segment1
6176             ,p_attribute2       => l_amg_task_number
6177             ,p_attribute3       => ''
6178             ,p_attribute4       => ''
6179             ,p_attribute5       => '');
6180   END IF;
6181 
6182   RAISE FND_API.G_EXC_ERROR;
6183 
6184    end IF;
6185 
6186 END IF;  --<<l_structrue_type = 'FINANCIAL' >>
6187 
6188   -- Bug 3279981. FP_M Changes for customer and invoice method at top task
6189   -- Validate and set invoice method and customer id for the task
6190   OPEN  cur_get_proj_billing_info;
6191   FETCH cur_get_proj_billing_info INTO l_proj_top_task_customer_flag, l_proj_top_task_inv_mth_flag,
6192                                        l_proj_revenue_acc_method, l_proj_invoice_method, l_proj_type;
6193   CLOSE cur_get_proj_billing_info;
6194 
6195   IF 'Y' = l_proj_top_task_inv_mth_flag
6196   AND p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6197      IF pa_project_pvt.check_valid_dist_rule
6198              ( l_proj_type,
6199                l_proj_revenue_acc_method||'/'||p_invoice_method,
6200                l_proj_top_task_inv_mth_flag ) = 'N'   THEN
6201                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6202                    pa_interface_utils_pub.map_new_amg_msg
6203                      ( p_old_message_code => 'PA_INV_TASK_INVOICE_METHOD' -- 4146813 changed error message code
6204                       ,p_msg_attribute    => 'CHANGE'
6205                       ,p_resize_flag      => 'N'
6206                       ,p_msg_context      => 'TASK'
6207                       ,p_attribute1       => p_invoice_method
6208                       ,p_attribute2       => ''
6209                       ,p_attribute3       => ''
6210                       ,p_attribute4       => ''
6211                       ,p_attribute5       => '');
6212                END IF;
6213                RAISE  FND_API.G_EXC_ERROR;
6214      ELSE
6215                l_task_in_rec.invoice_method := p_invoice_method;
6216      END IF;
6217   ELSE
6218        l_task_in_rec.invoice_method := NULL;
6219   END IF;
6220 
6221   IF 'Y' = l_proj_top_task_customer_flag THEN
6222   -- If condition is changed for Bug Number 4689326
6223       IF p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6224           OPEN  cur_check_proj_cust_exist(p_customer_id);
6225           FETCH cur_check_proj_cust_exist INTO l_dummy;
6226           IF cur_check_proj_cust_exist%NOTFOUND THEN
6227                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6228                 /*Commented for Bug Number 4689326
6229                     pa_interface_utils_pub.map_new_amg_msg
6230                      ( p_old_message_code => 'PA_INVALID_TASK_CUSTOMER'
6231                       ,p_msg_attribute    => 'CHANGE'
6232                       ,p_resize_flag      => 'N'
6233                       ,p_msg_context      => 'TASK'
6234                       ,p_attribute1       => p_customer_id
6235                       ,p_attribute2       => ''
6236                       ,p_attribute3       => ''
6237                       ,p_attribute4       => ''
6238                       ,p_attribute5       => '');*/
6239                    -- Start of Bug Number 4689326
6240                    OPEN l_cur_customer_name(p_customer_id);
6241                    FETCH l_cur_customer_name INTO l_customer_name;
6242                    CLOSE l_cur_customer_name;
6243                    IF (l_customer_name IS NULL OR l_customer_name =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6244                     -- Checking whether the specified customer exits or not
6245                      pa_interface_utils_pub.map_new_amg_msg
6246                      ( p_old_message_code => 'PA_CUSTOMER_NOT_EXIST'
6247                       ,p_msg_attribute    => 'CHANGE'
6248                       ,p_resize_flag      => 'N'
6249                       ,p_msg_context      => 'GENERAL'
6250                       ,p_attribute1       => ''
6251                       ,p_attribute2       => ''
6252                       ,p_attribute3       => ''
6253                       ,p_attribute4       => ''
6254                       ,p_attribute5       => '');
6255                    ELSE
6256                         PA_UTILS.ADD_MESSAGE
6257                               (p_app_short_name => 'PA',
6258                                 p_msg_name       => 'PA_INVALID_PROJECT_CUSTOMER',
6259                                 p_token1         => 'CUSTOMER_NAME',
6260                                 p_value1         =>  l_customer_name
6261                                 );
6262                    END IF;
6263                   -- End of Bug Number 4689326.
6264                END IF;
6265                CLOSE cur_check_proj_cust_exist;
6266                RAISE  FND_API.G_EXC_ERROR;
6267           ELSE
6268                l_task_in_rec.customer_id := p_customer_id;
6269                CLOSE cur_check_proj_cust_exist;
6270           END IF;
6271       ELSE
6272        -- Added for Bug Number 4689326
6273        -- Start of Bug Number 4689326
6274         IF p_customer_id IS NULL THEN
6275           pa_interface_utils_pub.map_new_amg_msg
6276                      ( p_old_message_code => 'PA_INVALID_CUST'
6277                       ,p_msg_attribute    => 'CHANGE'
6278                       ,p_resize_flag      => 'N'
6279                       ,p_msg_context      => 'GENERAL'
6280                       ,p_attribute1       => ''
6281                       ,p_attribute2       => ''
6282                       ,p_attribute3       => ''
6283                       ,p_attribute4       => ''
6284                       ,p_attribute5       => '');
6285                     RAISE FND_API.G_EXC_ERROR;
6286         ELSE
6287           l_task_in_rec.customer_id :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM; -- when the customer_id is Miss Num we are passing Miss num to add_task_roundone.
6288         END IF;
6289         -- End of Bug Number 4689326
6290       END IF;
6291   ELSE
6292           l_task_in_rec.customer_id := NULL;
6293   END IF;
6294 
6295    --Binding the incoming parameters to the local task record
6296    l_task_in_rec.pm_task_reference    :=  p_pm_task_reference;
6297    IF p_pa_task_number IS NULL OR
6298       p_pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6299       l_task_in_rec.pa_task_number        :=  p_pm_task_reference;
6300    ELSE
6301       l_task_in_rec.pa_task_number        :=  p_pa_task_number;
6302    END IF;
6303    l_task_in_rec.pa_task_id      :=  NULL;
6304    l_task_in_rec.task_name      :=  p_task_name;
6305   -- l_task_in_rec.long_task_name      :=  p_long_task_name;
6306 /* Commented the above line of code for bug 2982057 and add the below code*/
6307    IF p_long_task_name IS NULL
6308     OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6309     THEN
6310       l_task_in_rec.long_task_name := p_task_name;
6311     ELSE
6312       l_task_in_rec.long_task_name := p_long_task_name;
6313     END IF;
6314     /* Code addition for bug 2982057 ends*/
6315    l_task_in_rec.task_description    :=  p_task_description;
6316    l_task_in_rec.task_start_date    :=  p_task_start_date;
6317    l_task_in_rec.task_completion_date    :=  p_task_completion_date;
6318    l_task_in_rec.pa_parent_task_id              :=      p_pa_parent_task_id; -- Added for Bug2316713
6319    l_task_in_rec.pm_parent_task_reference  :=  p_pm_parent_task_reference;
6320    l_task_in_rec.address_id      :=  p_address_id;
6321    l_task_in_rec.carrying_out_organization_id  :=  p_carrying_out_organization_id;
6322    l_task_in_rec.service_type_code    :=  p_service_type_code;
6323    l_task_in_rec.task_manager_person_id    :=  p_task_manager_person_id;
6324    l_task_in_rec.billable_flag      :=  p_billable_flag;
6325    l_task_in_rec.chargeable_flag    :=  p_chargeable_flag;
6326    l_task_in_rec.ready_to_bill_flag    :=  p_ready_to_bill_flag;
6327    l_task_in_rec.ready_to_distribute_flag  :=  p_ready_to_distribute_flag;
6328    l_task_in_rec.limit_to_txn_controls_flag  :=  p_limit_to_txn_controls_flag;
6329    l_task_in_rec.labor_bill_rate_org_id    :=  p_labor_bill_rate_org_id;
6330    l_task_in_rec.labor_std_bill_rate_schdl  :=  p_labor_std_bill_rate_schdl;
6331    l_task_in_rec.labor_schedule_fixed_date  :=  p_labor_schedule_fixed_date;
6332    l_task_in_rec.labor_schedule_discount  :=  p_labor_schedule_discount;
6333    l_task_in_rec.non_labor_bill_rate_org_id  :=  p_nl_bill_rate_org_id;
6334    l_task_in_rec.non_labor_std_bill_rate_schdl  :=  p_nl_std_bill_rate_schdl;
6335    l_task_in_rec.non_labor_schedule_fixed_date  :=  p_nl_schedule_fixed_date;
6336    l_task_in_rec.non_labor_schedule_discount  :=  p_nl_schedule_discount;
6337    l_task_in_rec.labor_cost_multiplier_name  :=  p_labor_cost_multiplier_name;
6338    l_task_in_rec.cost_ind_rate_sch_id    :=  p_cost_ind_rate_sch_id;
6339    l_task_in_rec.rev_ind_rate_sch_id    :=  p_rev_ind_rate_sch_id;
6340    l_task_in_rec.inv_ind_rate_sch_id    :=  p_inv_ind_rate_sch_id;
6341    l_task_in_rec.cost_ind_sch_fixed_date  :=  p_cost_ind_sch_fixed_date;
6342    l_task_in_rec.rev_ind_sch_fixed_date    :=  p_rev_ind_sch_fixed_date;
6343    l_task_in_rec.inv_ind_sch_fixed_date    :=  p_inv_ind_sch_fixed_date;
6344    l_task_in_rec.labor_sch_type      :=  p_labor_sch_type;
6345    l_task_in_rec.non_labor_sch_type    :=  p_nl_sch_type;
6346    l_task_in_rec.actual_start_date              :=      p_actual_start_date;
6347    l_task_in_rec.actual_finish_date             :=      p_actual_finish_date;
6348    l_task_in_rec.early_start_date               :=      p_early_start_date;
6349    l_task_in_rec.early_finish_date              :=      p_early_finish_date;
6350    l_task_in_rec.late_start_date                :=      p_late_start_date;
6351    l_task_in_rec.late_finish_date               :=      p_late_finish_date;
6352    l_task_in_rec.scheduled_start_date           :=      p_scheduled_start_date;
6353    l_task_in_rec.scheduled_finish_date          :=      p_scheduled_finish_date;
6354    l_task_in_rec.tasks_dff                      :=      p_tasks_dff; --bug 6153503
6355    l_task_in_rec.attribute_category             :=      p_attribute_category;
6356    l_task_in_rec.attribute1            :=      p_attribute1;
6357    l_task_in_rec.attribute2            :=      p_attribute2;
6358    l_task_in_rec.attribute3            :=      p_attribute3;
6359    l_task_in_rec.attribute4            :=      p_attribute4;
6360    l_task_in_rec.attribute5            :=      p_attribute5;
6361    l_task_in_rec.attribute6            :=      p_attribute6;
6362    l_task_in_rec.attribute7            :=      p_attribute7;
6363    l_task_in_rec.attribute8            :=      p_attribute8;
6364    l_task_in_rec.attribute9            :=      p_attribute9;
6365    l_task_in_rec.attribute10           :=      p_attribute10;
6366    --bug 6153503
6367    l_task_in_rec.attribute11           :=      p_attribute11;
6368    l_task_in_rec.attribute12           :=      p_attribute12;
6369    l_task_in_rec.attribute13           :=      p_attribute13;
6370    l_task_in_rec.attribute14           :=      p_attribute14;
6371    l_task_in_rec.attribute15           :=      p_attribute15;
6372 
6373    IF l_task_in_rec.tasks_dff = 'Y' THEN
6374             l_validate_dff          := 'N';
6375             l_attribute_category     := null;
6376             l_attribute1             := null;
6377             l_attribute2             := null;
6378             l_attribute3             := null;
6379             l_attribute4             := null;
6380             l_attribute5             := null;
6381             l_attribute6             := null;
6382             l_attribute7             := null;
6383             l_attribute8             := null;
6384             l_attribute9             := null;
6385             l_attribute10            := null;
6386             l_attribute11            := null;
6387             l_attribute12            := null;
6388             l_attribute13            := null;
6389             l_attribute14            := null;
6390             l_attribute15            := null;
6391 
6392    ELSIF l_task_in_rec.tasks_dff = 'N' THEN
6393 
6394             l_validate_dff           := 'Y';
6395             l_attribute_category     := l_task_in_rec.attribute_category;
6396             l_attribute1             := l_task_in_rec.attribute1;
6397             l_attribute2             := l_task_in_rec.attribute2;
6398             l_attribute3             := l_task_in_rec.attribute3;
6399             l_attribute4             := l_task_in_rec.attribute4;
6400             l_attribute5             := l_task_in_rec.attribute5;
6401             l_attribute6             := l_task_in_rec.attribute6;
6402             l_attribute7             := l_task_in_rec.attribute7;
6403             l_attribute8             := l_task_in_rec.attribute8;
6404             l_attribute9             := l_task_in_rec.attribute9;
6405             l_attribute10            := l_task_in_rec.attribute10;
6406             l_attribute11            := l_task_in_rec.attribute11;
6407             l_attribute12            := l_task_in_rec.attribute12;
6408             l_attribute13            := l_task_in_rec.attribute13;
6409             l_attribute14            := l_task_in_rec.attribute14;
6410             l_attribute15            := l_task_in_rec.attribute15;
6411    END IF;
6412    --end bug 6153503
6413 
6414    l_task_in_rec.task_type             :=      p_task_type;   -- Added for bug 3086001
6415 
6416   --bug 3281110
6417   l_task_in_rec.retirement_cost_flag  :=      p_retirement_cost_flag;
6418   l_task_in_rec.cint_eligible_flag    :=      p_cint_eligible_flag;
6419   l_task_in_rec.cint_stop_date        :=      p_cint_stop_date;
6420   --bug 3281110
6421 
6422  -- FP-M Bug # 3301192
6423  l_task_in_rec.pred_string       :=      p_pred_string;
6424  l_task_in_rec.pred_delimiter    :=  p_pred_delimiter;
6425 
6426 --Added for Bug 6026370
6427 IF p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6428         OPEN l_default_parent_task_csr( p_pa_parent_task_id );
6429           FETCH l_default_parent_task_csr
6430             INTO l_allow_cross_charge_flag,
6431                  l_cc_process_labor_flag,
6432                  l_labor_tp_schedule_id,
6433                  l_labor_tp_fixed_date,
6434                  l_cc_process_nl_flag,
6435                  l_nl_tp_schedule_id,
6436                  l_nl_tp_fixed_date;
6437            CLOSE l_default_parent_task_csr;
6438 END IF;
6439 -- Changes End for Bug 6026370
6440 
6441 -- IC AND  Multi National Currency Changes Starts Here ...
6442      IF p_allow_cross_charge_flag IS NULL THEN --Added null condition for Bug 6026370
6443 
6444         l_task_in_rec.allow_cross_charge_flag  :=  'N';
6445 
6446      ELSIF p_allow_cross_charge_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6447 --      l_task_in_rec.allow_cross_charge_flag  :=  'N'; -- Bug 6026370
6448         l_task_in_rec.allow_cross_charge_flag  :=  l_allow_cross_charge_flag;  -- Bug 6026370
6449 
6450      ELSE
6451         l_task_in_rec.allow_cross_charge_flag  :=  p_allow_cross_charge_flag;
6452      END IF;
6453 
6454      l_task_in_rec.project_rate_type  :=  p_project_rate_type;
6455      l_task_in_rec.project_rate_date  :=  p_project_rate_date;
6456 
6457 /*   Commented for Bug 6026370
6458      IF p_cc_process_labor_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6459      THEN
6460         l_task_in_rec.cc_process_labor_flag  :=  'N';
6461      ELSE
6462         l_task_in_rec.cc_process_labor_flag  :=  p_cc_process_labor_flag;
6463      END IF;
6464 
6465      IF p_cc_process_nl_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6466      THEN
6467         l_task_in_rec.cc_process_nl_flag  :=  'N';
6468      ELSE
6469         l_task_in_rec.cc_process_nl_flag  :=  p_cc_process_nl_flag;
6470      END IF;
6471 */
6472 
6473 -- Added for Bug 6026370
6474      IF p_cc_process_labor_flag IS NULL THEN
6475         l_task_in_rec.cc_process_labor_flag := 'N';
6476         l_labor_tp_schedule_id := NULL;
6477         l_labor_tp_fixed_date := NULL;
6478      ELSIF p_cc_process_labor_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6479 --        l_task_in_rec.cc_process_labor_flag  :=  'N';  -- Bug 6026370
6480         l_task_in_rec.cc_process_labor_flag  := l_cc_process_labor_flag;  -- Bug 6026370
6481              ELSE
6482         l_task_in_rec.cc_process_labor_flag  :=  p_cc_process_labor_flag;
6483         IF p_cc_process_labor_flag = 'Y' THEN
6484                 IF (p_labor_tp_schedule_id IS NULL OR p_labor_tp_schedule_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6485                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6486                            pa_interface_utils_pub.map_new_amg_msg
6487                              ( p_old_message_code => 'PA_TASK_LAB_TP_SCH_MAND'
6488                               ,p_msg_attribute    => 'CHANGE'
6489                               ,p_resize_flag      => 'N'
6490                               ,p_msg_context      => 'TASK'
6491                               ,p_attribute1       => ''
6492                               ,p_attribute2       => ''
6493                               ,p_attribute3       => ''
6494                               ,p_attribute4       => ''
6495                               ,p_attribute5       => '');
6496                         END IF;
6497                         RAISE  FND_API.G_EXC_ERROR;
6498                 ELSE
6499                         /*As of now we are not doing the basic validation check for p_labor_tp_schedule_id */
6500                         l_labor_tp_schedule_id := p_labor_tp_schedule_id;
6501                         IF p_labor_tp_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6502                                 l_labor_tp_fixed_date := NULL;
6503                         ELSE
6504                                 l_labor_tp_fixed_date := p_labor_tp_fixed_date;
6505                         END IF;
6506                 END IF;
6507         ELSE
6508                 --- If we pass p_cc_process_labor_flag = 'N' then we will not honor the values passed in
6509                 --  p_labor_tp_schedule_id and p_labor_tp_fixed_date
6510                 l_labor_tp_schedule_id := NULL;
6511                 l_labor_tp_fixed_date := NULL;
6512         END IF;
6513      END IF;
6514 
6515 -- End Bug 6026370
6516 
6517 -- Added for Bug 6026370
6518      IF p_cc_process_nl_flag IS NULL THEN
6519         l_task_in_rec.cc_process_nl_flag := 'N';
6520         l_nl_tp_schedule_id := NULL;
6521         l_nl_tp_fixed_date := NULL;
6522      ELSIF p_cc_process_nl_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6523 --        l_task_in_rec.cc_process_labor_flag  :=  'N';  -- Bug 6026370
6524         l_task_in_rec.cc_process_nl_flag  := l_cc_process_nl_flag;  -- Bug 6026370
6525      ELSE
6526         l_task_in_rec.cc_process_nl_flag  :=  p_cc_process_nl_flag;
6527         IF p_cc_process_nl_flag = 'Y' THEN
6528                 IF p_nl_tp_schedule_id IS NULL OR p_nl_tp_schedule_id =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6529                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6530                            pa_interface_utils_pub.map_new_amg_msg
6531                              ( p_old_message_code => 'PA_TASK_NL_TP_SCH_MAND'
6532                               ,p_msg_attribute    => 'CHANGE'
6533                               ,p_resize_flag      => 'N'
6534                               ,p_msg_context      => 'TASK'
6535                               ,p_attribute1       => ''
6536                               ,p_attribute2       => ''
6537                               ,p_attribute3       => ''
6538                               ,p_attribute4       => ''
6539                               ,p_attribute5       => '');
6540                         END IF;
6541                         RAISE  FND_API.G_EXC_ERROR;
6542                 ELSE
6543                         /*As of now we are not doing the basic validation check for p_nl_tp_schedule_id */
6544                         l_nl_tp_schedule_id := p_nl_tp_schedule_id;
6545                         IF p_nl_tp_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6546                                 l_nl_tp_fixed_date := NULL;
6547                         ELSE
6548                                 l_nl_tp_fixed_date := p_nl_tp_fixed_date;
6549                         END IF;
6550                 END IF;
6551         ELSE
6552                 --- If we pass p_cc_process_nl_flag = 'N' then we will not honor the values passed in
6553                 --  p_nl_tp_schedule_id and p_nl_tp_fixed_date
6554                 l_nl_tp_schedule_id := NULL;
6555                 l_nl_tp_fixed_date := NULL;
6556         END IF;
6557      END IF;
6558 -- End Bug 6026370
6559 
6560   --Project Structures
6561      IF p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6562      THEN
6563         l_ref_task_id :=  null;
6564      ELSE
6565         l_ref_task_id :=  p_ref_task_id;
6566      END IF;
6567   --Project Structures
6568 -- For bug 3280610 Commented the below code and added code for
6569 -- if l_ref_task_id is not passed then we pass parent Task id instead of throwing an error message
6570 --      Bug 3075623 : Added following condition to throw error if no ref task id
6571 --    IF (( (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
6572 --         (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
6573 --   AND l_ref_task_id is null ) THEN
6574 --       PA_UTILS.ADD_MESSAGE
6575 --         (p_app_short_name => 'PA',
6576 --              p_msg_name       => 'PA_PS_INV_REF_TASK_ID');
6577 --
6578 --       RAISE FND_API.G_EXC_ERROR;
6579 --     END IF;
6580        IF l_ref_task_id is null THEN
6581 
6582           IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6583 
6584           l_ref_task_id :=  p_pa_parent_task_id;
6585 
6586           ELSIF (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6587 
6588             --Begin change by rtarway for BUG 3661788, use Convert_pm_taskref_to_id_all  to get task id instead of using l_task_ref_to_id_csr
6589             --OPEN l_task_ref_to_id_csr(l_project_id,p_pm_parent_task_reference);
6590             --FETCH l_task_ref_to_id_csr INTO l_ref_task_id;
6591             PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
6592             (
6593                 p_pa_project_id        => l_project_id    ,
6594                 p_structure_type       => l_structure_type,
6595                 p_pm_task_reference    => p_pm_parent_task_reference ,
6596                 p_out_task_id          => l_ref_task_id,
6597                 p_return_status        => l_return_status
6598             );
6599 
6600             --changed by rtarway for BUG 3661788
6601             --IF l_task_ref_to_id_csr%NOTFOUND
6602             IF (l_return_status <> 'S')
6603             THEN
6604                 --rtarway , 3661788, comment close command
6605                 --CLOSE l_task_ref_to_id_csr;
6606                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6607                 THEN
6608                  l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6609                                           (p_task_number=> p_task_name
6610                                           ,p_task_reference => p_pm_task_reference
6611                                           ,p_task_id => '');
6612 
6613                          pa_interface_utils_pub.map_new_amg_msg
6614                           ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
6615                            ,p_msg_attribute    => 'CHANGE'
6616                            ,p_resize_flag      => 'N'
6617                            ,p_msg_context      => 'TASK'
6618                            ,p_attribute1       => l_amg_segment1
6619                            ,p_attribute2       => l_amg_task_number
6620                            ,p_attribute3       => ''
6621                            ,p_attribute4       => ''
6622                            ,p_attribute5       => '');
6623                 END IF;
6624                 RAISE  FND_API.G_EXC_ERROR;
6625              END IF;
6626             --rtarway , 3661788, comment close command
6627             --CLOSE l_task_ref_to_id_csr;
6628            END IF;
6629        END IF;
6630 -- End for changes done for bug 3280610
6631 
6632 /*Commented for Bug 6026370
6633   l_task_in_rec.labor_tp_schedule_id  :=  p_labor_tp_schedule_id;
6634   l_task_in_rec.labor_tp_fixed_date  :=  p_labor_tp_fixed_date;
6635   l_task_in_rec.nl_tp_schedule_id  :=  p_labor_tp_schedule_id;
6636   l_task_in_rec.nl_tp_fixed_date  :=  p_labor_tp_fixed_date;*/
6637 
6638 --Added for Bug 6026370
6639   l_task_in_rec.labor_tp_schedule_id  :=  l_labor_tp_schedule_id;
6640   l_task_in_rec.labor_tp_fixed_date  :=  l_labor_tp_fixed_date;
6641   l_task_in_rec.nl_tp_schedule_id  :=  l_nl_tp_schedule_id;
6642   l_task_in_rec.nl_tp_fixed_date  :=  l_nl_tp_fixed_date;
6643   l_task_in_rec.receive_project_invoice_flag  :=  p_receive_project_invoice_flag;
6644   l_task_in_rec.work_type_id  :=  p_work_type_id;
6645   l_task_in_rec.emp_bill_rate_schedule_id  :=  p_emp_bill_rate_schedule_id;
6646   l_task_in_rec.job_bill_rate_schedule_id  :=  p_job_bill_rate_schedule_id;
6647 
6648 -- IC AND  Multi National Currency Changes Ends Here ...
6649 
6650 --Sakthi MCB
6651 
6652   l_task_in_rec.non_lab_std_bill_rt_sch_id  :=  p_non_lab_std_bill_rt_sch_id;
6653   l_task_in_rec.taskfunc_cost_rate_type     :=  p_taskfunc_cost_rate_type;
6654   l_task_in_rec.taskfunc_cost_rate_date     :=  p_taskfunc_cost_rate_date;
6655 
6656 --Sakthi MCB
6657 
6658   l_task_in_rec.labor_disc_reason_code  :=  p_labor_disc_reason_code;
6659   l_task_in_rec.non_labor_disc_reason_code     :=  p_non_labor_disc_reason_code;
6660 
6661 -- (begin venkat) new params for bug #3450684 ------------------------
6662   l_task_in_rec.ext_act_duration    := p_ext_act_duration;
6663   l_task_in_rec.ext_remain_duration := p_ext_remain_duration;
6664   l_task_in_rec.ext_sch_duration    := p_ext_sch_duration;
6665 -- (end venkat) new params for bug #3450684 ---------------------------
6666 
6667 -- set the new params - bug #3654243 ----------------------------------------------
6668       G_tasks_in_tbl(G_tasks_tbl_count).base_percent_comp_deriv_code := p_base_percent_comp_deriv_code;
6669       G_tasks_in_tbl(G_tasks_tbl_count).sch_tool_tsk_type_code       := p_sch_tool_tsk_type_code;
6670       G_tasks_in_tbl(G_tasks_tbl_count).constraint_type_code         := p_constraint_type_code;
6671       G_tasks_in_tbl(G_tasks_tbl_count).constraint_date              := p_constraint_date;
6672       G_tasks_in_tbl(G_tasks_tbl_count).free_slack                   := p_free_slack;
6673       G_tasks_in_tbl(G_tasks_tbl_count).total_slack                  := p_total_slack;
6674       G_tasks_in_tbl(G_tasks_tbl_count).effort_driven_flag           := p_effort_driven_flag;
6675       G_tasks_in_tbl(G_tasks_tbl_count).level_assignments_flag       := p_level_assignments_flag;
6676       G_tasks_in_tbl(G_tasks_tbl_count).invoice_method               := p_invoice_method;
6677       G_tasks_in_tbl(G_tasks_tbl_count).customer_id                  := p_customer_id;
6678       G_tasks_in_tbl(G_tasks_tbl_count).gen_etc_source_code          := p_gen_etc_source_code;
6679 -- set the new params - bug #3654243 -------------------------------------------------
6680 
6681 --Bug 6410745 Changes done to set default value for financial task flag.
6682     l_shared      := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(l_project_id);
6683     l_Share_Code  := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id);
6684 
6685     IF l_shared = 'Y'
6686     THEN
6687         If l_Share_Code = 'SHARE_PARTIAL' then
6688            l_financial_task_flag  := NVL(p_financial_task_flag,'N');
6689         Else
6690            l_financial_task_flag  := 'Y';
6691         End If;
6692     ELSE
6693         If l_structure_type = 'WORKPLAN' THEN
6694            l_financial_task_flag := 'N';
6695         Else
6696            l_financial_task_flag := 'Y';
6697         End If;
6698     End IF;
6699 
6700     IF  l_financial_task_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR   THEN
6701         PA_UTILS.ADD_MESSAGE('PA', 'PA_AMG_RES_INV_PARAMS',
6702                               'INVALID_PARAMS', 'FINANCIAL_TASK_FLAG');
6703         RAISE FND_API.G_EXC_ERROR;
6704     End If;
6705 --Bug 6410745 End Changes
6706 
6707 --Begin Add by rtarway for FP.M Set Financial Task and Mapping
6708    l_task_in_rec.financial_task_flag := l_financial_task_flag; --Bug 6410745
6709    l_task_in_rec.mapped_task_id      := p_mapped_task_id;
6710    l_task_in_rec.mapped_task_reference := p_mapped_task_reference;
6711 --End Add by rtarway For FP.M set financial task and Mapping
6712 --project structure
6713 --FINANCIAL structrues
6714 
6715 IF l_structure_type = 'FINANCIAL'    --bug 2738747
6716 THEN
6717 --project structure
6718 
6719 
6720    --Inserting a task will be done in 2 steps
6721    --1> an INSERT step to get a task_id linked to task_reference
6722    --2> and then an UPDATE step to get the appropriate parent id and toptask id.
6723    --This second step will also be used to default data from parents to children.
6724 
6725     --get the values associated to the project
6726     OPEN l_project_csr(l_project_id);
6727     FETCH l_project_csr INTO l_project_rec;
6728     CLOSE l_project_csr;
6729 
6730    --get the project_type_class_code and service_code associated to the project_type
6731 
6732    OPEN l_project_type_csr(l_project_rec.project_type);
6733    FETCH l_project_type_csr INTO l_project_type_rec;
6734    CLOSE l_project_type_csr;
6735 
6736 
6737    --ROUND TRIP 1
6738 
6739 
6740   pa_project_pvt.add_task_round_one(p_return_status    => l_return_status
6741               ,p_project_rec      => l_project_rec
6742               ,p_task_rec      => l_task_in_rec
6743               ,p_project_type_class_code  => l_project_type_rec.project_type_class_code
6744               ,p_service_type_code    => l_project_type_rec.service_type_code
6745               ,p_task_id      => l_task_id);
6746 
6747   -- assign the return_status to the out parameter
6748   p_return_status := l_return_status;
6749 
6750 --ISSUE
6751 --return the related task Reference as well?
6752 
6753 
6754      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6755       THEN
6756       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6757 
6758       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6759       THEN
6760       RAISE FND_API.G_EXC_ERROR;
6761       END IF;
6762 
6763   --we need to update to pm_product_code because it will be inherited
6764   --from the project in add_task_round_one
6765 
6766   UPDATE pa_tasks
6767   SET    pm_product_code   = p_pm_product_code
6768   WHERE  task_id     = l_task_id;
6769 
6770 
6771      --ROUND TRIP 2
6772 
6773   pa_project_pvt.add_task_round_two(p_return_status    => l_return_status
6774               ,p_project_rec      => l_project_rec
6775               ,p_task_id      => l_task_id
6776               ,p_task_rec      => l_task_in_rec
6777                                          --Project structures
6778                                          ,p_ref_task_id                 => l_ref_task_id
6779                                          ,p_tasks_in                    => l_tasks_in
6780                                          ,p_tasks_out                   => l_tasks_out
6781                                          ,p_task_version_id             => l_task_version_id
6782                                          --Project structures
6783                                          );
6784 
6785   -- assign the return_status to the out parameter
6786   p_return_status := l_return_status;
6787 
6788      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6789       THEN
6790       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6791 
6792       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6793       THEN
6794       RAISE FND_API.G_EXC_ERROR;
6795       END IF;
6796 --ELSIF p_structure_type = 'WORKPLAN'
6797 ELSIF l_structure_type = 'WORKPLAN'    --bug 2738747
6798 THEN
6799 
6800     IF G_WP_STR_EXISTS = 'N'
6801     THEN
6802         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6803         THEN
6804             pa_interface_utils_pub.map_new_amg_msg
6805               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
6806                   ,p_msg_attribute    => 'CHANGE'
6807                   ,p_resize_flag      => 'N'
6808                   ,p_msg_context      => 'GENERAL'
6809                   ,p_attribute1       => ''
6810                   ,p_attribute2       => ''
6811                   ,p_attribute3       => ''
6812                   ,p_attribute4       => ''
6813                   ,p_attribute5       => '');
6814         END IF;
6815         RAISE FND_API.G_EXC_ERROR;
6816     END IF;
6817 
6818        IF ( p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
6819             p_structure_version_id IS NULL  )
6820        THEN
6821             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6822             THEN
6823                pa_interface_utils_pub.map_new_amg_msg
6824                     ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
6825                      ,p_msg_attribute    => 'CHANGE'
6826                      ,p_resize_flag      => 'N'
6827                      ,p_msg_context      => 'GENERAL'
6828                      ,p_attribute1       => ''
6829                      ,p_attribute2       => ''
6830                      ,p_attribute3       => ''
6831                      ,p_attribute4       => ''
6832                      ,p_attribute5       => '');
6833             END IF;
6834             RAISE FND_API.G_EXC_ERROR;
6835         --bug 3098668
6836         ELSE
6837             l_str_ver_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id,l_structure_type);
6838             struct_ver_updatable := PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable(p_structure_version_id);
6839             IF (struct_ver_updatable IS NULL OR
6840                 struct_ver_updatable = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6841                 struct_ver_updatable = 'N' OR
6842                 NVL( l_str_ver_type, 'N' ) = 'N' )
6843             THEN
6844                 -- add error message to stack and throw exception
6845                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6846                 THEN
6847                     pa_interface_utils_pub.map_new_amg_msg
6848                      ( p_old_message_code => 'PA_STRUCT_VER_NO_UPDATE'
6849                       ,p_msg_attribute    => 'CHANGE'
6850                       ,p_resize_flag      => 'N'
6851                       ,p_msg_context      => 'GENERAL'
6852                       ,p_attribute1       => ''
6853                       ,p_attribute2       => ''
6854                       ,p_attribute3       => ''
6855                       ,p_attribute4       => ''
6856                       ,p_attribute5       => '');
6857                 END IF;
6858                 RAISE FND_API.G_EXC_ERROR;
6859             END IF;
6860             --bug 3098668
6861         END IF;
6862 
6863 -- FP-M Bug # 3301192  --add_task
6864 /*
6865       PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_pa_project_id
6866                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
6867                                               ,p_out_task_id => l_d_task_id
6868                                               ,p_return_status => l_return_status);
6869 */
6870 
6871       IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(p_pa_project_id) = 'Y') THEN
6872 
6873         IF l_d_task_id IS NULL AND l_task_in_rec.pm_task_reference IS NOT NULL AND
6874            l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6875         THEN
6876 
6877       /* Start commenting out the following code for issue in bug # 3663166.
6878 
6879           PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => p_pa_project_id
6880                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
6881                                               ,p_out_task_id => l_d_task_id
6882                                               ,p_return_status => l_return_status);
6883 
6884          End commenting out the following code for issue in bug # 3663166.*/
6885 
6886 
6887       /* Start adding code for issue in bug # 3663166. */
6888 
6889         l_d_task_id := l_task_id;
6890 
6891       /* End adding code for issue in bug # 3663166.  */
6892 
6893             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6894             THEN
6895                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6896 
6897             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6898             THEN
6899                         RAISE FND_API.G_EXC_ERROR;
6900             END IF;
6901 
6902         END IF;
6903 
6904         IF p_structure_version_id IS NULL OR p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6905         THEN
6906           IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id) = 'Y') THEN
6907                 l_d_struct_ver_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(p_pa_project_id);
6908           ELSE
6909              l_d_struct_ver_id :=  PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(p_pa_project_id, 'WORKPLAN');
6910           END IF;
6911         ELSE
6912           l_d_struct_ver_id := p_structure_version_id;
6913         END IF;
6914 
6915       l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_d_struct_ver_id
6916                                           ,p_task_id => l_d_task_id);
6917 
6918       pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
6919                                                      ,p_delimeter => l_task_in_rec.pred_delimiter
6920                                                      ,p_task_version_Id => l_d_task_ver_id
6921                                                      ,x_return_status => l_return_status
6922                                                      ,x_msg_count => l_msg_count
6923                                                      ,x_msg_data  => l_msg_data);
6924 
6925            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6926             THEN
6927                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6928 
6929             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6930             THEN
6931                         RAISE FND_API.G_EXC_ERROR;
6932             END IF;
6933             l_d_task_id := null;
6934 
6935      END IF;
6936 
6937              l_task_in_rec.OBLIGATION_START_DATE      := p_OBLIGATION_START_DATE;
6938              l_task_in_rec.OBLIGATION_FINISH_DATE     := p_OBLIGATION_FINISH_DATE;
6939              l_task_in_rec.ESTIMATED_START_DATE       := p_ESTIMATED_START_DATE;
6940              l_task_in_rec.ESTIMATED_FINISH_DATE      := p_ESTIMATED_FINISH_DATE;
6941              l_task_in_rec.BASELINE_START_DATE        := p_BASELINE_START_DATE;
6942              l_task_in_rec.BASELINE_FINISH_DATE       := p_BASELINE_FINISH_DATE;
6943              l_task_in_rec.CLOSED_DATE                := p_CLOSED_DATE;
6944              l_task_in_rec.WQ_UOM_CODE                := p_WQ_UOM_CODE;
6945              l_task_in_rec.WQ_ITEM_CODE               := p_WQ_ITEM_CODE;
6946              l_task_in_rec.STATUS_CODE                := p_STATUS_CODE;
6947              l_task_in_rec.WF_STATUS_CODE             := p_WF_STATUS_CODE;
6948              l_task_in_rec.PM_SOURCE_CODE             := p_pm_product_code;
6949              l_task_in_rec.PRIORITY_CODE              := p_PRIORITY_CODE;
6950              l_task_in_rec.MILESTONE_FLAG             := p_MILESTONE_FLAG;
6951              l_task_in_rec.CRITICAL_FLAG              := p_CRITICAL_FLAG;
6952              l_task_in_rec.INC_PROJ_PROGRESS_FLAG     := p_INC_PROJ_PROGRESS_FLAG;
6953              l_task_in_rec.LINK_TASK_FLAG             := p_LINK_TASK_FLAG;
6954              l_task_in_rec.CALENDAR_ID                := p_CALENDAR_ID;
6955          --Bug No 3802240
6956              IF ( p_PLANNED_EFFORT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_PLANNED_EFFORT IS NOT NULL )
6957              THEN
6958                 l_task_in_rec.PLANNED_EFFORT := null;
6959              ELSE
6960                 l_task_in_rec.PLANNED_EFFORT := p_PLANNED_EFFORT;
6961              END IF;
6962        --      l_task_in_rec.PLANNED_EFFORT             := p_PLANNED_EFFORT;    --Bug No 3802240
6963              l_task_in_rec.DURATION                   := p_DURATION;
6964              l_task_in_rec.PLANNED_WORK_QUANTITY      := p_PLANNED_WORK_QUANTITY;
6965              l_task_in_rec.TASK_TYPE                  := p_TASK_TYPE;
6966              l_task_in_rec.actual_start_date          := p_actual_start_date;
6967              l_task_in_rec.actual_finish_date         := p_actual_finish_date;
6968              l_task_in_rec.early_start_date           := p_early_start_date;
6969              l_task_in_rec.early_finish_date          := p_early_finish_date;
6970              l_task_in_rec.late_start_date            := p_late_start_date;
6971              l_task_in_rec.late_finish_date           := p_late_finish_date;
6972              l_task_in_rec.scheduled_start_date       := p_scheduled_start_date;
6973              l_task_in_rec.scheduled_finish_date      := p_scheduled_finish_date;
6974              l_task_in_rec.PM_task_reference        := p_pm_task_reference;
6975 
6976      PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
6977               p_project_id                   => l_project_id
6978              ,p_task_id                      => l_task_in_rec.pa_task_id
6979              ,p_parent_task_id               => l_task_in_rec.pa_parent_task_id
6980              ,p_ref_task_id                  => l_ref_task_id    --proj conn
6981              ,p_task_number                  => l_task_in_rec.pa_task_number
6982              ,p_task_name                    => l_task_in_rec.long_task_name     --bug 2833194
6983              ,p_task_description             => l_task_in_rec.task_description
6984              ,p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id
6985              ,p_calling_module               => 'AMG'
6986              ,p_structure_type               => l_structure_type             --bug 2738747
6987              ,p_OBLIGATION_START_DATE        => l_task_in_rec.OBLIGATION_START_DATE
6988              ,p_OBLIGATION_FINISH_DATE       => l_task_in_rec.OBLIGATION_FINISH_DATE
6989              ,p_ESTIMATED_START_DATE         => l_task_in_rec.ESTIMATED_START_DATE
6990              ,p_ESTIMATED_FINISH_DATE        => l_task_in_rec.ESTIMATED_FINISH_DATE
6991              ,p_BASELINE_START_DATE          => l_task_in_rec.BASELINE_START_DATE
6992              ,p_BASELINE_FINISH_DATE         => l_task_in_rec.BASELINE_FINISH_DATE
6993              ,p_CLOSED_DATE                  => l_task_in_rec.CLOSED_DATE
6994              ,p_WQ_UOM_CODE                  => l_task_in_rec.WQ_UOM_CODE
6995              ,p_WQ_ITEM_CODE                 => l_task_in_rec.WQ_ITEM_CODE
6996              ,p_STATUS_CODE                  => l_task_in_rec.STATUS_CODE
6997              ,p_WF_STATUS_CODE               => l_task_in_rec.WF_STATUS_CODE
6998              ,p_PM_SOURCE_CODE               => l_task_in_rec.PM_source_CODE
6999              ,p_PRIORITY_CODE                => l_task_in_rec.PRIORITY_CODE
7000              ,p_MILESTONE_FLAG               => l_task_in_rec.MILESTONE_FLAG
7001              ,p_CRITICAL_FLAG                => l_task_in_rec.CRITICAL_FLAG
7002              ,p_INC_PROJ_PROGRESS_FLAG       => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
7003              ,p_LINK_TASK_FLAG               => l_task_in_rec.LINK_TASK_FLAG
7004              ,p_CALENDAR_ID                  => l_task_in_rec.CALENDAR_ID
7005              ,p_PLANNED_EFFORT               => l_task_in_rec.PLANNED_EFFORT
7006              ,p_DURATION                     => l_task_in_rec.DURATION
7007              ,p_PLANNED_WORK_QUANTITY        => l_task_in_rec.PLANNED_WORK_QUANTITY
7008              ,p_TASK_TYPE                    => l_task_in_rec.TASK_TYPE
7009              ,p_actual_start_date                  => l_task_in_rec.actual_start_date
7010              ,p_actual_finish_date                 => l_task_in_rec.actual_finish_date
7011              ,p_early_start_date                   => l_task_in_rec.early_start_date
7012              ,p_early_finish_date                  => l_task_in_rec.early_finish_date
7013              ,p_late_start_date                    => l_task_in_rec.late_start_date
7014              ,p_late_finish_date                   => l_task_in_rec.late_finish_date
7015              ,p_scheduled_start_date               => l_task_in_rec.scheduled_start_date
7016              ,p_scheduled_finish_date              => l_task_in_rec.scheduled_finish_date
7017              ,P_PM_SOURCE_reference                => l_task_in_rec.pm_task_reference
7018              ,p_location_id                        => l_task_in_rec.address_id
7019              ,p_manager_person_id                  => l_task_in_rec.task_manager_person_id
7020              , p_structure_version_id              => p_structure_version_id  --Bug 3098668
7021 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
7022              ,p_ext_act_duration                   => l_task_in_rec.ext_act_duration
7023              ,p_ext_remain_duration                => l_task_in_rec.ext_remain_duration
7024              ,p_ext_sch_duration                   => l_task_in_rec.ext_sch_duration
7025 -- (End venkat) new params for bug #3450684 -------------------------------------------------
7026              ,p_financial_task_flag                => l_task_in_rec.financial_task_flag --Bug 4482903
7027              --bug 6153503
7028              ,p_validate_dff                       => l_validate_dff
7029              ,p_attribute_category                 => l_attribute_category
7030              ,p_attribute1                         => l_attribute1
7031              ,p_attribute2                         => l_attribute2
7032              ,p_attribute3                         => l_attribute3
7033              ,p_attribute4                         => l_attribute4
7034              ,p_attribute5                         => l_attribute5
7035              ,p_attribute6                         => l_attribute6
7036              ,p_attribute7                         => l_attribute7
7037              ,p_attribute8                         => l_attribute8
7038              ,p_attribute9                         => l_attribute9
7039              ,p_attribute10                        => l_attribute10
7040              ,p_attribute11                        => l_attribute11
7041              ,p_attribute12                        => l_attribute12
7042              ,p_attribute13                        => l_attribute13
7043              ,p_attribute14                        => l_attribute14
7044              ,p_attribute15                        => l_attribute15
7045              --end bug 6153503
7046              ,x_task_version_id                    => l_task_version_id
7047              ,x_task_id                            => l_task_id
7048              ,x_msg_count                    => l_msg_count
7049              ,x_msg_data                     => l_msg_data
7050              ,x_return_status                => l_return_status
7051                      );
7052 
7053         p_return_status := l_return_status;
7054 
7055         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7056         THEN
7057                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7058 
7059         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7060         THEN
7061                         RAISE FND_API.G_EXC_ERROR;
7062         END IF;
7063 
7064 END IF; --<< n_structure_type >>
7065 
7066 p_task_id      := l_task_id;
7067 p_pa_project_id_out    := l_project_rec.project_id;
7068 p_pa_project_number_out    := l_project_rec.segment1;   --this is the project_number field in PA_PROJECTS
7069 
7070 --Begin Add by rtarway FP.M Development
7071 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
7072 IF (G_PROJECT_SHARING_TYPE='SPLIT_MAPPING' AND l_structure_type = 'WORKPLAN' ) THEN
7073      IF (
7074          ( l_task_in_rec.mapped_task_id IS NOT NULL AND l_task_in_rec.mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
7075          OR
7076          ( l_task_in_rec.mapped_task_reference IS NOT NULL AND l_task_in_rec.mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7077         )
7078      THEN
7079 
7080           pa_project_pub.create_mapping
7081           (
7082               p_api_version             => p_api_version_number
7083             , p_init_msg_list           => FND_API.G_FALSE
7084             , p_commit                  => FND_API.G_FALSE--bug 3766967
7085             , p_debug_mode              => FND_API.G_TRUE
7086             , p_project_id              => l_project_id
7087             , p_proj_source_reference   => null
7088             , p_wkp_structure_version_id   => p_structure_version_id
7089             , p_wkp_task_id            => l_task_id--Since the tasks are already created , this will have task Ids
7090             , px_mapped_task_id        => l_task_in_rec.mapped_task_id
7091             , p_mapped_task_reference  => l_task_in_rec.mapped_task_reference
7092             , x_return_status          => l_return_status
7093             , x_msg_count              => l_msg_count
7094             , x_msg_data               => l_msg_data
7095 
7096           );
7097            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7098            THEN
7099                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7100 
7101            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7102            THEN
7103                RAISE FND_API.G_EXC_ERROR;
7104            END IF;
7105      END IF;
7106 END IF;
7107 IF (G_PROJECT_SHARING_TYPE = 'SHARE_PARTIAL' and l_structure_type /*p_structure_type 3746912*/= 'FINANCIAL') THEN
7108     --Get the task Version Id
7109     --l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id, l_task_id);
7110     OPEN  c_get_pa_record_version_number ( l_task_version_id  , l_project_id);
7111     FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
7112     CLOSE c_get_pa_record_version_number;
7113    IF
7114    (p_financial_task_flag IS NOT NULL AND p_financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7115    THEN
7116         PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
7117          (
7118             p_api_version               => p_api_version_number
7119           , p_init_msg_list             => FND_API.G_FALSE
7120           , p_commit                    => FND_API.G_FALSE--bug 3766967
7121           , p_calling_module            => 'AMG'
7122           , p_debug_mode                => FND_API.G_TRUE
7123           , p_task_version_id           => l_task_version_id
7124           , p_checked_flag              => p_financial_task_flag
7125           , p_record_version_number     => l_patask_record_version_number
7126           , p_project_id                => l_project_id
7127           , p_published_version_exists  => G_Published_version_exists
7128           , x_return_status             => l_return_status
7129           , x_msg_count                 => l_msg_count
7130           , x_msg_data                  => l_msg_data
7131         );
7132            -- Added for 4537865 : Check for Return Status after API call
7133            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7134            THEN
7135                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7136 
7137            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7138            THEN
7139                RAISE FND_API.G_EXC_ERROR;
7140            END IF;
7141    END IF;
7142 END IF;
7143 --End Add by rtarway FP.M Development
7144 
7145 --bug 2732895   --Add_Task
7146 
7147 IF ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
7148    ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y'
7149      AND  l_structure_type /*p_structure_type 3746912*/ = 'WORKPLAN' )  --should not call if new task is added to FINANCIAL structure version
7150 THEN
7151 
7152  --bug 2856033
7153 
7154  -- The rollup of dates must be completed before we do
7155  -- the task weightage calculation.
7156 
7157   PA_PROJ_TASK_STRUC_PUB.rollup_dates(
7158              p_tasks_in             => l_tasks_out           --null if called for one task
7159             ,p_task_version_id      => l_task_version_id
7160             ,p_project_id           => l_project_id
7161             ,P_structure_version_id => null
7162             ,x_msg_count            => l_msg_count
7163             ,x_msg_data             => l_msg_data
7164             ,x_return_status        => l_return_status
7165        );
7166 
7167         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7168         THEN
7169            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7170 
7171         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7172         THEN
7173           RAISE FND_API.G_EXC_ERROR;
7174         END IF;
7175    --bug 2856033
7176 
7177   l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_pa_project_id) ;
7178 
7179   -- PA L Changes 3010538
7180   -- In new model PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings
7181   -- needs to be called only when task weight basis code is
7182   -- MANUAL.
7183   IF nvl(l_task_weight_basis_code,'-1') = 'MANUAL' THEN
7184 
7185        PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
7186                   p_tasks_in             => l_tasks_out            --null if called for one task
7187                  ,p_task_version_id      => l_task_version_id
7188                  ,x_msg_count            => l_msg_count
7189                  ,x_msg_data             => l_msg_data
7190                  ,x_return_status        => l_return_status
7191             );
7192 
7193              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7194              THEN
7195                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7196 
7197              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7198              THEN
7199                RAISE FND_API.G_EXC_ERROR;
7200              END IF;
7201   END IF ;
7202   -- PA L Changes 3010538
7203 END IF;
7204 --bug 2732895
7205 
7206 -- This block has been added for the bug 3106457 to derive the structure version id.
7207 declare
7208 cursor cur_str_ver(c_task_version_id pa_proj_element_versions.element_version_id%TYPE)
7209 is
7210 select parent_structure_version_id
7211   from pa_proj_element_versions
7212  where element_version_id = c_task_version_id;
7213 begin
7214      open cur_str_ver(l_task_version_id);
7215      fetch cur_str_ver into l_structure_version_id;
7216      close cur_str_ver;
7217 end;
7218 
7219 -- PA L Changes 3010538
7220 
7221    IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
7222        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
7223          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
7224          PA_PROJECT_PUB.G_Published_version_exists = 'N')
7225    THEN
7226 
7227    /* Starts added for Bug# 7264422 */
7228    IF (nvl(p_structure_updates_flag, 'Y') = 'N') THEN
7229       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
7230                       (  p_calling_context       => 'AMG'
7231                         ,p_project_id            => l_project_id
7232                         ,p_structure_version_id  => l_structure_version_id
7233                         ,p_update_wbs_flag       => 'Y'
7234                         ,x_return_status         => l_return_status
7235                         ,x_msg_count             => l_msg_count
7236                         ,x_msg_data              => l_msg_data);
7237 
7238        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7239            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7240        end if;
7241 
7242    ELSE
7243    /* Ends added for Bug# 7264422 */
7244 
7245    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id -- bug 3106457 p_pa_project_id
7246                                                                        ,p_structure_version_id => l_structure_version_id); -- bug 3106457 p_structure_version_id ) ;
7247 
7248    IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
7249         IF p_process_mode = 'ONLINE' THEN
7250 
7251         PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
7252                                                   ,p_project_id           => l_project_id -- bug 3106457 p_pa_project_id
7253                                                   ,p_structure_version_id => l_structure_version_id -- bug 3106457 p_structure_version_id
7254                                                   ,x_return_status        => l_return_status
7255                                                   ,x_msg_count            => l_msg_count
7256                                                   ,x_msg_data             => l_msg_data ) ;
7257 
7258         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7259              THEN
7260                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7261         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7262              THEN
7263                RAISE FND_API.G_EXC_ERROR;
7264         END IF;
7265         ELSIF p_process_mode = 'CONCURRENT' THEN
7266 
7267         PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_UPDATE' -- Bug 6842218 'CON_UPDATE'
7268                                                             ,p_project_id            => l_project_id -- bug 3106457 p_pa_project_id
7269                                                             ,p_structure_version_id  => l_structure_version_id -- bug 3106457 p_structure_version_id
7270                                                             ,x_return_status         => l_return_status
7271                                                             ,x_msg_count             => l_msg_count
7272                                                             ,x_msg_data              => l_msg_data ) ;
7273 
7274         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7275              THEN
7276                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7277         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7278              THEN
7279                RAISE FND_API.G_EXC_ERROR;
7280         END IF;
7281 
7282 
7283         END IF ;
7284      END IF ;
7285     END IF; /* Added for Bug# 7264422 */
7286    END IF ;
7287 
7288 -- PA L Changes 3010538
7289   --  Commented by rtarway, for BUG 3661788 and 3665745, Changed If Condition
7290   --  IF (p_deliverable IS NOT NULL OR p_Deliverable <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7291 
7292       -- 3661788 If deliverable id or deliverable reference is passed , validate it and convert deliverable reference
7293       -- to deliverable id, if required
7294 
7295       IF ( ( p_deliverable_id IS NOT NULL AND p_deliverable_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
7296            ( p_deliverable IS NOT NULL AND p_deliverable <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) )  THEN
7297 
7298           Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
7299             ( p_deliverable_reference => p_deliverable
7300             , p_deliverable_id        => p_deliverable_id
7301             , p_project_id            => l_project_id
7302             , p_out_deliverable_id    => l_deliverable_id
7303             , p_return_status         => l_return_status
7304           );
7305 
7306           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR    THEN
7307              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7308           ELSIF l_return_status = FND_API.G_RET_STS_ERROR       THEN
7309              RAISE FND_API.G_EXC_ERROR;
7310           END IF;
7311 
7312           -- 3661788 pass validated deliverable id to association api
7313 
7314           pa_project_pub.ASSOCIATE_DLV_TO_TASK (
7315             p_api_version            => p_api_version_number
7316           , p_init_msg_list          => p_init_msg_list
7317           -- 3735792, passing p_commit as false to next level api calls
7318           , p_commit                 => FND_API.G_FALSE
7319           , p_debug_mode             => 'Y'
7320           , p_pm_source_code         => p_pm_product_code
7321           , p_project_id             => l_project_id
7322           , p_task_id                => l_task_id
7323           , p_deliverable_id         => l_deliverable_id -- 3661788 changed from p_deliverable to l_deliverable_id
7324           , x_return_status          => l_return_status
7325           , x_msg_count              => l_msg_count
7326           , x_msg_data               => l_msg_data
7327           );
7328 
7329           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR             THEN
7330                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7331           ELSIF l_return_status = FND_API.G_RET_STS_ERROR             THEN
7332                  RAISE FND_API.G_EXC_ERROR;
7333           END IF;
7334       END IF;
7335 
7336 IF FND_API.to_boolean( p_commit )
7337 THEN
7338   COMMIT;
7339 END IF;
7340 --Unset this gloabl variable upon sucessfull completion
7341 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7342 
7343 EXCEPTION
7344 
7345   WHEN FND_API.G_EXC_ERROR
7346   THEN
7347   ROLLBACK TO add_task_pub;
7348   G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7349   p_return_status := FND_API.G_RET_STS_ERROR;
7350 
7351   -- Added for 4537865
7352   p_pa_project_id_out := NULL ;
7353   p_pa_project_number_out := NULL ;
7354   p_task_id := NULL ;
7355  -- End : 4537865
7356 
7357   FND_MSG_PUB.Count_And_Get
7358       (   p_count    =>  p_msg_count  ,
7359           p_data    =>  p_msg_data  );
7360 
7361   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7362   THEN
7363   ROLLBACK TO add_task_pub;
7364   G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7365   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7366 
7367   -- Added for 4537865
7368   p_pa_project_id_out := NULL ;
7369   p_pa_project_number_out := NULL ;
7370   p_task_id := NULL ;
7371  -- End : 4537865
7372 
7373   FND_MSG_PUB.Count_And_Get
7374       (   p_count    =>  p_msg_count  ,
7375           p_data    =>  p_msg_data  );
7376 
7377   WHEN OTHERS THEN
7378   ROLLBACK TO add_task_pub;
7379   G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7380   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7381 
7382   -- Added for 4537865
7383   p_pa_project_id_out := NULL ;
7384   p_pa_project_number_out := NULL ;
7385   p_task_id := NULL ;
7386  -- End : 4537865
7387 
7388   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7389   THEN
7390     FND_MSG_PUB.add_exc_msg
7391         ( p_pkg_name    => G_PKG_NAME
7392         , p_procedure_name  => l_api_name  );
7393 
7394   END IF;
7395 
7396   FND_MSG_PUB.Count_And_Get
7397       (   p_count    =>  p_msg_count  ,
7398           p_data    =>  p_msg_data  );
7399 
7400 END add_task;
7401 
7402 
7403 -----------------------------------------------------------------------------------------
7404 --Name:               delete_task
7405 --Type:               Procedure
7406 --Description:        This procedure delete a task from a project when this is allowed.
7407 --          It either deletes only this task, and moves the children up, OR
7408 --          it deletes this tasks and all his children, depending on
7409 --          the cascaded_delete_flag.
7410 --
7411 --
7412 --Called subprograms: check_delete_task_ok
7413 --
7414 --
7415 --
7416 --History:
7417 --    21-AUG-1996        L. de Werker    Created
7418 --    06-DEC-1996   L. de Werker   Added locking mechanism.
7419 --
7420 --
7421 PROCEDURE delete_task ( p_api_version_number    IN  NUMBER     := 1.0  -- for bug# 3802319
7422                        ,p_commit                IN  VARCHAR2   := FND_API.G_FALSE
7423                        ,p_init_msg_list         IN   VARCHAR2  := FND_API.G_FALSE
7424                        ,p_msg_count             OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7425                        ,p_msg_data              OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
7426                        ,p_return_status         OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
7427                        ,p_pm_product_code       IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7428                        ,p_pm_project_reference  IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7429                        ,p_pa_project_id         IN   NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7430                        ,p_pm_task_reference     IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7431                        ,p_pa_task_id            IN   NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7432                        ,p_cascaded_delete_flag  IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7433                        ,p_project_id            OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7434                        ,p_task_id               OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7435                        ,p_task_version_id       IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7436                        ,p_structure_type        IN   VARCHAR2   := 'FINANCIAL'
7437                        ,p_process_mode          IN   VARCHAR2   := 'ONLINE'
7438 		       ,p_structure_updates_flag IN  VARCHAR2   := 'Y'
7439  )
7440 IS
7441 
7442 l_return_status                        VARCHAR2(1); --bug 2471668
7443 l_project_id                           NUMBER;      --bug 2471668
7444 l_structure_type    VARCHAR2(25) := p_structure_type; -- <Bug#2886014/>
7445 l_update_wbs_flag   VARCHAR2(1) ;
7446 l_structure_version_id NUMBER ;
7447 
7448 -- Bug 3010538
7449 l_process_code      pa_lookups.lookup_code%TYPE;
7450 
7451 l_request_id        pa_proj_elem_ver_structure.conc_request_id%TYPE;
7452 
7453 -- Bug 3106457. Obtain the structure version id give the task version id.
7454 cursor cur_str_ver(c_task_version_id pa_proj_element_versions.element_version_id%TYPE)
7455 is
7456 select parent_structure_version_id
7457   from pa_proj_element_versions
7458  where element_version_id = c_task_version_id;
7459 
7460 -- Begin fix for Bug # 4373055.
7461 
7462 l_str_ver_id            NUMBER:= null;
7463 l_conc_request_id       NUMBER := null;
7464 l_message_name  VARCHAR2(30) := null;
7465 l_message_type  VARCHAR2(30) := null;
7466 
7467 -- End fix for Bug # 4373055.
7468 
7469 BEGIN
7470 
7471           p_return_status := FND_API.G_RET_STS_SUCCESS ; -- 4537865 (Initialize p_return_status to Success)
7472         --bug 2471668.
7473         --We need to call this API here toget the corrct project id. This is also
7474         --called from the private API. But I discussed with Sakthi and he is ok to ca ll this
7475         --twice once here and second time in private API. The idea is to make the adv anced security changes
7476         --only in public APIs.
7477 
7478       PA_PROJECT_PVT.Convert_pm_projref_to_id
7479         (        p_pm_project_reference =>      p_pm_project_reference
7480                  ,  p_pa_project_id     =>      p_pa_project_id
7481                  ,  p_out_project_id    =>      l_project_id
7482                  ,  p_return_status     =>      l_return_status
7483         );
7484 
7485 
7486       IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7487 
7488               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
7489       ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
7490               RAISE  FND_API.G_EXC_ERROR;
7491       END IF;
7492 
7493      PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;  --bug 2471668 ( in the project context )
7494      --end of bug 24771668
7495 
7496      IF p_structure_type = 'WORKPLAN'
7497      THEN
7498          IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N'  OR
7499             PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) = 'N'    -- 2876703   --delete_task
7500          THEN
7501             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7502             THEN
7503                 pa_interface_utils_pub.map_new_amg_msg
7504                     ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
7505                   ,p_msg_attribute    => 'CHANGE'
7506                   ,p_resize_flag      => 'N'
7507                   ,p_msg_context      => 'GENERAL'
7508                   ,p_attribute1       => ''
7509                   ,p_attribute2       => ''
7510                   ,p_attribute3       => ''
7511                   ,p_attribute4       => ''
7512                   ,p_attribute5       => '');
7513             END IF;
7514         RAISE FND_API.G_EXC_ERROR;
7515          END IF;
7516 
7517          IF p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7518             OR p_task_version_id IS NULL
7519          THEN
7520             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7521             THEN
7522                 pa_interface_utils_pub.map_new_amg_msg
7523                     ( p_old_message_code => 'PA_PS_TSK_VER_REQ_WP'
7524                   ,p_msg_attribute    => 'CHANGE'
7525                   ,p_resize_flag      => 'N'
7526                   ,p_msg_context      => 'GENERAL'
7527                   ,p_attribute1       => ''
7528                   ,p_attribute2       => ''
7529                   ,p_attribute3       => ''
7530                   ,p_attribute4       => ''
7531                   ,p_attribute5       => '');
7532             END IF;
7533             RAISE FND_API.G_EXC_ERROR;
7534          END IF;
7535 
7536          -- Bug 3106457. Derive the structure version id from the task version id.
7537          open cur_str_ver(p_task_version_id);
7538          fetch cur_str_ver into l_structure_version_id;
7539          close cur_str_ver;
7540 
7541      ELSIF p_structure_type = 'FINANCIAL' THEN -- Obtain the structure version id. Bug 3106457.
7542           IF p_task_version_id IS NULL
7543              OR p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3174639
7544           THEN
7545               l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
7546           ELSE
7547               open cur_str_ver(p_task_version_id);
7548               fetch cur_str_ver into l_structure_version_id;
7549               close cur_str_ver;
7550           END IF;
7551      END IF; --<< p_structure_type >>
7552 
7553    -- <Bug#2886014>
7554    -- If the following criteria is satisfied,
7555    -- switch flow to WORKPLAN
7556    -- i) Workplan is enabled;
7557    -- ii) Structure is SHARED;
7558    -- iii) Published version exists;
7559    G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
7560    G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
7561    G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
7562 
7563    IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
7564       AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
7565       AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
7566       AND p_structure_type = 'FINANCIAL'
7567    THEN
7568        --Change the flow to WORKPLAN
7569        l_structure_type := 'WORKPLAN';
7570    END IF;
7571    -- </Bug#2886014>
7572 
7573 
7574 -- Check for the status of the process before deleting the task.
7575 -- PA L Changes 3010538
7576 
7577 IF p_structure_type is not NULL THEN
7578 
7579 -- Begin fix for Bug # 4373055.
7580 
7581 /*
7582 
7583      l_process_code :=
7584                        PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id  --Bug 3091798.
7585                                                                          ,p_structure_type => p_structure_type );
7586 
7587       IF nvl(l_process_code,'-1') = 'WUP' THEN
7588            l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id  -- Bug 3091798
7589                                                                          ,p_structure_type => p_structure_type );
7590 
7591            PA_UTILS.ADD_MESSAGE
7592                  (p_app_short_name => 'PA',
7593 --                  p_msg_name       => 'PA_PS_VD_UPDWBS_PRC_INPROC');
7594                   p_msg_name       => 'PA_PS_UPDWBS_PRC_INPROC_AMG',  -- Bug 3091798. Message includes the request id.
7595                   p_token1         => 'REQUESTID',
7596                   p_value1         => l_request_id);
7597 
7598            RAISE FND_API.G_EXC_ERROR;
7599 
7600       ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
7601            l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id  --Bug 3091798
7602                                                                          ,p_structure_type => p_structure_type );
7603 
7604            PA_UTILS.ADD_MESSAGE
7605                  (p_app_short_name => 'PA',
7606 --                  p_msg_name       => 'PA_PS_VD_UPD_WBS_PRC_ERR');
7607                   p_msg_name       => 'PA_PS_UPDWBS_PRC_ERR_AMG',  -- Bug 3091798. Message includes the request id.
7608                   p_token1         => 'REQUESTID',
7609                   p_value1         => l_request_id);
7610 
7611           RAISE FND_API.G_EXC_ERROR;
7612 
7613       END IF;
7614 
7615 */
7616 
7617         PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
7618         p_project_id              => l_project_id
7619         , p_structure_type        => p_structure_type
7620         , p_structure_version_id  => null
7621         , p_context               => 'UPDATE_AMG'
7622         , x_message_name          => l_message_name
7623         , x_message_type          => l_message_type
7624         , x_structure_version_id  => l_str_ver_id
7625         , x_conc_request_id       => l_conc_request_id);
7626 
7627 
7628         if l_message_name is not null then
7629 
7630                      PA_UTILS.ADD_MESSAGE(
7631                      p_app_short_name => 'PA'
7632                      , p_msg_name       => l_message_name
7633                      , p_token1         => 'REQUESTID'
7634                      , p_value1         => l_conc_request_id);
7635 
7636                       RAISE FND_API.G_EXC_ERROR;
7637         end if;
7638 
7639 -- End fix for Bug # 4373055.
7640 
7641 
7642 END IF ;
7643 
7644 /* This is buggy.... Bug 3106457
7645 -- Obtain the structure version id before deleting the task.
7646 -- Bug 3010538
7647 BEGIN
7648      SELECT parent_structure_version_id
7649        INTO l_structure_version_id
7650        FROM pa_proj_element_versions
7651       WHERE element_version_id = p_task_version_id ;
7652 EXCEPTION
7653      WHEN NO_DATA_FOUND THEN
7654      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7655 END ;
7656 */
7657 
7658 pa_project_pvt.delete_task1
7659 ( p_api_version_number => p_api_version_number
7660  ,p_commit             => FND_API.G_FALSE--bug 3766967
7661  ,p_init_msg_list      => p_init_msg_list
7662  ,p_msg_count          => p_msg_count
7663  ,p_msg_data           => p_msg_data
7664  ,p_return_status      => p_return_status
7665  ,p_pm_product_code    => p_pm_product_code
7666  ,p_pm_project_reference => p_pm_project_reference
7667  ,p_pa_project_id        => p_pa_project_id
7668  ,p_pm_task_reference    => p_pm_task_reference
7669  ,p_pa_task_id           => p_pa_task_id
7670  ,p_cascaded_delete_flag => p_cascaded_delete_flag
7671  ,p_project_id           => p_project_id
7672  ,p_task_id              => p_task_id
7673  ,p_task_version_id      => p_task_version_id
7674  ,p_structure_type       => l_structure_type     -- </Bug#2886014>
7675 );
7676 
7677 -- PA L Changes 3010538
7678 
7679    IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
7680        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
7681          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
7682          PA_PROJECT_PUB.G_Published_version_exists = 'N')
7683    THEN
7684 
7685    -- Fetch the structure version id for the task version id.
7686 
7687    -- PA L Changes 3010538
7688 
7689       -- Bug 7390781
7690       IF (nvl(p_structure_updates_flag, 'Y') = 'Y') THEN
7691 
7692         l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id --Bug 3106457 p_pa_project_id
7693                                                                      ,p_structure_version_id => l_structure_version_id ) ;
7694 
7695         IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
7696              IF p_process_mode = 'ONLINE' THEN
7697 
7698              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
7699                                                        ,p_project_id           => l_project_id --Bug 3106457 p_pa_project_id
7700                                                        ,p_structure_version_id => l_structure_version_id
7701                                                        ,x_return_status        => p_return_status
7702                                                        ,x_msg_count            => p_msg_count
7703                                                        ,x_msg_data             => p_msg_data ) ;
7704 
7705              IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7706                   THEN
7707                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7708              ELSIF p_return_status = FND_API.G_RET_STS_ERROR
7709                   THEN
7710                     RAISE FND_API.G_EXC_ERROR;
7711              END IF;
7712              ELSIF p_process_mode = 'CONCURRENT' THEN
7713 
7714              PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
7715                                                        ,p_project_id                => l_project_id -- Bug 3106457 p_pa_project_id
7716                                                        ,p_structure_version_id      => l_structure_version_id
7717                                                        ,x_return_status             => p_return_status
7718                                                        ,x_msg_count                 => p_msg_count
7719                                                        ,x_msg_data                  => p_msg_data ) ;
7720 
7721              IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7722                   THEN
7723                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7724              ELSIF p_return_status = FND_API.G_RET_STS_ERROR
7725                   THEN
7726                     RAISE FND_API.G_EXC_ERROR;
7727              END IF;
7728 
7729 
7730              END IF ;
7731         END IF ;
7732       END IF;
7733    END IF ;
7734 
7735 -- PA L Changes 3010538
7736 
7737 EXCEPTION
7738         WHEN FND_API.G_EXC_ERROR
7739         THEN
7740         p_return_status := FND_API.G_RET_STS_ERROR;
7741     p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7742 
7743         p_project_id := NULL ; -- 4537865
7744         p_task_id := NULL; -- 4537865
7745 
7746         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7747         THEN
7748 
7749         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7750     p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7751 
7752         p_project_id := NULL ; -- 4537865
7753         p_task_id := NULL; -- 4537865
7754 
7755         WHEN OTHERS THEN
7756         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7757     p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7758 
7759         p_project_id := NULL ; -- 4537865
7760         p_task_id := NULL; -- 4537865
7761 
7762 END delete_task;
7763 
7764 
7765 --------------------------------------------------------------------------------
7766 --Name:               init_project
7767 --Type:               Procedure
7768 --Description:        This procedure can be used to initialize the global PL/SQL
7769 --          tables that are used by a LOAD/EXECUTE/FETCH cycle.
7770 --
7771 --
7772 --Called subprograms:
7773 --
7774 --
7775 --
7776 --History:
7777 --    16-AUG-1996        L. de Werker    Created
7778 --    30-AUG-1996   L. de Werker   Parameterlist removed.
7779 --    10-JAN-1997   L. de Werker   Changed name from INIT_CREATE_PROJECT to INIT_PROJECT
7780 --
7781 PROCEDURE init_project
7782 
7783 IS
7784 
7785 BEGIN
7786 
7787     FND_MSG_PUB.Initialize;
7788 
7789 --  Initialize global table and record types
7790 
7791     G_project_in_rec       := G_project_in_null_rec;
7792     G_key_members_in_tbl.delete;
7793     G_deliverables_in_tbl.delete;
7794     G_deliverable_actions_in_tbl.delete; --bug 343590
7795     G_class_categories_in_tbl.delete;     --bug 343590
7796     G_tasks_in_tbl.delete;
7797 -- anlee org role changes
7798     G_org_roles_in_tbl.delete;
7799 
7800     G_key_members_tbl_count     := 0;
7801     G_deliverables_in_tbl_count := 0; --bug 343590
7802     G_dlvr_actions_in_tbl_count := 0;  --bug 343590
7803     G_class_categories_tbl_count   := 0;
7804     G_tasks_tbl_count       := 0;
7805 -- anlee org role changes
7806     G_org_roles_tbl_count     := 0;
7807 
7808     G_project_out_rec       := G_project_out_null_rec;
7809     G_tasks_out_tbl.delete;
7810     --Project Connect 4.0
7811     G_struc_out_tbl.delete;
7812     --Project Connect 4.0
7813 
7814 -- <EA Extensible Attributes changes>
7815     G_ext_attr_in_tbl.delete;
7816     G_ext_attr_tbl_count     := 0;
7817 -- </EA Extensible Attributes changes>
7818 --Bug#3646465. Clear the Task assignment tables.
7819    PA_TASK_ASSIGNMENTS_PUB.init_task_assignments;
7820 END init_project;
7821 
7822 
7823 --------------------------------------------------------------------------------
7824 --Name:               load_project
7825 --Type:               Procedure
7826 --Description:        This procedure can be used to move the project related
7827 --          parameters from the client side to a record on the server side
7828 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
7829 --
7830 --Called subprograms:
7831 --
7832 --
7833 --
7834 --History:
7835 --    19-AUG-1996        L. de Werker    Created
7836 
7837 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
7838 --    28-NOV-1996   L. de Werker   Added 11 parameters for descriptive flexfields
7839 --
7840 --
7841 
7842 PROCEDURE load_project
7843 ( p_api_version_number    IN  NUMBER
7844  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
7845  ,p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
7846  ,p_pa_project_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7847  ,p_pa_project_number    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7848  ,p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7849  ,p_project_name    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7850  ,p_long_name      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7851  ,p_created_from_project_id  IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7852  ,p_carrying_out_organization_id IN  NUMBER    :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7853  ,p_public_sector_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7854  ,p_project_status_code    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7855  ,p_description      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7856  ,p_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7857  ,p_completion_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7858  ,p_distribution_rule    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7859  ,p_customer_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7860  ,p_project_relationship_code  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7861  ,p_actual_start_date           IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7862  ,p_actual_finish_date          IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7863  ,p_early_start_date            IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7864  ,p_early_finish_date           IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7865  ,p_late_start_date             IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7866  ,p_late_finish_date            IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7867  ,p_scheduled_start_date        IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7868  ,p_scheduled_finish_date       IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7869  ,p_attribute_category    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7870  ,p_attribute1      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7871  ,p_attribute2      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7872  ,p_attribute3      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7873  ,p_attribute4      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7874  ,p_attribute5      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7875  ,p_attribute6      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7876  ,p_attribute7      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7877  ,p_attribute8      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7878  ,p_attribute9      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7879  ,p_attribute10      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7880  ,p_output_tax_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7881  ,p_retention_tax_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7882  ,p_project_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7883  ,p_allow_cross_charge_flag   IN VARCHAR2 :=
7884 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7885  ,p_project_rate_date  IN  DATE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7886  ,p_project_rate_type   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7887  ,p_cc_process_labor_flag   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7888  ,p_labor_tp_schedule_id    IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7889  ,p_labor_tp_fixed_date     IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7890  ,p_cc_process_nl_flag   IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7891  ,p_nl_tp_schedule_id    IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7892  ,p_nl_tp_fixed_date     IN DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7893  ,p_cc_tax_task_id       IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7894  ,p_role_list_id       IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7895  ,p_work_type_id       IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7896  ,p_calendar_id        IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7897  ,p_location_id        IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7898  ,p_probability_member_id   IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7899  ,p_project_value            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7900  ,p_expected_approval_date       IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7901  ,p_cost_job_group_id  IN NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7902  ,p_bill_job_group_id  IN NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7903  ,p_emp_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7904  ,p_job_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7905 --Sakthi MCB
7906  ,p_invproc_currency_type   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7907  ,p_revproc_currency_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7908  ,p_project_bil_rate_date_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7909  ,p_project_bil_rate_type        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7910  ,p_project_bil_rate_date        IN DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7911  ,p_project_bil_exchange_rate    IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7912  ,p_projfunc_currency_code      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7913  ,p_projfunc_bil_rate_date_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7914  ,p_projfunc_bil_rate_type       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7915  ,p_projfunc_bil_rate_date       IN DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7916  ,p_projfunc_bil_exchange_rate   IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7917  ,p_funding_rate_date_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7918  ,p_funding_rate_type       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7919  ,p_funding_rate_date       IN DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7920  ,p_funding_exchange_rate   IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7921  ,p_baseline_funding_flag        IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7922  ,p_multi_currency_billing_flag  IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7923  ,p_competence_match_wt          IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7924  ,p_availability_match_wt        IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7925  ,p_job_level_match_wt           IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7926  ,p_enable_automated_search      IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7927  ,p_search_min_availability      IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7928  ,p_search_org_hier_id           IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7929  ,p_search_starting_org_id       IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7930  ,p_search_country_id            IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7931  ,p_min_cand_score_reqd_for_nom  IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7932  ,p_max_num_of_sys_nom_cand      IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7933  ,p_non_lab_std_bill_rt_sch_id   IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7934  ,p_search_country_code          IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7935  ,p_inv_by_bill_trans_curr_flag  IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7936  ,p_projfunc_cost_rate_type      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7937  ,p_projfunc_cost_rate_date      IN DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7938 --Sakthi MCB
7939 --Sakthi Structure
7940  ,p_assign_precedes_task            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7941  ,p_split_cost_from_wokplan_flag   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7942  ,p_split_cost_from_bill_flag       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7943 --Sakthi Structure
7944 --Advertisement
7945  ,p_adv_action_set_id              IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7946  ,p_start_adv_action_set_flag      IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7947 --Advertisement
7948 --Project Setup
7949  ,p_priority_code                  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7950 --Project Setup
7951 --Retention
7952  ,p_retn_billing_inv_format_id     IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7953  ,p_retn_accounting_flag           IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7954 --Retention
7955 -- anlee opportunity changes
7956  ,p_opp_value_currency_code        VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7957 -- anlee
7958 -- patchset K changes
7959  ,p_revaluate_funding_flag         VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7960  ,p_include_gains_losses_flag    VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7961 -- msundare
7962  ,p_security_level               IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7963  ,p_labor_disc_reason_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7964  ,p_non_labor_disc_reason_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7965 -- End of changes
7966 --PA L changes -- bug 2872708   --load_project
7967  ,p_asset_allocation_method       VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7968  ,p_capital_event_processing      VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7969  ,p_cint_rate_sch_id              NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7970  ,p_cint_eligible_flag            VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7971  ,p_cint_stop_date                DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7972 --end PA L changes -- bug 2872708
7973 -- car changes
7974  ,p_bill_To_Customer_id          NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug 3728734
7975  ,p_ship_To_Customer_id          NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug 3728734
7976 -- car changes
7977 -- PA L Changes 3010538
7978  ,p_process_mode                 VARCHAR2  :='ONLINE'
7979  -- FP M changes begin (venkat)
7980  ,p_sys_program_flag            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7981  , p_allow_multi_program_rollup	IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Bug # 5072032.
7982  ,p_enable_top_task_cust_flag        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7983  ,p_enable_top_task_inv_mth_flag    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7984  ,p_projfunc_attr_for_ar_flag       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7985 -- FP M changes end (venkat)
7986  ,p_ar_rec_notify_flag              IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  -- 7508661 : EnC
7987  ,p_auto_release_pwp_inv            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  -- 7508661 : EnC
7988 )
7989 
7990 IS
7991 
7992    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_project';
7993 
7994 
7995 BEGIN
7996 
7997 --  Standard begin of API savepoint
7998 
7999     SAVEPOINT load_project_pub;
8000 
8001 --  Standard call to check for call compatibility.
8002 
8003     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
8004                                p_api_version_number  ,
8005                                l_api_name         ,
8006                                G_PKG_NAME         )
8007     THEN
8008 
8009   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8010 
8011     END IF;
8012 
8013 --  Initialize the message table if requested.
8014 
8015     IF FND_API.TO_BOOLEAN( p_init_msg_list )
8016     THEN
8017 
8018   FND_MSG_PUB.initialize;
8019 
8020     END IF;
8021 
8022 --  Set API return status to success
8023 
8024     p_return_status := FND_API.G_RET_STS_SUCCESS;
8025 
8026 -- assign incoming parameters to the fields of global project record
8027 
8028     G_project_in_rec.pa_project_id      := p_pa_project_id;
8029     G_project_in_rec.pa_project_number      := p_pa_project_number;
8030     --    G_project_in_rec.pm_project_reference     := p_pm_project_reference;
8031     G_project_in_rec.pm_project_reference     := substrb(p_pm_project_reference,1,25); -- modified for bug 4998328
8032     G_project_in_rec.project_name      := p_project_name;
8033     G_project_in_rec.long_name        := p_long_name;
8034     G_project_in_rec.created_from_project_id    := p_created_from_project_id;
8035     G_project_in_rec.carrying_out_organization_id   := p_carrying_out_organization_id;
8036     G_project_in_rec.public_sector_flag      := p_public_sector_flag;
8037     G_project_in_rec.project_status_code    := p_project_status_code;
8038     G_project_in_rec.description      := p_description;
8039     G_project_in_rec.start_date        := p_start_date;
8040     G_project_in_rec.completion_date      := p_completion_date;
8041     G_project_in_rec.distribution_rule      := p_distribution_rule;
8042     G_project_in_rec.customer_id      := p_customer_id;
8043     G_project_in_rec.project_relationship_code     := p_project_relationship_code;
8044     G_project_in_rec.actual_start_date                  := p_actual_start_date;
8045     G_project_in_rec.actual_finish_date                 := p_actual_finish_date;
8046     G_project_in_rec.early_start_date                   := p_early_start_date;
8047     G_project_in_rec.early_finish_date                  := p_early_finish_date;
8048     G_project_in_rec.late_start_date                    := p_late_start_date;
8049     G_project_in_rec.late_finish_date                   := p_late_finish_date;
8050     G_project_in_rec.scheduled_start_date               :=
8051                      p_scheduled_start_date;
8052     G_project_in_rec.scheduled_finish_date              :=
8053                    p_scheduled_finish_date;
8054     G_project_in_rec.attribute_category                 := p_attribute_category;
8055     G_project_in_rec.attribute1              := p_attribute1;
8056     G_project_in_rec.attribute2              := p_attribute2;
8057     G_project_in_rec.attribute3              := p_attribute3;
8058     G_project_in_rec.attribute4              := p_attribute4;
8059     G_project_in_rec.attribute5              := p_attribute5;
8060     G_project_in_rec.attribute6              := p_attribute6;
8061     G_project_in_rec.attribute7              := p_attribute7;
8062     G_project_in_rec.attribute8              := p_attribute8;
8063     G_project_in_rec.attribute9              := p_attribute9;
8064     G_project_in_rec.attribute10      := p_attribute10;
8065 
8066 -- Tax Code Changes starts ...
8067 
8068     G_project_in_rec.output_tax_code   := p_output_tax_code;
8069     G_project_in_rec.output_tax_code   := p_retention_tax_code;
8070 
8071 -- IC and Multi National Currency changes Starts ...
8072 
8073     G_project_in_rec.project_currency_code   := p_project_currency_code;
8074     G_project_in_rec.allow_cross_charge_flag := p_allow_cross_charge_flag;
8075     G_project_in_rec.project_rate_date := p_project_rate_date;
8076     G_project_in_rec.project_rate_type := p_project_rate_type;
8077 
8078     G_project_in_rec.cc_process_labor_flag := p_cc_process_labor_flag;
8079     G_project_in_rec.labor_tp_schedule_id := p_labor_tp_schedule_id;
8080     G_project_in_rec.labor_tp_fixed_date := p_labor_tp_fixed_date;
8081     G_project_in_rec.cc_process_nl_flag := p_cc_process_nl_flag;
8082     G_project_in_rec.nl_tp_schedule_id := p_nl_tp_schedule_id;
8083     G_project_in_rec.nl_tp_fixed_date := p_nl_tp_fixed_date;
8084     G_project_in_rec.cc_tax_task_id := p_cc_tax_task_id;
8085 
8086 -- IC and Multi National Currency changes Ends ...
8087 
8088 -- ORM Code change starts here ...
8089 
8090     G_project_in_rec.role_list_id   := p_role_list_id;
8091     G_project_in_rec.work_type_id   := p_work_type_id;
8092     G_project_in_rec.calendar_id    := p_calendar_id;
8093     G_project_in_rec.probability_member_id    := p_probability_member_id;
8094     G_project_in_rec.project_value            := p_project_value;
8095     G_project_in_rec.expected_approval_date   := p_expected_approval_date;
8096     G_project_in_rec.cost_job_group_id   := p_cost_job_group_id;
8097     G_project_in_rec.bill_job_group_id   := p_bill_job_group_id;
8098 
8099 -- ORM Code change ends here ...
8100 
8101     G_project_in_rec.emp_bill_rate_schedule_id   := p_emp_bill_rate_schedule_id;
8102     G_project_in_rec.job_bill_rate_schedule_id   := p_job_bill_rate_schedule_id;
8103 
8104 --Sakthi MCB
8105     G_project_in_rec.competence_match_wt   := p_competence_match_wt;
8106     G_project_in_rec.availability_match_wt   := p_availability_match_wt;
8107     G_project_in_rec.job_level_match_wt   := p_job_level_match_wt;
8108     G_project_in_rec.enable_automated_search   := p_enable_automated_search;
8109     G_project_in_rec.search_min_availability   := p_search_min_availability;
8110     G_project_in_rec.search_org_hier_id   := p_search_org_hier_id;
8111     G_project_in_rec.search_starting_org_id   := p_search_starting_org_id;
8112     G_project_in_rec.search_country_code   := p_search_country_code;
8113     G_project_in_rec.min_cand_score_reqd_for_nom   := p_min_cand_score_reqd_for_nom;
8114     G_project_in_rec.non_lab_std_bill_rt_sch_id   := p_non_lab_std_bill_rt_sch_id;
8115     G_project_in_rec.invproc_currency_type   := p_invproc_currency_type;
8116     G_project_in_rec.revproc_currency_code   := p_revproc_currency_code;
8117     G_project_in_rec.project_bil_rate_date_code   := p_project_bil_rate_date_code;
8118     G_project_in_rec.project_bil_rate_type   := p_project_bil_rate_type;
8119     G_project_in_rec.project_bil_rate_date   := p_project_bil_rate_date;
8120     G_project_in_rec.project_bil_exchange_rate   := p_project_bil_exchange_rate;
8121     G_project_in_rec.projfunc_currency_code   := p_projfunc_currency_code;
8122     G_project_in_rec.projfunc_bil_rate_date_code   := p_projfunc_bil_rate_date_code;
8123     G_project_in_rec.projfunc_bil_rate_type   := p_projfunc_bil_rate_type;
8124     G_project_in_rec.projfunc_bil_rate_date   := p_projfunc_bil_rate_date;
8125     G_project_in_rec.projfunc_bil_exchange_rate   := p_projfunc_bil_exchange_rate;
8126     G_project_in_rec.funding_rate_date_code   := p_funding_rate_date_code;
8127     G_project_in_rec.funding_rate_type   := p_funding_rate_type;
8128     G_project_in_rec.funding_rate_date   := p_funding_rate_date;
8129     G_project_in_rec.funding_exchange_rate   := p_funding_exchange_rate;
8130     G_project_in_rec.baseline_funding_flag   := p_baseline_funding_flag;
8131     G_project_in_rec.projfunc_cost_rate_type   := p_projfunc_cost_rate_type;
8132     G_project_in_rec.projfunc_cost_rate_date   := p_projfunc_cost_rate_date;
8133     G_project_in_rec.inv_by_bill_trans_curr_flag   := p_inv_by_bill_trans_curr_flag;
8134     G_project_in_rec.multi_currency_billing_flag   := p_multi_currency_billing_flag;
8135 --Sakthi MCB
8136 --Sakthi Structure
8137    G_project_in_rec.assign_precedes_task            := p_assign_precedes_task;
8138    G_project_in_rec.split_cost_from_workplan_flag   := p_split_cost_from_wokplan_flag;
8139    G_project_in_rec.split_cost_from_bill_flag       := p_split_cost_from_bill_flag;
8140 --Sakthi Structure
8141 --Advertisement
8142   G_project_in_rec.adv_action_set_id            := p_adv_action_set_id;
8143   G_project_in_rec.start_adv_action_set_flag    := p_start_adv_action_set_flag;
8144 --Advertisement
8145 --Project Setup
8146   G_project_in_rec.priority_code                := p_priority_code;
8147 --Project Setup
8148 --Retention
8149   G_project_in_rec.retn_billing_inv_format_id   := p_retn_billing_inv_format_id;
8150   G_project_in_rec.retn_accounting_flag         := p_retn_accounting_flag;
8151 --Retention
8152 
8153 -- anlee opportunity changes
8154   G_project_in_rec.opp_value_currency_code      := p_opp_value_currency_code;
8155 
8156 -- anlee
8157 -- patchset K changes
8158   G_project_in_rec.revaluate_funding_flag       := p_revaluate_funding_flag;
8159   G_project_in_rec.include_gains_losses_flag  := p_include_gains_losses_flag;
8160 -- msundare
8161   G_project_in_rec.security_level := p_security_level;
8162   G_project_in_rec.labor_disc_reason_code := p_labor_disc_reason_code;
8163   G_project_in_rec.non_labor_disc_reason_code := p_non_labor_disc_reason_code;
8164 -- End of changes
8165 
8166 --PA L Changes 2872708
8167   G_project_in_rec.asset_allocation_method := p_asset_allocation_method;
8168   G_project_in_rec.capital_event_processing := p_capital_event_processing;
8169   G_project_in_rec.cint_rate_sch_id := p_cint_rate_sch_id;
8170   G_project_in_rec.cint_eligible_flag := p_cint_eligible_flag;
8171   G_project_in_rec.cint_stop_date := p_cint_stop_date;
8172 --PA L Changes 2872708
8173 
8174 --CAR changes: bug 2943284
8175   G_project_in_rec.Bill_to_customer_id :=P_bill_to_customer_id;
8176   G_project_in_rec.Ship_to_customer_id :=P_Ship_To_customer_id;
8177 
8178 -- PA L Changes 3010538
8179 G_project_in_rec.process_mode :=p_process_mode ;
8180 
8181 -- FP_M changes begin (venkat)
8182   G_project_in_rec.sys_program_flag  := p_sys_program_flag;
8183   G_project_in_rec.allow_multi_program_rollup := p_allow_multi_program_rollup; -- Bug # 5072032.
8184 
8185 -- FP_M changes end (venkat)
8186      --Bug 3279981. FP_M Project setup changes
8187      G_project_in_rec.enable_top_task_customer_flag := p_enable_top_task_cust_flag ;
8188      G_project_in_rec.enable_top_task_inv_mth_flag  := p_enable_top_task_inv_mth_flag ;
8189      --Bug 3279981. FP_M Project setup changes
8190      G_project_in_rec.ar_rec_notify_flag    := p_ar_rec_notify_flag ;
8191      G_project_in_rec.auto_release_pwp_inv  := p_auto_release_pwp_inv ;
8192 
8193 EXCEPTION
8194 
8195   WHEN FND_API.G_EXC_ERROR
8196   THEN
8197   ROLLBACK TO load_project_pub;
8198 
8199   p_return_status := FND_API.G_RET_STS_ERROR;
8200 
8201 
8202   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8203   THEN
8204   ROLLBACK TO load_project_pub;
8205 
8206   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8207 
8208 
8209   WHEN OTHERS THEN
8210   ROLLBACK TO load_project_pub;
8211 
8212   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8213 
8214   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8215   THEN
8216     FND_MSG_PUB.add_exc_msg
8217         ( p_pkg_name    => G_PKG_NAME
8218         , p_procedure_name  => l_api_name  );
8219 
8220   END IF;
8221 
8222 
8223 END load_project;
8224 
8225 
8226 --------------------------------------------------------------------------------
8227 --Name:               load_key_member
8228 --Type:               Procedure
8229 --Description:        This procedure can be used to move a key member
8230 --           from the client side to a PL/SQL table on the server side
8231 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8232 --
8233 --Called subprograms:
8234 --
8235 --
8236 --
8237 --History:
8238 --    19-AUG-1996        L. de Werker    Created
8239 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
8240 --
8241 
8242 PROCEDURE load_key_member
8243 ( p_api_version_number    IN  NUMBER
8244  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
8245  ,p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
8246  ,p_person_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8247  ,p_project_role_type    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8248  ,p_project_role_meaning IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added for Bug 6408593
8249  ,p_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8250  ,p_end_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  )
8251 
8252 IS
8253 
8254    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_key_member';
8255    i            NUMBER;
8256 
8257 
8258 BEGIN
8259 
8260 --  Standard begin of API savepoint
8261 
8262     SAVEPOINT load_key_member_pub;
8263 
8264 --  Standard call to check for call compatibility.
8265 
8266     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
8267                                p_api_version_number  ,
8268                                l_api_name         ,
8269                                G_PKG_NAME       )
8270     THEN
8271 
8272   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8273 
8274     END IF;
8275 
8276 --  Initialize the message table if requested.
8277 
8278     IF FND_API.TO_BOOLEAN( p_init_msg_list )
8279     THEN
8280 
8281   FND_MSG_PUB.initialize;
8282 
8283     END IF;
8284 
8285 --  Set API return status to success
8286 
8287     p_return_status := FND_API.G_RET_STS_SUCCESS;
8288 
8289 -- Load the table only if a valid person id is passed
8290 
8291  IF (p_person_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8292       (p_person_id IS NOT NULL) THEN
8293 
8294 -- assign a value to the global counter for this table
8295     G_key_members_tbl_count  := G_key_members_tbl_count + 1;
8296 -- assign incoming parameters to the global table fields
8297     G_key_members_in_tbl(G_key_members_tbl_count).person_id  := p_person_id;
8298     G_key_members_in_tbl(G_key_members_tbl_count).project_role_type
8299              := p_project_role_type;
8300     G_key_members_in_tbl(G_key_members_tbl_count).project_role_meaning
8301              := p_project_role_meaning;   --Added for bug 6408593
8302     G_key_members_in_tbl(G_key_members_tbl_count).start_date  := p_start_date;
8303     G_key_members_in_tbl(G_key_members_tbl_count).end_date    := p_end_date;
8304 
8305 END IF;
8306 
8307 
8308 EXCEPTION
8309 
8310   WHEN FND_API.G_EXC_ERROR
8311   THEN
8312   ROLLBACK TO load_key_member_pub;
8313 
8314   p_return_status := FND_API.G_RET_STS_ERROR;
8315 
8316 
8317   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8318   THEN
8319   ROLLBACK TO load_key_member_pub;
8320 
8321   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8322 
8323 
8324   WHEN OTHERS THEN
8325   ROLLBACK TO load_key_member_pub;
8326 
8327   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8328 
8329   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8330   THEN
8331     FND_MSG_PUB.add_exc_msg
8332         ( p_pkg_name    => G_PKG_NAME
8333         , p_procedure_name  => l_api_name  );
8334 
8335   END IF;
8336 
8337 
8338 END load_key_member;
8339 
8340 
8341 -- anlee org role changes
8342 --------------------------------------------------------------------------------
8343 --Name:               load_org_role
8344 --Type:               Procedure
8345 --Description:        This procedure can be used to move an org role
8346 --           from the client side to a PL/SQL table on the server side
8347 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8348 --
8349 --Called subprograms:
8350 --
8351 --
8352 --
8353 --History:
8354 --    20-MAR-2002        anlee    Created
8355 
8356 PROCEDURE load_org_role
8357 ( p_api_version_number    IN  NUMBER
8358  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
8359  ,p_return_status    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8360  ,p_resource_source_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8361  ,p_project_role_type    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8362  ,p_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8363  ,p_end_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  )
8364 
8365 IS
8366 
8367    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_org_role';
8368    i            NUMBER;
8369 
8370 
8371 BEGIN
8372 
8373 --  Standard begin of API savepoint
8374 
8375     SAVEPOINT load_org_role_pub;
8376 
8377 --  Standard call to check for call compatibility.
8378 
8379     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
8380                                p_api_version_number  ,
8381                                l_api_name         ,
8382                                G_PKG_NAME       )
8383     THEN
8384 
8385   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8386 
8387     END IF;
8388 
8389 --  Initialize the message table if requested.
8390 
8391     IF FND_API.TO_BOOLEAN( p_init_msg_list )
8392     THEN
8393 
8394   FND_MSG_PUB.initialize;
8395 
8396     END IF;
8397 
8398 --  Set API return status to success
8399 
8400     p_return_status := FND_API.G_RET_STS_SUCCESS;
8401 
8402 -- Load the table only if a valid resource source id is passed
8403 
8404  IF (p_resource_source_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8405       (p_resource_source_id IS NOT NULL) THEN
8406 
8407 -- assign a value to the global counter for this table
8408     G_org_roles_tbl_count  := G_org_roles_tbl_count + 1;
8409 -- assign incoming parameters to the global table fields
8410     G_org_roles_in_tbl(G_org_roles_tbl_count).person_id  := p_resource_source_id;
8411     G_org_roles_in_tbl(G_org_roles_tbl_count).project_role_type
8412              := p_project_role_type;
8413     G_org_roles_in_tbl(G_org_roles_tbl_count).start_date  := p_start_date;
8414     G_org_roles_in_tbl(G_org_roles_tbl_count).end_date    := p_end_date;
8415 
8416 END IF;
8417 
8418 
8419 EXCEPTION
8420 
8421   WHEN FND_API.G_EXC_ERROR
8422   THEN
8423   ROLLBACK TO load_org_role_pub;
8424 
8425   p_return_status := FND_API.G_RET_STS_ERROR;
8426 
8427 
8428   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8429   THEN
8430   ROLLBACK TO load_org_role_pub;
8431 
8432   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8433 
8434 
8435   WHEN OTHERS THEN
8436   ROLLBACK TO load_org_role_pub;
8437 
8438   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8439 
8440   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8441   THEN
8442     FND_MSG_PUB.add_exc_msg
8443         ( p_pkg_name    => G_PKG_NAME
8444         , p_procedure_name  => l_api_name  );
8445 
8446   END IF;
8447 
8448 
8449 END load_org_role;
8450 
8451 
8452 
8453 --------------------------------------------------------------------------------
8454 --Name:               load_class_category
8455 --Type:               Procedure
8456 --Description:        This procedure can be used to move a class category
8457 --           from the client side to a PL/SQL table on the server side
8458 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8459 --
8460 --Called subprograms:
8461 --
8462 --
8463 --
8464 --History:
8465 --    19-AUG-1996        L. de Werker    Created
8466 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
8467 --
8468 
8469 PROCEDURE load_class_category
8470 ( p_api_version_number    IN  NUMBER
8471  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
8472  ,p_return_status    OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8473  ,p_class_category    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8474  ,p_class_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8475  ,p_new_class_code  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR   -- Added for Bug 7028230
8476  ,p_code_percentage             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  )
8477 
8478 IS
8479 
8480    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_class_categories';
8481    i            NUMBER;
8482    l_code_percentage           NUMBER;
8483    l_new_class_code          VARCHAR2(30); -- Added for Bug 7028230
8484 
8485 BEGIN
8486 
8487 --  Standard begin of API savepoint
8488 
8489     SAVEPOINT load_class_category_pub;
8490 
8491 --  Standard call to check for call compatibility.
8492 
8493     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
8494                                p_api_version_number  ,
8495                                l_api_name         ,
8496                                G_PKG_NAME         )
8497     THEN
8498 
8499   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8500 
8501     END IF;
8502 
8503 --  Initialize the message table if requested.
8504 
8505     IF FND_API.TO_BOOLEAN( p_init_msg_list )
8506     THEN
8507 
8508   FND_MSG_PUB.initialize;
8509 
8510     END IF;
8511 
8512 --  Set API return status to success
8513 
8514     p_return_status := FND_API.G_RET_STS_SUCCESS;
8515 
8516 -- Load the table only if a valid class category id is passed
8517 
8518 IF (p_class_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
8519    (p_class_category IS NOT NULL )
8520 AND (p_class_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
8521     (p_class_code IS NOT NULL ) THEN
8522 
8523 --  assign a value to the global counter for this table
8524     G_class_categories_tbl_count  := G_class_categories_tbl_count + 1;
8525 
8526     if p_code_percentage = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
8527       l_code_percentage := NULL;
8528     else
8529       l_code_percentage := p_code_percentage;
8530     end if;
8531 
8532     /* Added for Bug 7028230 */
8533     if p_new_class_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
8534       l_code_percentage := NULL;
8535     else
8536       l_new_class_code := p_new_class_code;
8537     end if;
8538 
8539 --  assign incoming parameters to the global table fields
8540     G_class_categories_in_tbl(G_class_categories_tbl_count).class_category
8541     := p_class_category;
8542     G_class_categories_in_tbl(G_class_categories_tbl_count).class_code
8543     := p_class_code;
8544     G_class_categories_in_tbl(G_class_categories_tbl_count).code_percentage
8545     := l_code_percentage;
8546     /* Added for Bug 7028230 */
8547     G_class_categories_in_tbl(G_class_categories_tbl_count).new_class_code := l_new_class_code;
8548 
8549 END IF;
8550 
8551 
8552 EXCEPTION
8553 
8554   WHEN FND_API.G_EXC_ERROR
8555   THEN
8556   ROLLBACK TO load_class_category_pub;
8557 
8558   p_return_status := FND_API.G_RET_STS_ERROR;
8559 
8560 
8561   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8562   THEN
8563   ROLLBACK TO load_class_category_pub;
8564 
8565   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8566 
8567 
8568   WHEN OTHERS THEN
8569   ROLLBACK TO load_class_category_pub;
8570 
8571   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8572 
8573   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8574   THEN
8575     FND_MSG_PUB.add_exc_msg
8576         ( p_pkg_name    => G_PKG_NAME
8577         , p_procedure_name  => l_api_name  );
8578 
8579   END IF;
8580 
8581 END load_class_category;
8582 
8583 --------------------------------------------------------------------------------
8584 --Name:               load_task
8585 --Type:               Procedure
8586 --Description:        This procedure can be used to move a task
8587 --           from the client side to a PL/SQL table on the server side
8588 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8589 --
8590 --Called subprograms:
8591 --
8592 --
8593 --
8594 --History:
8595 --    19-AUG-1996        L. de Werker    Created
8596 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
8597 --    28-NOV-1996   L. de Werker   Added 11 parameters for descriptive flexfields
8598 --    10-DEC-1996   L. de Werker    Added parameter p_pa_parent_task_id
8599 --           Added parameter p_address_id
8600 --     15-JUL-2003  sramesh       Commented a code for bug 2982057
8601 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
8602 --                                        dependency_type and lag days to tasks and create dependencies.
8603 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
8604 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
8605 --    19-FEB-2004 Rakesh Raghavan      Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK.
8606 --    05-APR-2004 Rakesh Raghavan      Progress Management Changes. Bug # 3420093.
8607 
8608 PROCEDURE load_task
8609 (  p_api_version_number      IN  NUMBER
8610   ,p_init_msg_list      IN  VARCHAR2  := FND_API.G_FALSE
8611   ,p_return_status      OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
8612   ,p_pm_task_reference      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8613   ,p_pa_task_id                         IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8614   ,p_task_name        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8615   ,p_long_task_name      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8616   ,p_pa_task_number           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8617   ,p_task_description      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8618   ,p_task_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8619   ,p_task_completion_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8620   ,p_pm_parent_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8621   ,p_pa_parent_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8622   ,p_address_id        IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8623   ,p_carrying_out_organization_id  IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8624   ,p_service_type_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8625   ,p_task_manager_person_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8626   ,p_billable_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8627   ,p_chargeable_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8628   ,p_ready_to_bill_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8629   ,p_ready_to_distribute_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8630   ,p_limit_to_txn_controls_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8631   ,p_labor_bill_rate_org_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8632   ,p_labor_std_bill_rate_schdl    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8633   ,p_labor_schedule_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8634   ,p_labor_schedule_discount    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8635   ,p_nl_bill_rate_org_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8636   ,p_nl_std_bill_rate_schdl    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8637   ,p_nl_schedule_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8638   ,p_nl_schedule_discount    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8639   ,p_labor_cost_multiplier_name    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8640   ,p_cost_ind_rate_sch_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8641   ,p_rev_ind_rate_sch_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8642   ,p_inv_ind_rate_sch_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8643   ,p_cost_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8644   ,p_rev_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8645   ,p_inv_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8646   ,p_labor_sch_type      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8647   ,p_nl_sch_type      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8648  , p_actual_start_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8649  , p_actual_finish_date                 IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8650  , p_early_start_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8651  , p_early_finish_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8652  , p_late_start_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8653  , p_late_finish_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8654  , p_scheduled_start_date               IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8655  , p_scheduled_finish_date              IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8656   ,p_tasks_dff                    IN VARCHAR2    := 'N' --bug 6153503
8657   ,p_attribute_category      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8658   ,p_attribute1        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8659   ,p_attribute2        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8660   ,p_attribute3        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8661   ,p_attribute4        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8662   ,p_attribute5        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8663   ,p_attribute6        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8664   ,p_attribute7        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8665   ,p_attribute8        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8666   ,p_attribute9        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8667   ,p_attribute10      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8668   --bug 6153503
8669   ,p_attribute11             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8670   ,p_attribute12             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8671   ,p_attribute13             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8672   ,p_attribute14             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8673   ,p_attribute15             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8674   --end bug 6153503
8675   ,p_allow_cross_charge_flag        IN VARCHAR2 :=
8676 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8677   ,p_project_rate_date        IN DATE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8678   ,p_project_rate_type        IN VARCHAR2 :=
8679 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8680  ,p_cc_process_labor_flag   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8681  ,p_labor_tp_schedule_id    IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8682  ,p_labor_tp_fixed_date     IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8683  ,p_cc_process_nl_flag   IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8684  ,p_nl_tp_schedule_id    IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8685  ,p_nl_tp_fixed_date     IN DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8686  ,p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8687  ,p_work_type_id    IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8688  ,p_emp_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8689  ,p_job_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8690 --Sakthi  MCB
8691  ,p_non_lab_std_bill_rt_sch_id  IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8692  ,p_taskfunc_cost_rate_type     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8693  ,p_taskfunc_cost_rate_date     IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8694 --Sakthi  MCB
8695  ,p_display_sequence    IN NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8696   ,p_wbs_level            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8697 --Project Structure
8698  ,P_OBLIGATION_START_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8699  ,P_OBLIGATION_FINISH_DATE             IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8700  ,P_ESTIMATED_START_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8701  ,P_ESTIMATED_FINISH_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8702  ,P_BASELINE_START_DATE                IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8703  ,P_BASELINE_FINISH_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8704  ,P_CLOSED_DATE                        IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8705  ,P_WQ_UOM_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8706  ,P_WQ_ITEM_CODE                       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8707  ,P_STATUS_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8708  ,P_WF_STATUS_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8709  ,P_PM_SOURCE_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8710  ,P_PRIORITY_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8711  ,P_MILESTONE_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8712  ,P_CRITICAL_FLAG                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8713  ,P_INC_PROJ_PROGRESS_FLAG             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8714  ,P_LINK_TASK_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8715  ,P_CALENDAR_ID                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8716  ,P_PLANNED_EFFORT                     IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8717  ,P_DURATION                           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8718  ,P_PLANNED_WORK_QUANTITY              IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8719  ,P_TASK_TYPE                          IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8720 --Project Structure
8721  ,p_labor_disc_reason_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8722  ,p_non_labor_disc_reason_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8723 --PA L changes -- bug 2872708
8724  ,p_retirement_cost_flag          VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8725  ,p_cint_eligible_flag            VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8726  ,p_cint_stop_date                DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8727 --end PA L changes -- bug 2872708
8728 -- FP-M Bug # 3301192
8729  ,p_pred_string                   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8730 -- ,p_pred_delimiter                     VARCHAR2    DEFAULT ','
8731  ,p_pred_delimiter                IN VARCHAR2   :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8732 -- FP M changes begin (venkat)
8733   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8734   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8735   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8736   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8737   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8738   ,p_total_slack            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8739   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8740   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8741   ,p_invoice_method         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8742   ,p_customer_id            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8743   ,p_gen_etc_source_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8744 -- FP M changes end (venkat)
8745 -- FP M changes start (Mapping )
8746   ,p_financial_task_flag        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8747   ,p_mapped_task_id             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8748   ,p_mapped_task_reference      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8749 -- FP M changes end (Mapping )
8750   ,p_deliverable                IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8751   ,p_deliverable_id             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM -- 3661788 Added IN parameter
8752 -- (begin venkat) new params for bug #3450684 --------------------------------------
8753   ,p_ext_act_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
8754   ,p_ext_remain_duration         IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
8755   ,p_ext_sch_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
8756 -- (end venkat) new params for bug #3450684 ----------------------------------------
8757 
8758 -- Progress Management Changes. Bug # 3420093.
8759   ,p_etc_effort                 IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8760   ,p_percent_complete           IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8761 -- Progress Management Changes. Bug # 3420093.
8762 
8763 )
8764 IS
8765 
8766    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_task';
8767    i            NUMBER;
8768 
8769 
8770 BEGIN
8771 
8772 --  Standard begin of API savepoint
8773 
8774     SAVEPOINT load_task_pub;
8775 
8776 --  Standard call to check for call compatibility.
8777 
8778      IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
8779                                p_api_version_number  ,
8780                                l_api_name         ,
8781                                G_PKG_NAME         )
8782     THEN
8783 
8784   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8785 
8786     END IF;
8787 
8788 --  Initialize the message table if requested.
8789 
8790     IF FND_API.TO_BOOLEAN( p_init_msg_list )
8791     THEN
8792 
8793   FND_MSG_PUB.initialize;
8794 
8795     END IF;
8796 
8797 --  Set API return status to success
8798 
8799     p_return_status := FND_API.G_RET_STS_SUCCESS;
8800 
8801 
8802 --  assign a value to the global counter for this table
8803     G_tasks_tbl_count  := G_tasks_tbl_count + 1;
8804 
8805 
8806 --  assign incoming parameters to the global table fields
8807 --!!not needed G_tasks_in_tbl(G_tasks_tbl_count).pm_project_reference  :=  p_pm_project_reference;
8808     G_tasks_in_tbl(G_tasks_tbl_count).pm_task_reference      :=  p_pm_task_reference;
8809 --  Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK.
8810     G_tasks_in_tbl(G_tasks_tbl_count).task_name        :=  substrb(p_task_name,1,240); --Bug 6193314
8811 --bug 2874207
8812 /*  Commented the code for bug 2982057 and handling it in create_project and update_project
8813     IF p_long_task_name IS NULL OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8814     THEN
8815         G_tasks_in_tbl(G_tasks_tbl_count).long_task_name            := p_task_name;
8816     ELSE
8817 */
8818 --As part of bug 2982057, there were changes done in create_proejct, update project apis which
8819 --copies the long task name from this global variable. If user passes long_task_name
8820 --then we need the following line be uncommented.
8821 
8822     G_tasks_in_tbl(G_tasks_tbl_count).long_task_name            := p_long_task_name;
8823 
8824 --    END IF;
8825 --bug 2874207
8826 --  Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK
8827 
8828    G_tasks_in_tbl(G_tasks_tbl_count).pa_task_number      := substrb(p_pa_task_number,1,100); --Bug 6193314
8829 
8830 
8831 
8832     G_tasks_in_tbl(G_tasks_tbl_count).task_description      :=  substrb(p_task_description,1,250); -- Fix for Bug # 4513291.
8833     G_tasks_in_tbl(G_tasks_tbl_count).task_start_date      :=  p_task_start_date;
8834     G_tasks_in_tbl(G_tasks_tbl_count).task_completion_date    :=  p_task_completion_date;
8835     G_tasks_in_tbl(G_tasks_tbl_count).pm_parent_task_reference    :=  p_pm_parent_task_reference;
8836     G_tasks_in_tbl(G_tasks_tbl_count).pa_parent_task_id      :=   p_pa_parent_task_id;
8837     G_tasks_in_tbl(G_tasks_tbl_count).address_id      :=  p_address_id;
8838     G_tasks_in_tbl(G_tasks_tbl_count).carrying_out_organization_id  :=  p_carrying_out_organization_id;
8839     G_tasks_in_tbl(G_tasks_tbl_count).service_type_code      :=  p_service_type_code;
8840     G_tasks_in_tbl(G_tasks_tbl_count).task_manager_person_id    :=  p_task_manager_person_id;
8841     G_tasks_in_tbl(G_tasks_tbl_count).billable_flag      :=  p_billable_flag;
8842     G_tasks_in_tbl(G_tasks_tbl_count).chargeable_flag      :=  p_chargeable_flag;
8843     G_tasks_in_tbl(G_tasks_tbl_count).ready_to_bill_flag    :=  p_ready_to_bill_flag;
8844     G_tasks_in_tbl(G_tasks_tbl_count).ready_to_distribute_flag    :=  p_ready_to_distribute_flag;
8845     G_tasks_in_tbl(G_tasks_tbl_count).limit_to_txn_controls_flag  :=  p_limit_to_txn_controls_flag;
8846     G_tasks_in_tbl(G_tasks_tbl_count).labor_bill_rate_org_id    :=  p_labor_bill_rate_org_id;
8847     G_tasks_in_tbl(G_tasks_tbl_count).labor_std_bill_rate_schdl    :=  p_labor_std_bill_rate_schdl;
8848     G_tasks_in_tbl(G_tasks_tbl_count).labor_schedule_fixed_date    :=  p_labor_schedule_fixed_date;
8849     G_tasks_in_tbl(G_tasks_tbl_count).labor_schedule_discount    :=  p_labor_schedule_discount;
8850     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_bill_rate_org_id  :=  p_nl_bill_rate_org_id;
8851     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_std_bill_rate_schdl  :=  p_nl_std_bill_rate_schdl;
8852     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_schedule_fixed_date  :=  p_nl_schedule_fixed_date;
8853     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_schedule_discount  :=  p_nl_schedule_discount;
8854     G_tasks_in_tbl(G_tasks_tbl_count).labor_cost_multiplier_name  :=  p_labor_cost_multiplier_name;
8855     G_tasks_in_tbl(G_tasks_tbl_count).cost_ind_rate_sch_id    :=  p_cost_ind_rate_sch_id;
8856     G_tasks_in_tbl(G_tasks_tbl_count).rev_ind_rate_sch_id    :=  p_rev_ind_rate_sch_id;
8857     G_tasks_in_tbl(G_tasks_tbl_count).inv_ind_rate_sch_id    :=  p_inv_ind_rate_sch_id;
8858     G_tasks_in_tbl(G_tasks_tbl_count).cost_ind_sch_fixed_date    :=  p_cost_ind_sch_fixed_date;
8859     G_tasks_in_tbl(G_tasks_tbl_count).rev_ind_sch_fixed_date    :=  p_rev_ind_sch_fixed_date;
8860     G_tasks_in_tbl(G_tasks_tbl_count).inv_ind_sch_fixed_date    :=  p_inv_ind_sch_fixed_date;
8861     G_tasks_in_tbl(G_tasks_tbl_count).labor_sch_type      :=  p_labor_sch_type;
8862     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_sch_type    :=  p_nl_sch_type;
8863     G_tasks_in_tbl(G_tasks_tbl_count).pa_task_id      :=      p_pa_task_id;
8864     G_tasks_in_tbl(G_tasks_tbl_count).actual_start_date                 :=
8865     p_actual_start_date;
8866     G_tasks_in_tbl(G_tasks_tbl_count).actual_finish_date                :=
8867     p_actual_finish_date;
8868     G_tasks_in_tbl(G_tasks_tbl_count).early_start_date                  :=
8869     p_early_start_date;
8870     G_tasks_in_tbl(G_tasks_tbl_count).early_finish_date                 :=
8871     p_early_finish_date;
8872     G_tasks_in_tbl(G_tasks_tbl_count).late_start_date                   :=
8873     p_late_start_date;
8874     G_tasks_in_tbl(G_tasks_tbl_count).late_finish_date                  :=
8875     p_late_finish_date;
8876     G_tasks_in_tbl(G_tasks_tbl_count).scheduled_start_date              :=
8877     p_scheduled_start_date;
8878     G_tasks_in_tbl(G_tasks_tbl_count).scheduled_finish_date             :=
8879     p_scheduled_finish_date;
8880     G_tasks_in_tbl(G_tasks_tbl_count).tasks_dff             :=p_tasks_dff; --bug 6153503
8881     G_tasks_in_tbl(G_tasks_tbl_count).attribute_category    :=
8882     p_attribute_category;
8883     G_tasks_in_tbl(G_tasks_tbl_count).attribute1            :=
8884     p_attribute1;
8885     G_tasks_in_tbl(G_tasks_tbl_count).attribute2            :=
8886     p_attribute2;
8887     G_tasks_in_tbl(G_tasks_tbl_count).attribute3            :=
8888     p_attribute3;
8889     G_tasks_in_tbl(G_tasks_tbl_count).attribute4            :=
8890     p_attribute4;
8891     G_tasks_in_tbl(G_tasks_tbl_count).attribute5            :=
8892     p_attribute5;
8893     G_tasks_in_tbl(G_tasks_tbl_count).attribute6            :=
8894     p_attribute6;
8895     G_tasks_in_tbl(G_tasks_tbl_count).attribute7            :=
8896     p_attribute7;
8897     G_tasks_in_tbl(G_tasks_tbl_count).attribute8            :=
8898     p_attribute8;
8899     G_tasks_in_tbl(G_tasks_tbl_count).attribute9            :=
8900     p_attribute9;
8901     G_tasks_in_tbl(G_tasks_tbl_count).attribute10            :=
8902     p_attribute10;
8903     --bug 6153503
8904     G_tasks_in_tbl(G_tasks_tbl_count).attribute11            :=
8905     p_attribute11;
8906     G_tasks_in_tbl(G_tasks_tbl_count).attribute12            :=
8907     p_attribute12;
8908     G_tasks_in_tbl(G_tasks_tbl_count).attribute13            :=
8909     p_attribute13;
8910     G_tasks_in_tbl(G_tasks_tbl_count).attribute14            :=
8911     p_attribute14;
8912     G_tasks_in_tbl(G_tasks_tbl_count).attribute15            :=
8913     p_attribute15;
8914     --end bug 6153503
8915 
8916 -- IC and Multi National Currency changes Starts ...
8917 
8918     G_tasks_in_tbl(G_tasks_tbl_count).allow_cross_charge_flag             :=
8919     p_allow_cross_charge_flag;
8920     G_tasks_in_tbl(G_tasks_tbl_count).project_rate_type  :=
8921     p_project_rate_type;
8922     G_tasks_in_tbl(G_tasks_tbl_count).project_rate_date  :=
8923     p_project_rate_date;
8924     G_tasks_in_tbl(G_tasks_tbl_count).cc_process_labor_flag  :=
8925     p_cc_process_labor_flag;
8926     G_tasks_in_tbl(G_tasks_tbl_count).labor_tp_schedule_id  :=
8927     p_labor_tp_schedule_id;
8928     G_tasks_in_tbl(G_tasks_tbl_count).labor_tp_fixed_date  :=
8929     p_labor_tp_fixed_date;
8930     G_tasks_in_tbl(G_tasks_tbl_count).cc_process_nl_flag  :=
8931     p_cc_process_nl_flag;
8932     G_tasks_in_tbl(G_tasks_tbl_count).nl_tp_schedule_id  :=
8933     p_nl_tp_schedule_id;
8934     G_tasks_in_tbl(G_tasks_tbl_count).nl_tp_fixed_date  :=
8935     p_nl_tp_fixed_date;
8936     G_tasks_in_tbl(G_tasks_tbl_count).receive_project_invoice_flag  :=
8937     p_receive_project_invoice_flag;
8938     G_tasks_in_tbl(G_tasks_tbl_count).work_type_id  :=
8939     p_work_type_id;
8940     G_tasks_in_tbl(G_tasks_tbl_count).emp_bill_rate_schedule_id  :=
8941     p_emp_bill_rate_schedule_id;
8942     G_tasks_in_tbl(G_tasks_tbl_count).job_bill_rate_schedule_id  :=
8943     p_job_bill_rate_schedule_id;
8944 
8945 -- IC and Multi National Currency changes Ends ...
8946 
8947 --Sakthi MCB
8948 
8949     G_tasks_in_tbl(G_tasks_tbl_count).non_lab_std_bill_rt_sch_id  :=
8950     p_non_lab_std_bill_rt_sch_id;
8951     G_tasks_in_tbl(G_tasks_tbl_count).taskfunc_cost_rate_type  :=
8952     p_taskfunc_cost_rate_type;
8953     G_tasks_in_tbl(G_tasks_tbl_count).taskfunc_cost_rate_date  :=
8954     p_taskfunc_cost_rate_date;
8955 
8956 --Sakthi MCB
8957     G_tasks_in_tbl(G_tasks_tbl_count).display_sequence    :=
8958     p_display_sequence;
8959     G_tasks_in_tbl(G_tasks_tbl_count).wbs_level    :=
8960     p_wbs_level;
8961 
8962 --Project Structures
8963     G_tasks_in_tbl(G_tasks_tbl_count).OBLIGATION_START_DATE       := P_OBLIGATION_START_DATE;
8964     G_tasks_in_tbl(G_tasks_tbl_count).OBLIGATION_FINISH_DATE      := P_OBLIGATION_FINISH_DATE;
8965     G_tasks_in_tbl(G_tasks_tbl_count).ESTIMATED_START_DATE        := P_ESTIMATED_START_DATE;
8966     G_tasks_in_tbl(G_tasks_tbl_count).ESTIMATED_FINISH_DATE       := P_ESTIMATED_FINISH_DATE;
8967     G_tasks_in_tbl(G_tasks_tbl_count).BASELINE_START_DATE         := P_BASELINE_START_DATE;
8968     G_tasks_in_tbl(G_tasks_tbl_count).BASELINE_FINISH_DATE        := P_BASELINE_FINISH_DATE;
8969     G_tasks_in_tbl(G_tasks_tbl_count).CLOSED_DATE                 := P_CLOSED_DATE;
8970     G_tasks_in_tbl(G_tasks_tbl_count).WQ_UOM_CODE                 := P_WQ_UOM_CODE;
8971     G_tasks_in_tbl(G_tasks_tbl_count).WQ_ITEM_CODE                := P_WQ_ITEM_CODE;
8972     G_tasks_in_tbl(G_tasks_tbl_count).STATUS_CODE                 := P_STATUS_CODE;
8973     G_tasks_in_tbl(G_tasks_tbl_count).WF_STATUS_CODE              := P_WF_STATUS_CODE;
8974     G_tasks_in_tbl(G_tasks_tbl_count).PM_SOURCE_CODE              := P_PM_SOURCE_CODE;
8975     G_tasks_in_tbl(G_tasks_tbl_count).PRIORITY_CODE               := P_PRIORITY_CODE;
8976     G_tasks_in_tbl(G_tasks_tbl_count).MILESTONE_FLAG              := P_MILESTONE_FLAG;
8977     G_tasks_in_tbl(G_tasks_tbl_count).CRITICAL_FLAG               := P_CRITICAL_FLAG;
8978     G_tasks_in_tbl(G_tasks_tbl_count).INC_PROJ_PROGRESS_FLAG      := P_INC_PROJ_PROGRESS_FLAG;
8979     G_tasks_in_tbl(G_tasks_tbl_count).LINK_TASK_FLAG              := P_LINK_TASK_FLAG;
8980     G_tasks_in_tbl(G_tasks_tbl_count).CALENDAR_ID                 := P_CALENDAR_ID;
8981     G_tasks_in_tbl(G_tasks_tbl_count).PLANNED_EFFORT              := P_PLANNED_EFFORT;
8982     G_tasks_in_tbl(G_tasks_tbl_count).DURATION                    := P_DURATION;
8983     G_tasks_in_tbl(G_tasks_tbl_count).PLANNED_WORK_QUANTITY       := P_PLANNED_WORK_QUANTITY;
8984     G_tasks_in_tbl(G_tasks_tbl_count).TASK_TYPE                   := P_TASK_TYPE;
8985 --Project Structures
8986      G_tasks_in_tbl(G_tasks_tbl_count).labor_disc_reason_code := p_labor_disc_reason_code;
8987      G_tasks_in_tbl(G_tasks_tbl_count).non_labor_disc_reason_code := p_non_labor_disc_reason_code;
8988 
8989 --PA L changes bug 2872708
8990      G_tasks_in_tbl(G_tasks_tbl_count).retirement_cost_flag := p_retirement_cost_flag;
8991      G_tasks_in_tbl(G_tasks_tbl_count).cint_eligible_flag := p_cint_eligible_flag;
8992      G_tasks_in_tbl(G_tasks_tbl_count).cint_stop_date := p_cint_stop_date;
8993 
8994 -- FP-M Bug # 3301192
8995       G_tasks_in_tbl(G_tasks_tbl_count).pred_string    := p_pred_string;
8996       G_tasks_in_tbl(G_tasks_tbl_count).pred_delimiter := p_pred_delimiter;
8997 --Bug 3279981 FP_M customer and invoice method at top task
8998       G_tasks_in_tbl(G_tasks_tbl_count).invoice_method := p_invoice_method;
8999       G_tasks_in_tbl(G_tasks_tbl_count).customer_id    := p_customer_id;
9000 --SMukka
9001       G_tasks_in_tbl(G_tasks_tbl_count).financial_task_flag  :=p_financial_task_flag;
9002       G_tasks_in_tbl(G_tasks_tbl_count).mapped_task_id       :=p_mapped_task_id;
9003       G_tasks_in_tbl(G_tasks_tbl_count).mapped_task_reference:=p_mapped_task_reference;
9004       G_tasks_in_tbl(G_tasks_tbl_count).deliverable          :=p_deliverable;
9005       -- 3661788 Assinging deliverable id
9006       G_tasks_in_tbl(G_tasks_tbl_count).deliverable_id       :=p_deliverable_id;
9007 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
9008       G_tasks_in_tbl(G_tasks_tbl_count).ext_act_duration := p_ext_act_duration;
9009       G_tasks_in_tbl(G_tasks_tbl_count).ext_remain_duration := p_ext_remain_duration;
9010       G_tasks_in_tbl(G_tasks_tbl_count).ext_sch_duration := p_ext_sch_duration;
9011 -- (end venkat) new params for bug #3450684 -------------------------------------------------
9012 
9013 -- set the new params - bug #3654243 ----------------------------------------------
9014       G_tasks_in_tbl(G_tasks_tbl_count).base_percent_comp_deriv_code := p_base_percent_comp_deriv_code;
9015       G_tasks_in_tbl(G_tasks_tbl_count).sch_tool_tsk_type_code       := p_sch_tool_tsk_type_code;
9016       G_tasks_in_tbl(G_tasks_tbl_count).constraint_type_code         := p_constraint_type_code;
9017       G_tasks_in_tbl(G_tasks_tbl_count).constraint_date              := p_constraint_date;
9018       G_tasks_in_tbl(G_tasks_tbl_count).free_slack                   := p_free_slack;
9019       G_tasks_in_tbl(G_tasks_tbl_count).total_slack                  := p_total_slack;
9020       G_tasks_in_tbl(G_tasks_tbl_count).effort_driven_flag           := p_effort_driven_flag;
9021       G_tasks_in_tbl(G_tasks_tbl_count).level_assignments_flag       := p_level_assignments_flag;
9022       G_tasks_in_tbl(G_tasks_tbl_count).invoice_method               := p_invoice_method;
9023       G_tasks_in_tbl(G_tasks_tbl_count).customer_id                  := p_customer_id;
9024       G_tasks_in_tbl(G_tasks_tbl_count).gen_etc_source_code          := p_gen_etc_source_code;
9025 -- set the new params - bug #3654243 -------------------------------------------------
9026 
9027 pa_debug.write('load_tasks','p_etc_effort'||p_etc_effort,3);
9028 pa_debug.write('load_tasks','p_percent_complete'||p_percent_complete,3);
9029 
9030 -- Progress Management Changes. Bug # 3420093.
9031    G_tasks_in_tbl(G_tasks_tbl_count).etc_effort := p_etc_effort;
9032    G_tasks_in_tbl(G_tasks_tbl_count).percent_complete := p_percent_complete;
9033 -- Progress Management Changes. Bug # 3420093.
9034 
9035 EXCEPTION
9036 
9037   WHEN FND_API.G_EXC_ERROR
9038   THEN
9039   ROLLBACK TO load_task_pub;
9040 
9041   p_return_status := FND_API.G_RET_STS_ERROR;
9042 
9043 
9044   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9045   THEN
9046   ROLLBACK TO load_task_pub;
9047 
9048   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9049 
9050 
9051   WHEN OTHERS THEN
9052   ROLLBACK TO load_task_pub;
9053 
9054   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9055 
9056   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9057   THEN
9058     FND_MSG_PUB.add_exc_msg
9059         ( p_pkg_name    => G_PKG_NAME
9060         , p_procedure_name  => l_api_name  );
9061 
9062   END IF;
9063 
9064 END load_task;
9065 
9066 
9067 --------------------------------------------------------------------------------
9068 --Name:               execute_create_project
9069 --Type:               Procedure
9070 --Description:        This procedure can be used to create a project
9071 --                    using global PL/SQL tables.
9072 --
9073 --Called subprograms:
9074 --
9075 --
9076 --
9077 --History:
9078 --      19-AUG-1996        L. de Werker    Created
9079 --  22-DEC-97  jwhite    - Added OUT-parameter p_workflow_started
9080 --             for workflow.
9081 --
9082 
9083 PROCEDURE execute_create_project
9084 ( p_api_version_number      IN  NUMBER
9085  ,p_commit        IN  VARCHAR2  := FND_API.G_FALSE
9086  ,p_init_msg_list                    IN  VARCHAR2  := FND_API.G_FALSE
9087  ,p_msg_count        OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
9088  ,p_msg_data        OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9089  ,p_return_status                    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
9090  ,p_workflow_started                  OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9091  ,p_pm_product_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9092  ,p_op_validate_flag     IN  VARCHAR2  := 'Y'--added by rtarway, 4218977
9093  ,p_pa_project_id      OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9094  ,p_pa_project_number      OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
9095       )
9096 
9097 IS
9098 
9099    l_api_name        CONSTANT  VARCHAR2(30)     := 'execute_create_project';
9100 
9101    i              NUMBER;
9102    l_return_status          VARCHAR2(1);
9103    l_err_stage            VARCHAR2(120);
9104 
9105 BEGIN
9106 
9107 --  Standard begin of API savepoint
9108 
9109     SAVEPOINT execute_create_project_pub;
9110 
9111 --  Standard call to check for call compatibility.
9112 
9113     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
9114                                p_api_version_number  ,
9115                                l_api_name         ,
9116                                G_PKG_NAME         )
9117     THEN
9118 
9119   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9120 
9121     END IF;
9122 
9123 --  Initialize the message table if requested.
9124 
9125     IF FND_API.TO_BOOLEAN( p_init_msg_list )
9126     THEN
9127 
9128   FND_MSG_PUB.initialize;
9129 
9130     END IF;
9131 
9132 
9133 --  Set API return status to success
9134 
9135     p_return_status := FND_API.G_RET_STS_SUCCESS;
9136 
9137     create_project( p_api_version_number                 => p_api_version_number
9138            ,p_commit      => FND_API.G_FALSE
9139            ,p_init_msg_list    => FND_API.G_FALSE
9140        ,p_msg_count      => p_msg_count
9141        ,p_msg_data      => p_msg_data
9142        ,p_return_status                  => l_return_status
9143        ,p_workflow_started    => p_workflow_started
9144        ,p_pm_product_code    => p_pm_product_code
9145        ,p_op_validate_flag   => p_op_validate_flag--added by rtarway 4218977
9146        ,p_project_in                  => g_project_in_rec
9147        ,p_project_out                  => g_project_out_rec
9148        ,p_key_members    => g_key_members_in_tbl
9149        ,p_class_categories    => g_class_categories_in_tbl
9150        ,p_tasks_in      => g_tasks_in_tbl
9151        ,p_tasks_out      => g_tasks_out_tbl
9152 -- anlee org role changes
9153                    ,p_org_roles                 => g_org_roles_in_tbl
9154                    ,p_structure_in              => G_structure_in_rec
9155       --bug 3096203
9156        ,p_ext_attr_tbl_in      => G_ext_attr_in_tbl
9157       --bug 3096203
9158 --FP M : deliverables
9159       ,p_deliverables_in          => G_deliverables_in_tbl
9160 --      ,p_deliverables_out         => G_deliverables_out_tbl
9161       ,p_deliverable_actions_in   => G_deliverable_actions_in_tbl
9162 --      ,p_deliverable_actions_out  => G_deliverable_actions_out_tbl
9163 --FP M : deliverables
9164     );
9165 
9166 
9167      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
9168       THEN
9169 
9170       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9171 
9172       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
9173       THEN
9174 
9175       RAISE FND_API.G_EXC_ERROR;
9176       END IF;
9177 
9178   --assign appropriate values to outgoing parameters
9179         IF g_project_out_rec.pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
9180      p_pa_project_id   := NULL;
9181         ELSE
9182      p_pa_project_id   := g_project_out_rec.pa_project_id;
9183         END IF;
9184         IF g_project_out_rec.pa_project_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9185      p_pa_project_number   := NULL;
9186         ELSE
9187      p_pa_project_number   := g_project_out_rec.pa_project_number;
9188         END IF;
9189 
9190   IF FND_API.to_boolean( p_commit )
9191   THEN
9192     COMMIT;
9193   END IF;
9194 
9195 
9196 EXCEPTION
9197 
9198   WHEN FND_API.G_EXC_ERROR
9199   THEN
9200   ROLLBACK TO execute_create_project_pub;
9201 
9202   p_return_status := FND_API.G_RET_STS_ERROR;
9203 
9204   -- 4537865
9205   p_workflow_started    := NULL ;
9206   p_pa_project_id    := NULL ;
9207   p_pa_project_number  := NULL ;
9208   -- 4537865
9209 
9210   FND_MSG_PUB.Count_And_Get
9211       (   p_count    =>  p_msg_count  ,
9212           p_data    =>  p_msg_data  );
9213 
9214   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9215   THEN
9216   ROLLBACK TO execute_create_project_pub;
9217 
9218   -- 4537865
9219   p_workflow_started    := NULL ;
9220   p_pa_project_id    := NULL ;
9221   p_pa_project_number  := NULL ;
9222   -- 4537865
9223 
9224   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9225 
9226   FND_MSG_PUB.Count_And_Get
9227       (   p_count    =>  p_msg_count  ,
9228           p_data    =>  p_msg_data  );
9229 
9230   WHEN OTHERS THEN
9231   ROLLBACK TO execute_create_project_pub;
9232 
9233   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9234 
9235   -- 4537865
9236   p_workflow_started    := NULL ;
9237   p_pa_project_id    := NULL ;
9238   p_pa_project_number  := NULL ;
9239   -- 4537865
9240 
9241   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9242   THEN
9243     FND_MSG_PUB.add_exc_msg
9244         ( p_pkg_name    => G_PKG_NAME
9245         , p_procedure_name  => l_api_name  );
9246 
9247   END IF;
9248 
9249   FND_MSG_PUB.Count_And_Get
9250       (   p_count    =>  p_msg_count  ,
9251           p_data    =>  p_msg_data  );
9252 
9253 END execute_create_project;
9254 
9255 --------------------------------------------------------------------------------
9256 --Name:               fetch_task
9257 --Type:               Procedure
9258 --Description:        This procedure can be used to get the task related output data
9259 --           to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
9260 --
9261 --Called subprograms:
9262 --
9263 --
9264 --
9265 --History:
9266 --    19-AUG-1996        L. de Werker    Created
9267 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
9268 --
9269 
9270 PROCEDURE fetch_task
9271 ( p_api_version_number    IN  NUMBER
9272  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
9273  ,p_return_status    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
9274  ,p_task_index      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9275  ,p_pa_task_id      OUT  NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
9276  ,p_pm_task_reference    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
9277  ,p_task_return_status    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
9278     )
9279 IS
9280 
9281    l_api_name      CONSTANT  VARCHAR2(30)     := 'fetch_task';
9282    l_index          NUMBER;
9283    i            NUMBER;
9284 
9285 BEGIN
9286 
9287 --  Standard begin of API savepoint
9288 
9289     SAVEPOINT fetch_task_pub;
9290 
9291 --  Standard call to check for call compatibility.
9292 
9293     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
9294                                p_api_version_number  ,
9295                                l_api_name         ,
9296                                G_PKG_NAME         )
9297     THEN
9298 
9299   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9300 
9301     END IF;
9302 
9303 --  Initialize the message table if requested.
9304 
9305     IF FND_API.TO_BOOLEAN( p_init_msg_list )
9306     THEN
9307 
9308   FND_MSG_PUB.initialize;
9309 
9310     END IF;
9311 
9312 --  Set API return status to success
9313 
9314     p_return_status := FND_API.G_RET_STS_SUCCESS;
9315 
9316 --  Check Task index value, when they don't provide an index we will error out
9317     IF p_task_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9318     OR p_task_index IS NULL
9319     THEN
9320   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9321   THEN
9322          pa_interface_utils_pub.map_new_amg_msg
9323            ( p_old_message_code => 'PA_INDEX_NOT_PROVIDED'
9324             ,p_msg_attribute    => 'CHANGE'
9325             ,p_resize_flag      => 'N'
9326             ,p_msg_context      => 'GENERAL'
9327             ,p_attribute1       => ''
9328             ,p_attribute2       => ''
9329             ,p_attribute3       => ''
9330             ,p_attribute4       => ''
9331             ,p_attribute5       => '');
9332   END IF;
9333 
9334   p_return_status := FND_API.G_RET_STS_ERROR;
9335   RAISE FND_API.G_EXC_ERROR;
9336     ELSE
9337   l_index := p_task_index;
9338     END IF;
9339   If G_Tasks_out_tbl.exists(l_index) THEN
9340 --  assign global table fields to the outgoing parameter
9341 --  we don't want to return the big number G_PA_MISS_NUM
9342 
9343     IF G_tasks_out_tbl(l_index).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9344   THEN
9345     p_pa_task_id := NULL;
9346   ELSE
9347 
9348        p_pa_task_id         := G_tasks_out_tbl(l_index).pa_task_id;
9349 
9350   END IF;
9351 
9352      p_pm_task_reference    := G_tasks_out_tbl(l_index).pm_task_reference;
9353      p_task_return_status    := G_tasks_out_tbl(l_index).return_status;
9354 
9355 END IF;
9356 
9357 EXCEPTION
9358 
9359   WHEN FND_API.G_EXC_ERROR
9360   THEN
9361   ROLLBACK TO fetch_task_pub;
9362 
9363   p_return_status := FND_API.G_RET_STS_ERROR;
9364 
9365   -- 4537865
9366   p_pa_task_id  := NULL ;
9367   p_pm_task_reference := NULL ;
9368   p_task_return_status := FND_API.G_RET_STS_ERROR ;
9369   -- 4537865
9370 
9371 
9372   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9373   THEN
9374   ROLLBACK TO fetch_task_pub;
9375 
9376   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9377 
9378   -- 4537865
9379   p_pa_task_id  := NULL ;
9380   p_pm_task_reference := NULL ;
9381   p_task_return_status := FND_API.G_RET_STS_ERROR ;
9382   -- 4537865
9383 
9384 
9385   WHEN OTHERS THEN
9386   ROLLBACK TO fetch_task_pub;
9387 
9388   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9389 
9390   -- 4537865
9391   p_pa_task_id  := NULL ;
9392   p_pm_task_reference := NULL ;
9393   p_task_return_status := FND_API.G_RET_STS_ERROR ;
9394   -- 4537865
9395 
9396   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9397   THEN
9398     FND_MSG_PUB.add_exc_msg
9399         ( p_pkg_name    => G_PKG_NAME
9400         , p_procedure_name  => l_api_name  );
9401 
9402   END IF;
9403 
9404 
9405 END fetch_task;
9406 
9407 --------------------------------------------------------------------------------
9408 --Name:               clear_project
9409 --Type:               Procedure
9410 --Description:        This procedure can be used to clear the global PL/SQL
9411 --          tables that are used by a LOAD/EXECUTE/FETCH cycle.
9412 --
9413 --
9414 --Called subprograms: init_project
9415 --
9416 --
9417 --
9418 --History:
9419 --    20-AUG-1996        L. de Werker    Created
9420 --    30-AUG-1996   L. de Werker   Parameterlist removed.
9421 --    10-JAN-1997   L. de Werker   Changed name from CLEAR_CREATE_PROJECT to CLEAR_PROJECT
9422 --
9423 PROCEDURE clear_project
9424 
9425 IS
9426 
9427    l_api_name      CONSTANT  VARCHAR2(30)     := 'clear_project';
9428 
9429 BEGIN
9430 
9431 
9432    init_project;
9433 
9434 
9435 END clear_project;
9436 
9437 --------------------------------------------------------------------------------
9438 --Name:               Update_Project
9439 --Type:                 Procedure
9440 --Description:   This procedure can be used to update a project
9441 --
9442 --
9443 --Called subprograms: PA_PROJECT_STUS_UTILS.Check_Wf_Enabled
9444 --
9445 --
9446 --
9447 --History:
9448 --    31-JUL-1996       R. Krishnamurthy      - Created
9449 --    03-DEC-1996  L. de Werker  - Debugged errors + added checking of NULL values.
9450 --    05-DEC-1996  L. de Werker  - Added WHO columns update in dynamic SQL string
9451 --    06-DEC-1996  L. de Werker  - Added locking mechanism
9452 --    30-SEP-97    jwhite    - Workflow had been added in XX-AUG-97. I made
9453 --            fixes as per unit testing.
9454 --    22-DEC-97    jwhite    - Added OUT-parameter p_workflow_started
9455 --             for workflow.
9456 --    03-MAY-2000       Rakesh Raghavan - Fixed Bug # 1289156.
9457 -- 12-JUL-2000 Mohnish
9458 --             added code for ROLE BASED SECURITY:
9459 --             added the call to PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY
9460 --  19-JUL-2000 Mohnish incorporated PA_PROJECT_PARTIES_PUB API changes
9461 --  23-MAY-2002 MAansari Added call to create_default_task_structure
9462 --  15-MAR-2003 SRAMESH   - Added an OR condition for the bug 2846478
9463 --                          in the before the update_project_party call in
9464 --                          the procedure CHECK_FOR_ONE_MANAGER_PVT.
9465 --  26-MAR-2003 SRAMESH  - Added calls for the the procedures Check_Schedule_type and Validate_Schedule_Values.
9466 --                         the procedure update_project
9467 --                       - Also added the update statements for the columns
9468 --                       LABOR_SCHEDULE_FIXED_DATE , LABOR_SCHEDULE_DISCOUNT, NON_LABOR_STD_BILL_RATE_SCHDL
9469 --                       NON_LABOR_BILL_RATE_ORG_ID, NON_LABOR_SCHEDULE_FIXED_DATE, NON_LABOR_SCHEDULE_DISCOUNT
9470 --                       REV_IND_RATE_SCH_ID, INV_IND_RATE_SCH_ID, REV_IND_SCH_FIXED_DATE, INV_IND_SCH_FIXED_DATE
9471 -- Default value for p_structure_type is financial
9472 --Logic used to derive the struture version id
9473 -- If p_structure_type is financial then
9474 --      If Split case then
9475 --           Get the version id of the published structure
9476 --           If no published structure Then
9477 --                Get the version id of the Working Structure
9478 --      IF Shared case and Versioning disabled then
9479 --           Get the version id of the published structure
9480 --           If no published structure Then
9481 --                Get the version id of the Working Structure
9482 --      IF Shared case and versioning enabled but no published version exists then
9483 --           Get the version id of the Working Structure
9484 --      IF Shared case and versioning enabled and published version exists then
9485 --           populate the l_structure_type as 'WORKPLAN'
9486 --Else IF p_structure_type is WORKPLAN then
9487 --     IF Shared case Then
9488 --           Throw an error PA_PS_WP_NOT_SEP_FN
9489 --     IF Split Case and Versioning disabled then
9490 --           Get the version id of the published structure
9491 --     IF Split Case and Versioning Enabled then
9492 --           IF No working versions then
9493 --                create a working version
9494 --           Else
9495 --                get the version id of the last updated working version
9496 --     IF Unable to get version Id
9497 --        Throw an error PA_PS_STRUC_VER_REQ
9498 --End if
9499 --      19-may-2003     sramesh         -Fixed the bug 2910972.Defaulting of the key member start
9500 --                                       date
9501 --      10-jun-2003     sramesh        -Fixed the bug 2891513.Added the conditions before the update statement
9502 --                                      of revaluate_funding_flag and include_gains_losses_flag in the
9503 --                                      update_project API.
9504 --    15-jul-2003      sramesh        -- Added the code for bug 2982057.
9505 --                                       Changed the logic to populate the long_task_name
9506 --                                       with task_name when the long_task_name is null.
9507 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
9508 --                                        dependency_type and lag days to tasks and create dependencies.
9509 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
9510 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
9511 --          17-Mar-2006 sunkalya        - Bug#5210872.Modified the update logic for
9512 --                                        the parameter 'probability_member_id'.Change tagged with Bug#5210872.
9513 --          18-May-2006  vkadimes       - Bug 5188246 Added validation for output_tax_code and retention_tax_code .
9514 --                                        Changes are tagged with Bug No.
9515 PROCEDURE Update_Project
9516 ( p_api_version_number    IN  NUMBER
9517  ,p_commit      IN  VARCHAR2  := FND_API.G_FALSE
9518  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
9519  ,p_msg_count      OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
9520  ,p_msg_data      OUT  NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
9521  ,p_return_status    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
9522  ,p_workflow_started    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
9523  ,p_pm_product_code    IN  VARCHAR2
9524  ,p_op_validate_flag   IN varchar2 := 'Y'
9525  ,p_project_in      IN  pa_project_pub.project_in_rec_type
9526  ,p_project_out      OUT NOCOPY  pa_project_pub.project_out_rec_type /*added the nocopy check for the 2674619*/
9527  /* Added for tracking bug - add customers */
9528  ,p_customers_in     IN  pa_project_pub.customer_tbl_type := G_customers_in_tbl
9529 /* Added Default Value for p_key_members and p_class_categories*/
9530  ,p_key_members      IN  pa_project_pub.project_role_tbl_type := G_key_members_in_tbl
9531  ,p_class_categories    IN  pa_project_pub.class_category_tbl_type := G_class_categories_in_tbl
9532  ,p_tasks_in      IN  pa_project_pub.task_in_tbl_type
9533  ,p_tasks_out      OUT NOCOPY  pa_project_pub.task_out_tbl_type /*added the nocopy check for the bug 2674619*/
9534 -- anlee org role changes
9535  ,p_org_roles                   IN      pa_project_pub.project_role_tbl_type := G_org_roles_in_tbl
9536 --project structures
9537  ,p_structure_in                IN      structure_in_rec_type := G_structure_in_rec
9538  ,p_ext_attr_tbl_in             IN   PA_EXT_ATTR_TABLE_TYPE := G_ext_attr_in_tbl
9539 -- ,p_structure_out               OUT     structure_out_rec_type
9540  ,p_pass_entire_structure       IN      VARCHAR2 := 'N'  -- Added for bug 3548473  : Bug 3627124
9541  -- If user passes entire strucutre in p_structure_in rec type, p_pass_entire_structure should be set to 'Y'.
9542 --project structures
9543 --FP M : deliverables
9544  ,p_deliverables_in           IN  deliverable_in_tbl_type := G_deliverables_in_tbl -- 3435905 passing default
9545 -- ,p_deliverables_out          OUT NOCOPY  deliverable_out_tbl_type -- 3435905 removed out parameter
9546  ,p_deliverable_actions_in    IN  action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
9547 -- ,p_deliverable_actions_out   OUT NOCOPY  action_out_tbl_type -- 3435905 removed out parameter
9548 --FP M : deliverables
9549  ,p_update_mode               IN VARCHAR2 := 'PA_UPD_WBS_ATTR' --rtarway, for DHI ER, BUG 4413568  --bug 4534919
9550 ) IS
9551 
9552  -- Added for bug 5222506
9553  CURSOR l_cur_calendar_id(l_calendar_id NUMBER) IS
9554  SELECT 'Y' FROM  jtf_calendars_vl  WHERE
9555  trunc(nvl(end_date_active, sysdate)) >= trunc(sysdate)
9556  AND calendar_id= l_calendar_id;
9557 
9558 -- Added for Bug 5225146
9559   CURSOR l_cur_project_rate_type (l_project_rate_type VARCHAR )IS
9560   SELECT 'Y' FROM  pa_conversion_types_v
9561   WHERE  conversion_type <> 'User' AND  user_conversion_type = l_project_rate_type;
9562 
9563   -- Added for Bug 5188246
9564    CURSOR l_cur_retention_tax_code (l_retention_tax_code VARCHAR ) IS
9565    SELECT 'Y' FROM pa_output_tax_code_setup_v
9566    WHERE tax_code = l_retention_tax_code;
9567    --needed to get default data of a project using it's ID
9568    CURSOR  l_project_csr
9569     (l_pa_project_id NUMBER)
9570    IS
9571    SELECT   *
9572    FROM    pa_projects p
9573    WHERE  p.project_id = l_pa_project_id;
9574 
9575 /**************************************
9576 **  The following cursor l_get_org_csr is not used anywhere in this
9577     package. So commenting this cursor for changes made for
9578     Non-mergable to Mergable View .      ***
9579 ***************************************
9580 
9581    CURSOR l_get_org_csr (l_org_id NUMBER )
9582 
9583    IS
9584    SELECT organization_id
9585    FROM   pa_organizations_project_v
9586    WHERE organization_id = l_org_id
9587    AND   active_flag = 'N';
9588 
9589 ****************************************/
9590 
9591    CURSOR l_get_dist_rule_csr (l_dist_rule VARCHAR2, l_project_type VARCHAR2)
9592    IS
9593    SELECT 'x'
9594    FROM   pa_project_type_distributions d
9595    WHERE d.project_type = l_project_type
9596    AND   d.distribution_rule = l_dist_rule;
9597 
9598    CURSOR l_min_task_start_date_csr (l_project_id NUMBER) IS
9599    SELECT MIN(start_date)
9600    FROM pa_tasks
9601    WHERE project_id = l_project_id
9602    AND   start_date IS NOT NULL;
9603 
9604    CURSOR l_max_task_end_date_csr (l_project_id NUMBER) IS
9605    SELECT MAX(completion_date)
9606    FROM pa_tasks
9607    WHERE  project_id = l_project_id
9608    AND    completion_date IS NOT NULL;
9609 
9610    --needed to get the project_type_class_code and service_type_code associated
9611    --with the project_type
9612 
9613    CURSOR       l_project_type_csr
9614                 (p_pa_project_id NUMBER)
9615    IS
9616    SELECT       pt.project_type_class_code
9617    ,            pt.service_type_code
9618    ,            pt.revaluate_funding_flag  /*Bug 2891513 : selecting the columns revaluate_funding_flag and include_gains_losses_flag*/
9619    ,            pt.include_gains_losses_flag
9620    FROM         pa_project_types pt
9621    ,            pa_projects p
9622    WHERE        p.project_type = pt.project_type
9623    AND          p.project_id = p_pa_project_id;
9624 
9625    --needed to check whether given project number is unique
9626    CURSOR   l_project_number_unique_csr( p_project_number VARCHAR2)
9627    IS
9628    SELECT   'x'
9629    FROM     pa_projects_all
9630    WHERE    segment1 = p_project_number;
9631 
9632    --needed to check whether given project name is unique
9633    CURSOR   l_project_name_unique_csr( p_project_name VARCHAR2)
9634    IS
9635    SELECT   'x'
9636    FROM     pa_projects_all
9637    WHERE    name = p_project_name;
9638 
9639    --needed to check whether given long name is unique
9640    CURSOR   l_long_name_unique_csr( p_long_name VARCHAR2)
9641    IS
9642    SELECT   'x'
9643    FROM     pa_projects_all
9644    WHERE    long_name = p_long_name;
9645 
9646    /* Modidified the cursor l_key_member_csr to add start_date_active as logical
9647      primary key */
9648    CURSOR l_key_member_csr (l_project_id NUMBER,l_person_id NUMBER,
9649                             l_role_type  VARCHAR2 ,
9650                 l_start_date_active DATE)
9651    IS
9652    SELECT  pa_project_players.*  --,rowid   /*rowid id commented for bug 1939295 */
9653    FROM    pa_project_players
9654    WHERE   project_id        = l_project_id
9655    AND     person_id         = l_person_id
9656    AND     project_role_type = l_role_type
9657    AND     start_date_active = l_start_date_active;
9658 
9659 /*Customer Account Relationships -CAR changes*/
9660 
9661   Cursor Cur_Customer(x_project_id NUMBER,l_customer_id in number) IS
9662   Select pa_project_customers.*
9663   From pa_project_customers
9664   where project_id=x_project_id
9665   and customer_id=l_customer_id;
9666 
9667 /*CAR changes end*/
9668 
9669 
9670    CURSOR l_class_categories_csr (l_project_id NUMBER,
9671                                   l_class_category VARCHAR2 )
9672    IS
9673    SELECT class_code
9674    FROM pa_project_classes
9675    WHERE project_id     = l_project_id
9676    AND   class_category = l_class_category;
9677 
9678    CURSOR l_get_task_csr (l_project_id NUMBER,l_pm_task_reference VARCHAR2) IS
9679    SELECT task_id FROM
9680    pa_tasks
9681    WHERE project_id  = l_project_id
9682    AND pm_task_reference = l_pm_task_reference;
9683 
9684    --needed to get the data of the project manager that might conflict with this new project manager
9685 
9686    CURSOR l_project_man_current_csr (p_project_id NUMBER, p_start_date DATE )
9687    IS
9688    SELECT person_id,
9689           start_date_active,
9690           end_date_active
9691    FROM   pa_project_players
9692    WHERE  project_id = p_project_id
9693    AND    project_role_type = 'PROJECT MANAGER'
9694    AND    nvl(end_date_active,p_start_date) >= p_start_date;
9695 
9696 
9697 /* bug 4541103
9698    CURSOR l_lock_rows_csr( p_project_id NUMBER)
9699    IS
9700    SELECT 'x'
9701    FROM    pa_projects p
9702    WHERE  p.project_id = p_project_id
9703    FOR UPDATE OF p.project_id NOWAIT;
9704 */
9705 
9706 -- anlee org role changes
9707 
9708 -- 3693229 start
9709 -- for peformance fix changed the below cursor definition
9710 -- earlier select was quering on view
9711 -- now, select is directly retrieving the data from the tables
9712 -- for more detail please refer bug
9713 /*
9714 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9715                             l_role_type  VARCHAR2 )
9716    IS
9717    SELECT  *
9718    FROM    pa_project_parties_v
9719    WHERE   project_id                 = l_project_id
9720    AND     resource_source_id         = l_resource_source_id
9721    AND     project_role_type          = l_role_type
9722    AND     party_type                 = 'ORGANIZATION';
9723 */
9724 
9725 -- 4656866 commented below cursor
9726 
9727 /*
9728 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9729                             l_role_type  VARCHAR2 )
9730    IS
9731    SELECT
9732      ppp.project_party_id PROJECT_PARTY_ID,
9733      ppp.object_id OBJECT_ID,
9734      ppp.object_type OBJECT_TYPE,
9735      ppp.project_id PROJECT_ID,
9736      ppp.resource_id RESOURCE_ID,
9737      ppp.resource_type_id RESOURCE_TYPE_ID,
9738      ppp.resource_source_id RESOURCE_SOURCE_ID,
9739      hzo.party_name RESOURCE_SOURCE_NAME,
9740      ppp.project_role_id PROJECT_ROLE_ID,
9741      pprt.project_role_type PROJECT_ROLE_TYPE,
9742      pprt.meaning PROJECT_ROLE_MEANING,
9743      pprt.role_party_class ROLE_PARTY_CLASS,
9744      ppp.start_date_active START_DATE_ACTIVE,
9745      ppp.end_date_active END_DATE_ACTIVE,
9746      ppp.scheduled_flag SCHEDULED_FLAG,
9747      ppp.record_version_number RECORD_VERSION_NUMBER,
9748      ppa.start_date PROJECT_START_DATE,
9749      ppa.completion_date PROJECT_END_DATE,
9750      ppp.grant_id GRANT_ID,
9751      -999 ASSIGNMENT_ID,
9752      -999 ASSIGN_RECORD_VERSION_NUMBER,
9753      'N' PENDING_APPROVAL,
9754      -999 ORGANIZATION_ID,
9755      NULL ORGANIZATION_NAME,
9756      hzcp.phone_area_code || decode(hzcp.phone_number,NULL,NULL,decode(hzcp.phone_area_code,NULL,hzcp.phone_number,'-' || hzcp.phone_number) )  || decode(hzcp.phone_extension,NULL,NULL,'+' || hzcp.phone_extension) PHONE_NUMBER,
9757      hzo.email_address EMAIL_ADDRESS,
9758      NULL JOB_TITLE,
9759      'ORGANIZATION' PARTY_TYPE,
9760      PA_PROJECT_PARTIES_UTILS.ACTIVE_PARTY(PPP.START_DATE_ACTIVE,PPP.END_DATE_ACTIVE) ACTIVE,
9761      NULL USER_NAME,
9762      -999 USER_ID,
9763      ppp.resource_source_id RESOURCE_PARTY_ID
9764     FROM pa_project_parties ppp,
9765          pa_projects_all ppa,
9766          pa_project_role_types_vl pprt,
9767          hz_parties hzo,
9768          hz_contact_points hzcp
9769     WHERE ppp.resource_type_id = 112
9770      AND ppp.project_id = ppa.project_id
9771      AND ppp.project_role_id = pprt.project_role_id
9772      AND ppp.resource_source_id = hzo.party_id
9773      AND hzo.party_type = 'ORGANIZATION'
9774      AND hzcp.owner_table_name (+)= 'HZ_PARTIES'
9775      AND hzcp.owner_table_id (+)= hzo.party_id
9776      AND hzcp.contact_point_type (+)= 'PHONE'
9777      AND hzcp.phone_line_type (+)= 'GEN'
9778      AND hzcp.primary_flag (+)= 'Y'
9779      and PPA.project_id                = l_project_id
9780      AND PPP.resource_source_id        = l_resource_source_id
9781      AND PPRT.project_role_type        = l_role_type;
9782 */
9783 
9784 -- Added same cursor with changed select query , removed hz_contact_points references
9785 -- using hz_parties columns for primary phone number details
9786 -- ( like primary_phone_area_code , primary_phone_number , primary_phone_extension )
9787 -- for more refer bug description
9788 
9789 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9790                             l_role_type  VARCHAR2 )
9791    IS
9792    SELECT
9793      ppp.project_party_id PROJECT_PARTY_ID,
9794      ppp.object_id OBJECT_ID,
9795      ppp.object_type OBJECT_TYPE,
9796      ppp.project_id PROJECT_ID,
9797      ppp.resource_id RESOURCE_ID,
9798      ppp.resource_type_id RESOURCE_TYPE_ID,
9799      ppp.resource_source_id RESOURCE_SOURCE_ID,
9800      hzo.party_name RESOURCE_SOURCE_NAME,
9801      ppp.project_role_id PROJECT_ROLE_ID,
9802      pprt.project_role_type PROJECT_ROLE_TYPE,
9803      pprt.meaning PROJECT_ROLE_MEANING,
9804      pprt.role_party_class ROLE_PARTY_CLASS,
9805      ppp.start_date_active START_DATE_ACTIVE,
9806      ppp.end_date_active END_DATE_ACTIVE,
9807      ppp.scheduled_flag SCHEDULED_FLAG,
9808      ppp.record_version_number RECORD_VERSION_NUMBER,
9809      ppa.start_date PROJECT_START_DATE,
9810      ppa.completion_date PROJECT_END_DATE,
9811      ppp.grant_id GRANT_ID,
9812      -999 ASSIGNMENT_ID,
9813      -999 ASSIGN_RECORD_VERSION_NUMBER,
9814      'N' PENDING_APPROVAL,
9815      -999 ORGANIZATION_ID,
9816      NULL ORGANIZATION_NAME,
9817      hzo.primary_phone_area_code || decode(hzo.primary_phone_number,NULL,NULL,decode(hzo.primary_phone_area_code,NULL,hzo.primary_phone_number,'-' || hzo.primary_phone_number) )
9818         || decode(hzo.primary_phone_extension,NULL,NULL,'+' || hzo.primary_phone_extension) PHONE_NUMBER,
9819      hzo.email_address EMAIL_ADDRESS,
9820      NULL JOB_TITLE,
9821      'ORGANIZATION' PARTY_TYPE,
9822      PA_PROJECT_PARTIES_UTILS.ACTIVE_PARTY(PPP.START_DATE_ACTIVE,PPP.END_DATE_ACTIVE) ACTIVE,
9823      NULL USER_NAME,
9824      -999 USER_ID,
9825      ppp.resource_source_id RESOURCE_PARTY_ID
9826     FROM pa_project_parties ppp,
9827          pa_projects_all ppa,
9828          pa_project_role_types_vl pprt,
9829          hz_parties hzo
9830     WHERE ppp.resource_type_id = 112
9831      AND ppp.project_id = ppa.project_id
9832      AND ppp.project_role_id = pprt.project_role_id
9833      AND ppp.resource_source_id = hzo.party_id
9834      AND hzo.party_type = 'ORGANIZATION'
9835      and PPA.project_id                = l_project_id
9836      AND PPP.resource_source_id        = l_resource_source_id
9837      AND PPRT.project_role_type        = l_role_type;
9838 
9839 -- 4656866 end
9840 
9841 -- 3693229 end
9842 
9843 --Cursor to get the current published version when structure type and project id is known
9844 CURSOR cur_struc_ver_fin(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
9845    IS
9846     SELECT c.element_version_id
9847        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
9848             ,pa_proj_elem_ver_structure d
9849       WHERE c.project_id = c_project_id
9850         AND a.structure_type_id = b.structure_type_id
9851         AND b.proj_element_id = c.proj_element_id
9852         AND a.structure_type = c_structure_type
9853      AND d.project_id = c.project_id
9854         AND d.element_version_id = c.element_version_id
9855         AND d.status_code = 'STRUCTURE_PUBLISHED'
9856         AND d.latest_eff_published_flag = 'Y';
9857 
9858 --Cursor to get the working version when structure type and project id is known
9859 CURSOR cur_struc_ver_wp(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
9860    IS
9861      SELECT c.element_version_id
9862        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
9863             ,pa_proj_elem_ver_structure d
9864       WHERE c.project_id = c_project_id
9865         AND a.structure_type_id = b.structure_type_id
9866         AND b.proj_element_id = c.proj_element_id
9867         AND a.structure_type = c_structure_type
9868         AND d.project_id = c.project_id
9869         AND d.element_version_id = c.element_version_id
9870         AND d.status_code = 'STRUCTURE_WORKING';
9871 
9872 -- Cursor to get the Project's System Status Code Bug 3611598
9873  CURSOR c_project_sys_status_code IS
9874        SELECT project_system_status_code
9875        FROM PA_PROJECT_STATUSES sta,PA_PROJECTS_ALL pa
9876        WHERE pa.project_id = p_project_in.pa_project_id
9877          AND sta.project_status_code = pa.project_status_code;
9878 
9879 TYPE deferred_tasks_rec IS RECORD
9880 (task_index  NUMBER);
9881 
9882 TYPE deferred_tasks_tbl_typ IS TABLE OF deferred_tasks_rec
9883         INDEX BY BINARY_INTEGER;
9884 
9885 l_dummy_calendar_id   VARCHAR2(1) := 'N' ; -- Added for bug 5222506
9886 l_dummy_project_rate_type VARCHAR2(1) :='N'; -- Added For bug 5225146
9887 l_dummy_cur_retention_tax_code VARCHAR2(1) :='N';
9888 l_dummy_cur_output_tax_code VARCHAR2(1) :='N'; -- Added For Bug 5188246.
9889 l_status_code         PA_PROJECT_STATUSES.project_system_status_code%TYPE; -- Bug 3611598
9890 l_deferred_tasks_index_tbl  deferred_tasks_tbl_typ;
9891 
9892 l_project_rec          pa_projects%ROWTYPE;
9893 l_project_in_rec        pa_project_pub.project_in_rec_type;
9894 l_temp_org_id                       NUMBER;
9895 l_temp                              VARCHAR2(1);
9896 
9897 l_api_name              CONSTANT    VARCHAR2(30):=  'update_project';
9898 j            NUMBER;
9899 i            NUMBER;
9900 
9901 l_tasks_out          pa_project_pub.task_out_tbl_type;
9902 l_return_status                     VARCHAR2(1);
9903 
9904 l_err_code                          NUMBER := 0;
9905 l_err_stage                         VARCHAR2(2000);
9906 l_err_stack                         VARCHAR2(2000);
9907 l_dummy            VARCHAR2(1);
9908 
9909 l_project_id          NUMBER ;
9910 l_task_id          NUMBER ;
9911 l_cursor                            INTEGER;
9912 --l_statement                         VARCHAR2(2000);  --bug 2955326
9913 l_statement                         VARCHAR2(30000); --bug 2955326
9914 l_rows                              INTEGER;
9915 l_project_start_date                DATE;
9916 l_project_completion_date           DATE;
9917 l_max_task_date                     DATE;
9918 l_min_task_date          DATE;
9919 
9920 l_deferred_new_tasks_tbl            pa_project_pub.task_in_tbl_type;
9921 l_deferred_tasks_count              NUMBER := 0;
9922 l_added_task_tbl                    pa_project_pub.task_in_tbl_type;
9923 l_task_id_tbl                       pa_project_pub.task_out_tbl_type;
9924 l_count                             NUMBER;
9925 l_task_rec                          pa_project_pub.task_in_rec_type;
9926 l_project_type_class_code           pa_project_types.project_type_class_code%type;
9927 l_service_type_code                 pa_project_types.service_type_code%type;
9928 
9929 l_key_members_tbl              pa_project_pub.project_role_tbl_type;
9930 l_key_members_in_rec        pa_project_pub.project_role_rec_type;
9931 l_key_members_current_rec           l_key_member_csr%ROWTYPE;
9932 l_key_members_rec                   l_key_member_csr%ROWTYPE;
9933 l_project_man_current_rec      l_project_man_current_csr%ROWTYPE;
9934 
9935 /*Customer account relationships */
9936 
9937 Cur_Customer_rec                   Cur_Customer%ROWTYPE;
9938 l_bill_to_customer_id              Number;
9939 l_ship_to_customer_id              Number;
9940 l_bill_to_address_id                         NUMBER := NULL; --Initialized to NULL for Bug 3911782
9941 l_ship_to_address_id                         NUMBER := NULL; --Initialized to NULL for Bug 3911782
9942 l_bill_to_contact_id                         NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : BUg 4153629
9943 l_ship_to_contact_id                         NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : BUg 4153629
9944 /* Variables sadded for tracking bug */
9945 l_project_relationship_code           PA_PROJECT_CUSTOMERS.PROJECT_RELATIONSHIP_CODE%TYPE;
9946 l_customer_bill_split                 PA_PROJECT_CUSTOMERS.CUSTOMER_BILL_SPLIT%TYPE;
9947 l_customer_id        NUMBER;
9948  l_msg_index_out              NUMBER;
9949  tot_contribution     NUMBER;
9950  /* Variables sadded for tracking bug */
9951 /* Variables added for tracking bug 4153629*/
9952  l_bill_another_project_flag VARCHAR2(1);
9953  l_receiver_task_id NUMBER;
9954 /* Variables added for tracking bug 4153629*/
9955 /*CAR changes ends*/
9956 
9957 
9958 -- anlee org role changes
9959 l_org_roles_tbl                      pa_project_pub.project_role_tbl_type;
9960 l_org_roles_in_rec        pa_project_pub.project_role_rec_type;
9961 l_org_roles_current_rec             l_org_role_csr%ROWTYPE;
9962 l_org_roles_rec                     l_org_role_csr%ROWTYPE;
9963 
9964 l_class_categories_tbl              pa_project_pub.class_category_tbl_type ;
9965 l_temp_start_date                   DATE;
9966 l_temp_end_date                     DATE;
9967 l_update_yes_flag                   VARCHAR2(1) := 'N';
9968 l_out_pa_task_id                    NUMBER;
9969 l_out_pm_task_reference             VARCHAR2(30);
9970 l_update_start_date_flag      VARCHAR2(1);
9971 l_update_end_date_flag        VARCHAR2(1);
9972 l_class_code          VARCHAR2(30);
9973 l_msg_count          NUMBER ;
9974 l_msg_data          VARCHAR2(2000);
9975 l_function_allowed        VARCHAR2(1);
9976 l_resp_id          NUMBER := 0;
9977 l_user_id                NUMBER := 0;
9978 l_module_name                       VARCHAR2(80) := 'PA_PM_UPDATE_PROJECT';
9979 l_proceed_with_update_flag          VARCHAR2(1);
9980 l_array_index                       NUMBER := 0;
9981 l_temp_i          NUMBER := 0;
9982 l_orig_index          NUMBER := 0;
9983 l_text                  VARCHAR2(500);
9984 l_verify_ok_flag                    VARCHAR2(1);
9985 l_wf_enabled_flag                   VARCHAR2(1);
9986 l_err_msg_count                     NUMBER := 0;
9987 l_warnings_only_flag                VARCHAR2(1);
9988 l_project_status_changed            VARCHAR2(1) := 'N';
9989 l_closing_project                   VARCHAR2(1) := 'N';
9990 l_reopening_project                 VARCHAR2(1) := 'N';
9991 l_wf_status_code                    VARCHAR2(30) := 'IN_ROUTE';
9992 l_proj_num_numeric                  NUMBER;
9993 l_wf_type                           VARCHAR2(250);
9994 l_wf_item_type                           VARCHAR2(250);
9995 l_wf_process                             VARCHAR2(250);
9996 l_assignment_id                    NUMBER;
9997 l_task_id_out              NUMBER   := 0;
9998 l_amg_task_number       VARCHAR2(50);
9999 l_org_func_security     VARCHAR2(1);  /* Bug#1968394  */
10000 
10001 -- FP-M Bug # 3301192
10002 l_d_task_id NUMBER;
10003 l_d_task_ver_id NUMBER;
10004 l_d_struct_ver_id NUMBER;
10005 l_d_loop_count NUMBER;
10006 l_task_in_rec        task_in_rec_type;
10007 
10008 /*Variables added for bug 2802984*/
10009 
10010 l_out_labor_sch_type     VARCHAR2(1);
10011 l_out_nl_labor_sch_type   VARCHAR2(1);
10012 l_rev_rate_sch_type        VARCHAR2(1);
10013 l_inv_rate_sch_type       VARCHAR2(1);
10014 l_std_bill_rate_schedule   VARCHAR2(40);
10015 
10016 /*Bug# 2891513    : Added the local variables*/
10017 l_revaluate_funding  VARCHAR2(1);
10018 l_include_gains_and_losses VARCHAR2(1);
10019 /*Variables added for bug 2802984 ends*/
10020 
10021 --added  by rtarway FP.M Devlopment
10022 l_patask_record_version_number NUMBER;
10023 --added  by rtarway FP.M Devlopment
10024 --needed to get the field values associated to a AMG message
10025 
10026    CURSOR   l_amg_project_csr
10027       (p_pa_project_id pa_projects.project_id%type)
10028    IS
10029    SELECT   segment1
10030    FROM     pa_projects p
10031    WHERE p.project_id = p_pa_project_id;
10032 
10033    l_amg_segment1       VARCHAR2(25);
10034 
10035 p_multiple_task_msg        VARCHAR2(1) := 'T';
10036 x_return_status    VARCHAR2(255);
10037 x_msg_count        NUMBER;
10038 x_msg_data         VARCHAR2(2000);
10039 V_COMPLETION_DATE  DATE;
10040 v_null_char        VARCHAR2(1):=to_char(NULL);
10041 
10042 --Project Structures
10043 v_first_index      NUMBER;
10044 v_last_index       NUMBER;
10045 v_ref_task_id      NUMBER;
10046 v_parent_task_id      NUMBER;
10047 v_task_id             NUMBER;
10048 l_structure_version_id   NUMBER;
10049 l_structure_id   NUMBER;
10050 l_task_version_id        NUMBER;
10051 --Project Structures
10052 
10053 -- anlee
10054 -- Added for intermedia search
10055 l_ctx_proj_name VARCHAR2(30);
10056 l_ctx_proj_number VARCHAR2(25);
10057 l_ctx_long_name VARCHAR2(240);
10058 l_ctx_desc VARCHAR2(250);
10059 l_ctx_update_flag VARCHAR2(1);
10060 -- End of changes
10061 
10062 --bug 2738747
10063 l_structure_type          VARCHAR2(25);
10064 --bug 2738747
10065 
10066 --<Bug#2881768/>
10067 struct_ver_updatable    VARCHAR(1);
10068 
10069  --For Bug 2931183
10070 l_update_structure_version_id          pa_proj_element_versions.element_version_id%TYPE;
10071 l_debug_mode               varchar2(1);
10072 
10073  -- <EA>
10074  l_failed_row_id_list VARCHAR2(32767);
10075  l_errorcode      VARCHAR2(150);
10076  -- </EA>
10077 
10078 --bug 2955326
10079 l_b_segment1_flag            VARCHAR2(1) := 'N';
10080 l_b_proj_name_flag           VARCHAR2(1) := 'N';
10081 l_b_long_name_flag           VARCHAR2(1) := 'N';
10082 l_b_pm_proj_ref_flag         VARCHAR2(1) := 'N';
10083 l_b_co_org_id_flag           VARCHAR2(1) := 'N';
10084 l_b_pub_sec_flag             VARCHAR2(1) := 'N';
10085 l_b_dist_rule_flag           VARCHAR2(1) := 'N';
10086 l_b_desc_flag                VARCHAR2(1) := 'N';
10087 l_b_start_date_flag          VARCHAR2(1) := 'N';
10088 l_b_comp_date_flag           VARCHAR2(1) := 'N';
10089 l_b_early_sd_flag            VARCHAR2(1) := 'N';
10090 l_b_early_fd_flag            VARCHAR2(1) := 'N';
10091 l_b_late_sd_flag             VARCHAR2(1) := 'N';
10092 l_b_late_fd_flag             VARCHAR2(1) := 'N';
10093 l_b_sch_sd_flag              VARCHAR2(1) := 'N';
10094 l_b_sch_fd_flag              VARCHAR2(1) := 'N';
10095 l_b_attr_cat_flag            VARCHAR2(1) := 'N';
10096 l_b_attr1_flag               VARCHAR2(1) := 'N';
10097 l_b_attr2_flag               VARCHAR2(1) := 'N';
10098 l_b_attr3_flag               VARCHAR2(1) := 'N';
10099 l_b_attr4_flag               VARCHAR2(1) := 'N';
10100 l_b_attr5_flag               VARCHAR2(1) := 'N';
10101 l_b_attr6_flag               VARCHAR2(1) := 'N';
10102 l_b_attr7_flag               VARCHAR2(1) := 'N';
10103 l_b_attr8_flag               VARCHAR2(1) := 'N';
10104 l_b_attr9_flag               VARCHAR2(1) := 'N';
10105 l_b_attr10_flag              VARCHAR2(1) := 'N';
10106 l_b_output_tx_code_flag      VARCHAR2(1) := 'N';
10107 l_b_ret_tx_code_flag         VARCHAR2(1) := 'N';
10108 l_b_proj_cur_code_flag       VARCHAR2(1) := 'N';
10109 l_b_allow_x_chg_flag         VARCHAR2(1) := 'N';
10110 l_b_proj_rt_date_flag        VARCHAR2(1) := 'N';
10111 l_b_proj_rt_tp_flag          VARCHAR2(1) := 'N';
10112 l_cc_proc_lb_flag            VARCHAR2(1) := 'N';
10113 l_b_lb_tp_sch_id_flag        VARCHAR2(1) := 'N';
10114 l_b_lb_tp_fixed_dt_flag      VARCHAR2(1) := 'N';
10115 l_b_cc_proc_nl_flag          VARCHAR2(1) := 'N';
10116 l_b_nl_tp_sch_id_flag        VARCHAR2(1) := 'N';
10117 l_b_nl_tp_fx_dt_flag         VARCHAR2(1) := 'N';
10118 l_b_role_list_id_flag        VARCHAR2(1) := 'N';
10119 l_b_work_type_id_flag        VARCHAR2(1) := 'N';
10120 l_b_cal_id_flag              VARCHAR2(1) := 'N';
10121 l_b_loc_id_flag              VARCHAR2(1) := 'N';
10122 l_b_prob_memb_id_flag        VARCHAR2(1) := 'N';
10123 l_b_proj_value_flag          VARCHAR2(1) := 'N';
10124 l_b_exp_apprv_dt_flag        VARCHAR2(1) := 'N';
10125 l_b_cst_jb_gp_id_flag        VARCHAR2(1) := 'N';
10126 l_b_bill_jb_gp_id_flag       VARCHAR2(1) := 'N';
10127 l_b_emp_bill_rt_sch_id_flag  VARCHAR2(1) := 'N';
10128 l_b_jb_bill_rt_sch_id_flag   VARCHAR2(1) := 'N';
10129 l_b_comp_mtch_wt_flag        VARCHAR2(1) := 'N';
10130 l_b_avail_mtch_wt_flag       VARCHAR2(1) := 'N';
10131 l_b_jb_lvl_mt_wt_flag        VARCHAR2(1) := 'N';
10132 l_b_search_min_avail_flag    VARCHAR2(1) := 'N';
10133 l_b_srch_org_hier_id_flag    VARCHAR2(1) := 'N';
10134 l_b_srch_st_org_id_flag      VARCHAR2(1) := 'N';
10135 l_b_min_can_sc_req_for_nom   VARCHAR2(1) := 'N';
10136 /* l_b_nn_lb_std_bl_rt_sch_id_f VARCHAR2(1) := 'N'; Commented for bug #4630836 */
10137 l_b_proj_bil_xch_rt_flag     VARCHAR2(1) := 'N';
10138 l_b_pjfnc_bil_xch_rt_flag    VARCHAR2(1) := 'N';
10139 l_b_fnding_xch_rt_flag       VARCHAR2(1) := 'N';
10140 l_b_enable_auto_srch_flag    VARCHAR2(1) := 'N';
10141 l_b_srch_cntry_code_flag     VARCHAR2(1) := 'N';
10142 l_b_invproc_crncy_tp_flag    VARCHAR2(1) := 'N';
10143 l_b_revproc_crncy_cd_flag    VARCHAR2(1) := 'N';
10144 l_b_prj_bil_rt_dt_code_flag  VARCHAR2(1) := 'N';
10145 l_b_proj_bil_rt_tp_flag      VARCHAR2(1) := 'N';
10146 l_b_prjfnc_crncy_code_flag   VARCHAR2(1) := 'N';
10147 l_b_prjfnc_bil_rt_dt_cd_f    VARCHAR2(1) := 'N';
10148 l_b_prjfnc_bil_rt_tp_flag    VARCHAR2(1) := 'N';
10149 l_b_fndng_rt_dt_cd_flag      VARCHAR2(1) := 'N';
10150 l_b_fnding_rt_type_flag      VARCHAR2(1) := 'N';
10151 l_b_bsln_fnding_flag         VARCHAR2(1) := 'N';
10152 l_b_prjfnc_cst_rt_tp_flag    VARCHAR2(1) := 'N';
10153 l_b_inv_bill_txn_cur_flag    VARCHAR2(1) := 'N';
10154 l_b_multi_crncy_bil_flag     VARCHAR2(1) := 'N';
10155 l_b_prj_bil_rt_dt_flag       VARCHAR2(1) := 'N';
10156 l_b_prjfnc_bil_rt_dt_flag    VARCHAR2(1) := 'N';
10157 l_b_fnding_rt_dt_flag        VARCHAR2(1) := 'N';
10158 l_b_prjfnc_cst_rt_dt_flag    VARCHAR2(1) := 'N';
10159 l_b_asgn_prec_tsk_flag       VARCHAR2(1) := 'N';
10160 l_b_splt_cst_fm_wp_flag      VARCHAR2(1) := 'N';
10161 l_b_splt_cst_fm_bill_flag    VARCHAR2(1) := 'N';
10162 l_b_adv_act_set_id_flag      VARCHAR2(1) := 'N';
10163 l_b_st_adv_act_set_flag      VARCHAR2(1) := 'N';
10164 l_b_pri_code_flag            VARCHAR2(1) := 'N';
10165 l_b_retn_bil_inv_fmt_id_flg  VARCHAR2(1) := 'N';
10166 l_b_retn_acnt_flag           VARCHAR2(1) := 'N';
10167 l_b_reval_fndng_flag         VARCHAR2(1) := 'N';
10168 l_b_sec_lvl_flag             VARCHAR2(1) := 'N';
10169 l_b_lbr_disc_rsn_code_flg    VARCHAR2(1) := 'N';
10170 l_b_nn_lbr_disc_rsn_cd_flg   VARCHAR2(1) := 'N';
10171 l_b_inc_gn_los_flag          VARCHAR2(1) := 'N';
10172 
10173 l_b_lb_sch_tp_fg             VARCHAR2(1) := 'N';
10174 l_b_nn_lb_sch_tp_fg          VARCHAR2(1) := 'N';
10175 l_b_emp_bill_rt_sch_id_fg2   VARCHAR2(1) := 'N';
10176 l_b_jb_bill_rt_sch_id_fg2    VARCHAR2(1) := 'N';
10177 l_b_lb_sch_fx_dt_fg          VARCHAR2(1) := 'N';
10178 l_b_lb_sch_dsct_fg           VARCHAR2(1) := 'N';
10179 l_b_lb_disc_rn_cd_fg2        VARCHAR2(1) := 'N';
10180 l_b_rv_ind_rt_sch_id_fg      VARCHAR2(1) := 'N';
10181 l_b_inv_ind_rt_sch_id_fg     VARCHAR2(1) := 'N';
10182 l_b_ind_sch_fx_dt_fg         VARCHAR2(1) := 'N';
10183 l_b_inv_ind_sch_fx_dt_fg     VARCHAR2(1) := 'N';
10184 l_b_nn_lb_bill_rt_org_id_fg  VARCHAR2(1) := 'N';
10185 l_b_n_lb_st_bl_rt_sc_id_fg2  VARCHAR2(1) := 'N';
10186 l_b_nn_lb_sch_fx_dt_fg       VARCHAR2(1) := 'N';
10187 l_b_nn_lb_sch_dst_fg         VARCHAR2(1) := 'N';
10188 l_b_n_lb_disc_rsn_cd_fg2     VARCHAR2(1) := 'N';
10189 l_b_as_alloc_mth_fg          VARCHAR2(1) := 'N';
10190 l_b_cp_evt_proc_fg           VARCHAR2(1) := 'N';
10191 l_b_cint_rt_sch_id_fg        VARCHAR2(1) := 'N';
10192 l_b_cint_elg_fg              VARCHAR2(1) := 'N';
10193 l_b_cint_stp_dt_fg           VARCHAR2(1) := 'N';
10194 --end bug 2955326
10195 l_update_task_structure      VARCHAR2(1) := 'N'; -- Added for Bug 3548473 : 3627124
10196 l_ref_task_id       NUMBER := null; -- aditi added for Bug 3801314 : 3627124
10197 l_update_wbs_flag            VARCHAR2(1) := 'N'; -- Added for Bug #3931805
10198 -- Bug 3075609. In update project context it is possible
10199 -- that we can create a new structure version when already some
10200 -- working versions exist. This is true in split workplan context.
10201 -- This info will be passed to the process_task_structure_bulk api
10202 -- through this variable.
10203 l_create_task_versions_only  VARCHAR2(1) := 'N';
10204 -- Bug 6248841
10205 l_b_cc_tax_task_id          VARCHAR2(1) := 'N';
10206 l_cc_tax_task_numb          PA_TASKS.TASK_NUMBER%TYPE;
10207 
10208   /* Bug 3077676 */
10209    l_cust_acc_rel_code pa_implementations.cust_acc_rel_code%TYPE;
10210    CURSOR get_cust_acc_rel_code IS
10211    Select cust_acc_rel_code
10212    From pa_implementations;
10213 
10214    l_deliverable_id NUMBER; -- 3435905
10215    -- 3773373 removed below local variable usage
10216 --   i_dlvr           NUMBER := 0; -- 3435905
10217    i_actn           NUMBER := 0; -- 3435905
10218    l_dlvr_dml_action VARCHAR2(30) := null ; -- 3435905
10219    l_unique_flag     VARCHAR2(1) := null ; -- 3435905
10220    l_is_wp_seperate_from_fn     VARCHAR2(1) := 'N';  -- Added for Bug#3451073
10221 
10222 ---------------------- FP_M changes begin (venkat) 1 ---------------------------
10223 
10224 ----Comment ---- l_sys_program_flag VARCHAR2(1) := 'N'; --------------------
10225 l_b_sys_program_flag_fg		 VARCHAR2(1) := 'N'; -- Bug # 5072032.
10226 l_b_allow_multi_prog_rollup_fg	 VARCHAR2(1) := 'N'; -- Bug # 5072032.
10227 
10228 l_enable_top_task_cust_flag  VARCHAR2(1)    := 'N';
10229 l_enable_top_task_inv_mth_flag VARCHAR2(1)  := 'N';
10230 l_projfunc_attr_for_ar_flag  VARCHAR2(1)    :='N';
10231 
10232 --------------------- FP_M changes end (venkat) ---------------------------------
10233 
10234 /* Start of code for bug #2111806 */
10235 -- Start of Bug fix 4878696
10236 -- Commented this cursor for Performance Bug 4878696
10237 -- CURSOR c_prj(c_project_id IN NUMBER ) IS
10238 -- select project_system_status_code
10239 --      ,project_type_class_code
10240 -- from pa_projects_v
10241 -- where project_id = c_project_id;
10242 
10243 -- Added the following cursor instead of the commented one as above for Performance Bug 4878696
10244 CURSOR c_prj(c_project_id IN NUMBER ) IS
10245 select PROJECT_SYSTEM_STATUS_CODE , PROJECT_TYPE_CLASS_CODE
10246        from pa_projects_all ppa,pa_project_statuses pps,pa_project_types ppt
10247 where ppa.project_id = c_project_id
10248   and ppa.PROJECT_STATUS_CODE = pps.PROJECT_STATUS_CODE
10249   and ppa.PROJECT_TYPE = ppt.PROJECT_TYPE
10250   and pps.STATUS_TYPE = 'PROJECT'
10251   and ppt.ORG_ID= ppa.ORG_ID ;
10252 
10253 -- End of Bug fix 4878696
10254 
10255 CURSOR c_prj_count(c_project_id IN NUMBER ) IS
10256 select count(*)
10257   from pa_project_players
10258  where project_id = c_project_id
10259    and project_role_type='PROJECT MANAGER';
10260 
10261 l_proj_status       pa_projects_all.project_status_code%TYPE;
10262 l_proj_type_class       pa_project_types_all.project_type_class_code%TYPE;
10263 l_prj_mgr_count         NUMBER;
10264 /* End of code for bug #2111806. */
10265 
10266 l_old_cust_top_task_flag varchar2(1); -- 4188765 Added local variable
10267 l_old_date_eff_funds_flag varchar2(1); -- sunkalya federal Bug#5511353
10268 
10269 -- Start of Addition for bug 4191009.
10270    CURSOR l_code_percentage_csr (l_project_id NUMBER,
10271                                  l_class_category VARCHAR2,
10272                  l_class_code VARCHAR2 )
10273    IS
10274    SELECT code_percentage
10275    FROM pa_project_classes
10276    WHERE project_id     = l_project_id
10277    AND   class_category = l_class_category
10278    AND   class_code     = l_class_code;
10279 
10280    TYPE class_code_tbl_type IS TABLE OF pa_project_classes.class_code%type
10281     INDEX BY BINARY_INTEGER;
10282 
10283   class_code_tbl class_code_tbl_type;
10284   l_code_percentage pa_project_classes.code_percentage%type;
10285 
10286 -- END of Addition for bug 4191009.
10287 
10288 -- 5348726 :: Start of Addition for bug#5294891.
10289         CURSOR c_get_class_code_id(l_class_category VARCHAR2,
10290                                    l_class_code VARCHAR2 )
10291         IS
10292         SELECT class_code_id
10293         FROM PA_CLASS_CODES
10294         WHERE class_category = l_class_category
10295         AND class_code = l_class_code;
10296 
10297         l_old_class_code_id pa_class_codes.class_code_id%type;
10298         l_new_class_code_id pa_class_codes.class_code_id%type;
10299 -- END of Addition for bug# 5294891.
10300 
10301 -- for opportunity value changes
10302 -- adarora --Changes BEGIN for Bug 4473105
10303 l_expected_approval_date  DATE;
10304 l_projfunc_currency_code  VARCHAR2(15);
10305 l_project_currency_code   VARCHAR2(15);
10306 l_opportunity_value       NUMBER;
10307 l_opp_value_currency_code VARCHAR2(15);
10308 
10309 
10310 CURSOR l_get_details_for_opp_csr (c_project_id IN NUMBER) IS
10311 SELECT expected_approval_date, projfunc_currency_code, project_currency_code
10312 FROM   pa_projects
10313 WHERE  project_id = c_project_id;
10314 
10315 CURSOR l_get_details_for_opp_csr2 (c_project_id IN NUMBER) IS
10316 SELECT opportunity_value, opp_value_currency_code
10317 FROM   pa_project_opp_attrs
10318 WHERE  project_id = c_project_id;
10319 
10320 --Changes END for Bug 4473105
10321 
10322 -- Begin Bug # 4582750.
10323 
10324 l_x_return_status    VARCHAR2(255);
10325 l_x_msg_count        NUMBER;
10326 l_x_msg_data         VARCHAR2(2000);
10327 l_prev_locked_status VARCHAR2(1) := null;
10328 
10329 -- End Bug # 4582750.
10330 l_valid_proj_flag BOOLEAN := false; --tracking
10331 l_error_msg_code  VARCHAR2(200);
10332 
10333 -- Bug # 4329284.
10334 
10335 cursor cur_proj_name (c_project_id NUMBER) is
10336 select ppa.name
10337 from pa_projects_all ppa
10338 where ppa.project_id = c_project_id;
10339 
10340 cursor cur_prog_name (c_project_id NUMBER) is
10341 select ppa.name
10342 from pa_projects_all ppa, pa_object_relationships por
10343 where ppa.project_id = por.object_id_to2
10344 and por.object_id_to2 = c_project_id
10345 and por.relationship_type in ('LW','LF')
10346 union all
10347 select ppa.name
10348 from pa_projects_all ppa, pa_object_relationships por
10349 where ppa.project_id = por.object_id_from2
10350 and por.object_id_from2 = c_project_id
10351 and por.relationship_type in ('LW','LF');
10352 
10353 l_proj_name VARCHAR2(30);
10354 l_prog_name VARCHAR2(30);
10355 
10356 -- Bug # 4329284.
10357 
10358 --Bug#5131471. Added the following cursors and the local variables --Sunkalya
10359 
10360 CURSOR cur_customer_status(l_customer_id number)
10361 IS
10362         SELECT  Nvl(cust_acct.status,'A')
10363         FROM    hz_parties party,
10364                 hz_cust_accounts cust_acct
10365         WHERE
10366                 cust_acct.party_id              = party.party_id AND
10367                 cust_acct.cust_account_id       = l_customer_id;
10368 
10369 l_cust_status                   VARCHAR2(1) :=  null;
10370 --End of code change for Bug#5131471.
10371 
10372 -- 5191417 Added below cursor to validate priority_code
10373 
10374 l_valid_prio_code VARCHAR2(1) := 'N';
10375 
10376 CURSOR priority_code_csr(p_priority_code IN VARCHAR2) IS
10377 Select
10378         'Y'
10379 from
10380         pa_lookups
10381 where
10382         lookup_type = 'PA_PROJECT_PRIORITY_CODE'
10383    and  lookup_code = p_priority_code ;
10384 
10385 -- 5191417 end
10386 
10387 -- Bug#5191699. Added the cursor and the local variable below for validating
10388 --              project security level.This can be either 'Enterprise' or 'Secured'.
10389 
10390 l_check_sec_level       VARCHAR2(1) := 'N';
10391 
10392 CURSOR cur_check_sec_level(p_proj_sec_level IN VARCHAR2 ) IS
10393 SELECT 'Y'  FROM
10394 dual
10395 WHERE EXISTS
10396         (SELECT NULL FROM pa_lookups
10397          WHERE
10398                 lookup_type     =       'PA_PROJECT_ACCESS_LEVEL' AND
10399                 lookup_code     =       p_proj_sec_level
10400         );
10401 -- End of code changes for Bug#5191699 in declare section
10402 
10403 
10404 --Bug#5191521.  Added the cursor and the local variable below for validating
10405 --              probability member id.
10406 
10407 l_check_prob_id VARCHAR2(1) := 'N';
10408 
10409 CURSOR  cur_validate_prob_member( p_project_id IN NUMBER ,p_probability_member_id IN NUMBER )
10410 IS
10411 SELECT 'Y' FROM dual
10412 WHERE  EXISTS
10413         (
10414                 SELECT
10415                 NULL
10416                 FROM
10417                         pa_probability_members ppm,
10418                         pa_projects pp,
10419                         pa_project_types ppt
10420                 WHERE
10421                         pp.project_type                 =       ppt.project_type AND
10422                         pp.org_id                       =       ppt.org_id AND
10423                         ppt.probability_list_id         =       ppm.probability_list_id AND
10424                         pp.project_id                   =       p_project_id AND
10425                         ppm.probability_member_id       =       p_probability_member_id AND
10426                         trunc(sysdate) BETWEEN ppm.start_date_active AND nvl(ppm.end_date_active,trunc(sysdate))
10427         );
10428 --End of code changes for Bug#5191521 in declare section
10429 
10430 --Bug#5222248. The following cursor and local vairable are added for validating the work type id passed
10431 
10432 CURSOR cur_check_work_type(p_project_id IN NUMBER ,p_work_type_id IN NUMBER ) IS
10433 SELECT
10434 'Y'
10435 FROM
10436 pa_work_types_vl pwt,
10437 pa_projects      pp,
10438 pa_project_types  ppt
10439 WHERE
10440 trunc(sysdate) BETWEEN  pwt.start_date_active AND  nvl(pwt.end_date_active,trunc(SYSDATE)) AND
10441 pp.project_type                 =       ppt.project_type AND
10442 pp.org_id                       =       ppt.org_id AND
10443 pwt.billable_capitalizable_flag =       Decode(ppt.project_type_class_code,'INDIRECT', 'N', pwt.billable_capitalizable_flag) AND
10444 pp.project_id                   =       p_project_id AND
10445 pwt.work_type_id                =       p_work_type_id;
10446 
10447 l_check_work_type VARCHAR2(1) := 'N';
10448 
10449 --Bug#5222248.
10450 
10451 --Bug#5188931. Added the following cursors and local variables for validating project currency code
10452 
10453 CURSOR cur_check_cur_code(p_currency_code IN VARCHAR2 )
10454 IS
10455 SELECT
10456 'Y'
10457 FROM
10458 fnd_currencies_vl
10459 WHERE
10460         NVL(enabled_flag, 'Y')  =       'Y'                     AND
10461         SYSDATE  BETWEEN  NVL(start_date_active,SYSDATE)        AND
10462                           NVL(end_date_active,  SYSDATE)        AND
10463         currency_code           =       p_currency_code;
10464 
10465 CURSOR cur_check_prvdr_flag(p_project_id IN NUMBER )
10466 IS
10467 SELECT
10468 ppt.cc_prvdr_flag
10469 FROM
10470 pa_projects pp,
10471 pa_project_types ppt
10472 WHERE
10473 pp.project_type         =       ppt.project_type AND
10474 pp.org_id               =       ppt.org_id       AND --this condition is not mandatory
10475 pp.project_id           =       p_project_id;
10476 
10477 l_check_cur_code_flag VARCHAR2(1) :=    'N';
10478 l_allow_update_flag   VARCHAR2(1) :=    'Y';
10479 l_prvdr_flag          VARCHAR2(1);
10480 
10481 --Bug#5188931.
10482 
10483 --This cursor is introduced for Bug#5196996 to validate the role type passed thru key member record
10484 
10485 CURSOR l_project_role_types_csr (p_role_type IN VARCHAR2,p_project_id IN number)
10486    IS
10487 select 'x'
10488 from pa_project_role_types_v roles,
10489      pa_role_controls controls,
10490      pa_projects_all proj
10491  where proj.project_id=p_project_id
10492  and proj.ROLE_LIST_ID is null
10493  and roles.project_role_id=controls.project_role_id
10494  and roles.PROJECT_ROLE_TYPE=p_role_type
10495  and controls.role_control_code='ALLOW_AS_PROJ_MEMBER'
10496  and trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate)
10497  union all
10498 select 'x'
10499  from pa_project_role_types_v roles,
10500              pa_role_controls controls,
10501      pa_projects_all proj,
10502      pa_role_list_members prlm
10503  where proj.project_id=p_project_id
10504  and proj.ROLE_LIST_ID =prlm.role_list_id
10505  and prlm.project_role_id = roles.project_role_id
10506  and roles.project_role_id=controls.project_role_id
10507  and roles.PROJECT_ROLE_TYPE=p_role_type
10508  and controls.role_control_code='ALLOW_AS_PROJ_MEMBER'
10509  and trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate);
10510 
10511  --Bug#5196996
10512 
10513 l_cc_process_labor_flag  varchar2(1) ; /* Added for Bug 5395048 */
10514 l_cc_process_nl_flag  varchar2(1) ; /* Added for Bug 5395048 */
10515 
10516 --sunkalya federal bug#5511353
10517 
10518 CURSOR cur_enable_funds_flag(p_project_id IN VARCHAR2)
10519 IS
10520 SELECT 'Y'
10521 FROM
10522 pa_projects_all p,
10523 pa_project_types_all pt
10524 WHERE
10525 p.project_id			=	p_project_id	AND
10526 pt.project_type_class_code	=	'CONTRACT'	AND
10527 p.project_type			=	pt.project_type AND
10528 pt.CC_PRVDR_FLAG		=	'N'		AND
10529 pt.org_id			=	p.org_id;
10530 
10531 l_enable_funds_flag	VARCHAR2(1);
10532 l_date_eff_funds_flag   VARCHAR2(1) :=	NULL;
10533 
10534 l_ar_rec_notify_flag   VARCHAR2(1) :=   NULL;  -- 7508661 : EnC
10535 l_auto_release_pwp_inv VARCHAR2(1) :=   NULL;  -- 7508661 : EnC
10536 
10537 CURSOR cur_rev_inv(p_project_id IN VARCHAR2)
10538 	IS
10539 	SELECT 'Y'
10540 	FROM dual
10541 	WHERE EXISTS
10542 		(SELECT  NULL
10543 		 FROM
10544 		 pa_draft_revenues r
10545 		 WHERE
10546 		 r.project_id		=	p_project_id
10547 		)
10548 	OR EXISTS
10549 		(SELECT  NULL
10550 		 FROM
10551 		 pa_draft_invoices i
10552 		 WHERE
10553 		 i.project_id		=	p_project_id
10554 		);
10555 	l_chk_rev_inv_flag	VARCHAR2(1) := NULL;
10556 
10557 
10558 CURSOR chk_task_level_funding(p_project_id IN VARCHAR2)
10559 	IS
10560 	SELECT 'Y'
10561 	FROM dual
10562 	WHERE exists
10563 		(	select 1
10564 			from  pa_summary_project_fundings
10565 			where project_id = p_project_id
10566 			and task_id is not null
10567 		);
10568 
10569 	l_chk_task_level_funding VARCHAR2(1) := NULL;
10570 
10571 	CURSOR count_cust(p_project_id IN VARCHAR2)
10572 	IS
10573 	SELECT count(*)
10574 	FROM pa_project_customers
10575 	WHERE project_id =  p_project_id;
10576 
10577 	l_count_cust	VARCHAR2(1) := NULL;
10578 
10579 --sunkalya federal bug#5511353
10580 
10581 
10582 --bug#5554475
10583 
10584  CURSOR cur_pa_impl
10585  IS
10586       SELECT default_rate_type
10587       FROM pa_implementations;
10588 
10589 l_ALLOW_INV_USER_RATE_FLAG  VARCHAR2(1)  ;
10590 l_INV_RATE_DATE        DATE;
10591 l_INV_RATE_TYPE        VARCHAR2 (256) ;
10592 l_USER_INV_RATE_TYPE   VARCHAR2 (256) ;
10593 l_INV_CURRENCY_CODE    VARCHAR (15) ;
10594 l_INV_EXCHANGE_RATE    NUMBER ;
10595 l_mcb_flag             varchar2(1);
10596 l_cc_prvdr_flag        varchar2(1);
10597 
10598 --bug#5554475
10599 
10600 l_default_top_task_cust_flag varchar2(1); --bug 5554578
10601 
10602 BEGIN
10603 
10604     SAVEPOINT   Update_project_pub;
10605 
10606     IF FND_API.TO_BOOLEAN( p_init_msg_list )
10607     THEN
10608        FND_MSG_PUB.Initialize;
10609     END IF;
10610 
10611     --4218977, rtarway
10612     --we need to set this parameter only when called in AMG/MSP and not in publish flow
10613     --dbms_output.put_line('p_project_in.project_relationship_code'||p_project_in.project_relationship_code);
10614     if (p_pm_product_code <> 'WORKPLAN') then
10615          G_OP_VALIDATE_FLAG := p_op_validate_flag ;
10616      G_TASK_STR_UPDATE_MODE      := p_update_mode ; -- DHI ER , rtarway BUG 4413568
10617     end if;
10618 
10619     --  Standard call to check for call compatibility.
10620     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
10621                                p_api_version_number  ,
10622                                l_api_name         ,
10623                                G_PKG_NAME         )
10624     THEN
10625        RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
10626     END IF;
10627 
10628     p_return_status :=  FND_API.G_RET_STS_SUCCESS;
10629 
10630     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
10631 
10632    -- <Bug#2881768>
10633    -- If structure_version_id has been provided
10634    -- check to see if this version is updatable
10635    -- if not, then throw error and return
10636 
10637    l_structure_version_id := p_structure_in.structure_version_id;
10638 
10639    --3703440, rtarway
10640     G_structure_in_rec.pa_project_id                  := p_structure_in.pa_project_id;
10641     G_structure_in_rec.structure_type                 := p_structure_in.structure_type;
10642     G_structure_in_rec.structure_version_name         := p_structure_in.structure_version_name;
10643     G_structure_in_rec.structure_version_id           := p_structure_in.structure_version_id;
10644     G_structure_in_rec.DESCRIPTION                    := p_structure_in.DESCRIPTION;
10645 
10646 
10647    --bug 4619824
10648    IF l_debug_mode = 'Y' THEN
10649         pa_debug.g_err_stage := 'Checking if the project is a program project';
10650         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10651     END IF;
10652 
10653     IF p_pm_product_code IS NOT NULL
10654        AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10655        AND p_pm_product_code <> 'WORKPLAN'   --bug 4621311
10656        AND PA_RELATIONSHIP_UTILS.Check_subproject_link_exists( p_project_in.pa_project_id ) = 'Y'
10657        AND p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added the condition for Bug 7248969
10658        AND p_tasks_in.count > 0 -- Added the condition for Bug 7248969
10659     THEN
10660         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10661                              p_msg_name => 'PA_PS_CANT_UPDATE_PROG_PRJ');
10662         RAISE FND_API.G_EXC_ERROR;
10663     END IF;
10664    --end bug 4619824
10665 
10666    IF l_debug_mode = 'Y' THEN
10667         pa_debug.g_err_stage := 'Calling PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable' || p_structure_in.structure_version_id;
10668         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10669     END IF;
10670 
10671    IF ( l_structure_version_id IS NOT NULL AND l_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
10672    THEN
10673 
10674       --bug 4538849
10675 
10676       -- Begin Bug # 4582750.
10677 
10678       l_prev_locked_status := PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,l_structure_version_id);
10679 
10680       if ( l_prev_locked_status = 'O' ) then
10681 
10682       -- End Bug # 4582750.
10683 
10684            --if yes, raise error.
10685            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10686            p_msg_name => 'PA_STR_LOCKED_BY_OTHER');
10687            RAISE FND_API.G_EXC_ERROR;
10688 
10689        -- Begin Bug # 4582750.
10690 
10691        elsif ( l_prev_locked_status = 'N' ) then
10692 
10693             if (p_update_mode = 'PA_UPD_WBS_ATTR') and (p_pm_product_code <> 'WORKPLAN') then -- Bug # 4758888.
10694 
10695                       IF l_debug_mode = 'Y' THEN
10696                           pa_debug.g_err_stage := 'Before calling pa_project_structure_utils.lock_unlock_wp_str_autonomous for LOCKING'||
10697                                 'p_project_in.pa_project_id='||p_project_in.pa_project_id||
10698                                 '-l_structure_version_id='||l_structure_version_id;
10699                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10700                       END IF;
10701 
10702                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
10703                 (p_project_id                   => p_project_in.pa_project_id
10704                 ,p_structure_version_id         => p_structure_in.structure_version_id
10705                 ,p_lock_status_code             => 'LOCKED'
10706                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
10707                 ,x_return_status                => l_x_return_status
10708                 ,x_msg_count                    => l_x_msg_count
10709                 ,x_msg_data                     => l_x_msg_data);
10710 
10711                         IF l_debug_mode = 'Y' THEN
10712                            pa_debug.g_err_stage := 'After  calling pa_project_structure_utils.lock_unlock_wp_str_autonomous  for LOCKING'||
10713                                 'l_x_return_status='||l_x_return_status;
10714                            pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10715                         END IF;
10716 
10717                        IF l_x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
10718                        THEN
10719                            p_project_out.return_status := l_x_return_status;
10720                            RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
10721 
10722                        ELSIF l_x_return_status = FND_API.G_RET_STS_ERROR
10723                        THEN
10724                           p_project_out.return_status := l_x_return_status;
10725                           RAISE  FND_API.G_EXC_ERROR;
10726                        END IF;
10727 
10728         end if;
10729 
10730     -- End Bug # 4582750.
10731 
10732       end if;
10733       --end bug 4538849
10734 
10735       struct_ver_updatable := PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable(l_structure_version_id);
10736 
10737    IF l_debug_mode = 'Y' THEN
10738         pa_debug.g_err_stage := 'struct_ver_updatable='||struct_ver_updatable;
10739         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10740     END IF;
10741 
10742       IF (struct_ver_updatable IS NULL OR struct_ver_updatable = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10743          OR struct_ver_updatable = 'N')
10744       THEN
10745          -- add error message to stack and throw exception
10746          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10747          THEN
10748             pa_interface_utils_pub.map_new_amg_msg
10749             ( p_old_message_code => 'PA_STRUCT_VER_NO_UPDATE'
10750                ,p_msg_attribute    => 'CHANGE'
10751                ,p_resize_flag      => 'N'
10752                ,p_msg_context      => 'GENERAL'
10753                ,p_attribute1       => ''
10754                ,p_attribute2       => ''
10755                ,p_attribute3       => ''
10756                ,p_attribute4       => ''
10757                ,p_attribute5       => '');
10758          END IF;
10759          p_project_out.return_status := FND_API.G_RET_STS_ERROR;
10760          RAISE FND_API.G_EXC_ERROR;
10761       /*  bug 4538849
10762       --bug 4413568, DHI ER, rtarway
10763       ELSIF (struct_ver_updatable = 'Y') THEN
10764           -- structure version is locked by another user check must be done in both update modes. bug 4519809
10765           --IF (p_update_mode = 'PA_UPD_TASK_ATTR') THEN  --bug 4534919
10766               --Check if str version is locked by another user
10767                if ( PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,l_structure_version_id) = 'O' ) then
10768                --if yes, raise error.
10769                PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10770                p_msg_name => 'PA_STR_LOCKED_BY_OTHER');
10771                RAISE FND_API.G_EXC_ERROR;
10772            end if;
10773           --END IF;
10774        */
10775       END IF;
10776    END IF;
10777    l_structure_version_id := null;
10778    -- </Bug#2881768>
10779 
10780 --Organization Forecasting.
10781 --Do not allow updating an org project
10782         IF PA_FP_ORG_FCST_UTILS.check_org_project(
10783               p_project_id        => p_project_in.pa_project_id
10784              ,x_return_status     => l_return_status
10785              ,x_err_code          => l_err_code
10786             ) = 'Y'
10787         THEN
10788            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10789            THEN
10790                pa_interface_utils_pub.map_new_amg_msg
10791                ( p_old_message_code => 'PA_CANT_UPD_ORG_PRJ'
10792                   ,p_msg_attribute    => 'CHANGE'
10793                   ,p_resize_flag      => 'N'
10794                   ,p_msg_context      => 'GENERAL'
10795                   ,p_attribute1       => ''
10796                   ,p_attribute2       => ''
10797                   ,p_attribute3       => ''
10798                   ,p_attribute4       => ''
10799                   ,p_attribute5       => '');
10800            END IF;
10801 
10802 --           PA_UTILS.ADD_MESSAGE('PA', 'PA_ORG_FC_CANT_UPD_ORG_PRJ');
10803            p_project_out.return_status := FND_API.G_RET_STS_ERROR;
10804            RAISE FND_API.G_EXC_ERROR;
10805         END IF;
10806 --Organization Forecasting.
10807 --Do not allow updating an org project
10808 
10809 -- 22-DEC-97, jwhite:
10810 --  Initialize New OUT-parameter to indicate workflow status
10811 
10812 -- Set Worflow Started Status -------------------------------------------------
10813 
10814     p_workflow_started    := 'N';
10815 -- ------------------------------------------------------------------------------------
10816 
10817 
10818 --  pm_product_code is mandatory
10819 
10820 --bug 2841158
10821 --    IF ( p_pm_product_code IS NULL
10822 --    OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10823     IF ( p_pm_product_code IS NOT NULL
10824     AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10825 --bug 284115
10826        AND p_pm_product_code <> 'WORKPLAN'    --bug 2665656
10827     THEN
10828 
10829   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10830   THEN
10831          pa_interface_utils_pub.map_new_amg_msg
10832            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
10833             ,p_msg_attribute    => 'CHANGE'
10834             ,p_resize_flag      => 'N'
10835             ,p_msg_context      => 'GENERAL'
10836             ,p_attribute1       => ''
10837             ,p_attribute2       => ''
10838             ,p_attribute3       => ''
10839             ,p_attribute4       => ''
10840             ,p_attribute5       => '');
10841   END IF;
10842   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
10843   RAISE FND_API.G_EXC_ERROR;
10844     END IF;
10845 
10846 --bug 2841158
10847     IF p_pm_product_code <> 'WORKPLAN'
10848        AND p_pm_product_code IS NOT NULL
10849        AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10850     THEN
10851 --bug 2841158
10852 
10853           /*added for bug no :2413400*/
10854         OPEN p_product_code_csr (p_pm_product_code);
10855         FETCH p_product_code_csr INTO l_pm_product_code;
10856         CLOSE p_product_code_csr;
10857 
10858         IF l_pm_product_code <> 'X'
10859            AND p_pm_product_code <> 'WORKPLAN'    --bug 2665656
10860         THEN
10861 
10862         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10863         THEN
10864          pa_interface_utils_pub.map_new_amg_msg
10865            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
10866             ,p_msg_attribute    => 'CHANGE'
10867             ,p_resize_flag      => 'N'
10868             ,p_msg_context      => 'GENERAL'
10869             ,p_attribute1       => ''
10870             ,p_attribute2       => ''
10871             ,p_attribute3       => ''
10872             ,p_attribute4       => ''
10873             ,p_attribute5       => '');
10874         END IF;
10875         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
10876         p_return_status             := FND_API.G_RET_STS_ERROR;
10877         RAISE FND_API.G_EXC_ERROR;
10878         END IF;
10879    END IF;   --bug 2841158
10880 
10881     l_resp_id := FND_GLOBAL.Resp_id;
10882     l_user_id := FND_GLOBAL.User_id;
10883     --l_module_name := p_pm_product_code||'.'||'PA_PM_UPDATE_PROJECT';
10884     l_module_name := 'PA_PM_UPDATE_PROJECT';
10885 
10886     --bug 2665656
10887     IF NVL( p_pm_product_code, 'WORKPLAN' ) = 'WORKPLAN'
10888     THEN
10889        l_pm_product_code := null;
10890     END IF;
10891     --bug 2665656
10892 
10893 
10894 --Moved this code here before calling security check to get project id in l_project_i d
10895 --bug 2471668
10896  -- convert pm_project_reference to id
10897 
10898    IF l_debug_mode = 'Y' THEN
10899         pa_debug.g_err_stage := 'Performing ref to id conversion...';
10900         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10901     END IF;
10902 
10903 
10904     Pa_project_pvt.Convert_pm_projref_to_id (
10905          p_pm_project_reference  => p_project_in.pm_project_reference,
10906          p_pa_project_id         => p_project_in.pa_project_id,
10907          p_out_project_id        => l_project_id,
10908          p_return_status         => l_return_status );
10909 
10910 
10911       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
10912       THEN
10913          p_project_out.return_status := l_return_status;
10914          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
10915 
10916       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
10917       THEN
10918          p_project_out.return_status := l_return_status;
10919          RAISE  FND_API.G_EXC_ERROR;
10920       END IF;
10921 --bug 2471668
10922 
10923 
10924    IF l_debug_mode = 'Y' THEN
10925         pa_debug.g_err_stage := 'Performing security check...';
10926         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10927     END IF;
10928 
10929     -- As part of enforcing project security, which would determine
10930     -- whether the user has the necessary privileges to update the project
10931     -- need to call the pa_security package
10932 
10933     pa_security.initialize (X_user_id        => l_user_id,
10934                             X_calling_module => l_module_name);
10935 
10936     -- Actions performed using the APIs would be subject to
10937     -- function security. If the responsibility does not allow
10938     -- such functions to be executed, the API should not proceed further
10939     -- since the user does not have access to such functions
10940 
10941     PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id;  --bug 2471668 ( in the project context )
10942 
10943     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
10944       (p_api_version_number => p_api_version_number,
10945        p_responsibility_id  => l_resp_id,
10946        p_function_name      => 'PA_PM_UPDATE_PROJECT',
10947        p_msg_count      => l_msg_count,
10948        p_msg_data           => l_msg_data,
10949        p_return_status      => l_return_status,
10950        p_function_allowed   => l_function_allowed );
10951 
10952 
10953      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
10954       THEN
10955       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10956 
10957       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
10958       THEN
10959       RAISE FND_API.G_EXC_ERROR;
10960       END IF;
10961         IF l_function_allowed = 'N' THEN
10962          pa_interface_utils_pub.map_new_amg_msg
10963            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
10964             ,p_msg_attribute    => 'CHANGE'
10965             ,p_resize_flag      => 'Y'
10966             ,p_msg_context      => 'GENERAL'
10967             ,p_attribute1       => ''
10968             ,p_attribute2       => ''
10969             ,p_attribute3       => ''
10970             ,p_attribute4       => ''
10971             ,p_attribute5       => '');
10972      p_return_status := FND_API.G_RET_STS_ERROR;
10973      RAISE FND_API.G_EXC_ERROR;
10974         END IF;
10975 
10976 
10977 /* Moving this code before doing security check for bug 2471668
10978  -- convert pm_project_reference to id
10979 
10980     Pa_project_pvt.Convert_pm_projref_to_id (
10981          p_pm_project_reference  => p_project_in.pm_project_reference,
10982          p_pa_project_id         => p_project_in.pa_project_id,
10983          p_out_project_id        => l_project_id,
10984          p_return_status         => l_return_status );
10985 
10986 
10987       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
10988       THEN
10989          p_project_out.return_status := l_return_status;
10990          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
10991 
10992       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
10993       THEN
10994          p_project_out.return_status := l_return_status;
10995          RAISE  FND_API.G_EXC_ERROR;
10996       END IF;
10997 */ --bug 2471668
10998 
10999 -- Get segment1 for AMG messages
11000 
11001    OPEN l_amg_project_csr( l_project_id );
11002    FETCH l_amg_project_csr INTO l_amg_segment1;
11003    CLOSE l_amg_project_csr;
11004 
11005 
11006       -- Now verify whether project security allows the user to update
11007       -- project
11008 
11009       IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
11010 
11011          -- The user does not have query privileges on this project
11012          -- Hence, cannot update the project.Raise error
11013          pa_interface_utils_pub.map_new_amg_msg
11014            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
11015             ,p_msg_attribute    => 'CHANGE'
11016             ,p_resize_flag      => 'Y'
11017             ,p_msg_context      => 'GENERAL'
11018             ,p_attribute1       => ''
11019             ,p_attribute2       => ''
11020             ,p_attribute3       => ''
11021             ,p_attribute4       => ''
11022             ,p_attribute5       => '');
11023      p_return_status := FND_API.G_RET_STS_ERROR;
11024      RAISE FND_API.G_EXC_ERROR;
11025       ELSE
11026             -- If the user has query privileges, then check whether
11027             -- update privileges are also available
11028          IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
11029 
11030             -- The user does not have update privileges on this project
11031             -- Hence , raise error
11032          pa_interface_utils_pub.map_new_amg_msg
11033            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
11034             ,p_msg_attribute    => 'CHANGE'
11035             ,p_resize_flag      => 'Y'
11036             ,p_msg_context      => 'GENERAL'
11037             ,p_attribute1       => ''
11038             ,p_attribute2       => ''
11039             ,p_attribute3       => ''
11040             ,p_attribute4       => ''
11041             ,p_attribute5       => '');
11042      p_return_status := FND_API.G_RET_STS_ERROR;
11043      RAISE FND_API.G_EXC_ERROR;
11044         END IF;
11045      END IF;
11046 
11047 -- Lock this project and it's tasks for update
11048 --  bug 4541103  OPEN l_lock_rows_csr( l_project_id );
11049 
11050 -- Need to get the current project data
11051 
11052     OPEN l_project_csr (l_project_id);
11053     FETCH l_project_csr INTO l_project_rec;
11054     CLOSE l_project_csr;
11055 
11056     -- 4188765 , setting customer top task flag db value in local variable
11057     l_old_cust_top_task_flag := l_project_rec.enable_top_task_customer_flag;
11058     l_old_date_eff_funds_flag := l_project_rec.date_eff_funds_consumption; --sunkalya federal Bug#5511353
11059 
11060    -- anlee
11061    -- Added for intermedia search
11062    l_ctx_proj_name := l_project_rec.name;
11063    l_ctx_proj_number := l_project_rec.segment1;
11064    l_ctx_long_name := l_project_rec.long_name;
11065    l_ctx_desc := l_project_rec.description;
11066    l_ctx_update_flag := 'N';
11067    -- End of changes
11068 
11069    --bug 2738747      --update project
11070    G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
11071    G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
11072    G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
11073    --bug 2738747
11074    G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
11075 
11076    IF l_debug_mode = 'Y' THEN
11077         pa_debug.g_err_stage := 'G_Published_version_exists='||G_Published_version_exists;
11078         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11079         pa_debug.g_err_stage := 'G_IS_WP_SEPARATE_FROM_FN='||G_IS_WP_SEPARATE_FROM_FN;
11080         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11081         pa_debug.g_err_stage := 'G_IS_WP_VERSIONING_ENABLED='||G_IS_WP_VERSIONING_ENABLED;
11082         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11083         pa_debug.g_err_stage := 'G_WP_STR_EXISTS='||G_WP_STR_EXISTS;
11084         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11085     END IF;
11086 
11087 
11088 --bug 2876703   --update_project
11089    IF G_IS_WP_SEPARATE_FROM_FN = 'N' AND
11090       p_structure_in.structure_type = 'WORKPLAN'
11091    THEN
11092         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11093         THEN
11094             pa_interface_utils_pub.map_new_amg_msg
11095               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
11096                   ,p_msg_attribute    => 'CHANGE'
11097                   ,p_resize_flag      => 'N'
11098                   ,p_msg_context      => 'GENERAL'
11099                   ,p_attribute1       => ''
11100                   ,p_attribute2       => ''
11101                   ,p_attribute3       => ''
11102                   ,p_attribute4       => ''
11103                   ,p_attribute5       => '');
11104         END IF;
11105         RAISE FND_API.G_EXC_ERROR;
11106    END IF;
11107 --bug 2876703
11108 
11109    -- "Change Project Currency" changes By avaithia for Bug 3912783
11110    --  << Start >>
11111    --  Functionality :-
11112    --  If Project Currency is changed ,then we should check whether this Project has any subprojects
11113    --  (or) whether this Project is a subproject of some other project
11114    --  If any of the above two is true ,then the Project Currency Change should not be allowed .
11115 
11116    --  Note : In the following "IF" statement ,it may look like "the case where project_currency_code is passed as NULL
11117    --         is not taken care of" . But existing code already takes care of this scenario (l_b_proj_cur_code value logic)
11118 
11119    --  This flag is set as 'Y' Only if the passed value is not null
11120    --  And dbms bind will happen for this project currency code ,Only if the l_b_proj_cur_code value is 'Y'
11121 
11122        IF ( p_project_in.project_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11123           AND ( p_project_in.project_currency_code IS NOT NULL)
11124        THEN
11125              IF nvl(p_project_in.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11126                       <>  nvl(l_project_rec.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11127          THEN
11128            IF  PA_RELATIONSHIP_UTILS.Check_link_exists(l_project_id) = 'Y'
11129                    THEN
11130             -- Throw Error Message
11131                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11132                         THEN
11133 
11134                 -- Bug # 4329284.
11135 
11136                 /*
11137                 pa_interface_utils_pub.map_new_amg_msg
11138                 (p_old_message_code => 'PA_PS_PRJ_CURR_LNK_ERR'
11139                 ,p_msg_attribute    => 'CHANGE'
11140                 ,p_resize_flag      => 'N'
11141                 ,p_msg_context      => 'GENERAL'
11142                                 ,p_attribute1       => ''
11143                 ,p_attribute2       => ''
11144                 ,p_attribute3       => ''
11145                         ,p_attribute4       => ''
11146                     ,p_attribute5       => '');
11147                 */
11148 
11149                 open cur_proj_name(l_project_id);
11150                 fetch cur_proj_name into l_proj_name;
11151                 close cur_proj_name;
11152 
11153                 open cur_prog_name(l_project_id);
11154                 fetch cur_prog_name into l_prog_name;
11155                 close cur_prog_name;
11156 
11157                 PA_UTILS.ADD_MESSAGE('PA','PA_PS_PRJ_CURR_LNK_ERR','PROJ',l_proj_name,'PROG',l_prog_name); -- Bug # 4329284.
11158 
11159                 -- Bug # 4329284.
11160 
11161             END IF ;
11162                         p_return_status :=  FND_API.G_RET_STS_ERROR;
11163             RAISE FND_API.G_EXC_ERROR;
11164                    END IF ;
11165              END IF ;
11166        END IF ;
11167    --  << End >>
11168    --  "Change Project Currency" changes By avaithia
11169 
11170    --bug 2738747
11171   ----dbms_output.put_line('PA_PROJECT_PUB.G_Published_version_exists'||PA_PROJECT_PUB.G_Published_version_exists);
11172    ----dbms_output.put_line('PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN'||PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN);
11173    ----dbms_output.put_line('PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED'||PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED);
11174    ----dbms_output.put_line('p_structure_in.structure_type'||p_structure_in.structure_type);
11175    ----dbms_output.put_line('p_pm_product_code'||p_pm_product_code);
11176    IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
11177       AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
11178       AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
11179       AND p_structure_in.structure_type = 'FINANCIAL'
11180       AND p_pm_product_code <> 'WORKPLAN'    --This parameter should be checked bcoz for publishing we want it to syn up with pa_tasks . For publishing  p_pm_product_code  will have 'WORKPLAN'
11181    THEN
11182        --Change the flow to WORKPLAN
11183        l_structure_type := 'WORKPLAN';
11184 
11185 
11186    ELSE
11187        l_structure_type := p_structure_in.structure_type;
11188    END IF;
11189    --bug 2738747
11190 
11191    IF l_debug_mode = 'Y' THEN
11192         pa_debug.g_err_stage := 'l_structure_type='||l_structure_type;
11193         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11194     END IF;
11195 
11196 
11197 -- Need to fetch information from pa_project_types
11198 
11199 /* Bug# 2891513- Added the variables for l_revaluate_funding and l_include_gains_and_losses */
11200 
11201     OPEN  l_project_type_csr(l_project_id);
11202     FETCH l_project_type_csr INTO  l_project_type_class_code,
11203                    l_service_type_code, l_revaluate_funding,l_include_gains_and_losses;
11204     CLOSE l_project_type_csr;
11205 
11206    IF l_debug_mode = 'Y' THEN
11207         pa_debug.g_err_stage := 'Preparing to update project level data...';
11208         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11209     END IF;
11210 
11211 
11212 
11213      l_update_yes_flag := 'N';
11214      l_statement := 'UPDATE PA_PROJECTS SET ';
11215 
11216 --PROJECT NUMBER
11217 -- Check for implementation defined Project number generation mode
11218 -- If project number generation is automatic then ignore the input
11219 -- project number ,since it cannot be modified.Hence,the following
11220 -- checks will be done only if the mode was 'MANUAL'
11221 
11222   IF G_PROJECT_NUMBER_GEN_MODE = 'MANUAL' THEN
11223      IF p_project_in.pa_project_number  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11224      AND p_project_in.pa_project_number IS NOT NULL
11225      THEN
11226         IF  p_project_in.pa_project_number <> l_project_rec.segment1
11227         THEN
11228             pa_project_utils.change_proj_num_ok
11229                 (l_project_id,
11230                  l_err_code,
11231                  l_err_stage,
11232                  l_err_stack );
11233             IF l_err_code > 0
11234             THEN
11235 
11236     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11237     THEN
11238                    IF NOT pa_project_pvt.check_valid_message (l_err_stage)
11239                    THEN
11240                         pa_interface_utils_pub.map_new_amg_msg
11241                           ( p_old_message_code => 'PA_CANT_CHANGE_PROJ_NUM'
11242                            ,p_msg_attribute    => 'CHANGE'
11243                            ,p_resize_flag      => 'N'
11244                            ,p_msg_context      => 'PROJ'
11245                            ,p_attribute1       => l_project_rec.segment1
11246                            ,p_attribute2       => ''
11247                            ,p_attribute3       => ''
11248                            ,p_attribute4       => ''
11249                            ,p_attribute5       => '');
11250                      ELSE
11251                         pa_interface_utils_pub.map_new_amg_msg
11252                           ( p_old_message_code => l_err_stage
11253                            ,p_msg_attribute    => 'CHANGE'
11254                            ,p_resize_flag      => 'N'
11255                            ,p_msg_context      => 'PROJ'
11256                            ,p_attribute1       => l_project_rec.segment1
11257                            ,p_attribute2       => ''
11258                            ,p_attribute3       => ''
11259                            ,p_attribute4       => ''
11260                            ,p_attribute5       => '');
11261                    END IF;
11262                  END IF;
11263 
11264            p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11265 
11266                  RAISE  FND_API.G_EXC_ERROR;
11267 
11268             ELSIF l_err_code < 0
11269             THEN
11270 
11271     p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11272 
11273                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11274             END IF;
11275      -- BEGIN MSP interface patch
11276 
11277             -- Check for project number being numeric if project number type is
11278             -- defined as numeric
11279 
11280                BEGIN
11281                 IF G_PROJECT_NUMBER_TYPE = 'NUMERIC' THEN
11282                    l_proj_num_numeric  :=
11283                      TO_NUMBER(p_project_in.pa_project_number);
11284                 END IF;
11285                EXCEPTION
11286                  WHEN VALUE_ERROR THEN
11287                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11288                     THEN
11289                         pa_interface_utils_pub.map_new_amg_msg
11290                           ( p_old_message_code => 'PA_PR_NUMERIC_NUM_REQ'
11291                            ,p_msg_attribute    => 'CHANGE'
11292                            ,p_resize_flag      => 'N'
11293                            ,p_msg_context      => 'PROJ'
11294                            ,p_attribute1       => l_project_rec.segment1
11295                            ,p_attribute2       => ''
11296                            ,p_attribute3       => ''
11297                            ,p_attribute4       => ''
11298                            ,p_attribute5       => '');
11299                   END IF;
11300                   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11301                   p_return_status             := FND_API.G_RET_STS_ERROR;
11302                   RAISE FND_API.G_EXC_ERROR;
11303                END ;
11304 
11305         -- END MSP interface patch -- Ensure that l_proj_num_numeric is defined
11306 
11307             OPEN l_project_number_unique_csr( p_project_in.pa_project_number );
11308             FETCH l_project_number_unique_csr INTO l_DUMMY;
11309 
11310             IF l_project_number_unique_csr%FOUND
11311             THEN
11312                 CLOSE l_project_number_unique_csr;
11313 
11314     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11315     THEN
11316          pa_interface_utils_pub.map_new_amg_msg
11317            ( p_old_message_code => 'PA_PR_EPR_PROJ_NUM_NOT_UNIQUE'
11318             ,p_msg_attribute    => 'CHANGE'
11319             ,p_resize_flag      => 'Y'
11320             ,p_msg_context      => 'MODP'
11321             ,p_attribute1       => l_project_rec.segment1
11322             ,p_attribute2       => ''
11323             ,p_attribute3       => ''
11324             ,p_attribute4       => ''
11325             ,p_attribute5       => '');
11326        END IF;
11327 
11328            p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11329 
11330                  RAISE  FND_API.G_EXC_ERROR;
11331             END IF;
11332 
11333             CLOSE l_project_number_unique_csr;
11334 
11335 --bug 2955326
11336 /*
11337             l_statement := l_statement ||
11338                      ' SEGMENT1 = '||''''||
11339                            RTRIM(p_project_in.pa_project_number)||''''||',';
11340 */
11341             l_statement := l_statement ||
11342                        ' SEGMENT1 = :segment1,';
11343             l_b_segment1_flag := 'Y';
11344 --end bug 2955326
11345             l_update_yes_flag := 'Y';
11346 
11347             -- anlee
11348             -- added for intermedia search
11349             l_ctx_proj_number := RTRIM(p_project_in.pa_project_number);
11350             l_ctx_update_flag := 'Y';
11351             -- End of changes
11352 
11353          END IF;
11354      END IF;
11355  END IF;
11356 
11357 --PROJECT NAME
11358 
11359      IF p_project_in.project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11360      AND p_project_in.project_name IS NOT NULL
11361      THEN
11362           IF p_project_in.project_name <> l_project_rec.name
11363           THEN
11364 
11365     OPEN l_project_name_unique_csr( p_project_in.project_name );
11366     FETCH l_project_name_unique_csr INTO l_dummy;
11367 
11368     IF l_project_name_unique_csr%FOUND
11369     THEN
11370       CLOSE l_project_name_unique_csr;
11371 
11372       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11373       THEN
11374             pa_interface_utils_pub.map_new_amg_msg
11375               ( p_old_message_code => 'PA_PR_EPR_PROJ_NAME_NOT_UNIQUE'
11376                ,p_msg_attribute    => 'CHANGE'
11377                ,p_resize_flag      => 'Y'
11378                ,p_msg_context      => 'MODP'
11379                ,p_attribute1       => l_project_rec.segment1
11380                ,p_attribute2       => ''
11381                ,p_attribute3       => ''
11382                ,p_attribute4       => ''
11383                ,p_attribute5       => '');
11384          END IF;
11385 
11386              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11387 
11388                    RAISE  FND_API.G_EXC_ERROR;
11389               END IF;
11390 
11391               CLOSE l_project_name_unique_csr;
11392 
11393 --bug 2955326
11394 /*
11395                l_statement := l_statement ||
11396                           ' NAME = '||''''||
11397                                RTRIM(p_project_in.project_name)||''''||',' ;
11398 */
11399                l_statement := l_statement ||
11400                            ' NAME = :project_name, ';
11401                l_b_proj_name_flag := 'Y';
11402 --end bug 2955326
11403                l_update_yes_flag := 'Y';
11404 
11405                 -- anlee
11406                 -- Added for intermedia search
11407                 l_ctx_proj_name := RTRIM(p_project_in.project_name);
11408                 l_ctx_update_flag := 'Y';
11409                 -- End of changes
11410           END IF;
11411      END IF;
11412 
11413 --LONG NAME
11414 
11415      IF p_project_in.long_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11416      AND p_project_in.long_name IS NOT NULL
11417      THEN
11418           IF p_project_in.long_name <> l_project_rec.long_name
11419           THEN
11420 
11421     OPEN l_long_name_unique_csr( p_project_in.long_name );
11422     FETCH l_long_name_unique_csr INTO l_dummy;
11423 
11424     IF l_long_name_unique_csr%FOUND
11425     THEN
11426       CLOSE l_long_name_unique_csr;
11427 
11428       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11429       THEN
11430             pa_interface_utils_pub.map_new_amg_msg
11431               ( p_old_message_code => 'PA_PR_EPR_LONG_NAME_NOT_UNIQUE'
11432                ,p_msg_attribute    => 'CHANGE'
11433                ,p_resize_flag      => 'Y'
11434                ,p_msg_context      => 'MODP'
11435                ,p_attribute1       => l_project_rec.segment1
11436                ,p_attribute2       => ''
11437                ,p_attribute3       => ''
11438                ,p_attribute4       => ''
11439                ,p_attribute5       => '');
11440          END IF;
11441 
11442              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11443 
11444                    RAISE  FND_API.G_EXC_ERROR;
11445               END IF;
11446 
11447               CLOSE l_long_name_unique_csr;
11448 
11449 --bug 2955326
11450 /*
11451                l_statement := l_statement ||
11452                           ' LONG_NAME = '||''''||
11453                                RTRIM(p_project_in.long_name)||''''||',' ;
11454 */
11455                 l_statement := l_statement ||
11456                            ' LONG_NAME = :long_name,';
11457                 l_b_long_name_flag := 'Y';
11458 --end bug 2955326
11459                l_update_yes_flag := 'Y';
11460 
11461                 -- anlee
11462                 -- Added for intermedia search
11463                 l_ctx_long_name := RTRIM(p_project_in.long_name);
11464                 l_ctx_update_flag := 'Y';
11465                 -- End of changes
11466           END IF;
11467      END IF;
11468 
11469 
11470    IF p_project_in.pm_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11471        AND nvl(p_project_in.pm_project_reference,
11472                PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11473        <>  nvl(l_project_rec.pm_project_reference,
11474                PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
11475        AND p_project_in.pm_project_reference IS NOT NULL THEN
11476 --bug 2955326
11477 /*
11478             l_statement := l_statement ||
11479                           ' PM_PROJECT_REFERENCE = '||''''||
11480                          RTRIM(p_project_in.pm_project_reference)||''''||',';
11481 */
11482             l_statement := l_statement ||
11483                           ' PM_PROJECT_REFERENCE = :pm_project_reference ,';
11484             l_b_pm_proj_ref_flag := 'Y';
11485 --end bug 2955326
11486             l_update_yes_flag := 'Y';
11487 
11488    END IF;
11489 
11490 --CARRYING_OUT_ORGANIZATION_ID
11491    IF p_project_in.carrying_out_organization_id
11492       <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11493    AND p_project_in.carrying_out_organization_id IS NOT NULL THEN
11494        IF p_project_in.carrying_out_organization_id <>
11495              l_project_rec.carrying_out_organization_id THEN
11496           -- check whether this is a valid organization
11497              IF pa_project_pvt.check_valid_org
11498                 (p_project_in.carrying_out_organization_id) = 'N' THEN
11499     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11500     THEN
11501          pa_interface_utils_pub.map_new_amg_msg
11502            ( p_old_message_code => 'PA_INVALID_ORG'
11503             ,p_msg_attribute    => 'CHANGE'
11504             ,p_resize_flag      => 'N'
11505             ,p_msg_context      => 'PROJ'
11506             ,p_attribute1       => l_project_rec.segment1
11507             ,p_attribute2       => ''
11508             ,p_attribute3       => ''
11509             ,p_attribute4       => ''
11510             ,p_attribute5       => '');
11511     END IF;
11512     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11513                 RAISE  FND_API.G_EXC_ERROR;
11514              END IF;
11515 
11516         --  Code Added for the bug#1968394
11517         -- Test the function security for Org changes
11518         --
11519            IF (fnd_function.test('PA_PAXPREPR_UPDATE_ORG') = TRUE) THEN
11520              l_org_func_security := 'Y';
11521            ELSE
11522              l_org_func_security := 'N';
11523            END IF;
11524 
11525 
11526            pa_project_utils2.validate_attribute_change(
11527            X_Context                => 'ORGANIZATION_VALIDATION'
11528           ,X_insert_update_mode     => NULL
11529           ,X_calling_module         => 'UPDATE_PROJECT'
11530           ,X_project_id             => l_project_id
11531           ,X_task_id                => NULL
11532           ,X_old_value              =>
11533                     To_char(l_project_rec.carrying_out_organization_id)
11534           ,X_new_value              =>
11535                     To_char(p_project_in.carrying_out_organization_id)
11536           ,X_project_type           => l_project_rec.project_type
11537           ,X_project_start_date     => l_project_rec.start_date
11538           ,X_project_end_date       => l_project_rec.completion_date
11539           ,X_public_sector_flag     => l_project_rec.public_sector_flag
11540           ,X_task_manager_person_id => NULL
11541           ,X_Service_type           => NULL
11542           ,X_task_start_date        => NULL
11543           ,X_task_end_date          => NULL
11544           ,X_entered_by_user_id     => FND_GLOBAL.USER_ID
11545           ,X_attribute_category     => l_project_rec.attribute_category
11546           ,X_attribute1             => l_project_rec.attribute1
11547           ,X_attribute2             => l_project_rec.attribute2
11548           ,X_attribute3             => l_project_rec.attribute3
11549           ,X_attribute4             => l_project_rec.attribute4
11550           ,X_attribute5             => l_project_rec.attribute5
11551           ,X_attribute6             => l_project_rec.attribute6
11552           ,X_attribute7             => l_project_rec.attribute7
11553           ,X_attribute8             => l_project_rec.attribute8
11554           ,X_attribute9             => l_project_rec.attribute9
11555           ,X_attribute10            => l_project_rec.attribute10
11556           ,X_pm_product_code        => l_project_rec.pm_product_code
11557           ,X_pm_project_reference   => l_project_rec.pm_project_reference
11558           ,X_pm_task_reference      => NULL
11559 --          ,X_functional_security_flag => NULL /*bug#1968394  */
11560           ,X_functional_security_flag => l_org_func_security /*bug#1968394  */
11561           ,x_warnings_only_flag     => l_warnings_only_flag --bug3134205
11562           ,X_err_code               => l_err_code
11563           ,X_err_stage              => l_err_stage
11564           ,X_err_stack              => l_err_stack );
11565 
11566            IF l_err_code > 0 THEN
11567          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
11568                    IF NOT pa_project_pvt.check_valid_message (l_err_stage) THEN
11569                      pa_interface_utils_pub.map_new_amg_msg
11570                      ( p_old_message_code => 'PA_PR_CANT_CHG_PROJ_TYPE'
11571                       ,p_msg_attribute    => 'CHANGE'
11572                       ,p_resize_flag      => 'N'
11573                       ,p_msg_context      => 'PROJ'
11574                       ,p_attribute1       => l_project_rec.segment1
11575                       ,p_attribute2       => ''
11576                       ,p_attribute3       => ''
11577                       ,p_attribute4       => ''
11578                       ,p_attribute5       => '');
11579                   ELSE
11580                      pa_interface_utils_pub.map_new_amg_msg
11581                      ( p_old_message_code => l_err_stage
11582                       ,p_msg_attribute    => 'CHANGE'
11583                       ,p_resize_flag      => 'N'
11584                       ,p_msg_context      => 'PROJ'
11585                       ,p_attribute1       => l_project_rec.segment1
11586                       ,p_attribute2       => ''
11587                       ,p_attribute3       => ''
11588                       ,p_attribute4       => ''
11589                       ,p_attribute5       => '');
11590                    END IF;
11591                END IF;
11592                p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11593                RAISE  FND_API.G_EXC_ERROR;
11594            ELSIF l_err_code < 0 THEN
11595     p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11596                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11597            END IF;
11598 
11599 --bug 2955326
11600 /*
11601            l_statement := l_statement || ' CARRYING_OUT_ORGANIZATION_ID = ' ||
11602                  TO_CHAR(p_project_in.carrying_out_organization_id)||',';
11603 */
11604            l_statement := l_statement || ' CARRYING_OUT_ORGANIZATION_ID = :carrying_out_org_id ,';
11605            l_b_co_org_id_flag := 'Y';
11606 --end bug 2955326
11607            l_update_yes_flag := 'Y';
11608 
11609         END IF; -- IF p_project_in.carrying_out_organization_id <>
11610                 -- PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11611      END IF; -- IF p_project_in.carrying_out_organization_id <>
11612              -- l_project_rec.carrying_out_organization_id
11613 
11614 --PUBLIC_SECTOR_FLAG
11615 
11616        IF p_project_in.public_sector_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11617        AND p_project_in.public_sector_flag IS NOT NULL      --NULL will be ignored
11618        THEN
11619           IF  p_project_in.public_sector_flag <>   l_project_rec.public_sector_flag
11620           THEN
11621 
11622         IF p_project_in.public_sector_flag NOT IN ('Y','N')
11623         THEN
11624           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11625       THEN
11626             pa_interface_utils_pub.map_new_amg_msg
11627              ( p_old_message_code => 'PA_PUBLIC_SECTOR_INVALID'
11628               ,p_msg_attribute    => 'CHANGE'
11629               ,p_resize_flag      => 'N'
11630               ,p_msg_context      => 'PROJ'
11631               ,p_attribute1       => l_project_rec.segment1
11632               ,p_attribute2       => ''
11633               ,p_attribute3       => ''
11634               ,p_attribute4       => ''
11635               ,p_attribute5       => '');
11636           END IF;
11637 
11638               p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11639                   RAISE  FND_API.G_EXC_ERROR;
11640                 END IF;
11641 
11642 --bug 2955326
11643 /*
11644                 l_statement :=    l_statement ||
11645                       ' PUBLIC_SECTOR_FLAG = '||''''||
11646                       p_project_in.public_sector_flag||''''||',';
11647 
11648 */
11649                 l_statement :=      l_statement ||
11650                             ' PUBLIC_SECTOR_FLAG = :public_sector_flag ,';
11651                 l_b_pub_sec_flag := 'Y';
11652 --end bug 2955326
11653                 l_update_yes_flag := 'Y';
11654           END IF;
11655        END IF;
11656 
11657 --DISTRIBUTION_RULE
11658 
11659        IF p_project_in.distribution_rule <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11660        OR p_project_in.distribution_rule IS NULL
11661        THEN
11662 
11663           IF p_project_in.distribution_rule IS NULL
11664           AND l_project_type_class_code = 'CONTRACT'
11665           THEN
11666 
11667     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11668     THEN
11669             pa_interface_utils_pub.map_new_amg_msg
11670              ( p_old_message_code => 'PA_CONTRACT_DIST_RULE_NULL'
11671               ,p_msg_attribute    => 'CHANGE'
11672               ,p_resize_flag      => 'N'
11673               ,p_msg_context      => 'PROJ'
11674               ,p_attribute1       => l_project_rec.segment1
11675               ,p_attribute2       => ''
11676               ,p_attribute3       => ''
11677               ,p_attribute4       => ''
11678               ,p_attribute5       => '');
11679       END IF;
11680 
11681                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11682                 RAISE  FND_API.G_EXC_ERROR;
11683     ELSE
11684 
11685             IF  nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11686               <> nvl(l_project_rec.distribution_rule, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11687 
11688             THEN
11689 
11690                -- Verify whether the dist rule is a valid one
11691                IF pa_project_pvt.check_valid_dist_rule
11692                    (l_project_rec.project_type,
11693                   p_project_in.distribution_rule,
11694                   p_project_in.enable_top_task_inv_mth_flag ) = 'N'  --Bug 3279981
11695                THEN
11696       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11697       THEN
11698             pa_interface_utils_pub.map_new_amg_msg
11699              ( p_old_message_code => 'PA_INVALID_DIST_RULE'
11700               ,p_msg_attribute    => 'CHANGE'
11701               ,p_resize_flag      => 'N'
11702               ,p_msg_context      => 'PROJ'
11703               ,p_attribute1       => l_project_rec.segment1
11704               ,p_attribute2       => ''
11705               ,p_attribute3       => ''
11706               ,p_attribute4       => ''
11707               ,p_attribute5       => '');
11708         END IF;
11709 
11710                   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11711                   RAISE  FND_API.G_EXC_ERROR;
11712                END IF;
11713 
11714                pa_project_utils.check_dist_rule_chg_ok (  l_project_id,
11715                            l_project_rec.distribution_rule,
11716                            p_project_in.distribution_rule,
11717                            l_err_code,
11718                            l_err_stage,
11719                            l_err_stack );
11720 
11721                IF l_err_code > 0
11722                THEN
11723 
11724       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11725       THEN
11726                     IF NOT pa_project_pvt.check_valid_message (l_err_stage)
11727                     THEN
11728                         pa_interface_utils_pub.map_new_amg_msg
11729                         ( p_old_message_code => 'PA_CANT_CHANGE_DIST_RULE'
11730                         ,p_msg_attribute    => 'CHANGE'
11731                         ,p_resize_flag      => 'N'
11732                         ,p_msg_context      => 'PROJ'
11733                         ,p_attribute1       => l_project_rec.segment1
11734                         ,p_attribute2       => ''
11735                         ,p_attribute3       => ''
11736                         ,p_attribute4       => ''
11737                         ,p_attribute5       => '');
11738                      ELSE
11739                         pa_interface_utils_pub.map_new_amg_msg
11740                         ( p_old_message_code => l_err_stage
11741                         ,p_msg_attribute    => 'CHANGE'
11742                         ,p_resize_flag      => 'N'
11743                         ,p_msg_context      => 'PROJ'
11744                         ,p_attribute1       => l_project_rec.segment1
11745                         ,p_attribute2       => ''
11746                         ,p_attribute3       => ''
11747                         ,p_attribute4       => ''
11748                         ,p_attribute5       => '');
11749                     END IF;
11750                   END IF;
11751 
11752                   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11753                   RAISE  FND_API.G_EXC_ERROR;
11754 
11755                ELSIF l_err_code < 0
11756                THEN
11757 
11758       p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11759                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11760                END IF;
11761 
11762 --bug 2955326
11763 /*
11764                l_statement :=   l_statement ||
11765                      ' DISTRIBUTION_RULE = '||''''||
11766                      p_project_in.distribution_rule||''''||',';
11767 */
11768                 l_statement :=  l_statement ||
11769                         ' DISTRIBUTION_RULE = :dist_rule ,';
11770                --Bug 3279981 Review
11771                l_statement := l_statement ||' REVENUE_ACCRUAL_METHOD = :rev_acc_mth ,';
11772                l_statement := l_statement ||' INVOICE_METHOD = :inv_mth ,';
11773 
11774                 l_b_dist_rule_flag := 'Y';
11775 --end bug 2955326
11776                l_update_yes_flag := 'Y';
11777             END IF;
11778           END IF;
11779        END IF;
11780 
11781 --DESCRIPTION
11782 
11783        IF p_project_in.description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11784        OR p_project_in.description IS NULL
11785        THEN
11786           IF nvl(p_project_in.description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11787        <> nvl(l_project_rec.description, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11788            THEN
11789 --bug 2955326
11790 /*
11791              l_statement :=    l_statement ||
11792                   ' DESCRIPTION =  '||''''||
11793                     RTRIM(p_project_in.description)||''''||',';
11794 */
11795              l_statement :=    l_statement ||
11796                         ' DESCRIPTION = :descrp ,';
11797              l_b_desc_flag := 'Y';
11798 --end bug 2955326
11799              l_update_yes_flag := 'Y';
11800 
11801              -- anlee
11802              -- Added for intermedia search
11803              l_ctx_desc := RTRIM(p_project_in.description);
11804              l_ctx_update_flag := 'Y';
11805              -- End of changes
11806           END IF;
11807        END IF;
11808 
11809 --PROJECT_STATUS_CODE
11810 
11811        IF p_project_in.project_status_code <>
11812           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11813        AND p_project_in.project_status_code IS NOT NULL  --NULL will be ignored
11814        THEN
11815           IF p_project_in.project_status_code <>
11816              l_project_rec.project_status_code THEN
11817        IF pa_project_pvt.check_valid_project_status
11818         (p_project_status => p_project_in.project_status_code ) = 'N'
11819     THEN
11820     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
11821             pa_interface_utils_pub.map_new_amg_msg
11822              ( p_old_message_code => 'PA_PROJECT_STATUS_INVALID'
11823               ,p_msg_attribute    => 'CHANGE'
11824               ,p_resize_flag      => 'N'
11825               ,p_msg_context      => 'PROJ'
11826               ,p_attribute1       => l_project_rec.segment1
11827               ,p_attribute2       => ''
11828               ,p_attribute3       => ''
11829               ,p_attribute4       => ''
11830               ,p_attribute5       => '');
11831       END IF;
11832     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11833                 RAISE  FND_API.G_EXC_ERROR;
11834        END IF;
11835 
11836             -- special case for update to and from 'CLOSED'
11837             IF  Pa_project_stus_utils.is_project_status_closed
11838                 (p_project_in.project_status_code) = 'Y' THEN
11839                  l_closing_project := 'Y';
11840                  l_project_status_changed := 'Y';
11841             ELSIF  Pa_project_stus_utils.is_project_status_closed
11842                  (l_project_rec.project_status_code) = 'Y' THEN
11843                  l_reopening_project := 'Y';
11844                  l_project_status_changed := 'Y';
11845             ELSE
11846                 l_project_status_changed := 'Y';
11847             END IF;
11848           END IF;
11849        END IF;
11850 
11851 --PROJECT_START_DATE and PROJECT_COMPLETION_DATE
11852 
11853        l_project_start_date      := p_project_in.start_date;
11854        l_project_completion_date := p_project_in.completion_date;
11855 
11856        -- Bug 7520570: Do not update project dates when the flow is from MSP for the workplan structure
11857        IF p_pm_product_code = 'MSPROJECT' AND p_structure_in.structure_type = 'WORKPLAN' THEN
11858          l_project_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
11859          l_project_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
11860        END IF;
11861 
11862  -- Bug 503976 Project Completion is set to default g_miss_date ... Starts
11863 
11864    IF l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11865    THEN l_project_in_rec.completion_date := NULL;
11866    END IF;
11867 
11868  -- Bug 503976 Project Completion is set to default g_miss_date ... Ends
11869 
11870 pa_project_pvt.check_start_end_date
11871 (p_old_start_date    => l_project_rec.start_date
11872 ,p_new_start_date    => l_project_start_date
11873 ,p_old_end_date      => l_project_rec.completion_date
11874 ,p_new_end_date      => l_project_completion_date
11875 ,p_update_start_date_flag  => l_update_start_date_flag
11876 ,p_update_end_date_flag    => l_update_end_date_flag
11877 ,p_return_status    => l_return_status );
11878 
11879 /*--Bug 6511907 PJR Date Validation Enhancement ----- Start--*/
11880 /*-- Validating Project Start and Completion Date against
11881   Resource Request/Assignments Min Start and Max End dates --*/
11882 
11883 Declare
11884   l_validate           VARCHAR2(10);
11885   l_start_date_status  VARCHAR2(10);
11886   l_end_date_status    VARCHAR2(10);
11887 Begin
11888  If l_project_start_date is not null or l_project_completion_date is not null then
11889 
11890    PA_PROJECT_DATES_UTILS.Validate_Project_Dates
11891                (l_project_id, l_project_start_date, l_project_completion_date,
11892                            l_validate, l_start_date_status, l_end_date_status);
11893 
11894    If l_validate = 'Y' and l_start_date_status = 'I' Then
11895 
11896       pa_utils.add_message
11897 	   ( p_app_short_name  => 'PA'
11898 	    ,p_msg_name	    => 'PA_PROJ_DATE_START_ERROR'
11899 	    ,p_token1          => ''
11900 	    ,p_value1          => ''
11901 	    ,p_token2          => ''
11902 	    ,p_value2          => ''
11903 	    ,p_token3          => ''
11904 	    ,p_value3          => ''
11905 	   );
11906 
11907       RAISE  FND_API.G_EXC_ERROR;
11908    End If;
11909 
11910    If l_validate = 'Y' and l_end_date_status = 'I' Then
11911 
11912       pa_utils.add_message
11913 	   ( p_app_short_name  => 'PA'
11914 	    ,p_msg_name	    => 'PA_PROJ_DATE_FINISH_ERROR'
11915 	    ,p_token1          => ''
11916 	    ,p_value1          => ''
11917 	    ,p_token2          => ''
11918 	    ,p_value2          => ''
11919 	    ,p_token3          => ''
11920 	    ,p_value3          => ''
11921 	   );
11922 
11923       RAISE  FND_API.G_EXC_ERROR;
11924    End If;
11925  End If;
11926 End;
11927 
11928 /*--Bug 6511907 PJR Date Validation Enhancement ----- End--*/
11929      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11930          p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11931      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11932       ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11933          p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11934      RAISE FND_API.G_EXC_ERROR;
11935       END IF;
11936 
11937 -- Checking of valid project start and end date is done after adding and updating the tasks,
11938 -- since dates of tasks might change to be within the project begin and end date.
11939 
11940 
11941        IF l_update_start_date_flag = 'Y'
11942        THEN
11943 --bug 2955326
11944 /*
11945              l_statement :=   l_statement ||
11946                      ' START_DATE = to_date('''||
11947                           to_char(l_project_start_date,'YYYY/MM/DD')||
11948                              ''', ''YYYY/MM/DD''),';
11949 */
11950              l_statement :=   l_statement ||
11951                      ' START_DATE = :start_date ,';
11952              l_b_start_date_flag := 'Y';
11953 --end bug 2955326
11954              l_update_yes_flag := 'Y';
11955        END IF;
11956 
11957        IF l_update_end_date_flag = 'Y'
11958        THEN
11959 --bug 2955326
11960 /*
11961              l_statement :=   l_statement ||
11962                      ' COMPLETION_DATE = to_date('''||
11963                           to_char(l_project_completion_date,'YYYY/MM/DD')||
11964                              ''', ''YYYY/MM/DD''),';
11965 */
11966              l_statement :=   l_statement ||
11967                      ' COMPLETION_DATE = :comp_date ,';
11968              l_b_comp_date_flag := 'Y';
11969 --end bug 2955326
11970              l_update_yes_flag := 'Y';
11971        END IF;
11972 
11973 -- Update other date fields which are maintained only  in the external system
11974 
11975 -- update Actual start date and actual finish date
11976 
11977 /*  Task progress changes  : Actual start date should be updated from task progress and ignored from AMG
11978        IF (p_project_in.actual_start_date IS NOT NULL AND
11979            p_project_in.actual_start_date <>
11980            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
11981            NVL(l_project_rec.actual_start_date,
11982                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
11983                p_project_in.actual_start_date THEN
11984 
11985              l_statement :=   l_statement ||
11986                      ' ACTUAL_START_DATE = to_date('''||
11987                           to_char(p_project_in.actual_start_date,'YYYY/MM/DD')||
11988                              ''', ''YYYY/MM/DD''),';
11989 
11990 
11991              l_update_yes_flag := 'Y';
11992        END IF;
11993 
11994 
11995        IF (p_project_in.actual_finish_date IS NOT NULL AND
11996            p_project_in.actual_finish_date <>
11997            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
11998            NVL(l_project_rec.actual_finish_date,
11999                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12000                p_project_in.actual_finish_date THEN
12001 
12002              l_statement :=   l_statement ||
12003                      ' ACTUAL_FINISH_DATE = to_date('''||
12004                          to_char(p_project_in.actual_finish_date,'YYYY/MM/DD')||
12005                              ''', ''YYYY/MM/DD''),';
12006           l_update_yes_flag := 'Y';
12007        END IF;
12008 */
12009 
12010 -- update early start date and early finish date
12011        IF (p_project_in.early_start_date IS NOT NULL AND
12012            p_project_in.early_start_date <>
12013            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12014            NVL(l_project_rec.early_start_date,
12015                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12016                p_project_in.early_start_date THEN
12017 --bug 2955326
12018 /*
12019              l_statement :=   l_statement ||
12020                      ' EARLY_START_DATE = to_date('''||
12021                           to_char(p_project_in.early_start_date,'YYYY/MM/DD')||
12022                              ''', ''YYYY/MM/DD''),';
12023 */
12024              l_statement :=   l_statement ||
12025                      ' EARLY_START_DATE = :early_start_date ,';
12026              l_b_early_sd_flag := 'Y';
12027 --end bug 2955326
12028              l_update_yes_flag := 'Y';
12029        END IF;
12030 
12031        IF (p_project_in.early_finish_date IS NOT NULL AND
12032            p_project_in.early_finish_date <>
12033            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12034            NVL(l_project_rec.early_finish_date,
12035                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12036                p_project_in.early_finish_date THEN
12037 --bug 2955326
12038 /*
12039              l_statement :=   l_statement ||
12040                      ' EARLY_FINISH_DATE = to_date('''||
12041                           to_char(p_project_in.early_finish_date,'YYYY/MM/DD')||
12042                              ''', ''YYYY/MM/DD''),';
12043 */
12044                 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
12045                 IF p_project_in.early_start_date  IS NOT NULL AND p_project_in.early_start_date <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12046 
12047                            IF  p_project_in.early_finish_date < p_project_in.early_start_date THEN
12048 
12049                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12050 
12051                                          pa_utils.add_message
12052                                          (
12053                                            p_app_short_name   => 'PA'
12054                                           ,p_msg_name         => 'PA_SU_INVALID_DATES'
12055                                          );
12056 
12057                                 END IF;
12058 
12059                                 RAISE  FND_API.G_EXC_ERROR;
12060                            END IF;
12061                            l_statement :=   l_statement ||
12062                            ' EARLY_FINISH_DATE = :early_finish_date ,';
12063                            l_b_early_fd_flag := 'Y';
12064                            l_update_yes_flag := 'Y';
12065 
12066                 ELSIF  l_project_rec.early_start_date  IS NOT NULL THEN
12067 
12068                           IF p_project_in.early_finish_date < l_project_rec.early_start_date  THEN
12069 
12070                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12071 
12072                                          pa_utils.add_message
12073                                          (
12074                                            p_app_short_name   => 'PA'
12075                                           ,p_msg_name         => 'PA_SU_INVALID_DATES'
12076                                          );
12077 
12078                                 END IF;
12079 
12080                                 RAISE  FND_API.G_EXC_ERROR;
12081                           END IF;
12082                           l_statement :=   l_statement ||
12083                           ' EARLY_FINISH_DATE = :early_finish_date ,';
12084                           l_b_early_fd_flag := 'Y';
12085                           l_update_yes_flag := 'Y';
12086                 ELSE
12087 
12088                          l_statement :=   l_statement ||
12089                          ' EARLY_FINISH_DATE = :early_finish_date ,';
12090                          l_b_early_fd_flag := 'Y';
12091                          --end bug 2955326
12092                          l_update_yes_flag := 'Y';
12093 
12094                 END IF; --End of Logic added for Bug#5185673
12095        END IF;
12096 
12097 -- update Late start date and Late finish date
12098 
12099        IF (p_project_in.late_start_date IS NOT NULL AND
12100            p_project_in.late_start_date <>
12101            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12102            NVL(l_project_rec.late_start_date,
12103                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12104                p_project_in.late_start_date THEN
12105 --bug 2955326
12106 /*
12107              l_statement :=   l_statement ||
12108                      ' LATE_START_DATE = to_date('''||
12109                           to_char(p_project_in.late_start_date,'YYYY/MM/DD')||
12110                              ''', ''YYYY/MM/DD''),';
12111 */
12112 
12113              l_statement :=   l_statement ||
12114                      ' LATE_START_DATE = :late_start_date ,';
12115              l_b_late_sd_flag := 'Y';
12116 --end bug 2955326
12117              l_update_yes_flag := 'Y';
12118        END IF;
12119 
12120 
12121        IF (p_project_in.late_finish_date IS NOT NULL AND
12122            p_project_in.late_finish_date <>
12123            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12124            NVL(l_project_rec.late_finish_date,
12125                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12126                p_project_in.late_finish_date THEN
12127 --bug 2955326
12128 /*
12129              l_statement :=   l_statement ||
12130                      ' LATE_FINISH_DATE = to_date('''||
12131                           to_char(p_project_in.late_finish_date,'YYYY/MM/DD')||
12132                              ''', ''YYYY/MM/DD''),';
12133 */
12134                 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
12135                 IF p_project_in.late_start_date  IS NOT NULL AND p_project_in.late_start_date <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12136 
12137                            IF  p_project_in.late_finish_date < p_project_in.late_start_date THEN
12138 
12139                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12140 
12141                                          pa_utils.add_message
12142                                          (
12143                                            p_app_short_name   => 'PA'
12144                                           ,p_msg_name         => 'PA_SU_INVALID_DATES'
12145                                          );
12146 
12147                                 END IF;
12148 
12149                                 RAISE  FND_API.G_EXC_ERROR;
12150                            END IF;
12151                           l_statement :=   l_statement ||
12152                           ' LATE_FINISH_DATE = :late_finish_date ,';
12153                           l_b_late_fd_flag := 'Y';
12154                           l_update_yes_flag := 'Y';
12155                 ELSIF  l_project_rec.late_start_date  IS NOT NULL THEN
12156                           IF p_project_in.late_finish_date < l_project_rec.late_start_date  THEN
12157 
12158                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12159 
12160                                          pa_utils.add_message
12161                                          (
12162                                            p_app_short_name   => 'PA'
12163                                           ,p_msg_name         => 'PA_SU_INVALID_DATES'
12164                                          );
12165 
12166                                 END IF;
12167 
12168                                 RAISE  FND_API.G_EXC_ERROR;
12169                           END IF;
12170                           l_statement :=   l_statement ||
12171                           ' LATE_FINISH_DATE = :late_finish_date ,';
12172                           l_b_late_fd_flag := 'Y';
12173                           l_update_yes_flag := 'Y';
12174                 ELSE
12175                           l_statement :=   l_statement ||
12176                           ' LATE_FINISH_DATE = :late_finish_date ,';
12177                           l_b_late_fd_flag := 'Y';
12178                           --end bug 2955326
12179                           l_update_yes_flag := 'Y';
12180 
12181                 END IF; --End of Logic added for Bug#5185673.
12182         END IF;
12183 
12184 
12185 -- update scheduled start date and scheduled finish date
12186 
12187        IF (p_project_in.scheduled_start_date IS NOT NULL AND
12188            p_project_in.scheduled_start_date <>
12189            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12190            NVL(l_project_rec.scheduled_start_date,
12191                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12192                p_project_in.scheduled_start_date THEN
12193 --bug 2955326
12194 /*
12195              l_statement :=   l_statement ||
12196                      ' SCHEDULED_START_DATE = to_date('''||
12197                       to_char(p_project_in.scheduled_start_date,'YYYY/MM/DD')||
12198                              ''', ''YYYY/MM/DD''),';
12199 
12200 */
12201              l_statement :=   l_statement ||
12202                      ' SCHEDULED_START_DATE = :sch_start_date ,';
12203              l_b_sch_sd_flag := 'Y';
12204 --end bug 2955326
12205              l_update_yes_flag := 'Y';
12206        END IF;
12207 
12208 
12209        IF (p_project_in.scheduled_finish_date IS NOT NULL AND
12210            p_project_in.scheduled_finish_date <>
12211            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12212            NVL(l_project_rec.scheduled_finish_date,
12213                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12214                p_project_in.scheduled_finish_date THEN
12215 --bug 2955326
12216 /*
12217              l_statement :=   l_statement ||
12218                      ' SCHEDULED_FINISH_DATE = to_date('''||
12219                      to_char(p_project_in.scheduled_finish_date,'YYYY/MM/DD')||
12220                              ''', ''YYYY/MM/DD''),';
12221 */
12222              l_statement :=   l_statement ||
12223                      ' SCHEDULED_FINISH_DATE = :sch_finish_date ,';
12224              l_b_sch_fd_flag := 'Y';
12225 --end bug 2955326
12226              l_update_yes_flag := 'Y';
12227        END IF;
12228 
12229   -- Check if any of the df columns have changed (attribute1 to attribute10)
12230   -- 04/11/97
12231   -- Bug 7277032
12232 
12233        IF p_project_in.attribute_category  <>
12234           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12235           OR p_project_in.attribute_category IS NULL  THEN
12236           IF NVL(p_project_in.attribute_category,
12237                  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12238            <> NVL(l_project_rec.attribute_category,
12239                  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
12240 --bug 2955326
12241 /*
12242              l_statement  := l_statement ||
12243                      ' ATTRIBUTE_CATEGORY =  '||''''||
12244                        RTRIM(p_project_in.attribute_category)||''''||',';
12245 */
12246              l_statement  := l_statement ||
12247                          ' ATTRIBUTE_CATEGORY = :attr_cat ,';
12248              l_b_attr_cat_flag := 'Y';
12249 --end bug 2955326
12250              l_update_yes_flag := 'Y';
12251           END IF;
12252        END IF;
12253 
12254   -- Bug 7277032
12255        IF p_project_in.attribute1  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12256           OR p_project_in.attribute1 IS NULL  THEN
12257           IF NVL(p_project_in.attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12258            <> NVL(l_project_rec.attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12259               THEN
12260 --bug 2955326
12261 /*
12262              l_statement  := l_statement ||
12263                 ' ATTRIBUTE1 =  '||''''||
12264                   RTRIM(p_project_in.attribute1)||''''||',';
12265 */
12266              l_statement  := l_statement ||
12267                     ' ATTRIBUTE1 = :attr1 ,';
12268              l_b_attr1_flag := 'Y';
12269 --end bug 2955326
12270              l_update_yes_flag := 'Y';
12271           END IF;
12272        END IF;
12273 
12274   -- Bug 7277032
12275        IF p_project_in.attribute2  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12276           OR p_project_in.attribute2 IS NULL  THEN
12277           IF NVL(p_project_in.attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12278            <> NVL(l_project_rec.attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12279               THEN
12280 --bug 2955326
12281 /*
12282              l_statement  := l_statement ||
12283                      ' ATTRIBUTE2 =  '||''''||
12284                        RTRIM(p_project_in.attribute2)||''''||',';
12285 */
12286              l_statement  := l_statement ||
12287                     ' ATTRIBUTE2 = :attr2 ,';
12288              l_b_attr2_flag := 'Y';
12289 --end bug 2955326
12290              l_update_yes_flag := 'Y';
12291           END IF;
12292        END IF;
12293 
12294   -- Bug 7277032
12295        IF p_project_in.attribute3  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12296           OR p_project_in.attribute3 IS NULL  THEN
12297           IF NVL(p_project_in.attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12298            <> NVL(l_project_rec.attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12299               THEN
12300 --bug 2955326
12301 /*
12302              l_statement  := l_statement ||
12303                      ' ATTRIBUTE3 =  '||''''||
12304                        RTRIM(p_project_in.attribute3)||''''||',';
12305 */
12306              l_statement  := l_statement ||
12307                     ' ATTRIBUTE3 = :attr3 ,';
12308              l_b_attr3_flag := 'Y';
12309 --end bug 2955326
12310              l_update_yes_flag := 'Y';
12311           END IF;
12312        END IF;
12313 
12314   -- Bug 7277032
12315        IF p_project_in.attribute4  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12316           OR p_project_in.attribute4 IS NULL  THEN
12317           IF NVL(p_project_in.attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12318            <> NVL(l_project_rec.attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12319               THEN
12320 --bug 2955326
12321 /*
12322              l_statement  := l_statement ||
12323                 ' ATTRIBUTE4 =  '||''''||
12324                   RTRIM(p_project_in.attribute4)||''''||',';
12325 */
12326              l_statement  := l_statement ||
12327                     ' ATTRIBUTE4 = :attr4 ,';
12328              l_b_attr4_flag := 'Y';
12329 --end bug 2955326
12330              l_update_yes_flag := 'Y';
12331           END IF;
12332        END IF;
12333 
12334   -- Bug 7277032
12335        IF p_project_in.attribute5  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12336           OR p_project_in.attribute5 IS NULL  THEN
12337           IF NVL(p_project_in.attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12338            <> NVL(l_project_rec.attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12339               THEN
12340 --bug 2955326
12341 /*
12342              l_statement  := l_statement ||
12343                      ' ATTRIBUTE5 =  '||''''||
12344                        RTRIM(p_project_in.attribute5)||''''||',';
12345 */
12346              l_statement  := l_statement ||
12347                     ' ATTRIBUTE5 = :attr5 ,';
12348              l_b_attr5_flag := 'Y';
12349 --end bug 2955326
12350              l_update_yes_flag := 'Y';
12351           END IF;
12352        END IF;
12353 
12354   -- Bug 7277032
12355        IF p_project_in.attribute6  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12356           OR p_project_in.attribute6 IS NULL  THEN
12357           IF NVL(p_project_in.attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12358            <> NVL(l_project_rec.attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12359               THEN
12360 --bug 2955326
12361 /*
12362              l_statement  := l_statement ||
12363                      ' ATTRIBUTE6 =  '||''''||
12364                        RTRIM(p_project_in.attribute6)||''''||',';
12365 */
12366              l_statement  := l_statement ||
12367                     ' ATTRIBUTE6 = :attr6 ,';
12368              l_b_attr6_flag := 'Y';
12369 --end bug 2955326
12370              l_update_yes_flag := 'Y';
12371           END IF;
12372        END IF;
12373 
12374   -- Bug 7277032
12375        IF p_project_in.attribute7  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12376           OR p_project_in.attribute7 IS NULL  THEN
12377           IF NVL(p_project_in.attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12378            <> NVL(l_project_rec.attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12379               THEN
12380 --bug 2955326
12381 /*
12382              l_statement  := l_statement ||
12383                      ' ATTRIBUTE7 =  '||''''||
12384                        RTRIM(p_project_in.attribute7)||''''||',';
12385 */
12386              l_statement  := l_statement ||
12387                     ' ATTRIBUTE7 = :attr7 ,';
12388              l_b_attr7_flag := 'Y';
12389 --end bug 2955326
12390              l_update_yes_flag := 'Y';
12391           END IF;
12392        END IF;
12393 
12394   -- Bug 7277032
12395        IF p_project_in.attribute8  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12396           OR p_project_in.attribute8 IS NULL  THEN
12397           IF NVL(p_project_in.attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12398            <> NVL(l_project_rec.attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12399               THEN
12400 --bug 2955326
12401 /*
12402              l_statement  := l_statement ||
12403                      ' ATTRIBUTE8 =  '||''''||
12404                        RTRIM(p_project_in.attribute8)||''''||',';
12405 */
12406              l_statement  := l_statement ||
12407                     ' ATTRIBUTE8 = :attr8 ,';
12408              l_b_attr8_flag := 'Y';
12409 --end bug 2955326
12410              l_update_yes_flag := 'Y';
12411           END IF;
12412        END IF;
12413 
12414   -- Bug 7277032
12415        IF p_project_in.attribute9  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12416           OR p_project_in.attribute9 IS NULL  THEN
12417           IF NVL(p_project_in.attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12418            <> NVL(l_project_rec.attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12419               THEN
12420 --bug 2955326
12421 /*
12422              l_statement  := l_statement ||
12423                      ' ATTRIBUTE9 =  '||''''||
12424                        RTRIM(p_project_in.attribute9)||''''||',';
12425 */
12426              l_statement  := l_statement ||
12427                     ' ATTRIBUTE9 = :attr9 ,';
12428              l_b_attr9_flag := 'Y';
12429 --end bug 2955326
12430              l_update_yes_flag := 'Y';
12431           END IF;
12432        END IF;
12433 
12434   -- Bug 7277032
12435        IF p_project_in.attribute10  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12436           OR p_project_in.attribute10 IS NULL  THEN
12437           IF NVL(p_project_in.attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12438            <> NVL(l_project_rec.attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12439               THEN
12440 --bug 2955326
12441 /*
12442              l_statement  := l_statement ||
12443                      ' ATTRIBUTE10 =  '||''''||
12444                        RTRIM(p_project_in.attribute10)||''''||',';
12445 */
12446              l_statement  := l_statement ||
12447                     ' ATTRIBUTE10 = :attr10 ,';
12448              l_b_attr10_flag := 'Y';
12449 --end bug 2955326
12450              l_update_yes_flag := 'Y';
12451           END IF;
12452        END IF;
12453 
12454 -- Tax Code Changes Starts here ...
12455 
12456 --Bug 4606925: Modified below condition so that output_tax_code can be updated to null
12457 IF ((p_project_in.output_tax_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12458      AND p_project_in.output_tax_code IS NOT NULL) OR (p_project_in.output_tax_code IS NULL))  THEN
12459      IF NVL(p_project_in.output_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12460            <> NVL(l_project_rec.output_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12461               THEN
12462 --bug 2955326
12463 /*
12464              l_statement  := l_statement ||
12465                        ' OUTPUT_TAX_CODE =  '||''''||
12466                        RTRIM(p_project_in.output_tax_code)||''''||',';
12467 */              -- Added for 5188246
12468                 IF p_project_in.output_tax_code IS NOT NULL THEN
12469 
12470                    OPEN l_cur_retention_tax_code(p_project_in.output_tax_code);
12471                    FETCH l_cur_retention_tax_code INTO l_dummy_cur_output_tax_code;
12472                    CLOSE l_cur_retention_tax_code;
12473 
12474                    IF  l_dummy_cur_output_tax_code <> 'Y' THEN
12475                         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12476                                                p_msg_name       => 'PA_INVLD_OUTPUT_TAX_CODE');
12477 
12478                         p_return_status :=  FND_API.G_RET_STS_ERROR;
12479                         RAISE FND_API.G_EXC_ERROR;
12480 
12481                    END IF;
12482 
12483 
12484                 END IF ;
12485                 -- End of 5188246
12486              l_statement  := l_statement ||
12487                        ' OUTPUT_TAX_CODE = :output_tx_code ,';
12488              l_b_output_tx_code_flag := 'Y';
12489 --end bug 2955326
12490              l_update_yes_flag := 'Y';
12491           END IF;
12492        END IF;
12493 
12494 --Bug 4606925: Modified below condition so that retention_tax_code can be updated to null
12495 IF ((p_project_in.retention_tax_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12496      AND p_project_in.retention_tax_code IS NOT NULL) OR (p_project_in.retention_tax_code IS NULL))  THEN
12497      IF NVL(p_project_in.retention_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12498            <> NVL(l_project_rec.retention_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12499               THEN
12500 --bug 2955326
12501 /*
12502              l_statement  := l_statement ||
12503                        ' RETENTION_TAX_CODE =  '||''''||
12504                        RTRIM(p_project_in.retention_tax_code)||''''||',';
12505 */              -- Added for Bug 5188246
12506                 IF p_project_in.retention_tax_code IS NOT NULL THEN
12507 
12508                    OPEN l_cur_retention_tax_code(p_project_in.retention_tax_code);
12509                    FETCH l_cur_retention_tax_code INTO l_dummy_cur_retention_tax_code;
12510                     CLOSE l_cur_retention_tax_code;
12511 
12512                    IF  l_dummy_cur_retention_tax_code <> 'Y'  THEN
12513                         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12514                                                p_msg_name       => 'PA_INVLD_RETENTION_TAX_CODE');
12515 
12516                         p_return_status :=  FND_API.G_RET_STS_ERROR;
12517                         RAISE FND_API.G_EXC_ERROR;
12518 
12519                    END IF;
12520 
12521 
12522                 END IF ;
12523                 -- End of Bug 5188246.
12524              l_statement  := l_statement ||
12525                        ' RETENTION_TAX_CODE = :ret_tx_code ,';
12526              l_b_ret_tx_code_flag := 'Y';
12527 --end bug 2955326
12528              l_update_yes_flag := 'Y';
12529           END IF;
12530        END IF;
12531 
12532 --  IC and Multi National Currency changes Starts ...
12533 --  Bug#5188931
12534 IF (p_project_in.project_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  OR p_project_in.project_currency_code IS NULL) THEN
12535 
12536    IF     NVL(p_project_in.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.project_currency_code,
12537           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
12538 
12539           -- Added the following Logic here to validate passed currency code.Bug#5188931
12540           -- Checking whether passed currency code is a valid value and not a junk value
12541           OPEN  cur_check_cur_code( p_project_in.project_currency_code );
12542           FETCH cur_check_cur_code INTO l_check_cur_code_flag;
12543           CLOSE cur_check_cur_code;
12544 
12545           IF (l_check_cur_code_flag = 'Y') THEN
12546 
12547                 --This means the currency code passed is not null and valid. Hence validate whether update is allowed.
12548 
12549                 --1. Check whether bill intercompany invoices flag is checked at the project type level
12550                 OPEN  cur_check_prvdr_flag(p_project_in.pa_project_id);
12551                 FETCH cur_check_prvdr_flag INTO l_prvdr_flag;
12552                 CLOSE cur_check_prvdr_flag;
12553 
12554                 IF l_prvdr_flag ='Y' THEN
12555                         l_allow_update_flag :=  'N';
12556 
12557 
12558                 --2. Check whether project value ,funding ,event,expenditure item, budget transaction exist
12559                 --If any one of these exist, then the update should not be allowed. The check for existence of
12560                 --sub projects is not done here as this has been already done above thru Bug#3912783.
12561 
12562                 ELSIF (    NVL( pa_multi_currency_billing.check_mcb_trans_exist ( p_project_in.pa_project_id ), 'N' ) = 'Y' OR
12563                            l_project_rec.project_value IS NOT NULL                                                          OR
12564                            PA_IMPL_OPTIONS_PUB.check_budget_trans_exists( p_project_in.pa_project_id )                = 'Y'
12565                    ) THEN
12566 
12567                         l_allow_update_flag :=  'N';
12568                 END IF;
12569 
12570                 IF l_allow_update_flag = 'N' THEN
12571 
12572                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12573 
12574                                          pa_utils.add_message
12575                                          (
12576                                            p_app_short_name   => 'PA'
12577                                           ,p_msg_name         => 'PA_CURR_CODE_NOT_UPDATBL'
12578                                          );
12579 
12580                         END IF;
12581 
12582                         RAISE  FND_API.G_EXC_ERROR;
12583                 ELSE
12584 
12585                                 --bug 2955326
12586                                 /*
12587                                              l_statement  := l_statement ||
12588                                                        ' PROJECT_CURRENCY_CODE =  '||''''||
12589                                                        RTRIM(p_project_in.project_currency_code)||''''||',';
12590                                 */
12591                                              l_statement  := l_statement ||
12592                                              ' PROJECT_CURRENCY_CODE = :proj_cur_code ,';
12593                                              l_b_proj_cur_code_flag := 'Y';
12594                                 --end bud 2955326
12595                                              l_update_yes_flag := 'Y';
12596                 END IF;
12597 
12598           ELSE
12599 
12600                 --invalid currency code has been passed hence throw error
12601                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12602 
12603                                          pa_utils.add_message
12604                                          (
12605                                            p_app_short_name   => 'PA'
12606                                           ,p_msg_name         => 'PA_INVALID_PROJ_CURR_CODE'
12607                                          );
12608 
12609                 END IF;
12610 
12611                 RAISE  FND_API.G_EXC_ERROR;
12612           END IF;
12613 
12614    END IF;
12615 
12616 END IF; --End of changes Bug#5188931
12617 
12618        IF p_project_in.allow_cross_charge_flag  <>
12619 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12620           AND p_project_in.allow_cross_charge_flag IS NOT NULL  THEN
12621           IF NVL(p_project_in.allow_cross_charge_flag,
12622 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12623            <> NVL(l_project_rec.allow_cross_charge_flag,
12624 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12625               THEN
12626 --bug 2955326
12627 /*
12628              l_statement  := l_statement ||
12629                        ' ALLOW_CROSS_CHARGE_FLAG =  '||''''||
12630                      RTRIM(p_project_in.allow_cross_charge_flag)||''''||',';
12631 */
12632              l_statement  := l_statement ||
12633                        ' ALLOW_CROSS_CHARGE_FLAG = :allow_x_chg_flag ,';
12634              l_b_allow_x_chg_flag := 'Y';
12635 --end bug 2955326
12636              l_update_yes_flag := 'Y';
12637           END IF;
12638        END IF;
12639 
12640        IF p_project_in.project_rate_date  <>
12641 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12642           AND p_project_in.project_rate_date IS NOT NULL  THEN
12643           IF NVL(p_project_in.project_rate_date,
12644 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12645            <> NVL(l_project_rec.project_rate_date,
12646 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12647               THEN
12648 --bug 2955326
12649 /*
12650              l_statement  := l_statement ||
12651                        ' PROJECT_RATE_DATE =  to_date('''||
12652                      to_char(p_project_in.project_rate_date,'YYYY/MM/DD')||
12653                              ''', ''YYYY/MM/DD''),';
12654 */
12655              l_statement  := l_statement ||
12656                        ' PROJECT_RATE_DATE = :proj_rt_date ,';
12657              l_b_proj_rt_date_flag := 'Y';
12658 --end bug 2955326
12659              l_update_yes_flag := 'Y';
12660           END IF;
12661        END IF;
12662 
12663 --dbms_output.put_line('p_project_in.project_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ' || p_project_in.project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
12664        IF ((p_project_in.project_rate_type  <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12665        AND p_project_in.project_rate_type IS NOT NULL )
12666        OR p_project_in.project_rate_type IS NULL  ) THEN-- changed this if condition for bug no 5225146
12667 
12668           IF NVL(p_project_in.project_rate_type,
12669 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12670            <> NVL(l_project_rec.project_rate_type,
12671 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12672               THEN
12673 --bug 2955326
12674 /*
12675              l_statement  := l_statement ||
12676                        ' PROJECT_RATE_TYPE =  '||''''||
12677              RTRIM(p_project_in.project_rate_type)||''''||',';
12678 */
12679                 -- Added for bug 5225146
12680                 IF p_project_in.project_rate_type IS NOT NULL THEN
12681 
12682                      OPEN l_cur_project_rate_type(p_project_in.project_rate_type);
12683                      FETCH l_cur_project_rate_type INTO l_dummy_project_rate_type;
12684                      CLOSE l_cur_project_rate_type;
12685 
12686                      IF l_dummy_project_rate_type <> 'Y' THEN
12687 
12688                              PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12689                                                   p_msg_name       => 'PA_INVLD_PROJ_RATE_TYPE');
12690                              p_return_status :=  FND_API.G_RET_STS_ERROR;
12691                              RAISE FND_API.G_EXC_ERROR;
12692                      END IF ;
12693                  END IF ;
12694 
12695              l_statement  := l_statement ||
12696                        ' PROJECT_RATE_TYPE = :proj_rt_tp ,';
12697              l_b_proj_rt_tp_flag := 'Y';
12698 --bug 2955326
12699              l_update_yes_flag := 'Y';
12700           END IF;
12701        END IF;
12702 
12703        IF p_project_in.cc_process_labor_flag  <>
12704 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12705           AND p_project_in.cc_process_labor_flag IS NOT NULL  THEN
12706           IF NVL(p_project_in.cc_process_labor_flag,
12707 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12708            <> NVL(l_project_rec.cc_process_labor_flag,
12709 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12710               THEN
12711 --bug 2955326
12712 /*
12713              l_statement  := l_statement ||
12714                        ' CC_PROCESS_LABOR_FLAG =  '||''''||
12715              RTRIM(p_project_in.cc_process_labor_flag)||''''||',';
12716 */
12717              l_statement  := l_statement ||
12718                        ' CC_PROCESS_LABOR_FLAG = :cc_proc_lb_flag ,';
12719              l_cc_proc_lb_flag := 'Y';
12720 --end bug 2955326
12721              l_update_yes_flag := 'Y';
12722           END IF;
12723        END IF;
12724 
12725  -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
12726  IF ( (p_project_in.labor_tp_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12727         AND p_project_in.labor_tp_schedule_id IS NOT NULL) OR
12728       (p_project_in.labor_tp_schedule_id IS NULL) )
12729    THEN
12730      -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
12731      IF ( (p_project_in.labor_tp_schedule_id <> NVL(l_project_rec.labor_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
12732           OR (p_project_in.labor_tp_schedule_id IS NULL) )
12733           THEN
12734 --bug 2955326
12735 /*
12736              l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = ' ||
12737                   TO_CHAR(p_project_in.labor_tp_schedule_id)||',';
12738 */
12739 
12740              l_cc_process_labor_flag  := p_project_in.cc_process_labor_flag; /* Added for Bug 5395048 */
12741              l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = :lb_tp_sch_id ,';
12742              l_b_lb_tp_sch_id_flag := 'Y'; -- added for Bug 5395048
12743              l_update_yes_flag := 'Y';
12744 
12745              -- 5402979 :: Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
12746              -- we need to set the project cross charge process labor flag to 'N'
12747              IF p_project_in.labor_tp_schedule_id IS NULL THEN
12748                  l_cc_process_labor_flag := 'N';
12749 
12750                  IF l_cc_proc_lb_flag = 'N' THEN
12751                       l_statement  := l_statement ||
12752                            ' CC_PROCESS_LABOR_FLAG = :cc_proc_lb_flag ,';
12753                  END IF;
12754 
12755                  l_cc_proc_lb_flag := 'Y';
12756                  l_update_yes_flag := 'Y';
12757              END IF;
12758              -- code changes end for Bug 5395048
12759 
12760           END IF;
12761        END IF;
12762 
12763        IF p_project_in.labor_tp_fixed_date  <>
12764 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12765           AND p_project_in.labor_tp_fixed_date IS NOT NULL  THEN
12766           IF NVL(p_project_in.labor_tp_fixed_date,
12767 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12768            <> NVL(l_project_rec.labor_tp_fixed_date,
12769 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12770               THEN
12771 --bug 2955326
12772 /*
12773              l_statement  := l_statement ||
12774                        ' LABOR_TP_FIXED_DATE =  to_date('''||
12775                      to_char(p_project_in.labor_tp_fixed_date,'YYYY/MM/DD')||
12776                              ''', ''YYYY/MM/DD''),';
12777 */
12778              l_statement  := l_statement ||
12779                        ' LABOR_TP_FIXED_DATE = :lb_tp_fixed_dt ,';
12780              l_b_lb_tp_fixed_dt_flag := 'Y';
12781 --end bug 2955326
12782              l_update_yes_flag := 'Y';
12783           END IF;
12784        END IF;
12785 
12786        IF p_project_in.cc_process_nl_flag  <>
12787 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12788           AND p_project_in.cc_process_nl_flag IS NOT NULL  THEN
12789           IF NVL(p_project_in.cc_process_nl_flag,
12790 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12791            <> NVL(l_project_rec.cc_process_nl_flag,
12792 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12793               THEN
12794 --bug 2955326
12795 /*
12796              l_statement  := l_statement ||
12797                        ' CC_PROCESS_NL_FLAG =  '||''''||
12798              RTRIM(p_project_in.cc_process_nl_flag)||''''||',';
12799 */
12800              l_statement  := l_statement ||
12801                        ' CC_PROCESS_NL_FLAG = :cc_proc_nl_flag ,';
12802              l_b_cc_proc_nl_flag := 'Y';
12803 --end bug 2955326
12804              l_update_yes_flag := 'Y';
12805           END IF;
12806        END IF;
12807 
12808  IF ( (p_project_in.nl_tp_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12809         AND p_project_in.nl_tp_schedule_id IS NOT NULL)
12810      OR (p_project_in.nl_tp_schedule_id IS NULL) )
12811    THEN
12812      IF ((p_project_in.nl_tp_schedule_id <> NVL(l_project_rec.nl_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
12813       OR (p_project_in.nl_tp_schedule_id IS NULL))
12814           THEN
12815 --bug 2955326
12816 /*
12817              l_statement := l_statement || ' NL_TP_SCHEDULE_ID = ' ||
12818                   TO_CHAR(p_project_in.nl_tp_schedule_id)||',';
12819 */
12820              l_cc_process_nl_flag  := p_project_in.cc_process_nl_flag; /* Added for Bug 5395048 */
12821              l_statement := l_statement || ' NL_TP_SCHEDULE_ID = :nl_tp_sch_id ,';
12822              l_b_nl_tp_sch_id_flag := 'Y';
12823 --bug 2955326
12824              l_update_yes_flag := 'Y';
12825 
12826              -- Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
12827              -- we need to set the project cross charge process labor flag to 'N'
12828              IF p_project_in.nl_tp_schedule_id IS NULL THEN
12829                  l_cc_process_nl_flag := 'N';
12830 
12831                  IF l_b_cc_proc_nl_flag = 'N' THEN
12832                       l_statement  := l_statement ||
12833                            ' CC_PROCESS_NL_FLAG = :cc_proc_nl_flag ,';
12834                  END IF;
12835 
12836                  l_b_cc_proc_nl_flag := 'Y';
12837                  l_update_yes_flag := 'Y';
12838              END IF;
12839              -- Code changes end for Bug 5395048
12840           END IF;
12841        END IF;
12842 
12843        IF p_project_in.nl_tp_fixed_date  <>
12844 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12845           AND p_project_in.nl_tp_fixed_date IS NOT NULL  THEN
12846           IF NVL(p_project_in.nl_tp_fixed_date,
12847 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12848            <> NVL(l_project_rec.nl_tp_fixed_date,
12849 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12850               THEN
12851 --bug 2955326
12852 /*
12853              l_statement  := l_statement ||
12854                        ' NL_TP_FIXED_DATE =  to_date('''||
12855                      to_char(p_project_in.nl_tp_fixed_date,'YYYY/MM/DD')||
12856                              ''', ''YYYY/MM/DD''),';
12857 */
12858              l_statement  := l_statement ||
12859                        ' NL_TP_FIXED_DATE = :nl_tp_fx_dt ,';
12860              l_b_nl_tp_fx_dt_flag := 'Y';
12861 --end bug 2955326
12862              l_update_yes_flag := 'Y';
12863           END IF;
12864        END IF;
12865 
12866 -- IC and Multi National Currency changes Ends ...
12867 
12868 -- ORM Code change starts here ...
12869 
12870        IF p_project_in.role_list_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12871           AND p_project_in.role_list_id IS NOT NULL  THEN
12872           IF p_project_in.role_list_id <> l_project_rec.role_list_id
12873               THEN
12874 --bug 2955326
12875 /*
12876              l_statement := l_statement || ' ROLE_LIST_ID = ' ||
12877                   TO_CHAR(p_project_in.role_list_id)||',';
12878 */
12879              l_statement := l_statement || ' ROLE_LIST_ID = :role_list_id ,';
12880              l_b_role_list_id_flag := 'Y';
12881 --end bug 2955326
12882              l_update_yes_flag := 'Y';
12883           END IF;
12884        END IF;
12885 
12886 --Added for bug 5745545
12887 IF nvl(p_project_in.work_type_id,-999) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12888 
12889 	IF (nvl(fnd_profile.value('PA_EN_NEW_WORK_TYPE_PROCESS'),'N') = 'Y') OR (nvl(pa_install.is_prm_licensed(),'N') = 'Y' ) THEN
12890 
12891 		IF p_project_in.work_type_id IS NULL AND (NOT (PA_GMS_API.vert_install)) THEN
12892 
12893 			IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12894 				    pa_interface_utils_pub.map_new_amg_msg
12895 				      ( p_old_message_code => 'PA_PR_WORK_TYPE_MANDATORY'
12896 				       ,p_msg_attribute    => 'CHANGE'
12897 				       ,p_resize_flag      => 'Y'
12898 				       ,p_msg_context      => 'PROJ'
12899 				       ,p_attribute1       => l_project_rec.segment1
12900 				       ,p_attribute2       => ''
12901 				       ,p_attribute3       => ''
12902 				       ,p_attribute4       => ''
12903 				       ,p_attribute5       => '');
12904 			END IF;
12905 			p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12906 		        RAISE  FND_API.G_EXC_ERROR;
12907 		ELSE
12908 			IF nvl(p_project_in.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> nvl(l_project_rec.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
12909 
12910 				--Added the following logic to update the work type id.Bug#5222248
12911 				OPEN  cur_check_work_type(p_project_in.pa_project_id,p_project_in.work_type_id);
12912 				FETCH cur_check_work_type INTO l_check_work_type;
12913 				CLOSE cur_check_work_type;
12914 
12915 				IF  l_check_work_type = 'Y' THEN
12916 
12917 					l_statement := l_statement || ' WORK_TYPE_ID = :work_type_id ,';
12918 					l_b_work_type_id_flag := 'Y';
12919 					l_update_yes_flag := 'Y';
12920 				END IF;
12921 				--End of code change for Bug#5222248.
12922 			END IF;
12923 		END IF;
12924 
12925 	ELSE -- Null work_type_id is allowed
12926 		IF nvl(p_project_in.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> nvl(l_project_rec.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
12927 
12928 			l_statement := l_statement || ' WORK_TYPE_ID = :work_type_id ,';
12929 			l_b_work_type_id_flag := 'Y';
12930 			l_update_yes_flag := 'Y';
12931 		END IF;
12932 	END IF;
12933 END IF;
12934 --End of addition for bug 5745545
12935 
12936        IF p_project_in.calendar_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12937           AND p_project_in.calendar_id IS NOT NULL  THEN
12938           /* IF p_project_in.calendar_id <> l_project_rec.calendar_id Commented for bug 5620624*/
12939 	  IF p_project_in.calendar_id <> nvl(l_project_rec.calendar_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --Bug#5620624
12940               THEN
12941 --bug 2955326
12942 /*
12943              l_statement := l_statement || ' CALENDAR_ID = ' ||
12944                   TO_CHAR(p_project_in.calendar_id)||',';
12945 */
12946              OPEN l_cur_calendar_id(p_project_in.calendar_id);
12947              FETCH l_cur_calendar_id INTO l_dummy_calendar_id;
12948              CLOSE l_cur_calendar_id ;
12949              -- Added this if condition for 5222506
12950              IF l_dummy_calendar_id =  'Y' THEN
12951                      l_statement := l_statement || ' CALENDAR_ID = :cal_id ,';
12952                      l_b_cal_id_flag := 'Y';
12953                      --end bug 2955326
12954                      l_update_yes_flag := 'Y';
12955             END IF ;
12956             -- End of bug 5222506
12957           END IF;
12958        END IF;
12959 
12960        IF p_project_in.location_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12961           AND p_project_in.location_id IS NOT NULL  THEN
12962           IF p_project_in.location_id <> l_project_rec.location_id
12963               THEN
12964 --bug 2955326
12965 /*
12966              l_statement := l_statement || ' LOCATION_ID = ' ||
12967                   TO_CHAR(p_project_in.location_id)||',';
12968 */
12969              l_statement := l_statement || ' LOCATION_ID = :loc_id ,';
12970              l_b_loc_id_flag := 'Y';
12971 --end bug 2955326
12972              l_update_yes_flag := 'Y';
12973           END IF;
12974        END IF;
12975 
12976        IF p_project_in.probability_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12977           AND p_project_in.probability_member_id IS NOT NULL  THEN
12978           --Modified the if condition below for Bug#5210872.
12979 
12980           IF (p_project_in.probability_member_id <> nvl(l_project_rec.probability_member_id,-99)) THEN
12981 
12982           --End of code change for Bug#5210872.
12983                 --bug 2955326
12984                 /*
12985                              l_statement := l_statement || ' PROBABILITY_MEMBER_ID = ' ||
12986                                   TO_CHAR(p_project_in.probability_member_id)||',';
12987                 */
12988 
12989                 --Bug#5191521.Included validation for probability_member_id below.
12990 
12991                         OPEN  cur_validate_prob_member( p_project_in.pa_project_id,p_project_in.probability_member_id);
12992                         FETCH cur_validate_prob_member INTO l_check_prob_id;
12993                         CLOSE cur_validate_prob_member;
12994 
12995                         IF l_check_prob_id ='Y' THEN  --only if a valid probability id is passed
12996                                                       --update will be done.Otherwise old value will remain.
12997 
12998                                 l_statement := l_statement || ' PROBABILITY_MEMBER_ID = :prob_memb_id ,';
12999                                 l_b_prob_memb_id_flag := 'Y';
13000                                 l_update_yes_flag := 'Y';
13001                         ELSE
13002 
13003                                 l_b_prob_memb_id_flag :='N';
13004                         END IF;
13005                 --End of code change for Bug#5191521.
13006 
13007                 --end bug 2955326
13008 
13009 
13010 
13011           END IF;
13012        END IF;
13013 
13014        IF ((p_project_in.project_value <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13015           AND p_project_in.project_value IS NOT NULL ) OR p_project_in.project_value IS NULL) THEN
13016           IF p_project_in.project_value <> l_project_rec.project_value
13017               THEN
13018 --bug 2955326
13019 /*
13020              l_statement := l_statement || ' PROJECT_VALUE = ' ||
13021                   TO_CHAR(p_project_in.project_value)||',';
13022 */--Added for bug 5214431
13023             -- changed from l_project_in_rec.project_value to p_project_in.project_value
13024             IF p_project_in.project_value IS NOT NULL AND p_project_in.project_value < 0 THEN
13025                 PA_UTILS.ADD_MESSAGE
13026                  ( p_app_short_name   => 'PA'
13027                   ,p_msg_name         => 'PA_INVLD_OPPORTUNITY_VALUE');
13028                    RAISE FND_API.G_EXC_ERROR;
13029             END IF;
13030             -- end of bug 5214431.
13031              l_statement := l_statement || ' PROJECT_VALUE = :proj_value ,';
13032              l_b_proj_value_flag := 'Y';
13033 --end bug 2955326
13034              l_update_yes_flag := 'Y';
13035           END IF;
13036        END IF;
13037 
13038        IF p_project_in.expected_approval_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13039           AND p_project_in.expected_approval_date IS NOT NULL  THEN
13040           IF NVL(p_project_in.expected_approval_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13041            <> NVL(l_project_rec.expected_approval_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13042               THEN
13043 --bug 2955326
13044 /*
13045              l_statement  := l_statement || ' EXPECTED_APPROVAL_DATE =  to_date('''||
13046                      to_char(p_project_in.expected_approval_date,'YYYY/MM/DD')||
13047                              ''', ''YYYY/MM/DD''),';
13048 */
13049              l_statement  := l_statement || ' EXPECTED_APPROVAL_DATE = :exp_apprv_date ,';
13050              l_b_exp_apprv_dt_flag := 'Y';
13051 --end bug 2955326
13052              l_update_yes_flag := 'Y';
13053           END IF;
13054        END IF;
13055 
13056        IF p_project_in.cost_job_group_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13057           AND p_project_in.cost_job_group_id IS NOT NULL  THEN
13058           IF p_project_in.cost_job_group_id <> l_project_rec.cost_job_group_id
13059               THEN
13060 --bug 2955326
13061 /*
13062              l_statement := l_statement || ' COST_JOB_BILL_ID = ' ||
13063                   TO_CHAR(p_project_in.cost_job_group_id)||',';
13064 */
13065              l_statement := l_statement || ' COST_JOB_BILL_ID = :cst_jb_gp_id ,';
13066              l_b_cst_jb_gp_id_flag := 'Y';
13067 --end bug 2955326
13068              l_update_yes_flag := 'Y';
13069           END IF;
13070        END IF;
13071 
13072        IF p_project_in.bill_job_group_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13073           AND p_project_in.bill_job_group_id IS NOT NULL  THEN
13074           IF p_project_in.bill_job_group_id <> l_project_rec.bill_job_group_id
13075               THEN
13076 --bug 2955326
13077 /*
13078              l_statement := l_statement || ' BILL_JOB_BILL_ID = ' ||
13079                   TO_CHAR(p_project_in.bill_job_group_id)||',';
13080 */
13081              l_statement := l_statement || ' BILL_JOB_GROUP_ID = :bill_jb_gp_id ,';  --Bug 5739298 Changed BILL_JOB_BILL_ID to BILL_JOB_GROUP_ID
13082              l_b_bill_jb_gp_id_flag := 'Y';
13083 --end bug 2955326
13084              l_update_yes_flag := 'Y';
13085           END IF;
13086        END IF;
13087 
13088 -- ORM Code change ends here ...
13089 /*Commented the below code for bug 2802984*/
13090        /*IF p_project_in.emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13091           AND p_project_in.emp_bill_rate_schedule_id IS NOT NULL  THEN
13092           IF p_project_in.emp_bill_rate_schedule_id <> l_project_rec.emp_bill_rate_schedule_id
13093               THEN
13094              l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = ' ||
13095                   TO_CHAR(p_project_in.emp_bill_rate_schedule_id)||',';
13096              l_update_yes_flag := 'Y';
13097           END IF;
13098        END IF;
13099 
13100        IF p_project_in.job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13101           AND p_project_in.job_bill_rate_schedule_id IS NOT NULL  THEN
13102           IF p_project_in.job_bill_rate_schedule_id <> l_project_rec.job_bill_rate_schedule_id
13103               THEN
13104              l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = ' ||
13105                   TO_CHAR(p_project_in.job_bill_rate_schedule_id)||',';
13106              l_update_yes_flag := 'Y';
13107           END IF;
13108        END IF;*/
13109 /*Commenting till here for bug 2802984 */
13110 
13111   /* Code for the bug 2802984 starts*/
13112 
13113        pa_project_pvt.Check_Schedule_type
13114      (p_pa_task_id              => '',
13115       p_pa_project_id          => l_project_id,
13116       p_in_labor_sch_type      => p_project_in.labor_sch_type,
13117       p_in_nl_sch_type         => p_project_in.non_labor_sch_type,
13118       p_task_name              => '',
13119       p_pm_task_reference      => '',
13120       p_out_labor_sch_type     => l_out_labor_sch_type,
13121       p_out_nl_labor_sch_type  => l_out_nl_labor_sch_type,
13122       p_return_status          => l_return_status
13123       );
13124 
13125         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13126       THEN
13127       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13128 
13129       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13130       THEN
13131       RAISE FND_API.G_EXC_ERROR;
13132       END IF;
13133 
13134 
13135 pa_project_pvt.validate_schedule_values
13136    (p_pa_project_id                  => l_project_id,
13137     p_pa_task_id                     => '',
13138     p_task_name                      => '',
13139     p_pm_task_reference              => '',
13140     p_lab_db_sch_type                => l_project_rec.labor_sch_type,
13141     p_nl_db_sch_type                 => l_project_rec.non_labor_sch_type,
13142     p_labor_sch_type                 => l_out_labor_sch_type,
13143     p_nl_sch_type               => l_out_nl_labor_sch_type,
13144     p_emp_bill_rate_schedule_id      => p_project_in.EMP_BILL_RATE_SCHEDULE_ID,
13145     p_job_bill_rate_schedule_id      => p_project_in.JOB_BILL_RATE_SCHEDULE_ID,
13146     p_labor_schedule_fixed_date      =>  p_project_in.LABOR_SCHEDULE_FIXED_DATE,
13147     p_labor_schedule_discount        =>  p_project_in.LABOR_SCHEDULE_DISCOUNT,
13148     p_labor_disc_reason_code         => p_project_in.LABOR_DISC_REASON_CODE,
13149     p_nl_bill_rate_org_id            =>  p_project_in.NON_LABOR_BILL_RATE_ORG_ID,
13150     p_non_lab_std_bill_rt_sch_id     => p_project_in.NON_LAB_STD_BILL_RT_SCH_ID,
13151     p_nl_schedule_fixed_date         =>  p_project_in.NON_LABOR_SCHEDULE_FIXED_DATE,
13152     p_nl_schedule_discount           =>  p_project_in.NON_LABOR_SCHEDULE_DISCOUNT,
13153     p_non_labor_disc_reason_code     => p_project_in.NON_LABOR_DISC_REASON_CODE,
13154     p_rev_ind_rate_sch_id            =>  p_project_in.REV_IND_RATE_SCH_ID,
13155     p_inv_ind_rate_sch_id            =>  p_project_in.INV_IND_RATE_SCH_ID,
13156     p_rev_ind_sch_fixed_date         =>  p_project_in.REV_IND_SCH_FIXED_DATE,
13157     p_inv_ind_sch_fixed_date         =>  p_project_in.INV_IND_SCH_FIXED_DATE,
13158     p_return_status                  => l_return_status
13159     );
13160 
13161 
13162        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13163       THEN
13164 
13165       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13166 
13167       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13168       THEN
13169 
13170       RAISE FND_API.G_EXC_ERROR;
13171       END IF;
13172 
13173  IF p_project_in.labor_sch_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13174           AND p_project_in.labor_sch_type IS NOT NULL
13175   THEN
13176           IF p_project_in.labor_sch_type <> NVL(l_task_rec.LABOR_SCH_TYPE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13177               THEN
13178 --bug 2955326
13179 /*
13180        l_statement  := l_statement ||' LABOR_SCH_TYPE =  '||''''||
13181              RTRIM(p_project_in.labor_sch_type)||''''||',';
13182 */
13183        l_statement  := l_statement ||' LABOR_SCH_TYPE = :lb_sch_type ,';
13184        l_b_lb_sch_tp_fg := 'Y';
13185 --end bug 2955326
13186              l_update_yes_flag := 'Y';
13187           END IF;
13188        END IF;
13189 
13190   IF p_project_in.non_labor_sch_type  <>
13191 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13192           AND p_project_in.non_labor_sch_type IS NOT NULL
13193   THEN
13194    IF p_project_in.non_labor_sch_type
13195            <> NVL(l_task_rec.NON_LABOR_SCH_TYPE,
13196 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13197               THEN
13198 --bug 2955326
13199 /*
13200        l_statement  := l_statement ||
13201                        ' NON_LABOR_SCH_TYPE =  '||''''||
13202              RTRIM(p_project_in.non_labor_sch_type)||''''||',';
13203 */
13204        l_statement  := l_statement ||
13205                        ' NON_LABOR_SCH_TYPE = :nn_lb_sch_tp ,';
13206        l_b_nn_lb_sch_tp_fg := 'Y';
13207 --end bug 2955326
13208              l_update_yes_flag := 'Y';
13209           END IF;
13210        END IF;
13211 
13212    IF l_out_labor_sch_type = 'B' THEN
13213 
13214    /* Should be able to update null since this is not mandatory*/
13215 
13216  IF ((p_project_in.emp_bill_rate_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13217 AND p_project_in.emp_bill_rate_schedule_id IS NOT NULL) OR (p_project_in.emp_bill_rate_schedule_id IS NULL))
13218    THEN
13219      IF ((p_project_in.emp_bill_rate_schedule_id <>
13220         NVL(l_project_rec.emp_bill_rate_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
13221       OR (p_project_in.emp_bill_rate_schedule_id IS NULL))
13222           THEN
13223 --bug 2955326
13224 /*
13225              l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = ' ||
13226                   TO_CHAR(p_project_in.emp_bill_rate_schedule_id)||',';
13227 */
13228              l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = :emp_bill_rt_sch_id2 ,';
13229              l_b_emp_bill_rt_sch_id_fg2 := 'Y';
13230 --end bug 2955326
13231              l_update_yes_flag := 'Y';
13232           END IF;
13233        END IF;
13234 
13235        /*
13236        1)Should be able to update null when prm is not licensed.
13237        2) When prm is licensed then it is mandatory.
13238        */
13239 
13240 IF ((p_project_in.job_bill_rate_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13241  AND p_project_in.job_bill_rate_schedule_id IS NOT NULL)
13242  OR (p_project_in.job_bill_rate_schedule_id is NULL and pa_install.is_prm_licensed = 'N'))
13243   THEN
13244   IF (p_project_in.job_bill_rate_schedule_id <> NVL(l_project_rec.job_bill_rate_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13245   OR (p_project_in.job_bill_rate_schedule_id IS NULL))
13246               THEN
13247 --bug 2955326
13248 /*
13249        l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = ' ||
13250                   TO_CHAR(p_project_in.job_bill_rate_schedule_id)||',';
13251 */
13252        l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = :jb_bill_rt_sch_id2,';
13253        l_b_jb_bill_rt_sch_id_fg2 := 'Y';
13254 --end bug 2955326
13255              l_update_yes_flag := 'Y';
13256           END IF;
13257        END IF;
13258 
13259        /* Should be able to update null*/
13260 
13261  IF ((p_project_in.labor_schedule_fixed_date  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13262  AND p_project_in.labor_schedule_fixed_date IS NOT NULL) OR (p_project_in.labor_schedule_fixed_date IS NULL))
13263    THEN
13264     IF (p_project_in.labor_schedule_fixed_date <>
13265     NVL(l_project_rec.labor_schedule_fixed_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13266      OR (l_project_rec.labor_schedule_fixed_date IS NULL))
13267               THEN
13268 --bug 2955326
13269 /*
13270              l_statement  := l_statement ||
13271                        ' LABOR_SCHEDULE_FIXED_DATE =  to_date('''||
13272                           to_char(p_project_in.labor_schedule_fixed_date,'YYYY/MM/DD')||
13273                              ''', ''YYYY/MM/DD''),';
13274 */
13275              l_statement  := l_statement ||
13276                        ' LABOR_SCHEDULE_FIXED_DATE = :lb_sch_fx_dt ,';
13277              l_b_lb_sch_fx_dt_fg := 'Y';
13278 --end bug 2955326
13279              l_update_yes_flag := 'Y';
13280           END IF;
13281        END IF;
13282 
13283  /* Should be able to update null*/
13284   IF ((p_project_in.labor_schedule_discount <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13285    AND p_project_in.labor_schedule_discount IS NOT NULL)
13286       OR (p_project_in.labor_schedule_discount IS NULL)) THEN
13287           IF ((p_project_in.labor_schedule_discount
13288            <> NVL(l_project_rec.labor_schedule_discount,
13289 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) OR (p_project_in.labor_schedule_discount IS NULL))
13290               THEN
13291 --bug 2955326
13292 /*
13293              l_statement  := l_statement ||
13294                        ' LABOR_SCHEDULE_DISCOUNT =  '||''''||
13295              TO_NUMBER(p_project_in.labor_schedule_discount)||''''||',';
13296 */
13297              l_statement := l_statement ||
13298                        ' LABOR_SCHEDULE_DISCOUNT = :lb_sch_dsct ,';
13299              l_b_lb_sch_dsct_fg := 'Y';
13300 --end bug 2955326
13301              l_update_yes_flag := 'Y';
13302           END IF;
13303        END IF;
13304 
13305  IF  p_project_in.labor_schedule_discount IS NULL THEN
13306    l_statement  := l_statement ||
13307                        ' LABOR_DISC_REASON_CODE =  '''''||',';
13308    l_update_yes_flag := 'Y';
13309 ELSE
13310  IF p_project_in.labor_disc_reason_code  <>
13311 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13312           AND p_project_in.labor_disc_reason_code IS NOT NULL
13313       THEN
13314           IF (p_project_in.labor_disc_reason_code
13315            <> NVL(l_project_rec.labor_disc_reason_code,
13316 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
13317               THEN
13318 --bug 2955326
13319 /*
13320              l_statement  := l_statement ||
13321                        ' LABOR_DISC_REASON_CODE =  '||''''||
13322              RTRIM(p_project_in.labor_disc_reason_code)||''''||',';
13323 */
13324              l_statement  := l_statement ||
13325                        ' LABOR_DISC_REASON_CODE = :lb_disc_rn_cd ,';
13326              l_b_lb_disc_rn_cd_fg2 := 'Y';
13327 --end bug 2955326
13328              l_update_yes_flag := 'Y';
13329           END IF;
13330        END IF;
13331   END IF;
13332 
13333   ELSE
13334 
13335    l_statement  := l_statement ||
13336                        ' LABOR_SCHEDULE_FIXED_DATE =  '''''||',';
13337 
13338       l_statement  := l_statement ||
13339                        ' LABOR_SCHEDULE_DISCOUNT =  '''''||',';
13340 
13341       l_statement  := l_statement ||
13342                        ' LABOR_DISC_REASON_CODE =  '''''||',';
13343 
13344       l_statement  := l_statement ||
13345                        ' EMP_BILL_RATE_SCHEDULE_ID =  '''''||',';
13346 
13347       l_statement  := l_statement ||
13348                        ' JOB_BILL_RATE_SCHEDULE_ID =  '''''||',';
13349 
13350 
13351      l_update_yes_flag := 'Y';
13352 END IF;
13353 
13354  IF l_out_labor_sch_type = 'I' OR l_out_nl_labor_sch_type = 'I' THEN
13355 
13356       IF p_project_in.REV_IND_RATE_SCH_ID  <>
13357 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13358           AND p_project_in.REV_IND_RATE_SCH_ID IS NOT NULL  THEN
13359           IF NVL(p_project_in.REV_IND_RATE_SCH_ID,
13360 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13361            <> NVL(l_project_rec.REV_IND_RATE_SCH_ID,
13362 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13363               THEN
13364 --bug 2955326
13365 /*
13366              l_statement  := l_statement ||
13367                        ' REV_IND_RATE_SCH_ID =  '||''''||
13368              TO_CHAR(p_project_in.REV_IND_RATE_SCH_ID)||''''||',';
13369 */
13370              l_statement  := l_statement ||
13371                        ' REV_IND_RATE_SCH_ID = :rv_ind_rt_sch_id ,';
13372              l_b_rv_ind_rt_sch_id_fg := 'Y';
13373 --end bug 2955326
13374              l_update_yes_flag := 'Y';
13375           END IF;
13376        END IF;
13377 
13378 
13379         IF p_project_in.INV_IND_RATE_SCH_ID  <>
13380 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13381           AND p_project_in.INV_IND_RATE_SCH_ID IS NOT NULL  THEN
13382           IF NVL(p_project_in.INV_IND_RATE_SCH_ID,
13383 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13384            <> NVL(l_project_rec.INV_IND_RATE_SCH_ID,
13385 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13386               THEN
13387 --bug 2955326
13388 /*
13389              l_statement  := l_statement ||
13390                        ' INV_IND_RATE_SCH_ID =  '||''''||
13391              TO_CHAR(p_project_in.INV_IND_RATE_SCH_ID)||''''||',';
13392 */
13393              l_statement  := l_statement ||
13394                        ' INV_IND_RATE_SCH_ID = :inv_ind_rt_sch_id,';
13395              l_b_inv_ind_rt_sch_id_fg := 'Y';
13396 --end bug 2955326
13397              l_update_yes_flag := 'Y';
13398           END IF;
13399        END IF;
13400 
13401 IF p_project_in.REV_IND_RATE_SCH_ID  <>
13402 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13403           AND p_project_in.REV_IND_RATE_SCH_ID IS NOT NULL  THEN
13404 
13405 BEGIN
13406 
13407 SELECT       ind_rate_schedule_type INTO l_rev_rate_sch_type
13408 FROM         pa_ind_rate_schedules
13409 WHERE        ind_rate_sch_id = p_project_in.REV_IND_RATE_SCH_ID
13410 AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
13411 
13412 
13413 EXCEPTION
13414     WHEN NO_DATA_FOUND THEN
13415   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13416                 THEN
13417                      pa_interface_utils_pub.map_new_amg_msg
13418                      ( p_old_message_code => 'PA_INVALID_REV_SCH_ID'
13419                       ,p_msg_attribute    => 'CHANGE'
13420                       ,p_resize_flag      => 'Y'
13421                       ,p_msg_context      => 'PROJ'
13422                       ,p_attribute1       => l_project_rec.segment1
13423                       ,p_attribute2       => ''
13424                       ,p_attribute3       => ''
13425                       ,p_attribute4       => ''
13426                       ,p_attribute5       => '');
13427                 END IF;
13428                 RAISE  FND_API.G_EXC_ERROR;
13429   END;
13430 
13431 ELSE
13432 
13433 IF l_project_rec.REV_IND_RATE_SCH_ID IS NOT NULL
13434 THEN
13435 
13436 SELECT       ind_rate_schedule_type INTO l_rev_rate_sch_type
13437 FROM         pa_ind_rate_schedules
13438 WHERE        ind_rate_sch_id = l_project_rec.REV_IND_RATE_SCH_ID;
13439 -- Bug 3657709
13440 /* AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
13441 
13442 END IF;
13443 
13444 END IF;
13445 
13446 IF p_project_in.INV_IND_RATE_SCH_ID  <>
13447 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13448           AND p_project_in.INV_IND_RATE_SCH_ID IS NOT NULL  THEN
13449 
13450 BEGIN
13451 
13452 SELECT       ind_rate_schedule_type INTO l_inv_rate_sch_type
13453 FROM         pa_ind_rate_schedules
13454 WHERE        ind_rate_sch_id = p_project_in.INV_IND_RATE_SCH_ID
13455 AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
13456 
13457 
13458 EXCEPTION
13459     WHEN NO_DATA_FOUND THEN
13460   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13461                 THEN
13462                      pa_interface_utils_pub.map_new_amg_msg
13463                      ( p_old_message_code => 'PA_INVALID_INV_SCH_ID'
13464                       ,p_msg_attribute    => 'CHANGE'
13465                       ,p_resize_flag      => 'Y'
13466                       ,p_msg_context      => 'PROJ'
13467                       ,p_attribute1       => l_project_rec.segment1
13468                       ,p_attribute2       => ''
13469                       ,p_attribute3       => ''
13470                       ,p_attribute4       => ''
13471                       ,p_attribute5       => '');
13472                 END IF;
13473                 RAISE  FND_API.G_EXC_ERROR;
13474   END;
13475 
13476 ELSE
13477 IF l_project_rec.INV_IND_RATE_SCH_ID IS NOT NULL
13478 THEN
13479 
13480 SELECT       ind_rate_schedule_type INTO l_inv_rate_sch_type
13481 FROM         pa_ind_rate_schedules
13482 WHERE        ind_rate_sch_id = l_project_rec.INV_IND_RATE_SCH_ID;
13483 -- Bug 3657709
13484 /* AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
13485 
13486 END IF;
13487 
13488 END IF;
13489 
13490 
13491 IF l_rev_rate_sch_type = 'P' AND l_project_rec.REV_IND_SCH_FIXED_DATE IS NOT NULL THEN
13492      l_statement  := l_statement ||
13493                        ' REV_IND_SCH_FIXED_DATE =  '''''||',';
13494      l_update_yes_flag := 'Y';
13495 ELSE
13496   IF ((p_project_in.rev_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13497    AND p_project_in.rev_ind_sch_fixed_date IS NOT NULL) OR (p_project_in.rev_ind_sch_fixed_date IS NULL))
13498      THEN
13499         IF (p_project_in.rev_ind_sch_fixed_date
13500          <> NVL(l_project_rec.rev_ind_sch_fixed_date,
13501 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (l_project_rec.rev_ind_sch_fixed_date IS NULL))
13502         THEN
13503 --bug 2955326
13504 /*
13505              l_statement  := l_statement ||
13506                        ' rev_ind_sch_fixed_date =  to_date('''||
13507                           to_char(p_project_in.rev_ind_sch_fixed_date,'YYYY/MM/DD')||
13508                              ''', ''YYYY/MM/DD''),';
13509 */
13510              l_statement  := l_statement ||
13511                        ' rev_ind_sch_fixed_date = :rev_ind_sch_fx_dt ,';
13512              l_b_ind_sch_fx_dt_fg := 'Y';
13513 --end bug 2955326
13514              l_update_yes_flag := 'Y';
13515           END IF;
13516        END IF;
13517  END IF;
13518 
13519  IF l_inv_rate_sch_type = 'P'  AND l_project_rec.INV_IND_SCH_FIXED_DATE IS NOT NULL
13520   THEN
13521     l_statement  := l_statement ||
13522                        ' INV_IND_SCH_FIXED_DATE =  '''''||',';
13523     l_update_yes_flag := 'Y';
13524 ELSE
13525   IF ((p_project_in.inv_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13526    AND p_project_in.inv_ind_sch_fixed_date IS NOT NULL) OR (p_project_in.inv_ind_sch_fixed_date IS NULL))
13527    THEN
13528           IF (p_project_in.inv_ind_sch_fixed_date
13529     <> NVL(l_project_rec.inv_ind_sch_fixed_date,
13530 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (p_project_in.inv_ind_sch_fixed_date IS NULL))
13531        THEN
13532 --bug 2955326
13533 /*
13534              l_statement  := l_statement ||
13535                        ' inv_ind_sch_fixed_date =  to_date('''||
13536                           to_char(p_project_in.inv_ind_sch_fixed_date,'YYYY/MM/DD')||
13537                              ''', ''YYYY/MM/DD''),';
13538 */
13539              l_statement  := l_statement ||
13540                        ' inv_ind_sch_fixed_date = :inv_ind_sch_fx_dt,';
13541              l_b_inv_ind_sch_fx_dt_fg := 'Y';
13542 --end bug 2955326
13543              l_update_yes_flag := 'Y';
13544           END IF;
13545        END IF;
13546   END IF;
13547 
13548    ELSE
13549       l_statement  := l_statement ||
13550                        ' REV_IND_RATE_SCH_ID =  '''''||',';
13551 
13552 
13553      l_statement  := l_statement ||
13554                        ' INV_IND_RATE_SCH_ID =  '''''||',';
13555 
13556 
13557      l_statement  := l_statement ||
13558                        ' REV_IND_SCH_FIXED_DATE =  '''''||',';
13559 
13560      l_statement  := l_statement ||
13561                        ' INV_IND_SCH_FIXED_DATE =  '''''||',';
13562      l_update_yes_flag := 'Y';
13563 END IF;
13564 
13565     IF l_out_nl_labor_sch_type = 'B' THEN
13566 
13567     IF (p_project_in.non_labor_bill_rate_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13568       AND p_project_in.non_labor_bill_rate_org_id IS NOT NULL)
13569         THEN
13570           IF p_project_in.non_labor_bill_rate_org_id <>
13571         NVL(l_project_rec.non_labor_bill_rate_org_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13572               THEN
13573 --bug 2955326
13574 /*
13575              l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ' ||
13576                   TO_CHAR(p_project_in.non_labor_bill_rate_org_id)||',';
13577 */
13578              l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = :nn_lb_bill_rt_org_id,';
13579              l_b_nn_lb_bill_rt_org_id_fg := 'Y';
13580 --bug 2955326
13581              l_update_yes_flag := 'Y';
13582           END IF;
13583        END IF;
13584 
13585   IF (p_project_in.non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13586   AND p_project_in.non_lab_std_bill_rt_sch_id IS NOT NULL)
13587      THEN
13588     IF NVL(p_project_in.non_lab_std_bill_rt_sch_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13589       <> NVL(l_project_rec.non_lab_std_bill_rt_sch_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13590        THEN
13591 
13592 
13593 BEGIN
13594          SELECT std_bill_rate_schedule INTO l_std_bill_rate_schedule
13595    FROM pa_std_bill_rate_schedules_all
13596    WHERE bill_rate_sch_id = p_project_in.non_lab_std_bill_rt_sch_id;
13597 
13598 --bug 2955326
13599 /*
13600              l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||''''||
13601                   TO_CHAR(p_project_in.non_lab_std_bill_rt_sch_id)||''''||',';
13602 */
13603 /*
13604              l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ' ||''''||
13605                   RTRIM(l_std_bill_rate_schedule)||''''||',';
13606 */
13607              l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = :nn_lab_std_bill_rt_sch_id,';
13608              l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = :nn_lb_std_bill_rt_sch,';
13609              l_b_n_lb_st_bl_rt_sc_id_fg2 := 'Y';
13610 --end bug 2955326
13611              l_update_yes_flag := 'Y';
13612 EXCEPTION
13613    WHEN NO_DATA_FOUND THEN
13614      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13615                 THEN
13616                      pa_interface_utils_pub.map_new_amg_msg
13617                      ( p_old_message_code => 'PA_PRJ_NL_SCHEDULE_ID'
13618                       ,p_msg_attribute    => 'CHANGE'
13619                       ,p_resize_flag      => 'Y'
13620                       ,p_msg_context      => 'TASK'
13621                       ,p_attribute1       => l_amg_segment1
13622                       ,p_attribute2       => l_amg_task_number
13623                       ,p_attribute3       => ''
13624                       ,p_attribute4       => ''
13625                       ,p_attribute5       => '');
13626                 END IF;
13627                 RAISE  FND_API.G_EXC_ERROR;
13628      END;
13629 
13630   END IF;
13631  END IF;
13632 
13633  /* Should be able to update null*/
13634 IF ((p_project_in.non_labor_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13635  AND p_project_in.non_labor_schedule_fixed_date IS NOT NULL) OR (p_project_in.non_labor_schedule_fixed_date IS NULL))
13636    THEN
13637      IF ((p_project_in.non_labor_schedule_fixed_date
13638        <> NVL(l_project_rec.non_labor_schedule_fixed_date,
13639 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)) OR (p_project_in.non_labor_schedule_fixed_date IS NULL))
13640               THEN
13641 --bug 2955326
13642 /*
13643              l_statement  := l_statement ||
13644                        ' NON_LABOR_SCHEDULE_FIXED_DATE =  to_date('''||
13645                           to_char(p_project_in.non_labor_schedule_fixed_date,'YYYY/MM/DD')||
13646                              ''', ''YYYY/MM/DD''),';
13647 */
13648              l_statement  := l_statement ||
13649                        ' NON_LABOR_SCHEDULE_FIXED_DATE = :nn_lb_sch_fx_dt,';
13650              l_b_nn_lb_sch_fx_dt_fg := 'Y';
13651 --end bug 2955326
13652              l_update_yes_flag := 'Y';
13653           END IF;
13654        END IF;
13655 
13656 /* Should be able to update null*/
13657 IF ((p_project_in.non_labor_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13658  AND p_project_in.non_labor_schedule_discount IS NOT NULL) OR (p_project_in.non_labor_schedule_discount IS NULL))
13659    THEN
13660       IF (p_project_in.non_labor_schedule_discount <> NVL(l_project_rec.non_labor_disc_reason_code,
13661 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR (p_project_in.non_labor_schedule_discount IS NULL))
13662               THEN
13663 --bug 2955326
13664 /*
13665              l_statement  := l_statement ||
13666                        '  NON_LABOR_SCHEDULE_DISCOUNT   =  '||''''||
13667              TO_CHAR(p_project_in.non_labor_schedule_discount)||''''||',';
13668 */
13669              l_statement  := l_statement ||
13670                        '  NON_LABOR_SCHEDULE_DISCOUNT = :nn_lb_sch_dst ,';
13671              l_b_nn_lb_sch_dst_fg := 'Y';
13672 --end bug 2955326
13673              l_update_yes_flag := 'Y';
13674           END IF;
13675        END IF;
13676 
13677 IF p_project_in.non_labor_schedule_discount IS NULL
13678  THEN
13679    l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
13680    l_update_yes_flag := 'Y';
13681 ELSE
13682     IF (p_project_in.non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13683       AND p_project_in.non_labor_disc_reason_code IS NOT NULL)
13684       THEN
13685           IF NVL(p_project_in.non_labor_disc_reason_code,
13686 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13687            <> NVL(l_project_rec.non_labor_disc_reason_code,
13688 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13689               THEN
13690 --bug 2955326
13691 /*
13692              l_statement  := l_statement ||
13693                        ' NON_LABOR_DISC_REASON_CODE =  '||''''||
13694              RTRIM(p_project_in.non_labor_disc_reason_code)||''''||',';
13695 */
13696              l_statement  := l_statement ||
13697                        ' NON_LABOR_DISC_REASON_CODE =  :n_lb_dis_rn_cd,';
13698              l_b_n_lb_disc_rsn_cd_fg2 := 'Y';
13699 --end bug 2955326
13700              l_update_yes_flag := 'Y';
13701           END IF;
13702        END IF;
13703   END IF;
13704 
13705   ELSE
13706 
13707     l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = '''''||',';
13708 
13709       l_statement := l_statement || ' NON_LABOR_SCHEDULE_FIXED_DATE = ''''' ||',';
13710 
13711       l_statement := l_statement || ' NON_LABOR_SCHEDULE_DISCOUNT = '''''||',';
13712 
13713       l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
13714 
13715       l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ''''' ||',';
13716 
13717       l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ''''' ||',';
13718      l_update_yes_flag := 'Y';
13719 END IF;
13720 
13721  /* Code for the bug 2802984 ends*/
13722 
13723 --Sakthi MCB
13724 
13725        IF p_project_in.competence_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13726           AND p_project_in.competence_match_wt IS NOT NULL  THEN
13727           IF p_project_in.competence_match_wt <> l_project_rec.competence_match_wt
13728               THEN
13729 --bug 2955326
13730 /*
13731              l_statement := l_statement || ' COMPETENCE_MATCH_WT = ' ||
13732                   TO_CHAR(p_project_in.competence_match_wt)||',';
13733 */
13734              l_statement := l_statement || ' COMPETENCE_MATCH_WT = :comp_match_wt ,';
13735              l_b_comp_mtch_wt_flag := 'Y';
13736 --end bug 2955326
13737              l_update_yes_flag := 'Y';
13738           END IF;
13739        END IF;
13740 
13741        IF p_project_in.availability_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13742           AND p_project_in.availability_match_wt IS NOT NULL  THEN
13743           IF p_project_in.availability_match_wt <> l_project_rec.availability_match_wt
13744               THEN
13745 --bug 2955326
13746 /*
13747              l_statement := l_statement || ' AVAILABILITY_MATCH_WT = ' ||
13748                   TO_CHAR(p_project_in.availability_match_wt)||',';
13749 */
13750              l_statement := l_statement || ' AVAILABILITY_MATCH_WT = :avail_mtch_wt ,';
13751              l_b_avail_mtch_wt_flag := 'Y';
13752 --end bug 2955326
13753              l_update_yes_flag := 'Y';
13754           END IF;
13755        END IF;
13756 
13757        IF p_project_in.job_level_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13758           AND p_project_in.job_level_match_wt IS NOT NULL  THEN
13759           IF p_project_in.job_level_match_wt <> l_project_rec.job_level_match_wt
13760               THEN
13761 --bug 2955326
13762 /*
13763              l_statement := l_statement || ' JOB_LEVEL_MATCH_WT = ' ||
13764                   TO_CHAR(p_project_in.job_level_match_wt)||',';
13765 */
13766              l_statement := l_statement || ' JOB_LEVEL_MATCH_WT = :jb_lvl_mt_wt ,';
13767              l_b_jb_lvl_mt_wt_flag := 'Y';
13768 --end bug 2955326
13769              l_update_yes_flag := 'Y';
13770           END IF;
13771        END IF;
13772 
13773        IF p_project_in.search_min_availability <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13774           AND p_project_in.search_min_availability IS NOT NULL  THEN
13775           IF p_project_in.search_min_availability <> l_project_rec.search_min_availability
13776               THEN
13777 --bug 2955326
13778 /*
13779              l_statement := l_statement || ' SEARCH_MIN_AVAILABILITY = ' ||
13780                   TO_CHAR(p_project_in.search_min_availability)||',';
13781 */
13782              l_statement := l_statement || ' SEARCH_MIN_AVAILABILITY = :srch_min_avail ,';
13783              l_b_search_min_avail_flag := 'Y';
13784 --end bug 2955326
13785              l_update_yes_flag := 'Y';
13786           END IF;
13787        END IF;
13788 
13789        IF p_project_in.search_org_hier_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13790           AND p_project_in.search_org_hier_id IS NOT NULL  THEN
13791           IF p_project_in.search_org_hier_id <> l_project_rec.search_org_hier_id
13792               THEN
13793 --bug 2955326
13794 /*
13795              l_statement := l_statement || ' SEARCH_ORG_HIER_ID = ' ||
13796                   TO_CHAR(p_project_in.search_org_hier_id)||',';
13797 */
13798              l_statement := l_statement || ' SEARCH_ORG_HIER_ID = :srch_org_hier_id ,';
13799              l_b_srch_org_hier_id_flag := 'Y';
13800 --end bug 2955326
13801              l_update_yes_flag := 'Y';
13802           END IF;
13803        END IF;
13804 
13805        IF p_project_in.search_starting_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13806           AND p_project_in.search_starting_org_id IS NOT NULL  THEN
13807           IF p_project_in.search_starting_org_id <> l_project_rec.search_starting_org_id
13808               THEN
13809 --bug 2955326
13810 /*
13811              l_statement := l_statement || ' SEARCH_ORG_HIER_ID = ' ||
13812                   TO_CHAR(p_project_in.search_starting_org_id)||',';
13813 */
13814              l_statement := l_statement || ' SEARCH_ORG_HIER_ID = :srch_org_hier_id ,';
13815              l_b_srch_st_org_id_flag := 'Y';
13816 --end bug 2955326
13817              l_update_yes_flag := 'Y';
13818           END IF;
13819        END IF;
13820 
13821        IF p_project_in.min_cand_score_reqd_for_nom <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13822           AND p_project_in.min_cand_score_reqd_for_nom IS NOT NULL  THEN
13823           IF p_project_in.min_cand_score_reqd_for_nom <> l_project_rec.min_cand_score_reqd_for_nom
13824               THEN
13825 --bug 2955326
13826 /*
13827              l_statement := l_statement || ' MIN_CAND_SCORE_REQD_FOR_NOM = ' ||
13828                   TO_CHAR(p_project_in.min_cand_score_reqd_for_nom)||',';
13829 */
13830              l_statement := l_statement || ' MIN_CAND_SCORE_REQD_FOR_NOM = :min_can_sc_req_for_nom ,';
13831              l_b_min_can_sc_req_for_nom := 'Y';
13832 --end bug 2955326
13833              l_update_yes_flag := 'Y';
13834           END IF;
13835        END IF;
13836 
13837 -- Bug 6144566: Changes start
13838 -- Bug 6144566: Introduced MCB related validations
13839 
13840        IF p_project_in.multi_currency_billing_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13841           AND p_project_in.multi_currency_billing_flag IS NOT NULL  THEN
13842           IF NVL(p_project_in.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13843            <> NVL(l_project_rec.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
13844             -- if attempting to change MCB flag; check if it can be allowed
13845             IF NVL(pa_multi_currency_billing.check_mcb_trans_exist(p_project_in.pa_project_id),'N') = 'Y'
13846                OR NVL(pa_multi_currency_billing.check_mcb_setup_exists(p_project_in.pa_project_id),'N') = 'Y' THEN
13847                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13848 	          FND_MESSAGE.SET_NAME('PA','PA_MCB_ALLOW_NO_CHG_AMG');  -- Cannot change MCB flag
13849 	          FND_MSG_PUB.ADD;
13850 	          RAISE  FND_API.G_EXC_ERROR;
13851                END IF;
13852 
13853             END IF;
13854 
13855             l_statement  := l_statement || ' MULTI_CURRENCY_BILLING_FLAG = :multi_crncy_bil_flag ,';
13856             l_b_multi_crncy_bil_flag := 'Y';
13857             l_update_yes_flag := 'Y';
13858 
13859           END IF;
13860 
13861           -- do MCB related validations, if MCB flag is 'Y'
13862                IF p_project_in.multi_currency_billing_flag = 'Y' THEN -- do MCB related validations
13863 
13864                   -- Project Currency related attributes
13865                   IF p_project_in.PROJECT_BIL_RATE_TYPE is NULL
13866                      OR p_project_in.PROJECT_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PROJ_RATE_TYPE_INV_AMG:The project exchage rate type is invalid
13867                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13868 	                FND_MESSAGE.SET_NAME('PA','PA_PROJ_RATE_TYPE_INV_AMG');
13869 	                FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
13870 	                FND_MSG_PUB.ADD;
13871 	                RAISE  FND_API.G_EXC_ERROR;
13872                      END IF;
13873                   ELSE
13874                      IF p_project_in.PROJECT_BIL_RATE_TYPE = 'User' THEN
13875                         IF p_project_in.PROJECT_BIL_EXCHANGE_RATE is NULL
13876                            OR p_project_in.PROJECT_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13877                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PC_AMG:Project Exchange Rate cannot be null when project rate type is User.
13878 	                      FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PC_AMG');
13879 	                      FND_MSG_PUB.ADD;
13880 	                      RAISE  FND_API.G_EXC_ERROR;
13881                            END IF;
13882                         END IF;
13883 
13884                         l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
13885 	        	l_b_proj_bil_xch_rt_flag := 'Y';
13886                         l_update_yes_flag := 'Y';
13887 
13888                      ELSE  -- non-User type
13889                         IF p_project_in.PROJECT_BIL_RATE_DATE_CODE is NULL
13890                            OR p_project_in.PROJECT_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13891 
13892                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13893                               FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
13894                               FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
13895                               FND_MSG_PUB.ADD;
13896                               RAISE  FND_API.G_EXC_ERROR;
13897                            END IF;
13898                         ELSE
13899                            IF p_project_in.PROJECT_BIL_RATE_DATE_CODE = 'Fixed Date' THEN
13900                               IF p_project_in.PROJECT_BIL_RATE_DATE is NULL
13901                                  OR p_project_in.PROJECT_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13902                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13903 	        	            FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
13904                                     FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
13905 	        	            FND_MSG_PUB.ADD;
13906 	        	            RAISE  FND_API.G_EXC_ERROR;
13907                                  END IF;
13908                               END IF;
13909                            END IF;
13910                            l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
13911 	        	   l_b_prj_bil_rt_dt_flag := 'Y';
13912                            l_update_yes_flag := 'Y';
13913                         END IF;
13914 
13915                         l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
13916 	        	l_b_prj_bil_rt_dt_code_flag := 'Y';
13917                         l_update_yes_flag := 'Y';
13918 
13919                      END IF;
13920 
13921                      l_statement  := l_statement || ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
13922                      l_b_proj_bil_rt_tp_flag := 'Y';
13923                      l_update_yes_flag := 'Y';
13924 
13925                   END IF;
13926 
13927 
13928                   -- Project Functional Currency related attributes
13929                   IF p_project_in.PROJFUNC_BIL_RATE_TYPE is NULL
13930                      OR p_project_in.PROJFUNC_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PFC_RATE_TYPE_INV_AMG:The project functional exchage rate type is invalid
13931                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13932         	        FND_MESSAGE.SET_NAME('PA','PA_PFC_RATE_TYPE_INV_AMG');
13933         	        FND_MSG_PUB.ADD;
13934         	        RAISE  FND_API.G_EXC_ERROR;
13935                      END IF;
13936                   ELSE
13937                      IF p_project_in.PROJFUNC_BIL_RATE_TYPE = 'User' THEN
13938                         IF p_project_in.PROJFUNC_BIL_EXCHANGE_RATE is NULL
13939                            OR p_project_in.PROJFUNC_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13940                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN  -- PA_EXCH_RATE_NULL_PF_AMG:Project Functional Exchange Rate cannot be null when  project functional rate type is User.
13941         	              FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PF_AMG');
13942         	              FND_MSG_PUB.ADD;
13943         	              RAISE  FND_API.G_EXC_ERROR;
13944                            END IF;
13945                         END IF;
13946 
13947                         l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
13948         		l_b_pjfnc_bil_xch_rt_flag := 'Y';
13949                         l_update_yes_flag := 'Y';
13950 
13951                      ELSE  -- non-User type
13952                         IF p_project_in.PROJFUNC_BIL_RATE_DATE_CODE is NULL
13953                            OR p_project_in.PROJFUNC_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13954 
13955                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13956                               FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
13957                               FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
13958                               FND_MSG_PUB.ADD;
13959                               RAISE  FND_API.G_EXC_ERROR;
13960                            END IF;
13961                         ELSE
13962                            IF p_project_in.PROJFUNC_BIL_RATE_DATE_CODE = 'Fixed Date' THEN
13963                               IF p_project_in.PROJFUNC_BIL_RATE_DATE is NULL
13964                                  OR p_project_in.PROJFUNC_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13965                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13966 	        	            FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
13967                                     FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
13968         		            FND_MSG_PUB.ADD;
13969         		            RAISE  FND_API.G_EXC_ERROR;
13970                                  END IF;
13971                               END IF;
13972                            END IF;
13973                            l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
13974         		   l_b_prjfnc_bil_rt_dt_flag := 'Y';
13975                            l_update_yes_flag := 'Y';
13976                         END IF;
13977                         l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
13978         		l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
13979                         l_update_yes_flag := 'Y';
13980                      END IF;
13981 
13982                      l_statement  := l_statement || ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
13983         	     l_b_prjfnc_bil_rt_tp_flag := 'Y';
13984                      l_update_yes_flag := 'Y';
13985 
13986                   END IF;
13987 
13988 
13989                   -- Funding Currency related attributes
13990                   IF p_project_in.FUNDING_RATE_TYPE is NULL
13991                      OR p_project_in.FUNDING_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_FUND_RATE_TYPE_INV_AMG:The funding exchage rate type is invalid
13992                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13993         	        FND_MESSAGE.SET_NAME('PA','PA_FUND_RATE_TYPE_INV_AMG');
13994         	        FND_MSG_PUB.ADD;
13995         	        RAISE  FND_API.G_EXC_ERROR;
13996                      END IF;
13997                   ELSE
13998                      IF p_project_in.FUNDING_RATE_TYPE = 'User' THEN
13999                         IF p_project_in.FUNDING_EXCHANGE_RATE is NULL
14000                            OR p_project_in.FUNDING_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14001                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN  -- PA_EXCHANGE_RATE_NULL:Exchange rate cannot be null when rate type is User.
14002         	              FND_MESSAGE.SET_NAME('PA','PA_EXCHANGE_RATE_NULL');
14003         	              FND_MSG_PUB.ADD;
14004         	              RAISE  FND_API.G_EXC_ERROR;
14005                            END IF;
14006                         END IF;
14007                         l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14008         		l_b_fnding_xch_rt_flag := 'Y';
14009                         l_update_yes_flag := 'Y';
14010 
14011                      ELSE  -- non-User type
14012                         IF p_project_in.FUNDING_RATE_DATE_CODE is NULL
14013                            OR p_project_in.FUNDING_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14014 
14015                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14016                               FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
14017                               FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
14018                               FND_MSG_PUB.ADD;
14019                               RAISE  FND_API.G_EXC_ERROR;
14020                            END IF;
14021                         ELSE
14022                            IF p_project_in.FUNDING_RATE_DATE_CODE = 'Fixed Date' THEN
14023                               IF p_project_in.FUNDING_RATE_DATE is NULL
14024                                  OR p_project_in.FUNDING_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
14025                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14026 	        	            FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
14027                                     FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
14028         		            FND_MSG_PUB.ADD;
14029         		            RAISE  FND_API.G_EXC_ERROR;
14030                                  END IF;
14031                               END IF;
14032                            END IF;
14033                            l_statement  := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14034         		   l_b_fnding_rt_dt_flag := 'Y';
14035                            l_update_yes_flag := 'Y';
14036                         END IF;
14037                         l_statement  := l_statement || ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14038         		l_b_fndng_rt_dt_cd_flag := 'Y';
14039                         l_update_yes_flag := 'Y';
14040                      END IF;
14041 
14042                      l_statement  := l_statement || ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14043         	     l_b_fnding_rt_type_flag := 'Y';
14044                      l_update_yes_flag := 'Y';
14045 
14046                   END IF;
14047 
14048                ELSE  -- do no MCB related validations
14049 
14050                  IF ((p_project_in.project_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14051 	            AND p_project_in.project_bil_exchange_rate IS NOT NULL)
14052 	            OR  p_project_in.project_bil_exchange_rate IS NULL) THEN
14053 	            IF NVL(p_project_in.project_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14054 	            <> NVL(l_project_rec.project_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14055 	         	l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14056 	        	l_b_proj_bil_xch_rt_flag := 'Y';
14057 	        	l_update_yes_flag := 'Y';
14058 	            END IF;
14059 	         END IF;
14060 
14061                  IF ((p_project_in.project_bil_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14062 		    AND p_project_in.project_bil_rate_date_code IS NOT NULL)
14063 		    OR p_project_in.project_bil_rate_date_code IS NULL) THEN
14064 		    IF NVL(p_project_in.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14065 		       <> NVL(l_project_rec.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14066 		       l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14067 		       l_b_prj_bil_rt_dt_code_flag := 'Y';
14068 		       l_update_yes_flag := 'Y';
14069 		    END IF;
14070 		 END IF;
14071 
14072 		 IF ((p_project_in.project_bil_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14073 		    AND p_project_in.project_bil_rate_type IS NOT NULL)
14074 		    OR p_project_in.project_bil_rate_type IS NULL) THEN
14075 		    IF NVL(p_project_in.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14076 		       <> NVL(l_project_rec.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14077 		       l_statement  := l_statement || ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14078 		       l_b_proj_bil_rt_tp_flag := 'Y';
14079 		       l_update_yes_flag := 'Y';
14080 		    END IF;
14081 		 END IF;
14082 
14083 		 IF ((p_project_in.project_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14084 		    AND p_project_in.project_bil_rate_date IS NOT NULL)
14085 		    OR p_project_in.project_bil_rate_date IS NULL) THEN
14086 		    IF NVL(p_project_in.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14087 		       <> NVL(l_project_rec.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14088 		       l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14089 		       l_b_prj_bil_rt_dt_flag := 'Y';
14090 		       l_update_yes_flag := 'Y';
14091 		    END IF;
14092 		 END IF;
14093 
14094 	         IF ((p_project_in.projfunc_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14095 	            AND p_project_in.projfunc_bil_exchange_rate IS NOT NULL)
14096 	            OR  p_project_in.projfunc_bil_exchange_rate IS NULL) THEN
14097 	            IF NVL(p_project_in.projfunc_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14098 	            <> NVL(l_project_rec.projfunc_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14099 	        	l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14100 	        	l_b_pjfnc_bil_xch_rt_flag := 'Y';
14101 	        	l_update_yes_flag := 'Y';
14102 	            END IF;
14103 	         END IF;
14104 
14105 		 IF ((p_project_in.projfunc_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14106 		    AND p_project_in.projfunc_bil_rate_date IS NOT NULL)
14107 		    OR p_project_in.projfunc_bil_rate_date IS NULL) THEN
14108 		    IF NVL(p_project_in.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14109 		       <> NVL(l_project_rec.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14110 		       l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14111 		       l_b_prjfnc_bil_rt_dt_flag := 'Y';
14112 		       l_update_yes_flag := 'Y';
14113 		    END IF;
14114 		 END IF;
14115 
14116                  IF ((p_project_in.projfunc_bil_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14117 		    AND p_project_in.projfunc_bil_rate_date_code IS NOT NULL)
14118 		    OR p_project_in.projfunc_bil_rate_date_code IS NULL) THEN
14119 		    IF NVL(p_project_in.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14120 		       <> NVL(l_project_rec.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14121 		       l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14122 		       l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14123 		       l_update_yes_flag := 'Y';
14124 		    END IF;
14125 		 END IF;
14126 
14127 		 IF ((p_project_in.projfunc_bil_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14128 		    AND p_project_in.projfunc_bil_rate_type IS NOT NULL)
14129 		    OR p_project_in.projfunc_bil_rate_type IS NULL) THEN
14130 		    IF NVL(p_project_in.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14131 		       <> NVL(l_project_rec.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14132 		       l_statement  := l_statement || ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14133 		       l_b_prjfnc_bil_rt_tp_flag := 'Y';
14134 		       l_update_yes_flag := 'Y';
14135 		    END IF;
14136 		 END IF;
14137 
14138 	         IF ((p_project_in.funding_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14139 	            AND p_project_in.funding_exchange_rate IS NOT NULL)
14140 	            OR  p_project_in.funding_exchange_rate IS NULL) THEN
14141 	            IF NVL(p_project_in.funding_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <>
14142 	        	NVL(l_project_rec.funding_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14143 	        	l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14144 	        	l_b_fnding_xch_rt_flag := 'Y';
14145 	        	l_update_yes_flag := 'Y';
14146 	            END IF;
14147                  END IF;
14148 
14149 		 IF ((p_project_in.funding_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14150 		    AND p_project_in.funding_rate_date IS NOT NULL)
14151 		    OR p_project_in.funding_rate_date IS NULL) THEN
14152 		    IF NVL(p_project_in.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14153 		       <> NVL(l_project_rec.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14154 		       l_statement  := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14155 		       l_b_fnding_rt_dt_flag := 'Y';
14156 		       l_update_yes_flag := 'Y';
14157 		    END IF;
14158                  END IF;
14159 
14160 		 IF ((p_project_in.funding_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14161 		    AND p_project_in.funding_rate_date_code IS NOT NULL)
14162 		    OR p_project_in.funding_rate_date_code IS NULL) THEN
14163 		    IF NVL(p_project_in.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14164 		       <> NVL(l_project_rec.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14165 		       l_statement  := l_statement || ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14166 		       l_b_fndng_rt_dt_cd_flag := 'Y';
14167 		       l_update_yes_flag := 'Y';
14168 		    END IF;
14169 		 END IF;
14170 
14171 		 IF ((p_project_in.funding_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14172 		    AND p_project_in.funding_rate_type IS NOT NULL)
14173 		    OR p_project_in.funding_rate_type IS NULL) THEN
14174 		    IF NVL(p_project_in.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14175 		       <> NVL(l_project_rec.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14176 		       l_statement  := l_statement || ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14177 		       l_b_fnding_rt_type_flag := 'Y';
14178 		       l_update_yes_flag := 'Y';
14179 		    END IF;
14180                  END IF;
14181 
14182                END IF;
14183 
14184        END IF;
14185 
14186 -- Bug 6144566: Changes end
14187 
14188 /* Commenting the below code for bug #4630836 as the 'non_lab_std_bill_rt_sch_id' column
14189    is getting updated in the code added as part of the fix for the bug 2802984 and the below
14190    code is causing duplicate column updation error.
14191 
14192        IF p_project_in.non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14193           AND p_project_in.non_lab_std_bill_rt_sch_id IS NOT NULL  THEN
14194           IF p_project_in.non_lab_std_bill_rt_sch_id <> l_project_rec.non_lab_std_bill_rt_sch_id
14195               THEN
14196 --bug 2955326
14197 --
14198 --             l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||
14199 --                  TO_CHAR(p_project_in.non_lab_std_bill_rt_sch_id)||',';
14200 --
14201              l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = :n_lb_std_bill_rt_sch_id ,';
14202              l_b_nn_lb_std_bl_rt_sch_id_f := 'Y';
14203 --end bug 2955326
14204              l_update_yes_flag := 'Y';
14205           END IF;
14206        END IF; */
14207 
14208 -- Bug 6144566: Changes start
14209 /*
14210        IF p_project_in.project_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14211           AND p_project_in.project_bil_exchange_rate IS NOT NULL  THEN
14212           IF p_project_in.project_bil_exchange_rate <> l_project_rec.project_bil_exchange_rate
14213               THEN
14214 --bug 2955326
14215 
14216              l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = ' ||
14217                   TO_CHAR(p_project_in.project_bil_exchange_rate)||',';
14218 
14219              l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14220              l_b_proj_bil_xch_rt_flag := 'Y';
14221 --end bug 2955326
14222              l_update_yes_flag := 'Y';
14223           END IF;
14224        END IF;
14225 
14226        IF p_project_in.projfunc_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14227           AND p_project_in.projfunc_bil_exchange_rate IS NOT NULL  THEN
14228           IF p_project_in.projfunc_bil_exchange_rate <> l_project_rec.projfunc_bil_exchange_rate
14229               THEN
14230 --bug 2955326
14231 
14232              l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = ' ||
14233                   TO_CHAR(p_project_in.projfunc_bil_exchange_rate)||',';
14234 
14235              l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14236              l_b_pjfnc_bil_xch_rt_flag := 'Y';
14237 --end bug 2955326
14238              l_update_yes_flag := 'Y';
14239           END IF;
14240        END IF;
14241 
14242        IF p_project_in.funding_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14243           AND p_project_in.funding_exchange_rate IS NOT NULL  THEN
14244           IF p_project_in.funding_exchange_rate <> l_project_rec.funding_exchange_rate
14245               THEN
14246 --bug 2955326
14247 
14248              l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = ' ||
14249                   TO_CHAR(p_project_in.funding_exchange_rate)||',';
14250 
14251              l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14252              l_b_fnding_xch_rt_flag := 'Y';
14253 --end bug 2955326
14254              l_update_yes_flag := 'Y';
14255           END IF;
14256        END IF;
14257 */
14258 -- Bug 6144566: Changes end
14259 
14260        IF p_project_in.enable_automated_search  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14261           AND p_project_in.enable_automated_search IS NOT NULL  THEN
14262           IF NVL(p_project_in.enable_automated_search, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14263            <> NVL(l_project_rec.enable_automated_search, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14264               THEN
14265 --bug 2955326
14266 /*
14267              l_statement  := l_statement ||
14268                        ' ENABLE_AUTOMATED_SEARCH =  '||''''||
14269              RTRIM(p_project_in.enable_automated_search)||''''||',';
14270 */
14271              l_statement  := l_statement ||
14272                        ' ENABLE_AUTOMATED_SEARCH = :enable_auto_srch ,';
14273              l_b_enable_auto_srch_flag := 'Y';
14274 --end bug 2955326
14275              l_update_yes_flag := 'Y';
14276           END IF;
14277        END IF;
14278 
14279        IF p_project_in.search_country_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14280           AND p_project_in.search_country_code IS NOT NULL  THEN
14281           IF NVL(p_project_in.search_country_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14282            <> NVL(l_project_rec.search_country_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14283               THEN
14284 --bug 2955326
14285 /*
14286              l_statement  := l_statement ||
14287                        ' SEARCH_COUNTRY_CODE =  '||''''||
14288              RTRIM(p_project_in.search_country_code)||''''||',';
14289 */
14290              l_statement  := l_statement ||
14291                        ' SEARCH_COUNTRY_CODE = :srch_cntry_code ,';
14292              l_b_srch_cntry_code_flag := 'Y';
14293 --end bug 2955326
14294              l_update_yes_flag := 'Y';
14295           END IF;
14296        END IF;
14297 
14298        IF p_project_in.invproc_currency_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14299           AND p_project_in.invproc_currency_type IS NOT NULL  THEN
14300           IF NVL(p_project_in.invproc_currency_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14301            <> NVL(l_project_rec.invproc_currency_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14302               THEN
14303 --bug 2955326
14304 /*
14305              l_statement  := l_statement ||
14306                        ' INVPROC_CURRENCY_TYPE =  '||''''||
14307              RTRIM(p_project_in.invproc_currency_type)||''''||',';
14308 */
14309              l_statement  := l_statement ||
14310                        ' INVPROC_CURRENCY_TYPE = :invproc_currency_type ,';
14311              l_b_invproc_crncy_tp_flag := 'Y';
14312 --end bug 2955326
14313              l_update_yes_flag := 'Y';
14314           END IF;
14315        END IF;
14316 
14317        IF p_project_in.revproc_currency_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14318           AND p_project_in.revproc_currency_code IS NOT NULL  THEN
14319           IF NVL(p_project_in.revproc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14320            <> NVL(l_project_rec.revproc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14321               THEN
14322 --bug 2955326
14323 /*
14324              l_statement  := l_statement ||
14325                        ' REVPROC_CURRENCY_CODE =  '||''''||
14326              RTRIM(p_project_in.revproc_currency_code)||''''||',';
14327 */
14328              l_statement  := l_statement ||
14329                        ' REVPROC_CURRENCY_CODE = :revproc_currency_code ,';
14330              l_b_revproc_crncy_cd_flag := 'Y';
14331 --end bug 2955326
14332              l_update_yes_flag := 'Y';
14333           END IF;
14334        END IF;
14335 
14336 -- Bug 6144566: Changes start
14337 /*
14338        IF p_project_in.project_bil_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14339           AND p_project_in.project_bil_rate_date_code IS NOT NULL  THEN
14340           IF NVL(p_project_in.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14341            <> NVL(l_project_rec.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14342               THEN
14343 --bug 2955326
14344 
14345              l_statement  := l_statement ||
14346                        ' PROJECT_BIL_RATE_DATE_CODE =  '||''''||
14347              RTRIM(p_project_in.project_bil_rate_date_code)||''''||',';
14348 
14349              l_statement  := l_statement ||
14350                        ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14351              l_b_prj_bil_rt_dt_code_flag := 'Y';
14352 --end bug 2955326
14353              l_update_yes_flag := 'Y';
14354           END IF;
14355        END IF;
14356 
14357        IF p_project_in.project_bil_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14358           AND p_project_in.project_bil_rate_type IS NOT NULL  THEN
14359           IF NVL(p_project_in.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14360            <> NVL(l_project_rec.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14361               THEN
14362 --bug 2955326
14363 
14364              l_statement  := l_statement ||
14365                        ' PROJECT_BIL_RATE_TYPE =  '||''''||
14366              RTRIM(p_project_in.project_bil_rate_type)||''''||',';
14367 
14368              l_statement  := l_statement ||
14369                        ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14370              l_b_proj_bil_rt_tp_flag := 'Y';
14371 --end bug 2955326
14372              l_update_yes_flag := 'Y';
14373           END IF;
14374        END IF;
14375 */
14376 -- Bug 6144566: Changes end
14377 
14378        IF p_project_in.projfunc_currency_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14379           AND p_project_in.projfunc_currency_code IS NOT NULL  THEN
14380           IF NVL(p_project_in.projfunc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14381            <> NVL(l_project_rec.projfunc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14382               THEN
14383 --bug 2955326
14384 /*
14385              l_statement  := l_statement ||
14386                        ' PROJFUNC_CURRENCY_CODE =  '||''''||
14387              RTRIM(p_project_in.projfunc_currency_code)||''''||',';
14388 */
14389              l_statement  := l_statement ||
14390                        ' PROJFUNC_CURRENCY_CODE = :prjfnc_currency_code ,';
14391              l_b_prjfnc_crncy_code_flag := 'Y';
14392 --end bug 2955326
14393              l_update_yes_flag := 'Y';
14394           END IF;
14395        END IF;
14396 
14397 -- Bug 6144566: Changes start
14398 /*
14399        IF p_project_in.projfunc_bil_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14400           AND p_project_in.projfunc_bil_rate_date_code IS NOT NULL  THEN
14401           IF NVL(p_project_in.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14402            <> NVL(l_project_rec.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14403               THEN
14404 --bug 2955326
14405 
14406              l_statement  := l_statement ||
14407                        ' PROJFUNC_BIL_RATE_DATE_CODE =  '||''''||
14408              RTRIM(p_project_in.projfunc_bil_rate_date_code)||''''||',';
14409 
14410              l_statement  := l_statement ||
14411                        ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14412              l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14413 --end bug 2955326
14414              l_update_yes_flag := 'Y';
14415           END IF;
14416        END IF;
14417 
14418        IF p_project_in.projfunc_bil_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14419           AND p_project_in.projfunc_bil_rate_type IS NOT NULL  THEN
14420           IF NVL(p_project_in.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14421            <> NVL(l_project_rec.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14422               THEN
14423 --bug 2955326
14424 
14425              l_statement  := l_statement ||
14426                        ' PROJFUNC_BIL_RATE_TYPE =  '||''''||
14427              RTRIM(p_project_in.projfunc_bil_rate_type)||''''||',';
14428 
14429              l_statement  := l_statement ||
14430                        ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14431              l_b_prjfnc_bil_rt_tp_flag := 'Y';
14432 --end bug 2955326
14433              l_update_yes_flag := 'Y';
14434           END IF;
14435        END IF;
14436 
14437        IF p_project_in.funding_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14438           AND p_project_in.funding_rate_date_code IS NOT NULL  THEN
14439           IF NVL(p_project_in.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14440            <> NVL(l_project_rec.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14441               THEN
14442 --bug 2955326
14443 
14444              l_statement  := l_statement ||
14445                        ' FUNDING_RATE_DATE_CODE =  '||''''||
14446              RTRIM(p_project_in.funding_rate_date_code)||''''||',';
14447 
14448              l_statement  := l_statement ||
14449                        ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14450              l_b_fndng_rt_dt_cd_flag := 'Y';
14451 --end bug 2955326
14452              l_update_yes_flag := 'Y';
14453           END IF;
14454        END IF;
14455 
14456        IF p_project_in.funding_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14457           AND p_project_in.funding_rate_type IS NOT NULL  THEN
14458           IF NVL(p_project_in.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14459            <> NVL(l_project_rec.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14460               THEN
14461 --bug 2955326
14462 
14463              l_statement  := l_statement ||
14464                        ' FUNDING_RATE_TYPE =  '||''''||
14465              RTRIM(p_project_in.funding_rate_type)||''''||',';
14466 
14467              l_statement  := l_statement ||
14468                        ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14469              l_b_fnding_rt_type_flag := 'Y';
14470 --end bug 2955326
14471              l_update_yes_flag := 'Y';
14472           END IF;
14473        END IF;
14474 */
14475 -- Bug 6144566: Changes end
14476 
14477        IF p_project_in.baseline_funding_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14478           AND p_project_in.baseline_funding_flag IS NOT NULL  THEN
14479           IF NVL(p_project_in.baseline_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14480            <> NVL(l_project_rec.baseline_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14481               THEN
14482 --bug 2955326
14483 /*
14484              l_statement  := l_statement ||
14485                        ' BASELINE_FUNDING_FLAG =  '||''''||
14486              RTRIM(p_project_in.baseline_funding_flag)||''''||',';
14487 */
14488              l_statement  := l_statement ||
14489                        ' BASELINE_FUNDING_FLAG = :bsln_fnding_flag ,';
14490              l_b_bsln_fnding_flag := 'Y';
14491 --end bug 2955326
14492              l_update_yes_flag := 'Y';
14493           END IF;
14494        END IF;
14495 
14496        IF p_project_in.projfunc_cost_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14497           AND p_project_in.projfunc_cost_rate_type IS NOT NULL  THEN
14498           IF NVL(p_project_in.projfunc_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14499            <> NVL(l_project_rec.projfunc_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14500               THEN
14501 --bug 2955326
14502 /*
14503              l_statement  := l_statement ||
14504                        ' PROJFUNC_COST_RATE_TYPE =  '||''''||
14505              RTRIM(p_project_in.projfunc_cost_rate_type)||''''||',';
14506 */
14507              l_statement  := l_statement ||
14508                        ' PROJFUNC_COST_RATE_TYPE = :projfnc_cost_rate_type ,';
14509              l_b_prjfnc_cst_rt_tp_flag := 'Y';
14510 --end bug 2955326
14511              l_update_yes_flag := 'Y';
14512           END IF;
14513        END IF;
14514 
14515        IF p_project_in.inv_by_bill_trans_curr_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14516           AND p_project_in.inv_by_bill_trans_curr_flag IS NOT NULL  THEN
14517           IF NVL(p_project_in.inv_by_bill_trans_curr_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14518            <> NVL(l_project_rec.inv_by_bill_trans_curr_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14519               THEN
14520 --bug 2955326
14521 /*
14522              l_statement  := l_statement ||
14523                        ' INV_BY_BILL_TRANS_CURR_FLAG =  '||''''||
14524              RTRIM(p_project_in.inv_by_bill_trans_curr_flag)||''''||',';
14525 */
14526              l_statement  := l_statement ||
14527                        ' INV_BY_BILL_TRANS_CURR_FLAG = :inv_by_bil_txn_cur_flag ,';
14528              l_b_inv_bill_txn_cur_flag := 'Y';
14529 --end bug 2955326
14530              l_update_yes_flag := 'Y';
14531           END IF;
14532        END IF;
14533 
14534 -- Bug 6144566: Changes start
14535 /*
14536        IF p_project_in.multi_currency_billing_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14537           AND p_project_in.multi_currency_billing_flag IS NOT NULL  THEN
14538           IF NVL(p_project_in.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14539            <> NVL(l_project_rec.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14540               THEN
14541 --bug 2955326
14542 
14543              l_statement  := l_statement ||
14544                        ' MULTI_CURRENCY_BILLING_FLAG =  '||''''||
14545              RTRIM(p_project_in.multi_currency_billing_flag)||''''||',';
14546 
14547              l_statement  := l_statement ||
14548                        ' MULTI_CURRENCY_BILLING_FLAG = :multi_crncy_bil_flag ,';
14549              l_b_multi_crncy_bil_flag := 'Y';
14550 --end bug 2955326
14551              l_update_yes_flag := 'Y';
14552           END IF;
14553        END IF;
14554 
14555        IF p_project_in.project_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14556           AND p_project_in.project_bil_rate_date IS NOT NULL  THEN
14557           IF NVL(p_project_in.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14558            <> NVL(l_project_rec.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14559               THEN
14560 --bug 2955326
14561 
14562              l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE =  to_date('''||
14563                      to_char(p_project_in.project_bil_rate_date,'YYYY/MM/DD')||
14564                              ''', ''YYYY/MM/DD''),';
14565 
14566              l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14567              l_b_prj_bil_rt_dt_flag := 'Y';
14568 --end bug 2955326
14569              l_update_yes_flag := 'Y';
14570           END IF;
14571        END IF;
14572 
14573        IF p_project_in.projfunc_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14574           AND p_project_in.projfunc_bil_rate_date IS NOT NULL  THEN
14575           IF NVL(p_project_in.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14576            <> NVL(l_project_rec.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14577               THEN
14578 --bug 2955326
14579 
14580              l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE =  to_date('''||
14581                      to_char(p_project_in.projfunc_bil_rate_date,'YYYY/MM/DD')||
14582                              ''', ''YYYY/MM/DD''),';
14583 
14584              l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14585              l_b_prjfnc_bil_rt_dt_flag := 'Y';
14586 --end bug 2955326
14587              l_update_yes_flag := 'Y';
14588           END IF;
14589        END IF;
14590 
14591        IF p_project_in.funding_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14592           AND p_project_in.funding_rate_date IS NOT NULL  THEN
14593           IF NVL(p_project_in.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14594            <> NVL(l_project_rec.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14595               THEN
14596 --bug 2955326
14597 
14598              l_statement  := l_statement || ' FUNDING_RATE_DATE =  to_date('''||
14599                      to_char(p_project_in.funding_rate_date,'YYYY/MM/DD')||
14600                              ''', ''YYYY/MM/DD''),';
14601 
14602              l_statement  := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14603              l_b_fnding_rt_dt_flag := 'Y';
14604 --end bug 2955326
14605              l_update_yes_flag := 'Y';
14606           END IF;
14607        END IF;
14608 */
14609 -- Bug 6144566: Changes end
14610 
14611        IF p_project_in.projfunc_cost_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14612           AND p_project_in.projfunc_cost_rate_date IS NOT NULL  THEN
14613           IF NVL(p_project_in.projfunc_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14614            <> NVL(l_project_rec.projfunc_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14615               THEN
14616 --bug 2955326
14617 /*
14618              l_statement  := l_statement || ' PROJFUNC_COST_RATE_DATE =  to_date('''||
14619                      to_char(p_project_in.projfunc_cost_rate_date,'YYYY/MM/DD')||
14620                              ''', ''YYYY/MM/DD''),';
14621 */
14622              l_statement  := l_statement || ' PROJFUNC_COST_RATE_DATE = :prjfnc_cst_rt_date ,';
14623              l_b_prjfnc_cst_rt_dt_flag := 'Y';
14624 --end bug 2955326
14625              l_update_yes_flag := 'Y';
14626           END IF;
14627        END IF;
14628 
14629 --Sakthi MCB
14630 --Sakthi Structure
14631        IF p_project_in.assign_precedes_task  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14632           AND p_project_in.assign_precedes_task IS NOT NULL  THEN
14633           IF NVL(p_project_in.assign_precedes_task, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14634            <> NVL(l_project_rec.assign_precedes_task, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14635               THEN
14636 --bug 2955326
14637 /*
14638              l_statement  := l_statement ||
14639                        ' ASSIGN_PRECEDES_TASK =  '||''''||
14640              RTRIM(p_project_in.assign_precedes_task)||''''||',';
14641 */
14642              l_statement  := l_statement ||
14643                        ' ASSIGN_PRECEDES_TASK = :asgn_prec_tsk_flg ,';
14644              l_b_asgn_prec_tsk_flag := 'Y';
14645 --end bug 2955326
14646              l_update_yes_flag := 'Y';
14647           END IF;
14648        END IF;
14649 
14650        IF p_project_in.split_cost_from_workplan_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14651           AND p_project_in.split_cost_from_workplan_flag IS NOT NULL  THEN
14652           IF NVL(p_project_in.split_cost_from_workplan_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14653            <> NVL(l_project_rec.split_cost_from_workplan_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14654               THEN
14655 --bug 2955326
14656 /*
14657              l_statement  := l_statement ||
14658                        ' SPLIT_COST_FROM_WORKPLAN_FLAG =  '||''''||
14659              RTRIM(p_project_in.split_cost_from_workplan_flag)||''''||',';
14660 */
14661              l_statement  := l_statement ||
14662                        ' SPLIT_COST_FROM_WORKPLAN_FLAG = :splt_cst_fm_wp_flag ,';
14663              l_b_splt_cst_fm_wp_flag := 'Y';
14664 --end bug 2955326
14665              l_update_yes_flag := 'Y';
14666           END IF;
14667        END IF;
14668 
14669        IF p_project_in.split_cost_from_bill_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14670           AND p_project_in.split_cost_from_bill_flag IS NOT NULL  THEN
14671           IF NVL(p_project_in.split_cost_from_bill_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14672            <> NVL(l_project_rec.split_cost_from_bill_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14673               THEN
14674 --bug 2955326
14675 /*
14676              l_statement  := l_statement ||
14677                        ' SPLIT_COST_FROM_BILL_FLAG =  '||''''||
14678              RTRIM(p_project_in.split_cost_from_bill_flag)||''''||',';
14679 */
14680              l_statement  := l_statement ||
14681                        ' SPLIT_COST_FROM_BILL_FLAG = :splt_cst_fm_bill_flag ,';
14682              l_b_splt_cst_fm_bill_flag := 'Y';
14683 --end bug 2955326
14684              l_update_yes_flag := 'Y';
14685           END IF;
14686        END IF;
14687 
14688 --Sakthi Structure
14689 --Advertisement
14690 
14691        IF p_project_in.adv_action_set_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14692           AND p_project_in.adv_action_set_id IS NOT NULL  THEN
14693           IF NVL(p_project_in.adv_action_set_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14694            <> NVL(l_project_rec.adv_action_set_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14695               THEN
14696 --bug 2955326
14697 /*
14698              l_statement  := l_statement || ' ADV_ACTION_SET_ID =  '||
14699                   TO_CHAR(p_project_in.adv_action_set_id)||',';
14700 */
14701              l_statement  := l_statement || ' ADV_ACTION_SET_ID = :adv_act_set_id ,';
14702              l_b_adv_act_set_id_flag := 'Y';
14703 --end bug 2955326
14704              l_update_yes_flag := 'Y';
14705           END IF;
14706        END IF;
14707 
14708        IF p_project_in.start_adv_action_set_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14709           AND p_project_in.start_adv_action_set_flag IS NOT NULL  THEN
14710           IF NVL(p_project_in.start_adv_action_set_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14711            <> NVL(l_project_rec.start_adv_action_set_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14712               THEN
14713 --bug 2955326
14714 /*
14715              l_statement  := l_statement ||
14716                        ' START_ADV_ACTION_SET_FLAG =  '||''''||
14717              RTRIM(p_project_in.start_adv_action_set_flag)||''''||',';
14718 */
14719              l_statement  := l_statement ||
14720                        ' START_ADV_ACTION_SET_FLAG = :st_adv_act_set_flag ,';
14721              l_b_st_adv_act_set_flag := 'Y';
14722 --end bug 2955326
14723              l_update_yes_flag := 'Y';
14724           END IF;
14725        END IF;
14726 
14727 --Advertisement
14728 
14729 --Project Setup
14730 
14731          IF p_project_in.priority_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14732           AND p_project_in.priority_code IS NOT NULL  THEN
14733           IF NVL(p_project_in.priority_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14734            <> NVL(l_project_rec.priority_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14735               THEN
14736 --bug 2955326
14737 /*
14738              l_statement  := l_statement ||
14739                        ' PRIORITY_CODE =  '||''''||
14740              RTRIM(p_project_in.priority_code)||''''||',';
14741 */
14742 
14743              -- 5191417 validate passed priority_code value
14744 
14745              OPEN priority_code_csr(p_project_in.priority_code);
14746              FETCH priority_code_csr into l_valid_prio_code;
14747              CLOSE priority_code_csr;
14748 
14749              -- if not valid, throw error message
14750 
14751              IF l_valid_prio_code = 'N' THEN
14752 
14753                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14754 
14755                   PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
14756                         ,p_msg_name         => 'PA_INVALID_PRIORITY_CODE');
14757 
14758                   l_return_status := FND_API.G_RET_STS_ERROR;
14759 
14760                   RAISE  FND_API.G_EXC_ERROR;
14761 
14762                 END IF;
14763 
14764              END IF;
14765 
14766              -- 5191417 end
14767 
14768              l_statement  := l_statement ||
14769                        ' PRIORITY_CODE = :pri_code ,';
14770              l_b_pri_code_flag := 'Y';
14771 --end bug 2955326
14772              l_update_yes_flag := 'Y';
14773           END IF;
14774        END IF;
14775 
14776 --Project Setup
14777 
14778 --Retention
14779        IF p_project_in.retn_billing_inv_format_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14780           AND p_project_in.retn_billing_inv_format_id IS NOT NULL  THEN
14781           IF NVL(p_project_in.retn_billing_inv_format_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14782            <> NVL(l_project_rec.retn_billing_inv_format_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14783               THEN
14784 --bug 2955326
14785 /*
14786              l_statement  := l_statement || ' RETN_BILLING_INV_FORMAT_ID =  '||
14787                   TO_CHAR(p_project_in.retn_billing_inv_format_id)||',';
14788 */
14789              l_statement  := l_statement || ' RETN_BILLING_INV_FORMAT_ID = :retn_bil_inv_fmt_id ,';
14790              l_b_retn_bil_inv_fmt_id_flg := 'Y';
14791 --end bug 2955326
14792              l_update_yes_flag := 'Y';
14793           END IF;
14794        END IF;
14795 
14796        IF p_project_in.retn_accounting_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14797           AND p_project_in.retn_accounting_flag IS NOT NULL  THEN
14798           IF NVL(p_project_in.retn_accounting_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14799            <> NVL(l_project_rec.retn_accounting_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14800               THEN
14801 --bug 2955326
14802 /*
14803              l_statement  := l_statement ||
14804                        ' RETN_ACCOUNTING_FLAG =  '||''''||
14805              RTRIM(p_project_in.retn_accounting_flag)||''''||',';
14806 */
14807              l_statement  := l_statement ||
14808                        ' RETN_ACCOUNTING_FLAG = :retn_acnt_flag ,';
14809              l_b_retn_acnt_flag := 'Y';
14810 --end bug 2955326
14811              l_update_yes_flag := 'Y';
14812           END IF;
14813        END IF;
14814 --Retention
14815 
14816 -- anlee
14817 -- patchset K changes
14818          IF p_project_in.revaluate_funding_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14819           AND p_project_in.revaluate_funding_flag IS NOT NULL  THEN
14820           IF NVL(p_project_in.revaluate_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14821            <> NVL(l_project_rec.revaluate_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14822               THEN
14823             /*Bug #2891513 Added the below code for bug 2891513*/
14824         IF p_project_in.include_gains_losses_flag = 'N'
14825         THEN
14826 --bug 2955326
14827 /*
14828              l_statement  := l_statement ||
14829                        ' revaluate_funding_flag =  '||''''||
14830              RTRIM(p_project_in.revaluate_funding_flag)||''''||',';
14831 */
14832              l_statement  := l_statement ||
14833                        ' revaluate_funding_flag = :reval_fndng_flg ,';
14834              l_b_reval_fndng_flag := 'Y';
14835 --end bug 2955326
14836              l_update_yes_flag := 'Y';
14837         ELSE
14838 
14839           IF ((p_project_in.include_gains_losses_flag = 'Y' OR l_project_rec.include_gains_losses_flag ='Y')
14840             AND  (p_project_in.revaluate_funding_flag = 'N'))
14841           THEN
14842                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14843                    THEN
14844                         pa_interface_utils_pub.map_new_amg_msg
14845                         ( p_old_message_code => 'PA_CANT_UPDATE_REV_FUN'
14846                          ,p_msg_attribute    => 'CHANGE'
14847                          ,p_resize_flag      => 'Y'
14848                          ,p_msg_context      => 'PROJ'
14849                          ,p_attribute1       => l_project_rec.segment1
14850                          ,p_attribute2       => ''
14851                          ,p_attribute3       => ''
14852                          ,p_attribute4       => ''
14853                          ,p_attribute5       => '');
14854                   END IF;
14855                   RAISE  FND_API.G_EXC_ERROR;
14856               /*bug 2891513 -Code ends*/
14857            ELSE
14858              l_statement  := l_statement ||
14859                        ' revaluate_funding_flag = :reval_fndng_flg ,';
14860              l_b_reval_fndng_flag := 'Y';
14861              l_update_yes_flag := 'Y';
14862           END IF;
14863          END IF;
14864         END IF;
14865        END IF;
14866 
14867 -- msundare
14868     IF p_project_in.security_level <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14869           AND p_project_in.security_level IS NOT NULL  THEN
14870           IF NVL(p_project_in.security_level, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14871            <> NVL(l_project_rec.security_level, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14872                 THEN
14873                         --bug 2955326
14874                         /*
14875                                      l_statement  := l_statement ||
14876                                                ' security_level =  '||''''||
14877                                      RTRIM(p_project_in.security_level)||''''||',';
14878                          */
14879 
14880                              --Included logic here to validate the Project Security Level
14881                              --For Bug#5191699.
14882                              --If the user passes an invalid value ,we need to handle that as,
14883                              --security level can take values only
14884                              --from the lookup.Hence we dont update and the existing value will remain.
14885 
14886                                 OPEN  cur_check_sec_level(p_project_in.security_level);
14887                                 FETCH cur_check_sec_level INTO l_check_sec_level;
14888                                 CLOSE cur_check_sec_level;
14889 
14890                                 IF l_check_sec_level = 'Y' THEN
14891                                         -- A Valid value has been passed hecne update
14892 
14893                                         l_statement  := l_statement ||
14894                                                ' security_level = :sec_lvl ,';
14895                                         l_b_sec_lvl_flag := 'Y';
14896                         --end bug 2955326
14897                                         l_update_yes_flag := 'Y';
14898                                 ELSE
14899                                         l_b_sec_lvl_flag  := 'N';
14900                                 END IF; -- End of changes Bug#5191699.
14901                 END IF;
14902      END IF;
14903 
14904     IF p_project_in.labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14905           AND p_project_in.labor_disc_reason_code IS NOT NULL  THEN
14906           IF NVL(p_project_in.labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14907               THEN
14908 --bug 2955326
14909 /*
14910              l_statement  := l_statement ||
14911                        ' labor_disc_reason_code =  '||''''||
14912              RTRIM(p_project_in.labor_disc_reason_code)||''''||',';
14913 */
14914              l_statement  := l_statement ||
14915                        ' labor_disc_reason_code = :lbr_disc_rsn_code ,';
14916              l_b_lbr_disc_rsn_code_flg := 'Y';
14917 --end bug 2955326
14918              l_update_yes_flag := 'Y';
14919           END IF;
14920        END IF;
14921 
14922     IF p_project_in.non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14923           AND p_project_in.labor_disc_reason_code IS NOT NULL  THEN
14924           IF NVL(p_project_in.non_labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.non_labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14925               THEN
14926 --bug 2955326
14927 /*
14928              l_statement  := l_statement ||
14929                        ' non_labor_disc_reason_code =  '||''''||
14930              RTRIM(p_project_in.non_labor_disc_reason_code)||''''||',';
14931 */
14932              l_statement  := l_statement ||
14933                        ' non_labor_disc_reason_code = :nn_lbr_disc_rsn_cd ,';
14934              l_b_nn_lbr_disc_rsn_cd_flg := 'Y';
14935 --end bug 2955326
14936              l_update_yes_flag := 'Y';
14937           END IF;
14938        END IF;
14939 
14940 -- End msundare
14941 
14942          IF p_project_in.include_gains_losses_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14943           AND p_project_in.include_gains_losses_flag IS NOT NULL  THEN
14944           IF NVL(p_project_in.include_gains_losses_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14945            <> NVL(l_project_rec.include_gains_losses_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14946               THEN
14947         /*Added the below condition for bug 2891513*/
14948         IF (l_include_gains_and_losses = 'Y'  AND
14949            (p_project_in.revaluate_funding_flag = 'Y' OR l_project_rec.revaluate_funding_flag ='Y'))
14950           THEN
14951 --bug 2955326
14952 /*
14953              l_statement  := l_statement ||
14954                        ' include_gains_losses_flag =  '||''''||
14955              RTRIM(p_project_in.include_gains_losses_flag)||''''||',';
14956 */
14957              l_statement  := l_statement ||
14958                        ' include_gains_losses_flag = :inc_gn_los_flg ,';
14959              l_b_inc_gn_los_flag := 'Y';
14960 --end bug 2955326
14961              l_update_yes_flag := 'Y';
14962          /*Added the else part of the code for bug 2891513*/
14963          ELSE
14964             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14965                THEN
14966                      pa_interface_utils_pub.map_new_amg_msg
14967                      ( p_old_message_code => 'PA_CANT_UPDATE_GAIN_LOSSES'
14968                       ,p_msg_attribute    => 'CHANGE'
14969                       ,p_resize_flag      => 'Y'
14970                       ,p_msg_context      => 'PROJ'
14971                       ,p_attribute1       => l_project_rec.segment1
14972                       ,p_attribute2       => ''
14973                       ,p_attribute3       => ''
14974                       ,p_attribute4       => ''
14975                       ,p_attribute5       => '');
14976              END IF;
14977                RAISE  FND_API.G_EXC_ERROR;
14978           END IF;
14979          END IF;
14980        END IF;
14981 
14982 -- End of changes
14983 
14984 --PA L Changes bug 2872708
14985          IF p_project_in.asset_allocation_method  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14986           AND p_project_in.asset_allocation_method IS NOT NULL  THEN
14987           IF NVL(p_project_in.asset_allocation_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14988            <> NVL(l_project_rec.asset_allocation_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14989               THEN
14990 --bug 2955326
14991 /*
14992              l_statement  := l_statement ||
14993                        ' asset_allocation_method =  '||''''||
14994              RTRIM(p_project_in.asset_allocation_method)||''''||',';
14995 */
14996 
14997              --From patchset L we need to perform vlaidation for all new columns added in AMG also.
14998              --Call validation API here
14999              PA_IMPL_OPTIONS_PUB.check_asset_alloc_method(
15000                             p_asset_allocation_method  => RTRIM(p_project_in.asset_allocation_method)
15001                            ,p_amg_segment1             => l_amg_segment1
15002                            ,x_msg_count                => l_msg_count
15003                            ,x_msg_data                 => l_msg_data
15004                            ,x_return_status            => l_return_status
15005                           );
15006              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15007              THEN
15008                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15009 
15010              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15011              THEN
15012                  p_multiple_task_msg := 'F';
15013                  RAISE FND_API.G_EXC_ERROR;
15014              END IF;
15015 
15016              l_statement  := l_statement ||
15017                        ' asset_allocation_method = :as_alloc_mth ,';
15018              l_b_as_alloc_mth_fg := 'Y';
15019 --end bug 2955326
15020              l_update_yes_flag := 'Y';
15021           END IF;
15022        END IF;
15023 
15024          IF p_project_in.capital_event_processing  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15025           AND p_project_in.capital_event_processing IS NOT NULL  THEN
15026           IF NVL(p_project_in.capital_event_processing, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15027            <> NVL(l_project_rec.capital_event_processing, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15028               THEN
15029 --bug 2955326
15030 /*
15031              l_statement  := l_statement ||
15032                        ' capital_event_processing =  '||''''||
15033              RTRIM(p_project_in.capital_event_processing)||''''||',';
15034 */
15035              --Call validation API here
15036              PA_IMPL_OPTIONS_PUB.check_cap_event_method(
15037                             p_capital_event_processing  => RTRIM(p_project_in.capital_event_processing)
15038                            ,p_amg_segment1             => l_amg_segment1
15039                            ,x_msg_count                => l_msg_count
15040                            ,x_msg_data                 => l_msg_data
15041                            ,x_return_status            => l_return_status
15042                           );
15043              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15044              THEN
15045                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15046 
15047              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15048              THEN
15049                  p_multiple_task_msg := 'F';
15050                  RAISE FND_API.G_EXC_ERROR;
15051              END IF;
15052 
15053              l_statement  := l_statement ||
15054                        ' capital_event_processing =  :cp_evt_proc,';
15055              l_b_cp_evt_proc_fg := 'Y';
15056 --end bug 2955326
15057              l_update_yes_flag := 'Y';
15058           END IF;
15059        END IF;
15060 
15061          IF p_project_in.cint_rate_sch_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15062           AND p_project_in.cint_rate_sch_id IS NOT NULL  THEN
15063           IF NVL(p_project_in.cint_rate_sch_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15064            <> NVL(l_project_rec.cint_rate_sch_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15065               THEN
15066 --bug 2955326
15067 /*
15068              l_statement  := l_statement ||
15069                        ' cint_rate_sch_id =  '||''''||
15070              RTRIM(p_project_in.cint_rate_sch_id)||''''||',';
15071 */
15072              --Call validation API here
15073              PA_IMPL_OPTIONS_PUB.check_cint_schedule(
15074                             p_cint_rate_sch_id         => p_project_in.cint_rate_sch_id
15075                            ,p_amg_segment1             => l_amg_segment1
15076                            ,x_msg_count                => l_msg_count
15077                            ,x_msg_data                 => l_msg_data
15078                            ,x_return_status            => l_return_status
15079                           );
15080              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15081              THEN
15082                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15083 
15084              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15085              THEN
15086                  p_multiple_task_msg := 'F';
15087                  RAISE FND_API.G_EXC_ERROR;
15088              END IF;
15089 
15090              l_statement  := l_statement ||
15091                        ' cint_rate_sch_id = :cint_rt_sch ,';
15092              l_b_cint_rt_sch_id_fg := 'Y';
15093 --end bug 2955326
15094              l_update_yes_flag := 'Y';
15095           END IF;
15096        END IF;
15097 
15098          IF p_project_in.cint_eligible_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15099           AND p_project_in.cint_eligible_flag IS NOT NULL  THEN
15100           IF NVL(p_project_in.cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15101            <> NVL(l_project_rec.cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15102               THEN
15103 --bug 2955326
15104 /*
15105              l_statement  := l_statement ||
15106                        ' cint_eligible_flag =  '||''''||
15107              RTRIM(p_project_in.cint_eligible_flag)||''''||',';
15108 */
15109              l_statement  := l_statement ||
15110                        ' cint_eligible_flag = :cint_elg_fg ,';
15111              l_b_cint_elg_fg := 'Y';
15112 --end bug 2955326
15113              l_update_yes_flag := 'Y';
15114           END IF;
15115        END IF;
15116 
15117          IF p_project_in.cint_stop_date  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
15118           AND p_project_in.cint_stop_date IS NOT NULL  THEN
15119           IF NVL(p_project_in.cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
15120            <> NVL(l_project_rec.cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
15121               THEN
15122 --bug 2955326
15123 /*
15124              l_statement  := l_statement ||
15125                        ' cint_stop_date =  '||''''||
15126              RTRIM(p_project_in.cint_stop_date)||''''||',';
15127 */
15128              l_statement  := l_statement ||
15129                        ' cint_stop_date = :cint_stp_dt ,';
15130              l_b_cint_stp_dt_fg := 'Y';
15131 --end bug 2955326
15132              l_update_yes_flag := 'Y';
15133           END IF;
15134        END IF;
15135 --End PA L changes
15136 
15137 ------------------- FP_M changes begin (venkat) 2 -----------------------------------------------
15138 
15139 /* ------ Begin Commented for now as the column sys_program_flag not exist in the pa_projects -----
15140 
15141     IF (p_project_in.sys_program_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15142        (p_project_in.sys_program_flag IS NOT NULL)
15143     THEN
15144         IF NVL(p_project_in.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15145            NVL(l_project_rec.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15146         THEN
15147             l_statement  := l_statement || ' sys_program_flag = :sys_program_flg ,';
15148             l_sys_program_flag := 'Y';
15149             l_update_yes_flag := 'Y';
15150         END IF;
15151     END IF;
15152 ---------------------------------End Comment----------------------------------------------------- */
15153 
15154 -- Bug # 5072032.
15155 
15156     IF (p_project_in.sys_program_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15157        (p_project_in.sys_program_flag IS NOT NULL)
15158     THEN
15159         IF NVL(p_project_in.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15160            NVL(l_project_rec.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15161         THEN
15162             l_statement  := l_statement || ' sys_program_flag = :sys_program_flag ,';
15163             l_b_sys_program_flag_fg := 'Y';
15164             l_update_yes_flag := 'Y';
15165         END IF;
15166     END IF;
15167 
15168     IF (p_project_in.allow_multi_program_rollup <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15169        (p_project_in.allow_multi_program_rollup IS NOT NULL)
15170     THEN
15171         IF NVL(p_project_in.allow_multi_program_rollup, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15172            NVL(l_project_rec.allow_multi_program_rollup, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15173         THEN
15174             l_statement  := l_statement || ' allow_multi_program_rollup = :allow_multi_program_rollup ,';
15175             l_b_allow_multi_prog_rollup_fg := 'Y';
15176             l_update_yes_flag := 'Y';
15177         END IF;
15178     END IF;
15179 
15180    IF l_debug_mode = 'Y' THEN
15181         pa_debug.write(l_module_name,'l_b_sys_program_flag_fg=' || l_b_sys_program_flag_fg,3);
15182         pa_debug.write(l_module_name,'l_b_allow_multi_prog_rollup_fg='||l_b_allow_multi_prog_rollup_fg,3);
15183     END IF;
15184 
15185     IF l_b_sys_program_flag_fg = 'Y' OR
15186        l_b_allow_multi_prog_rollup_fg = 'Y'
15187     THEN
15188 
15189         IF l_debug_mode = 'Y' THEN
15190               pa_debug.write(l_module_name,'Before Calling SETUP_PROJECT_AS_PROGRAM in Update_Project flow' ,3);
15191               pa_debug.write(l_module_name,'l_project_id='||l_project_id,3);
15192               pa_debug.write(l_module_name,'p_project_in.sys_program_flag='||p_project_in.sys_program_flag,3);
15193               pa_debug.write(l_module_name,'p_project_in.allow_multi_program_rollup='||p_project_in.allow_multi_program_rollup,3);
15194         END IF;
15195 
15196         PA_PROJECT_PUB.SETUP_PROJECT_AS_PROGRAM(
15197              p_api_version                      => p_api_version_number
15198            , p_init_msg_list            => p_init_msg_list
15199            , p_commit                       => p_commit
15200            , p_max_msg_count            => p_msg_count
15201            , p_project_id                       => l_project_id   -- Project Id is already derived/converted therfore no need to pass project reference to this API.
15202            , p_sys_program_flag         => p_project_in.sys_program_flag
15203            , p_allow_multi_program_rollup       => p_project_in.allow_multi_program_rollup
15204            , x_msg_count                => l_msg_count
15205            , x_msg_data                 => l_msg_data
15206            , x_return_status            => l_return_status
15207                            );
15208 
15209         IF l_debug_mode = 'Y' THEN
15210               pa_debug.write(l_module_name,'After Calling SETUP_PROJECT_AS_PROGRAM in Update_Project flow' ,3);
15211               pa_debug.write(l_module_name,'l_project_id='||l_project_id,3);
15212               pa_debug.write(l_module_name,'l_return_status='||l_return_status,3);
15213         END IF;
15214 
15215         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15216         THEN
15217             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15218         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15219         THEN
15220             p_multiple_task_msg := 'F';
15221             RAISE FND_API.G_EXC_ERROR;
15222         END IF;
15223 
15224     END IF;
15225 
15226 -- End of Bug # 5072032.
15227 
15228     IF (p_project_in.enable_top_task_customer_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15229        (p_project_in.enable_top_task_customer_flag IS NOT NULL)
15230     THEN
15231         IF NVL(p_project_in.enable_top_task_customer_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15232            NVL(l_project_rec.enable_top_task_customer_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15233         THEN
15234                --Bug 3279981 Review
15235                IF p_project_in.enable_top_task_customer_flag IN ('Y','N') THEN
15236                     -- Function Security Check
15237                     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
15238                     ( p_api_version_number => p_api_version_number,
15239                       p_responsibility_id  => l_resp_id,
15240                       p_function_name      => 'PA_PAXPREPR_CUST_TOP_TASK',
15241                       p_msg_count          => l_msg_count,
15242                       p_msg_data           => l_msg_data,
15243                       p_return_status      => l_return_status,
15244                       p_function_allowed   => l_function_allowed);
15245                     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15246                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15247                     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
15248                          RAISE FND_API.G_EXC_ERROR;
15249                     END IF;
15250 
15251                     IF l_function_allowed = 'N' THEN
15252                          pa_interface_utils_pub.map_new_amg_msg
15253                           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
15254                            ,p_msg_attribute    => 'CHANGE'
15255                            ,p_resize_flag      => 'Y'
15256                            ,p_msg_context      => 'GENERAL'
15257                            ,p_attribute1       => ''
15258                            ,p_attribute2       => ''
15259                            ,p_attribute3       => ''
15260                            ,p_attribute4       => ''
15261                            ,p_attribute5       => '');
15262                          p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15263                          RAISE FND_API.G_EXC_ERROR;
15264                     END IF;
15265                ELSE
15266                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15267                          pa_interface_utils_pub.map_new_amg_msg
15268                          ( p_old_message_code => 'PA_TOP_TASK_CUST_FLAG_INVALID'
15269                           ,p_msg_attribute    => 'NOCHANGE'--Changed to NOCHANGE for Bug- 4762153
15270                           ,p_resize_flag      => 'N'
15271                           ,p_msg_context      => 'PROJ'
15272                           ,p_attribute1       => l_project_rec.segment1
15273                           ,p_attribute2       => ''
15274                           ,p_attribute3       => ''
15275                           ,p_attribute4       => ''
15276                           ,p_attribute5       => '');
15277                     END IF;
15278                     RAISE  FND_API.G_EXC_ERROR;
15279                END IF;
15280 
15281                IF ( PA_BILLING_CORE.Update_Top_Task_Cust_Flag( l_project_id ) = 'Y' ) THEN
15282                     l_statement  := l_statement || ' enable_top_task_customer_flag = :enable_top_task_cust_flg ,';
15283                     l_enable_top_task_cust_flag := 'Y';
15284                     l_update_yes_flag := 'Y';
15285                ELSE--Added by rtarway for BUG 4168069
15286                --Add the error message in the pl/sql stack and raise exception
15287                       PA_UTILS.ADD_MESSAGE(
15288                       p_app_short_name => 'PA',
15289                       p_msg_name       =>'PA_NO_TOP_TASK_CUST_ALLOWED'
15290                       );
15291                     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15292                     RAISE FND_API.G_EXC_ERROR;
15293                END IF;
15294                --Bug 3279981 Review
15295         END IF;
15296     END IF;
15297 
15298     IF (p_project_in.enable_top_task_inv_mth_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15299        (p_project_in.enable_top_task_inv_mth_flag IS NOT NULL)
15300     THEN
15301         IF NVL(p_project_in.enable_top_task_inv_mth_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15302            NVL(l_project_rec.enable_top_task_inv_mth_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15303         THEN
15304                --Bug 3279981 Review
15305                IF p_project_in.enable_top_task_inv_mth_flag IN ('Y','N') THEN
15306                     -- Function Security Check
15307                     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
15308                     ( p_api_version_number => p_api_version_number,
15309                       p_responsibility_id  => l_resp_id,
15310                       p_function_name      => 'PA_PAXPREPR_INV_MTH_TOP_TASK',
15311                       p_msg_count          => l_msg_count,
15312                       p_msg_data           => l_msg_data,
15313                       p_return_status      => l_return_status,
15314                       p_function_allowed   => l_function_allowed);
15315                     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15316                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15317                     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
15318                          RAISE FND_API.G_EXC_ERROR;
15319                     END IF;
15320 
15321                     IF l_function_allowed = 'N' THEN
15322                          pa_interface_utils_pub.map_new_amg_msg
15323                           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
15324                            ,p_msg_attribute    => 'CHANGE'
15325                            ,p_resize_flag      => 'Y'
15326                            ,p_msg_context      => 'GENERAL'
15327                            ,p_attribute1       => ''
15328                            ,p_attribute2       => ''
15329                            ,p_attribute3       => ''
15330                            ,p_attribute4       => ''
15331                            ,p_attribute5       => '');
15332                          p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15333                          RAISE FND_API.G_EXC_ERROR;
15334                     END IF;
15335                ELSE
15336                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15337                          pa_interface_utils_pub.map_new_amg_msg
15338                          ( p_old_message_code => 'PA_TT_INV_MTH_FLAG_INVALID'
15339                           ,p_msg_attribute    => 'CHANGE'
15340                           ,p_resize_flag      => 'N'
15341                           ,p_msg_context      => 'PROJ'
15342                           ,p_attribute1       => l_project_rec.segment1
15343                           ,p_attribute2       => ''
15344                           ,p_attribute3       => ''
15345                           ,p_attribute4       => ''
15346                           ,p_attribute5       => '');
15347                     END IF;
15348                     RAISE  FND_API.G_EXC_ERROR;
15349                END IF;
15350 
15351                IF ( PA_BILLING_CORE.Update_Top_Task_Inv_Mthd_Flag( l_project_id ) = 'Y'
15352                AND  l_project_rec.invoice_method <> 'COST' ) THEN
15353                     l_statement  := l_statement || ' enable_top_task_inv_mth_flag = :enable_top_task_inv_mth_flg ,';
15354                     l_enable_top_task_inv_mth_flag := 'Y';
15355                     l_update_yes_flag := 'Y';
15356                ELSE --Added for Bug 4193730
15357                       PA_UTILS.ADD_MESSAGE(
15358                       p_app_short_name => 'PA',
15359                       p_msg_name       => 'PA_INV_MTH_TT_NOT_SET'
15360                       );
15361                     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15362                     RAISE FND_API.G_EXC_ERROR;
15363                END IF;
15364                --Bug 3279981 Review
15365         END IF;
15366     END IF;
15367 
15368     IF (p_project_in.projfunc_attr_for_ar_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15369        (p_project_in.projfunc_attr_for_ar_flag IS NOT NULL)
15370     THEN
15371         IF NVL(p_project_in.projfunc_attr_for_ar_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15372            NVL(l_project_rec.projfunc_attr_for_ar_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15373         THEN
15374             l_statement  := l_statement || ' projfunc_attr_for_ar_flag = :projfunc_attr_for_ar_flg ,';
15375             l_projfunc_attr_for_ar_flag := 'Y';
15376             l_update_yes_flag := 'Y';
15377         END IF;
15378     END IF;
15379 
15380 /* Added the following code for Bug 6248841 to update the cc_tax_task_id */
15381 
15382     IF (p_project_in.cc_tax_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15383        AND p_project_in.cc_tax_task_id IS NOT NULL)
15384     THEN
15385 
15386       BEGIN
15387         SELECT task_number INTO l_cc_tax_task_numb
15388           FROM pa_tasks
15389          WHERE project_id = l_project_id
15390            AND task_id = p_project_in.cc_tax_task_id;
15391 
15392              l_statement := l_statement || ' CC_TAX_TASK_ID = :prj_cc_tax_task_id,';
15393              l_b_cc_tax_task_id := 'Y';
15394              l_update_yes_flag := 'Y';
15395       EXCEPTION
15396          WHEN NO_DATA_FOUND THEN
15397               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15398                  THEN
15399                       pa_interface_utils_pub.map_new_amg_msg
15400                       ( p_old_message_code => 'PA_INVALID_TAX_TASK_ID'
15401                        ,p_msg_attribute    => 'CHANGE'
15402                        ,p_resize_flag      => 'Y'
15403                        ,p_msg_context      => 'PROJ'
15404                        ,p_attribute1       => l_project_rec.segment1
15405                        ,p_attribute2       => ''
15406                        ,p_attribute3       => ''
15407                        ,p_attribute4       => ''
15408                        ,p_attribute5       => '');
15409                END IF;
15410                RAISE  FND_API.G_EXC_ERROR;
15411       END;
15412 
15413     END IF;
15414 
15415 -------------------- FP_M changes end (venkat) ----------------------------------------------
15416 
15417 --Sunkalya federal changes bug#5511353
15418 
15419 
15420 IF (p_project_in.date_eff_funds_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15421    (p_project_in.date_eff_funds_flag IS NOT NULL)
15422 THEN
15423         IF NVL(p_project_in.date_eff_funds_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15424            NVL(l_project_rec.date_eff_funds_consumption, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15425         THEN
15426 
15427 			OPEN  cur_enable_funds_flag(l_project_id);
15428 			FETCH cur_enable_funds_flag INTO l_enable_funds_flag;
15429 			CLOSE cur_enable_funds_flag;
15430 
15431 			OPEN  cur_rev_inv(l_project_id);
15432 			FETCH cur_rev_inv INTO l_chk_rev_inv_flag;
15433 			CLOSE cur_rev_inv;
15434 
15435 			IF nvl(l_enable_funds_flag,'N')='N' AND p_project_in.date_eff_funds_flag ='Y' THEN
15436 
15437 				PA_UTILS.ADD_MESSAGE(
15438 							p_app_short_name => 'PA',
15439 							p_msg_name       => 'PA_FUNDS_FLAG_CANT_ENABLED'
15440 						    );
15441 				p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15442 				RAISE FND_API.G_EXC_ERROR;
15443 			END IF;
15444 
15445 			IF nvl(l_chk_rev_inv_flag,'N')= 'Y' THEN
15446 
15447 				PA_UTILS.ADD_MESSAGE(
15448 							p_app_short_name => 'PA',
15449 							p_msg_name       => 'PA_FUNDS_FLAG_NOT_UPDATBL'
15450 						    );
15451 				p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15452 				RAISE FND_API.G_EXC_ERROR;
15453 			END IF;
15454 
15455 			l_statement  := l_statement || ' date_eff_funds_consumption = :date_eff_funds_consumption ,';
15456 			l_date_eff_funds_flag := 'Y';
15457 			l_update_yes_flag := 'Y';
15458 	END IF;
15459 END IF;
15460 
15461 --Sunkalya federal changes bug#5511353
15462 
15463 /* 7508661 : EnC : Start */
15464 
15465 IF (p_project_in.ar_rec_notify_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15466    (p_project_in.ar_rec_notify_flag IS NOT NULL)
15467 THEN
15468     l_statement  := l_statement || ' ar_rec_notify_flag = :ar_rec_notify_flag ,';
15469     l_ar_rec_notify_flag := 'Y';
15470 End If;
15471 
15472 IF (p_project_in.auto_release_pwp_inv <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15473    (p_project_in.auto_release_pwp_inv IS NOT NULL)
15474 THEN
15475     l_statement  := l_statement || ' auto_release_pwp_inv = :auto_release_pwp_inv ,';
15476     l_auto_release_pwp_inv := 'Y';
15477 End If;
15478 
15479 /* 7508661 : EnC : End */
15480 
15481        IF l_update_yes_flag = 'Y'
15482        THEN
15483 /* Code commented and added for the bug#1752494, starts here */
15484 /*
15485                 l_statement :=  l_statement ||
15486                                 ' LAST_UPDATE_DATE = '||''''||
15487                                 SYSDATE||''''||',';
15488 */
15489                 l_statement := l_statement ||
15490                                ' LAST_UPDATE_DATE = SYSDATE'||',';
15491 
15492 /* Code commented and added for the bug#1752494, ends here */
15493               l_statement :=   l_statement ||
15494 --                             ' LAST_UPDATED_BY = '||G_USER_ID||','; --bug 2955326
15495                                ' LAST_UPDATED_BY = :g_usr_id ,';  --bug 2955326
15496 
15497               l_statement :=   l_statement ||
15498 --                               ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID; --2955326
15499                                ' LAST_UPDATE_LOGIN = :g_login_id'; --bug 2955326
15500 
15501             l_statement :=   l_statement ||
15502 --                      ' WHERE PROJECT_ID = '|| TO_CHAR(l_project_id);
15503                         ' WHERE PROJECT_ID = :prj_id'; --bug 2955326
15504 
15505             l_cursor := dbms_sql.open_cursor;
15506             dbms_sql.parse(l_cursor, l_statement, dbms_sql.native);
15507 
15508 --bug 2955326
15509                 IF l_b_segment1_flag = 'Y' THEN
15510                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':segment1', RTRIM(p_project_in.pa_project_number));
15511                 END IF;
15512 
15513                 IF l_b_proj_name_flag = 'Y' THEN
15514                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':project_name', RTRIM(p_project_in.project_name));
15515                 END IF;
15516 
15517                 IF l_b_long_name_flag = 'Y' THEN
15518                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':long_name', RTRIM(p_project_in.long_name));
15519                 END IF;
15520 
15521                 IF l_b_pm_proj_ref_flag = 'Y' THEN
15522                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':pm_project_reference', RTRIM(p_project_in.pm_project_reference));
15523                 END IF;
15524 
15525                 IF l_b_co_org_id_flag = 'Y' THEN
15526                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':carrying_out_org_id', TO_CHAR(p_project_in.carrying_out_organization_id));
15527                 END IF;
15528 
15529                 IF l_b_pub_sec_flag = 'Y' THEN
15530                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':public_sector_flag', p_project_in.public_sector_flag);
15531                 END IF;
15532 
15533                 IF l_b_dist_rule_flag = 'Y' THEN
15534                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':dist_rule', p_project_in.distribution_rule);
15535                 --Bug 3279981 Review. Added two bind variables below
15536                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rev_acc_mth',
15537                                          substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1)  );
15538                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_mth',
15539                                          substr(p_project_in.distribution_rule, instr(p_project_in.distribution_rule,'/')+1)  );
15540                 END IF;
15541 
15542                 IF l_b_desc_flag = 'Y' THEN
15543                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':descrp', RTRIM(p_project_in.description));
15544                 END IF;
15545 
15546                 IF l_b_start_date_flag = 'Y' THEN
15547                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':start_date', l_project_start_date);
15548                 END IF;
15549 
15550                 IF l_b_comp_date_flag = 'Y' THEN
15551                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':comp_date', l_project_completion_date);
15552                 END IF;
15553 
15554                 IF l_b_early_sd_flag = 'Y' THEN
15555                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':early_start_date', p_project_in.early_start_date);
15556                 END IF;
15557 
15558                 IF l_b_early_fd_flag = 'Y' THEN
15559                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':early_finish_date', p_project_in.early_finish_date);
15560                 END IF;
15561 
15562                 IF l_b_late_sd_flag = 'Y' THEN
15563                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_start_date', p_project_in.late_start_date);
15564                 END IF;
15565 
15566                 IF l_b_late_sd_flag = 'Y' THEN
15567                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_start_date', p_project_in.late_start_date);
15568                 END IF;
15569 
15570                 IF l_b_late_fd_flag = 'Y' THEN
15571                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_finish_date', p_project_in.late_finish_date);
15572                 END IF;
15573 
15574                 IF l_b_sch_sd_flag = 'Y' THEN
15575                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_start_date', p_project_in.scheduled_start_date);
15576                 END IF;
15577 
15578                 IF l_b_sch_fd_flag = 'Y' THEN
15579                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_finish_date', p_project_in.scheduled_finish_date);
15580                 END IF;
15581 
15582                 IF l_b_attr_cat_flag = 'Y' THEN
15583                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr_cat', RTRIM(p_project_in.attribute_category));
15584                 END IF;
15585 
15586                 IF l_b_attr1_flag = 'Y' THEN
15587                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr1', RTRIM(p_project_in.attribute1));
15588                 END IF;
15589 
15590                 IF l_b_attr2_flag = 'Y' THEN
15591                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr2', RTRIM(p_project_in.attribute2));
15592                 END IF;
15593 
15594                 IF l_b_attr3_flag = 'Y' THEN
15595                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr3', RTRIM(p_project_in.attribute3));
15596                 END IF;
15597 
15598                 IF l_b_attr4_flag = 'Y' THEN
15599                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr4', RTRIM(p_project_in.attribute4));
15600                 END IF;
15601 
15602                 IF l_b_attr5_flag = 'Y' THEN
15603                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr5', RTRIM(p_project_in.attribute5));
15604                 END IF;
15605 
15606                 IF l_b_attr6_flag = 'Y' THEN
15607                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr6', RTRIM(p_project_in.attribute6));
15608                 END IF;
15609 
15610                 IF l_b_attr7_flag = 'Y' THEN
15611                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr7', RTRIM(p_project_in.attribute7));
15612                 END IF;
15613 
15614                 IF l_b_attr8_flag = 'Y' THEN
15615                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr8', RTRIM(p_project_in.attribute8));
15616                 END IF;
15617 
15618                 IF l_b_attr9_flag = 'Y' THEN
15619                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr9', RTRIM(p_project_in.attribute9));
15620                 END IF;
15621 
15622                 IF l_b_attr10_flag = 'Y' THEN
15623                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr10', RTRIM(p_project_in.attribute10));
15624                 END IF;
15625 
15626                 IF l_b_output_tx_code_flag = 'Y' THEN
15627                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':output_tx_code', RTRIM(p_project_in.output_tax_code));
15628                 END IF;
15629 
15630                 IF l_b_ret_tx_code_flag = 'Y' THEN
15631                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':ret_tx_code', RTRIM(p_project_in.retention_tax_code));
15632                 END IF;
15633 
15634                 IF l_b_proj_cur_code_flag = 'Y' THEN
15635                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_cur_code', RTRIM(p_project_in.project_currency_code));
15636                 END IF;
15637 
15638                 IF l_b_allow_x_chg_flag = 'Y' THEN
15639                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':allow_x_chg_flag', RTRIM(p_project_in.allow_cross_charge_flag));
15640                 END IF;
15641 
15642                 IF l_b_proj_rt_date_flag = 'Y' THEN
15643                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_rt_date', p_project_in.project_rate_date);
15644                 END IF;
15645 
15646                 IF l_b_proj_rt_tp_flag = 'Y' THEN
15647                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_rt_tp', RTRIM(p_project_in.project_rate_type));
15648                 END IF;
15649 
15650                 IF l_cc_proc_lb_flag = 'Y' THEN
15651                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_lb_flag', RTRIM(l_cc_process_labor_flag)); -- Changed to local variable for Bug 5395048
15652                 END IF;
15653 
15654                 IF l_b_lb_tp_sch_id_flag = 'Y' THEN
15655                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_tp_sch_id', p_project_in.labor_tp_schedule_id );
15656                 END IF;
15657 
15658                 IF l_b_lb_tp_fixed_dt_flag = 'Y' THEN
15659                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_tp_fixed_dt', p_project_in.labor_tp_fixed_date);
15660                 END IF;
15661 
15662                 IF l_b_cc_proc_nl_flag = 'Y' THEN
15663                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_nl_flag', RTRIM(l_cc_process_nl_flag)); -- Changed to local variable for Bug 5395048
15664                 END IF;
15665 
15666                 IF l_b_nl_tp_sch_id_flag = 'Y' THEN
15667                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_sch_id', p_project_in.nl_tp_schedule_id);
15668                 END IF;
15669 
15670                 IF l_b_nl_tp_fx_dt_flag = 'Y' THEN
15671                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_fx_dt', p_project_in.nl_tp_fixed_date);
15672                 END IF;
15673 
15674                 IF l_b_role_list_id_flag = 'Y' THEN
15675                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':role_list_id', p_project_in.role_list_id);
15676                 END IF;
15677 
15678                 IF l_b_work_type_id_flag = 'Y' THEN
15679                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':work_type_id', p_project_in.work_type_id);
15680                 END IF;
15681 
15682                 IF l_b_cal_id_flag = 'Y' THEN
15683                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cal_id', p_project_in.calendar_id);
15684                 END IF;
15685 
15686                 IF l_b_loc_id_flag = 'Y' THEN
15687                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':loc_id', p_project_in.location_id);
15688                 END IF;
15689 
15690                 IF l_b_prob_memb_id_flag = 'Y' THEN
15691                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prob_memb_id', p_project_in.probability_member_id);
15692                 END IF;
15693 
15694                 IF l_b_proj_value_flag = 'Y' THEN
15695                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_value', p_project_in.project_value);
15696                 END IF;
15697 
15698                 IF l_b_exp_apprv_dt_flag = 'Y' THEN
15699                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':exp_apprv_date', p_project_in.expected_approval_date);
15700                 END IF;
15701 
15702                 IF l_b_cst_jb_gp_id_flag = 'Y' THEN
15703                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cst_jb_gp_id', p_project_in.cost_job_group_id);
15704                 END IF;
15705 
15706                 IF l_b_bill_jb_gp_id_flag = 'Y' THEN
15707                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':bill_jb_gp_id', p_project_in.bill_job_group_id);
15708                 END IF;
15709 
15710                 IF l_b_emp_bill_rt_sch_id_flag = 'Y' THEN
15711                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id', p_project_in.emp_bill_rate_schedule_id);
15712                 END IF;
15713 
15714                 IF l_b_jb_bill_rt_sch_id_flag = 'Y' THEN
15715                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id', p_project_in.job_bill_rate_schedule_id);
15716                 END IF;
15717 
15718                 IF l_b_comp_mtch_wt_flag = 'Y' THEN
15719                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':comp_match_wt', p_project_in.competence_match_wt);
15720                 END IF;
15721 
15722                 IF l_b_avail_mtch_wt_flag = 'Y' THEN
15723                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':avail_mtch_wt', p_project_in.availability_match_wt);
15724                 END IF;
15725 
15726                 IF l_b_jb_lvl_mt_wt_flag = 'Y' THEN
15727                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_lvl_mt_wt', p_project_in.job_level_match_wt);
15728                 END IF;
15729 
15730                 IF l_b_search_min_avail_flag = 'Y' THEN
15731                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_min_avail', p_project_in.search_min_availability);
15732                 END IF;
15733 
15734                 IF l_b_srch_org_hier_id_flag = 'Y' THEN
15735                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_org_hier_id', p_project_in.search_org_hier_id);
15736                 END IF;
15737 
15738                 IF l_b_srch_st_org_id_flag = 'Y' THEN
15739                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_org_hier_id', p_project_in.search_starting_org_id);
15740                 END IF;
15741 
15742                 IF l_b_min_can_sc_req_for_nom = 'Y' THEN
15743                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':min_can_sc_req_for_nom', p_project_in.min_cand_score_reqd_for_nom);
15744                 END IF;
15745 
15746 /* Commented the code for bug 4630836:
15747                 IF l_b_nn_lb_std_bl_rt_sch_id_f = 'Y' THEN
15748                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':n_lb_std_bill_rt_sch_id', p_project_in.non_lab_std_bill_rt_sch_id);
15749                 END IF; */
15750 
15751                 IF l_b_proj_bil_xch_rt_flag = 'Y' THEN
15752                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_xch_rt', p_project_in.project_bil_exchange_rate);
15753                 END IF;
15754 
15755                 IF l_b_pjfnc_bil_xch_rt_flag = 'Y' THEN
15756                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':pjfnc_bil_xch_rt', p_project_in.projfunc_bil_exchange_rate);
15757                 END IF;
15758 
15759                 IF l_b_fnding_xch_rt_flag = 'Y' THEN
15760                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_xch_rt', p_project_in.funding_exchange_rate);
15761                 END IF;
15762 
15763                 IF l_b_enable_auto_srch_flag = 'Y' THEN
15764                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_auto_srch', p_project_in.enable_automated_search);
15765                 END IF;
15766 
15767                 IF l_b_srch_cntry_code_flag = 'Y' THEN
15768                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_cntry_code', RTRIM(p_project_in.search_country_code));
15769                 END IF;
15770 
15771                 IF l_b_invproc_crncy_tp_flag = 'Y' THEN
15772                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':invproc_currency_type', RTRIM(p_project_in.invproc_currency_type));
15773                 END IF;
15774 
15775                 IF l_b_revproc_crncy_cd_flag = 'Y' THEN
15776                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':revproc_currency_code', RTRIM(p_project_in.revproc_currency_code));
15777                 END IF;
15778 
15779                 IF l_b_prj_bil_rt_dt_code_flag = 'Y' THEN
15780                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_rate_date_code', RTRIM(p_project_in.project_bil_rate_date_code));
15781                 END IF;
15782 
15783                 IF l_b_proj_bil_rt_tp_flag = 'Y' THEN
15784                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_rt_type', RTRIM(p_project_in.project_bil_rate_type));
15785                 END IF;
15786 
15787                 IF l_b_prjfnc_crncy_code_flag = 'Y' THEN
15788                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_currency_code', RTRIM(p_project_in.projfunc_currency_code));
15789                 END IF;
15790 
15791                 IF l_b_prjfnc_bil_rt_dt_cd_f = 'Y' THEN
15792                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rt_dt_code', RTRIM(p_project_in.projfunc_bil_rate_date_code));
15793                 END IF;
15794 
15795                 IF l_b_prjfnc_bil_rt_tp_flag = 'Y' THEN
15796                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rate_type', RTRIM(p_project_in.projfunc_bil_rate_type));
15797                 END IF;
15798 
15799                 IF l_b_fndng_rt_dt_cd_flag = 'Y' THEN
15800                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rate_date_code', RTRIM(p_project_in.funding_rate_date_code));
15801                 END IF;
15802 
15803                 IF l_b_fnding_rt_type_flag = 'Y' THEN
15804                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rate_type', RTRIM(p_project_in.funding_rate_type));
15805                 END IF;
15806 
15807                 IF l_b_bsln_fnding_flag = 'Y' THEN
15808                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':bsln_fnding_flag', RTRIM(p_project_in.baseline_funding_flag));
15809                 END IF;
15810 
15811                 IF l_b_prjfnc_cst_rt_tp_flag = 'Y' THEN
15812                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':projfnc_cost_rate_type', RTRIM(p_project_in.projfunc_cost_rate_type));
15813                 END IF;
15814 
15815                 IF l_b_inv_bill_txn_cur_flag = 'Y' THEN
15816                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_by_bil_txn_cur_flag', RTRIM(p_project_in.inv_by_bill_trans_curr_flag));
15817                 END IF;
15818 
15819                 IF l_b_multi_crncy_bil_flag = 'Y' THEN
15820                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':multi_crncy_bil_flag', RTRIM(p_project_in.multi_currency_billing_flag));
15821                 END IF;
15822 
15823                 IF l_b_prj_bil_rt_dt_flag = 'Y' THEN
15824                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_bil_rt_date', p_project_in.project_bil_rate_date);
15825                 END IF;
15826 
15827                 IF l_b_prjfnc_bil_rt_dt_flag = 'Y' THEN
15828                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rt_date', p_project_in.projfunc_bil_rate_date);
15829                 END IF;
15830 
15831                 IF l_b_fnding_rt_dt_flag = 'Y' THEN
15832                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rt_date', p_project_in.funding_rate_date);
15833                 END IF;
15834 
15835                 IF l_b_prjfnc_cst_rt_dt_flag = 'Y' THEN
15836                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_cst_rt_date', p_project_in.projfunc_cost_rate_date);
15837                 END IF;
15838 
15839                 IF l_b_asgn_prec_tsk_flag = 'Y' THEN
15840                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':asgn_prec_tsk_flg', RTRIM(p_project_in.assign_precedes_task));
15841                 END IF;
15842 
15843                 IF l_b_splt_cst_fm_wp_flag = 'Y' THEN
15844                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':splt_cst_fm_wp_flag', RTRIM(p_project_in.split_cost_from_workplan_flag));
15845                 END IF;
15846 
15847                 IF l_b_splt_cst_fm_bill_flag = 'Y' THEN
15848                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':splt_cst_fm_bill_flag', RTRIM(p_project_in.split_cost_from_bill_flag));
15849                 END IF;
15850 
15851                 IF l_b_adv_act_set_id_flag = 'Y' THEN
15852                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':adv_act_set_id', p_project_in.adv_action_set_id);
15853                 END IF;
15854 
15855                 IF l_b_st_adv_act_set_flag = 'Y' THEN
15856                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':st_adv_act_set_flag', RTRIM(p_project_in.start_adv_action_set_flag));
15857                 END IF;
15858 
15859                 IF l_b_pri_code_flag = 'Y' THEN
15860                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':pri_code', RTRIM(p_project_in.priority_code));
15861                 END IF;
15862 
15863                 IF l_b_retn_bil_inv_fmt_id_flg = 'Y' THEN
15864                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':retn_bil_inv_fmt_id', TO_CHAR(p_project_in.retn_billing_inv_format_id));
15865                 END IF;
15866 
15867                 IF l_b_retn_acnt_flag = 'Y' THEN
15868                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':retn_acnt_flag', RTRIM(p_project_in.retn_accounting_flag));
15869                 END IF;
15870 
15871                 IF l_b_reval_fndng_flag = 'Y' THEN
15872                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':reval_fndng_flg', RTRIM(p_project_in.revaluate_funding_flag));
15873                 END IF;
15874 
15875                 IF l_b_sec_lvl_flag = 'Y' THEN
15876                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':sec_lvl', RTRIM(p_project_in.security_level));
15877                 END IF;
15878 
15879                 IF l_b_lbr_disc_rsn_code_flg = 'Y' THEN
15880                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_disc_rsn_code', RTRIM(p_project_in.labor_disc_reason_code));
15881                 END IF;
15882 
15883                 IF l_b_nn_lbr_disc_rsn_cd_flg = 'Y' THEN
15884                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lbr_disc_rsn_cd', RTRIM(p_project_in.non_labor_disc_reason_code));
15885                 END IF;
15886 
15887                 IF l_b_inc_gn_los_flag = 'Y' THEN
15888                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inc_gn_los_flg', RTRIM(p_project_in.include_gains_losses_flag));
15889                 END IF;
15890 
15891 
15892                 IF l_b_lb_sch_tp_fg = 'Y' THEN
15893                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_type', RTRIM(p_project_in.labor_sch_type));
15894                 END IF;
15895 
15896                 IF l_b_nn_lb_sch_tp_fg = 'Y' THEN
15897                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_tp', RTRIM(p_project_in.non_labor_sch_type));
15898                 END IF;
15899 
15900                 IF l_b_emp_bill_rt_sch_id_fg2 = 'Y' THEN
15901                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id2', p_project_in.emp_bill_rate_schedule_id);
15902                 END IF;
15903 
15904                 IF l_b_jb_bill_rt_sch_id_fg2 = 'Y' THEN
15905                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id2', p_project_in.job_bill_rate_schedule_id);
15906                 END IF;
15907 
15908                 IF l_b_lb_sch_fx_dt_fg = 'Y' THEN
15909                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_fx_dt', p_project_in.labor_schedule_fixed_date);
15910                 END IF;
15911 
15912                 IF l_b_lb_sch_dsct_fg = 'Y' THEN
15913                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_dsct', p_project_in.labor_schedule_discount);
15914                 END IF;
15915 
15916                 IF l_b_lb_disc_rn_cd_fg2 = 'Y' THEN
15917                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_disc_rn_cd', RTRIM(p_project_in.labor_disc_reason_code));
15918                 END IF;
15919 
15920                 IF l_b_rv_ind_rt_sch_id_fg = 'Y' THEN
15921                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rv_ind_rt_sch_id', p_project_in.REV_IND_RATE_SCH_ID);
15922                 END IF;
15923 
15924                 IF l_b_inv_ind_rt_sch_id_fg = 'Y' THEN
15925                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_ind_rt_sch_id', p_project_in.INV_IND_RATE_SCH_ID);
15926                 END IF;
15927 
15928                 IF l_b_ind_sch_fx_dt_fg = 'Y' THEN
15929                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rev_ind_sch_fx_dt', p_project_in.rev_ind_sch_fixed_date);
15930                 END IF;
15931 
15932                 IF l_b_inv_ind_sch_fx_dt_fg = 'Y' THEN
15933                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_ind_sch_fx_dt', p_project_in.inv_ind_sch_fixed_date);
15934                 END IF;
15935 
15936                 IF l_b_nn_lb_bill_rt_org_id_fg = 'Y' THEN
15937                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_bill_rt_org_id', p_project_in.non_labor_bill_rate_org_id);
15938                 END IF;
15939 
15940                 IF l_b_n_lb_st_bl_rt_sc_id_fg2 = 'Y' THEN
15941                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lab_std_bill_rt_sch_id', p_project_in.non_lab_std_bill_rt_sch_id);
15942                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_std_bill_rt_sch', RTRIM(l_std_bill_rate_schedule));
15943                 END IF;
15944 
15945                 IF l_b_nn_lb_sch_fx_dt_fg = 'Y' THEN
15946                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_fx_dt', p_project_in.non_labor_schedule_fixed_date);
15947                 END IF;
15948 
15949                 IF l_b_nn_lb_sch_dst_fg = 'Y' THEN
15950                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_dst', p_project_in.non_labor_schedule_discount);
15951                 END IF;
15952 
15953                 IF l_b_n_lb_disc_rsn_cd_fg2  = 'Y' THEN
15954                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':n_lb_dis_rn_cd', RTRIM(p_project_in.non_labor_disc_reason_code));
15955                 END IF;
15956 
15957                 IF l_b_as_alloc_mth_fg = 'Y' THEN
15958                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':as_alloc_mth', RTRIM(p_project_in.asset_allocation_method));
15959                 END IF;
15960 
15961                 IF l_b_cp_evt_proc_fg = 'Y' THEN
15962                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cp_evt_proc', RTRIM(p_project_in.capital_event_processing));
15963                 END IF;
15964 
15965                 IF l_b_cint_rt_sch_id_fg = 'Y' THEN
15966                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_rt_sch', p_project_in.cint_rate_sch_id);
15967                 END IF;
15968 
15969                 IF l_b_cint_elg_fg = 'Y' THEN
15970                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_elg_fg', RTRIM(p_project_in.cint_eligible_flag));
15971                 END IF;
15972 
15973                 IF l_b_cint_stp_dt_fg = 'Y' THEN
15974                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_stp_dt', p_project_in.cint_stop_date);
15975                 END IF;
15976 
15977                 /* Added for bug 6248841 */
15978                 IF l_b_cc_tax_task_id  = 'Y' THEN
15979                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_cc_tax_task_id', p_project_in.cc_tax_task_id);
15980                 END IF;
15981 
15982                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_usr_id', G_USER_ID);
15983                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_login_id', G_LOGIN_ID);
15984                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_id', l_project_id);
15985 
15986 --end bug 2955326
15987 
15988 -- FP_M changes begin (venkat) 3
15989 
15990 -- COMMENT BEGIN --
15991 -------------- Begin Comment : Diable for now as the col sys_program_flag not in pa_projects -------
15992 --                IF l_sys_program_flag = 'Y' THEN
15993 --                  DBMS_SQL.BIND_VARIABLE(l_cursor, ':sys_program_flg', RTRIM(p_project_in.sys_program_flag));
15994 --                END IF;
15995 -------------- end Comment : Diable for now as the col sys_program_flag not in pa_projects ---------
15996 -- COMMENT END --
15997 
15998 	-- Bug # 5072032.
15999 
16000         IF l_b_sys_program_flag_fg = 'Y' THEN
16001         	DBMS_SQL.BIND_VARIABLE(l_cursor, ':sys_program_flag', RTRIM(p_project_in.sys_program_flag));
16002         END IF;
16003 
16004         IF l_b_allow_multi_prog_rollup_fg = 'Y' THEN
16005         	DBMS_SQL.BIND_VARIABLE(l_cursor, ':allow_multi_program_rollup', RTRIM(p_project_in.allow_multi_program_rollup));
16006         END IF;
16007 
16008 	-- End of Bug # 5072032.
16009 
16010 
16011         IF l_enable_top_task_cust_flag = 'Y' THEN
16012           DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_top_task_cust_flg', RTRIM(p_project_in.enable_top_task_customer_flag));
16013         END IF;
16014 
16015         IF l_enable_top_task_inv_mth_flag = 'Y' THEN
16016           DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_top_task_inv_mth_flg', RTRIM(p_project_in.enable_top_task_inv_mth_flag));
16017         END IF;
16018 
16019         IF l_projfunc_attr_for_ar_flag = 'Y' THEN
16020           DBMS_SQL.BIND_VARIABLE(l_cursor, ':projfunc_attr_for_ar_flg', RTRIM(p_project_in.projfunc_attr_for_ar_flag));
16021         END IF;
16022 
16023 -- FP_M changes end (venkat)
16024 
16025 --sunkalya federal bug#5511353
16026 	IF l_date_eff_funds_flag = 'Y' THEN
16027           DBMS_SQL.BIND_VARIABLE(l_cursor, ':date_eff_funds_consumption', RTRIM(p_project_in.date_eff_funds_flag));
16028         END IF;
16029 
16030 --sunkalya federal bug#5511353
16031 
16032     /* 7508661 : EnC : Start */
16033     IF l_ar_rec_notify_flag = 'Y' THEN
16034           DBMS_SQL.BIND_VARIABLE(l_cursor, ':ar_rec_notify_flag', RTRIM(p_project_in.ar_rec_notify_flag));
16035     END IF;
16036 
16037     IF l_auto_release_pwp_inv = 'Y' THEN
16038           DBMS_SQL.BIND_VARIABLE(l_cursor, ':auto_release_pwp_inv', RTRIM(p_project_in.auto_release_pwp_inv));
16039     END IF;
16040     /* 7508661 : EnC : End */
16041 
16042             l_rows   := dbms_sql.execute(l_cursor);
16043 
16044             IF dbms_sql.is_open (l_cursor)
16045             THEN
16046                  dbms_sql.close_cursor (l_cursor);
16047             END IF;
16048 
16049    IF l_debug_mode = 'Y' THEN
16050         pa_debug.g_err_stage := 'Done with updating project level data...';
16051         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16052     END IF;
16053 
16054                 -- anlee
16055                 -- Added for intermedia search
16056                 if l_ctx_update_flag = 'Y' then
16057                   PA_PROJECT_CTX_SEARCH_PVT.UPDATE_ROW (
16058                    p_project_id           => l_project_id
16059                   ,p_template_flag        => l_project_rec.template_flag
16060                   ,p_project_name         => l_ctx_proj_name
16061                   ,p_project_number       => l_ctx_proj_number
16062                   ,p_project_long_name    => l_ctx_long_name
16063                   ,p_project_description  => l_ctx_desc
16064                   ,x_return_status        => l_return_status );
16065 
16066    IF l_debug_mode = 'Y' THEN
16067         pa_debug.g_err_stage := 'After calling PA_PROJECT_CTX_SEARCH_PVT.UPDATE_ROW l_return_status='||l_return_status;
16068         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16069     END IF;
16070 
16071 
16072                   IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16073                   THEN
16074                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16075 
16076                   ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16077                   THEN
16078                     RAISE FND_API.G_EXC_ERROR;
16079                   END IF;
16080 
16081                 end if;
16082                 -- End of changes
16083        END IF;
16084 -- Modify opportunity value attributes with values entered in quick entry
16085 --Added By Aditi For Bug 4473105
16086 
16087    OPEN l_get_details_for_opp_csr(l_project_id);
16088    FETCH l_get_details_for_opp_csr INTO l_expected_approval_date, l_projfunc_currency_code, l_project_currency_code;
16089    CLOSE l_get_details_for_opp_csr;
16090 
16091    OPEN l_get_details_for_opp_csr2(l_project_id);
16092    FETCH l_get_details_for_opp_csr2 INTO l_opportunity_value, l_opp_value_currency_code;
16093    CLOSE l_get_details_for_opp_csr2;
16094 
16095 If (p_project_in.project_value IS NOT NULL) AND (p_project_in.project_value <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
16096 Then
16097 l_opportunity_value := p_project_in.project_value;
16098 End if;
16099 If (p_project_in.opp_value_currency_code) IS NOT NULL AND (p_project_in.opp_value_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
16100 Then
16101 l_opp_value_currency_code := p_project_in.opp_value_currency_code;
16102 End if;
16103 If (p_project_in.expected_approval_date IS NOT NULL) AND (p_project_in.expected_approval_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
16104 Then
16105 l_expected_approval_date := p_project_in.expected_approval_date;
16106 End if;
16107 
16108   PA_OPPORTUNITY_MGT_PVT.MODIFY_PROJECT_ATTRIBUTES
16109      ( p_project_id              => l_project_id
16110       ,p_opportunity_value       => l_opportunity_value
16111       ,p_opp_value_currency_code => l_opp_value_currency_code
16112       ,p_expected_approval_date  => l_expected_approval_date
16113       ,x_return_status           => l_return_status
16114       ,x_msg_count               => l_msg_count
16115       ,x_msg_data                => l_msg_data);
16116 
16117    IF l_debug_mode = 'Y' THEN
16118         pa_debug.g_err_stage := 'After calling PA_OPPORTUNITY_MGT_PVT.MODIFY_PROJECT_ATTRIBUTES l_return_status='||l_return_status;
16119         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16120     END IF;
16121 
16122 
16123      if l_return_status <> 'S' then
16124           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
16125                                 p_msg_name => 'PA_ERR_MOD_PROJ_OPP_ATTR');
16126            RAISE FND_API.G_EXC_ERROR;
16127      end if;
16128 -- End of code changes for bug  4473105
16129 
16130 
16131 --Bug 3279981 Review :
16132 --Perform the various updates for change of revenue accrual method, invoice method, top task invoice method flag
16133 --and also for populating distribution rule's invoice method as 'WORK' internally when top task invoice method flag
16134 --is enabled
16135 DECLARE
16136      --The foll. three variables will hold the valid values for revenue accrual method , invoice method
16137      --and invoice method at top task flag of the project. They will be refreshed with the new values in
16138      --case new values have been passed
16139      l_proj_rev_acc_method        VARCHAR2(30) := l_project_rec.revenue_accrual_method;
16140      l_proj_invoice_method        VARCHAR2(30) := l_project_rec.invoice_method;
16141      l_proj_top_task_inv_mth_flag VARCHAR2(1)  := l_project_rec.enable_top_task_inv_mth_flag;
16142      l_return_status              VARCHAR2(10);
16143      l_msg_count                  NUMBER := 0;
16144      l_msg_data                   VARCHAR2(2000);
16145 BEGIN
16146      IF  p_project_in.enable_top_task_inv_mth_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16147      AND p_project_in.enable_top_task_inv_mth_flag IS NOT NULL
16148      AND p_project_in.enable_top_task_inv_mth_flag <> l_project_rec.enable_top_task_inv_mth_flag THEN
16149           l_proj_top_task_inv_mth_flag := p_project_in.enable_top_task_inv_mth_flag;
16150      END IF;
16151 
16152      --The revenue accrual method for the project has changed. Therefore, call the api to default the new revenue accrual
16153      --method to the tasks
16154      IF  nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16155      AND upper( substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) )
16156       <> upper( l_project_rec.revenue_accrual_method ) THEN
16157 
16158           l_proj_rev_acc_method := upper( substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) );
16159           pa_top_task_cust_invoice_pvt.Set_Rev_Acc_At_Top_Task( P_API_VERSION            => 1.0
16160                                                               , P_INIT_MSG_LIST          => 'T'
16161                                                               , P_COMMIT                 => 'F'
16162                                                               , P_VALIDATE_ONLY          => 'F'
16163                                                               , P_VALIDATION_LEVEL       => 100
16164                                                               , P_DEBUG_MODE             => 'N'
16165                                                               , p_calling_module         => 'AMG'
16166                                                               , p_project_id             => l_project_id
16167                                                               , p_rev_acc                => l_proj_rev_acc_method
16168                                                               , x_return_status          => l_return_status
16169                                                               , x_msg_count              => l_msg_count
16170                                                               , x_msg_data               => l_msg_data );
16171      END IF;
16172 
16173      --The invoice method for the project has changed. Call the api to update the invoice method for the tasks only if
16174      --invoice method at top task is unchecked
16175      IF  nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16176      AND upper( substr(p_project_in.distribution_rule,instr(p_project_in.distribution_rule,'/')+1) )
16177       <> upper( l_project_rec.invoice_method ) THEN
16178 
16179           l_proj_invoice_method := upper( substr(p_project_in.distribution_rule,instr(p_project_in.distribution_rule,'/')+1) );
16180           IF 'N' = l_proj_top_task_inv_mth_flag THEN
16181                pa_top_task_cust_invoice_pvt.Set_Inv_Mth_At_Top_Task( P_API_VERSION            => 1.0
16182                                                                    , P_INIT_MSG_LIST          => 'T'
16183                                                                    , P_COMMIT                 => 'F'
16184                                                                    , P_VALIDATE_ONLY          => 'F'
16185                                                                    , P_VALIDATION_LEVEL       => 100
16186                                                                    , P_DEBUG_MODE             => 'N'
16187                                                                    , p_calling_module         => 'AMG'
16188                                                                    , p_project_id             => l_project_id
16189                                                                    , p_inv_mth                => l_proj_invoice_method
16190                                                                    , x_return_status          => l_return_status
16191                                                                    , x_msg_count              => l_msg_count
16192                                                                    , x_msg_data               => l_msg_data );
16193           END IF;
16194 
16195      END IF;
16196 
16197      --IF the invoice method at top task flag has changed from 'Y' to 'N' :
16198      --Update the distribution rule with the correct invoice method, if no distribution rule has been passed
16199      --Call the api to default the invoice method to the tasks
16200      IF 'Y' = l_enable_top_task_inv_mth_flag AND 'N' = p_project_in.enable_top_task_inv_mth_flag THEN
16201           IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
16202                UPDATE pa_projects_all
16203                SET    distribution_rule =
16204                substr(distribution_rule,1,instr(distribution_rule,'/')-1)||'/'||l_proj_invoice_method
16205                WHERE  project_id = l_project_id;
16206           END IF;
16207           pa_top_task_cust_invoice_pvt.Set_Inv_Mth_At_Top_Task( P_API_VERSION            => 1.0
16208                                                               , P_INIT_MSG_LIST          => 'T'
16209                                                               , P_COMMIT                 => 'F'
16210                                                               , P_VALIDATE_ONLY          => 'F'
16211                                                               , P_VALIDATION_LEVEL       => 100
16212                                                               , P_DEBUG_MODE             => 'N'
16213                                                               , p_calling_module         => 'AMG'
16214                                                               , p_project_id             => l_project_id
16215                                                               , p_inv_mth                => l_proj_invoice_method
16216                                                               , x_return_status          => l_return_status
16217                                                               , x_msg_count              => l_msg_count
16218                                                               , x_msg_data               => l_msg_data );
16219      --IF the invoice method at top task flag has changed from 'N' to 'Y' :
16220      --Call the api to set the top task funding level
16221      ELSIF 'Y' = l_enable_top_task_inv_mth_flag AND 'Y' = p_project_in.enable_top_task_inv_mth_flag THEN
16222           pa_top_task_cust_invoice_pvt.set_top_task_funding_level(  P_API_VERSION            => 1.0
16223                                                                   , P_INIT_MSG_LIST          => 'T'
16224                                                                   , P_COMMIT                 => 'F'
16225                                                                   , P_VALIDATE_ONLY          => 'F'
16226                                                                   , P_VALIDATION_LEVEL       => 100
16227                                                                   , P_DEBUG_MODE             => 'N'
16228                                                                   , p_calling_module         => 'AMG'
16229                                                                   , p_project_id             => l_project_id
16230                                                                   , x_return_status          => l_return_status
16231                                                                   , x_msg_count              => l_msg_count
16232                                                                   , x_msg_data               => l_msg_data );
16233 
16234      END IF;
16235 
16236      --IF the invoice method at top task flag is checked,
16237      --invoice method of the distribution rule must internally be populated as WORK
16238      IF 'Y' = l_proj_top_task_inv_mth_flag THEN
16239           UPDATE pa_projects_all
16240           SET    distribution_rule =
16241           substr(distribution_rule,1,instr(distribution_rule,'/')-1)||'/'||'WORK'
16242           WHERE  project_id = l_project_id;
16243      END IF;
16244 END;
16245 --Bug 3279981 Review
16246 
16247 --Project Structures
16248 --dbms_output.put_line ('After executing dynamic sql for updating project ');
16249 --Project Structures
16250 -- Bug 3548473 : 3627124 If the parameter p_pass_entire_structure = 'N' and
16251 -- structure_type = 'WORKPLAN' throw an error. For workplan structure, user
16252 -- needs to pass the all tasks in the structure in proper order.
16253 -- Same holds true for SHARED structure also.
16254 
16255 --dbms_output.put_line ('p_pass_entire_structure : ' || p_pass_entire_structure);
16256 --dbms_output.put_line ('l_structure_type : ' || l_structure_type);
16257 --dbms_output.put_line ('G_IS_WP_SEPARATE_FROM_FN : ' || G_IS_WP_SEPARATE_FROM_FN);
16258 
16259 -- Bug # 5077599.
16260 
16261 if (p_update_mode = 'PA_UPD_TASK_ATTR'
16262     and p_pass_entire_structure = 'N'
16263     and (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' )
16264           OR ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND  p_structure_in.structure_type = 'WORKPLAN' ))) then
16265 
16266 	i:= p_tasks_in.first;
16267 
16268 	while i is not null
16269 	loop
16270 
16271 	if (p_tasks_in(i).pa_task_id is null or p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) then
16272 
16273         	IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16274         	THEN
16275             		pa_interface_utils_pub.map_new_amg_msg
16276             		(p_old_message_code => 'PA_TASK_ID_IS_MISS'-- new message for bug 3548473: 3627124
16277             		,p_msg_attribute    => 'CHANGE'
16278             		,p_resize_flag      => 'N'
16279             		,p_msg_context      => 'PROJ'
16280             		,p_attribute1       => l_project_rec.segment1
16281             		,p_attribute2       => ''
16282             		,p_attribute3       => ''
16283             		,p_attribute4       => ''
16284             		,p_attribute5       => '');
16285         	END IF;
16286 
16287 		p_multiple_task_msg := 'F';
16288         	RAISE FND_API.G_EXC_ERROR;
16289     	end if;
16290 
16291 	i := p_tasks_in.next(i);
16292 	end loop;
16293 
16294 end if;
16295 
16296 -- End of Bug # 5077599.
16297 
16298 -- 3858251 Added code to check, whether tasks are passed or not
16299 
16300 i:= p_tasks_in.first;
16301 
16302 IF p_tasks_in.exists(i) THEN
16303     -- 3858251 if tasks are passed to update_project api , then and then only below
16304     -- validation should get called
16305     -- Bug # 5077599.
16306     /*
16307     IF  (p_pass_entire_structure = 'N' AND l_structure_type = 'WORKPLAN') OR  -- bhaskar
16308         (p_pass_entire_structure = 'N' AND G_IS_WP_SEPARATE_FROM_FN = 'N') THEN
16309     */
16310 
16311     IF  -- Bug # 5077599.
16312 	(p_pass_entire_structure = 'N' AND l_structure_type = 'WORKPLAN' and p_update_mode <> 'PA_UPD_TASK_ATTR') OR  -- bhaskar
16313         (p_pass_entire_structure = 'N' AND G_IS_WP_SEPARATE_FROM_FN = 'N' and p_update_mode <> 'PA_UPD_TASK_ATTR') THEN
16314 	-- Bug # 5077599.
16315         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16316         THEN
16317             pa_interface_utils_pub.map_new_amg_msg
16318             ( p_old_message_code => 'PA_TASK_STRUCT_NOT_ORDRD'-- new message for bug 3548473: 3627124
16319             ,p_msg_attribute    => 'CHANGE'
16320             ,p_resize_flag      => 'N'
16321             ,p_msg_context      => 'PROJ'
16322             ,p_attribute1       => l_project_rec.segment1
16323             ,p_attribute2       => ''
16324             ,p_attribute3       => ''
16325             ,p_attribute4       => ''
16326             ,p_attribute5       => '');
16327         END IF;
16328 
16329         p_multiple_task_msg := 'F';
16330         RAISE FND_API.G_EXC_ERROR;
16331     END IF; -- bug 3548473 : 3627124
16332 END IF;
16333 
16334 -- 3858251 end
16335 
16336 IF p_pass_entire_structure = 'N' THEN
16337   l_update_task_structure := 'Y';
16338 ELSE
16339   l_update_task_structure := 'N';
16340 END IF; -- bug 3548473 : 3627124
16341 
16342 --dbms_output.put_line ('l_update_task_structure : ' || l_update_task_structure);
16343 --dbms_output.put_line ('before calling  PA_PROJ_TASK_STRUC_PUB.create_structure ');
16344 --Creating a WORKPLAN structure
16345   IF p_structure_in.structure_type = 'WORKPLAN'      --This should only be done for a WORKPLAN structure
16346   THEN
16347      PA_PROJ_TASK_STRUC_PUB.create_structure(
16348            p_project_id             => l_project_id
16349           ,p_structure_type         =>l_structure_type --BUg 3548473 3627124 aditi
16350           ,p_structure_version_name => p_structure_in.structure_version_name
16351           ,p_description            => p_structure_in.description
16352           ,x_structure_id           => l_structure_id
16353           ,x_structure_version_id   => l_structure_version_id
16354           ,x_msg_count              => l_msg_count
16355           ,x_msg_data               => l_msg_data
16356           ,x_return_status          => l_return_status
16357         );
16358 
16359    IF l_debug_mode = 'Y' THEN
16360         pa_debug.g_err_stage := 'After calling PA_PROJ_TASK_STRUC_PUB.create_structure l_return_status='||l_return_status;
16361         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16362     END IF;
16363 
16364 
16365         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16366         THEN
16367            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16368 
16369         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16370         THEN
16371           RAISE FND_API.G_EXC_ERROR;
16372         END IF;
16373 
16374   END IF; -- p_structure_in.structure_type = 'WORKPLAN'
16375 
16376   IF ( ( ( p_structure_in.structure_version_name IS NOT NULL AND
16377            p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) OR
16378          ( p_structure_in.description IS NOT NULL AND
16379            p_structure_in.description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) AND
16380        ( p_structure_in.structure_version_id IS NOT NULL AND
16381          p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) ) OR
16382              --updating structure version
16383      ( ( p_structure_in.structure_version_name IS NOT NULL AND
16384          p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
16385        ( p_structure_in.structure_version_id IS NULL OR
16386          p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) )
16387              --creating structure version
16388   THEN
16389       IF l_structure_version_id IS NULL
16390          AND NVL( l_project_rec.template_flag,'N') = 'N'
16391          AND NVL( PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(l_project_id), 'N' ) = 'Y'
16392          AND p_pm_product_code <> 'WORKPLAN'          -- Bug 2871353
16393       THEN
16394           PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
16395              p_project_id             => l_project_id
16396             ,p_structure_type         => p_structure_in.structure_type     --no need to change this actual parameter for bug 2738747. The API takes care of financial stuff.
16397             ,p_structure_version_name => p_structure_in.structure_version_name
16398             ,p_structure_version_id   => p_structure_in.structure_version_id
16399             ,p_description            => p_structure_in.description
16400             ,x_structure_version_id   => l_structure_version_id
16401             ,x_msg_count              => l_msg_count
16402             ,x_msg_data               => l_msg_data
16403             ,x_return_status          => l_return_status
16404           );
16405 
16406    IF l_debug_mode = 'Y' THEN
16407         pa_debug.g_err_stage := 'After calling  PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver l_return_status='||l_return_status;
16408         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16409     END IF;
16410 
16411 
16412         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16413         THEN
16414            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16415 
16416         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16417         THEN
16418           RAISE FND_API.G_EXC_ERROR;
16419         END IF;
16420        END IF; --<<structure_version_id is null >>
16421 
16422    END IF;
16423    --Project Connect 4.0
16424    IF l_structure_version_id IS NOT NULL
16425    AND p_pm_product_code <> 'WORKPLAN'       -- Bug 2871353
16426    THEN
16427    g_struc_out_tbl(1).structure_type := p_structure_in.structure_type; --<Bug#2862350>
16428        --g_struc_out_tbl(1).structure_type := 'WORKPLAN';
16429        g_struc_out_tbl(1).structure_version_id := l_structure_version_id;
16430 
16431        -- Bug 3075609.
16432        l_create_task_versions_only := 'Y';
16433 
16434        --Call create_tasks_versions_only api to create new task versions for the
16435        --existing tasks and add them to the new structure version.
16436        PA_PROJ_TASK_STRUC_PUB.create_tasks_versions_only(
16437               p_calling_module       => 'AMG'
16438              --,p_structure_type       => p_structure_in.structure_type   --bug 2738747
16439              ,p_structure_type       => l_structure_type     --bug 2738747
16440              ,p_project_id           => l_project_id
16441              ,p_structure_version_id => l_structure_version_id
16442              ,p_pm_product_code      => l_pm_product_code
16443              ,p_tasks_in       => p_tasks_in
16444              ,x_msg_count            => l_msg_count
16445              ,x_msg_data             => l_msg_data
16446              ,x_return_status        => l_return_status );
16447 
16448   IF l_debug_mode = 'Y' THEN
16449         pa_debug.g_err_stage := 'After calling  PA_PROJ_TASK_STRUC_PUB.create_tasks_versions_only l_return_status='||l_return_status;
16450         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16451     END IF;
16452 
16453 
16454         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16455         THEN
16456            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16457 
16458         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16459         THEN
16460           RAISE FND_API.G_EXC_ERROR;
16461         END IF;
16462    END IF;
16463    --Project Connect 4.0
16464 
16465 
16466    -- For bug2931183 Adding to keep a track of structure version id to be updated
16467   IF l_debug_mode = 'Y' THEN
16468              pa_debug.g_err_stage := ' the value of l_structure_type' || l_structure_type;
16469              pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16470    END IF;
16471 
16472    IF l_structure_version_id IS NULL
16473    THEN
16474         IF (p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16475                   p_structure_in.structure_version_id IS NULL)  AND (l_structure_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_structure_type IS NOT NULL)
16476          THEN
16477               IF l_structure_type = 'FINANCIAL'
16478               THEN
16479                       OPEN cur_struc_ver_fin(l_project_id,'FINANCIAL');
16480                       FETCH cur_struc_ver_fin INTO l_update_structure_version_id;
16481                       IF cur_struc_ver_fin%NOTFOUND
16482                        THEN
16483                             OPEN cur_struc_ver_wp(l_project_id,'FINANCIAL');
16484                             FETCH cur_struc_ver_wp INTO l_update_structure_version_id;
16485                             CLOSE cur_struc_ver_wp;
16486                       END IF;
16487                       CLOSE cur_struc_ver_fin;
16488               END IF;
16489 
16490         ELSE
16491              l_update_structure_version_id := p_structure_in.structure_version_id;
16492         END IF;
16493    ELSE
16494         l_update_structure_version_id := l_structure_version_id;
16495    END IF;
16496 
16497   IF l_debug_mode = 'Y' THEN
16498              pa_debug.g_err_stage := ' the value of l_update_structure_version_id' || l_update_structure_version_id;
16499              pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16500   END IF;
16501 
16502 
16503 --Project Structures
16504 
16505 -- Since we maybe adding new tasks, need to pass the project record to
16506 -- the Add_task_round_one api. Project may have been updated in the previous lines.
16507 -- Hence need to fetch the updated record once again
16508 
16509     OPEN l_project_csr (l_project_id);
16510     FETCH l_project_csr INTO l_project_rec;
16511     CLOSE l_project_csr;
16512 
16513 
16514 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
16515 pa_project_check_pvt.G_index_counter                := 0;
16516 l_deferred_new_tasks_tbl.delete;
16517 l_deferred_tasks_count := 0;
16518 i := p_tasks_in.first;
16519    --project structure
16520 --IF  p_structure_in.structure_type = 'FINANCIAL'   --bug 2738747
16521 IF  l_structure_type = 'FINANCIAL'                  --bug 2738747
16522    --project structure
16523 THEN
16524 
16525 IF p_tasks_in.exists(i)
16526 THEN
16527    G_ParChildTsk_chks_deferred := 'Y';
16528  -- initialize the special global tables and counter set up
16529  -- to handle task number changes
16530 
16531      l_is_wp_seperate_from_fn := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Added for Bug#3451073
16532      WHILE i IS NOT NULL LOOP
16533 
16534         l_task_id := NULL;
16535 
16536         l_tasks_out(i).return_status    := FND_API.G_RET_STS_SUCCESS;
16537 
16538         IF (p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16539              OR  p_tasks_in(i).pa_task_id IS NULL )
16540         THEN
16541             IF  p_tasks_in(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16542                OR p_tasks_in(i).pm_task_reference IS NULL
16543             THEN
16544                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16545                  THEN
16546                     pa_interface_utils_pub.map_new_amg_msg
16547                       ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
16548                        ,p_msg_attribute    => 'CHANGE'
16549                        ,p_resize_flag      => 'N'
16550                        ,p_msg_context      => 'PROJ'
16551                        ,p_attribute1       => l_project_rec.segment1
16552                        ,p_attribute2       => ''
16553                        ,p_attribute3       => ''
16554                        ,p_attribute4       => ''
16555                        ,p_attribute5       => '');
16556                 END IF;
16557 
16558                 l_tasks_out(i).return_status :=  FND_API.G_RET_STS_ERROR ;
16559                 p_multiple_task_msg := 'F';
16560 --              RAISE FND_API.G_EXC_ERROR;
16561            ELSE
16562                OPEN l_get_task_csr
16563                     (l_project_id,p_tasks_in(i).pm_task_reference);
16564                FETCH l_get_task_csr INTO l_task_id;
16565                CLOSE l_get_task_csr;
16566             END IF;
16567 
16568         ELSE  --if task_id is given, check it's validity
16569                 --pambu1('Check Task ID validity');
16570                 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
16571                 -- pa_project_pvt.convert_pm_taskref_to_id_all
16572               pa_project_pvt.convert_pm_taskref_to_id_all
16573             (p_pa_project_id   => l_project_id
16574           ,p_structure_type => l_structure_type
16575           ,p_pa_task_id    => p_tasks_in(i).pa_task_id
16576           ,p_pm_task_reference  => NULL
16577           ,p_out_task_id    => l_task_id
16578           ,p_return_status  => l_return_status );
16579        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16580         THEN
16581           l_tasks_out(i).return_status    := l_return_status;
16582       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16583 
16584         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16585         THEN
16586           l_tasks_out(i).return_status    := l_return_status;
16587             p_multiple_task_msg := 'F';
16588 --          RAISE FND_API.G_EXC_ERROR;
16589         END IF;
16590         END IF;
16591 
16592    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
16593     (p_task_number=> p_tasks_in(i).task_name
16594     ,p_task_reference => p_tasks_in(i).pm_task_reference
16595     ,p_task_id => l_task_id);
16596         IF l_task_id IS NULL
16597         THEN
16598 
16599     -- Actions performed using the APIs would be subject to
16600     -- function security. If the responsibility does not allow
16601     -- such functions to be executed, the API should not proceed further
16602     -- since the user does not have access to such functions
16603 
16604     -- Function security procedure check whether user have the
16605     -- privilege to add task or not
16606 
16607         --Bug 2471668: we do not need to assign project id to the global variable as it is already done
16608         --above before checking for update_project function.
16609 
16610     --BUG 4413568 DHI ER , rtarway, if p_update_mode is PA_UPD_TASK_ATTR, WBS/FBS hierarchy can not be changed.
16611        --if l_task_id is null, means this is a new task, so we should be raising an error at this point itself
16612         IF ( p_update_mode = 'PA_UPD_TASK_ATTR') THEN
16613           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16614                                p_msg_name => 'PA_WBS_CANT_CHANGE');
16615           RAISE FND_API.G_EXC_ERROR;
16616         END IF;
16617 
16618         PA_PM_FUNCTION_SECURITY_PUB.check_function_security
16619         (p_api_version_number => p_api_version_number,
16620          p_responsibility_id  => l_resp_id,
16621          p_function_name      => 'PA_PM_ADD_TASK',
16622          p_msg_count          => l_msg_count,
16623          p_msg_data           => l_msg_data,
16624          p_return_status      => l_return_status,
16625          p_function_allowed   => l_function_allowed);
16626 
16627          IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16628          THEN
16629             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16630 
16631          ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16632          THEN
16633             p_multiple_task_msg := 'F';
16634 --          RAISE FND_API.G_EXC_ERROR;
16635          END IF;
16636 
16637          IF l_function_allowed = 'N' THEN
16638            pa_interface_utils_pub.map_new_amg_msg
16639            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
16640             ,p_msg_attribute    => 'CHANGE'
16641             ,p_resize_flag      => 'Y'
16642             ,p_msg_context      => 'GENERAL'
16643             ,p_attribute1       => ''
16644             ,p_attribute2       => ''
16645             ,p_attribute3       => ''
16646             ,p_attribute4       => ''
16647             ,p_attribute5       => '');
16648             p_return_status := FND_API.G_RET_STS_ERROR;
16649             p_multiple_task_msg := 'F';
16650 --          RAISE FND_API.G_EXC_ERROR;
16651          END IF;
16652 
16653          -- check whether the input task number is unique
16654           IF pa_task_utils.check_unique_task_number
16655               (l_project_id, p_tasks_in(i).pa_task_number,NULL) = 0 THEN
16656          -- this means that the task number will not be unique
16657          -- however,the existing task with that task number may get
16658          -- changed during the update process. Hence,we need to process this
16659          -- task only after all tasks have been processed
16660               l_deferred_tasks_count := l_deferred_tasks_count +1;
16661               l_deferred_new_tasks_tbl(l_deferred_tasks_count) := p_tasks_in(i);
16662               l_deferred_tasks_index_tbl(l_deferred_tasks_count).task_index
16663                        := i;
16664 --              l_deferred_tasks_index_tbl(l_deferred_tasks_count).task_index );
16665           ELSE
16666               --l_count := i;
16667               IF l_added_task_tbl.exists(1) THEN
16668                  l_count := l_added_task_tbl.COUNT + 1;
16669               ELSE
16670                  l_count := 1;
16671               END IF;
16672               l_added_task_tbl(l_count) := p_tasks_in(i);
16673               l_task_rec     := l_added_task_tbl(l_count);
16674 
16675         --    Check whether the Parent_Task_Reference is not null
16676         --    Following checking will allow you to create only sub_tasks
16677         --    under parent task.
16678   --     *O
16679   IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
16680         (p_tasks_in(i).pm_parent_task_reference IS NOT NULL
16681         AND p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
16682         THEN
16683                 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
16684                 -- pa_project_pvt.convert_pm_taskref_to_id_all
16685               PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
16686               ( p_pa_project_id => l_project_id
16687               , p_structure_type => l_structure_type
16688               , p_pa_task_id    => p_tasks_in(i).pa_parent_task_id
16689               , p_pm_task_reference  => p_tasks_in(i).pm_parent_task_reference
16690               , p_out_task_id      => l_task_id_out
16691               , p_return_status => l_return_status    );
16692                 l_ref_task_id :=  l_task_id_out; --aditi Added for Bug 3801314 : Bug 3627124
16693               IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
16694               THEN
16695 
16696                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
16697 
16698               ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR)
16699               THEN
16700                   p_multiple_task_msg := 'F';
16701 --               RAISE FND_API.G_EXC_ERROR;
16702               END IF;
16703 
16704               PA_TASK_UTILS.Check_Create_Subtask_Ok
16705               ( x_task_id => l_task_id_out
16706 --bug 3010538               , x_validation_mode    => 'R'     --bug 2947492
16707               , x_err_code   => l_err_code
16708               , x_err_stage  => l_err_stage
16709               , x_err_stack  => l_err_stack );
16710 
16711               IF l_err_code <> 0
16712               THEN
16713                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
16714                   IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16715                   THEN
16716                      pa_interface_utils_pub.map_new_amg_msg
16717                       ( p_old_message_code => 'PA_CHECK_ADD_SUBTASK_FAILED'
16718                        ,p_msg_attribute    => 'CHANGE'
16719                        ,p_resize_flag      => 'Y'
16720                        ,p_msg_context      => 'ADDT'
16721                        ,p_attribute1       => l_project_rec.segment1
16722                        ,p_attribute2       => l_amg_task_number
16723                        ,p_attribute3       => ''
16724                        ,p_attribute4       => ''
16725                        ,p_attribute5       => '');
16726                   ELSE
16727                      pa_interface_utils_pub.map_new_amg_msg
16728                       ( p_old_message_code => l_err_stage
16729                        ,p_msg_attribute    => 'SPLIT'
16730                        ,p_resize_flag      => 'Y'
16731                        ,p_msg_context      => 'ADDST'
16732                        ,p_attribute1       => l_project_rec.segment1
16733                        ,p_attribute2       => l_amg_task_number
16734                        ,p_attribute3       => ''
16735                        ,p_attribute4       => ''
16736                        ,p_attribute5       => '');
16737                   END IF;
16738                 END IF;
16739                   l_tasks_out(i).return_status    := FND_API.G_RET_STS_ERROR;
16740                   p_multiple_task_msg := 'F';
16741 --                RAISE FND_API.G_EXC_ERROR;
16742 
16743               END IF;
16744            END IF;
16745 
16746           /* Code addition for bug 2982057 starts */
16747        IF l_task_rec.long_task_name IS NULL OR l_task_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16748        then
16749          l_task_rec.long_task_name := l_task_rec.task_name;
16750            else
16751          l_task_rec.long_task_name :=l_task_rec.long_task_name;
16752            end if;
16753            /* Code addition for bug 2982057 ends */
16754               PA_PROJECT_PVT.add_task_round_one
16755                       (p_return_status            => l_return_status,
16756                        p_project_rec              => l_project_rec,
16757                        p_task_rec                 => l_task_rec,
16758                        p_project_type_class_code  => l_project_type_class_code,
16759                        p_service_type_code        => l_service_type_code,
16760                        p_task_id                  => l_task_id);
16761               IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
16762               THEN
16763 
16764                  l_tasks_out(i).return_status    := l_return_status;
16765                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
16766 
16767               ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16768               THEN
16769                     l_tasks_out(i).return_status    := l_return_status;
16770                     p_multiple_task_msg := 'F';
16771 --                  RAISE FND_API.G_EXC_ERROR;
16772 
16773               END IF;
16774               l_tasks_out(i).pa_task_id         := l_task_id;
16775 
16776         --used to pass task_id to add_task_round_two API
16777               l_task_id_tbl(l_count).pa_task_id := l_task_id;
16778           END IF;
16779 
16780         ELSE   -- (if l_task_id is not null, that means this is an
16781                       --  existing task. so need to update the task )
16782 -- ---------------------------------------------------------------------------
16783 
16784   --  * SPECIAL HANDLING FOR TASK NUMBER CHANGES. THIS IS TO TAKE CARE
16785   --  * OF TASK NUMBER INTERCHANGES . Eg: Task 2.1 being updated to
16786   --  * 2.3 and Task 2.3 being updated to 2.1
16787 
16788   -- 1. Get the existing task number  -
16789   -- 2. compare existing task number and the incoming task number
16790   --    required inputs task id and task number from the input array
16791   -- 3. If same, proceed with update_task
16792   --  else
16793   --    check whether the new number would be unique
16794   --  If yes, then proceed with the update
16795   --  else, get the task_id and pm_task reference of the
16796   --  original task - the one whose task number is = to the
16797   --  current task's new task number
16798   --  scan the input array to check whether this task's number
16799   --  is also being changed   - required input - task array
16800   --  If no, then raise error,since cannot change the number
16801   --  of the current task
16802   --  If yes, then store the index of the current task
16803   --  in a different array and increment a counter  - global array
16804   --  Let us call this array Task_Number_Updated_Array
16805   --  Update the task number of the current task as G_PA_MISS_CHAR || counter
16806   --  in the database
16807   --  process the next task in the array
16808 
16809 --------------------------------------------------------------------------------
16810         l_proceed_with_update_flag := 'Y';
16811         ----dbms_output.put_line('calling pa_project_pvt.handle_task_number_changes l_task_id'||l_task_id);
16812         ----dbms_output.put_line('value of p_tasks_in(i).pa_task_number'||p_tasks_in(i).pa_task_number);
16813 
16814         pa_project_pvt.handle_task_number_change
16815           (p_project_id                    => l_project_id,
16816            p_task_id                       => l_task_id,
16817            p_array_cell_number             => i,
16818            p_in_task_number                => p_tasks_in(i).pa_task_number,
16819            p_in_task_tbl                   => p_tasks_in,
16820            p_proceed_with_update_flag      => l_proceed_with_update_flag,
16821            p_return_status                 => l_return_status);
16822 
16823         IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
16824            RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
16825         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
16826            p_multiple_task_msg := 'F';
16827 --         RAISE FND_API.G_EXC_ERROR;
16828         END IF;
16829     ----dbms_output.put_line('value of l_proceed_with_update_flag'||l_proceed_with_update_flag);
16830         IF l_proceed_with_update_flag = 'Y' THEN
16831 
16832 --Project Structures
16833           /** COMMENTED FOR BUG 3841742 :3832333 : This code was assuming that the tasks will
16834           be passed in the correct heirarchy and that the reference task id of the new task being
16835           created was set to the task_id of the most recently created task. This was leading to
16836           the error while updating tasks if the new task had a different top task than the one just
16837           created */
16838              /**   v_first_index := p_tasks_in.first;
16839               v_last_index := p_tasks_in.last;
16840 
16841               IF i > v_first_index AND
16842                  l_tasks_out(i-1).pa_task_id IS NOT NULL AND
16843                  l_tasks_out(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16844               THEN
16845                  v_ref_task_id := l_tasks_out(i-1).pa_task_id;
16846               ELSIF i > v_first_index AND
16847                  p_tasks_in(i-1).pa_task_id IS NOT NULL AND
16848                  p_tasks_in(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16849               THEN
16850                  v_ref_task_id := p_tasks_in(i-1).pa_task_id;
16851               ELSE
16852                  v_ref_task_id := null;
16853               END IF;        END OF COMMENTED PART FOR BUG 3841742 :3832333**/
16854           /** ADDED FOR BUG 3841742 : 3832333 :This code will assign parent_task_id to v_ref_task_id
16855           , if parent is not null.Else v_ref_task_id wil be set to null for top tasks.**/
16856        IF ((p_tasks_in(i).pa_parent_task_id IS NOT NULL AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
16857           OR
16858               (p_tasks_in(i).pm_parent_task_reference IS NOT NULL AND p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
16859           AND  p_structure_in.structure_type = 'FINANCIAL'
16860 
16861              THEN
16862 
16863                 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
16864                 -- pa_project_pvt.convert_pm_taskref_to_id_all
16865               PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
16866               ( p_pa_project_id => l_project_id
16867               , p_structure_type => l_structure_type
16868               , p_pa_task_id    => p_tasks_in(i).pa_parent_task_id
16869               , p_pm_task_reference  => p_tasks_in(i).pm_parent_task_reference
16870               , p_out_task_id      => l_task_id_out
16871               , p_return_status => l_return_status    );
16872                v_ref_task_id :=  l_task_id_out; --aditi Added for Bug 3798429: Bug 3801314
16873               IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
16874               THEN
16875 
16876                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
16877 
16878               ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR)
16879               THEN
16880                   p_multiple_task_msg := 'F';
16881 --               RAISE FND_API.G_EXC_ERROR;
16882               END IF;
16883           ELSE
16884           v_ref_task_id := null;
16885           END IF;
16886       /*** CHANGES END FOR BUG 3841742 : 3832333 **/
16887 --      --dbms_output.put_line('value of v_ref_task_id passed : '||v_ref_task_id||' AND for task_id :'||p_tasks_in(i).pa_task_number);
16888   --    --dbms_output.put_line('task etc Effort :'||p_tasks_in(i).etc_effort);
16889     --  --dbms_output.put_line('% complete'||p_tasks_in(i).percent_complete);
16890 --Project Structures
16891           IF l_debug_mode = 'Y' THEN
16892                pa_debug.write(l_module_name,'Calling update Task',3);
16893                pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(i).etc_effort,3);
16894                pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(i).percent_complete,3);
16895           END IF;
16896       ----dbms_output.put_line('value of p_tasks_in(i).pa_task_number before calling update_task'||p_tasks_in(i).pa_task_number);
16897 
16898                   Update_Task (
16899                   p_api_version_number            => p_api_version_number,
16900                   p_commit        => FND_API.G_FALSE,
16901                   p_msg_count                     => p_msg_count,
16902                   p_msg_data                      => p_msg_data,
16903                   p_return_status      => l_return_status,
16904                   p_pm_product_code            => p_pm_product_code,
16905                   p_pa_project_id                 => l_project_id,
16906                   p_pa_task_id                    => l_task_id,
16907 --Project Structures
16908                   p_ref_task_id                   => v_ref_task_id,
16909 --Project Structures
16910                   p_pm_task_reference             => p_tasks_in(i).pm_task_reference,
16911                   p_task_number                   => p_tasks_in(i).pa_task_number,
16912                   p_task_name                     => p_tasks_in(i).task_name,
16913                   p_long_task_name                => p_tasks_in(i).long_task_name,
16914                   p_task_description              => p_tasks_in(i).task_description,
16915                   p_task_start_date               => p_tasks_in(i).task_start_date,
16916                   p_task_completion_date          => p_tasks_in(i).task_completion_date,
16917 -- Start Fix for Bug # 1289156
16918                   p_early_start_date              => p_tasks_in(i).early_start_date,
16919                   p_early_finish_date             => p_tasks_in(i).early_finish_date,
16920                   p_late_start_date               => p_tasks_in(i).late_start_date,
16921                   p_late_finish_date              => p_tasks_in(i).late_finish_date,
16922                   p_actual_start_date             => p_tasks_in(i).actual_start_date,
16923                   p_actual_finish_date            => p_tasks_in(i).actual_finish_date,
16924 -- End Fix for Bug # 1289156
16925                   p_pm_parent_task_reference      => p_tasks_in(i).pm_parent_task_reference,
16926                   p_pa_parent_task_id      => p_tasks_in(i).pa_parent_task_id,
16927                   p_address_id        => p_tasks_in(i).address_id,
16928                   p_carrying_out_organization_id  => p_tasks_in(i).carrying_out_organization_id,
16929                   p_service_type_code             => p_tasks_in(i).service_type_code,
16930                   p_task_manager_person_id        => p_tasks_in(i).task_manager_person_id,
16931                   p_billable_flag                 => p_tasks_in(i).billable_flag,
16932                   p_chargeable_flag               => p_tasks_in(i).chargeable_flag,
16933                   p_ready_to_bill_flag            => p_tasks_in(i).ready_to_bill_flag,
16934                   p_ready_to_distribute_flag      => p_tasks_in(i).ready_to_distribute_flag,
16935                   p_limit_to_txn_controls_flag    => p_tasks_in(i).limit_to_txn_controls_flag,
16936                   p_labor_bill_rate_org_id        => p_tasks_in(i).labor_bill_rate_org_id,
16937                   p_labor_std_bill_rate_schdl     => p_tasks_in(i).labor_std_bill_rate_schdl,
16938                   p_labor_schedule_fixed_date     => p_tasks_in(i).labor_schedule_fixed_date,
16939                   p_labor_schedule_discount       => p_tasks_in(i).labor_schedule_discount,
16940                   p_nl_bill_rate_org_id           => p_tasks_in(i).non_labor_bill_rate_org_id,
16941                   p_nl_std_bill_rate_schdl       =>  p_tasks_in(i).non_labor_std_bill_rate_schdl,
16942                   p_nl_schedule_fixed_date       =>  p_tasks_in(i).non_labor_schedule_fixed_date,
16943                   p_nl_schedule_discount         =>  p_tasks_in(i).non_labor_schedule_discount,
16944                   p_labor_cost_multiplier_name   =>  p_tasks_in(i).labor_cost_multiplier_name,
16945                   p_cost_ind_rate_sch_id          => p_tasks_in(i).cost_ind_rate_sch_id,
16946                   p_rev_ind_rate_sch_id           => p_tasks_in(i).rev_ind_rate_sch_id,
16947                   p_inv_ind_rate_sch_id           => p_tasks_in(i).inv_ind_rate_sch_id,
16948                   p_cost_ind_sch_fixed_date       => p_tasks_in(i).cost_ind_sch_fixed_date,
16949                   p_rev_ind_sch_fixed_date        => p_tasks_in(i).rev_ind_sch_fixed_date,
16950                   p_inv_ind_sch_fixed_date        => p_tasks_in(i).inv_ind_sch_fixed_date,
16951                   p_labor_sch_type                => p_tasks_in(i).labor_sch_type,
16952                   p_nl_sch_type                   => p_tasks_in(i).non_labor_sch_type,
16953                   p_tasks_dff                     => p_tasks_in(i).tasks_dff, --bug 6153503
16954                   p_attribute_category            => p_tasks_in(i).attribute_category,
16955                   p_attribute1                   => p_tasks_in(i).attribute1,
16956                   p_attribute2                   => p_tasks_in(i).attribute2,
16957                   p_attribute3                   => p_tasks_in(i).attribute3,
16958                   p_attribute4                   => p_tasks_in(i).attribute4,
16959                   p_attribute5                   => p_tasks_in(i).attribute5,
16960                   p_attribute6                   => p_tasks_in(i).attribute6,
16961                   p_attribute7                   => p_tasks_in(i).attribute7,
16962                   p_attribute8                   => p_tasks_in(i).attribute8,
16963                   p_attribute9                   => p_tasks_in(i).attribute9,
16964                   p_attribute10                  => p_tasks_in(i).attribute10,
16965                   --bug 6153503
16966                   p_attribute11                   => p_tasks_in(i).attribute11,
16967                   p_attribute12                   => p_tasks_in(i).attribute12,
16968                   p_attribute13                   => p_tasks_in(i).attribute13,
16969                   p_attribute14                   => p_tasks_in(i).attribute14,
16970                   p_attribute15                   => p_tasks_in(i).attribute15,
16971                   p_allow_cross_charge_flag      =>
16972 p_tasks_in(i).allow_cross_charge_flag,
16973                   p_project_rate_type  => p_tasks_in(i).project_rate_type,
16974                   p_project_rate_date  => p_tasks_in(i).project_rate_date,
16975                   p_cc_process_labor_flag  => p_tasks_in(i).cc_process_labor_flag,
16976                   p_labor_tp_schedule_id  => p_tasks_in(i).labor_tp_schedule_id,
16977                   p_labor_tp_fixed_date  => p_tasks_in(i).labor_tp_fixed_date,
16978                   p_cc_process_nl_flag  => p_tasks_in(i).cc_process_nl_flag,
16979                   p_nl_tp_schedule_id  => p_tasks_in(i).nl_tp_schedule_id,
16980                   p_nl_tp_fixed_date  => p_tasks_in(i).nl_tp_fixed_date,
16981                   p_receive_project_invoice_flag  =>
16982 p_tasks_in(i).receive_project_invoice_flag,
16983                   p_work_type_id  => p_tasks_in(i).work_type_id,
16984                   p_emp_bill_rate_schedule_id  => p_tasks_in(i).emp_bill_rate_schedule_id,
16985                   p_job_bill_rate_schedule_id  => p_tasks_in(i).job_bill_rate_schedule_id,
16986 --Sakthi MCB
16987                   p_non_lab_std_bill_rt_sch_id  => p_tasks_in(i).non_lab_std_bill_rt_sch_id,
16988                   p_taskfunc_cost_rate_type  => p_tasks_in(i).taskfunc_cost_rate_type,
16989                   p_taskfunc_cost_rate_date  => p_tasks_in(i).taskfunc_cost_rate_date,
16990 --Sakthi MCB
16991                   p_labor_disc_reason_code  => p_tasks_in(i).labor_disc_reason_code,
16992                   p_non_labor_disc_reason_code  => p_tasks_in(i).non_labor_disc_reason_code,
16993 --project structures
16994 --bug 2744729, 2740565
16995                   p_structure_type                     => l_structure_type,
16996                   p_structure_version_id               => p_structure_in.structure_version_id,
16997                   P_OBLIGATION_START_DATE              => p_tasks_in(i).OBLIGATION_START_DATE,
16998                   P_OBLIGATION_FINISH_DATE             => p_tasks_in(i).OBLIGATION_FINISH_DATE,
16999                   P_ESTIMATED_START_DATE               => p_tasks_in(i).ESTIMATED_START_DATE,
17000                   P_ESTIMATED_FINISH_DATE              => p_tasks_in(i).ESTIMATED_FINISH_DATE,
17001                   P_BASELINE_START_DATE                => p_tasks_in(i).BASELINE_START_DATE,
17002                   P_BASELINE_FINISH_DATE               => p_tasks_in(i).BASELINE_FINISH_DATE,
17003                   P_CLOSED_DATE                        => p_tasks_in(i).CLOSED_DATE,
17004                   P_WQ_UOM_CODE                        => p_tasks_in(i).WQ_UOM_CODE,
17005                   P_WQ_ITEM_CODE                       => p_tasks_in(i).WQ_ITEM_CODE,
17006                   P_STATUS_CODE                        => p_tasks_in(i).STATUS_CODE,
17007                   P_WF_STATUS_CODE                     => p_tasks_in(i).WF_STATUS_CODE,
17008                   P_PM_SOURCE_CODE                     => p_tasks_in(i).PM_SOURCE_CODE,
17009                   P_PRIORITY_CODE                      => p_tasks_in(i).PRIORITY_CODE,
17010                   P_MILESTONE_FLAG                     => p_tasks_in(i).MILESTONE_FLAG,
17011                   P_CRITICAL_FLAG                      => p_tasks_in(i).CRITICAL_FLAG,
17012                   P_INC_PROJ_PROGRESS_FLAG             => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG,
17013                   P_LINK_TASK_FLAG                     => p_tasks_in(i).LINK_TASK_FLAG,
17014                   P_CALENDAR_ID                        => p_tasks_in(i).CALENDAR_ID,
17015                   P_PLANNED_EFFORT                     => p_tasks_in(i).PLANNED_EFFORT,
17016                   P_DURATION                           => p_tasks_in(i).DURATION,
17017                   P_PLANNED_WORK_QUANTITY              => p_tasks_in(i).PLANNED_WORK_QUANTITY,
17018                   P_TASK_TYPE                          => p_tasks_in(i).TASK_TYPE,
17019 --bug 2856033
17020                   p_scheduled_start_date               => p_tasks_in(i).scheduled_start_date,
17021                   p_scheduled_finish_date               => p_tasks_in(i).scheduled_finish_date,
17022 --bug 2744729, 2740565
17023 --Project Structures
17024 --PA L Changes 2872708
17025                   p_retirement_cost_flag               => p_tasks_in(i).retirement_cost_flag,
17026                   p_cint_eligible_flag                 => p_tasks_in(i).cint_eligible_flag,
17027                   p_cint_stop_date                     => p_tasks_in(i).cint_stop_date,
17028 --End PA L changes 2872708
17029                   p_out_pa_task_id                => l_out_pa_task_id,
17030                   p_out_pm_task_reference         => l_out_pm_task_reference,
17031                   p_update_task_structure         => l_update_task_structure  -- for bug 2931183 to indicate bulk structure processing
17032           -- modified p_update_task_structure value for bug 3548473 : Bug 3627124
17033 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
17034                   ,p_ext_act_duration              => p_tasks_in(i).ext_act_duration
17035                   ,p_ext_remain_duration           => p_tasks_in(i).ext_remain_duration
17036                   ,p_ext_sch_duration              => p_tasks_in(i).ext_sch_duration
17037 -- (End venkat) new params for bug #3450684 -------------------------------------------------
17038 
17039 -- set the new params - bug #3654243 ----------------------------------------------
17040         ,p_base_percent_comp_deriv_code => p_tasks_in(i).base_percent_comp_deriv_code
17041         ,p_sch_tool_tsk_type_code       => p_tasks_in(i).sch_tool_tsk_type_code
17042         ,p_constraint_type_code         => p_tasks_in(i).constraint_type_code
17043         ,p_constraint_date              => p_tasks_in(i).constraint_date
17044         ,p_free_slack                   => p_tasks_in(i).free_slack
17045         ,p_total_slack                  => p_tasks_in(i).total_slack
17046         ,p_effort_driven_flag           => p_tasks_in(i).effort_driven_flag
17047         ,p_level_assignments_flag       => p_tasks_in(i).level_assignments_flag
17048         ,p_gen_etc_source_code          => p_tasks_in(i).gen_etc_source_code
17049 -- set the new params - bug #3654243 -------------------------------------------------
17050 
17051 
17052 -- For bug 3279981 Review
17053                   ,p_invoice_method            => p_tasks_in(i).invoice_method
17054                   ,p_customer_id                    => p_tasks_in(i).customer_id
17055           ,p_is_wp_seperate_from_fn        => l_is_wp_seperate_from_fn  -- Added for bug#3451073
17056           --Added by rtarway, for BUG 3919800
17057                  , p_etc_effort                    => p_tasks_in(i).etc_effort
17058                  , p_percent_complete              => p_tasks_in(i).percent_complete
17059                   --Added by rtarway, for BUG 3919800
17060                  ,p_calling_api      => 'UPDATE_PROJECT'  --Bug # 4199694
17061                   );
17062 
17063     IF l_debug_mode = 'Y' THEN
17064         pa_debug.g_err_stage := 'After update_task first call...l_return_status=||l_return_status';
17065         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17066     END IF;
17067 
17068 
17069               ----dbms_output.put_line('Value of return status of update_task'    ||l_return_status);
17070 
17071                   IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
17072                   THEN
17073 
17074                        l_tasks_out(i).return_status := l_return_status;
17075                        RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17076 
17077                   ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17078                   THEN
17079                         l_tasks_out(i).return_status := l_return_status;
17080                         p_multiple_task_msg := 'F';
17081 --                      RAISE FND_API.G_EXC_ERROR;
17082 
17083                   END IF;
17084 
17085                   l_tasks_out(i).pa_task_id       := l_task_id;
17086            l_tasks_out(i).pm_task_reference       := l_out_pm_task_reference;
17087             END IF;  -- If l_proceed_with_update_flag = 'Y'
17088         END IF;  -- If l_task_id IS NULL
17089 
17090         i := p_tasks_in.next(i);
17091 
17092      END LOOP;
17093 
17094 END IF;
17095  --   Scan the Task_Number_Updated_Array
17096  --   If there are any records in this array,
17097  --   get the index that is already stored and
17098  --   call update_task for that task
17099  --   For eg: If the 8th and 14th task records had been
17100  --   marked for this special Task number update
17101  --   then call Update_task API for these two task records
17102 
17103 --Project Structures
17104       v_first_index := p_tasks_in.first;
17105       v_last_index := p_tasks_in.last;
17106 --Project Structures
17107 
17108   IF pa_project_check_pvt.G_index_counter > 0 THEN
17109      IF pa_project_check_pvt.G_task_num_updated_index_tbl.EXISTS (1) THEN
17110         FOR i in 1..pa_project_check_pvt.G_task_num_updated_index_tbl.COUNT LOOP
17111         l_array_index :=
17112         pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_index;
17113 
17114 --Project Structures
17115         for j in v_first_index..v_last_index loop
17116             IF pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_id = p_tasks_in(j).pa_task_id AND
17117                j > v_first_index
17118             THEN
17119                 v_ref_task_id := p_tasks_in(j-1).pa_task_id;
17120             ELSE
17121                 v_ref_task_id := null;
17122             END IF;
17123         end loop;
17124 --Project Structures
17125 
17126 IF l_debug_mode = 'Y' THEN
17127      pa_debug.write(l_module_name,'Calling update Task',3);
17128      pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(l_array_index).etc_effort,3);
17129      pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(l_array_index).percent_complete,3);
17130 END IF;
17131         Update_Task (
17132          p_api_version_number            => p_api_version_number,
17133          p_commit        => FND_API.G_FALSE,
17134          p_msg_count                      => p_msg_count,
17135          p_msg_data                       => p_msg_data,
17136          p_return_status      => l_return_status,
17137          p_pm_product_code            => p_pm_product_code,
17138          p_pa_project_id                  => l_project_id,
17139          p_pa_task_id                     =>
17140            pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_id,
17141 --Project Structures
17142          p_ref_task_id                    => v_ref_task_id,
17143 --Project STRUCTUres
17144          p_pm_task_reference              =>
17145          p_tasks_in(l_array_index).pm_task_reference,
17146          p_task_number                   =>
17147            p_tasks_in(l_array_index).pa_task_number,
17148          p_task_name                     =>
17149            p_tasks_in(l_array_index).task_name,
17150          p_long_task_name                =>
17151            p_tasks_in(l_array_index).long_task_name,
17152          p_task_description              =>
17153            p_tasks_in(l_array_index).task_description,
17154          p_task_start_date               =>
17155            p_tasks_in(l_array_index).task_start_date,
17156          p_task_completion_date          =>
17157            p_tasks_in(l_array_index).task_completion_date,
17158 -- Start Fix for Bug # 1289156
17159          p_early_start_date              =>
17160            p_tasks_in(l_array_index).early_start_date,
17161          p_early_finish_date             =>
17162            p_tasks_in(l_array_index).early_finish_date,
17163          p_late_start_date               =>
17164            p_tasks_in(l_array_index).late_start_date,
17165          p_late_finish_date              =>
17166            p_tasks_in(l_array_index).late_finish_date,
17167          p_actual_start_date             =>
17168            p_tasks_in(l_array_index).actual_start_date,
17169          p_actual_finish_date            =>
17170            p_tasks_in(l_array_index).actual_finish_date,
17171 -- End Fix for Bug # 1289156
17172          p_pm_parent_task_reference      =>
17173            p_tasks_in(l_array_index).pm_parent_task_reference,
17174          p_pa_parent_task_id      =>
17175            p_tasks_in(l_array_index).pa_parent_task_id,
17176          p_address_id        =>
17177            p_tasks_in(l_array_index).address_id,
17178          p_carrying_out_organization_id  =>
17179            p_tasks_in(l_array_index).carrying_out_organization_id,
17180          p_service_type_code             =>
17181            p_tasks_in(l_array_index).service_type_code,
17182          p_task_manager_person_id        =>
17183            p_tasks_in(l_array_index).task_manager_person_id,
17184          p_billable_flag                 =>
17185            p_tasks_in(l_array_index).billable_flag,
17186          p_chargeable_flag               =>
17187            p_tasks_in(l_array_index).chargeable_flag,
17188          p_ready_to_bill_flag            =>
17189            p_tasks_in(l_array_index).ready_to_bill_flag,
17190          p_ready_to_distribute_flag      =>
17191            p_tasks_in(l_array_index).ready_to_distribute_flag,
17192          p_limit_to_txn_controls_flag    =>
17193            p_tasks_in(l_array_index).limit_to_txn_controls_flag,
17194          p_labor_bill_rate_org_id        =>
17195            p_tasks_in(l_array_index).labor_bill_rate_org_id,
17196          p_labor_std_bill_rate_schdl     =>
17197            p_tasks_in(l_array_index).labor_std_bill_rate_schdl,
17198          p_labor_schedule_fixed_date     =>
17199            p_tasks_in(l_array_index).labor_schedule_fixed_date,
17200          p_labor_schedule_discount       =>
17201            p_tasks_in(l_array_index).labor_schedule_discount,
17202          p_nl_bill_rate_org_id           =>
17203            p_tasks_in(l_array_index).non_labor_bill_rate_org_id,
17204          p_nl_std_bill_rate_schdl       =>
17205            p_tasks_in(l_array_index).non_labor_std_bill_rate_schdl,
17206          p_nl_schedule_fixed_date       =>
17207            p_tasks_in(l_array_index).non_labor_schedule_fixed_date,
17208          p_nl_schedule_discount         =>
17209            p_tasks_in(l_array_index).non_labor_schedule_discount,
17210          p_labor_cost_multiplier_name   =>
17211            p_tasks_in(l_array_index).labor_cost_multiplier_name,
17212          p_cost_ind_rate_sch_id          =>
17213            p_tasks_in(l_array_index).cost_ind_rate_sch_id,
17214          p_rev_ind_rate_sch_id           =>
17215            p_tasks_in(l_array_index).rev_ind_rate_sch_id,
17216          p_inv_ind_rate_sch_id           =>
17217            p_tasks_in(l_array_index).inv_ind_rate_sch_id,
17218          p_cost_ind_sch_fixed_date       =>
17219            p_tasks_in(l_array_index).cost_ind_sch_fixed_date,
17220          p_rev_ind_sch_fixed_date        =>
17221            p_tasks_in(l_array_index).rev_ind_sch_fixed_date,
17222          p_inv_ind_sch_fixed_date        =>
17223            p_tasks_in(l_array_index).inv_ind_sch_fixed_date,
17224          p_labor_sch_type                =>
17225            p_tasks_in(l_array_index).labor_sch_type,
17226          p_nl_sch_type                   =>
17227            p_tasks_in(l_array_index).non_labor_sch_type,
17228          p_tasks_dff                     => p_tasks_in(l_array_index).tasks_dff, --bug 6153503
17229          p_attribute_category            =>
17230            p_tasks_in(l_array_index).attribute_category,
17231          p_attribute1                   => p_tasks_in(l_array_index).attribute1,
17232          p_attribute2                   => p_tasks_in(l_array_index).attribute2,
17233          p_attribute3                   => p_tasks_in(l_array_index).attribute3,
17234          p_attribute4                   => p_tasks_in(l_array_index).attribute4,
17235          p_attribute5                   => p_tasks_in(l_array_index).attribute5,
17236          p_attribute6                   => p_tasks_in(l_array_index).attribute6,
17237          p_attribute7                   => p_tasks_in(l_array_index).attribute7,
17238          p_attribute8                   => p_tasks_in(l_array_index).attribute8,
17239          p_attribute9                   => p_tasks_in(l_array_index).attribute9,
17240          p_attribute10                  => p_tasks_in(l_array_index).attribute10,
17241          --bug 6153503
17242          p_attribute11                   => p_tasks_in(l_array_index).attribute11,
17243          p_attribute12                   => p_tasks_in(l_array_index).attribute12,
17244          p_attribute13                   => p_tasks_in(l_array_index).attribute13,
17245          p_attribute14                   => p_tasks_in(l_array_index).attribute14,
17246          p_attribute15                   => p_tasks_in(l_array_index).attribute15,
17247          --Chnaged the index from i to l_array_index for BUG 4016583, rtarway
17248          p_allow_cross_charge_flag      => p_tasks_in(l_array_index).allow_cross_charge_flag,
17249          p_project_rate_type            => p_tasks_in(l_array_index).project_rate_type,
17250          p_project_rate_date            => p_tasks_in(l_array_index).project_rate_date,
17251          p_cc_process_labor_flag        => p_tasks_in(l_array_index).cc_process_labor_flag,
17252          p_labor_tp_schedule_id         => p_tasks_in(l_array_index).labor_tp_schedule_id,
17253          p_labor_tp_fixed_date          => p_tasks_in(l_array_index).labor_tp_fixed_date,
17254          p_cc_process_nl_flag           => p_tasks_in(l_array_index).cc_process_labor_flag,
17255          p_nl_tp_schedule_id            => p_tasks_in(l_array_index).nl_tp_schedule_id,
17256          p_nl_tp_fixed_date             => p_tasks_in(l_array_index).nl_tp_fixed_date,
17257          p_receive_project_invoice_flag => p_tasks_in(l_array_index).receive_project_invoice_flag,
17258          p_work_type_id                 => p_tasks_in(l_array_index).work_type_id,
17259          p_emp_bill_rate_schedule_id    => p_tasks_in(l_array_index).emp_bill_rate_schedule_id,
17260 /* Bug#2802918 - Changed the passing parameter from emp_bill_rate_schedule_id to
17261 job_bill_rate_schedule_id below */
17262          p_job_bill_rate_schedule_id    => p_tasks_in(l_array_index).job_bill_rate_schedule_id,
17263 --Sakthi MCB
17264          p_non_lab_std_bill_rt_sch_id   => p_tasks_in(l_array_index).non_lab_std_bill_rt_sch_id,
17265          p_taskfunc_cost_rate_type      => p_tasks_in(l_array_index).taskfunc_cost_rate_type,
17266          p_taskfunc_cost_rate_date      => p_tasks_in(l_array_index).taskfunc_cost_rate_date,
17267         --End Changes for BUG 4016583, rtarway
17268 --Sakthi MCB
17269          p_labor_disc_reason_code       => p_tasks_in(l_array_index).labor_disc_reason_code,
17270          p_non_labor_disc_reason_code   => p_tasks_in(l_array_index).non_labor_disc_reason_code,
17271 --project structures
17272 --bug 2744729, 2740565
17273                   p_structure_type                     => l_structure_type,
17274                   p_structure_version_id               => p_structure_in.structure_version_id,
17275                   P_OBLIGATION_START_DATE              => p_tasks_in(l_array_index).OBLIGATION_START_DATE,
17276                   P_OBLIGATION_FINISH_DATE             => p_tasks_in(l_array_index).OBLIGATION_FINISH_DATE,
17277                   P_ESTIMATED_START_DATE               => p_tasks_in(l_array_index).ESTIMATED_START_DATE,
17278 
17279                   P_ESTIMATED_FINISH_DATE              => p_tasks_in(l_array_index).ESTIMATED_FINISH_DATE,
17280                   P_BASELINE_START_DATE                => p_tasks_in(l_array_index).BASELINE_START_DATE,
17281                   P_BASELINE_FINISH_DATE               => p_tasks_in(l_array_index).BASELINE_FINISH_DATE,
17282                   P_CLOSED_DATE                        => p_tasks_in(l_array_index).CLOSED_DATE,
17283                   P_WQ_UOM_CODE                        => p_tasks_in(l_array_index).WQ_UOM_CODE,
17284                   P_WQ_ITEM_CODE                       => p_tasks_in(l_array_index).WQ_ITEM_CODE,
17285                   P_STATUS_CODE                        => p_tasks_in(l_array_index).STATUS_CODE,
17286                   P_WF_STATUS_CODE                     => p_tasks_in(l_array_index).WF_STATUS_CODE,
17287                   P_PM_SOURCE_CODE                     => p_tasks_in(l_array_index).PM_SOURCE_CODE,
17288                   P_PRIORITY_CODE                      => p_tasks_in(l_array_index).PRIORITY_CODE,
17289                   P_MILESTONE_FLAG                     => p_tasks_in(l_array_index).MILESTONE_FLAG,
17290                   P_CRITICAL_FLAG                      => p_tasks_in(l_array_index).CRITICAL_FLAG,
17291                   P_INC_PROJ_PROGRESS_FLAG             => p_tasks_in(l_array_index).INC_PROJ_PROGRESS_FLAG,
17292                   P_LINK_TASK_FLAG                     => p_tasks_in(l_array_index).LINK_TASK_FLAG,
17293                   P_CALENDAR_ID                        => p_tasks_in(l_array_index).CALENDAR_ID,
17294                   P_PLANNED_EFFORT                     => p_tasks_in(l_array_index).PLANNED_EFFORT,
17295                   P_DURATION                           => p_tasks_in(l_array_index).DURATION,
17296                   P_PLANNED_WORK_QUANTITY              => p_tasks_in(l_array_index).PLANNED_WORK_QUANTITY,
17297                   P_TASK_TYPE                          => p_tasks_in(l_array_index).TASK_TYPE,
17298 --bug 2856033
17299                   p_scheduled_start_date               => p_tasks_in(l_array_index).scheduled_start_date,
17300                   p_scheduled_finish_date               => p_tasks_in(l_array_index).scheduled_finish_date,
17301 --bug 2744729, 2740565
17302 --project structures
17303 --Bug 3018061
17304 --PA L Changes 2872708
17305                   p_retirement_cost_flag               => p_tasks_in(l_array_index).retirement_cost_flag,
17306                   p_cint_eligible_flag                 => p_tasks_in(l_array_index).cint_eligible_flag,
17307                   p_cint_stop_date                     => p_tasks_in(l_array_index).cint_stop_date,
17308 --End PA L changes 2872708
17309 --end Bug 3018061
17310 
17311 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
17312                   p_ext_act_duration     => p_tasks_in(l_array_index).ext_act_duration,
17313                   p_ext_remain_duration  => p_tasks_in(l_array_index).ext_remain_duration,
17314                   p_ext_sch_duration     => p_tasks_in(l_array_index).ext_sch_duration,
17315 -- (End venkat) new params for bug #3450684 -------------------------------------------------
17316 
17317 -- set the new params - bug #3654243 ----------------------------------------------
17318          p_base_percent_comp_deriv_code => p_tasks_in(l_array_index).base_percent_comp_deriv_code
17319         ,p_sch_tool_tsk_type_code       => p_tasks_in(l_array_index).sch_tool_tsk_type_code
17320         ,p_constraint_type_code         => p_tasks_in(l_array_index).constraint_type_code
17321         ,p_constraint_date              => p_tasks_in(l_array_index).constraint_date
17322         ,p_free_slack                   => p_tasks_in(l_array_index).free_slack
17323         ,p_total_slack                  => p_tasks_in(l_array_index).total_slack
17324         ,p_effort_driven_flag           => p_tasks_in(l_array_index).effort_driven_flag
17325         ,p_level_assignments_flag       => p_tasks_in(l_array_index).level_assignments_flag
17326         ,p_gen_etc_source_code          => p_tasks_in(l_array_index).gen_etc_source_code
17327         ,p_invoice_method       => p_tasks_in(l_array_index).invoice_method
17328                 ,p_customer_id                  => p_tasks_in(l_array_index).customer_id,
17329 -- set the new params - bug #3654243 -------------------------------------------------
17330 
17331 
17332                   p_out_pa_task_id                => l_out_pa_task_id,
17333                   p_out_pm_task_reference         => l_out_pm_task_reference,
17334                   p_update_task_structure         => l_update_task_structure,   -- for bug 2931183 to indicate bulk structure processing
17335                   --Added by rtarway, for BUG 3919800
17336                   p_etc_effort                    => p_tasks_in(l_array_index).etc_effort,
17337                   p_percent_complete              => p_tasks_in(l_array_index).percent_complete
17338                   --Added by rtarway, for BUG 3919800
17339                   ,p_calling_api      => 'UPDATE_PROJECT'  --Bug # 4199694
17340                   ); -- modified p_update_task_structure value for bug 3548473 : Bug 3627124
17341 
17342     IF l_debug_mode = 'Y' THEN
17343         pa_debug.g_err_stage := 'After update_task second call...l_return_status=||l_return_status';
17344         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17345     END IF;
17346 
17347 
17348          IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
17349             l_tasks_out(l_array_index).return_status := l_return_status;
17350             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17351          ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17352             l_tasks_out(l_array_index).return_status := l_return_status;
17353             p_multiple_task_msg := 'F';
17354 --          RAISE FND_API.G_EXC_ERROR;
17355          END IF;
17356          l_tasks_out(l_array_index).pa_task_id       := l_out_pa_task_id;
17357      l_tasks_out(l_array_index).pm_task_reference  := l_out_pm_task_reference;
17358        END LOOP;
17359      END IF; -- IF pa_project_check_pvt.G_task_num_updated_index_tbl.EXISTS (1)
17360    END IF;  -- IF pa_project_check_pvt.G_index_counter > 0
17361 
17362 /** Code change begin by aditi for Bug  4120380 **/
17363 /** The code below will update the task_numbers of the tasks passed via update_project script
17364 back to their original value viz. it'll crop the '-' added to aviod the constraint check in
17365 PA_TASKS and PA_PROJ_ELEMENTS. **/
17366 
17367 /* bug #5243018: Reverting the fix in bug 4120380.
17368 i := 1;
17369 IF p_tasks_in.exists(i)
17370 THEN
17371 WHILE i IS NOT NULL LOOP
17372 UPDATE pa_tasks
17373 SET task_number = p_tasks_in(i).pa_task_number
17374 WHERE task_number = '-'||p_tasks_in(i).pa_task_number
17375 AND project_id = l_project_id; -- BUG 4174041, rtarway
17376 ----dbms_output.put_line('value of sql%rowcount'||sql%rowcount);
17377 UPDATE pa_proj_elements
17378 SET element_number = p_tasks_in(i).pa_task_number
17379 WHERE element_number = '-'||p_tasks_in(i).pa_task_number
17380 AND project_id = l_project_id; -- BUG 4174041, rtarway
17381 ----dbms_output.put_line('value of recod updates in pa_proj_elements'||sql%rowcount);
17382 i := p_tasks_in.next(i);
17383 END LOOP;
17384 End if;
17385 Revert end bug #5243018 */
17386 
17387 /* Code change end by aditi for Bug 4120380 **/
17388 
17389 -- Now process the deferred new tasks, since all tasks have been processed
17390 
17391    IF l_deferred_tasks_count > 0 THEN
17392       FOR i in 1..l_deferred_new_tasks_tbl.COUNT LOOP
17393           IF l_added_task_tbl.exists(1) THEN
17394              l_count := l_added_task_tbl.COUNT + 1;
17395           ELSE
17396              l_count := 1;
17397           END IF;
17398           l_added_task_tbl(l_count):= l_deferred_new_tasks_tbl(i);
17399           l_task_rec        := l_deferred_new_tasks_tbl(i);
17400           l_orig_index             := l_deferred_tasks_index_tbl(i).task_index;
17401 
17402     -- Actions performed using the APIs would be subject to
17403     -- function security. If the responsibility does not allow
17404     -- such functions to be executed, the API should not proceed further
17405     -- since the user does not have access to such functions
17406 
17407     -- Function security procedure check whether user have the
17408     -- privilege to add task or not
17409 
17410         --Bug 2471668: we do not need to assign project id to the global variable as it is already done
17411         --above before checking for update_project function.
17412 
17413     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
17414       (p_api_version_number => p_api_version_number,
17415        p_responsibility_id  => l_resp_id,
17416        p_function_name      => 'PA_PM_ADD_TASK',
17417        p_msg_count       => l_msg_count,
17418        p_msg_data           => l_msg_data,
17419        p_return_status      => l_return_status,
17420        p_function_allowed   => l_function_allowed);
17421 
17422         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17423         THEN
17424          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17425 
17426         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17427         THEN
17428             p_multiple_task_msg := 'F';
17429 --          RAISE FND_API.G_EXC_ERROR;
17430         END IF;
17431 
17432         IF l_function_allowed = 'N' THEN
17433          pa_interface_utils_pub.map_new_amg_msg
17434            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
17435             ,p_msg_attribute    => 'CHANGE'
17436             ,p_resize_flag      => 'Y'
17437             ,p_msg_context      => 'GENERAL'
17438             ,p_attribute1       => ''
17439             ,p_attribute2       => ''
17440             ,p_attribute3       => ''
17441             ,p_attribute4       => ''
17442             ,p_attribute5       => '');
17443            p_return_status := FND_API.G_RET_STS_ERROR;
17444              p_multiple_task_msg := 'F';
17445 --           RAISE FND_API.G_EXC_ERROR;
17446         END IF;
17447 
17448      /* Code addition for bug 2982057 starts */
17449        IF l_task_rec.long_task_name IS NULL OR l_task_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17450        then
17451          l_task_rec.long_task_name := l_task_rec.task_name;
17452            else
17453          l_task_rec.long_task_name :=l_task_rec.long_task_name;
17454            end if;
17455            /* Code addition for bug 2982057 ends */
17456           --DHI ER, bug 4413568
17457       IF ( p_update_mode = 'PA_UPD_TASK_ATTR' ) THEN   --bug 4534919
17458            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
17459                                     p_msg_name => 'PA_WBS_CANT_CHANGE');
17460               RAISE FND_API.G_EXC_ERROR;
17461       END IF;
17462            PA_PROJECT_PVT.add_task_round_one
17463                     (p_return_status            => l_return_status,
17464                      p_project_rec              => l_project_rec,
17465                      p_task_rec                 => l_task_rec,
17466                      p_project_type_class_code  => l_project_type_class_code,
17467                      p_service_type_code        => l_service_type_code,
17468                      p_task_id                  => l_task_id);
17469 
17470     IF l_debug_mode = 'Y' THEN
17471         pa_debug.g_err_stage := 'After PA_PROJECT_PVT.add_task_round_one...l_return_status=||l_return_status';
17472         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17473     END IF;
17474 
17475 
17476            IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
17477 
17478                  l_tasks_out(l_orig_index).return_status  := l_return_status;
17479                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17480 
17481            ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17482                     l_tasks_out(l_orig_index).return_status := l_return_status;
17483                     p_multiple_task_msg := 'F';
17484 --                  RAISE FND_API.G_EXC_ERROR;
17485            END IF;
17486            l_tasks_out(l_orig_index).pa_task_id         := l_task_id;
17487         --used to pass task_id to add_task_round_two API
17488            l_task_id_tbl(l_count).pa_task_id   := l_task_id;
17489       END LOOP;
17490 
17491    END IF;
17492 
17493 -- For all the tasks which were inserted by calling add_task_round_one,
17494 -- need to call add_task_round_two,which would update the parent task
17495 -- information. such tasks are stored in the l_added_task_tbl
17496 
17497    i:= l_added_task_tbl.first;
17498 
17499    IF l_added_task_tbl.exists(i)
17500    THEN
17501 
17502        WHILE i IS NOT NULL LOOP
17503 
17504             l_task_rec := l_added_task_tbl(i);
17505 
17506 -- Change required here for bug 3548473 : 3627124 (modifying the changes done for bug 2931183) :
17507 /*
17508 1. Check if the user wants to pass the entire struct or single tasks.
17509 2. If pass_entire_struct param is 'Y', let the prog flow be as it is now.
17510 3. If the pass_entire_struct param is 'N', then call PA_PROJECT_PVT.add_task_round_two with
17511    p_create_task_structure => 'Y' parameter.
17512 */
17513 /* The code below was added for Bug 3841742 : 3857419 .This is to ensure that add_task_round_two is called
17514    for all the tasks that have inserted through add_task_round_one for updating wbs_level, top_task_id and
17515     parent_task_id. The code below will default l_ref_task_id to parent_task_id, if the latter is not null
17516     .Else l_ref_task_id will be null*/
17517  /* CHANGES start FOR Bug 3841742 : 3857419  ADITI*/
17518     IF (l_task_rec.pa_parent_task_id IS NOT NULL AND l_task_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
17519         (l_task_rec.pm_parent_task_reference IS NOT NULL
17520         AND l_task_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
17521         THEN
17522                 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
17523                 -- pa_project_pvt.convert_pm_taskref_to_id_all
17524               PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
17525               ( p_pa_project_id => l_project_id
17526               , p_structure_type => l_structure_type
17527               , p_pa_task_id    => l_task_rec.pa_parent_task_id
17528               , p_pm_task_reference  => l_task_rec.pm_parent_task_reference
17529               , p_out_task_id      => l_task_id_out
17530               , p_return_status => l_return_status    );
17531        --  --dbms_output.put_line('Value of out task'||l_task_id_out);
17532           l_ref_task_id :=  l_task_id_out; --aditi Added for Bug 3548473
17533 
17534           IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
17535               THEN
17536 
17537                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17538 
17539               ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR)
17540               THEN
17541                   p_multiple_task_msg := 'F';
17542 --               RAISE FND_API.G_EXC_ERROR;
17543               END IF;
17544        ELSE
17545           l_ref_task_id := null;
17546 
17547           END IF;
17548 /* CHANGES end FOR Bug 3841742 : 3857419  ADITI */
17549 
17550           -- Bug 7277840 : Update PM_PROJECT_CODE
17551 	  IF p_pm_product_code <> 'WORKPLAN' AND p_pm_product_code IS NOT NULL
17552 	     AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17553 	  THEN
17554 	      UPDATE pa_tasks
17555 	      SET    pm_product_code = p_pm_product_code
17556 	      WHERE  task_id = l_task_id_tbl(i).pa_task_id;
17557 	  END IF;
17558 
17559 
17560             PA_PROJECT_PVT.add_task_round_two
17561                 (p_return_status    => l_return_status,
17562                   p_project_rec      => l_project_rec,
17563                   p_task_id          => l_task_id_tbl(i).pa_task_id,
17564                   p_task_rec         => l_task_rec,
17565                          --project structure
17566                          p_ref_task_id      => l_ref_task_id,-- aditi changed from null to l_ref_task_id for bug 3801314 : Bug 3627124
17567                          p_tasks_in         => p_tasks_in,
17568                          p_tasks_out        => l_tasks_out,
17569                          p_task_version_id  => l_task_version_id,
17570                          p_create_task_structure => l_update_task_structure  -- Bug 2931183 distinguishes bulk calling context
17571                          --project structure
17572                          ); -- modified p_update_task_structure value for bug 3548473 : 3627124
17573 
17574     IF l_debug_mode = 'Y' THEN
17575         pa_debug.g_err_stage := 'After calling PA_PROJECT_PVT.add_task_round_two l_return_status='||l_return_status;
17576         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17577     END IF;
17578 
17579 
17580             IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
17581             THEN
17582 
17583     l_tasks_out(i).return_status := l_return_status;
17584                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17585 
17586             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17587             THEN
17588 
17589     l_tasks_out(i).return_status := l_return_status;
17590     l_tasks_out(i).task_version_id := l_task_version_id;
17591                p_multiple_task_msg := 'F';
17592 --             RAISE FND_API.G_EXC_ERROR;
17593 
17594 
17595             END IF;
17596 
17597   i := l_added_task_tbl.next(i);
17598 
17599        END LOOP;
17600 --Commenting the complete code and moving it below to resolve bug 6016529
17601 -- PROCESS_WBS_UPDATES should get called after all the updation related to task and project is done.
17602 -- so it is moved after call for PROCESS_TASK_STRUCTURE_BULK is done.
17603 /* Bug 6163090
17604 
17605 -- Changes start for Bug# 3931805
17606 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
17607 THEN                                                  -- publishing flow.
17608    PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
17609    PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
17610    PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
17611 
17612 IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
17613        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
17614          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
17615          PA_PROJECT_PUB.G_Published_version_exists = 'N')
17616 THEN
17617    l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
17618    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
17619                                          ,p_structure_version_id => l_structure_version_id ) ;
17620      IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
17621           IF p_project_in.process_mode = 'ONLINE' THEN
17622              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
17623                                                        ,p_project_id           => l_project_id
17624                                                        ,p_structure_version_id => l_structure_version_id
17625                                                        ,x_return_status        => l_return_status
17626                                                        ,x_msg_count            => l_msg_count
17627                                                        ,x_msg_data             => l_msg_data ) ;
17628              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17629                   THEN
17630                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17631              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17632                   THEN
17633                     RAISE FND_API.G_EXC_ERROR;
17634              END IF;
17635           ELSIF p_project_in.process_mode = 'CONCURRENT' THEN
17636 
17637              PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context      => 'CONC_UPDATE'
17638                                                                  ,p_project_id           => l_project_id
17639                                                                  ,p_structure_version_id => l_structure_version_id
17640                                                                  ,x_return_status        => l_return_status
17641                                                                  ,x_msg_count            => l_msg_count
17642                                                                  ,x_msg_data             => l_msg_data ) ;
17643              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17644                   THEN
17645                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17646              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17647                   THEN
17648                     RAISE FND_API.G_EXC_ERROR;
17649              END IF;
17650           END IF ;
17651      END IF ;
17652    END IF ;
17653 END IF;
17654 -- Changes end for Bug# 3931805
17655 */--Bug 6163090
17656 
17657        --bug 3010538 and 3035902
17658        --The following code should be executed when a new task is added
17659        --to a working version( with already existing a published ver ) and
17660        --then its published.
17661        --In other words the code is executed while publishing to sync up with
17662        --pa_tasks. In regular flow for adding new tasks we call this api
17663        --from the wrapper process_task_structure_bulk api.
17664        --
17665        IF l_structure_type = 'FINANCIAL' AND
17666           p_pm_product_code = 'WORKPLAN'
17667        THEN
17668           pa_fp_refresh_elements_pub.set_process_flag_proj(
17669               p_project_id               => l_project_id
17670              ,p_request_id               => null
17671              ,p_process_code             => null
17672              ,p_refresh_required_flag    => 'Y'
17673              ,x_return_status            => l_return_status
17674              ,x_msg_count                => l_msg_count
17675              ,x_msg_data                 => l_msg_data );
17676 
17677           if l_return_status <> FND_API.G_RET_STS_SUCCESS then
17678              RAISE FND_API.G_EXC_ERROR;
17679           end if;
17680        END IF;
17681        --bug 3010538 and 3035902
17682 
17683    END IF;   --tasks table not empty
17684 
17685 --project structure
17686 ELSIF p_tasks_in.exists(i)
17687       --AND p_structure_in.structure_type = 'WORKPLAN'  --bug 2738747
17688       AND l_structure_type = 'WORKPLAN'                 --bug 2738747
17689 THEN
17690 
17691     IF G_WP_STR_EXISTS = 'N'
17692     THEN
17693         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17694         THEN
17695             pa_interface_utils_pub.map_new_amg_msg
17696               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
17697                   ,p_msg_attribute    => 'CHANGE'
17698                   ,p_resize_flag      => 'N'
17699                   ,p_msg_context      => 'GENERAL'
17700                   ,p_attribute1       => ''
17701                   ,p_attribute2       => ''
17702                   ,p_attribute3       => ''
17703                   ,p_attribute4       => ''
17704                   ,p_attribute5       => '');
17705         END IF;
17706         RAISE FND_API.G_EXC_ERROR;
17707     END IF;
17708 
17709        v_first_index := i;
17710 
17711        IF ( p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
17712             p_structure_in.structure_version_id IS NULL  ) AND l_structure_version_id IS NULL
17713        THEN
17714             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17715             THEN
17716                pa_interface_utils_pub.map_new_amg_msg
17717                     ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
17718                      ,p_msg_attribute    => 'CHANGE'
17719                      ,p_resize_flag      => 'N'
17720                      ,p_msg_context      => 'GENERAL'
17721                      ,p_attribute1       => ''
17722                      ,p_attribute2       => ''
17723                      ,p_attribute3       => ''
17724                      ,p_attribute4       => ''
17725                      ,p_attribute5       => '');
17726             END IF;
17727             RAISE FND_API.G_EXC_ERROR;
17728             l_tasks_out(i).return_status    := FND_API.G_RET_STS_SUCCESS;
17729        ELSIF ( p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
17730             p_structure_in.structure_version_id IS NOT NULL  )
17731        THEN
17732           l_structure_version_id := p_structure_in.structure_version_id;
17733        END IF;
17734 
17735 --Commented The below loop for bug 2931183 so to do the below done processing in bulk
17736 
17737 /*       WHILE i IS NOT NULL LOOP
17738 
17739            l_task_id := NULL;
17740 
17741            l_tasks_out(i).return_status    := FND_API.G_RET_STS_SUCCESS;
17742 
17743            --get the previous task
17744            IF i = v_first_index
17745            THEN
17746                v_ref_task_id := null;
17747            ELSIF (l_tasks_out(i-1).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
17748                l_tasks_out(i-1).pa_task_id IS NULL )
17749            THEN
17750                v_ref_task_id := p_tasks_in(i-1).pa_task_id;
17751            ELSE
17752                v_ref_task_id := l_tasks_out(i-1).pa_task_id;
17753            END IF;
17754 
17755            IF (p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17756                OR  p_tasks_in(i).pa_task_id IS NULL )
17757            THEN
17758                IF  p_tasks_in(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17759                    OR p_tasks_in(i).pm_task_reference IS NULL
17760                THEN
17761                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17762              THEN
17763                           pa_interface_utils_pub.map_new_amg_msg
17764                              ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
17765                               ,p_msg_attribute    => 'CHANGE'
17766                               ,p_resize_flag      => 'N'
17767                               ,p_msg_context      => 'PROJ'
17768                               ,p_attribute1       => l_project_rec.segment1
17769                               ,p_attribute2       => ''
17770                               ,p_attribute3       => ''
17771                               ,p_attribute4       => ''
17772                              ,p_attribute5       => '');
17773                    END IF;
17774                    l_tasks_out(i).return_status :=  FND_API.G_RET_STS_ERROR ;
17775                    RAISE FND_API.G_EXC_ERROR;
17776                ELSE
17777                    --If pm_task_reference is provided and task id is null then its a create
17778                    --create task
17779 /*                   --get the previous task
17780                    IF i = v_first_index
17781                    THEN
17782                        v_ref_task_id := null;
17783                    ELSIF (l_tasks_out(i-1).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
17784                        l_tasks_out(i-1).pa_task_id IS NULL )
17785                    THEN
17786                        v_ref_task_id := p_tasks_in(i-1).pa_task_id;
17787                    ELSE
17788                        v_ref_task_id := l_tasks_out(i-1).pa_task_id;
17789                    END IF;
17790 
17791 */
17792 
17793                    -- Actions performed using the APIs would be subject to
17794                    -- function security. If the responsibility does not allow
17795                    -- such functions to be executed, the API should not proceed further
17796                    -- since the user does not have access to such functions
17797 
17798                    -- Function security procedure check whether user have the
17799                    -- privilege to add task or not
17800 
17801                    --Bug 2471668: we do not need to assign project id to the global variable as it is already done
17802                    --above before checking for update_project function.
17803 
17804 /*                   PA_PM_FUNCTION_SECURITY_PUB.check_function_security
17805                       (p_api_version_number => p_api_version_number,
17806                        p_responsibility_id  => l_resp_id,
17807                        p_function_name      => 'PA_PM_ADD_TASK',
17808                        p_msg_count       => l_msg_count,
17809                        p_msg_data           => l_msg_data,
17810                        p_return_status      => l_return_status,
17811                        p_function_allowed   => l_function_allowed);
17812 
17813                    IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17814                    THEN
17815                        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17816                    ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17817                    THEN
17818                        p_multiple_task_msg := 'F';
17819                        --          RAISE FND_API.G_EXC_ERROR;
17820                    END IF;
17821 
17822                    IF l_function_allowed = 'N' THEN
17823                       pa_interface_utils_pub.map_new_amg_msg
17824                        ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
17825                         ,p_msg_attribute    => 'CHANGE'
17826                         ,p_resize_flag      => 'Y'
17827                         ,p_msg_context      => 'GENERAL'
17828                         ,p_attribute1       => ''
17829                         ,p_attribute2       => ''
17830                         ,p_attribute3       => ''
17831                         ,p_attribute4       => ''
17832                         ,p_attribute5       => '');
17833                        p_return_status := FND_API.G_RET_STS_ERROR;
17834                        p_multiple_task_msg := 'F';
17835                        --           RAISE FND_API.G_EXC_ERROR;
17836                   END IF;
17837 
17838                    IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL
17839                        AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
17840                    THEN
17841                        v_parent_task_id := p_tasks_in(i).pa_parent_task_id;
17842                    ELSIF (p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17843                           AND p_tasks_in(i).pm_parent_task_reference IS NOT NULL)
17844                    THEN
17845                    --convert pm_parent_task_reference to parent_task_id.
17846                    --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
17847                    PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
17848                        p_pm_parent_task_reference      =>  p_tasks_in(i).pm_parent_task_reference
17849                       ,p_project_id                    =>  l_project_id
17850                       ,x_parent_task_id                =>  v_parent_task_id
17851                       ,x_return_status                 =>  l_return_status
17852                     );
17853 
17854                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS
17855                     THEN
17856                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17857                         THEN
17858                             pa_interface_utils_pub.map_new_amg_msg
17859                                ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
17860                                    ,p_msg_attribute    => 'CHANGE'
17861                                    ,p_resize_flag      => 'N'
17862                                    ,p_msg_context      => 'TASK'
17863                                    ,p_attribute1       => l_amg_segment1
17864                                    ,p_attribute2       => l_amg_task_number
17865                                    ,p_attribute3       => ''
17866                                    ,p_attribute4       => ''
17867                                    ,p_attribute5       => '');
17868                        END IF;
17869                        RAISE  FND_API.G_EXC_ERROR;
17870                    END IF;
17871 
17872                    ELSE
17873                        v_parent_task_id := null;
17874                    END IF;
17875 
17876                    PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
17877                          p_project_id                   => l_project_id
17878                         ,p_task_id                      => p_tasks_in(i).pa_task_id
17879                         ,p_parent_task_id               => v_parent_task_id
17880                         ,p_ref_task_id                  => v_ref_task_id
17881                         ,p_task_number                  => p_tasks_in(i).pa_task_number
17882                         ,p_task_name                    => p_tasks_in(i).long_task_name     --bug 2833194
17883                         ,p_task_description             => p_tasks_in(i).task_description
17884                         ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
17885                         ,p_calling_module               => 'AMG'
17886                         --,p_structure_type               => p_structure_in.structure_type  --bug 2738747
17887                         ,p_structure_type               => l_structure_type    --bug 2738747
17888                         ,p_OBLIGATION_START_DATE        => p_tasks_in(i).OBLIGATION_START_DATE
17889                         ,p_OBLIGATION_FINISH_DATE       => p_tasks_in(i).OBLIGATION_FINISH_DATE
17890                         ,p_ESTIMATED_START_DATE         => p_tasks_in(i).ESTIMATED_START_DATE
17891                         ,p_ESTIMATED_FINISH_DATE        => p_tasks_in(i).ESTIMATED_FINISH_DATE
17892                         ,p_BASELINE_START_DATE          => p_tasks_in(i).BASELINE_START_DATE
17893                         ,p_BASELINE_FINISH_DATE         => p_tasks_in(i).BASELINE_FINISH_DATE
17894                         ,p_CLOSED_DATE                  => p_tasks_in(i).CLOSED_DATE
17895                         ,p_WQ_UOM_CODE                  => p_tasks_in(i).WQ_UOM_CODE
17896                         ,p_WQ_ITEM_CODE                 => p_tasks_in(i).WQ_ITEM_CODE
17897                         ,p_STATUS_CODE                  => p_tasks_in(i).STATUS_CODE
17898                         ,p_WF_STATUS_CODE               => p_tasks_in(i).WF_STATUS_CODE
17899                         ,p_PM_SOURCE_CODE               => l_pm_product_code        --bug 2665656
17900                         ,p_PRIORITY_CODE                => p_tasks_in(i).PRIORITY_CODE
17901                         ,p_MILESTONE_FLAG               => p_tasks_in(i).MILESTONE_FLAG
17902                         ,p_CRITICAL_FLAG                => p_tasks_in(i).CRITICAL_FLAG
17903                         ,p_INC_PROJ_PROGRESS_FLAG       => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
17904                         ,p_LINK_TASK_FLAG               => p_tasks_in(i).LINK_TASK_FLAG
17905                         ,p_CALENDAR_ID                  => p_tasks_in(i).CALENDAR_ID
17906                         ,p_PLANNED_EFFORT               => p_tasks_in(i).PLANNED_EFFORT
17907                         ,p_DURATION                     => p_tasks_in(i).DURATION
17908                         ,p_PLANNED_WORK_QUANTITY        => p_tasks_in(i).PLANNED_WORK_QUANTITY
17909                         ,p_TASK_TYPE                    => p_tasks_in(i).TASK_TYPE
17910                         ,p_actual_start_date                  => p_tasks_in(i).actual_start_date
17911                         ,p_actual_finish_date                 => p_tasks_in(i).actual_finish_date
17912                         ,p_early_start_date                   => p_tasks_in(i).early_start_date
17913                         ,p_early_finish_date                  => p_tasks_in(i).early_finish_date
17914                         ,p_late_start_date                    => p_tasks_in(i).late_start_date
17915                         ,p_late_finish_date                   => p_tasks_in(i).late_finish_date
17916                         ,p_scheduled_start_date               => p_tasks_in(i).scheduled_start_date
17917                         ,p_scheduled_finish_date              => p_tasks_in(i).scheduled_finish_date
17918                         ,P_PM_SOURCE_reference                => p_tasks_in(i).pm_task_reference
17919                         ,p_location_id                        => p_tasks_in(i).address_id
17920                         ,p_manager_person_id                  => p_tasks_in(i).task_manager_person_id
17921                         ,p_structure_version_id               => l_structure_version_id
17922                         ,x_task_version_id                    => l_task_version_id
17923                         ,x_task_id                            => v_task_id
17924                         ,x_msg_count                    => l_msg_count
17925                         ,x_msg_data                     => l_msg_data
17926                         ,x_return_status                => l_return_status
17927                      );
17928 
17929                      -- assign the appropriate values to the task out record
17930                      l_tasks_out(i).return_status     := l_return_status;
17931                      l_tasks_out(i).pa_task_id        := v_task_id;
17932                      l_tasks_out(i).task_version_id   := l_task_version_id;
17933                      l_tasks_out(i).pm_task_reference := p_tasks_in(i).pm_task_reference;
17934 
17935                      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17936                      THEN
17937                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17938 
17939                      ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17940                      THEN
17941                          p_multiple_task_msg := 'F';
17942                          RAISE FND_API.G_EXC_ERROR;
17943                      END IF;
17944 
17945                      i := p_tasks_in.next(i);
17946 
17947                END IF; --<<p_tasks_in(i).pm_task_reference>>
17948            ELSE
17949                --For update, task_id should be provided. See TRM for AMG
17950                --update task
17951 
17952     -- Actions performed using the APIs would be subject to
17953     -- function security. If the responsibility does not allow
17954     -- such functions to be executed, the API should not proceed further
17955     -- since the user does not have access to such functions
17956 
17957 
17958     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
17959       (p_api_version_number => p_api_version_number,
17960        p_responsibility_id  => l_resp_id,
17961        p_function_name      => 'PA_PM_UPDATE_TASK',
17962        p_msg_count          => l_msg_count,
17963        p_msg_data           => l_msg_data,
17964        p_return_status      => l_return_status,
17965        p_function_allowed   => l_function_allowed );
17966 
17967         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17968         THEN
17969                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17970 
17971         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17972         THEN
17973                         RAISE FND_API.G_EXC_ERROR;
17974         END IF;
17975         IF l_function_allowed = 'N' THEN
17976           pa_interface_utils_pub.map_new_amg_msg
17977           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
17978            ,p_msg_attribute    => 'CHANGE'
17979            ,p_resize_flag      => 'Y'
17980            ,p_msg_context      => 'GENERAL'
17981            ,p_attribute1       => ''
17982            ,p_attribute2       => ''
17983            ,p_attribute3       => ''
17984            ,p_attribute4       => ''
17985            ,p_attribute5       => '');
17986            p_return_status := FND_API.G_RET_STS_ERROR;
17987            RAISE FND_API.G_EXC_ERROR;
17988         END IF;
17989 
17990                  PA_PROJ_TASK_STRUC_PUB.UPDATE_TASK_STRUCTURE(
17991                          p_project_id                   => l_project_id
17992                         ,p_task_id                      => p_tasks_in(i).pa_task_id
17993                         ,p_ref_task_id                  => v_ref_task_id
17994                         ,p_task_number                  => p_tasks_in(i).pa_task_number
17995                         ,p_task_name                    => p_tasks_in(i).long_task_name     --bug 2833194
17996                         ,p_task_description             => p_tasks_in(i).task_description
17997                         ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
17998                         ,p_calling_module               => 'AMG'
17999                         --,p_structure_type               => p_structure_in.structure_type     --bug 2738747
18000                         ,p_structure_type               => l_structure_type                    --bug 2738747
18001                         ,p_pm_product_code              => p_tasks_in(i).PM_SOURCE_CODE
18002                         ,p_pm_task_reference            => p_tasks_in(i).pm_task_reference
18003                         ,p_OBLIGATION_START_DATE        => p_tasks_in(i).OBLIGATION_START_DATE
18004                         ,p_OBLIGATION_FINISH_DATE       => p_tasks_in(i).OBLIGATION_FINISH_DATE
18005                         ,p_ESTIMATED_START_DATE         => p_tasks_in(i).ESTIMATED_START_DATE
18006                         ,p_ESTIMATED_FINISH_DATE        => p_tasks_in(i).ESTIMATED_FINISH_DATE
18007                         ,p_BASELINE_START_DATE          => p_tasks_in(i).BASELINE_START_DATE
18008                         ,p_BASELINE_FINISH_DATE         => p_tasks_in(i).BASELINE_FINISH_DATE
18009                         ,p_CLOSED_DATE                  => p_tasks_in(i).CLOSED_DATE
18010                         ,p_WQ_UOM_CODE                  => p_tasks_in(i).WQ_UOM_CODE
18011                         ,p_WQ_ITEM_CODE                 => p_tasks_in(i).WQ_ITEM_CODE
18012                         ,p_STATUS_CODE                  => p_tasks_in(i).STATUS_CODE
18013                         ,p_WF_STATUS_CODE               => p_tasks_in(i).WF_STATUS_CODE
18014                         ,p_PRIORITY_CODE                => p_tasks_in(i).PRIORITY_CODE
18015                         ,p_MILESTONE_FLAG               => p_tasks_in(i).MILESTONE_FLAG
18016                         ,p_CRITICAL_FLAG                => p_tasks_in(i).CRITICAL_FLAG
18017                         ,p_INC_PROJ_PROGRESS_FLAG       => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
18018                         ,p_LINK_TASK_FLAG               => p_tasks_in(i).LINK_TASK_FLAG
18019                         ,p_CALENDAR_ID                  => p_tasks_in(i).CALENDAR_ID
18020                         ,p_PLANNED_EFFORT               => p_tasks_in(i).PLANNED_EFFORT
18021                         ,p_DURATION                     => p_tasks_in(i).DURATION
18022                         ,p_PLANNED_WORK_QUANTITY        => p_tasks_in(i).PLANNED_WORK_QUANTITY
18023                         ,p_TASK_TYPE                    => p_tasks_in(i).TASK_TYPE
18024                         ,p_actual_start_date                  => p_tasks_in(i).actual_start_date
18025                         ,p_actual_finish_date                 => p_tasks_in(i).actual_finish_date
18026                         ,p_early_start_date                   => p_tasks_in(i).early_start_date
18027                         ,p_early_finish_date                  => p_tasks_in(i).early_finish_date
18028                         ,p_late_start_date                    => p_tasks_in(i).late_start_date
18029                         ,p_late_finish_date                   => p_tasks_in(i).late_finish_date
18030                         ,p_scheduled_start_date               => p_tasks_in(i).scheduled_start_date
18031                         ,p_scheduled_finish_date              => p_tasks_in(i).scheduled_finish_date
18032                         ,p_location_id                        => p_tasks_in(i).address_id
18033                         ,p_task_manager_id                  => p_tasks_in(i).task_manager_person_id
18034                         ,p_structure_version_id               => l_structure_version_id
18035 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
18036                         ,p_ext_act_duration => p_tasks_in(i).ext_act_duration
18037                         ,p_ext_remain_duration  => p_tasks_in(i).ext_remain_duration
18038                         ,p_ext_sch_duration => p_tasks_in(i).ext_sch_duration
18039 -- (end venkat) new params for bug #3450684 -------------------------------------------------
18040                         ,x_msg_count                    => l_msg_count
18041                         ,x_msg_data                     => l_msg_data
18042                         ,x_return_status                => l_return_status
18043                      );
18044                      -- assign the appropriate values to the task out record
18045                      l_tasks_out(i).return_status     := l_return_status;
18046                      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18047                      THEN
18048                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18049 
18050                      ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18051                      THEN
18052                          p_multiple_task_msg := 'F';
18053                          RAISE FND_API.G_EXC_ERROR;
18054                      END IF;
18055                      l_tasks_out(i).pa_task_id        := p_tasks_in(i).pa_task_id;
18056                      l_tasks_out(i).pm_task_reference := p_tasks_in(i).pm_task_reference;
18057                      i := p_tasks_in.next(i);
18058 
18059            END IF;
18060 
18061         END LOOP; --<< end WHILE >>
18062         */
18063 END IF;
18064    --project structure
18065 
18066 IF p_multiple_task_msg = 'F'
18067 THEN
18068     RAISE FND_API.G_EXC_ERROR;
18069 END IF;
18070 
18071 --Added for bug 2931183
18072 IF nvl(p_pm_product_code,'WORKPLAN') <> 'WORKPLAN' AND p_pass_entire_structure = 'Y'  -- bug 3548473 : 3627124
18073 THEN
18074     IF l_debug_mode = 'Y' THEN
18075         pa_debug.g_err_stage := 'Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
18076         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18077     END IF;
18078 
18079     PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK(
18080             p_api_version_number              => p_api_version_number
18081             ,p_commit                          => FND_API.G_FALSE--bug 3766967
18082             ,p_project_id                      => l_project_id
18083             ,p_source_project_id               => l_project_in_rec.created_from_project_id --ADUT. Included this new param.
18084             ,p_pm_product_code                 => p_pm_product_code
18085             ,p_structure_type                  => l_structure_type  --for bug 3005458
18086             ,p_tasks_in_tbl                    => p_tasks_in
18087             ,p_wp_str_exists                   => G_WP_STR_EXISTS
18088             ,p_is_wp_separate_from_fn          => G_IS_WP_SEPARATE_FROM_FN
18089             ,p_is_wp_versioning_enabled        => G_IS_WP_VERSIONING_ENABLED
18090             ,p_structure_version_id            => l_update_structure_version_id
18091             ,p_process_mode                    => p_project_in.process_mode -- PA L Changes 3010538
18092             ,p_create_task_versions_only       => l_create_task_versions_only -- Bug 3075609
18093             ,px_tasks_out_tbl                  => l_tasks_out
18094             ,x_return_status                   => p_return_status
18095             ,x_msg_count                       => p_msg_count
18096             ,x_msg_data                        => p_msg_data
18097             );
18098 
18099    IF l_debug_mode = 'Y' THEN
18100         pa_debug.g_err_stage := 'After PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK...p_return_status=||p_return_status';
18101         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18102     END IF;
18103 
18104 
18105     IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18106          IF l_debug_mode = 'Y' THEN
18107             pa_debug.g_err_stage := 'Errors in PROCESS_TASK_STRUCTURE_BULK ' ;
18108             pa_debug.write(l_module_name,pa_debug.g_err_stage,4);
18109         END IF;
18110         p_multiple_task_msg := 'F';
18111         RAISE FND_API.G_EXC_ERROR;
18112     END IF;
18113 
18114     IF l_debug_mode = 'Y' THEN
18115         pa_debug.g_err_stage := 'Returned from PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
18116         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18117     END IF;
18118 END IF; --for p_pm_product_code is not workplan
18119 
18120 -- Bug 6163090 Moved the code here from above
18121 IF  l_structure_type = 'FINANCIAL'
18122 THEN
18123   IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
18124   THEN                                                  -- publishing flow.
18125     PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
18126     PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
18127     PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
18128 
18129     IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
18130     ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
18131     PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
18132     PA_PROJECT_PUB.G_Published_version_exists = 'N')
18133     THEN
18134       l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
18135       l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
18136                                  ,p_structure_version_id => l_structure_version_id ) ;
18137       IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
18138         IF p_project_in.process_mode = 'ONLINE' THEN
18139           PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
18140                                                    ,p_project_id           => l_project_id
18141                                                    ,p_structure_version_id => l_structure_version_id
18142                                                    ,x_return_status        => l_return_status
18143                                                    ,x_msg_count            => l_msg_count
18144                                                    ,x_msg_data             => l_msg_data ) ;
18145             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18146             THEN
18147                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18148             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18149             THEN
18150                   RAISE FND_API.G_EXC_ERROR;
18151             END IF;
18152           ELSIF p_project_in.process_mode = 'CONCURRENT' THEN
18153 
18154             PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context      => 'CONC_UPDATE'
18155                                                                ,p_project_id           => l_project_id
18156                                                                ,p_structure_version_id => l_structure_version_id
18157                                                                ,x_return_status        => l_return_status
18158                                                                ,x_msg_count            => l_msg_count
18159                                                                ,x_msg_data             => l_msg_data ) ;
18160             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18161             THEN
18162                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18163             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18164             THEN
18165                   RAISE FND_API.G_EXC_ERROR;
18166             END IF;
18167         END IF ;
18168       END IF ;
18169     END IF ;
18170   END IF;
18171 END IF;--l_structure_type
18172 --Bug 6163090
18173 
18174 
18175 
18176 ----Commented The below code for bug 2931183 as the processing will be done in PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK
18177 
18178 -- Bug # 5077599.
18179 
18180 -- Uncommented the code below.
18181 
18182 if (p_update_mode = 'PA_UPD_TASK_ATTR' and p_pass_entire_structure = 'N') then
18183 --bug 2732895   --update_project
18184 IF (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
18185    ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND  p_structure_in.structure_type = 'WORKPLAN' ))
18186    AND (p_pm_product_code <> 'WORKPLAN')
18187  --bug 2871308: added condition to by-pass when calling from publish api
18188 --should not call if new task is added to FINANCIAL structure version
18189 THEN
18190   PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
18191              p_tasks_in             => l_tasks_out
18192             ,p_task_version_id      => null
18193             ,x_msg_count            => l_msg_count
18194             ,x_msg_data             => l_msg_data
18195             ,x_return_status        => l_return_status
18196        );
18197 
18198         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18199         THEN
18200            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18201 
18202         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18203         THEN
18204           p_multiple_task_msg := 'F';
18205           RAISE FND_API.G_EXC_ERROR;
18206         END IF;
18207 
18208   --bug 2856033
18209 
18210   IF l_structure_version_id IS NULL OR l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18211   THEN
18212 
18213       PA_PROJECT_PVT.get_structure_version(
18214                p_project_id             => l_project_id
18215               ,p_structure_versions_out => g_struc_out_tbl
18216             );
18217 
18218       fetch_structure_version(
18219           p_return_status                 => l_return_status
18220          ,p_api_version_number            => p_api_version_number
18221          ,p_structure_type                => p_structure_in.structure_type
18222          ,p_pa_structure_version_id       => l_structure_version_id
18223          ,p_struc_return_status           => l_return_status
18224        );
18225   END IF;
18226   PA_PROJ_TASK_STRUC_PUB.rollup_dates(
18227              p_tasks_in             => l_tasks_out           --null if called for one task
18228             ,p_task_version_id      => null
18229             ,p_project_id           => l_project_id
18230             ,P_structure_version_id => l_structure_version_id
18231             ,x_msg_count            => l_msg_count
18232             ,x_msg_data             => l_msg_data
18233             ,x_return_status        => l_return_status
18234        );
18235 
18236         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18237         THEN
18238            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18239 
18240         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18241         THEN
18242           p_multiple_task_msg := 'F';
18243           RAISE FND_API.G_EXC_ERROR;
18244         END IF;
18245   --bug 2856033
18246 
18247 END IF;
18248 
18249 --bug 2732895
18250 end if;
18251 
18252 -- End of Bug # 5077599.
18253 
18254 
18255    IF p_multiple_task_msg = 'F'
18256    THEN
18257       RAISE FND_API.G_EXC_ERROR;
18258    END IF;
18259 
18260      p_tasks_out := l_tasks_out;
18261 
18262 
18263       -- new project start date should be < min(task_start_date)
18264 
18265   IF l_update_start_date_flag = 'Y'
18266            --AND p_structure_in.structure_type = 'FINANCIAL'    --bug 2729851   --bug 2738747
18267            AND l_structure_type = 'FINANCIAL'    --bug 2729851                  --bug 2738747
18268   THEN
18269 
18270            OPEN l_min_task_start_date_csr (l_project_id);
18271            FETCH l_min_task_start_date_csr INTO l_min_task_date;
18272 
18273            IF l_min_task_start_date_csr%FOUND
18274            THEN
18275 
18276                IF l_project_start_date IS NOT NULL
18277                AND l_min_task_date IS NOT NULL
18278                THEN
18279 
18280         IF l_min_task_date < l_project_start_date
18281         THEN
18282 
18283                        CLOSE l_min_task_start_date_csr;
18284 
18285       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18286       THEN
18287             pa_interface_utils_pub.map_new_amg_msg
18288               ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
18289                ,p_msg_attribute    => 'CHANGE'
18290                ,p_resize_flag      => 'N'
18291                ,p_msg_context      => 'PROJ'
18292                ,p_attribute1       => l_project_rec.segment1
18293                ,p_attribute2       => ''
18294                ,p_attribute3       => ''
18295                ,p_attribute4       => ''
18296                ,p_attribute5       => '');
18297                   END IF;
18298                   RAISE  FND_API.G_EXC_ERROR;
18299 
18300                     END IF;
18301                END IF;
18302      END IF;
18303 
18304            CLOSE l_min_task_start_date_csr;
18305 
18306         END IF;
18307 
18308       -- new project completion date should be > max(task_start_date)
18309 
18310        IF l_update_end_date_flag = 'Y'
18311           --AND p_structure_in.structure_type = 'FINANCIAL'    --bug 2729851    --bug 2738747
18312           AND l_structure_type = 'FINANCIAL'    --bug 2729851                   --bug 2738747
18313        THEN
18314 
18315           OPEN l_max_task_end_date_csr (l_project_id);
18316           FETCH l_max_task_end_date_csr INTO l_max_task_date;
18317 
18318           IF l_max_task_end_date_csr%FOUND
18319           THEN
18320 
18321                IF l_project_completion_date IS NOT NULL
18322                AND l_max_task_date IS NOT NULL
18323                THEN
18324 
18325                    IF l_max_task_date > l_project_completion_date
18326                    THEN
18327 
18328                   CLOSE l_max_task_end_date_csr;
18329       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
18330 
18331                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18332       THEN
18333 /*  The FND_AS_UNEXPECTED_ERROR message is being reported from UPDATE_PROJECT API and modified
18334     the following. Replaced the message name from PA_PR_INVALID_COMPLETION_DATE with
18335     PA_PR_INVALID_COMP_DATE (this is limited to 30 characters after appended with '_AMG') and
18336     p_resize flag from 'Y' in the procedure call pa_interface_utils_pub.map_new_amg_msg to 'N'.
18337     Bug#1916735.
18338 */
18339             pa_interface_utils_pub.map_new_amg_msg
18340               ( p_old_message_code => 'PA_PR_INVALID_COMP_DATE'
18341                ,p_msg_attribute    => 'CHANGE'
18342                ,p_resize_flag      => 'N'
18343                ,p_msg_context      => 'PROJ'
18344                ,p_attribute1       => l_project_rec.segment1
18345                ,p_attribute2       => ''
18346                ,p_attribute3       => ''
18347                ,p_attribute4       => ''
18348                ,p_attribute5       => '');
18349                   END IF;
18350                   RAISE  FND_API.G_EXC_ERROR;
18351 
18352                     END IF;
18353                END IF;
18354     END IF;
18355 
18356           CLOSE l_max_task_end_date_csr;
18357 
18358        END IF;
18359 
18360 -- Call the api to check the task dates
18361 
18362 If G_ParChildTsk_chks_deferred = 'Y' THEN
18363     Pa_project_pvt.check_parent_child_task_dates
18364           (p_project_id        => l_project_id,
18365            p_return_status    =>  l_return_status );
18366 
18367         IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
18368            RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18369         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
18370            RAISE  FND_API.G_EXC_ERROR;
18371         END IF;
18372     G_ParchildTsk_chks_deferred := 'N';
18373 END IF;
18374 
18375 --UPDATE key_members
18376 
18377      l_count := 0;
18378  j := p_key_members.first;
18379  IF p_key_members.exists(j) THEN
18380 
18381      FOR i in 1..p_key_members.COUNT LOOP
18382 
18383       /* Code below is added for Bug 3326468. Start_date of key members is now a mandatory field to
18384          Update_project */
18385            IF p_key_members(i).start_date IS NULL OR
18386         p_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
18387           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18388               THEN
18389                pa_utils.add_message
18390                 ( p_app_short_name   => 'PA'-- new message for bug 3326468
18391                  ,p_msg_name    => 'PA_KEYMBR_NO_START_DATE'
18392                  ,p_token1           => 'PROJECT_NAME'
18393                  ,p_value1           => l_project_rec.segment1
18394                  ,p_token2           => 'PERSON_ID'
18395                  ,p_value2           => p_key_members(i).person_id
18396                  ,p_token3           => 'ROLE_TYPE'
18397                  ,p_value3           => p_key_members(i).project_role_type
18398                 );
18399              END IF;
18400              p_multiple_task_msg := 'F';
18401              RAISE FND_API.G_EXC_ERROR;
18402            END IF;
18403      -- validate the role type introduced for Bug#5196996
18404      OPEN l_project_role_types_csr (p_key_members(i).project_role_type,l_project_id);
18405      FETCH l_project_role_types_csr INTO l_dummy;
18406 
18407      IF l_project_role_types_csr%NOTFOUND THEN
18408 
18409             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18410             THEN
18411                  pa_interface_utils_pub.map_new_amg_msg
18412                    ( p_old_message_code => 'PA_INVALID_ROLE_TYPE'
18413                     ,p_msg_attribute    => 'CHANGE'
18414                     ,p_resize_flag      => 'N'
18415                     ,p_msg_context      => 'PROJ'
18416                     ,p_attribute1       => l_amg_segment1
18417                     ,p_attribute2       => ''
18418                     ,p_attribute3       => ''
18419                     ,p_attribute4       => ''
18420                     ,p_attribute5       => '');
18421             END IF;
18422         CLOSE l_project_role_types_csr;
18423         RAISE  FND_API.G_EXC_ERROR;
18424      ELSE
18425         CLOSE l_project_role_types_csr;
18426      END IF;
18427      -- end of changes for Bug#5196996
18428 
18429 
18430 
18431        /* End of Code changes for Bug 3326468 */
18432           OPEN l_key_member_csr(l_project_id,p_key_members(i).person_id,
18433                                 p_key_members(i).project_role_type ,
18434                 p_key_members(i).start_date); --Added for Bug 3326468
18435           FETCH l_key_member_csr INTO l_key_members_rec;
18436           IF l_key_member_csr%NOTFOUND THEN
18437              CLOSE l_key_member_csr;
18438              -- This means this is a new key member
18439              -- add this to the temp table which will be passed
18440              -- to add_key_members
18441             IF p_key_members(i).project_role_type = 'PROJECT MANAGER' THEN
18442               IF (p_key_members(i).end_date <>
18443                   PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18444                    p_key_members(i).start_date <>
18445                   PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) THEN
18446                  IF p_key_members(i).start_date >
18447                     p_key_members(i).end_date THEN
18448                     IF FND_MSG_PUB.Check_Msg_Level
18449                       (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18450                       pa_interface_utils_pub.map_new_amg_msg
18451                        ( p_old_message_code => 'PA_PR_INVALID_KM_DATES'
18452                         ,p_msg_attribute    => 'CHANGE'
18453                         ,p_resize_flag      => 'N'
18454                         ,p_msg_context      => 'PROJ'
18455                         ,p_attribute1       => l_project_rec.segment1
18456                         ,p_attribute2       => ''
18457                         ,p_attribute3       => ''
18458                         ,p_attribute4       => ''
18459                         ,p_attribute5       => '');
18460                          p_multiple_task_msg   := 'F';
18461 --                       RAISE  FND_API.G_EXC_ERROR;
18462                     END IF;
18463                  END IF;
18464               END IF;
18465 
18466               pa_project_pvt.check_for_one_manager
18467                    (l_project_id,
18468                     p_key_members(i).person_id,
18469                     p_key_members,
18470                     p_key_members(i).start_date,
18471                     p_key_members(i).end_date,
18472                     l_return_status );
18473 
18474                 IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR  THEN
18475                    p_return_status             := l_return_status;
18476                    p_project_out.return_status := l_return_status;
18477                    RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18478                 END IF;
18479              END IF;
18480              IF l_key_members_tbl.EXISTS(1) THEN
18481                 l_count := l_key_members_tbl.COUNT + 1;
18482              ELSE
18483                 l_count := 1;
18484              END IF;
18485              l_key_members_tbl(l_count) := p_key_members(i);
18486 
18487              /*Commented the below code for the bug 2910972 since the null
18488              value for the start date is handled in the pa_project_parties_pub.create_project_party*/
18489 
18490              /*IF l_key_members_tbl(l_count).start_date =
18491                 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
18492                 l_key_members_tbl(l_count).start_date IS NULL THEN
18493                 l_key_members_tbl(l_count).start_date := TRUNC(SYSDATE);
18494              END IF;*/
18495 
18496              /*Bug#2910972-Adding the below code*/
18497 
18498               IF l_key_members_tbl(l_count).start_date =
18499                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18500                    l_key_members_tbl(l_count).start_date := NULL;
18501                 END IF;
18502 
18503              /*Bug#2910972-End of addition*/
18504 
18505              IF l_key_members_tbl(l_count).end_date =
18506                 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18507                 l_key_members_tbl(l_count).end_date := NULL;
18508              END IF;
18509           ELSE
18510                CLOSE l_key_member_csr;
18511                 IF p_key_members(i).start_date <>
18512                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18513                    p_key_members(i).start_date IS NOT NULL THEN
18514                    IF p_key_members(i).start_date <>
18515                       NVL(l_key_members_rec.start_date_active,
18516                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18517                       l_temp_start_date := p_key_members(i).start_date;
18518                    ELSE
18519                       l_temp_start_date := l_key_members_rec.start_date_active;
18520                    END IF;
18521                 ELSE
18522                    l_temp_start_date := l_key_members_rec.start_date_active;
18523                 END IF;
18524                 IF p_key_members(i).end_date <>
18525                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18526                    p_key_members(i).end_date IS NOT NULL THEN
18527                    IF p_key_members(i).end_date <>
18528                       NVL(l_key_members_rec.end_date_active,
18529                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18530                       l_temp_end_date := p_key_members(i).end_date;
18531                    ELSE
18532                       l_temp_end_date := l_key_members_rec.end_date_active;
18533                    END IF;
18534                 ELSE
18535            /* Below if condition Added for bug 3234496 */
18536                    IF p_key_members(i).project_role_type = 'PROJECT MANAGER' THEN
18537                        l_temp_end_date := l_key_members_rec.end_date_active;
18538            ELSE
18539            /* Added code to null out the end date if not proj manager : for bug 3234496 */
18540                If p_key_members(i).end_date is null then
18541               l_temp_end_date := null;
18542                else
18543                   l_temp_end_date := l_key_members_rec.end_date_active;
18544                end if;
18545            END IF;
18546                 END IF;
18547                 IF l_temp_end_date < l_temp_start_date THEN
18548                    p_return_status := FND_API.G_RET_STS_ERROR;
18549                    IF FND_MSG_PUB.Check_Msg_Level
18550                      (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18551                       pa_interface_utils_pub.map_new_amg_msg
18552                        ( p_old_message_code => 'PA_PR_INVALID_KM_DATES'
18553                         ,p_msg_attribute    => 'CHANGE'
18554                         ,p_resize_flag      => 'N'
18555                         ,p_msg_context      => 'PROJ'
18556                         ,p_attribute1       => l_project_rec.segment1
18557                         ,p_attribute2       => ''
18558                         ,p_attribute3       => ''
18559                         ,p_attribute4       => ''
18560                         ,p_attribute5       => '');
18561                          p_multiple_task_msg   := 'F';
18562                   END IF;
18563                 END IF;
18564                 IF (l_temp_start_date <>
18565                           NVL(l_key_members_rec.start_date_active,
18566                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18567                       OR
18568                    (l_temp_end_date <>
18569                           NVL(l_key_members_rec.end_date_active,
18570                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18571                      /* Added the below OR condition for bug 3234496 */
18572               OR
18573             (l_temp_end_date IS NULL AND l_key_members_rec.end_date_active IS NOT NULL)
18574           THEN
18575                    if p_multiple_task_msg <> 'F' then
18576 /*
18577 -- begin OLD code before changes for ROLE BASED SECURITY
18578                    UPDATE PA_PROJECT_PLAYERS SET
18579                           START_DATE_ACTIVE = l_temp_start_date,
18580                           END_DATE_ACTIVE   = l_temp_end_date
18581                    WHERE  ROWID             = l_key_members_rec.rowid;
18582 -- end OLD code before changes for ROLE BASED SECURITY
18583 */
18584 -- begin NEW code for ROLE BASED SECURITY
18585 -- updating START_DATE_ACTIVE and END_DATE_ACTIVE of
18586 -- PA_PROJECT_PLAYERS for the rowid in the cursor
18587    SELECT   COMPLETION_DATE
18588    INTO     v_completion_date
18589    FROM     pa_projects p
18590    WHERE    p.project_id = l_key_members_rec.project_id;
18591    /*Added the OR condition in the below statement for the bug 2846478*/
18592    if l_key_members_rec.scheduled_flag = 'N' OR l_key_members_rec.scheduled_flag IS NULL
18593    then
18594        PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY(
18595           p_api_version => 1.0                  -- p_api_version
18596           , p_init_msg_list => FND_API.G_TRUE   -- p_init_msg_list
18597           , p_commit => FND_API.G_FALSE          -- p_commit
18598           , p_validate_only => FND_API.G_FALSE  -- p_validate_only
18599           , p_validation_level => FND_API.G_VALID_LEVEL_FULL   -- p_validation_level
18600           , p_debug_mode => 'N'                 -- p_debug_mode
18601           , p_object_id => l_key_members_rec.project_id  -- p_object_id
18602           , p_OBJECT_TYPE => 'PA_PROJECTS'         -- p_OBJECT_TYPE
18603           , p_project_role_id => NULL  -------Bug 2100142l_key_members_rec.project_id   -- p_project_role_id
18604           , p_project_role_type => l_key_members_rec.project_role_type -- p_project_role_type
18605           , p_resource_type_id => l_key_members_rec.resource_type_id   -- p_resource_type_id
18606           , p_resource_source_id => l_key_members_rec.person_id   -- p_resource_source_id
18607           , p_resource_name => v_null_char      -- p_resource_name
18608           , p_start_date_active => l_temp_start_date   -- p_start_date_active
18609           , p_scheduled_flag => 'N'             -- p_scheduled_flag
18610           , p_record_version_number => l_key_members_rec.record_version_number --  p_record_version_number
18611           , p_calling_module => 'FORM'          -- p_calling_module
18612           , p_project_id => l_key_members_rec.project_id   -- p_project_id
18613           , p_project_end_date => v_completion_date   -- p_project_end_date
18614           , p_project_party_id => l_key_members_rec.project_party_id  -- p_project_party_id
18615           , p_end_date_active => l_temp_end_date      -- p_end_date_active
18616           , x_wf_type         => l_wf_type
18617           , x_wf_item_type    => l_wf_item_type
18618           , x_wf_process      => l_wf_process
18619           , x_assignment_id   => l_assignment_id
18620           , x_return_status => x_return_status  -- x_return_status
18621           , x_msg_count => x_msg_count          -- x_msg_count
18622           , x_msg_data => x_msg_data            -- x_msg_data
18623           );
18624       IF    (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
18625         p_return_status := x_return_status;
18626         p_msg_count     := x_msg_count;
18627         p_msg_data      := SUBSTR(p_msg_data||x_msg_data,1,2000);
18628                 if    (x_return_status = FND_API.G_RET_STS_ERROR) then
18629                       raise  FND_API.G_EXC_UNEXPECTED_ERROR;
18630                 else  -- (x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR) then
18631                       raise  FND_API.G_EXC_ERROR;
18632                 end if;
18633          END IF;
18634       end if;
18635 -- end NEW code for ROLE BASED SECURITY
18636 
18637                    end if;
18638                 END IF;
18639           END IF;
18640         END LOOP;
18641 
18642       IF p_multiple_task_msg = 'F'
18643       THEN
18644          RAISE  FND_API.G_EXC_ERROR;
18645       END IF;
18646 
18647        IF l_key_members_tbl.COUNT > 0 THEN
18648            PA_PROJECT_PVT.add_key_members (
18649               p_return_status         =>l_return_status,
18650               p_pa_source_template_id =>l_project_rec.created_from_project_id,
18651               p_project_id            =>l_project_id,
18652               p_key_members           =>l_key_members_tbl );
18653               IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR  THEN
18654                  p_return_status             := l_return_status;
18655                  p_project_out.return_status := l_return_status;
18656                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18657               ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
18658                  p_return_status             := l_return_status;
18659                  p_project_out.return_status := l_return_status;
18660                 RAISE  FND_API.G_EXC_ERROR;
18661               END IF;
18662        END IF;
18663 
18664       /* Start of code for bug #2111806
18665          Call the check_manager_date_range to check if the Project
18666      Manager exists for the complete duration of the Project. */
18667       pa_project_check_pvt.check_manager_date_range(p_project_id    =>  l_project_id
18668                                ,p_return_status =>  l_return_status);
18669 
18670       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18671       THEN
18672         p_project_out.return_status := l_return_status;
18673     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18674 
18675       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18676       THEN
18677 
18678     p_project_out.return_status := l_return_status;
18679         RAISE FND_API.G_EXC_ERROR;
18680       END IF;
18681       /* End of code for bug #2111806 */
18682 
18683  END IF;
18684 
18685  /* Start of code for bug #2111806
18686     Throw an error if there are no Project Managers assigned.
18687     This has to be thrown irrespective of whether there are any Key Member records
18688     being passed or not. So, it cannot be done in the above IF condition. */
18689  IF l_project_id IS NOT NULL THEN
18690  OPEN  c_prj(l_project_id);
18691  FETCH c_prj INTO l_proj_status, l_proj_type_class;
18692  CLOSE c_prj;
18693  END IF;
18694 
18695  /* The check has to be done only for an Approved Contract Type project. */
18696  IF (nvl(l_proj_type_class,'NONE') = 'CONTRACT' AND
18697      nvl(l_proj_status,'UNAPPROVED') = 'APPROVED') THEN
18698     OPEN c_prj_count(l_project_id);
18699     FETCH c_prj_count INTO l_prj_mgr_count;
18700     CLOSE c_prj_count;
18701     IF l_prj_mgr_count = 0 THEN
18702        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
18703           pa_utils.add_message
18704         ( p_app_short_name   => 'PA'
18705          ,p_msg_name         => 'PA_PR_INSUF_PROJ_MGR'
18706         );
18707           RAISE FND_API.G_EXC_ERROR;
18708        END IF;
18709     END IF;
18710  END IF;
18711 /* End of code for bug #2111806 */
18712 
18713 --   ----------------------------------------
18714 
18715 -- anlee org role changes
18716 -- UPDATE org roles
18717 
18718    l_count := 0;
18719    j := p_org_roles.first;
18720    IF p_org_roles.exists(j) THEN
18721 
18722      FOR i in 1..p_org_roles.COUNT LOOP
18723           OPEN l_org_role_csr(l_project_id, p_org_roles(i).person_id,
18724                                 p_org_roles(i).project_role_type );
18725           FETCH l_org_role_csr INTO l_org_roles_rec;
18726           IF l_org_role_csr%NOTFOUND THEN
18727              CLOSE l_org_role_csr;
18728              -- This means this is a new org role
18729              -- add this to the temp table which will be passed
18730              -- to add_org_roles
18731 
18732              IF l_org_roles_tbl.EXISTS(1) THEN
18733                 l_count := l_org_roles_tbl.COUNT + 1;
18734              ELSE
18735                 l_count := 1;
18736              END IF;
18737              l_org_roles_tbl(l_count) := p_org_roles(i);
18738              IF l_org_roles_tbl(l_count).start_date =
18739                 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
18740                 l_org_roles_tbl(l_count).start_date IS NULL THEN
18741                 l_org_roles_tbl(l_count).start_date := TRUNC(SYSDATE);
18742              END IF;
18743              IF l_org_roles_tbl(l_count).end_date =
18744                 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18745                 l_org_roles_tbl(l_count).end_date := NULL;
18746              END IF;
18747           ELSE
18748                CLOSE l_org_role_csr;
18749                 IF p_org_roles(i).start_date <>
18750                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18751                    p_org_roles(i).start_date IS NOT NULL THEN
18752                    IF p_org_roles(i).start_date <>
18753                       NVL(l_org_roles_rec.start_date_active,
18754                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18755                       l_temp_start_date := p_org_roles(i).start_date;
18756                    ELSE
18757 
18758                       l_temp_start_date := l_org_roles_rec.start_date_active;
18759                    END IF;
18760                 ELSE
18761                    l_temp_start_date := l_org_roles_rec.start_date_active;
18762                 END IF;
18763                 IF p_org_roles(i).end_date <>
18764                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18765                    p_org_roles(i).end_date IS NOT NULL THEN
18766                    IF p_org_roles(i).end_date <>
18767                       NVL(l_org_roles_rec.end_date_active,
18768                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18769                       l_temp_end_date := p_org_roles(i).end_date;
18770                    ELSE
18771                       l_temp_end_date := l_org_roles_rec.end_date_active;
18772                    END IF;
18773                 ELSE
18774                    l_temp_end_date := l_org_roles_rec.end_date_active;
18775                 END IF;
18776                 IF l_temp_end_date < l_temp_start_date THEN
18777                    p_return_status := FND_API.G_RET_STS_ERROR;
18778                    IF FND_MSG_PUB.Check_Msg_Level
18779                      (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18780                       pa_interface_utils_pub.map_new_amg_msg
18781                        ( p_old_message_code => 'PA_PR_INVALID_OR_DATES'
18782                         ,p_msg_attribute    => 'CHANGE'
18783                         ,p_resize_flag      => 'N'
18784                         ,p_msg_context      => 'PROJ'
18785                         ,p_attribute1       => l_project_rec.segment1
18786                         ,p_attribute2       => ''
18787                         ,p_attribute3       => ''
18788                         ,p_attribute4       => ''
18789                         ,p_attribute5       => '');
18790                          p_multiple_task_msg   := 'F';
18791                   END IF;
18792                 END IF;
18793                 IF (l_temp_start_date <>
18794                           NVL(l_org_roles_rec.start_date_active,
18795                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18796                       OR
18797                    (l_temp_end_date <>
18798                           NVL(l_org_roles_rec.end_date_active,
18799                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)) THEN
18800                    if p_multiple_task_msg <> 'F' then
18801 
18802 
18803    SELECT   COMPLETION_DATE
18804    INTO     v_completion_date
18805    FROM     pa_projects p
18806    WHERE    p.project_id = l_org_roles_rec.project_id;
18807    if l_org_roles_rec.scheduled_flag = 'N'
18808    then
18809        PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY(
18810           p_api_version => 1.0                  -- p_api_version
18811           , p_init_msg_list => FND_API.G_TRUE   -- p_init_msg_list
18812           , p_commit => FND_API.G_FALSE          -- p_commit
18813           , p_validate_only => FND_API.G_FALSE  -- p_validate_only
18814           , p_validation_level => FND_API.G_VALID_LEVEL_FULL   -- p_validation_level
18815           , p_debug_mode => 'N'                 -- p_debug_mode
18816           , p_object_id => l_org_roles_rec.project_id  -- p_object_id
18817           , p_OBJECT_TYPE => 'PA_PROJECTS'         -- p_OBJECT_TYPE
18818           , p_project_role_id => NULL  -------Bug 2100142l_key_members_rec.project_id   -- p_project_role_id
18819           , p_project_role_type => l_org_roles_rec.project_role_type -- p_project_role_type
18820           , p_resource_type_id => l_org_roles_rec.resource_type_id   -- p_resource_type_id
18821           , p_resource_source_id => l_org_roles_rec.resource_source_id   -- p_resource_source_id
18822           , p_resource_name => v_null_char      -- p_resource_name
18823           , p_start_date_active => l_temp_start_date   -- p_start_date_active
18824           , p_scheduled_flag => 'N'             -- p_scheduled_flag
18825           , p_record_version_number => l_org_roles_rec.record_version_number --  p_record_version_number
18826           , p_calling_module => 'FORM'          -- p_calling_module
18827           , p_project_id => l_org_roles_rec.project_id   -- p_project_id
18828           , p_project_end_date => v_completion_date   -- p_project_end_date
18829           , p_project_party_id => l_org_roles_rec.project_party_id  -- p_project_party_id
18830           , p_end_date_active => l_temp_end_date      -- p_end_date_active
18831           , x_wf_type         => l_wf_type
18832           , x_wf_item_type    => l_wf_item_type
18833           , x_wf_process      => l_wf_process
18834           , x_assignment_id   => l_assignment_id
18835           , x_return_status => x_return_status  -- x_return_status
18836           , x_msg_count => x_msg_count          -- x_msg_count
18837           , x_msg_data => x_msg_data            -- x_msg_data
18838           );
18839       IF    (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
18840         p_return_status := x_return_status;
18841         p_msg_count     := x_msg_count;
18842         p_msg_data      := SUBSTR(p_msg_data||x_msg_data,1,2000);
18843                 if    (x_return_status = FND_API.G_RET_STS_ERROR) then
18844                       raise  FND_API.G_EXC_UNEXPECTED_ERROR;
18845                 else  -- (x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR) then
18846                       raise  FND_API.G_EXC_ERROR;
18847                 end if;
18848          END IF;
18849       end if;
18850 
18851                    end if;
18852                 END IF;
18853           END IF;
18854         END LOOP;
18855 
18856       IF p_multiple_task_msg = 'F'
18857       THEN
18858          RAISE  FND_API.G_EXC_ERROR;
18859       END IF;
18860 
18861        IF l_org_roles_tbl.COUNT > 0 THEN
18862            PA_PROJECT_PVT.add_org_roles (
18863               p_return_status         =>l_return_status,
18864               p_pa_source_template_id =>l_project_rec.created_from_project_id,
18865               p_project_id            =>l_project_id,
18866               p_org_roles           =>l_org_roles_tbl );
18867               IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR  THEN
18868                  p_return_status             := l_return_status;
18869                  p_project_out.return_status := l_return_status;
18870                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18871               ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
18872                  p_return_status             := l_return_status;
18873                  p_project_out.return_status := l_return_status;
18874                 RAISE  FND_API.G_EXC_ERROR;
18875               END IF;
18876        END IF;
18877 
18878  END IF;
18879 
18880 
18881 --UPDATE class_categories
18882 
18883   i := p_class_categories.first;
18884 
18885   IF p_class_categories.exists(i) THEN
18886 
18887      WHILE i IS NOT NULL LOOP
18888 
18889        IF (p_class_categories(i).class_category <>
18890           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
18891           (p_class_categories(i).class_category IS NOT NULL )
18892        AND (p_class_categories(i).class_code <>
18893           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
18894           (p_class_categories(i).class_code IS NOT NULL ) THEN
18895 
18896            -- Start of Addition for bug 4191009
18897            class_code_tbl.delete();
18898            l_class_code := NULL;
18899            l_code_percentage := NULL;
18900            OPEN l_class_categories_csr (l_project_id,
18901                                         p_class_categories(i).class_category);
18902            FETCH l_class_categories_csr BULK COLLECT INTO class_code_tbl;
18903 
18904            If class_code_tbl.count<1 Then
18905                 l_class_categories_tbl(i) := p_class_categories(i);
18906            Else
18907                 for j in class_code_tbl.first..class_code_tbl.last Loop
18908                 If class_code_tbl.exists(j) then
18909                       if class_code_tbl(j) = p_class_categories(i).class_code then
18910                          if (p_class_categories(i).new_class_code <>
18911                            PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
18912                            (p_class_categories(i).new_class_code IS NOT NULL ) THEN -- 5348726 Added for bug#5294891
18913                              --remove the old class_code
18914                              DELETE FROM pa_project_classes
18915                               WHERE project_id   = l_project_id
18916                               AND   class_category   = p_class_categories(i).class_category
18917                               AND   class_code  = p_class_categories(i).class_code;
18918 
18919                              OPEN c_get_class_code_id(p_class_categories(i).class_category,
18920                                                      p_class_categories(i).class_code);
18921                              fetch c_get_class_code_id into l_old_class_code_id;
18922                              close c_get_class_code_id;
18923 
18924                              OPEN c_get_class_code_id(p_class_categories(i).class_category,
18925                                                      p_class_categories(i).new_class_code);
18926                              fetch c_get_class_code_id into l_new_class_code_id;
18927                              if c_get_class_code_id%notfound then
18928                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18929                                  THEN
18930                                           pa_interface_utils_pub.map_new_amg_msg
18931                                            ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
18932                                            ,p_msg_attribute    => 'CHANGE'
18933                                            ,p_resize_flag      => 'N'
18934                                            ,p_msg_context      => 'PROJ'
18935                                            ,p_attribute1       => l_project_rec.segment1
18936                                            ,p_attribute2       => ''
18937                                            ,p_attribute3       => ''
18938                                            ,p_attribute4       => ''
18939                                            ,p_attribute5       => '');
18940                                  END IF;
18941                                  close c_get_class_code_id;
18942                                  RAISE FND_API.G_EXC_ERROR;
18943                              end if;
18944                              close c_get_class_code_id;
18945 
18946                              PA_USER_ATTR_PUB.DELETE_USER_ATTRS_DATA (
18947                                     p_validate_only             => FND_API.G_FALSE
18948                                     ,p_project_id                => l_project_id
18949                                     ,p_old_classification_id     => l_old_class_code_id
18950                                     ,p_new_classification_id     => l_new_class_code_id
18951                                     ,p_classification_type       => 'CLASS_CODE'
18952                                     ,x_return_status             => l_return_status
18953                                     ,x_msg_count                 => l_msg_count
18954                                     ,x_msg_data                  => l_msg_data );
18955                              l_msg_count := FND_MSG_PUB.count_msg;
18956                              IF l_msg_count > 0 THEN
18957                                  x_msg_count := l_msg_count;
18958                                  x_return_status := 'E';
18959                                  RAISE  FND_API.G_EXC_ERROR;
18960                              END IF;
18961                               --Add the new class code values to the temp table
18962                              l_class_categories_tbl(i) := p_class_categories(i);
18963                              l_class_categories_tbl(i).class_code := p_class_categories(i).new_class_code;
18964                          else -- 5348726 Added for bug#5294891
18965                             OPEN l_code_percentage_csr (l_project_id,
18966                                                 p_class_categories(i).class_category,
18967                                                 p_class_categories(i).class_code);
18968                             fetch l_code_percentage_csr into l_code_percentage;
18969                             If l_code_percentage = p_class_categories(i).code_percentage then
18970                               Null;
18971                             Else
18972                                 --remove the old class_code
18973                                  DELETE FROM pa_project_classes
18974                                       WHERE project_id   = l_project_id
18975                                       AND   class_category   = p_class_categories(i).class_category
18976                                       AND   class_code  = p_class_categories(i).class_code;
18977                                     --and add the new values  to the temp table
18978                                      l_class_categories_tbl(i) := p_class_categories(i);
18979                             End if;
18980                             CLOSE l_code_percentage_csr;
18981                          end if;  -- 5348726 Added for bug#5294891
18982                          l_class_code := class_code_tbl(j);
18983                          exit;
18984                  end if;
18985         end if;
18986         end loop;
18987         if l_class_code is null then
18988             l_class_categories_tbl(i) := p_class_categories(i);
18989         end if;
18990       end if;
18991       CLOSE l_class_categories_csr;
18992     -- End of addition for bug 4191009
18993 
18994     /* Commented and altered as above for bug 4191009
18995        OPEN l_class_categories_csr (l_project_id,
18996                                         p_class_categories(i).class_category);
18997            FETCH l_class_categories_csr INTO l_class_code;
18998 
18999            IF l_class_categories_csr%NOTFOUND THEN
19000               l_class_categories_tbl(i) := p_class_categories(i);
19001            ELSE
19002                 IF l_class_code = p_class_categories(i).class_code THEN
19003                 --if new value for class_code is same as old do nothing
19004         NULL;
19005     ELSE
19006        --remove the old class_code
19007       DELETE FROM pa_project_classes
19008       WHERE project_id   = l_project_id
19009       AND   class_category   = p_class_categories(i).class_category
19010       AND   class_code  = l_class_code;
19011     --and add the new value for class_code to the temp table
19012     l_class_categories_tbl(i) := p_class_categories(i);
19013                END IF;
19014            END IF;
19015 
19016         CLOSE l_class_categories_csr;
19017 
19018   l_class_code := NULL;    Commented till here and altered as above for bug 4191009    */
19019 
19020      END IF;  --  IF (p_class_categories(i).class_category <>
19021                  --  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19022      i := p_class_categories.next(i);
19023 
19024   END LOOP;
19025 
19026  END IF; --  IF p_class_categories.exists(i)
19027 
19028    i := l_class_categories_tbl.first;
19029 
19030          IF l_class_categories_tbl.exists(i)
19031          THEN
19032 
19033             PA_PROJECT_PVT.add_class_categories ( p_return_status         =>l_return_status
19034                       , p_pa_source_template_id =>l_project_rec.created_from_project_id
19035                       , p_project_id            =>l_project_id
19036                       , p_class_categories      =>l_class_categories_tbl );
19037 
19038               IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
19039               THEN
19040 
19041                  p_project_out.return_status := l_return_status;
19042                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
19043 
19044               ELSIF l_return_status = FND_API.G_RET_STS_ERROR
19045               THEN
19046 
19047                  p_project_out.return_status := l_return_status;
19048                  RAISE  FND_API.G_EXC_ERROR;
19049 
19050               END IF;
19051           END IF;
19052 
19053 -- bug 4541103        CLOSE l_lock_rows_csr;  --FYI: doesn't remove locks
19054 /*Customer Account Relationship Changes update bill to and Ship to customer ID*/
19055 
19056 --bug 3716805
19057 ----dbms_output.put_line('Value OF p_project_in.bill_to_customer_id'||p_project_in.bill_to_customer_id);
19058 ----dbms_output.put_line('Value OF p_project_in.ship_to_customer_id'||p_project_in.ship_to_customer_id);
19059 ----dbms_output.put_line('Value OF p_project_in.customer_id'||p_project_in.customer_id);
19060 ----dbms_output.put_line('Value OF p_project_in.bill_to_address_id'||p_project_in.bill_to_address_id);
19061 ----dbms_output.put_line('Value OF p_project_in.ship_to_address_id'||p_project_in.ship_to_address_id);
19062 ------dbms_output.put_line('Value OF p_project_in.bill_to_customer_id'||p_project_in.bill_to_customer_id);
19063 
19064 -- Added the following logic for updating the Project Relationship code. Bug#5131471
19065 --Opened the following cursor because thru project record we can update only the attributes of an exsiting customer. We cannot add a new customer
19066 --or over write the existing customer with a totally new customer.
19067 
19068 IF ( p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN -- check if the customer passed is not null and not mis num
19069    Open Cur_Customer(l_project_id,p_project_in.customer_id);
19070    Fetch Cur_Customer into Cur_Customer_rec;
19071 
19072    IF (Cur_Customer%FOUND) THEN
19073 
19074         If (p_project_in.project_relationship_code IS NOT NULL AND p_project_in.project_relationship_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
19075 
19076                 --dbms_output.put_line('three'||l_check_relationship_flag);
19077                 OPEN  cur_customer_status(p_project_in.customer_id);
19078                 FETCH cur_customer_status INTO l_cust_status;
19079 
19080                         IF (  cur_customer_status%NOTFOUND ) THEN
19081                                 --dbms_output.put_line('five'||l_check_relationship_flag);
19082                                 --passed customer does not exist
19083                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19084                                             --Changed the error message from PA_CUSTOMER_NOT_EXIST to PA_CUSTOMER_ID_INVALID for Bug#5183150
19085                                             pa_utils.add_message
19086                                                         ( p_app_short_name   => 'PA'
19087                                                          ,p_msg_name         => 'PA_CUSTOMER_ID_INVALID'
19088                                                         );
19089                                 END IF;
19090                                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19091                                 p_return_status             := FND_API.G_RET_STS_ERROR;
19092                                 RAISE FND_API.G_EXC_ERROR;
19093 
19094                         ELSIF ( cur_customer_status%FOUND ) THEN
19095                                 --dbms_output.put_line('four'||l_check_relationship_flag);
19096                                 IF ( l_cust_status = 'I' ) THEN
19097                                         --customer is not active
19098                                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19099                                            pa_utils.add_message
19100                                                         ( p_app_short_name   => 'PA'
19101                                                          ,p_msg_name         => 'PA_CUSTOMER_NOT_ACTIVE'
19102                                                          ,p_token1           => 'PROJECT_NAME'
19103                                                          ,p_value1           => l_project_rec.segment1
19104                                                          ,p_token2           => 'CUSTOMER_ID'
19105                                                          ,p_value2           => p_project_in.customer_id
19106                                                         );
19107                                         END IF;
19108                                         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19109                                         p_return_status             := FND_API.G_RET_STS_ERROR;
19110                                         RAISE FND_API.G_EXC_ERROR;
19111 
19112                                 ELSE  --customer id is not null and it is valid
19113 
19114 
19115                                                 UPDATE pa_project_customers
19116                                                 SET
19117                                                 project_relationship_code = p_project_in.project_relationship_code
19118                                                 WHERE
19119                                                 customer_id     =       p_project_in.customer_id        AND
19120                                                 project_id      =       l_project_id;
19121 
19122                                 END IF;
19123                         END IF; -- if cur_customer_status%NOTFOUND
19124                 CLOSE cur_customer_status;
19125 
19126         END IF; --Project relationship code is not null and not mis num
19127 
19128    END IF; --Cur_Customer%FOUND
19129    Close Cur_Customer;
19130 
19131 END IF; --customer id is not passed as null or mis num
19132 
19133 -- End of logic added for Bug#5131471 for updating the Project Relationship code.
19134 
19135     If (p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19136        OR (p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19137 --bug 3716805
19138     THEN
19139      If p_project_in.customer_id IS NULL OR p_project_in.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19140        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19141             THEN
19142             pa_interface_utils_pub.map_new_amg_msg
19143             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
19144              ,p_msg_attribute    => 'CHANGE'
19145              ,p_resize_flag      => 'N'
19146              ,p_msg_context      => 'PROJ'
19147              ,p_attribute1       => l_project_in_rec.pm_project_reference
19148              ,p_attribute2       => ''
19149              ,p_attribute3       => ''
19150              ,p_attribute4       => ''
19151              ,p_attribute5       => '');
19152             END IF;
19153             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19154             p_return_status             := FND_API.G_RET_STS_ERROR;
19155             RAISE FND_API.G_EXC_ERROR;
19156     end if;
19157 
19158      Open Cur_Customer(l_project_id,p_project_in.customer_id);
19159      Fetch Cur_Customer into Cur_Customer_rec;
19160      Close Cur_Customer;
19161 
19162    l_bill_to_customer_id:=p_project_in.bill_to_customer_id;
19163    l_ship_to_customer_id:=p_project_in.ship_to_customer_id;
19164  --added for bug 3911782
19165    l_bill_to_address_id :=p_project_in.bill_to_address_id;
19166    l_ship_to_address_id :=p_project_in.ship_to_address_id;
19167    --changes end for Bug 3911782
19168 
19169 /* Bug 3077676 Begin */
19170 
19171  -- Not adding this error message in get_customer_info as that is called from lot of other places too
19172  -- and it would be a risk changing that.
19173 
19174    OPEN get_cust_acc_rel_code;
19175    FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
19176    CLOSE get_cust_acc_rel_code;
19177 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done below before
19178    calling get_customer_info api.
19179    IF NVL(l_cust_acc_rel_code,'N') ='N'
19180            AND p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19181        AND p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19182        AND p_project_in.ship_to_customer_id  IS NOT NULL AND p_project_in.ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19183        AND p_project_in.customer_id <> p_project_in.bill_to_customer_id
19184        AND p_project_in.customer_id <> p_project_in.ship_to_customer_id
19185    THEN
19186             pa_interface_utils_pub.map_new_amg_msg
19187               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19188                ,p_msg_attribute    => 'CHANGE'
19189                ,p_resize_flag      => 'Y'
19190                ,p_msg_context      => 'PROJ'
19191                ,p_attribute1       => p_project_in.pm_project_reference
19192                ,p_attribute2       => ''
19193                ,p_attribute3       => ''
19194                ,p_attribute4       => ''
19195                ,p_attribute5       => '');
19196            RAISE FND_API.G_EXC_ERROR;
19197    END IF;
19198    */
19199 /* Bug 3077676 End */
19200 
19201 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
19202    If (p_project_in.bill_to_customer_id is null or p_project_in.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19203       and  Cur_Customer_rec.bill_to_customer_id is not null  Then
19204        l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
19205         --changes for bug 3911782
19206       If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19207           and  Cur_Customer_rec.bill_to_address_id is not null  Then
19208           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19209       End if;
19210     Else
19211       If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19212           and  Cur_Customer_rec.bill_to_address_id is not null  Then
19213           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19214        End if;
19215       --changes end for bug 3911782
19216    end if;
19217 
19218     If (p_project_in.ship_to_customer_id is null or p_project_in.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19219       and  Cur_Customer_rec.ship_to_customer_id is not null  Then
19220        l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
19221         --changes for bug 3911782
19222       If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19223           and  Cur_Customer_rec.ship_to_address_id is not null  Then
19224           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19225       End if;
19226      Else
19227       If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19228           and  Cur_Customer_rec.ship_to_address_id is not null  Then
19229           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19230       End if;
19231        --changes end for bug 3911782
19232    end if;
19233 
19234  -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
19235    -- relations ship code is N.
19236 ----dbms_output.put_line('Value OF p_project_in.bill_to_address_id'||p_project_in.bill_to_address_id);
19237 ----dbms_output.put_line('Value OF p_project_in.ship_to_address_id'||p_project_in.ship_to_address_id);
19238 
19239     IF(NVL(l_cust_acc_rel_code,'N') ='N' and
19240       p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
19241     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19242       p_project_in.customer_id <> l_bill_to_customer_id
19243      ) or
19244      (
19245       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19246       p_project_in.customer_id <> l_ship_to_customer_id
19247     ))
19248    THEN
19249             pa_interface_utils_pub.map_new_amg_msg
19250               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19251                ,p_msg_attribute    => 'CHANGE'
19252                ,p_resize_flag      => 'Y'
19253                ,p_msg_context      => 'PROJ'
19254                ,p_attribute1       => l_project_in_rec.pm_project_reference
19255                ,p_attribute2       => ''
19256                ,p_attribute3       => ''
19257                ,p_attribute4       => ''
19258                ,p_attribute5       => '');
19259            RAISE FND_API.G_EXC_ERROR;
19260    END IF;
19261 
19262      pa_customer_info.get_customer_info( X_project_ID                   => l_project_id,
19263                                          X_Customer_Id                  => p_project_in.customer_id
19264                                         ,X_Bill_To_Customer_Id          => l_bill_to_customer_id
19265                                         ,X_Ship_To_Customer_Id          => l_ship_to_customer_id
19266                                         ,X_Bill_To_Address_Id           => l_bill_to_address_id
19267                                         ,X_Ship_To_Address_Id           => l_ship_to_address_id
19268                                         ,X_Bill_To_Contact_Id           => l_bill_to_contact_id
19269                                         ,X_Ship_To_Contact_Id           => l_ship_to_contact_id
19270                                         ,X_Err_Code                     => l_err_code
19271                                         ,X_Err_Stage                    => l_err_stage
19272                                         ,X_Err_Stack                    => l_err_stack
19273                                         ,p_calling_module               => 'AMG' --added for bug#4770535
19274                                        );
19275 
19276 --dbms_output.put_line('Value OF l_bill_to_customer_id'||l_bill_to_customer_id);
19277 --dbms_output.put_line('Value OF l_ship_to_customer_id'||l_ship_to_customer_id);
19278 --dbms_output.put_line('Value OF l_bill_to_address_id'||l_bill_to_address_id);
19279 --dbms_output.put_line('Value OF l_ship_to_address_id'||l_ship_to_address_id);
19280 --dbms_output.put_line('Value OF l_bill_to_contact_id'||l_bill_to_contact_id);
19281 --dbms_output.put_line('Value OF l_ship_to_contact_id'||l_ship_to_contact_id);
19282     -- For this API,error code 10 is a warning.Anything above 10 is an error
19283         IF l_err_code > 10
19284         THEN
19285 
19286                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19287                 THEN
19288 
19289                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
19290                         THEN
19291             pa_interface_utils_pub.map_new_amg_msg
19292               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19293                ,p_msg_attribute    => 'CHANGE'
19294                ,p_resize_flag      => 'Y'
19295                ,p_msg_context      => 'PROJ'
19296                ,p_attribute1       => l_project_in_rec.pm_project_reference
19297                ,p_attribute2       => ''
19298                ,p_attribute3       => ''
19299                ,p_attribute4       => ''
19300                ,p_attribute5       => '');
19301          ELSE
19302             pa_interface_utils_pub.map_new_amg_msg
19303               ( p_old_message_code => l_err_stage
19304                ,p_msg_attribute    => 'CHANGE'
19305                ,p_resize_flag      => 'Y'
19306                ,p_msg_context      => 'PROJ'
19307                ,p_attribute1       => l_project_in_rec.pm_project_reference
19308                ,p_attribute2       => ''
19309                ,p_attribute3       => ''
19310                ,p_attribute4       => ''
19311                ,p_attribute5       => '');
19312                         END IF;
19313 
19314                 END IF;
19315 
19316                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19317                 RAISE FND_API.G_EXC_ERROR;
19318 
19319           ELSIF l_err_code < 0
19320         THEN
19321 
19322                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
19323                 THEN
19324             pa_interface_utils_pub.map_new_amg_msg
19325               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19326                ,p_msg_attribute    => 'CHANGE'
19327                ,p_resize_flag      => 'Y'
19328                ,p_msg_context      => 'PROJ'
19329                ,p_attribute1       => l_project_in_rec.pm_project_reference
19330                ,p_attribute2       => ''
19331                ,p_attribute3       => ''
19332                ,p_attribute4       => ''
19333                ,p_attribute5       => '');
19334                 END IF;
19335 
19336                 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19337                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19338         END IF;
19339 
19340 /* Update the project customer information */
19341 ----dbms_output.put_line('before update ');
19342              Update Pa_project_customers
19343              Set bill_to_customer_id=l_bill_to_customer_id,
19344                  ship_to_customer_id=l_ship_to_customer_id,
19345                  Bill_To_Address_Id =l_bill_to_address_id,
19346                  Ship_to_address_id =l_ship_to_address_id
19347              where project_id=l_project_id
19348              and customer_id=p_project_in.customer_id;
19349 
19350  If p_project_in.bill_to_customer_id is not null and  p_project_in.bill_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
19351         Delete pa_project_contacts
19352         where Project_Id=l_project_id
19353         and customer_id=p_project_in.customer_id
19354         and Project_Contact_Type_Code='BILLING';
19355 
19356 end if;
19357 
19358 If p_project_in.ship_to_customer_id is not null and  p_project_in.ship_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
19359         Delete pa_project_contacts
19360         where Project_Id=l_project_id
19361         and customer_id=p_project_in.customer_id
19362         and Project_Contact_Type_Code='SHIPPING';
19363 
19364   end if;
19365 
19366 
19367  end if;
19368 
19369 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value
19370 -- using the local variable instead of cursor variable
19371 
19372 /** Below code added for bug 3279981. Customer at Top Task in FP_M  */
19373 --IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 commented
19374 IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_old_cust_top_task_flag THEN -- 4188765 added
19375 --Enabling the customer at top task flag. Thus, we need to set the default top task customer
19376      DECLARE
19377           hghst_ctr_cust_id NUMBER;
19378           hghst_ctr_cust_name hz_parties.party_name%TYPE;   --VARCHAR2(50); Bug 5622539
19379           hghst_ctr_cust_num  hz_parties.party_number%TYPE; --VARCHAR2(30); Bug 5622539
19380 
19381           l_return_status VARCHAR2(10);
19382           l_msg_count     NUMBER := 0;
19383           l_msg_data      VARCHAR2(2000);
19384           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
19385      BEGIN
19386           -- l_exclude_cust_id_tbl(1) := 0; Bug 5622539
19387           --Retrieve the customer to be set as the default top task customer
19388           pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
19389                                            P_API_VERSION            => 1.0
19390                                          , P_INIT_MSG_LIST          => 'T'
19391                                          , P_COMMIT                 => 'F'
19392                                          , P_VALIDATE_ONLY          => 'F'
19393                                          , P_VALIDATION_LEVEL       => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19394                                          , P_DEBUG_MODE             => 'N'
19395                                          , p_calling_module         => 'AMG'
19396                                          , p_project_id             => l_project_id
19397                                          , p_exclude_cust_id_tbl    => l_exclude_cust_id_tbl
19398                                          , x_highst_contr_cust_id   => hghst_ctr_cust_id
19399                                          , x_highst_contr_cust_name => hghst_ctr_cust_name
19400                                          , x_highst_contr_cust_num  => hghst_ctr_cust_num
19401                                          , x_return_status          => l_return_status
19402                                          , x_msg_count              => l_msg_count
19403                                          , x_msg_data               => l_msg_data );
19404 
19405 	  -- Bug 5622539
19406           if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19407             l_msg_count := FND_MSG_PUB.count_msg;
19408             if l_msg_count = 1 then
19409                 PA_INTERFACE_UTILS_PUB.get_messages
19410                   (p_encoded        => FND_API.G_FALSE,
19411                    p_msg_index      => 1,
19412                    p_msg_count      => l_msg_count,
19413                    p_msg_data       => l_msg_data,
19414                    p_data           => l_msg_data,
19415                    p_msg_index_out  => l_msg_index_out);
19416 
19417             end if;
19418             If l_return_status = FND_API.G_RET_STS_ERROR THEN
19419                    p_project_out.return_status := l_return_status;
19420                    RAISE FND_API.G_EXC_ERROR;
19421             else
19422                    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19423                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19424             END if;
19425           end if;
19426          -- Bug 5622539
19427 
19428           IF hghst_ctr_cust_id IS NOT null THEN
19429                 --This API call will update pa_project_customers and pa_tasks
19430                  pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
19431                                                       P_API_VERSION            => 1.0
19432                                                     , P_INIT_MSG_LIST          => 'T'
19433                                                     , P_COMMIT                 => 'F'
19434                                                     , P_VALIDATE_ONLY          => 'F'
19435                                                     , P_VALIDATION_LEVEL       => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19436                                                     , P_DEBUG_MODE             => 'N'
19437                                                     , p_calling_module         => 'AMG'
19438                                                     , p_mode                   => 'ENABLE'
19439                                                     , p_project_id             => l_project_id
19440                                                     , p_def_top_task_cust      => hghst_ctr_cust_id
19441                                                     , p_contr_update_cust      => null
19442                                                     , x_return_status          => l_return_status
19443                                                     , x_msg_count              => l_msg_count
19444                                                     , x_msg_data               => l_msg_data );
19445 
19446 		-- Bug 5622539
19447                 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19448                     l_msg_count := FND_MSG_PUB.count_msg;
19449                     if l_msg_count = 1 then
19450                         PA_INTERFACE_UTILS_PUB.get_messages
19451                         (p_encoded        => FND_API.G_FALSE,
19452                         p_msg_index      => 1,
19453                         p_msg_count      => l_msg_count,
19454                         p_msg_data       => l_msg_data,
19455                         p_data           => l_msg_data,
19456                         p_msg_index_out  => l_msg_index_out);
19457 
19458                     end if;
19459                     If l_return_status = FND_API.G_RET_STS_ERROR THEN
19460                         p_project_out.return_status := l_return_status;
19461                         RAISE FND_API.G_EXC_ERROR;
19462                     else
19463                         p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19464                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19465                     END if;
19466                 end if;
19467                 -- Bug 5622539
19468 
19469           END IF;
19470      END ;
19471 END IF;
19472 
19473 --IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 Commented
19474 IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_old_cust_top_task_flag THEN -- 4188765 Added
19475 --Disabling the customer at top task flag. Thus, we need to set the customer bill split for the project customers
19476      DECLARE
19477           cust_id                PA_PROJECT_CUSTOMERS.customer_id%TYPE;
19478           hghst_ctr_cust_id      NUMBER;
19479            hghst_ctr_cust_name hz_parties.party_name%TYPE;  --VARCHAR2(50); Bug 5622539
19480           hghst_ctr_cust_num  hz_parties.party_number%TYPE; --VARCHAR2(30); Bug 5622539
19481          -- num_customers          NUMBER := 0; bug 5622539
19482           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
19483 
19484           l_return_status VARCHAR2(10);
19485           l_msg_count     NUMBER := 0;
19486           l_msg_data      VARCHAR2(2000);
19487           CURSOR cur_get_def_top_task_cust IS
19488           SELECT customer_id
19489           FROM   pa_project_customers
19490           WHERE  project_id = l_project_id
19491           AND    default_top_task_cust_flag = 'Y' ;
19492      BEGIN
19493         -- l_exclude_cust_id_tbl(1) := 0; Bug 5622539
19494          --Retrieve the customer to be updated with 100% contribution
19495          pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
19496                                            P_API_VERSION            => 1.0
19497                                          , P_INIT_MSG_LIST          => 'T'
19498                                          , P_COMMIT                 => 'F'
19499                                          , P_VALIDATE_ONLY          => 'F'
19500                                          , P_VALIDATION_LEVEL       => FND_API.G_VALID_LEVEL_FULL --100 bug 5622539
19501                                          , P_DEBUG_MODE             => 'N'
19502                                          , p_calling_module         => 'AMG'
19503                                          , p_project_id             => l_project_id
19504                                          , p_exclude_cust_id_tbl    => l_exclude_cust_id_tbl
19505                                          , x_highst_contr_cust_id   => hghst_ctr_cust_id
19506                                          , x_highst_contr_cust_name => hghst_ctr_cust_name
19507                                          , x_highst_contr_cust_num  => hghst_ctr_cust_num
19508                                          , x_return_status          => l_return_status
19509                                          , x_msg_count              => l_msg_count
19510                                          , x_msg_data               => l_msg_data );
19511 
19512           -- Bug 5622539
19513             if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19514                 l_msg_count := FND_MSG_PUB.count_msg;
19515                 if l_msg_count = 1 then
19516                     PA_INTERFACE_UTILS_PUB.get_messages
19517                     (p_encoded        => FND_API.G_FALSE,
19518                     p_msg_index      => 1,
19519                     p_msg_count      => l_msg_count,
19520                     p_msg_data       => l_msg_data,
19521                     p_data           => l_msg_data,
19522                     p_msg_index_out  => l_msg_index_out);
19523 
19524                 end if;
19525                 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19526                     p_project_out.return_status := l_return_status;
19527                     RAISE FND_API.G_EXC_ERROR;
19528                 else
19529                     p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19530                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19531                 END if;
19532             end if;
19533           -- Bug 5622539
19534           OPEN  cur_get_def_top_task_cust;
19535           FETCH cur_get_def_top_task_cust INTO cust_id;
19536           CLOSE cur_get_def_top_task_cust;
19537 
19538           IF hghst_ctr_cust_id IS NOT NULL THEN
19539                 --This API call will update pa_project_customers and pa_tasks
19540                  pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
19541                                                       P_API_VERSION            => 1.0
19542                                                     , P_INIT_MSG_LIST          => 'T'
19543                                                     , P_COMMIT                 => 'F'
19544                                                     , P_VALIDATE_ONLY          => 'F'
19545                                                     , P_VALIDATION_LEVEL       => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19546                                                     , P_DEBUG_MODE             => 'N'
19547                                                     , p_calling_module         => 'AMG'
19548                                                     , p_mode                   => 'DISABLE'
19549                                                     , p_project_id             => l_project_id
19550                                                     , p_def_top_task_cust      => cust_id
19551                                                     , p_contr_update_cust      => hghst_ctr_cust_id
19552                                                     , x_return_status          => l_return_status
19553                                                     , x_msg_count              => l_msg_count
19554                                                     , x_msg_data               => l_msg_data );
19555 
19556                       -- Bug 5622539
19557                  if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19558                     l_msg_count := FND_MSG_PUB.count_msg;
19559                     if l_msg_count = 1 then
19560                         PA_INTERFACE_UTILS_PUB.get_messages
19561                         (p_encoded        => FND_API.G_FALSE,
19562                         p_msg_index      => 1,
19563                         p_msg_count      => l_msg_count,
19564                         p_msg_data       => l_msg_data,
19565                         p_data           => l_msg_data,
19566                         p_msg_index_out  => l_msg_index_out);
19567 
19568                     end if;
19569                     If l_return_status = FND_API.G_RET_STS_ERROR THEN
19570                         p_project_out.return_status := l_return_status;
19571                         RAISE FND_API.G_EXC_ERROR;
19572                     else
19573                         p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19574                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19575                     END if;
19576                  end if;
19577               -- Bug 5622539
19578           END IF;
19579      END;
19580 END IF;
19581 
19582 ------------------------------------------------------------------------------------------------------------
19583 /* This code is newly added.It has few checks that were present in the initial code for p_project_in_rec_type.
19584 customer_id and few new validation of code.  The above code is left untouched as it would have caused regression otherwise.
19585 We continue to support updation of single customer record via p_project_in_rec_type.customer_id. */
19586 -----------------------------------------------------------------------------------------------------------
19587 ----dbms_output.put_line('The control comes till this point');
19588 /* Tracking bug ..customer code added in a loop */
19589 i := p_customers_in.first;
19590 IF p_customers_in.exists(i) THEN
19591    WHILE i IS NOT NULL LOOP
19592       --dbms_output.put_line('if CUSTOMER ARE PASSED TO UPDATE_PROJECT ');
19593       --dbms_output.put_line('p_customers_in(i).PROJECT_RELATIONSHIP_CODE'||p_customers_in(i).PROJECT_RELATIONSHIP_CODE);
19594 -- All this should be done in a loop **/ ADITI_START
19595 
19596 /*Customer Account Relationship Changes update bill to and Ship to customer ID*/
19597 
19598 --bug 3716805
19599    /* Commented for tracking Bug
19600    If (p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19601        OR (p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19602 --bug 3716805
19603     THEN
19604      If p_project_in.customer_id IS NULL OR p_project_in.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19605        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19606             THEN
19607             pa_interface_utils_pub.map_new_amg_msg
19608             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
19609              ,p_msg_attribute    => 'CHANGE'
19610              ,p_resize_flag      => 'N'
19611              ,p_msg_context      => 'PROJ'
19612              ,p_attribute1       => l_project_in_rec.pm_project_reference
19613              ,p_attribute2       => ''
19614              ,p_attribute3       => ''
19615              ,p_attribute4       => ''
19616              ,p_attribute5       => '');
19617             END IF;
19618             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19619             p_return_status             := FND_API.G_RET_STS_ERROR;
19620             RAISE FND_API.G_EXC_ERROR;
19621     end if;*/
19622 
19623  /** changed FROM p_project_in.customer_id to p_customers_in(i).custmer_id in all places **/
19624     If (p_customers_in(i).bill_to_customer_id IS NOT NULL AND p_customers_in(i).bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19625        OR (p_customers_in(i).ship_to_customer_id IS NOT NULL AND p_customers_in(i).ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19626         OR (p_customers_in(i).CONTACT_ID IS NOT NULL AND p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)--added for tracking bug by aditi
19627 --bug 3716805
19628     THEN
19629      --dbms_output.put_line('comes into karthiks 0th else');
19630       If p_customers_in(i).customer_id IS NULL OR p_customers_in(i).customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19631        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19632             THEN
19633             pa_interface_utils_pub.map_new_amg_msg
19634             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
19635              ,p_msg_attribute    => 'CHANGE'
19636              ,p_resize_flag      => 'N'
19637              ,p_msg_context      => 'PROJ'
19638              ,p_attribute1       => l_project_in_rec.pm_project_reference
19639              ,p_attribute2       => ''
19640              ,p_attribute3       => ''
19641              ,p_attribute4       => ''
19642              ,p_attribute5       => '');
19643             END IF;
19644             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19645             p_return_status             := FND_API.G_RET_STS_ERROR;
19646             RAISE FND_API.G_EXC_ERROR;
19647     end if;
19648 --dbms_output.put_line('comes into karthiks 0th end if');
19649 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
19650 
19651    /* Bug 3077676 Begin */
19652 
19653  -- Not adding this error message in get_customer_info as that is called from lot of other places too
19654  -- and it would be a risk changing that.
19655    OPEN get_cust_acc_rel_code;
19656    FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
19657    CLOSE get_cust_acc_rel_code;
19658 
19659    /* Moved cursor get_cust_acc_rel_code from below to above for tracking bug */
19660 
19661 
19662 
19663    --Open Cur_Customer(l_project_id,p_project_in.customer_id); --Commented for tracking bug
19664      Open Cur_Customer(l_project_id,p_customers_in(i).customer_id); --Added for tracking Bug
19665      Fetch Cur_Customer into Cur_Customer_rec;
19666      If Cur_Customer%NOTFOUND THEN --added for tracking
19667      Close Cur_Customer;
19668    -- This means this is a new customer
19669      -- add this to the temp table which will be
19670 --dbms_output.put_line('comes into free portion');
19671 --dbms_output.put_line('p_customers_in(i).customer_id'||p_customers_in(i).customer_id);
19672 IF p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19673     --dbms_output.put_line('comes into karthiks 1st else');
19674        IF p_customers_in(i).project_relationship_code IS NULL OR
19675         p_customers_in(i).project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
19676                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19677                 THEN
19678                        pa_utils.add_message
19679                         ( p_app_short_name   => 'PA'-- using existing message for AA TRACKING
19680                          ,p_msg_name    => 'PA_RELATIONSHIP_CODE_REQD'
19681                          ,p_token1           => 'PROJECT_NAME'
19682                          ,p_value1           => l_project_rec.segment1
19683                          ,p_token2           => 'CUSTOMER_ID'
19684                          ,p_value2           => p_customers_in(i).customer_id
19685                         );
19686                 END IF;
19687                 p_multiple_task_msg := 'F';
19688                 RAISE FND_API.G_EXC_ERROR;
19689        END IF;
19690 
19691       -- below if condition is added Bug 5622539
19692       IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
19693             (l_enable_top_task_cust_flag='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
19694       IF p_customers_in(i).CUSTOMER_BILL_SPLIT IS NULL OR
19695         p_customers_in(i).CUSTOMER_BILL_SPLIT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
19696           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19697               THEN
19698                pa_utils.add_message
19699                 ( p_app_short_name   => 'PA'-- new message for AA TRACKING
19700                  ,p_msg_name    => 'PA_CUST_BILL_SPLIT_REQD'
19701                  ,p_token1           => 'PROJECT_NAME'
19702                  ,p_value1           => l_project_rec.segment1
19703                  ,p_token2           => 'CUSTOMER_ID'
19704                  ,p_value2           => p_customers_in(i).customer_id
19705                 );
19706              END IF;
19707              p_multiple_task_msg := 'F';
19708              RAISE FND_API.G_EXC_ERROR;
19709        ELSE
19710         PA_CUSTOMERS_CONTACTS_UTILS.CHECK_CONTRIBUTION_PERCENTAGE
19711          ( p_customer_bill_split => p_customers_in(i).CUSTOMER_BILL_SPLIT
19712           ,x_return_status       => l_return_status
19713           ,x_error_msg_code      => l_error_msg_code);
19714           If l_return_status <> FND_API.G_RET_STS_SUCCESS then
19715            pa_utils.add_message
19716                 ( p_app_short_name   => 'PA' --TRACKING
19717                  ,p_msg_name    => 'PA_CUST_BILL_SPLIT_INVALID'
19718                  ,p_token1           => 'PROJECT_NAME'
19719                  ,p_value1           => l_project_rec.segment1
19720                  ,p_token2           => 'CUSTOMER_ID'
19721                  ,p_value2           => p_customers_in(i).customer_id
19722                 );
19723              /* Fix for bug 4604087 */
19724              p_multiple_task_msg := 'F';
19725              RAISE FND_API.G_EXC_ERROR;
19726            END IF;
19727 
19728       END IF;
19729 END IF;
19730     -- added by aditi for tracking bug -- FOR CUSTOMER ISSUE
19731     ----dbms_output.put_line('Value of p_project_in.customer_id'||p_customers_in(i).customer_id);
19732     /* OLD code be4 tracking again */
19733 /* Coomented the code below and added new code for tracking bug
19734    l_bill_to_customer_id:=p_project_in.bill_to_customer_id;
19735    l_ship_to_customer_id:=p_project_in.ship_to_customer_id;
19736  --added for bug 3911782
19737    l_bill_to_address_id :=p_project_in.bill_to_address_id;
19738    l_ship_to_address_id :=p_project_in.ship_to_address_id;
19739    --changes end for Bug 3911782*/
19740     l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
19741    l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
19742  --added for bug 3911782
19743    l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
19744    l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
19745    l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
19746    l_customer_bill_split := p_customers_in(i).Customer_Bill_Split;
19747    -- Added for Bug 5622539
19748    If (l_customer_bill_split is null or
19749         l_customer_bill_split = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19750    then
19751         l_customer_bill_split:=0;
19752    end if;
19753 
19754    ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
19755    ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
19756    ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
19757    ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
19758 
19759 
19760 
19761 
19762 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done below before
19763    calling get_customer_info api.
19764    IF NVL(l_cust_acc_rel_code,'N') ='N'
19765            AND p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19766        AND p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19767        AND p_project_in.ship_to_customer_id  IS NOT NULL AND p_project_in.ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19768        AND p_project_in.customer_id <> p_project_in.bill_to_customer_id
19769        AND p_project_in.customer_id <> p_project_in.ship_to_customer_id
19770    THEN
19771             pa_interface_utils_pub.map_new_amg_msg
19772               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19773                ,p_msg_attribute    => 'CHANGE'
19774                ,p_resize_flag      => 'Y'
19775                ,p_msg_context      => 'PROJ'
19776                ,p_attribute1       => p_project_in.pm_project_reference
19777                ,p_attribute2       => ''
19778                ,p_attribute3       => ''
19779                ,p_attribute4       => ''
19780                ,p_attribute5       => '');
19781            RAISE FND_API.G_EXC_ERROR;
19782    END IF;
19783    */
19784 /* Bug 3077676 End */
19785 
19786 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
19787 /* For a New RECORD this code IS redundant by aditi for tracking
19788    If (p_project_in.bill_to_customer_id is null or p_project_in.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19789       and  Cur_Customer_rec.bill_to_customer_id is not null  Then
19790        l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
19791         --changes for bug 3911782
19792       If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19793           and  Cur_Customer_rec.bill_to_address_id is not null  Then
19794           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19795       End if;
19796     Else
19797       If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19798           and  Cur_Customer_rec.bill_to_address_id is not null  Then
19799           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19800        End if;
19801       --changes end for bug 3911782
19802    end if;
19803 
19804     If (p_project_in.ship_to_customer_id is null or p_project_in.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19805       and  Cur_Customer_rec.ship_to_customer_id is not null  Then
19806        l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
19807         --changes for bug 3911782
19808       If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19809           and  Cur_Customer_rec.ship_to_address_id is not null  Then
19810           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19811       End if;
19812      Else
19813       If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19814           and  Cur_Customer_rec.ship_to_address_id is not null  Then
19815           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19816       End if;
19817        --changes end for bug 3911782
19818    end if;
19819 /* THIS WHOLE CODE IS COMMENTED FOR TRACKING BUG */
19820  -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
19821    -- relations ship code is N.
19822 ----dbms_output.put_line('Value of p_customers_in(i).customer_id'||p_customers_in(i).customer_id);
19823 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
19824 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
19825 
19826    /* IF(NVL(l_cust_acc_rel_code,'N') ='N' and
19827       p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
19828     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19829       p_project_in.customer_id <> l_bill_to_customer_id
19830      ) or
19831      (
19832       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19833       p_project_in.customer_id <> l_ship_to_customer_id
19834     )) This coce is commented as the code is being called in loop for tracking issue*/
19835 
19836     IF(NVL(l_cust_acc_rel_code,'N') ='N' and
19837       p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
19838     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19839       p_customers_in(i).customer_id <> l_bill_to_customer_id
19840      ) or
19841      (
19842       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19843       p_customers_in(i).customer_id <> l_ship_to_customer_id
19844     ))
19845 
19846    THEN
19847             pa_interface_utils_pub.map_new_amg_msg
19848               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19849                ,p_msg_attribute    => 'CHANGE'
19850                ,p_resize_flag      => 'Y'
19851                ,p_msg_context      => 'PROJ'
19852                ,p_attribute1       => l_project_in_rec.pm_project_reference
19853                ,p_attribute2       => ''
19854                ,p_attribute3       => ''
19855                ,p_attribute4       => ''
19856                ,p_attribute5       => '');
19857            RAISE FND_API.G_EXC_ERROR;
19858    END IF;
19859   /** changes begin for tracking bug by aditi **/
19860 
19861    ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
19862    If (p_customers_in(i).CONTACT_ID IS NOT NULL) AND (p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19863       then
19864 
19865 
19866          IF (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE IS NULL) OR (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )THEN
19867            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19868               THEN
19869                pa_utils.add_message
19870               ( p_app_short_name   => 'PA'-- existing message for tracking bug
19871                  ,p_msg_name    => 'PA_CONTACT_TYPE_REQD'
19872                  ,p_token1           => 'PROJECT_NAME'
19873                  ,p_value1           => l_project_in_rec.pm_project_reference
19874                  ,p_token2           => 'CUSTOMER_ID'
19875                  ,p_value2           => p_customers_in(i).customer_id
19876                  ,p_token3           => 'CONTACT_ID'
19877                  ,p_value3           => p_customers_in(i).CONTACT_ID
19878               );
19879            END IF;
19880             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19881             p_return_status             := FND_API.G_RET_STS_ERROR;
19882             RAISE FND_API.G_EXC_ERROR;
19883          END IF;
19884      end if;
19885       If  p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
19886         l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
19887 	l_ship_to_contact_id := NULL; -- Bug 5622539
19888       ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
19889         l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
19890 	l_bill_to_contact_id := NULL; -- Bug 5622539
19891       Else
19892         l_bill_to_contact_id := NULL;
19893         l_ship_to_contact_id := NULL;
19894       End If;
19895       /** end of chnages for tracking bug by aditi **/
19896 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
19897 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
19898 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
19899 
19900 /* Start of changes for bug 5482997 */
19901 
19902       IF l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19903          l_bill_to_customer_id := NULL;
19904       END IF;
19905 
19906       IF l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19907          l_ship_to_customer_id := NULL;
19908       END IF;
19909 
19910 /* End of changes for bug 5482997 */
19911 
19912 
19913      pa_customer_info.get_customer_info( X_project_ID           => l_project_id,
19914                                          X_Customer_Id          => p_customers_in(i).customer_id -- p_project_in.customer_id tracking
19915                                         ,X_Bill_To_Customer_Id  => l_bill_to_customer_id
19916                                         ,X_Ship_To_Customer_Id  => l_ship_to_customer_id
19917                                         ,X_Bill_To_Address_Id   => l_bill_to_address_id
19918                                         ,X_Ship_To_Address_Id   => l_ship_to_address_id
19919                                         ,X_Bill_To_Contact_Id   => l_bill_to_contact_id
19920                                         ,X_Ship_To_Contact_Id   => l_ship_to_contact_id
19921                                         ,X_Err_Code             => l_err_code
19922                                         ,X_Err_Stage            => l_err_stage
19923                                         ,X_Err_Stack            => l_err_stack
19924                                         ,p_calling_module       => 'AMG' --Added for Bug#4770535
19925                                        );
19926 
19927 ----dbms_output.put_line('After calling pa_customer_info.get_customer_info'||l_err_code);
19928 --dbms_output.put_line('Value of l_bill_to_address_id '||l_bill_to_address_id);
19929 --dbms_output.put_line('Value of l_ship_to_address_id '||l_ship_to_address_id);
19930 
19931     -- For this API,error code 10 is a warning.Anything above 10 is an error
19932         IF l_err_code > 10
19933         THEN
19934 
19935                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19936                 THEN
19937 
19938                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
19939                         THEN
19940             pa_interface_utils_pub.map_new_amg_msg
19941               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19942                ,p_msg_attribute    => 'CHANGE'
19943                ,p_resize_flag      => 'Y'
19944                ,p_msg_context      => 'PROJ'
19945                ,p_attribute1       => l_project_in_rec.pm_project_reference
19946                ,p_attribute2       => ''
19947                ,p_attribute3       => ''
19948                ,p_attribute4       => ''
19949                ,p_attribute5       => '');
19950          ELSE
19951             pa_interface_utils_pub.map_new_amg_msg
19952               ( p_old_message_code => l_err_stage
19953                ,p_msg_attribute    => 'CHANGE'
19954                ,p_resize_flag      => 'Y'
19955                ,p_msg_context      => 'PROJ'
19956                ,p_attribute1       => l_project_in_rec.pm_project_reference
19957                ,p_attribute2       => ''
19958                ,p_attribute3       => ''
19959                ,p_attribute4       => ''
19960                ,p_attribute5       => '');
19961                         END IF;
19962 
19963                 END IF;
19964 
19965                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19966                 RAISE FND_API.G_EXC_ERROR;
19967 
19968           ELSIF l_err_code < 0
19969         THEN
19970 
19971                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
19972                 THEN
19973             pa_interface_utils_pub.map_new_amg_msg
19974               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19975                ,p_msg_attribute    => 'CHANGE'
19976                ,p_resize_flag      => 'Y'
19977                ,p_msg_context      => 'PROJ'
19978                ,p_attribute1       => l_project_in_rec.pm_project_reference
19979                ,p_attribute2       => ''
19980                ,p_attribute3       => ''
19981                ,p_attribute4       => ''
19982                ,p_attribute5       => '');
19983                 END IF;
19984 
19985                 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19986                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19987         END IF;
19988 
19989 /* Update the project customer information */
19990 /* The code below is also redundant for a new customer
19991              Update Pa_project_customers
19992              Set bill_to_customer_id=l_bill_to_customer_id,
19993                  ship_to_customer_id=l_ship_to_customer_id,
19994                  Bill_To_Address_Id =l_bill_to_address_id,
19995                  Ship_to_address_id =l_ship_to_address_id
19996              where project_id=l_project_id
19997              and customer_id=p_project_in.customer_id;
19998 
19999  If p_project_in.bill_to_customer_id is not null and  p_project_in.bill_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20000         Delete pa_project_contacts
20001         where Project_Id=l_project_id
20002         and customer_id=p_project_in.customer_id
20003         and Project_Contact_Type_Code='BILLING';
20004 
20005 end if;
20006 
20007 If p_project_in.ship_to_customer_id is not null and  p_project_in.ship_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20008         Delete pa_project_contacts
20009         where Project_Id=l_project_id
20010         and customer_id=p_project_in.customer_id
20011         and Project_Contact_Type_Code='SHIPPING';
20012 
20013   end if; END of COmmented Code for tracking */
20014 /* Added the call to PA_CUSTOMERS_CONTACTS_PUB.CREATE_PROJECT_CUSTOMER so that
20015 the validations done at form level are also done when customer is created via AMG API */
20016 ----dbms_output.put_line('Before calling CREATE_PROJECT_CUSTOMER');
20017 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
20018 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
20019 
20020 
20021 
20022 -- bug 5554475
20023 
20024    l_ALLOW_INV_USER_RATE_FLAG   := p_customers_in(i).ALLOW_INV_USER_RATE_TYPE_FLAG  ;
20025    l_INV_RATE_DATE		:= p_customers_in(i).INV_RATE_DATE   ;
20026    l_INV_RATE_TYPE		:= p_customers_in(i).INV_RATE_TYPE;
20027    l_INV_CURRENCY_CODE		:= p_customers_in(i).INV_CURRENCY_CODE ;
20028    l_INV_EXCHANGE_RATE		:= p_customers_in(i).INV_EXCHANGE_RATE ;
20029 
20030 
20031 
20032    If l_ALLOW_INV_USER_RATE_FLAG = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR or l_ALLOW_INV_USER_RATE_FLAG IS NULL then
20033            l_ALLOW_INV_USER_RATE_FLAG := 'N';
20034    end if;
20035 
20036 
20037 
20038    if l_INV_RATE_TYPE is not null and l_INV_RATE_TYPE <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20039 
20040            begin
20041            l_USER_INV_RATE_TYPE:=l_INV_RATE_TYPE;
20042            select conversion_type into l_INV_RATE_TYPE
20043            from pa_conversion_types_v
20044            where user_conversion_type=l_USER_INV_RATE_TYPE;
20045            exception when no_data_found then
20046                    l_INV_RATE_TYPE :=null;
20047            end;
20048    end if;
20049 
20050    Select pt.CC_PRVDR_FLAG,pa.multi_currency_billing_flag
20051    into l_cc_prvdr_flag,l_mcb_flag
20052    From pa_project_types pt, pa_projects pa
20053    where pa.project_type=pt.project_type AND
20054          pt.org_id = pa.org_id and
20055 	 pa.project_id=l_project_id;
20056 
20057    If l_INV_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20058        if l_mcb_flag = 'Y' or l_cc_prvdr_flag ='Y' then
20059                OPEN cur_pa_impl;
20060                FETCH cur_pa_impl INTO l_inv_rate_type;
20061                CLOSE cur_pa_impl;
20062        end if;
20063    END if;
20064 
20065    if l_mcb_flag = 'N' and l_cc_prvdr_flag ='N' then
20066         l_inv_rate_type := null;
20067         l_ALLOW_INV_USER_RATE_FLAG := 'N';
20068         l_INV_EXCHANGE_RATE :=null;
20069         l_INV_RATE_DATE :=null;
20070    end if;
20071 
20072    If l_INV_CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20073            l_INV_CURRENCY_CODE :=l_project_rec.PROJECT_CURRENCY_CODE;
20074    END if;
20075 
20076 
20077    If l_INV_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
20078            l_INV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
20079    END if;
20080 
20081    If l_INV_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
20082            l_INV_RATE_DATE := FND_API.G_MISS_DATE;
20083    END if;
20084 
20085 --bug#5554475
20086 
20087 -- Bug 5622539
20088    l_default_top_task_cust_flag := p_customers_in(i).enable_top_task_cust_flag;
20089 
20090 /*
20091    If l_default_top_task_cust_flag is null or
20092       l_default_top_task_cust_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20093       l_default_top_task_cust_flag := 'N';
20094    end if;
20095 */
20096    -- Bug 5622539
20097    If l_default_top_task_cust_flag <> 'Y' then
20098       l_default_top_task_cust_flag := 'N';
20099    end if;
20100 
20101    IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20102        (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
20103             l_default_top_task_cust_flag:='N';
20104    else
20105             l_CUSTOMER_BILL_SPLIT:=null;
20106    end if;
20107 -- Bug 5622539
20108 
20109  PA_CUSTOMERS_CONTACTS_PUB.CREATE_PROJECT_CUSTOMER(
20110   P_API_VERSION              => 1.0
20111 , P_INIT_MSG_LIST            => 'T'
20112 , P_COMMIT                   => 'F'
20113 , P_VALIDATE_ONLY            => 'F'
20114 , P_VALIDATION_LEVEL         => 100
20115 , P_CALLING_MODULE           => 'AMG'
20116 , P_DEBUG_MODE               => 'N'
20117 , P_MAX_MSG_COUNT            => 100
20118 , P_PROJECT_ID               => l_project_id
20119 , P_CUSTOMER_ID              => p_customers_in(i).customer_id
20120 , P_CUSTOMER_NAME            => NULL
20121 , P_CUSTOMER_NUMBER          => NULL
20122 , P_PROJECT_RELATIONSHIP_CODE=> p_customers_in(i).PROJECT_RELATIONSHIP_CODE
20123 , P_CUSTOMER_BILL_SPLIT      => l_CUSTOMER_BILL_SPLIT -- p_customers_in(i).CUSTOMER_BILL_SPLIT: Bug 5622539
20124 , P_BILL_TO_CUSTOMER_ID      => l_bill_to_customer_id
20125 , P_SHIP_TO_CUSTOMER_ID      => l_ship_to_customer_id
20126 , P_BILL_TO_ADDRESS_ID       => l_bill_to_address_id
20127 , P_SHIP_TO_ADDRESS_ID       => l_ship_to_address_id
20128 ,p_bill_to_customer_name => null
20129 ,p_bill_to_customer_number => null
20130 ,p_ship_to_customer_name => null
20131 ,p_ship_to_customer_number  => null
20132 , P_BILL_SITE_NAME           => NULL
20133 , P_WORK_SITE_NAME           => NULL
20134 , P_INV_CURRENCY_CODE        => l_INV_CURRENCY_CODE		--bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE
20135 , P_INV_RATE_TYPE            => l_INV_RATE_TYPE			--bug 5554475
20136 , P_INV_RATE_DATE            => l_INV_RATE_DATE			--bug 5554475
20137 , P_INV_EXCHANGE_RATE        => l_INV_EXCHANGE_RATE		--bug 5554475
20138 , P_ALLOW_USER_RATE_TYPE_FLAG=> l_ALLOW_INV_USER_RATE_FLAG	--bug 5554475
20139 , P_RECEIVER_TASK_ID         => null
20140 , X_CUSTOMER_ID             => l_customer_id
20141 , X_RETURN_STATUS          => x_return_status
20142 , X_MSG_COUNT              => x_msg_count
20143 , X_MSG_DATA               => x_msg_data
20144 --Added for FP.M changes to project billing setup. Tracking bug 3279981
20145 , p_default_top_task_cust_flag => l_default_top_task_cust_flag
20146 --, p_en_top_task_cust_flag      => 'N'   This flag is mandatory only if calling context id forms
20147 );
20148 
20149 --uncommented and modified the below for Bug#5554475
20150 
20151 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
20152       x_msg_count := FND_MSG_PUB.count_msg;
20153       if x_msg_count = 1 then
20154          PA_INTERFACE_UTILS_PUB.get_messages
20155                (p_encoded        => FND_API.G_FALSE,
20156                 p_msg_index      => 1,
20157                 p_msg_count      => x_msg_count,
20158                 p_msg_data       => x_msg_data,
20159                 p_data           => x_msg_data,
20160                 p_msg_index_out  => l_msg_index_out);
20161 
20162       end if;
20163      If x_return_status = FND_API.G_RET_STS_ERROR THEN
20164 	p_project_out.return_status := x_return_status;
20165         RAISE FND_API.G_EXC_ERROR;
20166      ELSE
20167 	p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20168         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20169      END if;
20170 
20171 end if;
20172 
20173 --Bug#5554475
20174 
20175 ----dbms_output.put_line('After calling CREATE_PROJECT_CUSTOMER x_return_status X_MSG_DATA'||x_return_status||'e'||X_MSG_DATA);
20176 
20177   /* call to create_customer_contacts added for tracking bug  by aditi */
20178 pa_customer_info.Create_Customer_Contacts
20179                        ( X_Project_Id                  => l_project_id,
20180                          X_Customer_Id                 => p_customers_in(i).customer_id,
20181                          X_Project_Relation_Code       => p_customers_in(i).project_relationship_code,
20182                          X_Customer_Bill_Split         => p_customers_in(i).customer_bill_split,
20183                          X_Bill_To_Customer_Id         => l_bill_to_customer_id,
20184                          X_Ship_To_Customer_Id         => l_ship_to_customer_id,
20185                          X_Bill_To_Address_Id          => l_bill_to_address_id,
20186                          X_Ship_To_Address_Id          => l_ship_to_address_id,
20187                          X_Bill_To_Contact_Id          => l_bill_to_contact_id,
20188                          X_Ship_To_Contact_Id          => l_ship_to_contact_id,
20189                          X_Inv_Currency_Code           => l_INV_CURRENCY_CODE,  --bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE,
20190                          X_Inv_Rate_Type               => l_INV_RATE_TYPE,	--bug 5554475
20191                          X_Inv_Rate_Date               => l_INV_RATE_DATE,	--bug 5554475
20192                          X_Inv_Exchange_Rate           => l_INV_EXCHANGE_RATE,	--bug 5554475
20193                          X_Allow_Inv_Rate_Type_Fg      => l_ALLOW_INV_USER_RATE_FLAG,	--bug 5554475
20194                          X_Bill_Another_Project_Fg     => l_bill_another_project_flag, -- Added for 4153629
20195                          X_Receiver_Task_Id            => l_receiver_task_id , -- Added for 4153629
20196                          X_User                        => FND_GLOBAL.USER_ID,
20197                          X_Login                       => FND_GLOBAL.LOGIN_ID,
20198                          X_Err_Code                    => l_err_code,
20199                          X_Err_Stage                   => l_err_stage,
20200                          X_Err_Stack                   => l_err_stack
20201                        );
20202 ----dbms_output.put_line('value of l_err_code'||l_err_code);
20203   /* call to create_customer_contacts added for tracking bug  by aditi */
20204 IF l_err_code > 0
20205    THEN
20206 
20207       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20208       THEN
20209 
20210         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20211         THEN
20212                                     pa_interface_utils_pub.map_new_amg_msg
20213                                        ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20214                                         ,p_msg_attribute    => 'CHANGE'
20215                                         ,p_resize_flag      => 'N'
20216                                         ,p_msg_context      => 'PROJ'
20217                                         ,p_attribute1       => l_project_in_rec.pm_project_reference
20218                                         ,p_attribute2       => ''
20219                                         ,p_attribute3       => ''
20220                                         ,p_attribute4       => ''
20221                                         ,p_attribute5       => '');
20222                                 ELSE
20223                                      pa_interface_utils_pub.map_new_amg_msg
20224                                         ( p_old_message_code => l_err_stage
20225                                          ,p_msg_attribute    => 'CHANGE'
20226                                          ,p_resize_flag      => 'N'
20227                                          ,p_msg_context      => 'PROJ'
20228                                          ,p_attribute1       => l_project_in_rec.pm_project_reference
20229                                          ,p_attribute2       => ''
20230                                          ,p_attribute3       => ''
20231                                          ,p_attribute4       => ''
20232                                          ,p_attribute5       => '');
20233         END IF;
20234 
20235       END IF;
20236 
20237       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20238       RAISE FND_API.G_EXC_ERROR;
20239 
20240         ELSIF l_err_code < 0
20241         THEN
20242 
20243       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20244       THEN
20245                             pa_interface_utils_pub.map_new_amg_msg
20246                              ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20247                               ,p_msg_attribute    => 'CHANGE'
20248                               ,p_resize_flag      => 'N'
20249                               ,p_msg_context      => 'PROJ'
20250                               ,p_attribute1       => l_project_in_rec.pm_project_reference
20251                               ,p_attribute2       => ''
20252                               ,p_attribute3       => ''
20253                               ,p_attribute4       => ''
20254                               ,p_attribute5       => '');
20255       END IF;
20256 
20257       p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20258       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20259         END IF;
20260 
20261  END IF ; --IF p_customers_in(i).customer_id IS NOT NULL
20262 Else --If Cur_Customer%NOTFOUND
20263   /* Its its an existing customer */
20264                  CLOSE Cur_Customer;
20265                  /* Code copied and pasted below */
20266 
20267 --dbms_output.put_line('Customer is existing in the databse ');
20268    l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
20269    l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
20270  --added for bug 3911782
20271    l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
20272    l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
20273    /* added these two assignments */
20274    l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
20275    l_customer_bill_split := p_customers_in(i).Customer_Bill_Split;
20276    l_bill_another_project_flag := p_customers_in(i).bill_another_project_flag;
20277    l_receiver_task_id := p_customers_in(i).receiver_task_id;
20278  /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
20279    If (p_customers_in(i).bill_to_customer_id is null or p_customers_in(i).bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20280       and  Cur_Customer_rec.bill_to_customer_id is not null  Then
20281        l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
20282         --changes for bug 3911782
20283       If (p_customers_in(i).bill_to_address_id is null or p_customers_in(i).bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20284           and  Cur_Customer_rec.bill_to_address_id is not null  Then
20285           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20286       End if;
20287     Else
20288       If (p_customers_in(i).bill_to_address_id is null or p_customers_in(i).bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20289           and  Cur_Customer_rec.bill_to_address_id is not null  Then
20290           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20291        End if;
20292       --changes end for bug 3911782
20293    end if;
20294 
20295     If (p_customers_in(i).ship_to_customer_id is null or p_customers_in(i).ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20296       and  Cur_Customer_rec.ship_to_customer_id is not null  Then
20297        l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
20298         --changes for bug 3911782
20299       If (p_customers_in(i).ship_to_address_id is null or p_customers_in(i).ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20300           and  Cur_Customer_rec.ship_to_address_id is not null  Then
20301           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20302       End if;
20303      Else
20304       If (p_customers_in(i).ship_to_address_id is null or p_customers_in(i).ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20305           and  Cur_Customer_rec.ship_to_address_id is not null  Then
20306           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20307       End if;
20308        --changes end for bug 3911782
20309    end if;
20310    /* New code added FOR tracking bug */
20311    If (p_customers_in(i).PROJECT_RELATIONSHIP_CODE is null or p_customers_in(i).PROJECT_RELATIONSHIP_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
20312       and  Cur_Customer_rec.PROJECT_RELATIONSHIP_CODE is not null  Then
20313        l_project_relationship_code := Cur_Customer_rec.PROJECT_RELATIONSHIP_CODE;
20314   end if;
20315 
20316     -- Bug 7255015
20317     If (p_customers_in(i).Customer_Bill_Split is null or p_customers_in(i).Customer_Bill_Split = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) Then
20318       IF Cur_Customer_rec.Customer_Bill_Split is not null  THEN
20319        l_customer_bill_split := Cur_Customer_rec.Customer_Bill_Split;
20320       END IF;
20321    Else
20322     If (pa_customer_info.revenue_accrued_or_billed(l_project_id)) then
20323         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20324               THEN
20325                pa_utils.add_message
20326                 ( p_app_short_name   => 'PA'-- new message for bug 3326468
20327                  ,p_msg_name    => 'PA_UPD_CUST_NOT_ALLOWED'
20328                  ,p_token1           => 'PROJECT_NAME'
20329                  ,p_value1           => l_project_id
20330                  ,p_token2           => 'CUSTOMER_ID'
20331                  ,p_value2           => p_customers_in(i).customer_id
20332                );
20333              END IF;
20334             RAISE FND_API.G_EXC_ERROR;
20335    END IF;
20336   end if;
20337   --dbms_output..put_line('Value of p_customers_in(i).bill_another_project_flag'||p_customers_in(i).bill_another_project_flag);
20338   --dbms_output..put_line('Value of p_customers_in(i).receiver_task_id'||p_customers_in(i).receiver_task_id);
20339 /* Code added for tracking bug 4153629*/
20340   If (p_customers_in(i).bill_another_project_flag is null or p_customers_in(i).bill_another_project_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
20341       and  Cur_Customer_rec.bill_another_project_flag is not null  Then
20342        l_bill_another_project_flag := Cur_Customer_rec.bill_another_project_flag;
20343     If (p_customers_in(i).receiver_task_id is null or p_customers_in(i).receiver_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
20344       --Bug#5554578
20345           IF Cur_Customer_rec.receiver_task_id is not null  Then
20346 
20347 		 l_receiver_task_id := Cur_Customer_rec.receiver_task_id;
20348 	  END IF;
20349     Else /* Some value of passed for receiver_task_id */
20350       If l_bill_another_project_flag = 'N' Then
20351          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20352               THEN
20353                pa_utils.add_message
20354                 ( p_app_short_name   => 'PA'-- new message for bug 4153629
20355                  ,p_msg_name    => 'PA_UPD_RCVR_TSK_NOT_ALLOWED'
20356                  ,p_token1           => 'PROJECT_NAME'
20357                  ,p_value1           => l_project_id
20358                  ,p_token2           => 'CUSTOMER_ID'
20359                  ,p_value2           => p_customers_in(i).customer_id
20360                );
20361            END IF;
20362             RAISE FND_API.G_EXC_ERROR;
20363        ELSE /* l_bill_another_project_flag = 'Y' */
20364            l_receiver_task_id := p_customers_in(i).receiver_task_id;
20365         PA_CUSTOMER_INFO.CHECK_RECEIVER_PROJ_ENTERABLE
20366          (p_project_id         => l_project_id
20367          ,p_customer_id        => p_customers_in(i).customer_id
20368          ,p_receiver_task_id     => l_receiver_task_id
20369          ,x_bill_another_project_flag   => l_bill_another_project_flag
20370          ,x_return_status              => x_return_status
20371          ,x_error_msg_code            => l_error_msg_code
20372          );
20373          --dbms_output..put_line('value of l_bill_another_project_flag'||l_bill_another_project_flag);
20374         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
20375          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20376                               p_msg_name       => l_error_msg_code
20377                               ,p_token1           => 'PROJECT_NAME'
20378                               ,p_value1           => l_project_id
20379                              ,p_token2           => 'CUSTOMER_ID'
20380                              ,p_value2           => p_customers_in(i).customer_id
20381                  );
20382          RAISE FND_API.G_EXC_ERROR;
20383          END if; -- <l_return_status <> FND_API.G_RET_STS_SUCCESS>
20384       end if; -- l_bill_another_project_flag = 'N'
20385      End If; --p_customers_in(i).receiver_task_id is null
20386   Else /* Some value is passed for p_customers_in(i).bill_another_project_flag*/
20387     /* This means that the status is being flipped */
20388      If (p_customers_in(i).receiver_task_id is null or p_customers_in(i).receiver_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
20389       --Bug#5554578
20390           IF Cur_Customer_rec.receiver_task_id is not null  Then
20391 
20392 		 l_receiver_task_id := Cur_Customer_rec.receiver_task_id;
20393 	  END IF;
20394      Else /* Some value of passed for receiver_task_id */
20395        If l_bill_another_project_flag = 'N' Then
20396             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20397               THEN
20398                pa_utils.add_message
20399                 ( p_app_short_name   => 'PA'-- new message for bug 4153629
20400                  ,p_msg_name    => 'PA_UPD_RCVR_TSK_NOT_ALLOWED'
20401                  ,p_token1           => 'PROJECT_NAME'
20402                  ,p_value1           => l_project_id
20403                  ,p_token2           => 'CUSTOMER_ID'
20404                  ,p_value2           => p_customers_in(i).customer_id
20405                );
20406              END IF;
20407             RAISE FND_API.G_EXC_ERROR;
20408        ELSE /* l_bill_another_project_flag = 'Y' */
20409            l_receiver_task_id := p_customers_in(i).receiver_task_id;
20410        PA_CUSTOMER_INFO.CHECK_RECEIVER_PROJ_ENTERABLE
20411          (p_project_id         => l_project_id
20412          ,p_customer_id        => p_customers_in(i).customer_id
20413          ,p_receiver_task_id     => l_receiver_task_id
20414          ,x_bill_another_project_flag   => l_bill_another_project_flag
20415          ,x_return_status              => x_return_status
20416          ,x_error_msg_code            => l_error_msg_code
20417          );
20418          --dbms_output..put_line('value of l_bill_another_project_flag'||l_bill_another_project_flag);
20419 
20420         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
20421          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20422                               p_msg_name       => l_error_msg_code
20423                               ,p_token1           => 'PROJECT_NAME'
20424                               ,p_value1           => l_project_id
20425                              ,p_token2           => 'CUSTOMER_ID'
20426                              ,p_value2           => p_customers_in(i).customer_id
20427                  );
20428          RAISE FND_API.G_EXC_ERROR;
20429          END if; -- <l_return_status <> FND_API.G_RET_STS_SUCCESS>
20430      END IF;/* l_bill_another_project_flag = 'N' */
20431    End If;
20432    End if;
20433 
20434  /* Changed end for tracking bug by aditi */
20435   /* End of Code changesfor tracking bug 4153629*/
20436 
20437   IF(NVL(l_cust_acc_rel_code,'N') ='N' and
20438       p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
20439     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20440       p_customers_in(i).customer_id <> l_bill_to_customer_id
20441      ) or
20442      (
20443       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20444       p_customers_in(i).customer_id <> l_ship_to_customer_id
20445     ))
20446    THEN
20447             pa_interface_utils_pub.map_new_amg_msg
20448               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
20449                ,p_msg_attribute    => 'CHANGE'
20450                ,p_resize_flag      => 'Y'
20451                ,p_msg_context      => 'PROJ'
20452                ,p_attribute1       => l_project_in_rec.pm_project_reference
20453                ,p_attribute2       => ''
20454                ,p_attribute3       => ''
20455                ,p_attribute4       => ''
20456                ,p_attribute5       => '');
20457            RAISE FND_API.G_EXC_ERROR;
20458    END IF;
20459 /** changes begin for tracking bug by aditi **/
20460 
20461    ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
20462    If (p_customers_in(i).CONTACT_ID IS NOT NULL) AND (p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20463       then
20464 
20465 
20466          IF (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE IS NULL) OR (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )THEN
20467            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20468               THEN
20469                pa_utils.add_message
20470               ( p_app_short_name   => 'PA'-- existing message for tracking bug
20471                  ,p_msg_name    => 'PA_CONTACT_TYPE_REQD'
20472                  ,p_token1           => 'PROJECT_NAME'
20473                  ,p_value1           => l_project_in_rec.pm_project_reference
20474                  ,p_token2           => 'CUSTOMER_ID'
20475                  ,p_value2           => p_customers_in(i).customer_id
20476                  ,p_token3           => 'CONTACT_ID'
20477                  ,p_value3           => p_customers_in(i).CONTACT_ID
20478               );
20479            END IF;
20480             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20481             p_return_status             := FND_API.G_RET_STS_ERROR;
20482             RAISE FND_API.G_EXC_ERROR;
20483          END IF;
20484      end if;
20485 
20486       If  p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
20487         l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
20488 	l_ship_to_contact_id := NULL; -- Bug 5622539
20489       ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
20490         l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
20491 	l_bill_to_contact_id := NULL; -- Bug 5622539
20492       Else
20493       --null;
20494        l_bill_to_contact_id := NULL;
20495        l_ship_to_contact_id := NULL;
20496       End If;
20497 
20498       /** end of chnages for tracking bug by aditi **/
20499 
20500 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
20501 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
20502 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
20503 
20504      pa_customer_info.get_customer_info( X_project_ID           => l_project_id
20505                                         ,X_Customer_Id          => p_customers_in(i).customer_id
20506                                         ,X_Bill_To_Customer_Id  => l_bill_to_customer_id
20507                                         ,X_Ship_To_Customer_Id  => l_ship_to_customer_id
20508                                         ,X_Bill_To_Address_Id   => l_bill_to_address_id
20509                                         ,X_Ship_To_Address_Id   => l_ship_to_address_id
20510                                         ,X_Bill_To_Contact_Id   => l_bill_to_contact_id
20511                                         ,X_Ship_To_Contact_Id   => l_ship_to_contact_id
20512                                         ,X_Err_Code             => l_err_code
20513                                         ,X_Err_Stage            => l_err_stage
20514                                         ,X_Err_Stack            => l_err_stack
20515                                         ,p_calling_module       => 'AMG' --added for bug#4770535
20516                                        );
20517 
20518 ----dbms_output.put_line('After calling pa_customer_info.get_customer_info'||l_err_code);
20519 
20520 
20521     -- For this API,error code 10 is a warning.Anything above 10 is an error
20522         IF l_err_code > 10
20523         THEN
20524 
20525                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20526                 THEN
20527 
20528                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20529                         THEN
20530             pa_interface_utils_pub.map_new_amg_msg
20531               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20532                ,p_msg_attribute    => 'CHANGE'
20533                ,p_resize_flag      => 'Y'
20534                ,p_msg_context      => 'PROJ'
20535                ,p_attribute1       => l_project_in_rec.pm_project_reference
20536                ,p_attribute2       => ''
20537                ,p_attribute3       => ''
20538                ,p_attribute4       => ''
20539                ,p_attribute5       => '');
20540          ELSE
20541             pa_interface_utils_pub.map_new_amg_msg
20542               ( p_old_message_code => l_err_stage
20543                ,p_msg_attribute    => 'CHANGE'
20544                ,p_resize_flag      => 'Y'
20545                ,p_msg_context      => 'PROJ'
20546                ,p_attribute1       => l_project_in_rec.pm_project_reference
20547                ,p_attribute2       => ''
20548                ,p_attribute3       => ''
20549                ,p_attribute4       => ''
20550                ,p_attribute5       => '');
20551                         END IF;
20552 
20553                 END IF;
20554 
20555                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20556                 RAISE FND_API.G_EXC_ERROR;
20557 
20558           ELSIF l_err_code < 0
20559         THEN
20560 
20561                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20562                 THEN
20563             pa_interface_utils_pub.map_new_amg_msg
20564               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20565                ,p_msg_attribute    => 'CHANGE'
20566                ,p_resize_flag      => 'Y'
20567                ,p_msg_context      => 'PROJ'
20568                ,p_attribute1       => l_project_in_rec.pm_project_reference
20569                ,p_attribute2       => ''
20570                ,p_attribute3       => ''
20571                ,p_attribute4       => ''
20572                ,p_attribute5       => '');
20573                 END IF;
20574 
20575                 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20576                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20577         END IF;
20578 
20579 /* Update the project customer information */
20580 
20581              Update Pa_project_customers
20582              Set bill_to_customer_id=l_bill_to_customer_id,
20583                  ship_to_customer_id=l_ship_to_customer_id,
20584                  Bill_To_Address_Id =l_bill_to_address_id,
20585                  Ship_to_address_id =l_ship_to_address_id
20586              where project_id=l_project_id
20587              and customer_id=p_customers_in(i).customer_id;
20588 
20589 If p_customers_in(i).bill_to_customer_id is not null and  p_customers_in(i).bill_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20590         Delete pa_project_contacts
20591         where Project_Id=l_project_id
20592         and customer_id=p_customers_in(i).customer_id
20593         and Project_Contact_Type_Code='BILLING';
20594 
20595 end if;
20596 
20597 If p_customers_in(i).ship_to_customer_id is not null and  p_customers_in(i).ship_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20598         Delete pa_project_contacts
20599         where Project_Id=l_project_id
20600         and customer_id=p_customers_in(i).customer_id
20601         and Project_Contact_Type_Code='SHIPPING';
20602 
20603 end if;
20604 ----dbms_output.put_line('before calling UPDATE_PROJECT_CUSTOMER');
20605 ----dbms_output.put_line('Value of p_customers_in(i).PROJECT_RELATIONSHIP_CODE'||p_customers_in(i).PROJECT_RELATIONSHIP_CODE);
20606  ----dbms_output.put_line('Value of l_bill_to_customer_id after '||l_bill_to_customer_id);
20607 ----dbms_output.put_line('Value of l_bill_to_address_id after '||l_bill_to_address_id);
20608  ----dbms_output.put_line('Value of l_ship_to_address_id after '||l_ship_to_address_id);
20609 ----dbms_output.put_line('Value of l_ship_to_customer_id after '||l_ship_to_customer_id);
20610 
20611 
20612 
20613 -- Start of addition for bug 5554475
20614    l_ALLOW_INV_USER_RATE_FLAG	:= p_customers_in(i).ALLOW_INV_USER_RATE_TYPE_FLAG  ;
20615    l_INV_RATE_DATE		:= p_customers_in(i).INV_RATE_DATE   ;
20616    l_INV_RATE_TYPE		:= p_customers_in(i).INV_RATE_TYPE;
20617    l_INV_CURRENCY_CODE		:= p_customers_in(i).INV_CURRENCY_CODE ;
20618    l_INV_EXCHANGE_RATE		:= p_customers_in(i).INV_EXCHANGE_RATE ;
20619 
20620    If l_ALLOW_INV_USER_RATE_FLAG = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20621 
20622               l_ALLOW_INV_USER_RATE_FLAG := cur_customer_rec.ALLOW_INV_USER_RATE_TYPE_FLAG;
20623    END if;
20624 
20625    If l_ALLOW_INV_USER_RATE_FLAG IS NULL then
20626            l_ALLOW_INV_USER_RATE_FLAG := 'N';
20627    end if;
20628 
20629     if l_INV_RATE_TYPE is not null and l_INV_RATE_TYPE <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20630            begin
20631            l_USER_INV_RATE_TYPE:=l_INV_RATE_TYPE;
20632            select conversion_type into l_INV_RATE_TYPE
20633            from pa_conversion_types_v
20634            where user_conversion_type=l_USER_INV_RATE_TYPE;
20635            exception when no_data_found then
20636                    l_INV_RATE_TYPE:=null;
20637            end;
20638    end if;
20639 
20640    If l_INV_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20641            l_INV_RATE_TYPE := cur_customer_rec.INV_RATE_TYPE;
20642    END if;
20643 
20644    Select pt.CC_PRVDR_FLAG,pa.multi_currency_billing_flag
20645    into l_cc_prvdr_flag,l_mcb_flag
20646    From pa_project_types pt, pa_projects pa
20647    where pa.project_type=pt.project_type
20648    AND pa.org_id = pt.org_id
20649    and pa.project_id=l_project_id;
20650 
20651    if l_mcb_flag = 'N' and l_cc_prvdr_flag ='N' then
20652         l_inv_rate_type := null;
20653         l_ALLOW_INV_USER_RATE_FLAG := 'N';
20654         l_INV_EXCHANGE_RATE :=null;
20655         l_INV_RATE_DATE :=null;
20656    end if;
20657 
20658    If l_INV_CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20659            l_INV_CURRENCY_CODE := cur_customer_rec.INV_CURRENCY_CODE;
20660    END if;
20661 
20662    If l_INV_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
20663            l_INV_EXCHANGE_RATE := cur_customer_rec.INV_EXCHANGE_RATE;
20664    END if;
20665 
20666    If l_INV_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
20667            l_INV_RATE_DATE := cur_customer_rec.INV_RATE_DATE;
20668    END if;
20669  -- End of addition for bug 5554475
20670 
20671 
20672    --bug 5554578
20673 
20674       l_default_top_task_cust_flag := cur_customer_rec.default_top_task_cust_flag;
20675 
20676    --bug 5554578
20677 
20678    --bug# 5554475
20679    IF l_bill_another_project_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_bill_another_project_flag IS NULL  THEN
20680 	l_bill_another_project_flag := cur_customer_rec.bill_another_project_flag;
20681    END IF;
20682 
20683    IF l_receiver_task_id= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR l_receiver_task_id IS NULL THEN
20684 	l_receiver_task_id := cur_customer_rec.receiver_task_id;
20685    END IF;
20686 
20687    --bug# 5554475
20688 
20689    -- Bug 5622539
20690    If l_default_top_task_cust_flag <> 'Y' then
20691       l_default_top_task_cust_flag := 'N';
20692    end if;
20693 
20694    -- Bug 5622539
20695    IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20696        (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
20697             l_default_top_task_cust_flag:='N';
20698    else
20699             l_CUSTOMER_BILL_SPLIT:=null;
20700    end if;
20701    -- Bug 5622539
20702 
20703 
20704 /* adding call to PA_CUSTOMERS_CONTACTS_PUB.UPDATE_PROJECT_CUSTOMER */
20705 PA_CUSTOMERS_CONTACTS_PUB.UPDATE_PROJECT_CUSTOMER(
20706 P_API_VERSION              => 1.0
20707 , P_INIT_MSG_LIST            => 'T'
20708 , P_COMMIT                   => 'F'
20709 , P_VALIDATE_ONLY            => 'F'
20710 , P_VALIDATION_LEVEL         => 100
20711 , P_CALLING_MODULE           => 'AMG'
20712 , P_DEBUG_MODE               => 'N'
20713 , P_MAX_MSG_COUNT            => 100
20714 , P_PROJECT_ID               => l_project_id
20715  , P_CUSTOMER_ID              => p_customers_in(i).customer_id
20716 /* , P_PROJECT_RELATIONSHIP_CODE=> p_customers_in(i).PROJECT_RELATIONSHIP_CODE
20717 , P_CUSTOMER_BILL_SPLIT      => p_customers_in(i).CUSTOMER_BILL_SPLIT */
20718 , P_PROJECT_RELATIONSHIP_CODE => l_PROJECT_RELATIONSHIP_CODE
20719  , P_CUSTOMER_BILL_SPLIT         => l_CUSTOMER_BILL_SPLIT
20720 , P_BILL_TO_CUSTOMER_ID      => l_bill_to_customer_id
20721 , P_SHIP_TO_CUSTOMER_ID      => l_ship_to_customer_id
20722 , P_BILL_TO_ADDRESS_ID       => l_bill_to_address_id
20723 , P_SHIP_TO_ADDRESS_ID       => l_ship_to_address_id
20724 ,p_bill_to_customer_name => NULL
20725 ,p_bill_to_customer_number => NULL
20726 ,p_ship_to_customer_name => NULL
20727 ,p_ship_to_customer_number  => NULL
20728 , P_BILL_SITE_NAME           => NULL
20729 , P_WORK_SITE_NAME           => NULL
20730 , P_INV_CURRENCY_CODE        => l_INV_CURRENCY_CODE		--bug  5554475 l_project_rec.PROJECT_CURRENCY_CODE
20731 , P_INV_RATE_TYPE            => l_INV_RATE_TYPE			--bug  5554475
20732 , P_INV_RATE_DATE            => l_INV_RATE_DATE			--bug  5554475
20733 , P_INV_EXCHANGE_RATE        => l_INV_EXCHANGE_RATE		--bug  5554475
20734 , P_ALLOW_USER_RATE_TYPE_FLAG=> l_ALLOW_INV_USER_RATE_FLAG      --bug  5554475
20735 , P_RECEIVER_TASK_ID          => l_receiver_task_id  -- Added for 4153629
20736 , P_BILL_ANOTHER_PROJECT_FLAG  => l_bill_another_project_flag -- Added for 4153629
20737 , P_RECORD_VERSION_NUMBER    => Cur_Customer_rec.RECORD_VERSION_NUMBER
20738 , X_RETURN_STATUS          => x_return_status
20739 , X_MSG_COUNT              => x_msg_count
20740 , X_MSG_DATA               => x_msg_data
20741 --Added for FP.M changes to project billing setup. Tracking bug 3279981
20742 , p_default_top_task_cust_flag => l_default_top_task_cust_flag --'N' bug 5554578
20743 --, p_en_top_task_cust_flag      => 'N'  This flag is mandatory only if calling context id forms
20744 );
20745 
20746 
20747 -- Start of addition for bug  5554475
20748 
20749    if x_return_status <> FND_API.G_RET_STS_SUCCESS then
20750          x_msg_count := FND_MSG_PUB.count_msg;
20751          if x_msg_count = 1 then
20752             PA_INTERFACE_UTILS_PUB.get_messages
20753                   (p_encoded        => FND_API.G_FALSE,
20754                    p_msg_index      => 1,
20755                    p_msg_count      => x_msg_count,
20756                    p_msg_data       => x_msg_data,
20757                    p_data           => x_msg_data,
20758                    p_msg_index_out  => l_msg_index_out);
20759 
20760          end if;
20761          If x_return_status = FND_API.G_RET_STS_ERROR THEN
20762                    p_project_out.return_status := x_return_status;
20763                    RAISE FND_API.G_EXC_ERROR;
20764          else
20765                    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20766                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20767          END if;
20768    end if;
20769 
20770 -- End of addition for bug 5554475
20771 
20772 /* Added Call to pa_customer_info.Create_Customer_Contacts. We only will be adding new contacts.
20773  There are no attrbutes that can be updated in a contact. Hence, the call below will suffice.
20774  It will check if the customer already exists, then Insert into pa_project_customers will
20775  be skipped and data will only be inserted into pa_project_contacts */
20776 
20777   pa_customer_info.Create_Customer_Contacts
20778                        ( X_Project_Id                  => l_project_id,
20779                          X_Customer_Id                 => p_customers_in(i).customer_id,
20780                          X_Project_Relation_Code       => p_customers_in(i).project_relationship_code,
20781                          X_Customer_Bill_Split         => p_customers_in(i).customer_bill_split,
20782                          X_Bill_To_Customer_Id         => l_bill_to_customer_id,
20783                          X_Ship_To_Customer_Id         => l_ship_to_customer_id,
20784                          X_Bill_To_Address_Id          => l_bill_to_address_id,
20785                          X_Ship_To_Address_Id          => l_ship_to_address_id,
20786                          X_Bill_To_Contact_Id          => l_bill_to_contact_id,
20787                          X_Ship_To_Contact_Id          => l_ship_to_contact_id,
20788                          X_Inv_Currency_Code           => l_INV_CURRENCY_CODE,	-- l_project_rec.PROJECT_CURRENCY_CODE bug 5554475
20789                          X_Inv_Rate_Type               => l_INV_RATE_TYPE,	--bug 5554475
20790                          X_Inv_Rate_Date               => l_INV_RATE_DATE,	--bug 5554475
20791                          X_Inv_Exchange_Rate           => l_INV_EXCHANGE_RATE,	--bug 5554475
20792                          X_Allow_Inv_Rate_Type_Fg      => l_ALLOW_INV_USER_RATE_FLAG, --bug 5554475
20793                          X_Bill_Another_Project_Fg     => l_bill_another_project_flag ,-- Added for 4153629,
20794                          X_Receiver_Task_Id            => l_receiver_task_id, --Added for 4153629
20795                          X_User                        => FND_GLOBAL.USER_ID,
20796                          X_Login                       => FND_GLOBAL.LOGIN_ID,
20797                          X_Err_Code                    => l_err_code,
20798                          X_Err_Stage                   => l_err_stage,
20799                          X_Err_Stack                   => l_err_stack
20800                        );
20801 IF l_err_code > 0
20802    THEN
20803 
20804       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20805       THEN
20806 
20807         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20808         THEN
20809                                     pa_interface_utils_pub.map_new_amg_msg
20810                                        ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20811                                         ,p_msg_attribute    => 'CHANGE'
20812                                         ,p_resize_flag      => 'N'
20813                                         ,p_msg_context      => 'PROJ'
20814                                         ,p_attribute1       => l_project_in_rec.pm_project_reference
20815                                         ,p_attribute2       => ''
20816                                         ,p_attribute3       => ''
20817                                         ,p_attribute4       => ''
20818                                         ,p_attribute5       => '');
20819                                 ELSE
20820                                      pa_interface_utils_pub.map_new_amg_msg
20821                                         ( p_old_message_code => l_err_stage
20822                                          ,p_msg_attribute    => 'CHANGE'
20823                                          ,p_resize_flag      => 'N'
20824                                          ,p_msg_context      => 'PROJ'
20825                                          ,p_attribute1       => l_project_in_rec.pm_project_reference
20826                                          ,p_attribute2       => ''
20827                                          ,p_attribute3       => ''
20828                                          ,p_attribute4       => ''
20829                                          ,p_attribute5       => '');
20830         END IF;
20831 
20832       END IF;
20833 
20834       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20835       RAISE FND_API.G_EXC_ERROR;
20836 
20837         ELSIF l_err_code < 0
20838         THEN
20839 
20840       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20841       THEN
20842                             pa_interface_utils_pub.map_new_amg_msg
20843                              ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20844                               ,p_msg_attribute    => 'CHANGE'
20845                               ,p_resize_flag      => 'N'
20846                               ,p_msg_context      => 'PROJ'
20847                               ,p_attribute1       => l_project_in_rec.pm_project_reference
20848                               ,p_attribute2       => ''
20849                               ,p_attribute3       => ''
20850                               ,p_attribute4       => ''
20851                               ,p_attribute5       => '');
20852       END IF;
20853 
20854       p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20855       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20856         END IF;
20857 
20858 END if;  /* is cur_customer%notfound */
20859 i := p_customers_in.next(i);
20860 ----dbms_output.put_line('After processing the customer first record');
20861 END LOOP;
20862 END IF; --  IF p_customers_in.exists(i)
20863 ----dbms_output.put_line('After processing the customer first record OUT OF THE LOOP');
20864 
20865 -- Bug 5622539
20866 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20867        (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
20868  i := p_customers_in.first;
20869 
20870 IF p_customers_in.exists(i)
20871          THEN
20872         tot_contribution := pa_customer_info.check_proj_tot_contribution(l_project_id,l_valid_proj_flag);
20873         IF l_valid_proj_flag THEN
20874         ----dbms_output.put_line('Value of tot_contribution'||tot_contribution);
20875         IF (tot_contribution <> 0  AND  tot_contribution <> 100) OR
20876         (tot_contribution <> 100) OR
20877         (tot_contribution > 100 )
20878         theN
20879            /* pa_interface_utils_pub.map_new_amg_msg
20880              ( p_old_message_code => 'PA_TOT_CUST_BILL_SPLIT_INVLD'
20881              ,p_msg_attribute    => 'CHANGE'
20882              ,p_resize_flag      => 'N'
20883              ,p_msg_context      => 'PROJ'
20884              ,p_attribute1       => ''
20885              ,p_attribute2       => ''
20886              ,p_attribute3       => ''
20887              ,p_attribute4       => ''
20888              ,p_attribute5       => ''); */
20889             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
20890                                ,p_msg_name       => 'PA_TOT_CUST_BILL_SPLIT_INVLD');
20891             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20892             p_return_status             := FND_API.G_RET_STS_ERROR;
20893             RAISE FND_API.G_EXC_ERROR;
20894          END IF;
20895         END IF;
20896 END IF;
20897 END IF;
20898 
20899 -- Bug 5622539
20900    pa_project_pvt.validate_data(
20901         p_calling_context  => 'UPDATE_PROJECT',
20902         p_project_id       => l_project_id,
20903         x_msg_count        => x_msg_count,
20904         x_msg_data         => x_msg_data,
20905         x_return_status    => x_return_status
20906    );
20907 
20908    if x_return_status <> FND_API.G_RET_STS_SUCCESS then
20909          x_msg_count := FND_MSG_PUB.count_msg;
20910          if x_msg_count = 1 then
20911             PA_INTERFACE_UTILS_PUB.get_messages
20912                   (p_encoded        => FND_API.G_FALSE,
20913                    p_msg_index      => 1,
20914                    p_msg_count      => x_msg_count,
20915                    p_msg_data       => x_msg_data,
20916                    p_data           => x_msg_data,
20917                    p_msg_index_out  => l_msg_index_out);
20918 
20919          end if;
20920          If x_return_status = FND_API.G_RET_STS_ERROR THEN
20921                    p_project_out.return_status := x_return_status;
20922                    RAISE FND_API.G_EXC_ERROR;
20923          else
20924                    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20925                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20926          END if;
20927    end if;
20928 
20929  /* End of changes by aditi for tracking */
20930 
20931 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value
20932 -- using the local variable instead of cursor variable
20933 
20934 /** Commented out for bug 5116772
20935 Below code added for bug 3279981. Customer at Top Task in FP_M
20936 /*
20937 --IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 commented
20938 IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_old_cust_top_task_flag THEN -- 4188765 added
20939 --Enabling the customer at top task flag. Thus, we need to set the default top task customer
20940      DECLARE
20941           hghst_ctr_cust_id NUMBER;
20942           hghst_ctr_cust_name VARCHAR2(50);
20943           hghst_ctr_cust_num  VARCHAR2(30);
20944 
20945           l_return_status VARCHAR2(10);
20946           l_msg_count     NUMBER := 0;
20947           l_msg_data      VARCHAR2(2000);
20948           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
20949      BEGIN
20950           l_exclude_cust_id_tbl(1) := 0;
20951           --Retrieve the customer to be set as the default top task customer
20952           pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
20953                                            P_API_VERSION            => 1.0
20954                                          , P_INIT_MSG_LIST          => 'T'
20955                                          , P_COMMIT                 => 'F'
20956                                          , P_VALIDATE_ONLY          => 'F'
20957                                          , P_VALIDATION_LEVEL       => 100
20958                                          , P_DEBUG_MODE             => 'N'
20959                                          , p_calling_module         => 'AMG'
20960                                          , p_project_id             => l_project_id
20961                                          , p_exclude_cust_id_tbl    => l_exclude_cust_id_tbl
20962                                          , x_highst_contr_cust_id   => hghst_ctr_cust_id
20963                                          , x_highst_contr_cust_name => hghst_ctr_cust_name
20964                                          , x_highst_contr_cust_num  => hghst_ctr_cust_num
20965                                          , x_return_status          => l_return_status
20966                                          , x_msg_count              => l_msg_count
20967                                          , x_msg_data               => l_msg_data );
20968 
20969           IF hghst_ctr_cust_id IS NOT null THEN
20970                 --This API call will update pa_project_customers and pa_tasks
20971                  pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
20972                                                       P_API_VERSION            => 1.0
20973                                                     , P_INIT_MSG_LIST          => 'T'
20974                                                     , P_COMMIT                 => 'F'
20975                                                     , P_VALIDATE_ONLY          => 'F'
20976                                                     , P_VALIDATION_LEVEL       => 100
20977                                                     , P_DEBUG_MODE             => 'N'
20978                                                     , p_calling_module         => 'AMG'
20979                                                     , p_mode                   => 'ENABLE'
20980                                                     , p_project_id             => l_project_id
20981                                                     , p_def_top_task_cust      => hghst_ctr_cust_id
20982                                                     , p_contr_update_cust      => null
20983                                                     , x_return_status          => l_return_status
20984                                                     , x_msg_count              => l_msg_count
20985                                                     , x_msg_data               => l_msg_data );
20986           END IF;
20987      END ;
20988 END IF;
20989 End Commented out for bug 5116772 **/
20990 
20991 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value in the above code
20992 -- using the local variable instead of cursor variable
20993 
20994 --IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 Commented
20995 /* Commented the Below code for Bug 5622539
20996 IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_old_cust_top_task_flag THEN -- 4188765 Added
20997 --Disabling the customer at top task flag. Thus, we need to set the customer bill split for the project customers
20998      DECLARE
20999           cust_id                PA_PROJECT_CUSTOMERS.customer_id%TYPE;
21000           hghst_ctr_cust_id      NUMBER;
21001           hghst_ctr_cust_name    VARCHAR2(50);
21002           hghst_ctr_cust_num     VARCHAR2(30);
21003           num_customers          NUMBER := 0;
21004           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
21005 
21006           l_return_status VARCHAR2(10);
21007           l_msg_count     NUMBER := 0;
21008           l_msg_data      VARCHAR2(2000);
21009           CURSOR cur_get_def_top_task_cust IS
21010           SELECT customer_id
21011           FROM   pa_project_customers
21012           WHERE  project_id = l_project_id
21013           AND    default_top_task_cust_flag = 'Y' ;
21014      BEGIN
21015          l_exclude_cust_id_tbl(1) := 0;
21016          --Retrieve the customer to be updated with 100% contribution
21017          pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
21018                                            P_API_VERSION            => 1.0
21019                                          , P_INIT_MSG_LIST          => 'T'
21020                                          , P_COMMIT                 => 'F'
21021                                          , P_VALIDATE_ONLY          => 'F'
21022                                          , P_VALIDATION_LEVEL       => 100
21023                                          , P_DEBUG_MODE             => 'N'
21024                                          , p_calling_module         => 'AMG'
21025                                          , p_project_id             => l_project_id
21026                                          , p_exclude_cust_id_tbl    => l_exclude_cust_id_tbl
21027                                          , x_highst_contr_cust_id   => hghst_ctr_cust_id
21028                                          , x_highst_contr_cust_name => hghst_ctr_cust_name
21029                                          , x_highst_contr_cust_num  => hghst_ctr_cust_num
21030                                          , x_return_status          => l_return_status
21031                                          , x_msg_count              => l_msg_count
21032                                          , x_msg_data               => l_msg_data );
21033           OPEN  cur_get_def_top_task_cust;
21034           FETCH cur_get_def_top_task_cust INTO cust_id;
21035           CLOSE cur_get_def_top_task_cust;
21036 
21037           IF hghst_ctr_cust_id IS NOT NULL THEN
21038                 --This API call will update pa_project_customers and pa_tasks
21039                  pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
21040                                                       P_API_VERSION            => 1.0
21041                                                     , P_INIT_MSG_LIST          => 'T'
21042                                                     , P_COMMIT                 => 'F'
21043                                                     , P_VALIDATE_ONLY          => 'F'
21044                                                     , P_VALIDATION_LEVEL       => 100
21045                                                     , P_DEBUG_MODE             => 'N'
21046                                                     , p_calling_module         => 'AMG'
21047                                                     , p_mode                   => 'DISABLE'
21048                                                     , p_project_id             => l_project_id
21049                                                     , p_def_top_task_cust      => cust_id
21050                                                     , p_contr_update_cust      => hghst_ctr_cust_id
21051                                                     , x_return_status          => l_return_status
21052                                                     , x_msg_count              => l_msg_count
21053                                                     , x_msg_data               => l_msg_data );
21054           END IF;
21055      END;
21056 END IF;
21057 --Changes end for Bug 3279981
21058 Changes end for Customer Account Relationships
21059 End of commented code for Bug 5622539 */
21060 
21061 
21062 --Added the following logic for the date effectve funds consumption flag. This is done for federal changes.
21063 --sunkalya:federal changes bug#5511353
21064 
21065 DECLARE
21066 	  hghst_ctr_cust_id      NUMBER;
21067           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
21068 	  l_return_status VARCHAR2(10);
21069           l_msg_count     NUMBER := 0;
21070           l_msg_data      VARCHAR2(2000);
21071 
21072 BEGIN
21073 
21074 
21075 
21076 IF (p_project_in.date_eff_funds_flag  ='Y' AND nvl(l_old_date_eff_funds_flag,'N') = 'N') OR
21077    (p_project_in.date_eff_funds_flag  ='N' AND nvl(l_old_date_eff_funds_flag,'N') = 'Y')
21078 
21079 THEN
21080 
21081 	IF p_project_in.date_eff_funds_flag = 'N' THEN  --disabling the federal flag
21082 
21083 		        IF ( 'N' = p_project_in.enable_top_task_customer_flag )  OR
21084 			   ( 'N' = nvl(l_old_cust_top_task_flag,'N') AND nvl(p_project_in.enable_top_task_customer_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
21085 			THEN
21086 
21087 				--This api will determine which customer to be made as 100% contributor.
21088 
21089 				PA_CUSTOMERS_CONTACTS_UTILS.Get_Highest_Contr_Fed_Cust(
21090 						   P_API_VERSION            => 1.0
21091 						 , P_INIT_MSG_LIST          => 'T'
21092 						 , P_COMMIT                 => 'F'
21093 						 , P_VALIDATE_ONLY          => 'F'
21094 						 , P_VALIDATION_LEVEL       => 100
21095 						 , P_DEBUG_MODE             => 'N'
21096 						 , p_calling_module         => 'AMG'
21097 						 , p_project_id             => l_project_id
21098 						 , x_highst_contr_cust_id   => hghst_ctr_cust_id
21099 						 , x_return_status          => l_return_status
21100 						 , x_msg_count              => l_msg_count
21101 						 , x_msg_data               => l_msg_data );
21102 
21103 
21104 				IF hghst_ctr_cust_id IS NOT NULL THEN
21105 
21106 					UPDATE pa_project_customers SET customer_bill_split = 100
21107 					WHERE customer_id = hghst_ctr_cust_id AND project_id = l_project_id;
21108 
21109 					UPDATE pa_project_customers SET customer_bill_split = 0
21110 					WHERE customer_id <> hghst_ctr_cust_id AND project_id = l_project_id;
21111 				END IF;
21112 			END IF;
21113 
21114 
21115 	ELSE --enabling the federal flag
21116 
21117 		UPDATE pa_project_customers SET customer_bill_split = null
21118 		WHERE project_id = l_project_id;
21119 
21120 
21121 	END IF;
21122 
21123 END IF;
21124 --End sunkalya:federal changes bug#5511353
21125 END;
21126 
21127 --Sunkalya federal: bug#5511353. This piece of code is added to take care of cases not
21128 --handled by the logic above for bill split manipulations.
21129 --The following will simply null out the bill split if either of the two flags are null.
21130 
21131 IF p_project_in.date_eff_funds_flag ='Y' OR p_project_in.enable_top_task_customer_flag = 'Y' THEN
21132 
21133 		UPDATE pa_project_customers SET customer_bill_split = null
21134 		WHERE project_id = l_project_id;
21135 END IF;
21136 --Sunkalya federal: bug#5511353.
21137 
21138 --Sunkalya federal. Bug#5511353
21139     OPEN  count_cust(l_project_id);
21140     FETCH count_cust INTO l_count_cust;
21141     CLOSE count_cust;
21142 
21143     OPEN  chk_task_level_funding(l_project_id);
21144     FETCH chk_task_level_funding INTO l_chk_task_level_funding;
21145     CLOSE chk_task_level_funding;
21146 
21147 
21148     IF l_count_cust > 1										AND
21149        l_chk_task_level_funding = 'Y'								AND
21150        p_project_in.date_eff_funds_flag = 'N'							AND
21151        l_old_date_eff_funds_flag= 'Y'								AND
21152        (
21153 		p_project_in.enable_top_task_customer_flag = 'N' OR
21154 			(
21155 				nvl(p_project_in.enable_top_task_customer_flag,
21156 				PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
21157 				l_old_cust_top_task_flag = 'N'
21158 			)
21159        )
21160 THEN
21161 		PA_UTILS.ADD_MESSAGE(	 p_app_short_name  =>  'PA'
21162 					,p_msg_name         => 'PA_TASK_FUNDING_EXIST'
21163 				    );
21164 		p_project_out.return_status := FND_API.G_RET_STS_ERROR;
21165 		RAISE  FND_API.G_EXC_ERROR;
21166 
21167 END IF;
21168 --Sunkalya federal. Bug#5511353
21169 
21170 
21171 -- Reset the global variable
21172 
21173    G_ParChildTsk_chks_deferred := 'N';
21174 
21175 -- Need to handle project status changes in a special way
21176 -- We would have updated the project with all the other required
21177 -- information and new check whether it is ok to change to the
21178 -- new status. If not ok, we will rollback all the other changes
21179 -- The reason we are doing all the other updates is because
21180 -- the Handle_project_status_change API and all the other
21181 -- APIs that it uses,fetch the information about the project
21182 -- from the database. Some of the information it would be looking for
21183 -- may well be an input to this API itself (Update_project)
21184 -- Hence,it would be prudent to first insert/update the project/task/
21185 -- key members/class categories and then do the checking for status
21186 -- change. If there is a failure in the status change APIs
21187 -- then we will rollback all the changes
21188 
21189    IF l_project_status_changed = 'Y' THEN
21190              Pa_project_stus_utils.Handle_Project_Status_Change
21191                 (x_calling_module          => 'UPDATE_PROJECT'
21192                  ,X_project_id             => l_project_rec.project_id
21193                  ,X_old_proj_status_code   => l_project_rec.project_status_code
21194                  ,X_new_proj_status_code   => p_project_in.project_status_code
21195                  ,X_project_type           => l_project_rec.project_type
21196                  ,X_project_start_date     => l_project_rec.start_date
21197                  ,X_project_end_date       => l_project_rec.completion_date
21198                  ,X_public_sector_flag     => l_project_rec.public_sector_flag
21199                  ,X_attribute_category     => l_project_rec.attribute_category
21200                  ,X_attribute1             => l_project_rec.attribute1
21201                  ,X_attribute2             => l_project_rec.attribute2
21202                  ,X_attribute3             => l_project_rec.attribute3
21203                  ,X_attribute4             => l_project_rec.attribute4
21204                  ,X_attribute5             => l_project_rec.attribute5
21205                  ,X_attribute6             => l_project_rec.attribute6
21206                  ,X_attribute7             => l_project_rec.attribute7
21207                  ,X_attribute8             => l_project_rec.attribute8
21208                  ,X_attribute9             => l_project_rec.attribute9
21209                  ,X_attribute10            => l_project_rec.attribute10
21210                  ,X_pm_product_code        => l_project_rec.pm_product_code
21211                  ,x_init_msg               => 'N'
21212                  ,x_verify_ok_flag         => l_verify_ok_flag
21213                  ,x_wf_enabled_flag        => l_wf_enabled_flag
21214                  ,X_err_stage              => l_err_stage
21215                  ,X_err_stack              => l_err_stack
21216                  ,x_err_msg_count          => l_err_msg_count
21217                  ,x_warnings_only_flag     => l_warnings_only_flag );
21218 
21219           -- If verify not ok then raise error
21220              IF  l_verify_ok_flag = 'N' THEN
21221                  p_project_out.return_status := l_return_status;
21222                  RAISE  FND_API.G_EXC_ERROR;
21223              END IF;
21224              l_statement := 'UPDATE PA_PROJECTS SET ';
21225                 -- special case for update to and from 'CLOSED'
21226              IF l_closing_project = 'Y' THEN
21227                  l_statement := l_statement ||
21228                  ' PROJECT_STATUS_CODE = ' ||
21229                   ''''||p_project_in.project_status_code||''''||','||
21230                  ' CLOSED_DATE = SYSDATE,';
21231              ELSIF  l_reopening_project = 'Y' THEN
21232                  l_statement := l_statement ||
21233        ' PROJECT_STATUS_CODE = ' ||
21234                  ''''||p_project_in.project_status_code||''''||','||
21235                ' CLOSED_DATE = NULL,';
21236              ELSE
21237     l_statement :=   l_statement ||
21238           ' PROJECT_STATUS_CODE = ' ||
21239        ''''||p_project_in.project_status_code||''''||',';
21240              END IF;
21241              IF l_wf_enabled_flag = 'Y' THEN
21242                 l_statement := l_statement ||
21243                 ' WF_STATUS_CODE = '||
21244                 ''''||l_wf_status_code||''''||',';
21245              END IF;
21246 /* Code commented and added for bug#1752494 starts here */
21247 /*
21248              l_statement :=     l_statement ||
21249                                 ' LAST_UPDATE_DATE = '||''''||
21250                                 SYSDATE||''''||',';
21251 */
21252              l_statement :=     l_statement ||
21253                                 ' LAST_UPDATE_DATE = SYSDATE'||',';
21254 /* Code commented and added for bug#1752494 ends here */
21255              l_statement :=   l_statement ||
21256                              ' LAST_UPDATED_BY = '||G_USER_ID||',';
21257 
21258              l_statement :=   l_statement ||
21259                              ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID;
21260 
21261              l_statement :=   l_statement ||
21262                   ' WHERE PROJECT_ID = '|| TO_CHAR(l_project_id);
21263 
21264              l_cursor := dbms_sql.open_cursor;
21265              dbms_sql.parse(l_cursor, l_statement, dbms_sql.native);
21266              l_rows   := dbms_sql.execute(l_cursor);
21267              IF dbms_sql.is_open (l_cursor) THEN
21268                dbms_sql.close_cursor (l_cursor);
21269              END IF;
21270 
21271              /*Stubbed Out Auto Initiate Demand on Project Approval functionality
21272                Bug 3819086
21273 
21274              -- Bug 3611598 If Workflow is not enabled then call the wrapper API
21275              -- which in turn will invoke the concurrent program to Initiate Demand
21276              --If the Project Status is Approved
21277              OPEN c_project_sys_status_code ;
21278              FETCH c_project_sys_status_code INTO l_status_code ;
21279          CLOSE c_project_sys_status_code;
21280 
21281              IF nvl(l_status_code,'-99') = 'APPROVED' THEN
21282 
21283              IF nvl(l_wf_enabled_flag,'N') <> 'Y' THEN
21284                  PA_Actions_Pub.RUN_ACTION_CONC_PROCESS_WRP
21285                     (
21286                        p_project_id => l_project_id
21287                        ,p_project_number => p_project_in.pa_project_number -- 3671408 Added IN Parameter and passing project_number
21288                        ,x_msg_count => l_msg_count
21289                        ,x_msg_data  => l_msg_data
21290                        ,x_return_status  => l_return_status
21291                     );
21292                  IF (l_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
21293                       RAISE   FND_API.G_EXC_ERROR;
21294                  END IF;
21295              END IF;
21296 
21297              END IF;
21298 
21299              End of Commenting for Bug 3819086*/
21300 
21301              IF l_wf_enabled_flag = 'Y' THEN   -- start the project workflow
21302                 Pa_project_wf.Start_Project_Wf
21303                            (p_project_id    => l_project_id,
21304                             p_err_stack     => l_err_stack,
21305                             p_err_stage     => l_err_stage,
21306                             p_err_code      => l_err_code
21307      );
21308                 IF l_err_code <> 0 THEN
21309        p_project_out.return_status := l_return_status;
21310                    RAISE  FND_API.G_EXC_ERROR;
21311                 END IF;
21312              END IF;
21313        END IF;
21314 
21315 
21316 -- FP-M Bug # 3301192  --update project
21317    --maansari5/18 Delete all the dependency before creating new ones.
21318    --CAUTION: THIS WILL DELETE ALL THE INTRA-DEPENDENCIES IN THE PROJECT EVEN IF THE USER DOES NOT INTEND TO DELETE.
21319         --This has been discussed today may 18 with Sakthi and Hubert. The reason is performance.
21320 IF nvl(p_pm_product_code,'WORKPLAN') <> 'WORKPLAN'    --Should not run in publishing flow.
21321 THEN
21322 --bug 3845240: use l_project_id instead of p_project_out.pa_project_id
21323     IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') AND
21324        l_update_structure_version_id IS NOT NULL AND
21325        l_update_structure_version_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21326     THEN
21327         pa_proj_task_struc_pub.delete_intra_dependency(
21328                   p_element_version_id    => l_update_structure_version_id
21329                   ,x_return_status         => l_return_status );
21330 
21331            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21332            THEN
21333                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21334            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21335            THEN
21336                RAISE FND_API.G_EXC_ERROR;
21337            END IF;
21338     END IF;
21339 
21340    l_d_loop_count := p_tasks_in.first;
21341    WHILE l_d_loop_count IS NOT NULL LOOP
21342       l_task_in_rec := p_tasks_in(l_d_loop_count);
21343 
21344       --Commented by rtarway during FP.M Developement Mapping and Set Financial Changes.
21345       --Since the task Id is available, this function is not needed. This call fails in case of Spilt_mapping structure
21346       --Added by rtarway during FP.M Developement Mapping and Set Financial Changes.
21347       l_d_task_id :=  p_tasks_out(l_d_loop_count).pa_task_id;
21348 
21349 --bug 3845240: use l_project_id instead of p_project_out.pa_project_id
21350       IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
21351 
21352 --maansari5/18 replaced api call CONVERT_PM_TASKREF_TO_ID to CONVERT_PM_TASKREF_TO_ID_all
21353         IF l_d_task_id IS NULL AND l_task_in_rec.pm_task_reference IS NOT NULL AND
21354            l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21355         THEN
21356            PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id
21357                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
21358                                               ,p_structure_type => l_structure_type
21359                                               ,p_out_task_id => l_d_task_id
21360                                               ,p_return_status => l_return_status);
21361 
21362            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21363            THEN
21364                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21365            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21366            THEN
21367                RAISE FND_API.G_EXC_ERROR;
21368            END IF;
21369         END IF;
21370 --maansari5/18
21371 
21372       l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_update_structure_version_id
21373                                           ,p_task_id => l_d_task_id);
21374 
21375       pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
21376                                                      ,p_delimeter => l_task_in_rec.pred_delimiter
21377                                                      ,p_task_version_Id => l_d_task_ver_id
21378                                                      ,x_return_status => l_return_status
21379                                                      ,x_msg_count => l_msg_count
21380                                                      ,x_msg_data  => l_msg_data);
21381 
21382           --maansari5/18
21383            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21384            THEN
21385                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21386            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21387            THEN
21388                RAISE FND_API.G_EXC_ERROR;
21389            END IF;
21390           --maansari5/18
21391 
21392           l_d_task_id := null;
21393     END IF;
21394    l_d_loop_count := p_tasks_in.next(l_d_loop_count);
21395   END LOOP;
21396 END IF; --should not run in publishing flow.
21397 -- 22-DEC-97, jwhite ----------------------------------------------------------
21398 -- Added new OUT-paramter p_workflow_started
21399 
21400 IF (l_wf_enabled_flag = 'Y' )
21401  THEN
21402   p_workflow_started    := 'Y';
21403 END IF;
21404 -- -----------------------------------------------------------------------------------
21405 
21406 
21407 -- ZAKHAN Extensible Attribute Changes
21408 --<Add Project/Task level Extensible Attributes>
21409 
21410     i := p_ext_attr_tbl_in.first;
21411 
21412     IF p_ext_attr_tbl_in.exists(i)
21413     THEN
21414 
21415       -- get the correct structure type
21416       l_structure_type := p_structure_in.structure_type;
21417       IF (l_structure_type IS NULL or l_structure_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
21418         l_structure_type := 'FINANCIAL';
21419       END IF;
21420 
21421       PA_USER_ATTR_PUB.Process_User_Attrs_Data(
21422          p_ext_attr_data_table   => p_ext_attr_tbl_in,
21423          p_project_id            => l_project_id,
21424          p_structure_type        => l_structure_type,
21425          x_failed_row_id_list    => l_failed_row_id_list,
21426          x_errorcode             => l_errorcode,
21427          x_msg_count             => l_msg_count,
21428          x_msg_data              => l_msg_data,
21429          x_return_status         => l_return_status      );
21430 
21431       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21432       THEN
21433          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21434       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21435       THEN
21436          RAISE FND_API.G_EXC_ERROR;
21437       END IF;
21438    END IF;
21439 --</Add Project/Task level Extensible Attributes>
21440 
21441 --Begin Add by rtarway FP.M changes for Mapping
21442 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
21443 IF (G_PROJECT_SHARING_TYPE = 'SPLIT_MAPPING' AND p_structure_in.structure_type = 'WORKPLAN')
21444 THEN
21445      l_d_loop_count := p_tasks_in.first;
21446      WHILE l_d_loop_count IS NOT NULL LOOP
21447           l_task_in_rec := p_tasks_in(l_d_loop_count);
21448           --No Function Security Check required
21449           IF (
21450                (l_task_in_rec.mapped_task_reference  IS NULL OR l_task_in_rec.mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
21451                OR
21452                (l_task_in_rec.mapped_task_id  IS NULL OR l_task_in_rec.mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
21453              )
21454           THEN
21455                pa_project_pub.update_mapping
21456                (
21457                    p_api_version            => p_api_version_number
21458                  , p_init_msg_list          => FND_API.G_FALSE
21459                  , p_commit                 => FND_API.G_FALSE--bug 3766967
21460                  , p_debug_mode             => FND_API.G_TRUE
21461                  , p_project_id             => l_project_id
21462                  , p_proj_source_reference  => null
21463                  , p_wkp_structure_version_id => p_structure_in.structure_version_id
21464                  --, p_wkp_task_id            => l_tasks_out(i).pa_task_id--Since the tasks are already created , this will have task Ids
21465                  , p_wkp_task_reference     => l_task_in_rec.pm_task_reference
21466                  , px_mapped_task_id        => l_task_in_rec.mapped_task_id------------|One of theses two should be passed
21467                  , p_mapped_task_reference  => l_task_in_rec.mapped_task_reference ----|
21468                  , x_return_status          => l_return_status
21469                  , x_msg_count              => l_msg_count
21470                  , x_msg_data               => l_msg_data
21471                );
21472                IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
21473                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21474                ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
21475                      RAISE FND_API.G_EXC_ERROR;
21476                END IF;
21477           END IF;
21478           l_d_loop_count := p_tasks_in.next(l_d_loop_count);
21479      END LOOP;
21480 END IF;
21481 --Set Financial Task Flag --FP.M Changes
21482 IF (G_PROJECT_SHARING_TYPE='SHARE_PARTIAL' AND p_structure_in.structure_type = 'FINANCIAL' )
21483 THEN
21484      i := p_tasks_in.first();
21485      WHILE i IS NOT NULL LOOP
21486           --Initialize the return status to success
21487           p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
21488           l_task_in_rec := p_tasks_in(i);
21489           --No Function Security Check required
21490           --Get record version number from pa_tasks table
21491           OPEN  c_get_pa_record_version_number ( p_tasks_out(i).task_version_id  , l_project_id);
21492           FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
21493           CLOSE c_get_pa_record_version_number;
21494 
21495           IF
21496           (
21497             l_task_in_rec.financial_task_flag IS NOT NULL
21498             AND
21499             l_task_in_rec.financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21500           )
21501           THEN
21502                PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
21503                (
21504                       p_api_version               => p_api_version_number
21505                     , p_init_msg_list             => FND_API.G_FALSE
21506                     , p_commit                    => FND_API.G_FALSE--bug 3766967
21507                     , p_calling_module            => 'AMG'
21508                     , p_debug_mode                => FND_API.G_TRUE
21509                     , p_task_version_id           => p_tasks_out(i).task_version_id
21510                     , p_checked_flag              => l_task_in_rec.financial_task_flag
21511                     , p_record_version_number     => l_patask_record_version_number
21512                     , p_project_id                => l_project_id -- 4969319 p_project_out.pa_project_id
21513                     , p_published_version_exists  => G_Published_version_exists
21514                     , x_return_status             => l_return_status
21515                     , x_msg_count                 => l_msg_count
21516                     , x_msg_data                  => l_msg_data
21517                );
21518                -- Populating the appropriate values in task out records
21519                p_tasks_out(i).return_status    := l_return_status;
21520 
21521                IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
21522                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21523                ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
21524                      RAISE FND_API.G_EXC_ERROR;
21525                END IF;
21526           END IF;
21527           i := p_tasks_in.next(i);
21528      END LOOP;
21529 END IF;
21530 --End Add by rtarway  FP.M chages for Mapping and Set Financial task
21531 ------ 3435905 : FP M : Deliverables Changes For AMG Start-----------
21532 
21533     -- While updating a project, user can create new deliverables or
21534     -- update existing deliverables. If deliverable_reference exists
21535     -- then update_deliverable will be called else create_deliverables
21536     -- will be called.
21537     -- For actions there is same api for both create and update. Thus
21538     -- same wrapper api will be called for actions in both the cases
21539 
21540     -- 3773373 commented below code, here deliveable security check is done
21541     -- unconditionally, also, local variable usage is wrong
21542     -- if i is not null, assign first deliverable's return status as success
21543     -- and call create_deliverable or update_deliverable api
21544     -- here, create_deliverable and update_deliverable apis are doing deliverable security check
21545     -- so no need to it here .
21546 
21547     /*
21548 
21549        --initialize return status to success
21550        i:=1;
21551       -- 3435905 changed from p_deliverable_out to G_deliverables_out_tbl
21552 
21553        G_deliverables_out_tbl(i).return_status   := FND_API.G_RET_STS_SUCCESS;
21554 
21555        -- Function Security Check
21556        PA_PM_FUNCTION_SECURITY_PUB.check_function_security
21557        (p_api_version_number => p_api_version_number,
21558         p_responsibility_id  => l_resp_id,
21559         p_function_name      => 'PA_DELIVERABLE_EDIT',
21560         p_msg_count          => l_msg_count,
21561         p_msg_data           => l_msg_data,
21562         p_return_status      => l_return_status,
21563         p_function_allowed   => l_function_allowed);
21564 
21565 
21566         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21567         THEN
21568             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21569         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21570         THEN
21571             RAISE FND_API.G_EXC_ERROR;
21572         END IF;
21573 
21574         IF l_function_allowed = 'N' THEN
21575            pa_interface_utils_pub.map_new_amg_msg
21576            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
21577             ,p_msg_attribute    => 'CHANGE'
21578             ,p_resize_flag      => 'Y'
21579             ,p_msg_context      => 'GENERAL'
21580             ,p_attribute1       => ''
21581             ,p_attribute2       => ''
21582             ,p_attribute3       => ''
21583             ,p_attribute4       => ''
21584             ,p_attribute5       => '');
21585 
21586         p_return_status := FND_API.G_RET_STS_ERROR;
21587             RAISE FND_API.G_EXC_ERROR;
21588       END IF;
21589     */
21590     -- 3773373 changed local variable usage from i_dlvr to i
21591     -- if i is not null, set return status to success
21592     i := p_deliverables_in.first();
21593 
21594     IF i IS NOT NULL THEN
21595        -- 3435905 changed from p_deliverable_out to G_deliverables_out_tbl
21596        G_deliverables_out_tbl(i).return_status   := FND_API.G_RET_STS_SUCCESS;
21597     END IF;
21598 
21599     WHILE i IS NOT NULL LOOP
21600 
21601      -- Validate Deliverable reference / id- not null, unique
21602      -- 3858251 Added if condition to check, if user had passed dlvr ref and id ,
21603      --         then call below api to validate reference and id
21604 
21605       IF p_deliverables_in(i).deliverable_id IS NOT NULL AND p_deliverables_in(i).deliverable_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  THEN
21606 
21607           Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
21608             ( p_deliverable_reference => p_deliverables_in(i).pm_deliverable_reference
21609             , p_deliverable_id        => p_deliverables_in(i).deliverable_id
21610             , p_project_id            => l_project_id
21611             , p_out_deliverable_id    => l_deliverable_id
21612             , p_return_status         => x_return_status
21613           );
21614 
21615         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR    THEN
21616            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21617         ELSIF x_return_status = FND_API.G_RET_STS_ERROR       THEN
21618                 RAISE FND_API.G_EXC_ERROR;
21619         END IF;
21620 
21621       END IF;
21622 
21623       -- 3858251 end
21624 
21625   --  Call Update_Deliverable in following cases
21626   --      1. If deliverable_id is passed.
21627   --      2. If deliverable_id is not passed and deliverable_reference  is not unique
21628   --  Otherwise call Create_Deliverables
21629 
21630 
21631       IF ( nvl( p_deliverables_in(i).deliverable_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN
21632         -- call Update_deliverables
21633            l_dlvr_dml_action := G_UPDATE_MODE;
21634       ELSE
21635          -- Bug 3651538 Moved the call of api from outside IF condition to inside else part
21636          -- as need to check for reference uniqueness only if ID is not passed.
21637          pa_deliverable_utils.is_dlvr_reference_unique (
21638             p_deliverable_reference  =>  p_deliverables_in(i).pm_deliverable_reference
21639           , p_project_id             =>  l_project_id
21640           , x_unique_flag            =>  l_unique_flag
21641           , x_return_status          =>  x_return_status );
21642 
21643          IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR    THEN
21644             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21645          ELSIF x_return_status = FND_API.G_RET_STS_ERROR       THEN
21646             RAISE FND_API.G_EXC_ERROR;
21647          END IF;
21648 
21649           IF ( l_unique_flag = 'N' )THEN
21650        -- call Update_deliverables
21651               l_dlvr_dml_action := G_UPDATE_MODE;
21652           ELSE
21653        -- call Create_Deliverables
21654               l_dlvr_dml_action := G_CREATE_MODE;
21655           END IF; -- deliverable_reference is unique
21656 
21657       END IF; -- non null deliverable_id is passed
21658 
21659       IF (l_dlvr_dml_action = G_CREATE_MODE) THEN
21660 
21661       -- Invoking the Create Deliverable API
21662             Pa_Project_Pub.create_deliverable
21663                 (
21664                     p_api_version            => p_api_version_number
21665                   , p_init_msg_list          => p_init_msg_list
21666                   -- 3735792, passing p_commit as false to next level api calls
21667                   , p_commit                 => FND_API.G_FALSE
21668                   , p_debug_mode             => FND_API.G_TRUE
21669                   , x_return_status          => l_return_status
21670                   , p_deliverable_name       => p_deliverables_in(i).deliverable_name
21671                   , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
21672                   , p_deliverable_type_id    => p_deliverables_in(i).deliverable_type_id
21673                   , p_deliverable_owner_id   => p_deliverables_in(i).deliverable_owner_id
21674                   , p_description            => p_deliverables_in(i).description
21675                   , p_status_code            => p_deliverables_in(i).status_code
21676                   , p_due_date               => p_deliverables_in(i).due_date
21677                   , p_completion_date        => p_deliverables_in(i).completion_date
21678                   , p_progress_weight        => p_deliverables_in(i).progress_weight
21679                   , px_deliverable_id        => l_deliverable_id
21680                   , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
21681                   -- for bug# 3729250
21682                   --  , p_carrying_out_org_id    => p_deliverables_in(i).carrying_out_org_id
21683                   , p_task_id                => p_deliverables_in(i).task_id
21684                   , p_task_source_reference  => p_deliverables_in(i).task_source_reference
21685                   , p_project_id             => l_project_id
21686                   , p_proj_source_reference  => null
21687                   , p_action_in_tbl          => p_deliverable_actions_in
21688                   -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
21689                   , x_action_out_tbl         => G_deliverable_actions_out_tbl
21690               --  , x_action_out_tbl         => p_deliverable_actions_out
21691                   , p_item_id                => p_deliverables_in(i).item_id            -- 3630378 added parameter
21692                   , p_inventory_org_id       => p_deliverables_in(i).inventory_org_id
21693                   , p_quantity               => p_deliverables_in(i).quantity
21694                   , p_uom_code               => p_deliverables_in(i).uom_code
21695                   -- for bug# 3729250
21696                   --  , p_item_description       => p_deliverables_in(i).item_description
21697                   , p_unit_price         => p_deliverables_in(i).unit_price
21698                   , p_unit_number        => p_deliverables_in(i).unit_number
21699                   , p_currency_code      => p_deliverables_in(i).currency_code
21700                   , p_pm_source_code         =>  p_pm_product_code                       /* Bug no. 3651113 */
21701                   , x_msg_count              => l_msg_count
21702                   , x_msg_data               => l_msg_data
21703               );
21704 
21705       ELSE  --  l_dlvr_dml_action = G_UPDATE_MODE
21706 
21707       update_deliverable
21708       (
21709             p_api_version            => p_api_version_number
21710           , p_init_msg_list          => p_init_msg_list
21711           -- 3735792, passing p_commit as false to next level api calls
21712           , p_commit                 => FND_API.G_FALSE
21713           , p_debug_mode             => FND_API.G_TRUE
21714           , x_return_status          => l_return_status
21715           , p_deliverable_name       => p_deliverables_in(i).deliverable_name
21716           , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
21717           , p_deliverable_type_id    => p_deliverables_in(i).deliverable_type_id
21718           , p_deliverable_owner_id   => p_deliverables_in(i).deliverable_owner_id
21719           , p_description            => p_deliverables_in(i).description
21720           , p_status_code            => p_deliverables_in(i).status_code
21721           , p_due_date               => p_deliverables_in(i).due_date
21722           , p_completion_date        => p_deliverables_in(i).completion_date
21723           , p_progress_weight        => p_deliverables_in(i).progress_weight
21724           , px_deliverable_id        => l_deliverable_id
21725           , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
21726           -- for bug# 3729250
21727           --  , p_carrying_out_org_id    => p_deliverables_in(i).carrying_out_org_id
21728           , p_task_id                => p_deliverables_in(i).task_id
21729           , p_task_source_reference  => p_deliverables_in(i).task_source_reference
21730           , p_project_id             => l_project_id
21731           , p_proj_source_reference  => null
21732          -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
21733           , p_action_in_tbl          => p_deliverable_actions_in
21734       --  , x_action_out_tbl         => p_deliverable_actions_out
21735           , x_action_out_tbl         => G_deliverable_actions_out_tbl
21736           , p_item_id                => p_deliverables_in(i).item_id                -- 3630378 added parameter
21737           , p_inventory_org_id       => p_deliverables_in(i).inventory_org_id
21738           , p_quantity               => p_deliverables_in(i).quantity
21739           , p_uom_code               => p_deliverables_in(i).uom_code
21740           -- for bug# 3729250
21741           --  , p_item_description       => p_deliverables_in(i).item_description
21742           , p_unit_price             => p_deliverables_in(i).unit_price
21743           , p_unit_number            => p_deliverables_in(i).unit_number
21744           , p_currency_code          => p_deliverables_in(i).currency_code
21745           , p_pm_source_code         =>  p_pm_product_code                       /* Bug no. 3651113 */
21746           , x_msg_count              => l_msg_count
21747           , x_msg_data               => l_msg_data
21748       );
21749       END IF;
21750 
21751    -- Populating the appropriate values in deliverables out records
21752 
21753       -- 3435905 return status and deliverable id is directly assigned to
21754       -- global deliverable table
21755       -- removed the p_deliverables_out parameter and added global table
21756 
21757 --      p_deliverables_out(i).return_status    := l_return_status;
21758 --      p_deliverables_out(i).deliverable_id   := l_deliverable_id;
21759 
21760       G_deliverables_out_tbl(i).return_status := l_return_status;
21761       G_deliverables_out_tbl(i).deliverable_id := l_deliverable_id;
21762 
21763       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
21764             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21765       ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
21766             RAISE FND_API.G_EXC_ERROR;
21767       END IF;
21768 
21769       -- 3773373 changed local variable usage from i_dlvr to i
21770       i := p_deliverables_in.next(i);
21771 
21772     END LOOP;
21773 
21774    ------ 3435905 : FP M : Deliverables Changes For AMG END-----------
21775 
21776 
21777         -- Bug # 4582750.
21778 --Note that API  pa_project_structure_utils.lock_unlock_wp_str IS NOT autonomosu transaction.
21779 
21780     IF p_update_mode = 'PA_UPD_WBS_ATTR' AND l_prev_locked_status IS NOT NULL AND l_prev_locked_status = 'N'
21781        and (p_pm_product_code <> 'WORKPLAN') -- Bug # 4758888.
21782        AND p_structure_in.structure_version_id IS NOT NULL
21783        AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21784     THEN
21785 
21786           IF l_debug_mode = 'Y' THEN
21787              pa_debug.g_err_stage := 'Before calling pa_project_structure_utils.lock_unlock_wp_str for UNLOCKING'||
21788              'p_project_in.pa_project_id='||p_project_in.pa_project_id||
21789               '-l_structure_version_id='||l_structure_version_id;
21790               pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
21791           END IF;
21792 
21793           pa_project_structure_utils.lock_unlock_wp_str
21794                   (p_project_id                   => p_project_in.pa_project_id
21795                   ,p_structure_version_id         => p_structure_in.structure_version_id
21796                   ,p_lock_status_code             => 'UNLOCKED'
21797                   ,p_calling_module               => 'PA_UPD_WBS_ATTR'
21798                   ,x_return_status                => l_x_return_status
21799                   ,x_msg_count                    => l_x_msg_count
21800                  ,x_msg_data                     => l_x_msg_data);
21801 
21802          IF l_debug_mode = 'Y' THEN
21803               pa_debug.g_err_stage := 'After  calling pa_project_structure_utils.lock_unlock_wp_str for UNLOCKING'||
21804              'l_x_return_status='||l_x_return_status;
21805               pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
21806          END IF;
21807 
21808          IF l_x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
21809          THEN
21810              p_project_out.return_status := l_x_return_status;
21811              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
21812 
21813          ELSIF l_x_return_status = FND_API.G_RET_STS_ERROR
21814          THEN
21815              p_project_out.return_status := l_x_return_status;
21816            RAISE  FND_API.G_EXC_ERROR;
21817          END IF;
21818 
21819     END IF;
21820 
21821     -- End Bug # 4582750.
21822 
21823 
21824 
21825    IF (FND_API.to_boolean( p_commit )) OR
21826            l_wf_enabled_flag = 'Y'
21827    THEN
21828       COMMIT WORK;
21829    END IF;
21830    --4218977, rtarway, unset this global variable
21831    if (p_pm_product_code <> 'WORKPLAN') then
21832          G_OP_VALIDATE_FLAG := null;
21833      G_TASK_STR_UPDATE_MODE := null;
21834    end if;
21835 
21836 EXCEPTION
21837 
21838     WHEN FND_API.G_EXC_ERROR THEN
21839 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
21840         pa_project_check_pvt.G_index_counter                := 0;
21841 
21842         p_return_status := FND_API.G_RET_STS_ERROR ;
21843         G_ParChildTsk_chks_deferred := 'N';
21844 
21845         ROLLBACK TO Update_project_pub;
21846 
21847         -- Begin Bug # 4582750.
21848 
21849         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
21850            AND p_structure_in.structure_version_id IS NOT NULL
21851            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21852         then
21853 
21854                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
21855                 (p_project_id                   => p_project_in.pa_project_id
21856                 , p_structure_version_id        => p_structure_in.structure_version_id
21857                 , p_lock_status_code            => 'UNLOCKED'
21858                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
21859                 ,x_return_status                => l_x_return_status
21860                 ,x_msg_count                    => l_x_msg_count
21861                 ,x_msg_data                     => l_x_msg_data);
21862 
21863             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
21864                     raise;
21865             end if;
21866 
21867         end if;
21868 
21869         -- End Bug # 4582750.
21870 
21871        --4218977, rtarway, unset this global variable
21872        if (p_pm_product_code <> 'WORKPLAN') then
21873          G_OP_VALIDATE_FLAG := null;
21874      G_TASK_STR_UPDATE_MODE := null;
21875        end if;
21876 
21877          -- 4537865
21878          p_workflow_started := NULL ;
21879 
21880         FND_MSG_PUB.Count_And_Get
21881       (   p_count    =>  p_msg_count  ,
21882           p_data    =>  p_msg_data  );
21883 
21884 
21885     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
21886   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
21887         pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
21888         pa_project_check_pvt.G_index_counter                := 0;
21889         G_ParChildTsk_chks_deferred := 'N';
21890         ROLLBACK TO Update_project_pub;
21891 
21892     -- Begin Bug # 4582750.
21893         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
21894            AND p_structure_in.structure_version_id IS NOT NULL
21895            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21896         then
21897 
21898 
21899             pa_project_structure_utils.lock_unlock_wp_str_autonomous
21900             (p_project_id                   => p_project_in.pa_project_id
21901             , p_structure_version_id        => p_structure_in.structure_version_id
21902             , p_lock_status_code            => 'UNLOCKED'
21903                 ,p_calling_module               => 'PA_UPD_WBS_ATTR'
21904             ,x_return_status                => l_x_return_status
21905             ,x_msg_count                    => l_x_msg_count
21906             ,x_msg_data                     => l_x_msg_data);
21907 
21908             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
21909                     raise;
21910             end if;
21911 
21912     end if;
21913 
21914     -- End Bug # 4582750.
21915 
21916        --4218977, rtarway, unset this global variable
21917        if (p_pm_product_code <> 'WORKPLAN') then
21918          G_OP_VALIDATE_FLAG := null;
21919      G_TASK_STR_UPDATE_MODE := null;
21920        end if;
21921 
21922         -- 4537865
21923         p_workflow_started := NULL ;
21924 
21925         FND_MSG_PUB.Count_And_Get
21926       (   p_count    =>  p_msg_count  ,
21927           p_data    =>  p_msg_data  );
21928 
21929      WHEN NO_DATA_FOUND THEN
21930       -- code fix for bug 3579257 : Bug 3627124 starts
21931          --dbms_output.put_line ('in no data found');
21932      p_return_status := FND_API.G_RET_STS_ERROR;
21933      ROLLBACK TO update_project_pub;
21934 
21935 
21936         -- Begin Bug # 4582750.
21937 
21938         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
21939            AND p_structure_in.structure_version_id IS NOT NULL
21940            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21941         then
21942 
21943 
21944                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
21945                 (p_project_id                   => p_project_in.pa_project_id
21946                 , p_structure_version_id        => p_structure_in.structure_version_id
21947                 , p_lock_status_code            => 'UNLOCKED'
21948                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
21949                 ,x_return_status                => l_x_return_status
21950                 ,x_msg_count                    => l_x_msg_count
21951                 ,x_msg_data                     => l_x_msg_data);
21952 
21953             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
21954                     raise;
21955             end if;
21956 
21957         end if;
21958 
21959         -- End Bug # 4582750.
21960 
21961          pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
21962          pa_project_check_pvt.G_index_counter                := 0;
21963          G_ParChildTsk_chks_deferred := 'N';
21964        --4218977, rtarway, unset this global variable
21965        if (p_pm_product_code <> 'WORKPLAN') then
21966          G_OP_VALIDATE_FLAG := null;
21967      G_TASK_STR_UPDATE_MODE := null;
21968        end if;
21969 
21970         -- 4537865
21971         p_workflow_started := NULL ;
21972 
21973          -- code fix for bug 3579257 : Bug 3627124 ends
21974          pa_interface_utils_pub.map_new_amg_msg
21975            ( p_old_message_code => 'PA_NO_DATA_FOUND'
21976             ,p_msg_attribute    => 'CHANGE'
21977             ,p_resize_flag      => 'N'
21978             ,p_msg_context      => 'GENERAL'
21979             ,p_attribute1       => ''
21980             ,p_attribute2       => ''
21981             ,p_attribute3       => ''
21982             ,p_attribute4       => ''
21983             ,p_attribute5       => '');
21984 
21985     WHEN ROW_ALREADY_LOCKED THEN
21986   ROLLBACK TO update_project_pub;
21987 
21988         -- Begin Bug # 4582750.
21989 
21990         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
21991            AND p_structure_in.structure_version_id IS NOT NULL
21992            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21993         then
21994 
21995 
21996                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
21997                 (p_project_id                   => p_project_in.pa_project_id
21998                 , p_structure_version_id        => p_structure_in.structure_version_id
21999                 , p_lock_status_code            => 'UNLOCKED'
22000                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22001                 ,x_return_status                => l_x_return_status
22002                 ,x_msg_count                    => l_x_msg_count
22003                 ,x_msg_data                     => l_x_msg_data);
22004 
22005             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22006                     raise;
22007             end if;
22008 
22009         end if;
22010 
22011         -- End Bug # 4582750.
22012 
22013         pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22014         pa_project_check_pvt.G_index_counter                := 0;
22015         G_ParChildTsk_chks_deferred := 'N';
22016 
22017         -- 4537865
22018         p_workflow_started := NULL ;
22019 
22020   p_return_status := FND_API.G_RET_STS_ERROR;
22021       --4218977, rtarway, unset this global variable
22022        if (p_pm_product_code <> 'WORKPLAN') then
22023          G_OP_VALIDATE_FLAG := null;
22024      G_TASK_STR_UPDATE_MODE := null;
22025        end if;
22026   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
22027   THEN
22028       FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_P_AMG');
22029       FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
22030       FND_MESSAGE.SET_TOKEN('ENTITY', G_PROJECT_CODE);
22031       FND_MSG_PUB.ADD;
22032   END IF;
22033 
22034   FND_MSG_PUB.Count_And_Get
22035       (   p_count    =>  p_msg_count  ,
22036           p_data    =>  p_msg_data  );
22037 
22038 
22039     WHEN OTHERS THEN
22040 
22041         ROLLBACK TO Update_project_pub;
22042 
22043         -- Begin Bug # 4582750.
22044 
22045         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN'))  -- Bug # 4758888.
22046            AND p_structure_in.structure_version_id IS NOT NULL
22047            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22048         then
22049 
22050 
22051                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22052                 (p_project_id                   => p_project_in.pa_project_id
22053                 , p_structure_version_id        => p_structure_in.structure_version_id
22054                 , p_lock_status_code            => 'UNLOCKED'
22055                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22056                 ,x_return_status                => l_x_return_status
22057                 ,x_msg_count                    => l_x_msg_count
22058                 ,x_msg_data                     => l_x_msg_data);
22059 
22060             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22061                     raise;
22062             end if;
22063 
22064         end if;
22065 
22066         -- End Bug # 4582750.
22067 
22068         G_ParChildTsk_chks_deferred := 'N';
22069         pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22070         pa_project_check_pvt.G_index_counter                := 0;
22071         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
22072        --4218977, rtarway, unset this global variable
22073        if (p_pm_product_code <> 'WORKPLAN') then
22074          G_OP_VALIDATE_FLAG := null;
22075        end if;
22076         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
22077             FND_MSG_PUB.add_exc_msg
22078         ( p_pkg_name    => G_PKG_NAME
22079         , p_procedure_name  => l_api_name  );
22080         END IF;
22081 
22082         -- 4537865
22083         p_workflow_started := NULL ;
22084 
22085         FND_MSG_PUB.Count_And_Get
22086       (   p_count    =>  p_msg_count  ,
22087           p_data    =>  p_msg_data  );
22088 
22089 
22090 END Update_project;
22091 
22092 --------------------------------------------------------------------------------
22093 --Name:               update_task
22094 --Type:               Procedure
22095 --Description:        This procedure can be used to update a task
22096 --
22097 --
22098 --Called subprograms:
22099 --
22100 --
22101 --
22102 --History:
22103 --    31-JUL-1996        R. Krishnamurthy      Created
22104 --    28-NOV-1996   L. de Werker     Added 11 parameters for descriptive flexfields
22105 --    04-DEC-1996   L. de Werker    Debugged errors + added checking of NULL values.
22106 --    05-DEC-1996   L. de Werker    Added validation of service_type_code
22107 --            Fixed error that occurred when a parent was changed,
22108 --            added change of WBS_level, if appropriate.
22109 --            Added checking for task_completion_date
22110 --            Added WHO columns update in dynamic SQL string
22111 --    06-DEC-1996  L. de Werker    Added locking mechanism
22112 --    10-DEC-1996  L. de Werker    Added parameter p_pa_parent_task_id
22113 --            Added parameter p_address_id
22114 --    03-MAY-2000       Rakesh Raghavan         Fixed Bug # 1289156.
22115 --    15-jul-2003      sramesh        -- Added the code for bug 2982057.
22116 --                                       Changed the logic to populate the long_task_name
22117 --                                       with task_name when the long_task_name is null.
22118 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
22119 --                                        dependency_type and lag days to tasks and create dependencies.
22120 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
22121 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
22122 --          05-APR-2004 Rakesh Raghavan      Progress Management Changes. Bug # 3420093.
22123 --          29-Dec-2005 vkadimes     Bug Number 4689326 and 4689888 Changes are tagged with Bug Numbers.
22124 PROCEDURE update_task
22125 ( p_api_version_number               IN  NUMBER,
22126   p_commit                           IN  VARCHAR2  := FND_API.G_FALSE,
22127   p_init_msg_list                    IN  VARCHAR2  := FND_API.G_FALSE,
22128   p_msg_count                        OUT NOCOPY NUMBER,  /*Added the nocopy check for 4537865 */
22129   p_msg_data                         OUT NOCOPY VARCHAR2,  /*Added the nocopy check for 4537865 */
22130   p_return_status                    OUT NOCOPY VARCHAR2,  /*Added the nocopy check for 4537865 */
22131 --Project Structures
22132   p_ref_task_id                      IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22133 --Project Structures
22134   p_pm_product_code                  IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22135   p_pm_project_reference             IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22136   p_pa_project_id                    IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22137   p_pm_task_reference                IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22138   p_task_number                      IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22139   p_pa_task_id                       IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22140   p_task_name                        IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22141   p_long_task_name                   IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22142   p_task_description                 IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22143   p_task_start_date                  IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22144   p_task_completion_date             IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22145   p_pm_parent_task_reference         IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22146   p_pa_parent_task_id                IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22147   p_address_id                       IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22148   p_carrying_out_organization_id     IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22149   p_service_type_code                IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22150   p_task_manager_person_id           IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22151   p_billable_flag                    IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22152   p_chargeable_flag                  IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22153   p_ready_to_bill_flag               IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22154   p_ready_to_distribute_flag         IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22155   p_limit_to_txn_controls_flag       IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22156   p_labor_bill_rate_org_id           IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22157   p_labor_std_bill_rate_schdl        IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22158   p_labor_schedule_fixed_date        IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22159   p_labor_schedule_discount          IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22160   p_nl_bill_rate_org_id              IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22161   p_nl_std_bill_rate_schdl           IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22162   p_nl_schedule_fixed_date           IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22163   p_nl_schedule_discount             IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22164   p_labor_cost_multiplier_name       IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22165   p_cost_ind_rate_sch_id             IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22166   p_rev_ind_rate_sch_id              IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22167   p_inv_ind_rate_sch_id              IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22168   p_cost_ind_sch_fixed_date          IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22169   p_rev_ind_sch_fixed_date           IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22170   p_inv_ind_sch_fixed_date           IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22171   p_labor_sch_type                   IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22172   p_nl_sch_type                      IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22173   p_actual_start_date                IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22174   p_actual_finish_date               IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22175   p_early_start_date                 IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22176   p_early_finish_date                IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22177   p_late_start_date                  IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22178   p_late_finish_date                 IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22179   p_scheduled_start_date             IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22180   p_scheduled_finish_date            IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22181   p_tasks_dff                        IN  VARCHAR2    := 'N', --bug 6153503
22182   p_attribute_category               IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22183   p_attribute1                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22184   p_attribute2                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22185   p_attribute3                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22186   p_attribute4                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22187   p_attribute5                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22188   p_attribute6                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22189   p_attribute7                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22190   p_attribute8                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22191   p_attribute9                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22192   p_attribute10                      IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22193   --bug 6153503
22194   p_attribute11                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22195   p_attribute12                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22196   p_attribute13                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22197   p_attribute14                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22198   p_attribute15                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22199   p_allow_cross_charge_flag          IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22200   p_project_rate_date                IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22201   p_project_rate_type                IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22202   p_cc_process_labor_flag            IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22203   p_labor_tp_schedule_id             IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22204   p_labor_tp_fixed_date              IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22205   p_cc_process_nl_flag               IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22206   p_nl_tp_schedule_id                IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22207   p_nl_tp_fixed_date                 IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22208   p_receive_project_invoice_flag     IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22209   p_work_type_id                     IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22210   p_emp_bill_rate_schedule_id        IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22211   p_job_bill_rate_schedule_id        IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22212 --Sakthi  MCB
22213   p_non_lab_std_bill_rt_sch_id       IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22214   p_taskfunc_cost_rate_type          IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22215   p_taskfunc_cost_rate_date          IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22216 --Sakthi  MCB
22217 --Project Structures
22218  p_structure_type                    IN VARCHAR2      := 'FINANCIAL',
22219  p_structure_version_id              IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22220  P_OBLIGATION_START_DATE             IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22221  P_OBLIGATION_FINISH_DATE            IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22222  P_ESTIMATED_START_DATE              IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22223  P_ESTIMATED_FINISH_DATE             IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22224  P_BASELINE_START_DATE               IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22225  P_BASELINE_FINISH_DATE              IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22226  P_CLOSED_DATE                       IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22227  P_WQ_UOM_CODE                       IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22228  P_WQ_ITEM_CODE                      IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22229  P_STATUS_CODE                       IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22230  P_WF_STATUS_CODE                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22231  P_PM_SOURCE_CODE                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22232  P_PRIORITY_CODE                     IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22233  P_MILESTONE_FLAG                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22234  P_CRITICAL_FLAG                     IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22235  P_INC_PROJ_PROGRESS_FLAG            IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22236  P_LINK_TASK_FLAG                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22237  P_CALENDAR_ID                       IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22238  P_PLANNED_EFFORT                    IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22239  P_DURATION                          IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22240  P_PLANNED_WORK_QUANTITY             IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22241  P_TASK_TYPE                         IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22242 --Project Structures
22243  p_labor_disc_reason_code            IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22244  p_non_labor_disc_reason_code        IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22245 --PA L changes -- bug 2872708  --update_task
22246  p_retirement_cost_flag              VARCHAR2         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22247  p_cint_eligible_flag                VARCHAR2         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22248  p_cint_stop_date                    DATE             := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22249 --end PA L changes -- bug 2872708
22250   p_out_pa_task_id                   OUT NOCOPY NUMBER,  /*Added the nocopy check for 4537865 */
22251  p_out_pm_task_reference              OUT NOCOPY  VARCHAR2,  /*Added the nocopy check for 4537865 */
22252  p_update_task_structure             IN   VARCHAR2,
22253 -- PA L Changes 3010538
22254  p_process_mode                      IN   VARCHAR2 := 'ONLINE'
22255 -- FP-M Bug # 3301192
22256  ,p_pred_string                   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22257 -- ,p_pred_delimiter                     VARCHAR2    DEFAULT ','
22258  ,p_pred_delimiter               VARCHAR2   :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22259 -- FP M changes begin (venkat)
22260   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22261   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22262   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22263   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
22264   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22265   ,p_total_slack            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22266   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22267   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22268   ,p_invoice_method         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22269   ,p_customer_id            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22270   ,p_gen_etc_source_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22271 -- FP M changes end (venkat)
22272 -- FP M changes start (Mapping )
22273   ,p_financial_task_flag           IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22274   ,p_mapped_task_id                IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22275   ,p_mapped_task_reference         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22276 -- FP M changes end (Mapping )
22277  ,p_deliverable                 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22278 -- (Begin venkat) Bug #3450684 --------------------------------------------------------------------
22279  ,p_ext_act_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22280  ,p_ext_remain_duration         IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22281  ,p_ext_sch_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22282 -- (End venkat) Bug #3450684 --------------------------------------------------------------------
22283 
22284 -- Progress Management Changes. Bug # 3420093.
22285   ,p_etc_effort                 IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22286   ,p_percent_complete           IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22287 -- Progress Management Changes. Bug # 3420093.
22288   ,p_is_wp_seperate_from_fn     IN   VARCHAR2 := 'X'  -- Added for bug#3451073
22289   ,p_calling_api      IN VARCHAR2 := 'UPDATE_TASK'   -- Added for Bug # 4199694
22290   ,p_op_validate_flag  IN VARCHAR2 := 'Y'
22291 )
22292 
22293 IS
22294 
22295 l_return_status         VARCHAR2(1);
22296 l_msg_count             NUMBER;
22297 l_msg_data              VARCHAR2(2000);
22298 l_out_pa_task_id        NUMBER;
22299 l_out_pm_task_reference VARCHAR2(25);
22300 
22301 l_api_name              CONSTANT      VARCHAR2(30):=  'update_task';
22302 
22303 l_project_id            NUMBER;   --bug 2471668
22304 
22305 --project structures
22306 l_function_allowed      VARCHAR2(1);
22307 l_resp_id               NUMBER := 0;
22308 --project structures
22309 
22310 --Bug 2665656
22311 --l_pm_product_code                      VARCHAR2(30);
22312 --Bug 2665656
22313 
22314 l_update_wbs_flag      VARCHAR2(1);
22315 l_long_task_name    VARCHAR2(240);  /*Added for bug 2982057 */
22316 
22317 --Bug 3106457
22318 --l_structure_version_id   pa_proj_element_versions.element_version_id%TYPE;
22319 --Changed by rtarway for BUG 3919800, the type gives error when assigned a value containg miss num
22320 l_structure_version_id     NUMBER;
22321 
22322 -- FP-M Bug # 3301192
22323    l_d_task_id NUMBER;
22324    l_d_task_ver_id NUMBER;
22325    l_d_struct_ver_id NUMBER;
22326    l_ref_task_id       NUMBER; -- Bug 3705333
22327 l_amg_task_number       VARCHAR2(50);  --bug 3705333
22328  l_amg_segment1       VARCHAR2(25);  --bug 3705333
22329 
22330 --Added by rtarway in FP.M Development
22331 l_task_version_id NUMBER;
22332 l_patask_record_version_number NUMBER;
22333 --Added by rtarway in FP.M Development
22334 
22335 --Bug 3279981. Fetch project information
22336 CURSOR cur_get_proj_billing_info(c_project_id IN NUMBER) IS
22337 SELECT enable_top_task_customer_flag, enable_top_task_inv_mth_flag,
22338        revenue_accrual_method, invoice_method, project_type
22339 FROM   pa_projects_all
22340 WHERE  project_id = c_project_id;
22341 
22342 CURSOR cur_check_proj_cust_exist (c_project_id IN NUMBER , c_customer_id IN NUMBER ) IS
22343 SELECT 'Y'
22344 FROM  pa_project_customers
22345 WHERE project_id = c_project_id
22346 AND   customer_id = c_customer_id ;
22347 
22348 CURSOR cur_get_def_top_task_cust(c_project_id IN NUMBER) IS
22349 SELECT customer_id
22350 FROM  pa_project_customers
22351 WHERE project_id = c_project_id
22352 AND   default_top_task_cust_flag = 'Y';
22353 -- Added This cursor for Bug No 4689326
22354 CURSOR l_cur_customer_name(l_customer_id NUMBER)
22355  IS
22356   SELECT customer_name from PA_CUSTOMERS_V
22357   WHERE customer_id = l_customer_id;
22358 -- Added for bug 5242015
22359 CURSOR cur_top_task_customer_id (l_task_id NUMBER ) IS
22360 SELECT customer_id FROM pa_tasks
22361 WHERE task_id=l_task_id;
22362 
22363 l_proj_top_task_customer_flag VARCHAR2(1);
22364 l_proj_top_task_inv_mth_flag  VARCHAR2(1);
22365 l_proj_revenue_acc_method     VARCHAR2(30);
22366 l_proj_invoice_method         VARCHAR2(30);
22367 l_proj_type                   VARCHAR2(20);
22368 l_invoice_method              VARCHAR2(30) := p_invoice_method;
22369 l_customer_id                 NUMBER       := p_customer_id;
22370 l_dummy                       VARCHAR2(1);
22371 l_published_version_exists    VARCHAR2(1);
22372 l_is_wp_separate_from_fn      VARCHAR2(1);
22373 l_is_wp_versioning_enabled    VARCHAR2(1);
22374 l_structure_type              VARCHAR2(30) ;
22375 l_customer_name		      VARCHAR2(360); -- Added for bug 4689888  -- Modified to VARCHAR2(360) for bug 5856469
22376 l_top_task_customer_id       NUMBER; -- Added for Bug 5242015
22377 /* Added for bug 3705333 */
22378  CURSOR   l_amg_project_csr
22379       (p_pa_project_id pa_projects.project_id%type)
22380    IS
22381    SELECT   segment1
22382    FROM     pa_projects p
22383    WHERE p.project_id = l_project_id ;  --Bug#3747312 p_pa_project_id;
22384    /* changes end  for bug 3705333 */
22385 --Bug 3279981
22386 --rtarway, BUG 3908013
22387 l_attribute_category  VARCHAR2(150);
22388 l_attribute1         VARCHAR2(150);
22389 l_attribute2         VARCHAR2(150);
22390 l_attribute3         VARCHAR2(150);
22391 l_attribute4         VARCHAR2(150);
22392 l_attribute5         VARCHAR2(150);
22393 l_attribute6         VARCHAR2(150);
22394 l_attribute7         VARCHAR2(150);
22395 l_attribute8         VARCHAR2(150);
22396 l_attribute9         VARCHAR2(150);
22397 l_attribute10        VARCHAR2(150);
22398 --rtarway, BUG 3908013
22399 --Added by rtarway for BUG 3919800
22400 
22401 --bug 6153503
22402 l_wp_attribute_category  VARCHAR2(150);
22403 l_wp_attribute1          VARCHAR2(150);
22404 l_wp_attribute2          VARCHAR2(150);
22405 l_wp_attribute3          VARCHAR2(150);
22406 l_wp_attribute4          VARCHAR2(150);
22407 l_wp_attribute5          VARCHAR2(150);
22408 l_wp_attribute6          VARCHAR2(150);
22409 l_wp_attribute7          VARCHAR2(150);
22410 l_wp_attribute8          VARCHAR2(150);
22411 l_wp_attribute9          VARCHAR2(150);
22412 l_wp_attribute10         VARCHAR2(150);
22413 l_wp_attribute11         VARCHAR2(150);
22414 l_wp_attribute12         VARCHAR2(150);
22415 l_wp_attribute13         VARCHAR2(150);
22416 l_wp_attribute14         VARCHAR2(150);
22417 l_wp_attribute15         VARCHAR2(150);
22418 
22419 l_project_sharing_type VARCHAR2(250);
22420 l_pa_task_id           NUMBER;
22421 l_fin_task_flag        VARCHAR2(1);
22422 
22423 --Used to get current_working_version in case of VE case
22424  CURSOR cur_get_working_struc_ver (l_project_id NUMBER,l_structure_type VARCHAR2)
22425    IS
22426      SELECT c.element_version_id
22427        FROM  pa_proj_element_versions c
22428            , pa_structure_types a
22429            , pa_proj_structure_types b
22430            , pa_proj_elem_ver_structure d
22431       WHERE c.project_id = l_project_id
22432         AND a.structure_type_id = b.structure_type_id
22433         AND b.proj_element_id = c.proj_element_id
22434         AND a.structure_type = l_structure_type
22435         AND d.project_id = c.project_id
22436         AND d.element_version_id = c.element_version_id
22437         AND d.status_code = 'STRUCTURE_WORKING';
22438 
22439 --Used to get structure version in VD case
22440  CURSOR cursor_get_struc_ver (l_project_id NUMBER,l_structure_type VARCHAR2)
22441    IS
22442      SELECT c.element_version_id
22443        FROM  pa_proj_element_versions c
22444            , pa_structure_types a
22445            , pa_proj_structure_types b
22446            , pa_proj_elem_ver_structure d
22447       WHERE c.project_id = l_project_id
22448         AND a.structure_type_id = b.structure_type_id
22449         AND b.proj_element_id = c.proj_element_id
22450         AND a.structure_type = l_structure_type
22451         AND d.project_id = c.project_id
22452         AND d.element_version_id = c.element_version_id;
22453 
22454 
22455 CURSOR CUR_GET_FINANCIAL_FLAG (l_project_id NUMBER, l_proj_element_id NUMBER , l_parent_str_ver_id NUMBER)
22456 IS
22457 SELECT FINANCIAL_TASK_FLAG
22458 from pa_proj_element_versions
22459 where project_id = l_project_id
22460 and   proj_element_id = l_proj_element_id
22461 and   parent_structure_version_id = l_parent_str_ver_id;
22462 
22463 --BUG 4106154, rtarway
22464 l_update_pa_tasks VARCHAR2(1);
22465 
22466 l_tasks_out          pa_project_pub.task_out_tbl_type;  --bug 4199694
22467 
22468 --BUG 4081329, rtarway
22469      cursor cur_get_child_task_dates (l_project_id NUMBER, l_task_id NUMBER)
22470      IS   select task_id, start_date, completion_date, parent_task_id from pa_tasks  --Fix for 7427388
22471           where project_id = l_project_id
22472           and   completion_date is null
22473                start with parent_task_id = l_task_id
22474                connect by parent_task_id = prior task_id
22475                and  project_id = l_project_id;
22476 
22477      type l_task_id_tbl_type is table of pa_tasks.task_id%type index by binary_integer;
22478      type l_start_date_tbl_type is table of pa_tasks.start_date%type index by binary_integer;
22479      type l_completion_date_tbl_type is table of pa_tasks.completion_date%type index by binary_integer;
22480 
22481      l_task_id_tbl             l_task_id_tbl_type;
22482      l_start_date_tbl          l_start_date_tbl_type;
22483      l_completion_date_tbl     l_completion_date_tbl_type;
22484 
22485      -- Fix for 7427388
22486      type l_parent_task_id_tbl_type is table of pa_tasks.parent_task_id%type index by binary_integer;
22487      l_parent_task_id_tbl      l_parent_task_id_tbl_type;
22488      l_parent_task_date        DATE;
22489 
22490 --BUG 4081329, rtarway
22491 
22492 BEGIN
22493    ----dbms_output.put_line('value of p_task_number in update_task'||p_task_number);
22494 
22495   SAVEPOINT update_task_pub;
22496     -- Begin Bug # 4630058.
22497     -- Initialize the message table if requested.
22498     if FND_API.TO_BOOLEAN(p_init_msg_list) then
22499         FND_MSG_PUB.initialize;
22500     end if;
22501     -- End Bug # 4630058.
22502 
22503   -- 4537865 : Initialize return status to success
22504   p_return_status    := FND_API.G_RET_STS_SUCCESS;
22505 
22506   --BUG 4218977, we need to initialize this variable,
22507   --keeping in mind that it might be set by update_project
22508   --we can use the parameter p_calling_api,
22509   --set this parameter only if p_calling_api is 'UPDATE_TASK'
22510   --this will be passed as UPDATE_PROJECT from update_project API
22511   if p_calling_api <> 'UPDATE_PROJECT' then
22512      G_OP_VALIDATE_FLAG := p_op_validate_flag;
22513   end if;
22514 
22515   --bug 3880482
22516       PA_PROJECT_PVT.Convert_pm_projref_to_id
22517         (        p_pm_project_reference =>      p_pm_project_reference
22518                  ,  p_pa_project_id     =>      p_pa_project_id
22519                  ,  p_out_project_id    =>      l_project_id
22520                  ,  p_return_status     =>      l_return_status
22521         );
22522 
22523 
22524       IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
22525 
22526               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
22527       ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
22528               RAISE  FND_API.G_EXC_ERROR;
22529       END IF;
22530 
22531      PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id;  --bug 2471668 ( in the project context )
22532   --end bug 3880482
22533      --Added by rtarway for BUG 3919800
22534      l_structure_type := p_structure_type;
22535      --Get task id
22536      --Added by rtarway, for BUG 3919800, this is done as we require to do validation in share_partial case beforehand
22537      -- storing p_pa_task_id in local variable will make it consistent for other structures also.
22538       if (p_pa_task_id is not null and p_pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
22539          then l_pa_task_id := p_pa_task_id;
22540       end if;
22541       --Also Validate task id
22542       PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
22543       (
22544            p_pa_project_id        => l_project_id    ,
22545            p_structure_type       => l_structure_type,
22546            p_pa_task_id           => p_pa_task_id ,
22547            p_pm_task_reference    => p_pm_task_reference ,
22548            p_out_task_id          => l_pa_task_id,
22549            p_return_status        => l_return_status
22550       );
22551       IF l_return_status <> 'S'
22552       THEN
22553           RAISE FND_API.G_EXC_ERROR;
22554       END IF;
22555 
22556        --bug 2471668.
22557        --We need to call this API here toget the corrct project id. This is also
22558        --called from the private API. But I discussed with Sakthi and he is ok to call this
22559        --twice once here and second time in private API. The idea is to make the advanced security changes
22560        --only in public APIs.
22561 
22562  -- Initialize local variables
22563  -- Bug#3747312
22564  l_published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
22565  l_is_wp_separate_from_fn   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
22566  l_is_wp_versioning_enabled := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
22567 
22568   -- In case of shared structure p_structure_type should be passed as
22569   -- FINANCIAL and this should be the first validation.
22570   IF (p_structure_type is null OR p_structure_type = 'WORKPLAN') THEN
22571        IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
22572             NVL( l_is_wp_separate_from_fn,'N') = 'N'  --bug 2876703 update_task
22573        THEN
22574              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
22575              THEN
22576                  pa_interface_utils_pub.map_new_amg_msg
22577                    ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
22578                        ,p_msg_attribute    => 'CHANGE'
22579                        ,p_resize_flag      => 'N'
22580                        ,p_msg_context      => 'GENERAL'
22581                        ,p_attribute1       => ''
22582                        ,p_attribute2       => ''
22583                        ,p_attribute3       => ''
22584                        ,p_attribute4       => ''
22585                        ,p_attribute5       => '');
22586              END IF;
22587              RAISE FND_API.G_EXC_ERROR;
22588        END IF;
22589   END IF ;
22590    -- Bug#3747312
22591 
22592      --end of bug 2471668
22593 
22594 /*    --bug 2665656
22595     IF NVL( p_pm_product_code, 'WORKPLAN' ) = 'WORKPLAN'
22596     THEN
22597        l_pm_product_code := null;
22598     END IF;
22599     --bug 2665656
22600 */
22601 
22602   -- Bug#3747312
22603   -- Derive the structure type based on whether its shared case
22604   -- and WP versioning is enabled or not and whether published
22605   -- version exists.
22606 
22607   -- BUG 3919800, rtarway, Assign l_structure_version_id value of p_structure_version_id
22608      l_structure_version_id := p_structure_version_id;
22609 
22610 
22611   IF nvl(l_published_version_exists,'N') = 'Y'
22612       AND nvl(l_is_wp_separate_from_fn,'N') = 'N'
22613       AND nvl(l_is_wp_versioning_enabled,'N') = 'Y'
22614       AND p_structure_type = 'FINANCIAL'
22615       AND p_pm_product_code <> 'WORKPLAN'
22616    THEN
22617        --Change the flow to WORKPLAN
22618        l_structure_type := 'WORKPLAN';
22619        l_update_pa_tasks := 'Y'; --BUG 4106154, rtarway
22620 
22621       --BUG 3919800, in case of workplan, we must derive structure version id and pass it further.
22622       OPEN  cur_get_working_struc_ver(l_project_id, l_structure_type);
22623       FETCH cur_get_working_struc_ver into l_structure_version_id;
22624       CLOSE cur_get_working_struc_ver ;
22625    ELSE
22626        l_structure_type := p_structure_type;
22627    END IF;
22628    -- Bug#3747312
22629 
22630  --Added by rtarway for BUG 3919800
22631  --Validate for task and change the structure type, if structure type is shared partial and workplan task is being updated.
22632   --1. get the structure sharing code
22633   l_project_sharing_type := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
22634   IF (l_project_sharing_type='SHARE_PARTIAL' )
22635   THEN
22636           --3. get the structure version id
22637                IF (l_structure_version_id is null or l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
22638                THEN
22639                    --1.VE case, there will be only one working workplan version, get the structure version id for that version
22640                      IF l_is_wp_versioning_enabled = 'Y'
22641                      THEN
22642                          OPEN  cur_get_working_struc_ver(l_project_id, l_structure_type);
22643                          FETCH cur_get_working_struc_ver into l_structure_version_id;
22644                          CLOSE cur_get_working_struc_ver ;
22645 
22646                    --2.VD case, there will be only one version, get that version
22647                      ELSE
22648                          OPEN  cursor_get_struc_ver(l_project_id, l_structure_type);
22649                          FETCH cursor_get_struc_ver into l_structure_version_id;
22650                          CLOSE cursor_get_struc_ver;
22651                      END IF;
22652                END IF;
22653           --4. Get the existing financial_task_flag
22654           OPEN  CUR_GET_FINANCIAL_FLAG (l_project_id, l_pa_task_id,l_structure_version_id);
22655           FETCH CUR_GET_FINANCIAL_FLAG into l_fin_task_flag;
22656           CLOSE CUR_GET_FINANCIAL_FLAG;
22657           --5. if existing financial task flag is 'N', change the structure type to 'WORKPLAN'
22658           IF l_fin_task_flag = 'N'
22659           THEN
22660                l_structure_type := 'WORKPLAN';
22661           END IF;
22662   END IF;
22663 --End Added by rtarway for BUG 3919800
22664 
22665 /* Code added for the bug 2982057 starts */
22666  IF p_long_task_name IS NULL OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
22667    l_long_task_name := p_task_name;
22668  ELSE
22669    l_long_task_name := p_long_task_name;
22670  END IF;
22671 
22672  /* Code addition for bug 2982057 ends */
22673  /* CHANGES START FOR BUG 3705333*/
22674 
22675  OPEN l_amg_project_csr(l_project_id ); --Bug#3747312
22676  FETCH l_amg_project_csr INTO l_amg_segment1;
22677  CLOSE l_amg_project_csr;
22678 
22679  --Project Structures
22680      IF p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22681      THEN
22682         l_ref_task_id :=  null;
22683      ELSE
22684         l_ref_task_id :=  p_ref_task_id;
22685      END IF;
22686   --Project Structures
22687 
22688  IF l_ref_task_id is null THEN
22689 
22690           IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
22691 
22692           l_ref_task_id :=  p_pa_parent_task_id;
22693     --  --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
22694 
22695           ELSIF (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
22696 
22697             --Begin change by rtarway for BUG 3661788, use Convert_pm_taskref_to_id_all  to get task id instead of using l_task_ref_to_id_csr
22698             --OPEN l_task_ref_to_id_csr(l_project_id,p_pm_parent_task_reference);
22699             --FETCH l_task_ref_to_id_csr INTO l_ref_task_id;
22700             PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
22701             (
22702                 p_pa_project_id        => l_project_id    ,
22703                 p_structure_type       => l_structure_type, --Bug#3747312 p_structure_type,
22704                 p_pm_task_reference    => p_pm_parent_task_reference ,
22705                 p_out_task_id          => l_ref_task_id,
22706                 p_return_status        => l_return_status
22707             );
22708 
22709             --changed by rtarway for BUG 3661788
22710             --IF l_task_ref_to_id_csr%NOTFOUND
22711             IF (l_return_status <> 'S')
22712             THEN
22713                 --rtarway , 3661788, comment close command
22714                 --CLOSE l_task_ref_to_id_csr;
22715                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
22716                 THEN
22717                  l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
22718                                           (p_task_number => p_task_name
22719                                           ,p_task_reference => p_pm_task_reference
22720                                           ,p_task_id => '');
22721 
22722                          pa_interface_utils_pub.map_new_amg_msg
22723                           ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
22724                            ,p_msg_attribute    => 'CHANGE'
22725                            ,p_resize_flag      => 'N'
22726                            ,p_msg_context      => 'TASK'
22727                            ,p_attribute1       => l_amg_segment1
22728                            ,p_attribute2       => l_amg_task_number
22729                            ,p_attribute3       => ''
22730                            ,p_attribute4       => ''
22731                            ,p_attribute5       => '');
22732                 END IF;
22733                 RAISE  FND_API.G_EXC_ERROR;
22734              END IF;
22735             --rtarway , 3661788, comment close command
22736             --CLOSE l_task_ref_to_id_csr;
22737            END IF;
22738        END IF;
22739  -- -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
22740 /* END OF CHANGES FOR BUG 3705333 */
22741 --Bug 3279981 Review : Shifted this code before the update_one_task call
22742 OPEN  cur_get_proj_billing_info(l_project_id);
22743 FETCH cur_get_proj_billing_info INTO l_proj_top_task_customer_flag, l_proj_top_task_inv_mth_flag,
22744                                      l_proj_revenue_acc_method, l_proj_invoice_method, l_proj_type;
22745 CLOSE cur_get_proj_billing_info;
22746 
22747 IF 'Y' = l_proj_top_task_inv_mth_flag THEN
22748      IF ( p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
22749      --changed p_pa_task_id to l_pa_task_id, 3919800, rtarway
22750      AND  PA_BILLING_CORE.Update_Top_Task_Invoice_Method( l_project_id, l_pa_task_id ) = 'Y' THEN
22751           IF pa_project_pvt.check_valid_dist_rule
22752                   ( l_proj_type,
22753                     l_proj_revenue_acc_method||'/'||p_invoice_method,
22754                     l_proj_top_task_inv_mth_flag ) = 'N'   THEN
22755                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
22756                         pa_interface_utils_pub.map_new_amg_msg
22757                           ( p_old_message_code => 'PA_INV_TASK_INVOICE_METHOD' -- for bug# 4156036
22758                            ,p_msg_attribute    => 'CHANGE'
22759                            ,p_resize_flag      => 'N'
22760                            ,p_msg_context      => 'TASK'
22761                            ,p_attribute1       => p_invoice_method
22762                            ,p_attribute2       => ''
22763                            ,p_attribute3       => ''
22764                            ,p_attribute4       => ''
22765                            ,p_attribute5       => '');
22766                     END IF;
22767                     RAISE  FND_API.G_EXC_ERROR;
22768           END IF;
22769 
22770           -- Function Security Check
22771           PA_PM_FUNCTION_SECURITY_PUB.check_function_security
22772           ( p_api_version_number => p_api_version_number,
22773             p_responsibility_id  => l_resp_id,
22774             p_function_name      => 'PA_PAXPREPR_TASK_INV_MTH',
22775             p_msg_count          => l_msg_count,
22776             p_msg_data           => l_msg_data,
22777             p_return_status      => l_return_status,
22778             p_function_allowed   => l_function_allowed);
22779           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
22780                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22781           ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
22782                RAISE FND_API.G_EXC_ERROR;
22783           END IF;
22784 
22785           IF l_function_allowed = 'N' THEN
22786                pa_interface_utils_pub.map_new_amg_msg
22787                 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
22788                  ,p_msg_attribute    => 'CHANGE'
22789                  ,p_resize_flag      => 'Y'
22790                  ,p_msg_context      => 'GENERAL'
22791                  ,p_attribute1       => ''
22792                  ,p_attribute2       => ''
22793                  ,p_attribute3       => ''
22794                  ,p_attribute4       => ''
22795                  ,p_attribute5       => '');
22796                RAISE FND_API.G_EXC_ERROR;
22797           END IF;
22798 
22799           l_invoice_method := p_invoice_method;
22800      ELSE
22801           --IF p_invoice_method IS NULL
22802 
22803            --l_invoice_method := l_proj_invoice_method  commented for bug#5583147 ;
22804 
22805 	   /* Start of Addition for bug#5583147 */
22806            --If p_invoice_method passed is null then
22807            --Check if the task has already an invoice method if so keep the same
22808            --Else get it from project invoice method.
22809            BEGIN
22810                      SELECT invoice_method
22811                      INTO   l_invoice_method
22812                      FROM   pa_tasks
22813                      WHERE project_id = l_project_id
22814                      and task_id = l_pa_task_id
22815                      and l_invoice_method is not null;
22816 
22817           EXCEPTION WHEN NO_DATA_FOUND THEN
22818 		l_invoice_method := l_proj_invoice_method;
22819           END;
22820          /* End of Addition for bug#5583147 */
22821 
22822      END IF;
22823 ELSE
22824      --IF 'N' = l_proj_top_task_inv_mth_flag
22825      l_invoice_method := NULL;
22826 END IF;
22827 
22828 -- Added for bug 5242015
22829 OPEN cur_top_task_customer_id(l_pa_task_id);
22830 FETCH cur_top_task_customer_id INTO l_top_task_customer_id;
22831 CLOSE cur_top_task_customer_id;
22832 
22833 IF 'Y' = l_proj_top_task_customer_flag THEN
22834   IF (p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
22835       l_top_task_customer_id <> p_customer_id THEN -- Added for bug 5242015
22836           -- Changes are Done for Bug 4689888
22837           --changed p_pa_task_id to l_pa_task_id, 3919800, rtarway
22838     IF PA_BILLING_CORE.Update_Top_Task_Customer( l_project_id, l_pa_task_id ) = 'Y' THEN -- If condition to check Funding exits for task or not
22839           OPEN  cur_check_proj_cust_exist(l_project_id,p_customer_id);
22840           FETCH cur_check_proj_cust_exist INTO l_dummy;
22841       IF cur_check_proj_cust_exist%NOTFOUND THEN
22842         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
22843           /* Commented  This code For Bug 4689326
22844               pa_interface_utils_pub.map_new_amg_msg
22845                      ( p_old_message_code => 'PA_INVALID_TASK_CUSTOMER'
22846                       ,p_msg_attribute    => 'CHANGE'
22847                       ,p_resize_flag      => 'N'
22848                       ,p_msg_context      => 'TASK'
22849                       ,p_attribute1       => p_customer_id
22850                       ,p_attribute2       => ''
22851                       ,p_attribute3       => ''
22852                       ,p_attribute4       => ''
22853                       ,p_attribute5       => '');*/
22854         -- Added this code For Bug no 4689326
22855           OPEN l_cur_customer_name(p_customer_id);
22856           FETCH l_cur_customer_name INTO l_customer_name;
22857           CLOSE l_cur_customer_name;
22858           IF (l_customer_name IS NULL OR l_customer_name =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN -- Checking whether the specified customer exits or not
22859                   pa_interface_utils_pub.map_new_amg_msg
22860                      ( p_old_message_code => 'PA_CUSTOMER_NOT_EXIST'
22861                       ,p_msg_attribute    => 'CHANGE'
22862                       ,p_resize_flag      => 'N'
22863                       ,p_msg_context      => 'GENERAL'
22864                       ,p_attribute1       => ''
22865                       ,p_attribute2       => ''
22866                       ,p_attribute3       => ''
22867                       ,p_attribute4       => ''
22868                       ,p_attribute5       => '');
22869           ELSE
22870                         PA_UTILS.ADD_MESSAGE
22871                               (p_app_short_name => 'PA',
22872                                 p_msg_name       => 'PA_INVALID_PROJECT_CUSTOMER',
22873                                 p_token1         => 'CUSTOMER_NAME',
22874                                 p_value1         =>  l_customer_name
22875                                 );
22876           END IF;
22877         -- End of Bug 4689326
22878         END IF;
22879                CLOSE cur_check_proj_cust_exist;
22880                RAISE  FND_API.G_EXC_ERROR;
22881       ELSE
22882                CLOSE cur_check_proj_cust_exist;
22883 
22884                -- Function Security Check
22885                PA_PM_FUNCTION_SECURITY_PUB.check_function_security
22886                ( p_api_version_number => p_api_version_number,
22887                  p_responsibility_id  => l_resp_id,
22888                  p_function_name      => 'PA_PAXPREPR_TASK_CUST',
22889                  p_msg_count          => l_msg_count,
22890                  p_msg_data           => l_msg_data,
22891                  p_return_status      => l_return_status,
22892                  p_function_allowed   => l_function_allowed);
22893                IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
22894                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22895                ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
22896                     RAISE FND_API.G_EXC_ERROR;
22897                END IF;
22898 
22899                IF l_function_allowed = 'N' THEN
22900                     pa_interface_utils_pub.map_new_amg_msg
22901                      ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
22902                       ,p_msg_attribute    => 'CHANGE'
22903                       ,p_resize_flag      => 'Y'
22904                       ,p_msg_context      => 'GENERAL'
22905                       ,p_attribute1       => ''
22906                       ,p_attribute2       => ''
22907                       ,p_attribute3       => ''
22908                       ,p_attribute4       => ''
22909                       ,p_attribute5       => '');
22910                     RAISE FND_API.G_EXC_ERROR;
22911                END IF;
22912 
22913                l_customer_id := p_customer_id;
22914       END IF; --IF cur_check_proj_cust_exist%NOTFOUND
22915     ELSE
22916          pa_interface_utils_pub.map_new_amg_msg
22917                      ( p_old_message_code => 'PA_NO_CHNG_CUST_ALLOWED'
22918                       ,p_msg_attribute    => 'CHANGE'
22919                       ,p_resize_flag      => 'Y'
22920                       ,p_msg_context      => 'GENERAL'
22921                       ,p_attribute1       => ''
22922                       ,p_attribute2       => ''
22923                       ,p_attribute3       => ''
22924                       ,p_attribute4       => ''
22925                       ,p_attribute5       => '');
22926                     RAISE FND_API.G_EXC_ERROR;
22927     END IF;-- If condition to check Funding exits for task or not --End of Bug 4689888
22928   ELSE          --IF p_customer_id IS NULL
22929      IF p_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
22930      l_customer_id:=NULL; -- NULL is passed for customer_id so that in Update_one_task it will not be Defaulted.
22931      ELSIF  l_top_task_customer_id = p_customer_id THEN -- added for Bug 5242015
22932             l_customer_id:= p_customer_id;
22933      ELSE
22934      pa_interface_utils_pub.map_new_amg_msg
22935                      ( p_old_message_code => 'PA_INVALID_CUST'
22936                       ,p_msg_attribute    => 'CHANGE'
22937                       ,p_resize_flag      => 'N'
22938                       ,p_msg_context      => 'GENERAL'
22939                       ,p_attribute1       => ''
22940                       ,p_attribute2       => ''
22941                       ,p_attribute3       => ''
22942                       ,p_attribute4       => ''
22943                       ,p_attribute5       => '');
22944                     RAISE FND_API.G_EXC_ERROR;
22945      END IF;
22946   END IF;
22947 ELSE
22948      --IF 'N' = l_proj_top_task_customer_flag
22949      l_customer_id := NULL;
22950 END IF;
22951 
22952 /*UPDATE PA_TASKS
22953 SET  invoice_method = l_invoice_method
22954     ,customer_id    = l_customer_id
22955 WHERE project_id = l_project_id
22956 AND   task_id = p_pa_task_id;*/
22957 --Bug 3279981 Review
22958 
22959 
22960 -- rtarway, BUG 3908013, replace dff attributes
22961 /*
22962 Bug 6153503
22963 There is no need to do delow validation here it will be done in update_one_task
22964 if (p_attribute_category is null or p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22965 then
22966      l_attribute_category :=  null;
22967 else
22968       l_attribute_category :=  p_attribute_category;
22969 end if;
22970 
22971 
22972 
22973 if (p_attribute1 is null or p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22974 then
22975      l_attribute1  :=  null;
22976 else
22977      l_attribute1  :=  p_attribute1;
22978 end if;
22979 
22980 
22981 
22982 if (p_attribute2 is null or p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22983 then
22984      l_attribute2  :=  null;
22985 else
22986      l_attribute2  :=  p_attribute2;
22987 end if;
22988 
22989 
22990 if (p_attribute3 is null or p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22991 then
22992      l_attribute3 :=  null;
22993 else
22994       l_attribute3 :=  p_attribute3;
22995 end if;
22996 
22997 if (p_attribute4 is null or p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22998 then
22999      l_attribute4 :=  null;
23000 else
23001       l_attribute4 :=  p_attribute4;
23002 end if;
23003 
23004 if (p_attribute5 is null or p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23005 then
23006      l_attribute5 :=  null;
23007 else
23008       l_attribute5 :=  p_attribute5;
23009 end if;
23010 
23011 if (p_attribute6 is null or p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23012 then
23013      l_attribute6 :=  null;
23014 else
23015       l_attribute6 :=  p_attribute6;
23016 end if;
23017 
23018 if (p_attribute7 is null or p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23019 then
23020      l_attribute7 :=  null;
23021 else
23022       l_attribute7 :=  p_attribute7;
23023 end if;
23024 
23025 if (p_attribute8 is null or p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23026 then
23027      l_attribute8 :=  null;
23028 else
23029       l_attribute8  :=  p_attribute8;
23030 end if;
23031 
23032 if (p_attribute9 is null or p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23033 then
23034      l_attribute9 :=  null;
23035 else
23036      l_attribute9 :=  p_attribute9;
23037 end if;
23038 
23039 if (p_attribute10 is null or p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23040 then
23041      l_attribute10 :=  null;
23042 else
23043       l_attribute10 :=  p_attribute10;
23044 end if;
23045 End Bug 6153503
23046 */
23047 --project structures
23048 -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
23049 -- --dbms_output.put_line('BEFORE CALLING UPDATE_ONE_TASK');
23050 
23051 --Bug 6153503 start
23052 IF p_tasks_dff = 'Y' THEN
23053 
23054     l_attribute_category := p_attribute_category;
23055 
23056     l_attribute1  :=  p_attribute1;
23057     l_attribute2  :=  p_attribute2;
23058     l_attribute3  :=  p_attribute3;
23059     l_attribute4  :=  p_attribute4;
23060     l_attribute5  :=  p_attribute5;
23061 
23062     l_attribute6  :=  p_attribute6;
23063     l_attribute7  :=  p_attribute7;
23064     l_attribute8  :=  p_attribute8;
23065     l_attribute9  :=  p_attribute9;
23066     l_attribute10 :=  p_attribute10;
23067 
23068     l_wp_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23069 
23070     l_wp_attribute1  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23071     l_wp_attribute2  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23072     l_wp_attribute3  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23073     l_wp_attribute4  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23074     l_wp_attribute5  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23075 
23076     l_wp_attribute6  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23077     l_wp_attribute7  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23078     l_wp_attribute8  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23079     l_wp_attribute9  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23080     l_wp_attribute10 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23081 
23082     l_wp_attribute11  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23083     l_wp_attribute12  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23084     l_wp_attribute13  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23085     l_wp_attribute14  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23086     l_wp_attribute15  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23087 
23088 ELSIF p_tasks_dff = 'N' THEN
23089 
23090     l_wp_attribute_category := p_attribute_category;
23091 
23092     l_wp_attribute1  :=  p_attribute1;
23093     l_wp_attribute2  :=  p_attribute2;
23094     l_wp_attribute3  :=  p_attribute3;
23095     l_wp_attribute4  :=  p_attribute4;
23096     l_wp_attribute5  :=  p_attribute5;
23097 
23098     l_wp_attribute6  :=  p_attribute6;
23099     l_wp_attribute7  :=  p_attribute7;
23100     l_wp_attribute8  :=  p_attribute8;
23101     l_wp_attribute9  :=  p_attribute9;
23102     l_wp_attribute10 :=  p_attribute10;
23103 
23104     l_wp_attribute11  :=  p_attribute11;
23105     l_wp_attribute12  :=  p_attribute12;
23106     l_wp_attribute13  :=  p_attribute13;
23107     l_wp_attribute14  :=  p_attribute14;
23108     l_wp_attribute15  :=  p_attribute15;
23109 
23110     l_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23111 
23112     l_attribute1  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23113     l_attribute2  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23114     l_attribute3  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23115     l_attribute4  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23116     l_attribute5  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23117 
23118     l_attribute6  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23119     l_attribute7  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23120     l_attribute8  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23121     l_attribute9  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23122     l_attribute10 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23123 
23124 END IF;
23125 
23126 --Bug 6153503 end
23127 
23128 IF l_structure_type = 'FINANCIAL' --p_structure_type
23129 THEN
23130 
23131 -- BUG 3908013, rtarway
23132 --In case of shared structure , null the values of dff fields. dff will be updated in elem_ver_schedule table only.
23133      /* Bug 6153503 start
23134      if nvl(l_is_wp_separate_from_fn,'N') = 'N'
23135      then
23136           l_attribute_category            := null;
23137           l_attribute1                    := null;
23138           l_attribute2                    := null;
23139           l_attribute3                    := null;
23140           l_attribute4                    := null;
23141           l_attribute5                    := null;
23142           l_attribute6                    := null;
23143           l_attribute7                    := null;
23144           l_attribute8                    := null;
23145           l_attribute9                    := null;
23146           l_attribute10                   := null;
23147      end if;
23148      Bug 6153503 end
23149      */
23150 
23151 --project structures
23152 ----dbms_output.put_line('value OF p_task_number BEFORE UPDATE_ONE_TASK'||p_task_number);
23153 
23154      PA_PROJECT_PVT.Update_One_Task (
23155      p_api_version_number            => p_api_version_number,
23156      p_commit                        => FND_API.G_FALSE,
23157      p_msg_count                     => p_msg_count,
23158      p_msg_data                      => p_msg_data,
23159      p_return_status                 => l_return_status,
23160      p_pm_product_code               => p_pm_product_code,
23161      p_pa_project_id                 => l_project_id, --Bug#3747312
23162      p_pa_task_id                    => l_pa_task_id, --BUG 3919800, p_pa_task_id to l_pa_task_id
23163      p_pm_task_reference             => p_pm_task_reference,
23164      p_task_number                   => p_task_number,
23165      p_task_name                     => p_task_name,
23166      p_long_task_name                => l_long_task_name, /*Commented the p_long_task_name for bug 2982057*/
23167      p_task_description              => p_task_description,
23168      p_task_start_date               => p_task_start_date,
23169      p_task_completion_date          => p_task_completion_date,
23170 -- Start Fix for Bug # 1289156
23171      p_early_start_date              => p_early_start_date,
23172      p_early_finish_date             => p_early_finish_date,
23173      p_late_start_date               => p_late_start_date,
23174      p_late_finish_date              => p_late_finish_date,
23175 --   p_actual_start_date             => p_actual_start_date,    --commented out for task progress
23176 --   p_actual_finish_date            => p_actual_finish_date,
23177      p_scheduled_start_date          => p_scheduled_start_date, -- 7245488
23178      p_scheduled_finish_date         => p_scheduled_finish_date, /* bug 7245488 */
23179 -- End Fix for Bug # 1289156
23180      p_pm_parent_task_reference      => p_pm_parent_task_reference,
23181      p_pa_parent_task_id             => p_pa_parent_task_id,
23182      p_address_id                    => p_address_id,
23183      p_carrying_out_organization_id  => p_carrying_out_organization_id,
23184      p_service_type_code             => p_service_type_code,
23185      p_task_manager_person_id        => p_task_manager_person_id,
23186      p_billable_flag                 => p_billable_flag,
23187      p_chargeable_flag               => p_chargeable_flag,
23188      p_ready_to_bill_flag            => p_ready_to_bill_flag,
23189      p_ready_to_distribute_flag      => p_ready_to_distribute_flag,
23190      p_limit_to_txn_controls_flag    => p_limit_to_txn_controls_flag,
23191      p_labor_bill_rate_org_id        => p_labor_bill_rate_org_id,
23192      p_labor_std_bill_rate_schdl     => p_labor_std_bill_rate_schdl,
23193      p_labor_schedule_fixed_date     => p_labor_schedule_fixed_date,
23194      p_labor_schedule_discount       => p_labor_schedule_discount,
23195      p_nl_bill_rate_org_id           => p_nl_bill_rate_org_id,
23196      p_nl_std_bill_rate_schdl        => p_nl_std_bill_rate_schdl,
23197      p_nl_schedule_fixed_date        => p_nl_schedule_fixed_date,
23198      p_nl_schedule_discount          => p_nl_schedule_discount,
23199      p_labor_cost_multiplier_name    => p_labor_cost_multiplier_name,
23200      p_cost_ind_rate_sch_id          => p_cost_ind_rate_sch_id,
23201      p_rev_ind_rate_sch_id           => p_rev_ind_rate_sch_id,
23202      p_inv_ind_rate_sch_id           => p_inv_ind_rate_sch_id,
23203      p_cost_ind_sch_fixed_date       => p_cost_ind_sch_fixed_date,
23204      p_rev_ind_sch_fixed_date        => p_rev_ind_sch_fixed_date,
23205      p_inv_ind_sch_fixed_date        => p_inv_ind_sch_fixed_date,
23206      p_labor_sch_type                => p_labor_sch_type,
23207      p_nl_sch_type                   => p_nl_sch_type,
23208      p_attribute_category            => l_attribute_category,
23209      p_attribute1                    => l_attribute1,
23210      p_attribute2                    => l_attribute2,
23211      p_attribute3                    => l_attribute3,
23212      p_attribute4                    => l_attribute4,
23213      p_attribute5                    => l_attribute5,
23214      p_attribute6                    => l_attribute6,
23215      p_attribute7                    => l_attribute7,
23216      p_attribute8                    => l_attribute8,
23217      p_attribute9                    => l_attribute9,
23218      p_attribute10                   => l_attribute10,
23219      p_allow_cross_charge_flag       => p_allow_cross_charge_flag,
23220      p_project_rate_type             => p_project_rate_type,
23221      p_project_rate_date             => p_project_rate_date,
23222      p_cc_process_labor_flag         => p_cc_process_labor_flag,
23223      p_labor_tp_schedule_id          => p_labor_tp_schedule_id,
23224      p_labor_tp_fixed_date           => p_labor_tp_fixed_date,
23225      p_cc_process_nl_flag            => p_cc_process_nl_flag,
23226      p_nl_tp_schedule_id             => p_nl_tp_schedule_id,
23227      p_nl_tp_fixed_date              => p_nl_tp_fixed_date,
23228      p_receive_project_invoice_flag  => p_receive_project_invoice_flag,
23229      p_work_type_id                  => p_work_type_id,
23230      p_emp_bill_rate_schedule_id     => p_emp_bill_rate_schedule_id,
23231      p_job_bill_rate_schedule_id     => p_job_bill_rate_schedule_id,
23232 
23233 --Sakthi MCB
23234      p_non_lab_std_bill_rt_sch_id    => p_non_lab_std_bill_rt_sch_id,
23235      p_taskfunc_cost_rate_type       => p_taskfunc_cost_rate_type,
23236      p_taskfunc_cost_rate_date       => p_taskfunc_cost_rate_date,
23237 
23238 --Sakthi MCB
23239      p_labor_disc_reason_code        => p_labor_disc_reason_code,
23240      p_non_labor_disc_reason_code    => p_non_labor_disc_reason_code,
23241 
23242 --PA L Changes 2872708
23243      p_retirement_cost_flag          => p_retirement_cost_flag,
23244      p_cint_eligible_flag            => p_cint_eligible_flag,
23245      p_cint_stop_date                => p_cint_stop_date,
23246 --End PA L Changes 2872708
23247      --Added by rtarway for BUG 4106154
23248      p_gen_etc_source_code          =>  p_gen_etc_source_code,
23249 
23250 --Bug 3279981 Review
23251      p_invoice_method                => l_invoice_method,
23252      p_customer_id                   => l_customer_id,
23253 --Bug 3279981 Review
23254      p_out_pa_task_id                => l_out_pa_task_id,
23255      p_out_pm_task_reference         => l_out_pm_task_reference );
23256  -- --dbms_output.put_line('after CALLING UPDATE_ONE_TASK');
23257      p_return_status := l_return_status;
23258 -- --dbms_output.put_line('p_return_status'||p_return_status);
23259      IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
23260         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
23261      ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23262         RAISE  FND_API.G_EXC_ERROR;
23263      END IF;
23264 
23265      p_out_pa_task_id  := l_out_pa_task_id;
23266      p_out_pm_task_reference := l_out_pm_task_reference;
23267 
23268 --BUG 4081329, rtarway, update all child tasks which have null completion date, if completion date is getting updated
23269 --Fix for 7427388
23270 /*if (p_task_completion_date is not null and p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) then
23271        open  cur_get_child_task_dates (l_project_id,l_pa_task_id);
23272        fetch cur_get_child_task_dates bulk collect into      l_task_id_tbl,
23273                                                              l_start_date_tbl,
23274                                                              l_completion_date_tbl;
23275        close cur_get_child_task_dates;
23276        if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23277           FORALL i in l_task_id_tbl.first..l_task_id_tbl.last
23278           update pa_tasks set completion_date = p_task_completion_date where task_id = l_task_id_tbl(i)
23279           and project_id = l_project_id;
23280        end if;
23281 end if;*/
23282 
23283 if ( p_task_completion_date is not null and  p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) then
23284        open  cur_get_child_task_dates (l_project_id,l_pa_task_id);
23285        fetch cur_get_child_task_dates bulk collect into      l_task_id_tbl,
23286                                                              l_start_date_tbl,
23287                                                              l_completion_date_tbl,
23288 							     l_parent_task_id_tbl;
23289        close cur_get_child_task_dates;
23290        if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23291 	  FOR i in l_task_id_tbl.first..l_task_id_tbl.last LOOP
23292             IF l_parent_task_id_tbl(i) IS NOT NULL AND l_start_date_tbl(i) is NULL THEN
23293 	      SELECT start_date
23294  	      INTO l_parent_task_date
23295  	      FROM pa_tasks
23296  	      WHERE task_id = l_parent_task_id_tbl(i);
23297 
23298  	      UPDATE pa_tasks
23299  	      SET completion_date = p_task_completion_date,
23300  	          start_date = l_parent_task_date
23301  	      WHERE task_id = l_task_id_tbl(i);
23302 
23303  	    ELSE
23304  	      UPDATE pa_tasks
23305  	      SET completion_date = p_task_completion_date
23306  	      WHERE task_id = l_task_id_tbl(i);
23307  	    END IF;
23308  	  END LOOP;
23309        end if;
23310     end if;
23311 --End of fix for 7427388
23312 
23313 --bug 2665656
23314 -- --dbms_output.put_line('p_pm_product_code'||p_pm_product_code);
23315 -- --dbms_output.put_line('p_update_task_structure'||p_update_task_structure);
23316 -- --dbms_output.put_line('p_structure_type'||p_structure_type);
23317 ----dbms_output.put_line('value of l_out_pa_task_id'||l_out_pa_task_id);
23318 ----dbms_output.put_line('value of l_out_pm_task_reference'||l_out_pm_task_reference);
23319 
23320      IF (NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN') AND (p_update_task_structure = 'Y') --Added for bug 2931183
23321      THEN
23322 --bug 2665656
23323          -- Bug 3106457
23324       -- --dbms_output.put_line('Going into this loop');
23325          -- --dbms_output.put_line('p_structure_version_id : '||p_structure_version_id);
23326          --BUG 3919800, p_structure_version_id to l_structure_version_id, rtarway
23327          IF l_structure_version_id IS NULL
23328             OR l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3174639
23329          THEN
23330               l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
23331          ELSE
23332               l_structure_version_id := p_structure_version_id;
23333          END IF;
23334 --      --dbms_output.put_line('BEFORE CALLING UPDATE_task_structure');
23335 --      --dbms_output.put_line('l_structure_version_id IS'||l_structure_version_id);
23336 
23337 
23338 ----dbms_output.put_line('Value of p_task_number passed to update_task_structure'||p_task_number);
23339 
23340          PA_PROJ_TASK_STRUC_PUB.update_task_structure
23341                (
23342                 p_calling_module                  => 'AMG'
23343                ,p_task_id                         => l_pa_task_id  --BUG 3919800, rtarway
23344                ,p_ref_task_id                     => l_ref_task_id --Bug 3705333 changed from p_ref_task_id to l_ref_task_id
23345                ,p_project_id                      => l_project_id
23346                ,p_task_number                     => p_task_number
23347                ,p_task_name                       => l_long_task_name      ----bug 2833194 -- for bug# 3749447
23348                ,p_task_description                => p_task_description
23349                ,p_carrying_out_organization_id    => p_carrying_out_organization_id
23350                ,p_task_manager_id                 => p_task_manager_person_id
23351                ,p_pm_product_code                 => p_pm_product_code
23352                ,p_pm_task_reference               => p_pm_task_reference
23353                ,p_location_id                     => p_address_id
23354                ,p_structure_type                  => l_structure_type --Bug#3747312 p_structure_type
23355                ,p_OBLIGATION_START_DATE           => p_OBLIGATION_START_DATE
23356                ,p_OBLIGATION_FINISH_DATE          => p_OBLIGATION_FINISH_DATE
23357                ,p_ESTIMATED_START_DATE            => p_ESTIMATED_START_DATE
23358                ,p_ESTIMATED_FINISH_DATE           => p_ESTIMATED_FINISH_DATE
23359                ,p_BASELINE_START_DATE             => p_BASELINE_START_DATE
23360                ,p_BASELINE_FINISH_DATE            => p_BASELINE_FINISH_DATE
23361                ,p_CLOSED_DATE                     => p_CLOSED_DATE
23362                ,p_WQ_UOM_CODE                     => p_WQ_UOM_CODE
23363                ,p_WQ_ITEM_CODE                    => p_WQ_ITEM_CODE
23364                ,p_STATUS_CODE                     => p_STATUS_CODE
23365                ,p_WF_STATUS_CODE                  => p_WF_STATUS_CODE
23366                ,p_PRIORITY_CODE                   => p_PRIORITY_CODE
23367                ,p_MILESTONE_FLAG                  => p_MILESTONE_FLAG
23368                ,p_CRITICAL_FLAG                   => p_CRITICAL_FLAG
23369                ,p_INC_PROJ_PROGRESS_FLAG          => p_INC_PROJ_PROGRESS_FLAG
23370                ,p_LINK_TASK_FLAG                  => p_LINK_TASK_FLAG
23371                ,p_CALENDAR_ID                     => p_CALENDAR_ID
23372                ,p_PLANNED_EFFORT                  => p_PLANNED_EFFORT
23373                ,p_DURATION                        => p_DURATION
23374                ,p_PLANNED_WORK_QUANTITY           => p_PLANNED_WORK_QUANTITY
23375                ,p_TASK_TYPE                       => p_TASK_TYPE
23376                ,p_actual_start_date               => p_actual_start_date
23377                ,p_actual_finish_date              => p_actual_finish_date
23378                ,p_early_start_date                => p_early_start_date
23379                ,p_early_finish_date               => p_early_finish_date
23380                ,p_late_start_date                 => p_late_start_date
23381                ,p_late_finish_date                => p_late_finish_date
23382                ,p_scheduled_start_date            => p_scheduled_start_date
23383                ,p_scheduled_finish_date           => p_scheduled_finish_date
23384                --Commented by rtarway for BUG 3663712
23385                --,p_structure_version_id            => p_structure_version_id
23386                ,p_structure_version_id            => l_structure_version_id
23387 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
23388         ,p_ext_act_duration         => p_ext_act_duration
23389         ,p_ext_remain_duration      => p_ext_remain_duration
23390         ,p_ext_sch_duration         => p_ext_sch_duration
23391 -- (End venkat) new params for bug #3450684 -------------------------------------------------
23392     --Bug 6153503 start
23393     ,p_attribute_category            => l_wp_attribute_category
23394     ,p_attribute1                    => l_wp_attribute1
23395     ,p_attribute2                    => l_wp_attribute2
23396     ,p_attribute3                    => l_wp_attribute3
23397     ,p_attribute4                    => l_wp_attribute4
23398     ,p_attribute5                    => l_wp_attribute5
23399     ,p_attribute6                    => l_wp_attribute6
23400     ,p_attribute7                    => l_wp_attribute7
23401     ,p_attribute8                    => l_wp_attribute8
23402     ,p_attribute9                    => l_wp_attribute9
23403     ,p_attribute10                   => l_wp_attribute10
23404     ,p_attribute11                   => l_wp_attribute11
23405     ,p_attribute12                   => l_wp_attribute12
23406     ,p_attribute13                   => l_wp_attribute13
23407     ,p_attribute14                   => l_wp_attribute14
23408     ,p_attribute15                   => l_wp_attribute15
23409      --Bug 6153503 end
23410 -- set the new params - bug #3654243 ----------------------------------------------
23411     ,p_base_percent_comp_deriv_code => p_base_percent_comp_deriv_code
23412     ,p_sch_tool_tsk_type_code       => p_sch_tool_tsk_type_code
23413     ,p_constraint_type_code         => p_constraint_type_code
23414     ,p_constraint_date              => p_constraint_date
23415     ,p_free_slack                   => p_free_slack
23416     ,p_total_slack                  => p_total_slack
23417     ,p_effort_driven_flag           => p_effort_driven_flag
23418     ,p_level_assignments_flag       => p_level_assignments_flag
23419     ,p_invoice_method               => p_invoice_method
23420     ,p_customer_id                  => p_customer_id
23421     ,p_gen_etc_source_code          => p_gen_etc_source_code
23422 -- set the new params - bug #3654243 -------------------------------------------------
23423 
23424 -- Progress Management Changes. Bug # 3420093.
23425                 ,p_etc_effort                 => p_etc_effort
23426                 ,p_percent_complete           => p_percent_complete
23427 -- Progress Management Changes. Bug # 3420093.
23428 --Added by rtarway for BUG 3908013
23429 /* Values are already being passed above. Ref Bug #6153503
23430                ,p_attribute_category            => p_attribute_category
23431                ,p_attribute1                    => p_attribute1
23432                ,p_attribute2                    => p_attribute2
23433                ,p_attribute3                    => p_attribute3
23434                ,p_attribute4                    => p_attribute4
23435                ,p_attribute5                    => p_attribute5
23436                ,p_attribute6                    => p_attribute6
23437                ,p_attribute7                    => p_attribute7
23438                ,p_attribute8                    => p_attribute8
23439                ,p_attribute9                    => p_attribute9
23440                ,p_attribute10                   => p_attribute10 */
23441 --end add by rtarway, 3908013
23442                ,x_msg_count                       => l_msg_count
23443                ,x_msg_data                        => l_msg_data
23444                ,x_return_status                   => l_return_status
23445 
23446                );
23447            ----dbms_output.put_line('return status of update_task_struc '||l_return_status);
23448 
23449        END IF;
23450 
23451      IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
23452         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
23453      ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23454         RAISE  FND_API.G_EXC_ERROR;
23455      END IF;
23456 
23457 ELSIF l_structure_type = 'WORKPLAN' --p_structure_type
23458 THEN
23459    -- Moved this code up. As this should be the first validation the should be performed
23460    -- IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
23461    --If update task is called from update_project api then PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN wont be called
23462    --bcoz G_IS_WP_SEPARATE_FROM_FN will already be set by upate_project.
23463    --    NVL( G_IS_WP_SEPARATE_FROM_FN, PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) ) = 'N'  --bug 2876703 update_task
23464    --THEN
23465    --     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
23466    --     THEN
23467    --         pa_interface_utils_pub.map_new_amg_msg
23468    --           ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
23469    --               ,p_msg_attribute    => 'CHANGE'
23470    --               ,p_resize_flag      => 'N'
23471    --               ,p_msg_context      => 'GENERAL'
23472    --               ,p_attribute1       => ''
23473    --               ,p_attribute2       => ''
23474    --               ,p_attribute3       => ''
23475    --               ,p_attribute4       => ''
23476    --               ,p_attribute5       => '');
23477    --     END IF;
23478    --     RAISE FND_API.G_EXC_ERROR;
23479    -- END IF;
23480 
23481     -- Actions performed using the APIs would be subject to
23482     -- function security. If the responsibility does not allow
23483     -- such functions to be executed, the API should not proceed further
23484     -- since the user does not have access to such functions
23485 
23486 
23487     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
23488       (p_api_version_number => p_api_version_number,
23489        p_responsibility_id  => l_resp_id,
23490        p_function_name      => 'PA_PM_UPDATE_TASK',
23491        p_msg_count          => l_msg_count,
23492        p_msg_data           => l_msg_data,
23493        p_return_status      => l_return_status,
23494        p_function_allowed   => l_function_allowed );
23495 
23496         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23497         THEN
23498                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23499 
23500         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23501         THEN
23502                         RAISE FND_API.G_EXC_ERROR;
23503         END IF;
23504         IF l_function_allowed = 'N' THEN
23505           pa_interface_utils_pub.map_new_amg_msg
23506           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
23507            ,p_msg_attribute    => 'CHANGE'
23508            ,p_resize_flag      => 'Y'
23509            ,p_msg_context      => 'GENERAL'
23510            ,p_attribute1       => ''
23511            ,p_attribute2       => ''
23512            ,p_attribute3       => ''
23513            ,p_attribute4       => ''
23514            ,p_attribute5       => '');
23515            p_return_status := FND_API.G_RET_STS_ERROR;
23516            RAISE FND_API.G_EXC_ERROR;
23517         END IF;
23518 
23519 --Project Structures Integration
23520 ----dbms_output.put_line('l_structure_version_id--ut'||l_structure_version_id);
23521        IF ( l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
23522             l_structure_version_id IS NULL  )
23523        THEN
23524             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
23525             THEN
23526                pa_interface_utils_pub.map_new_amg_msg
23527                     ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
23528                      ,p_msg_attribute    => 'CHANGE'
23529                      ,p_resize_flag      => 'N'
23530                      ,p_msg_context      => 'GENERAL'
23531                      ,p_attribute1       => ''
23532                      ,p_attribute2       => ''
23533                      ,p_attribute3       => ''
23534                      ,p_attribute4       => ''
23535                      ,p_attribute5       => '');
23536             END IF;
23537             RAISE FND_API.G_EXC_ERROR;
23538             p_return_status    := FND_API.G_RET_STS_SUCCESS;
23539        END IF;
23540        -- Bug 3106457. This is not null.
23541        --Commented by rtarway for BUG 3919800
23542        --l_structure_version_id := p_structure_version_id;
23543        --Added by rtarway for BUG 4106154
23544        if (l_update_pa_tasks = 'Y' AND
23545            --Added by rtarway for bug 4321313
23546        PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_pa_task_id) = 'Y'
23547        ) then
23548 
23549                --In case of Shared Structures, we do not need to update dff attributes in pa_tasks, instead
23550                --dff fields of pa_proj_elem_ver_schedule are updated
23551 
23552               PA_PROJECT_PVT.Update_One_Task
23553                (
23554                     p_api_version_number            => p_api_version_number,
23555                     p_commit                        => FND_API.G_FALSE,
23556                     p_msg_count                     => p_msg_count,
23557                     p_msg_data                      => p_msg_data,
23558                     p_return_status                 => l_return_status,
23559                     p_pm_product_code               => p_pm_product_code,
23560                     p_pa_project_id                 => l_project_id,
23561                     p_pa_task_id                    => l_pa_task_id,
23562                     p_pm_task_reference             => p_pm_task_reference,
23563                     p_task_number                   => p_task_number,
23564                     p_task_name                     => p_task_name,
23565                     p_long_task_name                => l_long_task_name,
23566                     p_task_description              => p_task_description,
23567                     p_task_start_date               => p_task_start_date,
23568                     p_task_completion_date          => p_task_completion_date,
23569                     p_early_start_date              => p_early_start_date,
23570                     p_early_finish_date             => p_early_finish_date,
23571                     p_late_start_date               => p_late_start_date,
23572                     p_late_finish_date              => p_late_finish_date,
23573 		    p_scheduled_start_date          => p_scheduled_start_date,  -- 7245488
23574 		    p_scheduled_finish_date         => p_scheduled_finish_date, /* bug 7245488 */
23575                     p_pm_parent_task_reference      => p_pm_parent_task_reference,
23576                     p_pa_parent_task_id             => p_pa_parent_task_id,
23577                     p_address_id                    => p_address_id,
23578                     p_carrying_out_organization_id  => p_carrying_out_organization_id,
23579                     p_service_type_code             => p_service_type_code,
23580                     p_task_manager_person_id        => p_task_manager_person_id,
23581                     p_billable_flag                 => p_billable_flag,
23582                     p_chargeable_flag               => p_chargeable_flag,
23583                     p_ready_to_bill_flag            => p_ready_to_bill_flag,
23584                     p_ready_to_distribute_flag      => p_ready_to_distribute_flag,
23585                     p_limit_to_txn_controls_flag    => p_limit_to_txn_controls_flag,
23586                     p_labor_bill_rate_org_id        => p_labor_bill_rate_org_id,
23587                     p_labor_std_bill_rate_schdl     => p_labor_std_bill_rate_schdl,
23588                     p_labor_schedule_fixed_date     => p_labor_schedule_fixed_date,
23589                     p_labor_schedule_discount       => p_labor_schedule_discount,
23590                     p_nl_bill_rate_org_id           => p_nl_bill_rate_org_id,
23591                     p_nl_std_bill_rate_schdl        => p_nl_std_bill_rate_schdl,
23592                     p_nl_schedule_fixed_date        => p_nl_schedule_fixed_date,
23593                     p_nl_schedule_discount          => p_nl_schedule_discount,
23594                     p_labor_cost_multiplier_name    => p_labor_cost_multiplier_name,
23595                     p_cost_ind_rate_sch_id          => p_cost_ind_rate_sch_id,
23596                     p_rev_ind_rate_sch_id           => p_rev_ind_rate_sch_id,
23597                     p_inv_ind_rate_sch_id           => p_inv_ind_rate_sch_id,
23598                     p_cost_ind_sch_fixed_date       => p_cost_ind_sch_fixed_date,
23599                     p_rev_ind_sch_fixed_date        => p_rev_ind_sch_fixed_date,
23600                     p_inv_ind_sch_fixed_date        => p_inv_ind_sch_fixed_date,
23601                     p_labor_sch_type                => p_labor_sch_type,
23602                     p_nl_sch_type                   => p_nl_sch_type,
23603                     --Bug 6153503 start
23604                     p_attribute_category            => l_attribute_category,
23605                     p_attribute1                    => l_attribute1,
23606                     p_attribute2                    => l_attribute2,
23607                     p_attribute3                    => l_attribute3,
23608                     p_attribute4                    => l_attribute4,
23609                     p_attribute5                    => l_attribute5,
23610                     p_attribute6                    => l_attribute6,
23611                     p_attribute7                    => l_attribute7,
23612                     p_attribute8                    => l_attribute8,
23613                     p_attribute9                    => l_attribute9,
23614                     p_attribute10                   => l_attribute10,
23615                     --Bug 6153503 end
23616                     p_allow_cross_charge_flag       => p_allow_cross_charge_flag,
23617                     p_project_rate_type             => p_project_rate_type,
23618                     p_project_rate_date             => p_project_rate_date,
23619                     p_cc_process_labor_flag         => p_cc_process_labor_flag,
23620                     p_labor_tp_schedule_id          => p_labor_tp_schedule_id,
23621                     p_labor_tp_fixed_date           => p_labor_tp_fixed_date,
23622                     p_cc_process_nl_flag            => p_cc_process_nl_flag,
23623                     p_nl_tp_schedule_id             => p_nl_tp_schedule_id,
23624                     p_nl_tp_fixed_date              => p_nl_tp_fixed_date,
23625                     p_receive_project_invoice_flag  => p_receive_project_invoice_flag,
23626                     p_work_type_id                  => p_work_type_id,
23627                     p_emp_bill_rate_schedule_id     => p_emp_bill_rate_schedule_id,
23628                     p_job_bill_rate_schedule_id     => p_job_bill_rate_schedule_id,
23629                     p_non_lab_std_bill_rt_sch_id    => p_non_lab_std_bill_rt_sch_id,
23630                     p_taskfunc_cost_rate_type       => p_taskfunc_cost_rate_type,
23631                     p_taskfunc_cost_rate_date       => p_taskfunc_cost_rate_date,
23632                     p_labor_disc_reason_code        => p_labor_disc_reason_code,
23633                     p_non_labor_disc_reason_code    => p_non_labor_disc_reason_code,
23634                     p_retirement_cost_flag          => p_retirement_cost_flag,
23635                     p_cint_eligible_flag            => p_cint_eligible_flag,
23636                     p_cint_stop_date                => p_cint_stop_date,
23637                     p_gen_etc_source_code          =>  p_gen_etc_source_code,
23638                     p_invoice_method                => l_invoice_method,
23639                     p_customer_id                   => l_customer_id,
23640                     p_out_pa_task_id                => l_out_pa_task_id,
23641                     p_out_pm_task_reference         => l_out_pm_task_reference
23642                );
23643 
23644                p_return_status := l_return_status;
23645 
23646                IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
23647                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
23648                ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23649                   RAISE  FND_API.G_EXC_ERROR;
23650                END IF;
23651        end if;
23652   --End Added by rtarway for BUG 4106154
23653 
23654 --bug 2665656
23655      IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN'
23656      THEN
23657 --bug 2665656
23658           PA_PROJ_TASK_STRUC_PUB.update_task_structure
23659                (
23660                 p_calling_module                  => 'AMG'
23661                ,p_task_id                         => l_pa_task_id --BUG 3919800, rtarway
23662                ,p_ref_task_id                     => l_ref_task_id --Bug 3705333 changed from p_ref_task_id to l_ref_task_id
23663                ,p_project_id                      => l_project_id
23664                ,p_task_number                     => p_task_number
23665                ,p_task_name                       => l_long_task_name     ----bug 2833194 , -- bug# 3749447
23666                ,p_task_description                => p_task_description
23667                ,p_carrying_out_organization_id    => p_carrying_out_organization_id
23668                ,p_task_manager_id                 => p_task_manager_person_id
23669                ,p_pm_product_code                 => p_pm_product_code
23670                ,p_pm_task_reference               => p_pm_task_reference
23671                ,p_location_id                     => p_address_id
23672                ,p_structure_type                  => l_structure_type --p_structure_type
23673                ,p_OBLIGATION_START_DATE           => p_OBLIGATION_START_DATE
23674                ,p_OBLIGATION_FINISH_DATE          => p_OBLIGATION_FINISH_DATE
23675                ,p_ESTIMATED_START_DATE            => p_ESTIMATED_START_DATE
23676                ,p_ESTIMATED_FINISH_DATE           => p_ESTIMATED_FINISH_DATE
23677                ,p_BASELINE_START_DATE             => p_BASELINE_START_DATE
23678                ,p_BASELINE_FINISH_DATE            => p_BASELINE_FINISH_DATE
23679                ,p_CLOSED_DATE                     => p_CLOSED_DATE
23680                ,p_WQ_UOM_CODE                     => p_WQ_UOM_CODE
23681                ,p_WQ_ITEM_CODE                    => p_WQ_ITEM_CODE
23682                ,p_STATUS_CODE                     => p_STATUS_CODE
23683                ,p_WF_STATUS_CODE                  => p_WF_STATUS_CODE
23684                ,p_PRIORITY_CODE                   => p_PRIORITY_CODE
23685                ,p_MILESTONE_FLAG                  => p_MILESTONE_FLAG
23686                ,p_CRITICAL_FLAG                   => p_CRITICAL_FLAG
23687                ,p_INC_PROJ_PROGRESS_FLAG          => p_INC_PROJ_PROGRESS_FLAG
23688                ,p_LINK_TASK_FLAG                  => p_LINK_TASK_FLAG
23689                ,p_CALENDAR_ID                     => p_CALENDAR_ID
23690                ,p_PLANNED_EFFORT                  => p_PLANNED_EFFORT
23691                ,p_DURATION                        => p_DURATION
23692                ,p_PLANNED_WORK_QUANTITY           => p_PLANNED_WORK_QUANTITY
23693                ,p_TASK_TYPE                       => p_TASK_TYPE
23694                ,p_actual_start_date               => p_actual_start_date
23695                ,p_actual_finish_date              => p_actual_finish_date
23696                ,p_early_start_date                => p_early_start_date
23697                ,p_early_finish_date               => p_early_finish_date
23698                ,p_late_start_date                 => p_late_start_date
23699                ,p_late_finish_date                => p_late_finish_date
23700                ,p_scheduled_start_date            => p_scheduled_start_date
23701                ,p_scheduled_finish_date           => p_scheduled_finish_date
23702                --Commented by rtarway, BUG 3663712
23703                --,p_structure_version_id            => p_structure_version_id
23704                ,p_structure_version_id            => l_structure_version_id
23705 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
23706         ,p_ext_act_duration     => p_ext_act_duration
23707         ,p_ext_remain_duration      => p_ext_remain_duration
23708         ,p_ext_sch_duration     => p_ext_sch_duration
23709 -- (End venkat) new params for bug #3450684 -------------------------------------------------
23710     --Bug 6153503 start
23711     ,p_attribute_category            => l_wp_attribute_category
23712     ,p_attribute1                    => l_wp_attribute1
23713     ,p_attribute2                    => l_wp_attribute2
23714     ,p_attribute3                    => l_wp_attribute3
23715     ,p_attribute4                    => l_wp_attribute4
23716     ,p_attribute5                    => l_wp_attribute5
23717     ,p_attribute6                    => l_wp_attribute6
23718     ,p_attribute7                    => l_wp_attribute7
23719     ,p_attribute8                    => l_wp_attribute8
23720     ,p_attribute9                    => l_wp_attribute9
23721     ,p_attribute10                   => l_wp_attribute10
23722     ,p_attribute11                   => l_wp_attribute11
23723     ,p_attribute12                   => l_wp_attribute12
23724     ,p_attribute13                   => l_wp_attribute13
23725     ,p_attribute14                   => l_wp_attribute14
23726     ,p_attribute15                   => l_wp_attribute15
23727      --Bug 6153503 end
23728 -- set the new params - bug #3654243 ----------------------------------------------
23729     ,p_base_percent_comp_deriv_code => p_base_percent_comp_deriv_code
23730     ,p_sch_tool_tsk_type_code       => p_sch_tool_tsk_type_code
23731     ,p_constraint_type_code         => p_constraint_type_code
23732     ,p_constraint_date              => p_constraint_date
23733     ,p_free_slack                   => p_free_slack
23734     ,p_total_slack                  => p_total_slack
23735     ,p_effort_driven_flag           => p_effort_driven_flag
23736     ,p_level_assignments_flag       => p_level_assignments_flag
23737     ,p_invoice_method               => p_invoice_method
23738     ,p_customer_id                  => p_customer_id
23739     ,p_gen_etc_source_code          => p_gen_etc_source_code
23740 -- set the new params - bug #3654243 -------------------------------------------------
23741 
23742 
23743 -- Progress Management Changes. Bug # 3420093.
23744                 ,p_etc_effort                   => p_etc_effort
23745                 ,p_percent_complete             => p_percent_complete
23746 -- Progress Management Changes. Bug # 3420093.
23747 
23748                ,x_msg_count                       => l_msg_count
23749                ,x_msg_data                        => l_msg_data
23750                ,x_return_status                   => l_return_status
23751                 --Added by rtarway for BUG 3908013
23752                 /* Values are already being passed above. Ref Bug#6153503
23753                ,p_attribute_category            => p_attribute_category
23754                ,p_attribute1                    => p_attribute1
23755                ,p_attribute2                    => p_attribute2
23756                ,p_attribute3                    => p_attribute3
23757                ,p_attribute4                    => p_attribute4
23758                ,p_attribute5                    => p_attribute5
23759                ,p_attribute6                    => p_attribute6
23760                ,p_attribute7                    => p_attribute7
23761                ,p_attribute8                    => p_attribute8
23762                ,p_attribute9                    => p_attribute9
23763                ,p_attribute10                   => p_attribute10 */
23764 
23765                );
23766 
23767            IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
23768               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
23769            ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23770               RAISE  FND_API.G_EXC_ERROR;
23771            END IF;
23772      END IF;   --<< p_pm_product_code = 'WORKPLAN' >>
23773 
23774      p_out_pa_task_id  := l_pa_task_id;--BUG 3919800, rtarway
23775      p_out_pm_task_reference := p_pm_task_reference ;
23776 
23777 
23778 --Project Structures Integration
23779 END IF; --<<p_structure_type>>
23780 --Begin Add by rtarway FP.M changes for Mapping
23781 --No Function Security Check required
23782 --Call the update_mapping only if p_mapped_task_reference or p_mapped_task_id is passed
23783 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
23784 IF (G_PROJECT_SHARING_TYPE = 'SPLIT_MAPPING' and nvl(l_is_wp_separate_from_fn,'N') = 'Y')
23785 THEN
23786      IF (
23787           ( p_mapped_task_reference IS NULL OR p_mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
23788           OR
23789           ( p_mapped_task_id IS NULL OR  p_mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
23790         )
23791      THEN
23792           pa_project_pub.update_mapping
23793           (
23794               p_api_version            => p_api_version_number
23795             , p_init_msg_list          => p_init_msg_list
23796             , p_commit                 => FND_API.G_FALSE--bug 3766967
23797             , p_debug_mode             => FND_API.G_TRUE
23798             , p_project_id             => l_project_id --Bug#3747312 p_pa_project_id
23799             , p_proj_source_reference  => null
23800             , p_wkp_structure_version_id => l_structure_version_id -- BUG 3919800, rtarway
23801             , p_wkp_task_id            => l_pa_task_id--Since the tasks are already created , this will have task Ids
23802             , px_mapped_task_id        => p_mapped_task_id------------|One of theses two should be passed
23803             , p_mapped_task_reference  => p_mapped_task_reference ----|
23804             , x_return_status          => l_return_status
23805             , x_msg_count              => l_msg_count
23806             , x_msg_data               => l_msg_data
23807 
23808           );
23809           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
23810                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23811           ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
23812                 RAISE FND_API.G_EXC_ERROR;
23813           END IF;
23814      END IF;
23815 END IF;
23816 
23817 --End Add by rtarway  FP.M chages for Mapping
23818 --Begin  Add by rtarway  FP.M chages for Set Financial Task
23819 IF (G_PROJECT_SHARING_TYPE = 'SHARE_PARTIAL' and nvl(l_is_wp_separate_from_fn,'N') = 'N') THEN --l_structure_type
23820     --Get the task Version Id
23821     --BUG 3919800,p_structure_version_id and p_pa_task_id are replaced
23822     l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(l_structure_version_id, l_pa_task_id);
23823     OPEN  c_get_pa_record_version_number ( l_task_version_id  , l_project_id ); --Bug#3747312
23824     FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
23825     CLOSE c_get_pa_record_version_number;
23826     IF ( p_financial_task_flag IS NOT NULL AND p_financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23827     THEN
23828         PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
23829          (
23830             p_api_version               => p_api_version_number
23831           , p_init_msg_list             => p_init_msg_list
23832           , p_commit                    => FND_API.G_FALSE--bug 3766967
23833           , p_calling_module            => 'AMG'
23834           , p_debug_mode                => FND_API.G_TRUE
23835           , p_task_version_id           => l_task_version_id
23836           , p_checked_flag              => p_financial_task_flag
23837           , p_record_version_number     => l_patask_record_version_number
23838           , p_project_id                => l_project_id --Bug#3747312 p_pa_project_id
23839           , p_published_version_exists  => G_Published_version_exists
23840           , x_return_status             => l_return_status
23841           , x_msg_count                 => l_msg_count
23842           , x_msg_data                  => l_msg_data
23843         );
23844          IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23845          THEN
23846                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23847          ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23848          THEN
23849                RAISE FND_API.G_EXC_ERROR;
23850          END IF;
23851     END IF;
23852 END IF;
23853 --End Add by rtarway  FP.M chages for Set Financial Task
23854 
23855 --     p_out_pa_task_id  := l_out_pa_task_id;
23856 --     p_out_pm_task_reference := l_out_pm_task_reference;
23857 
23858 -- PA L Changes 3010538
23859 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
23860                                                   -- publishing flow.
23861   AND p_calling_api <> 'UPDATE_PROJECT'   --bug 4199694  This is required otherwise dates rollup and concurrent program will called in update_project flow multiple times.
23862 THEN
23863 ---bug 4199694
23864 --call directly the PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup api. No need to call the rollup_dates here as its called per task.
23865 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'Y'
23866 THEN
23867   IF l_task_version_id IS NULL
23868   THEN
23869       l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(l_structure_version_id, l_pa_task_id);
23870   END IF;
23871   PA_PROJ_TASK_STRUC_PUB.rollup_dates(
23872              p_tasks_in             => l_tasks_out
23873             ,p_task_version_id      => l_task_version_id
23874             ,p_project_id           => l_project_id
23875             ,P_structure_version_id => l_structure_version_id
23876             ,x_msg_count            => l_msg_count
23877             ,x_msg_data             => l_msg_data
23878             ,x_return_status        => l_return_status
23879        );
23880 
23881         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23882         THEN
23883            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23884 
23885         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23886         THEN
23887           RAISE FND_API.G_EXC_ERROR;
23888         END IF;
23889 END IF;
23890 ---bug 4199694
23891 
23892    -- These globals have been intialized before they are used!
23893    PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id ); -- Bug 3106457
23894    /* Commented the code below for bug#3451073
23895    PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Bug 3106457 */
23896    /* Added the If condition Bug#3451073 */
23897    IF p_is_wp_seperate_from_fn = 'X'
23898    THEN
23899      PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Bug 3106457
23900    ELSE
23901      PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   :=  p_is_wp_seperate_from_fn; -- Addded for bug#3451073
23902    END IF;
23903 
23904    PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id ); -- Bug 3106457
23905 
23906 IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
23907        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
23908          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
23909          PA_PROJECT_PUB.G_Published_version_exists = 'N')
23910 THEN
23911 
23912    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id -- Bug 3106457 p_pa_project_id
23913                                                            ,p_structure_version_id => l_structure_version_id ) ; -- Bug 3106457
23914      IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
23915           IF p_process_mode = 'ONLINE' THEN
23916 
23917              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
23918                                                        ,p_project_id           => l_project_id -- Bug 3106457 p_pa_project_id
23919                                                        ,p_structure_version_id => l_structure_version_id -- Bug 3106457 p_structure_version_id
23920                                                        ,x_return_status        => l_return_status
23921                                                        ,x_msg_count            => l_msg_count
23922                                                        ,x_msg_data             => l_msg_data ) ;
23923 
23924              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23925                   THEN
23926                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23927              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23928                   THEN
23929                     RAISE FND_API.G_EXC_ERROR;
23930              END IF;
23931           ELSIF p_process_mode = 'CONCURRENT' THEN
23932 
23933              PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context      => 'CONC_UPDATE'
23934                                                                  ,p_project_id           => l_project_id --Bug 3106457 p_pa_project_id
23935                                                                  ,p_structure_version_id => l_structure_version_id -- Bug 3106457 p_structure_version_id
23936                                                                  ,x_return_status        => l_return_status
23937                                                                  ,x_msg_count            => l_msg_count
23938                                                                  ,x_msg_data             => l_msg_data ) ;
23939 
23940              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23941                   THEN
23942                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23943              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23944                   THEN
23945                     RAISE FND_API.G_EXC_ERROR;
23946              END IF;
23947           END IF ;
23948      END IF ;
23949    END IF ;
23950 END IF;
23951 -- PA L Changes 3010538
23952 
23953 -- FP-M Bug # 3301192  update task
23954 /*
23955       PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_pa_project_id
23956                                               ,p_pm_task_reference => p_pm_task_reference
23957                                               ,p_out_task_id => l_d_task_id
23958                                               ,p_return_status => l_return_status);
23959 */
23960 
23961       IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN --Bug#3747312
23962 
23963         IF l_d_task_id IS NULL AND p_pm_task_reference IS NOT NULL AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
23964         THEN
23965           PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id --Bug#3747312 p_pa_project_id
23966                                               ,p_pm_task_reference => p_pm_task_reference
23967                                               ,p_out_task_id => l_d_task_id
23968                                               ,p_return_status => l_return_status);
23969              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23970                   THEN
23971                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23972              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23973                   THEN
23974                     RAISE FND_API.G_EXC_ERROR;
23975              END IF;
23976 
23977         END IF;
23978 /*
23979           IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id) = 'Y') THEN
23980              l_d_struct_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_d_task_id);
23981           ELSE
23982              l_d_struct_ver_id :=  PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(p_pa_project_id, 'WORKPLAN');
23983           END IF;
23984 */ --we dont need this. The structure version id is derived.
23985 
23986       l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_structure_version_id
23987                                           ,p_task_id => l_d_task_id);
23988 
23989       pa_proj_task_struc_pub.parse_predecessor_import(p_string => p_pred_string
23990                                                      ,p_delimeter => p_pred_delimiter
23991                                                      ,p_task_version_Id => l_d_task_ver_id
23992                                                      ,x_return_status => l_return_status
23993                                                      ,x_msg_count => l_msg_count
23994                                                      ,x_msg_data  => l_msg_data);
23995 
23996            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23997                   THEN
23998                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23999              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24000                   THEN
24001                     RAISE FND_API.G_EXC_ERROR;
24002              END IF;
24003             l_d_task_id := null;
24004    END IF;
24005   --bug 4218977, rtarway, unset this variable if not called from update_project
24006   if p_calling_api <> 'UPDATE_PROJECT' then
24007      G_OP_VALIDATE_FLAG := null;
24008   end if;
24009 EXCEPTION
24010 
24011     WHEN FND_API.G_EXC_ERROR THEN
24012 
24013         p_return_status := FND_API.G_RET_STS_ERROR ;
24014         --bug 4218977, rtarway, unset this variable if not called from update_project
24015         if p_calling_api <> 'UPDATE_PROJECT' then
24016           G_OP_VALIDATE_FLAG := null;
24017         end if;
24018         ROLLBACK TO Update_Task_pub;
24019 
24020         -- 4537865
24021         p_out_pa_task_id := NULL ;
24022         p_out_pm_task_reference := NULL ;
24023         -- 4537865
24024 
24025         FND_MSG_PUB.Count_And_Get
24026       (   p_count    =>  p_msg_count  ,
24027           p_data    =>  p_msg_data  );
24028 
24029     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
24030 
24031         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
24032         ROLLBACK TO Update_Task_pub;
24033         --bug 4218977, rtarway, unset this variable if not called from update_project
24034         if p_calling_api <> 'UPDATE_PROJECT' then
24035           G_OP_VALIDATE_FLAG := null;
24036         end if;
24037 
24038         -- 4537865
24039         p_out_pa_task_id := NULL ;
24040         p_out_pm_task_reference := NULL ;
24041         -- 4537865
24042 
24043         FND_MSG_PUB.Count_And_Get
24044       (   p_count    =>  p_msg_count  ,
24045           p_data    =>  p_msg_data  );
24046 
24047     WHEN OTHERS THEN
24048 
24049         ROLLBACK TO Update_Task_pub;
24050         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
24051         --bug 4218977, rtarway, unset this variable if not called from update_project
24052         if p_calling_api <> 'UPDATE_PROJECT' then
24053           G_OP_VALIDATE_FLAG := null;
24054         end if;
24055 
24056         -- 4537865
24057         p_out_pa_task_id := NULL ;
24058         p_out_pm_task_reference := NULL ;
24059         -- 4537865
24060 
24061         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
24062 
24063             FND_MSG_PUB.add_exc_msg
24064         ( p_pkg_name    => G_PKG_NAME
24065         , p_procedure_name  => l_api_name  );
24066 
24067         END IF;
24068 
24069         FND_MSG_PUB.Count_And_Get
24070       (   p_count    =>  p_msg_count  ,
24071           p_data    =>  p_msg_data  );
24072 
24073 END update_task;
24074 
24075 --------------------------------------------------------------------------------
24076 --Name:               execute_update_project
24077 --Type:               Procedure
24078 --Description:        This procedure can be used to update a project
24079 --                    using global PL/SQL tables.
24080 --
24081 --Called subprograms:
24082 --
24083 --
24084 --
24085 --History:
24086 --    15-AUG-1996        R. Krishnamurthy      Created
24087 --    05-DEC-1996   L. de Werker    Added initialisation of message list
24088 --    22-DEC-97    jwhite    - Added OUT-parameter p_workflow_started
24089 --             for workflow.
24090 --
24091 
24092 PROCEDURE execute_update_project
24093 ( p_api_version_number      IN  NUMBER
24094  ,p_commit        IN  VARCHAR2  := FND_API.G_FALSE
24095  ,p_init_msg_list                    IN  VARCHAR2  := FND_API.G_FALSE
24096  ,p_op_validate_flag  IN VARCHAR2 := 'Y'--added by rtarway, bug 4218977
24097  ,p_msg_count        OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24098  ,p_msg_data        OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24099  ,p_return_status                    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24100  ,p_workflow_started                  OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24101  ,p_pm_product_code                                 IN     VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24102  ,p_pass_entire_structure       IN      VARCHAR2 := 'N'  -- Added for bug 3696234 : Bug 3627124
24103  ,p_update_mode    IN VARCHAR2 := 'PA_UPD_WBS_ATTR' -- rtarway, for DHI ER, BUG 4413568  --bug 4534919
24104  )
24105 IS
24106 
24107 l_api_name              CONSTANT    VARCHAR2(30):='Execute_update_project';
24108 l_return_status                     VARCHAR2(1) ;
24109 
24110 BEGIN
24111 
24112     SAVEPOINT execute_update_project_pub;
24113 
24114     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
24115                                p_api_version_number  ,
24116                                l_api_name         ,
24117                                G_PKG_NAME         )
24118     THEN
24119 
24120         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24121 
24122     END IF;
24123 
24124     --  Initialize the message table if requested.
24125 
24126     IF FND_API.TO_BOOLEAN( p_init_msg_list )
24127     THEN
24128 
24129   FND_MSG_PUB.initialize;
24130 
24131     END IF;
24132 
24133     p_return_status := FND_API.G_RET_STS_SUCCESS;
24134 
24135 -- Begin code to fix Bug # 4314797.
24136 
24137 -- In the publish workplan flow, we do not need to update key members so we can clear the global
24138 -- g_key_members_in_tbl table. Further, in the 'create project and publish workplan version' flow
24139 -- from MSP where the g_key_members_in_tbl would be populated during the create project flow
24140 -- we need to clear the g_key_members_in_tbl before calling the API: update_project() in the publish
24141 -- workplan flow to prevent errors.
24142 
24143         if nvl(p_pm_product_code,'WORKPLAN') = 'WORKPLAN' then
24144 
24145                 g_key_members_in_tbl.delete;
24146 
24147         end if;
24148 
24149 -- End code to fix Bug # 4314797.
24150 
24151 
24152     Update_Project (   p_api_version_number    => p_api_version_number,
24153         p_commit                  => FND_API.G_FALSE,
24154         p_return_status                               => l_return_status,
24155         p_msg_count                                   => p_msg_count,
24156         p_msg_data                                    => p_msg_data,
24157       p_workflow_started                => p_workflow_started,
24158         p_pm_product_code    => p_pm_product_code,
24159         p_op_validate_flag   => p_op_validate_flag, --Added by rtarway 4218977
24160         p_project_in                  => g_project_in_rec,
24161         p_project_out                              => g_project_out_rec,
24162         p_key_members                   => g_key_members_in_tbl,
24163         p_class_categories    => g_class_categories_in_tbl,
24164         p_tasks_in                  => g_tasks_in_tbl,
24165         p_tasks_out                              => g_tasks_out_tbl,
24166                         p_org_roles                     => g_org_roles_in_tbl
24167        ,p_pass_entire_structure  => p_pass_entire_structure  -- Added for bug 3696234 : Bug 3627124
24168       --bug 3096203
24169        ,p_ext_attr_tbl_in      => G_ext_attr_in_tbl
24170       --bug 3096203
24171 --FP M : deliverables
24172       ,p_deliverables_in          => G_deliverables_in_tbl
24173 --      ,p_deliverables_out         => G_deliverables_out_tbl
24174       ,p_deliverable_actions_in   => G_deliverable_actions_in_tbl
24175 --      ,p_deliverable_actions_out  => G_deliverable_actions_out_tbl
24176       ,p_update_mode              => p_update_mode --DHI ER bug 4413568
24177 --FP M : deliverables
24178      );
24179 
24180         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24181         THEN
24182 
24183                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24184 
24185         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24186         THEN
24187 
24188                         RAISE FND_API.G_EXC_ERROR;
24189         END IF;
24190 
24191 
24192         IF FND_API.to_boolean( p_commit )
24193   THEN
24194     COMMIT;
24195   END IF;
24196 
24197 
24198 EXCEPTION
24199 
24200         WHEN FND_API.G_EXC_ERROR
24201         THEN
24202         ROLLBACK TO execute_update_project_pub;
24203 
24204         p_return_status := FND_API.G_RET_STS_ERROR;
24205 
24206         -- 4537865
24207         p_workflow_started := NULL ;
24208         -- 4537865
24209 
24210         FND_MSG_PUB.Count_And_Get
24211       (   p_count    =>  p_msg_count  ,
24212           p_data    =>  p_msg_data  );
24213 
24214         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24215         THEN
24216         ROLLBACK TO execute_update_project_pub;
24217 
24218         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24219 
24220         -- 4537865
24221         p_workflow_started := NULL ;
24222         -- 4537865
24223 
24224         FND_MSG_PUB.Count_And_Get
24225       (   p_count    =>  p_msg_count  ,
24226           p_data    =>  p_msg_data  );
24227 
24228         WHEN OTHERS THEN
24229 
24230         ROLLBACK TO execute_update_project_pub;
24231 
24232         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24233 
24234         -- 4537865
24235         p_workflow_started := NULL ;
24236         -- 4537865
24237 
24238         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24239         THEN
24240 
24241         FND_MSG_PUB.add_exc_msg
24242         ( p_pkg_name    => G_PKG_NAME
24243         , p_procedure_name  => l_api_name
24244         , p_error_text    => SUBSTRB(SQLERRM, 1, 240) ); -- 4537865 Converted from SUBSTR to SUBSTRB
24245 
24246 
24247                 FND_MSG_PUB.add;
24248         END IF;
24249 
24250         FND_MSG_PUB.Count_And_Get
24251       (   p_count    =>  p_msg_count  ,
24252           p_data    =>  p_msg_data  );
24253 
24254 END execute_update_project;
24255 
24256 --------------------------------------------------------------------------------
24257 --Name:               delete_project
24258 --Type:               Procedure
24259 --Description:        This procedure can be used to delete a project
24260 --
24261 --
24262 --Called subprograms:
24263 --
24264 --
24265 --
24266 --History:
24267 --    19-AUG-1996        R. Krishnamurthy    Created
24268 --
24269 
24270 PROCEDURE delete_project
24271 ( p_api_version_number    IN  NUMBER
24272  ,p_commit      IN  VARCHAR2  := FND_API.G_FALSE
24273  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24274  ,p_msg_count      OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
24275  ,p_msg_data      OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24276  ,p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24277  ,p_pm_product_code    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24278  ,p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24279  ,p_pa_project_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24280  )
24281 IS
24282 
24283 l_return_status                        VARCHAR2(1); --bug 2471668
24284 l_project_id                           NUMBER;      --bug 2471668
24285 
24286 BEGIN
24287 
24288     -- 4537865 : Initialize Return status to success
24289     p_return_status := FND_API.G_RET_STS_SUCCESS;
24290 
24291         --bug 2471668.
24292         --We need to call this API here toget the corrct project id. This is also
24293         --called from the private API. But I discussed with Sakthi and he is ok to call this
24294         --twice once here and second time in private API. The idea is to make the advanced security changes
24295         --only in public APIs.
24296 
24297       PA_PROJECT_PVT.Convert_pm_projref_to_id
24298         (        p_pm_project_reference =>      p_pm_project_reference
24299                  ,  p_pa_project_id     =>      p_pa_project_id
24300                  ,  p_out_project_id    =>      l_project_id
24301                  ,  p_return_status     =>      l_return_status
24302         );
24303 
24304 
24305       IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
24306 
24307               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
24308       ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
24309               RAISE  FND_API.G_EXC_ERROR;
24310       END IF;
24311 
24312      PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id;  --bug 2471668 ( in the project context )
24313      --end of bug 2471668
24314 
24315 pa_project_pvt.delete_project1
24316 (p_api_version_number  => p_api_version_number
24317 ,p_commit              => FND_API.G_FALSE--bug 3766967
24318 ,p_init_msg_list       => p_init_msg_list
24319 ,p_msg_count           => p_msg_count
24320 ,p_msg_data            => p_msg_data
24321 ,p_return_status       => p_return_status
24322 ,p_pm_product_code     => p_pm_product_code
24323 ,p_pm_project_reference => p_pm_project_reference
24324 ,p_pa_project_id        => p_pa_project_id);
24325 
24326 EXCEPTION
24327         WHEN FND_API.G_EXC_ERROR
24328         THEN
24329         p_return_status := FND_API.G_RET_STS_ERROR;
24330         p_msg_count := FND_MSG_PUB.count_msg; --  4537865
24331 
24332         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24333         THEN
24334         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24335         p_msg_count := FND_MSG_PUB.count_msg; --  4537865
24336 
24337         WHEN OTHERS THEN
24338         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24339         p_msg_count := FND_MSG_PUB.count_msg; --  4537865
24340 
24341 END delete_project;
24342 
24343 --------------------------------------------------------------------------------
24344 -- Name:    Check_Delete_Task_OK
24345 -- Type:    PL/SQL Procedure
24346 -- Decscription:  This procedure returns 'Y' if it is OK to delete a task.
24347 --      Otherwise, it returns 'N'.
24348 --
24349 -- Called Subprograms: Convert_Pm_Projref_To_Id
24350 --      , Convert_Pm_Taskref_To_Id
24351 -- History:  15-AUG-96  Created  jwhite
24352 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24353 --            procedure.
24354 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24355 --    20-NOV-96  Update  lwerker Changed handling of error messages
24356 --    02-DEC-96  Update  lwerker Removed Savepoint and Rollbacks
24357 
24358 PROCEDURE Check_Delete_Task_OK
24359 ( p_api_version_number    IN  NUMBER
24360 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24361 , p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24362 , p_msg_count      OUT  NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24363 , p_msg_data      OUT  NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24364 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24365 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24366 , p_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24367 , p_pm_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24368 --Project Structure changes done for bug 2765115
24369 , p_structure_type              IN      VARCHAR2        := 'FINANCIAL'
24370 , p_task_version_id             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24371 --END Project Structure changes done for bug 2765115
24372 , p_delete_task_ok_flag    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24373 )
24374 IS
24375 l_retrieve varchar2(1) ; --     4096218 Issues found during Unit Testing
24376 BEGIN
24377 
24378 -- 4537865 : Initialize return status to success
24379 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24380 
24381 --bug 2876703   --check_delete_task_ok
24382      IF p_structure_type = 'WORKPLAN' AND p_project_id IS NOT NULL AND p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24383      THEN
24384          IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_project_id ) = 'N' OR
24385             PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ) = 'N'
24386          THEN
24387          l_retrieve := 'Y' ;
24388             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
24389             THEN
24390                 pa_interface_utils_pub.map_new_amg_msg
24391                     ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
24392                   ,p_msg_attribute    => 'CHANGE'
24393                   ,p_resize_flag      => 'Y' -- 4096218 Changed from 'N' to 'Y'
24394                   ,p_msg_context      => 'GENERAL'
24395                   ,p_attribute1       => ''
24396                   ,p_attribute2       => ''
24397                   ,p_attribute3       => ''
24398                   ,p_attribute4       => ''
24399                   ,p_attribute5       => '');
24400             END IF;
24401             RAISE FND_API.G_EXC_ERROR;
24402          END IF;
24403      END IF;
24404 --bug 2876703
24405 pa_project_check_pvt.Check_Delete_Task_OK_pvt
24406 (p_api_version_number      => p_api_version_number
24407 ,p_init_msg_list          => p_init_msg_list
24408 ,p_return_status          => p_return_status
24409 ,p_msg_count            => p_msg_count
24410 ,p_msg_data              => p_msg_data
24411 ,p_project_id            => p_project_id
24412 ,p_pm_project_reference      => p_pm_project_reference
24413 ,p_task_id              => p_task_id
24414 ,p_pm_task_reference        => p_pm_task_reference
24415 --Project Structure changes done for bug 2765115
24416 ,p_structure_type                      => p_structure_type
24417 ,p_task_version_id                     => p_task_version_id
24418 --END Project Structure changes done for bug 2765115
24419 ,p_delete_task_ok_flag      => p_delete_task_ok_flag);
24420 
24421 --bug 2876703   Added ecxeption block to support the above code added for bug 2876703
24422 EXCEPTION
24423         WHEN FND_API.G_EXC_ERROR
24424         THEN
24425         p_return_status := FND_API.G_RET_STS_ERROR;
24426         IF l_retrieve = 'Y' THEN
24427             FND_MSG_PUB.Count_And_Get
24428                (p_encoded =>'F' ,   p_count    =>  p_msg_count  ,
24429                    p_data    =>  p_msg_data  );
24430         END IF;
24431 
24432         -- 4537865
24433         p_delete_task_ok_flag := NULL ;
24434         p_msg_count := FND_MSG_PUB.count_msg;
24435 
24436         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24437         THEN
24438 
24439         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24440 
24441         -- 4537865
24442         p_delete_task_ok_flag := NULL ;
24443 
24444         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24445         THEN
24446                FND_MSG_PUB.add_exc_msg
24447                ( p_pkg_name            => G_PKG_NAME
24448                , p_procedure_name      => 'Check_Delete_Task_Ok');
24449         END IF;
24450 
24451         FND_MSG_PUB.Count_And_Get
24452         (p_count             =>      p_msg_count     ,
24453         p_data              =>      p_msg_data      );
24454 
24455         WHEN OTHERS THEN
24456         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24457 
24458         -- 4537865
24459         p_delete_task_ok_flag := NULL ;
24460 
24461         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24462         THEN
24463                FND_MSG_PUB.add_exc_msg
24464                ( p_pkg_name            => G_PKG_NAME
24465                , p_procedure_name      => 'Check_Delete_Task_Ok');
24466         END IF;
24467 
24468         FND_MSG_PUB.Count_And_Get
24469         (p_count             =>      p_msg_count     ,
24470         p_data              =>      p_msg_data      );
24471 
24472 --bug 2876703
24473 END Check_Delete_Task_Ok;
24474 
24475 
24476 --------------------------------------------------------------------------------
24477 -- Name:    Check_Add_Subtask_OK
24478 -- Type:    PL/SQL Procedure
24479 -- Decscription:  This procedure returns 'Y' if it is OK to add subtask, 'N' otherwise.
24480 --
24481 -- Called Subprograms: Convert_Pm_Projref_To_Id
24482 --      , Convert_Pm_Taskref_To_Id
24483 -- History:  15-AUG-96  Created  jwhite
24484 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24485 --            procedure.
24486 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24487 --    20-NOV-96  Update  lwerker Changed handling of error messages
24488 --    02-DEC-96  Update  lwerker Removed Savepoint and Rollbacks
24489 --
24490 
24491 PROCEDURE Check_Add_Subtask_OK
24492 (p_api_version_number    IN  NUMBER
24493 ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24494 , p_return_status    OUT  NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
24495 , p_msg_count      OUT  NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
24496 , p_msg_data      OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
24497 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24498 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24499 , p_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24500 , p_pm_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24501 , p_add_subtask_ok_flag    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
24502 )
24503 IS
24504 
24505 BEGIN
24506 
24507 -- 4537865 : Initialize return status to success
24508 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24509 
24510 pa_project_check_pvt.Check_Add_Subtask_OK_pvt
24511 (p_api_version_number      => p_api_version_number
24512 ,p_init_msg_list          => p_init_msg_list
24513 ,p_return_status          => p_return_status
24514 ,p_msg_count            => p_msg_count
24515 ,p_msg_data              => p_msg_data
24516 ,p_project_id            => p_project_id
24517 ,p_pm_project_reference      => p_pm_project_reference
24518 ,p_task_id              => p_task_id
24519 ,p_pm_task_reference        => p_pm_task_reference
24520 ,p_add_subtask_ok_flag      => p_add_subtask_ok_flag);
24521 
24522 -- 4537865
24523 EXCEPTION
24524 
24525         WHEN OTHERS THEN
24526         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24527 
24528         p_add_subtask_ok_flag := NULL ;
24529 
24530         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24531         THEN
24532                FND_MSG_PUB.add_exc_msg
24533                ( p_pkg_name            => G_PKG_NAME
24534                , p_procedure_name      => 'Check_Add_Subtask_Ok');
24535         END IF;
24536 
24537         FND_MSG_PUB.Count_And_Get
24538         (p_count             =>      p_msg_count     ,
24539         p_data              =>      p_msg_data      );
24540 
24541 END Check_Add_Subtask_Ok;
24542 
24543 
24544 --------------------------------------------------------------------------------
24545 
24546 -- Name:    Check_Unique_Task_Reference
24547 -- Type:    PL/SQL Procedure
24548 -- Decscription:  This procedure returns 'Y' if the task reference does not exist,
24549 --       'N' otherwise.
24550 --
24551 -- Called Subprograms: Convert_Pm_Projref_To_Id
24552 --
24553 -- History:  15-AUG-96  Created  jwhite
24554 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24555 --            procedure.
24556 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24557 --    20-NOV-96  Update  lwerker Added use of cursor and changed handling of error messages
24558 --    02-DEC-96  Update  lwerker Removed Savepoint and Rollbacks
24559 --
24560 PROCEDURE Check_Unique_Task_Reference
24561 (p_api_version_number    IN  NUMBER
24562 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24563 , p_return_status    OUT  NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
24564 , p_msg_count      OUT NOCOPY  NUMBER  /*Added the nocopy check for 4537865 */
24565 , p_msg_data      OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
24566 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24567 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24568 , p_pm_task_reference    IN  VARCHAR2
24569 , p_unique_task_ref_flag  OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
24570 )
24571 IS
24572 
24573 BEGIN
24574 
24575 -- 4537865 : Initialize return status to success
24576 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24577 
24578 pa_project_check_pvt.Check_Unique_Task_Ref_pvt
24579 (p_api_version_number      => p_api_version_number
24580 ,p_init_msg_list          => p_init_msg_list
24581 ,p_return_status          => p_return_status
24582 ,p_msg_count            => p_msg_count
24583 ,p_msg_data              => p_msg_data
24584 ,p_project_id            => p_project_id
24585 ,p_pm_project_reference      => p_pm_project_reference
24586 ,p_pm_task_reference        => p_pm_task_reference
24587 ,p_unique_task_ref_flag        => p_unique_task_ref_flag);
24588 
24589 -- 4537865
24590 EXCEPTION
24591 
24592         WHEN OTHERS THEN
24593         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24594 
24595         p_unique_task_ref_flag := NULL ;
24596 
24597         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24598         THEN
24599                FND_MSG_PUB.add_exc_msg
24600                ( p_pkg_name            => G_PKG_NAME
24601                , p_procedure_name      => 'Check_Unique_Task_Reference');
24602         END IF;
24603 
24604         FND_MSG_PUB.Count_And_Get
24605         (p_count             =>      p_msg_count     ,
24606         p_data              =>      p_msg_data      );
24607 
24608 END Check_Unique_Task_Reference;
24609 
24610 
24611 --------------------------------------------------------------------------------
24612 -- Name:    Check_Unique_Project_Reference
24613 -- Type:    PL/SQL Procedure
24614 -- Decscription:  This procedure returns 'Y' if the project reference does not exist
24615 --      , 'N' otherwise.
24616 --
24617 -- Called Subprograms: none.
24618 --
24619 -- History:  15-AUG-96  Created  jwhite
24620 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24621 --            procedure.
24622 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24623 --
24624 --    02-DEC-96  Update  lwerker Added use of cursor and changed handling of error messages
24625 --            Removed Savepoint and Rollbacks
24626 --
24627 PROCEDURE Check_Unique_Project_Reference
24628 (p_api_version_number    IN  NUMBER
24629 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24630 , p_return_status    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24631 , p_msg_count      OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24632 , p_msg_data      OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24633 , p_pm_project_reference  IN  VARCHAR2
24634 , p_unique_project_ref_flag  OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24635 )
24636 IS
24637 
24638 BEGIN
24639 
24640 -- 4537865 : Initialize return status to success
24641 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24642 
24643 pa_project_check_pvt.Check_Unique_Project_Ref_pvt
24644 (p_api_version_number      => p_api_version_number
24645 ,p_init_msg_list          => p_init_msg_list
24646 ,p_return_status          => p_return_status
24647 ,p_msg_count            => p_msg_count
24648 ,p_msg_data              => p_msg_data
24649 ,p_pm_project_reference      => p_pm_project_reference
24650 ,p_unique_project_ref_flag    => p_unique_project_ref_flag);
24651 
24652 -- 4537865
24653 EXCEPTION
24654 
24655         WHEN OTHERS THEN
24656         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24657 
24658         p_unique_project_ref_flag := NULL ;
24659         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24660         THEN
24661                FND_MSG_PUB.add_exc_msg
24662                ( p_pkg_name            => G_PKG_NAME
24663                , p_procedure_name      => 'Check_Unique_Project_Reference');
24664         END IF;
24665 
24666         FND_MSG_PUB.Count_And_Get
24667         (p_count             =>      p_msg_count     ,
24668         p_data              =>      p_msg_data      );
24669 
24670 END Check_Unique_Project_Reference;
24671 
24672 --------------------------------------------------------------------------------
24673 -- Name:    Check_Delete_Project_OK
24674 -- Type:    PL/SQL Procedure
24675 -- Decscription:  This procedure returns 'Y' if the project can be deleted, 'N' otherwise.
24676 --
24677 -- Called Subprograms: Convert_Pm_Projref_To_Id
24678 --
24679 -- History:  15-AUG-96  Created  jwhite
24680 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24681 --            procedure.
24682 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24683 --    02-DEC-96  Update  lwerker Changed handling of error messages
24684 --            Removed Savepoint and Rollbacks
24685 --
24686 
24687 PROCEDURE Check_Delete_Project_OK
24688 (p_api_version_number    IN  NUMBER
24689 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24690 , p_return_status    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
24691 , p_msg_count      OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
24692 , p_msg_data      OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
24693 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24694 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24695 , p_delete_project_ok_flag  OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
24696 )
24697 IS
24698 
24699 BEGIN
24700 
24701 -- 4537865 : Initialize return status to success
24702 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24703 
24704 pa_project_check_pvt.Check_Delete_Project_OK_pvt
24705 (p_api_version_number        => p_api_version_number
24706 ,p_init_msg_list            => p_init_msg_list
24707 ,p_return_status            => p_return_status
24708 ,p_msg_count              => p_msg_count
24709 ,p_msg_data                => p_msg_data
24710 ,p_project_id              => p_project_id
24711 ,p_pm_project_reference        => p_pm_project_reference
24712 ,p_delete_project_ok_flag      => p_delete_project_ok_flag);
24713 
24714 -- 4537865
24715 EXCEPTION
24716 
24717         WHEN OTHERS THEN
24718         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24719 
24720         p_delete_project_ok_flag := NULL ;
24721         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24722         THEN
24723                FND_MSG_PUB.add_exc_msg
24724                ( p_pkg_name            => G_PKG_NAME
24725                , p_procedure_name      => 'Check_Delete_Project_OK');
24726         END IF;
24727 
24728         FND_MSG_PUB.Count_And_Get
24729         (p_count             =>      p_msg_count     ,
24730         p_data              =>      p_msg_data      );
24731 
24732 END Check_Delete_Project_Ok;
24733 
24734 --------------------------------------------------------------------------------
24735 -- Name:    Check_Change_Parent_OK
24736 -- Type:    PL/SQL Procedure
24737 -- Decscription:  This procedure returns 'Y' if the task can be moved to another parent; 'N' otherwise.
24738 --
24739 -- Called Subprograms: Convert_Pm_Projref_To_Id
24740 --
24741 -- History:  15-AUG-96  Created  jwhite
24742 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24743 --            procedure.
24744 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24745 --    02-DEC-96  Update  lwerker  Changed handling of return values.
24746 --            Removed Savepoint and Rollbacks
24747 --
24748 PROCEDURE Check_Change_Parent_OK
24749 (p_api_version_number     IN  NUMBER
24750 , p_init_msg_list     IN  VARCHAR2  := FND_API.G_FALSE
24751 , p_return_status     OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24752 , p_msg_count       OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24753 , p_msg_data       OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24754 , p_project_id       IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24755 , p_pm_project_reference   IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24756 , p_task_id       IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24757 , p_pm_task_reference     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24758 , p_new_parent_task_id     IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24759 , p_pm_new_parent_task_reference IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24760 , p_change_parent_ok_flag   OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24761 )
24762 IS
24763 
24764 BEGIN
24765 
24766 -- 4537865 : Initialize return status to success
24767 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24768 
24769 pa_project_check_pvt.Check_Change_Parent_OK_pvt
24770 (p_api_version_number        => p_api_version_number
24771 ,p_init_msg_list            => p_init_msg_list
24772 ,p_return_status            => p_return_status
24773 ,p_msg_count              => p_msg_count
24774 ,p_msg_data                => p_msg_data
24775 ,p_project_id              => p_project_id
24776 ,p_pm_project_reference        => p_pm_project_reference
24777 ,p_task_id                => p_task_id
24778 ,p_pm_task_reference          => p_pm_task_reference
24779 ,p_new_parent_task_id        => p_new_parent_task_id
24780 ,p_pm_new_parent_task_reference  => p_pm_new_parent_task_reference
24781 ,p_change_parent_ok_flag      => p_change_parent_ok_flag);
24782 
24783 -- 4537865
24784 EXCEPTION
24785 
24786         WHEN OTHERS THEN
24787         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24788 
24789         p_change_parent_ok_flag := NULL ;
24790         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24791         THEN
24792                FND_MSG_PUB.add_exc_msg
24793                ( p_pkg_name            => G_PKG_NAME
24794                , p_procedure_name      => 'Check_Change_Parent_OK');
24795         END IF;
24796 
24797         FND_MSG_PUB.Count_And_Get
24798         (p_count             =>      p_msg_count     ,
24799         p_data              =>      p_msg_data      );
24800 
24801 END Check_Change_Parent_OK;
24802 
24803 --------------------------------------------------------------------------------
24804 -- Name:    Check_Change_Project_Org_OK
24805 -- Type:    PL/SQL Procedure
24806 -- Decscription:  This procedure returns 'Y' if the project organization can be changed, 'N' otherwise.
24807 --
24808 -- Called Subprograms: Convert_Pm_Projref_To_Id
24809 --
24810 -- History:  15-AUG-96  Created  jwhite
24811 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24812 --            procedure.
24813 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24814 --    02-DEC-96  Update  lwerker Changed error handling
24815 --            Removed Savepoint and Rollbacks
24816 --
24817 
24818 PROCEDURE Check_Change_Project_Org_OK
24819 (p_api_version_number    IN  NUMBER
24820 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24821 , p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24822 , p_msg_count      OUT  NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24823 , p_msg_data      OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24824 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24825 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24826 , p_change_project_org_ok_flag  OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24827 )
24828 IS
24829 
24830 BEGIN
24831 
24832 -- 4537865 : Initialize return status to success
24833 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24834 
24835 pa_project_check_pvt.Check_Change_Proj_Org_OK_pvt
24836 (p_api_version_number        => p_api_version_number
24837 ,p_init_msg_list            => p_init_msg_list
24838 ,p_return_status            => p_return_status
24839 ,p_msg_count              => p_msg_count
24840 ,p_msg_data                => p_msg_data
24841 ,p_project_id              => p_project_id
24842 ,p_pm_project_reference        => p_pm_project_reference
24843 ,p_change_project_org_ok_flag    => p_change_project_org_ok_flag);
24844 
24845 -- 4537865
24846 EXCEPTION
24847 
24848         WHEN OTHERS THEN
24849         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24850 
24851         p_change_project_org_ok_flag := NULL ;
24852         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24853         THEN
24854                FND_MSG_PUB.add_exc_msg
24855                ( p_pkg_name            => G_PKG_NAME
24856                , p_procedure_name      => 'Check_Change_Project_Org_OK');
24857         END IF;
24858 
24859         FND_MSG_PUB.Count_And_Get
24860         (p_count             =>      p_msg_count     ,
24861         p_data              =>      p_msg_data      );
24862 
24863 END Check_Change_Project_Org_Ok;
24864 
24865 --------------------------------------------------------------------------------
24866 -- Name:    Check_Unique_Task_Number
24867 -- Type:    PL/SQL Procedure
24868 -- Decscription:  This procedure returns 'Y' if the task number does NOT already exist; 'N' otherwise.
24869 --
24870 -- Called Subprograms: Convert_Pm_Projref_To_Id
24871 --
24872 -- History:  15-AUG-96  Created  jwhite
24873 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24874 --            procedure.
24875 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24876 --    02-DEC-96  Update  lwerker  Changed handling of return values
24877 --            Removed Savepoint and Rollbacks
24878 --
24879 
24880 PROCEDURE Check_Unique_Task_Number
24881 (p_api_version_number    IN  NUMBER
24882 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24883 , p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24884 , p_msg_count      OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
24885 , p_msg_data      OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24886 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24887 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24888 , p_task_number      IN  VARCHAR2
24889 , p_unique_task_number_flag  OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24890 )
24891 IS
24892 
24893 BEGIN
24894 
24895 -- 4537865 : Initialize return status to success
24896 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24897 
24898 pa_project_check_pvt.Check_Unique_Task_Number_pvt
24899 (p_api_version_number      => p_api_version_number
24900 ,p_init_msg_list          => p_init_msg_list
24901 ,p_return_status          => p_return_status
24902 ,p_msg_count            => p_msg_count
24903 ,p_msg_data              => p_msg_data
24904 ,p_project_id            => p_project_id
24905 ,p_pm_project_reference      => p_pm_project_reference
24906 ,p_task_number            => p_task_number
24907 ,p_unique_task_number_flag    => p_unique_task_number_flag);
24908 
24909 -- 4537865
24910 EXCEPTION
24911 
24912         WHEN OTHERS THEN
24913         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24914 
24915         p_unique_task_number_flag := NULL ;
24916         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24917         THEN
24918                FND_MSG_PUB.add_exc_msg
24919                ( p_pkg_name            => G_PKG_NAME
24920                , p_procedure_name      => 'Check_Unique_Task_Number');
24921         END IF;
24922 
24923         FND_MSG_PUB.Count_And_Get
24924         (p_count             =>      p_msg_count     ,
24925         p_data              =>      p_msg_data      );
24926 
24927 END Check_Unique_Task_Number;
24928 
24929 --------------------------------------------------------------------------------
24930 -- Name:    Check_Task_Number_Change_Ok
24931 -- Type:    PL/SQL Procedure
24932 -- Decscription:  This procedure returns 'Y' if it is OK to change a LOWEST task.
24933 --      Otherwise, it returns 'N'.
24934 --
24935 -- Called Subprograms: Convert_Pm_Projref_To_Id
24936 --      , Convert_Pm_Taskref_To_Id
24937 -- History:  15-AUG-96  Created  jwhite
24938 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24939 --            procedure.
24940 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24941 --    02-DEC-96  Update  lwerker  Changed the way return values are handled
24942 --            Removed Savepoint and Rollbacks
24943 
24944 PROCEDURE Check_Task_Number_Change_Ok
24945 ( p_api_version_number    IN  NUMBER
24946 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24947 , p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24948 , p_msg_count      OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
24949 , p_msg_data      OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24950 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24951 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24952 , p_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24953 , p_pm_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24954 , p_task_number_change_Ok_flag  OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24955 )
24956 IS
24957 
24958 BEGIN
24959 
24960 -- 4537865 : Initialize return status to success
24961 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24962 
24963 pa_project_check_pvt.Check_Task_Numb_Change_Ok_Pvt
24964 (p_api_version_number        => p_api_version_number
24965 ,p_init_msg_list            => p_init_msg_list
24966 ,p_return_status            => p_return_status
24967 ,p_msg_count              => p_msg_count
24968 ,p_msg_data                => p_msg_data
24969 ,p_project_id              => p_project_id
24970 ,p_pm_project_reference        => p_pm_project_reference
24971 ,p_task_id                => p_task_id
24972 ,p_pm_task_reference          => p_pm_task_reference
24973 ,p_task_number_change_Ok_flag    => p_task_number_change_Ok_flag);
24974 
24975 -- 4537865
24976 EXCEPTION
24977 
24978         WHEN OTHERS THEN
24979         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24980 
24981         p_task_number_change_Ok_flag := NULL ;
24982         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24983         THEN
24984                FND_MSG_PUB.add_exc_msg
24985                ( p_pkg_name            => G_PKG_NAME
24986                , p_procedure_name      => 'Check_Task_Number_Change_Ok');
24987         END IF;
24988 
24989         FND_MSG_PUB.Count_And_Get
24990         (p_count             =>      p_msg_count     ,
24991         p_data              =>      p_msg_data      );
24992 
24993 END Check_Task_Number_Change_Ok;
24994 
24995 --------------------------------------------------------------------------------
24996 -- Name:    approve_project
24997 -- Type:    PL/SQL Procedure
24998 -- Decscription:  This procedure will set the project status to approved.
24999 --
25000 -- Called Subprograms:
25001 --
25002 -- History:  27-FEB-97  L. de Werker  Created
25003 --
25004 --
25005 PROCEDURE approve_project
25006 ( p_api_version_number    IN  NUMBER
25007  ,p_commit      IN  VARCHAR2  := FND_API.G_FALSE
25008  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
25009  ,p_msg_count      OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
25010  ,p_msg_data      OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25011  ,p_return_status    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25012  ,p_pm_product_code    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25013  ,p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25014  ,p_pa_project_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25015  )
25016 IS
25017 
25018 BEGIN
25019 
25020 -- 4537865 : Initialize return status to success
25021 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25022 
25023 pa_project_pvt.approve_project1
25024 ( p_api_version_number => p_api_version_number
25025 , p_commit             => FND_API.G_FALSE--bug 3766967
25026 , p_init_msg_list      => p_init_msg_list
25027 , p_msg_count          => p_msg_count
25028 , p_msg_data           => p_msg_data
25029 , p_return_status      => p_return_status
25030 , p_pm_product_code    => p_pm_product_code
25031 , p_pm_project_reference => p_pm_project_reference
25032 , p_pa_project_id        => p_pa_project_id);
25033 
25034 -- 4537865
25035 EXCEPTION
25036 
25037         WHEN OTHERS THEN
25038         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25039 
25040         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25041         THEN
25042                FND_MSG_PUB.add_exc_msg
25043                ( p_pkg_name            => G_PKG_NAME
25044                , p_procedure_name      => 'approve_project');
25045         END IF;
25046 
25047         FND_MSG_PUB.Count_And_Get
25048         (p_count             =>      p_msg_count     ,
25049         p_data              =>      p_msg_data      );
25050 
25051 END approve_project;
25052 
25053 --------------------------------------------------------------------------------
25054 -- Name:    load_tasks
25055 -- Type:    PL/SQL Procedure
25056 -- Decscription:  This is a wrapper API for the load_task procedure.
25057 --
25058 -- Called Subprograms: load_task
25059 --
25060 -- History:  05-JUN-02  hyau  Created
25061 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
25062 --                                        dependency_type and lag days to tasks and create dependencies.
25063 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
25064 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
25065 --
25066 --
25067 --          01-MAR-2004 Rakesh Raghavan   Copied Venkat's FP-M changes from load_task API to load_tasks API.
25068 --          05-APR-2004 Rakesh Raghavan   Progress Management Changes. Bug # 3420093.
25069 --          29-NOV-2004 djoseph           Bug 4024659: Changed the function substr to substrb for l_task_name and l_long_task_name.
25070 --                                        Changes tagged by bug number.
25071 
25072 PROCEDURE load_tasks
25073 (
25074    p_api_version_number      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25075   ,p_init_msg_list      IN  VARCHAR2  := FND_API.G_FALSE
25076   ,p_return_status      OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25077   ,p_pm_task_reference      IN  PA_VC_1000_150
25078   ,p_pa_task_id                         IN      PA_NUM_1000_NUM
25079   ,p_task_name        IN  PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --bug 6193314 .Modified PA_VC_1000_150
25080   ,p_long_task_name      IN  PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25081   ,p_pa_task_number                     IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25082   ,p_task_description      IN  PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25083   ,p_task_start_date      IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25084   ,p_task_completion_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25085   ,p_pm_parent_task_reference    IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25086   ,p_pa_parent_task_id      IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25087   ,p_address_id        IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25088   ,p_carrying_out_organization_id  IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25089   ,p_service_type_code      IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25090   ,p_task_manager_person_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25091   ,p_billable_flag      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25092   ,p_chargeable_flag      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25093   ,p_ready_to_bill_flag      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25094   ,p_ready_to_distribute_flag    IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25095   ,p_limit_to_txn_controls_flag    IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25096   ,p_labor_bill_rate_org_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25097   ,p_labor_std_bill_rate_schdl    IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25098   ,p_labor_schedule_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25099   ,p_labor_schedule_discount    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25100   ,p_nl_bill_rate_org_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25101   ,p_nl_std_bill_rate_schdl    IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25102   ,p_nl_schedule_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25103   ,p_nl_schedule_discount    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25104   ,p_labor_cost_multiplier_name    IN  PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25105   ,p_cost_ind_rate_sch_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25106   ,p_rev_ind_rate_sch_id          IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25107   ,p_inv_ind_rate_sch_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25108   ,p_cost_ind_sch_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25109   ,p_rev_ind_sch_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25110   ,p_inv_ind_sch_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25111   ,p_labor_sch_type      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25112   ,p_nl_sch_type      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25113   ,p_actual_start_date                  IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25114   ,p_actual_finish_date                 IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25115   ,p_early_start_date                   IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25116   ,p_early_finish_date                  IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25117   ,p_late_start_date                    IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25118   ,p_late_finish_date                   IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25119   ,p_scheduled_start_date               IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25120   ,p_scheduled_finish_date              IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25121   ,p_attribute_category      IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25122   ,p_attribute1        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25123   ,p_attribute2        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25124   ,p_attribute3        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25125   ,p_attribute4        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25126   ,p_attribute5        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25127   ,p_attribute6        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25128   ,p_attribute7        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25129   ,p_attribute8        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25130   ,p_attribute9        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25131   ,p_attribute10      IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25132   ,p_allow_cross_charge_flag            IN      PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25133   ,p_project_rate_date                  IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25134   ,p_project_rate_type                  IN      PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25135   ,p_cc_process_labor_flag              IN      PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25136   ,p_labor_tp_schedule_id               IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25137   ,p_labor_tp_fixed_date                IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25138   ,p_cc_process_nl_flag                 IN      PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25139   ,p_nl_tp_schedule_id                  IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25140   ,p_nl_tp_fixed_date                   IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25141   ,p_receive_project_invoice_flag       IN      PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25142   ,p_work_type_id                       IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25143   ,p_emp_bill_rate_schedule_id          IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25144   ,p_job_bill_rate_schedule_id          IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25145 --Sakthi  MCB
25146  ,p_non_lab_std_bill_rt_sch_id          IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25147  ,p_taskfunc_cost_rate_type             IN      PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25148  ,p_taskfunc_cost_rate_date             IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25149 --Sakthi  MCB
25150  ,p_display_sequence            IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25151  ,p_wbs_level                    IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25152  ,p_milestone                     IN    PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25153  ,p_duration                      IN    PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25154  ,p_duration_unit                 IN    PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25155  ,p_login_user_name               IN    PA_VC_1000_150:= PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25156  ,p_critical_flag                 IN    PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25157  ,p_sub_project_id                IN    PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25158  ,p_progress_status_code           IN    PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25159  ,p_progress_comments             IN    PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25160  ,p_progress_asof_date            IN    PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25161  ,p_progress_description             IN      PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25162  ,p_predecessors                  IN    PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25163  ,p_priority_code                       IN      PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25164  ,p_wbs_number                           IN      PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25165  ,p_estimated_start_date                IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25166  ,p_estimated_finish_date               IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25167  ,p_estimate_to_complete              IN    PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25168  ,p_language                      IN    VARCHAR2 default 'US'
25169  ,p_delimiter                     IN    VARCHAR2 default ','
25170  ,p_structure_version_id          IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25171 -- ,p_calling_mode                  IN    VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25172 --Margaret bug 2683364
25173  ,P_OBLIGATION_START_DATE   IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25174  ,P_OBLIGATION_FINISH_DATE  IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25175  ,P_BASELINE_START_DATE     IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25176  ,P_BASELINE_FINISH_DATE    IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25177  ,P_CLOSED_DATE             IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25178  ,P_WQ_UOM_CODE             IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25179  ,P_WQ_ITEM_CODE            IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25180  ,P_STATUS_CODE             IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25181  ,P_WF_STATUS_CODE          IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25182  ,P_PM_SOURCE_CODE          IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25183  ,P_INC_PROJ_PROGRESS_FLAG  IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25184  ,P_LINK_TASK_FLAG          IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25185  ,P_CALENDAR_ID             IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25186  ,P_PLANNED_EFFORT          IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25187  ,P_PLANNED_WORK_QUANTITY   IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25188  ,P_TASK_TYPE               IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25189 --Margaret end bug 2683364
25190  ,p_labor_disc_reason_code       IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25191  ,p_non_labor_disc_reason_code   IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25192 --PA L changes -- bug 2872708  --load_tasks
25193  ,p_retirement_cost_flag          IN PA_VC_1000_10             := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25194  ,p_cint_eligible_flag            IN PA_VC_1000_10             := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25195  ,p_cint_stop_date       IN PA_DATE_1000_DATE         := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25196 --end PA L changes -- bug 2872708
25197 -- FP-M Bug # 3301192
25198  ,p_pred_string                   IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25199 -- ,p_pred_delimiter                IN PA_VC_1000_10   := PA_VC_1000_10(',')
25200  ,p_pred_delimiter                IN PA_VC_1000_10   := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25201  -- FP M : Deliverable
25202  -- ,p_deliverable                 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25203   ,p_deliverable                 IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --SMUKKA
25204   ,p_deliverable_id               IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)  -- 3661788 Added IN Parameter
25205 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25206 -- FP M changes begin (venkat)
25207   ,p_base_percent_comp_deriv_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25208   ,p_sch_tool_tsk_type_code       IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25209   ,p_constraint_type_code         IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25210   ,p_constraint_date          IN PA_DATE_1000_DATE:= PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25211   ,p_free_slack                   IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25212   ,p_total_slack                  IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25213   ,p_effort_driven_flag           IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25214   ,p_level_assignments_flag       IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25215   ,p_invoice_method           IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25216   ,p_customer_id                  IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25217   ,p_gen_etc_source_code          IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25218 -- FP M changes end (venkat)
25219 -- FP M changes start (Mapping )
25220 --  ,p_financial_task_flag        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25221 --  ,p_mapped_task_id             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25222 --  ,p_mapped_task_reference      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25223 -- FP M changes end (Mapping )
25224    ,p_financial_task_flag        IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)    --SMukka
25225    ,p_mapped_task_id             IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --SMukka
25226    ,p_mapped_task_reference      IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  --SMukka
25227 
25228 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
25229   ,p_ext_act_duration            IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25230   ,p_ext_remain_duration         IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25231   ,p_ext_sch_duration            IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25232 -- (end venkat) new params for bug #3450684 -------------------------------------------------
25233 
25234 -- Progress Management Changes. Bug # 3420093.
25235   ,p_etc_effort                 IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25236   ,p_percent_complete           IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25237 -- Progress Management Changes. Bug # 3420093.
25238 
25239 )
25240 IS
25241 l_api_name              CONSTANT    VARCHAR2(30):='Load_Tasks';
25242 l_return_status                     VARCHAR2(1):= 'S';
25243 l_responsibility_id                 NUMBER;
25244 
25245 
25246 --hyau added for debugging unhandled exception stage
25247   l_stage           VARCHAR2(250);
25248   l_counter           NUMBER;
25249 
25250   l_task_name_flag    VARCHAR2(1) := 'Y';
25251   l_long_task_name_flag  VARCHAR2(1) := 'Y';
25252   l_pa_task_number_flag VARCHAR2(1) := 'Y';
25253   l_task_description_flag   VARCHAR2(1) := 'Y';
25254   l_task_start_date_flag    VARCHAR2(1) := 'Y';
25255   l_task_completion_date_flag    VARCHAR2(1) := 'Y';
25256   l_pm_parent_task_ref_flag    VARCHAR2(1) := 'Y';
25257   l_pa_parent_task_id_flag    VARCHAR2(1) := 'Y';
25258   l_address_id_flag                      VARCHAR2(1) := 'Y';
25259   l_carrying_out_org_id_flag    VARCHAR2(1) := 'Y';
25260   l_service_type_code_flag               VARCHAR2(1) := 'Y';
25261   l_task_manager_person_id_flag          VARCHAR2(1) := 'Y';
25262   l_billable_flag_flag                   VARCHAR2(1) := 'Y';
25263   l_chargeable_flag_flag    VARCHAR2(1) := 'Y';
25264   l_ready_to_bill_flag_flag    VARCHAR2(1) := 'Y';
25265   l_ready_to_dist_flag_flag    VARCHAR2(1) := 'Y';
25266   l_limit_to_txn_cnt_flag_flag    VARCHAR2(1) := 'Y';
25267   l_labor_bill_rate_org_id_flag    VARCHAR2(1) := 'Y';
25268   l_labor_std_bill_rate_flag    VARCHAR2(1) := 'Y';
25269   l_labor_schd_fixed_date_flag    VARCHAR2(1) := 'Y';
25270   l_labor_schd_discount_flag    VARCHAR2(1) := 'Y';
25271   l_nl_bill_rate_org_id_flag    VARCHAR2(1) := 'Y';
25272   l_nl_std_bill_rate_schdl_flag    VARCHAR2(1) := 'Y';
25273   l_nl_schedule_fixed_date_flag    VARCHAR2(1) := 'Y';
25274   l_nl_schedule_discount_flag    VARCHAR2(1) := 'Y';
25275   l_labor_cost_mult_name_flag    VARCHAR2(1) := 'Y';
25276   l_cost_ind_rate_sch_id_flag    VARCHAR2(1) := 'Y';
25277   l_rev_ind_rate_sch_id_flag    VARCHAR2(1) := 'Y';
25278   l_inv_ind_rate_sch_id_flag    VARCHAR2(1) := 'Y';
25279   l_cost_ind_sch_fixed_date_flag    VARCHAR2(1) := 'Y';
25280   l_rev_ind_sch_fixed_date_flag    VARCHAR2(1) := 'Y';
25281   l_inv_ind_sch_fixed_date_flag    VARCHAR2(1) := 'Y';
25282   l_labor_sch_type_flag    VARCHAR2(1) := 'Y';
25283   l_nl_sch_type_flag    VARCHAR2(1) := 'Y';
25284   l_actual_start_date_flag    VARCHAR2(1) := 'Y';
25285   l_actual_finish_date_flag    VARCHAR2(1) := 'Y';
25286   l_early_start_date_flag    VARCHAR2(1) := 'Y';
25287   l_early_finish_date_flag    VARCHAR2(1) := 'Y';
25288   l_late_start_date_flag    VARCHAR2(1) := 'Y';
25289   l_late_finish_date_flag    VARCHAR2(1) := 'Y';
25290   l_scheduled_start_date_flag    VARCHAR2(1) := 'Y';
25291   l_scheduled_finish_date_flag    VARCHAR2(1) := 'Y';
25292   l_attribute_category_flag    VARCHAR2(1) := 'Y';
25293   l_attribute1_flag    VARCHAR2(1) := 'Y';
25294   l_attribute2_flag    VARCHAR2(1) := 'Y';
25295   l_attribute3_flag    VARCHAR2(1) := 'Y';
25296   l_attribute4_flag    VARCHAR2(1) := 'Y';
25297   l_attribute5_flag    VARCHAR2(1) := 'Y';
25298   l_attribute6_flag    VARCHAR2(1) := 'Y';
25299   l_attribute7_flag    VARCHAR2(1) := 'Y';
25300   l_attribute8_flag    VARCHAR2(1) := 'Y';
25301   l_attribute9_flag    VARCHAR2(1) := 'Y';
25302   l_attribute10_flag    VARCHAR2(1) := 'Y';
25303   l_allow_cross_charge_flag_flag    VARCHAR2(1) := 'Y';
25304   l_project_rate_date_flag    VARCHAR2(1) := 'Y';
25305   l_project_rate_type_flag    VARCHAR2(1) := 'Y';
25306   l_cc_process_labor_flag_flag    VARCHAR2(1) := 'Y';
25307   l_labor_tp_schedule_id_flag    VARCHAR2(1) := 'Y';
25308   l_labor_tp_fixed_date_flag    VARCHAR2(1) := 'Y';
25309   l_cc_process_nl_flag_flag    VARCHAR2(1) := 'Y';
25310   l_nl_tp_schedule_id_flag    VARCHAR2(1) := 'Y';
25311   l_nl_tp_fixed_date_flag    VARCHAR2(1) := 'Y';
25312   l_receive_proj_inv_flag_flag    VARCHAR2(1) := 'Y';
25313   l_work_type_id_flag    VARCHAR2(1) := 'Y';
25314   l_emp_bill_rate_schd_id_flag    VARCHAR2(1) := 'Y';
25315   l_job_bill_rate_schd_id_flag    VARCHAR2(1) := 'Y';
25316   l_non_lab_std_bill_rt_sch_flag    VARCHAR2(1) := 'Y';
25317   l_taskfunc_cost_rate_type_flag    VARCHAR2(1) := 'Y';
25318   l_taskfunc_cost_rate_date_flag    VARCHAR2(1) := 'Y';
25319   l_display_sequence_flag    VARCHAR2(1) := 'Y';
25320   l_wbs_level_flag    VARCHAR2(1) := 'Y';
25321 --bug 2683364
25322   l_obligation_start_date_flag       VARCHAR2(1) := 'Y';
25323   l_obligation_finish_date_flag      VARCHAR2(1) := 'Y';
25324   l_baseline_start_date_flag          VARCHAR2(1) := 'Y';
25325   l_baseline_finish_date_flag         VARCHAR2(1) := 'Y';
25326   l_closed_date_flag                   VARCHAR2(1) := 'Y';
25327   l_wq_uom_code_flag                  VARCHAR2(1) := 'Y';
25328   l_wq_item_code_flag                 VARCHAR2(1) := 'Y';
25329   l_status_code_flag                  VARCHAR2(1) := 'Y';
25330   l_wf_status_code_flag               VARCHAR2(1) := 'Y';
25331   l_pm_source_code_flag               VARCHAR2(1) := 'Y';
25332   l_inc_proj_progress_flag_flag       VARCHAR2(1) := 'Y';
25333   l_link_task_flag_flag                VARCHAR2(1) := 'Y';
25334   l_calendar_id_flag                  VARCHAR2(1) := 'Y';
25335   l_planned_effort_flag                VARCHAR2(1) := 'Y';
25336   l_planned_work_quantity_flag         VARCHAR2(1) := 'Y';
25337   l_task_type_flag                     VARCHAR2(1) := 'Y';
25338 
25339 --bug 2744729, 2740565
25340   l_estimated_start_date_flag       VARCHAR2(1) := 'Y';
25341   l_estimated_finish_date_flag      VARCHAR2(1) := 'Y';
25342   l_milestone_flag_flag             VARCHAR2(1) := 'Y';
25343   l_critical_flag_flag              VARCHAR2(1) := 'Y';
25344   l_priority_code_flag              VARCHAR2(1) := 'Y';
25345 --bug 2744729, 2740565
25346 
25347   l_labor_disc_reason_code_flag              VARCHAR2(1) := 'Y';
25348   l_nl_disc_reason_code_flag              VARCHAR2(1) := 'Y';
25349 
25350   --bug 2872708
25351   l_retirement_cost_flag_flag                  VARCHAR2(1) := 'Y';
25352   l_cint_eligible_flag_flag                    VARCHAR2(1) := 'Y';
25353   l_cint_stop_date_flag                        VARCHAR2(1) := 'Y';
25354   --bug 2872708
25355 
25356   -- FP-M Bug # 3301192
25357   l_pred_string_flag               VARCHAR2(1) := 'Y';
25358   l_pred_delimiter_flag                 VARCHAR2(1) := 'Y';
25359 
25360 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25361 -- FP M changes begin (venkat)
25362   l_base_prct_comp_drv_code_flag    VARCHAR2(1) := 'Y';
25363   l_sch_tool_tsk_type_code_flag         VARCHAR2(1) := 'Y';
25364   l_constraint_type_code_flag           VARCHAR2(1) := 'Y';
25365   l_constraint_date_flag                VARCHAR2(1) := 'Y';
25366   l_free_slack_flag                     VARCHAR2(1) := 'Y';
25367   l_total_slack_flag                    VARCHAR2(1) := 'Y';
25368   l_effort_driven_flag_flag             VARCHAR2(1) := 'Y';
25369   l_level_assignments_flag_flag         VARCHAR2(1) := 'Y';
25370   l_invoice_method_flag                 VARCHAR2(1) := 'Y';
25371   l_customer_id_flag                    VARCHAR2(1) := 'Y';
25372   l_gen_etc_source_code_flag            VARCHAR2(1) := 'Y';
25373 -- FP M changes end (venkat)
25374 
25375 -- (begin venkat) new params for bug #3450684 -------------
25376   l_ext_act_duration_flag       VARCHAR2(1) := 'Y';
25377   l_ext_remain_duration_flag        VARCHAR2(1) := 'Y';
25378   l_ext_sch_duration_flag       VARCHAR2(1) := 'Y';
25379 -- (end venkat) new params for bug #3450684 --------------
25380 --SMukka
25381    l_financial_task_flag         VARCHAR2(1) := 'Y';
25382    l_mapped_task_id_flag         VARCHAR2(1) := 'Y';
25383    l_mapped_task_reference_flag  VARCHAR2(1) := 'Y';
25384    l_deliverable_flag            VARCHAR2(1) := 'Y';
25385 
25386 -- Progress Management Changes. Bug # 3420093.
25387   l_etc_effort_flag                 VARCHAR2(1) := 'Y';
25388   l_percent_complete_flag           VARCHAR2(1) := 'Y';
25389 -- Progress Management Changes. Bug # 3420093.
25390 
25391  -- Bug 6193314 .
25392   l_task_name              VARCHAR2(240)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25393   l_long_task_name                          VARCHAR2(240)       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25394   l_pa_task_number             VARCHAR2(100)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25395   l_task_description        VARCHAR2(250)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25396   l_task_start_date            DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25397   l_task_completion_date      DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25398   l_pm_parent_task_reference    VARCHAR2(25)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25399   l_pa_parent_task_id        NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25400   l_address_id              NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25401   l_carrying_out_organization_id  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25402   l_service_type_code        VARCHAR2(30)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25403   l_task_manager_person_id      NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25404   l_billable_flag            VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25405   l_chargeable_flag            VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25406   l_ready_to_bill_flag        VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25407   l_ready_to_distribute_flag    VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25408   l_limit_to_txn_controls_flag    VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25409   l_labor_bill_rate_org_id      NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25410   l_labor_std_bill_rate_schdl    VARCHAR2(20)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25411   l_labor_schedule_fixed_date    DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25412   l_labor_schedule_discount      NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25413   l_nl_bill_rate_org_id          NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25414   l_nl_std_bill_rate_schdl      VARCHAR2(30)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25415   l_nl_schedule_fixed_date      DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25416   l_nl_schedule_discount      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25417   l_labor_cost_multiplier_name    VARCHAR2(20)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25418   l_cost_ind_rate_sch_id      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25419   l_rev_ind_rate_sch_id          NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25420   l_inv_ind_rate_sch_id          NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25421   l_cost_ind_sch_fixed_date      DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25422   l_rev_ind_sch_fixed_date      DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25423   l_inv_ind_sch_fixed_date      DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25424   l_labor_sch_type            VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25425   l_nl_sch_type                VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25426   l_actual_start_date               DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25427   l_actual_finish_date              DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25428   l_early_start_date                DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25429   l_early_finish_date               DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25430   l_late_start_date                 DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25431   l_late_finish_date                DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25432   l_scheduled_start_date            DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25433   l_scheduled_finish_date           DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25434   l_attribute_category        VARCHAR2(30)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25435   l_attribute1              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25436   l_attribute2              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25437   l_attribute3              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25438   l_attribute4              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25439   l_attribute5              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25440   l_attribute6              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25441   l_attribute7              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25442   l_attribute8              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25443   l_attribute9              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25444   l_attribute10                VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25445   l_allow_cross_charge_flag          VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25446   l_project_rate_date              DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25447   l_project_rate_type              VARCHAR2(30)   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25448   l_cc_process_labor_flag         VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25449   l_labor_tp_schedule_id          NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25450   l_labor_tp_fixed_date           DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25451   l_cc_process_nl_flag             VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25452   l_nl_tp_schedule_id              NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25453   l_nl_tp_fixed_date               DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25454   l_receive_project_invoice_flag   VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25455   l_work_type_id                  NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25456   l_emp_bill_rate_schedule_id        NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25457   l_job_bill_rate_schedule_id        NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25458   l_non_lab_std_bill_rt_sch_id    NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25459   l_taskfunc_cost_rate_type       VARCHAR2(30)   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25460   l_taskfunc_cost_rate_date       DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25461   l_display_sequence          NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25462   l_wbs_level                  NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25463 
25464  l_obligation_start_date               DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25465  l_obligation_finish_date              DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25466  l_baseline_start_date                 DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25467  l_baseline_finish_date                DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25468  l_closed_date                         DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25469  l_wq_uom_code                         VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25470  l_wq_item_code                        VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25471  l_status_code                         VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25472  l_wf_status_code                      VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25473  l_pm_source_code                      VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25474  l_inc_proj_progress_flag              VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25475  l_link_task_flag                      VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25476  l_calendar_id                         NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25477  l_planned_effort                      NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25478  l_planned_work_quantity               NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25479  l_task_type                           NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25480 
25481 --bug 2744729, 2740565
25482  l_estimated_start_date               DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25483  l_estimated_finish_date              DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25484  l_priority_code                      VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25485  l_milestone_flag                     VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25486  l_critical_flag                      VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25487  --bug 2744729, 2740565
25488 
25489  l_labor_disc_reason_code                         VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25490  l_non_labor_disc_reason_code                        VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25491 
25492   --bug 2872708
25493   l_retirement_cost_flag                VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25494   l_cint_eligible_flag                  VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ;
25495   l_cint_stop_date                      DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25496   --bug 2872708
25497 
25498  -- FP-M Bug # 3301192
25499  l_pred_string               VARCHAR2(4000)       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25500  l_pred_delimiter                VARCHAR2(1)      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25501 
25502 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25503 -- FP M changes begin (venkat)
25504   l_base_percent_comp_deriv_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25505   l_sch_tool_tsk_type_code       VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25506   l_constraint_type_code         VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25507   l_constraint_date              DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25508   l_free_slack                   NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25509   l_total_slack                  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25510   l_effort_driven_flag           VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25511   l_level_assignments_flag       VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25512   l_invoice_method               VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25513   l_customer_id                  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25514   l_gen_etc_source_code          VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25515 -- FP M changes end (venkat)
25516 -- (Begin venkat) Bug #3450684 ---------------------------------------------------
25517   l_ext_act_duration            NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25518   l_ext_remain_duration         NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25519   l_ext_sch_duration            NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25520 -- (End venkat) Bug #3450684   ---------------------------------------------------
25521  --SMUKKA
25522    l_financial_task_fl          VARCHAR2(1):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25523    l_mapped_task_id             NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25524    l_mapped_task_reference      VARCHAR2(150):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25525    l_deliverable                VARCHAR2(4000):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25526    l_deliverable_id             NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM; -- 3661788 Added local variable
25527 
25528 -- Progress Management Changes. Bug # 3420093.
25529   l_etc_effort                 NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25530   l_percent_complete           NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25531 -- Progress Management Changes. Bug # 3420093.
25532 
25533 BEGIN
25534 
25535 -- 4537865 : Initialize return status to success
25536 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25537 
25538   -- Transferring all array variable to Global plsql table
25539   if (G_tasks_tbl_count = 0) then
25540     G_tasks_tbl_count := 1;
25541   end if;
25542 
25543   l_stage := '1';
25544 
25545 -- hyau validating what parameters are passed in.
25546   if p_task_name.count = 1 and p_task_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25547       l_task_name_flag := 'N';
25548   end if;
25549 
25550   if p_long_task_name.count = 1 and p_long_task_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25551       l_long_task_name_flag := 'N';
25552   end if;
25553 
25554   if p_pa_task_number.count = 1 and p_pa_task_number(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25555       l_pa_task_number_flag := 'N';
25556   end if;
25557 
25558   if p_task_description.count = 1 and p_task_description(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25559       l_task_description_flag := 'N';
25560   end if;
25561 
25562   if p_task_start_date.count = 1 and p_task_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25563       l_task_start_date_flag := 'N';
25564   end if;
25565 
25566   if p_task_completion_date.count = 1 and p_task_completion_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25567       l_task_completion_date_flag := 'N';
25568   end if;
25569 
25570   if p_pm_parent_task_reference.count = 1 and p_pm_parent_task_reference(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25571       l_pm_parent_task_ref_flag := 'N';
25572   end if;
25573 
25574   if p_pa_parent_task_id.count = 1 and p_pa_parent_task_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25575       l_pa_parent_task_id_flag := 'N';
25576   end if;
25577 
25578   if p_address_id.count = 1 and p_address_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25579       l_address_id_flag := 'N';
25580   end if;
25581 
25582   if p_carrying_out_organization_id.count = 1 and p_carrying_out_organization_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25583       l_carrying_out_org_id_flag := 'N';
25584   end if;
25585 
25586   if p_service_type_code.count = 1 and p_service_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25587       l_service_type_code_flag := 'N';
25588   end if;
25589 
25590   if p_task_manager_person_id.count = 1 and p_task_manager_person_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25591       l_task_manager_person_id_flag := 'N';
25592   end if;
25593 
25594   if p_billable_flag.count = 1 and p_billable_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25595       l_billable_flag_flag := 'N';
25596   end if;
25597 
25598   if p_chargeable_flag.count = 1 and p_chargeable_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25599       l_chargeable_flag_flag := 'N';
25600   end if;
25601 
25602   if p_ready_to_bill_flag.count = 1 and p_ready_to_bill_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25603       l_ready_to_bill_flag_flag := 'N';
25604   end if;
25605 
25606   if p_ready_to_distribute_flag.count = 1 and p_ready_to_distribute_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25607       l_ready_to_dist_flag_flag := 'N';
25608   end if;
25609 
25610   if p_limit_to_txn_controls_flag.count = 1 and p_limit_to_txn_controls_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25611       l_limit_to_txn_cnt_flag_flag := 'N';
25612   end if;
25613 
25614   if p_labor_bill_rate_org_id.count = 1 and p_labor_bill_rate_org_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25615       l_labor_bill_rate_org_id_flag := 'N';
25616   end if;
25617 
25618   if p_labor_std_bill_rate_schdl.count = 1 and p_labor_std_bill_rate_schdl(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25619       l_labor_std_bill_rate_flag := 'N';
25620   end if;
25621 
25622   if p_labor_schedule_fixed_date.count = 1 and p_labor_schedule_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25623       l_labor_schd_fixed_date_flag := 'N';
25624   end if;
25625 
25626   if p_labor_schedule_discount.count = 1 and p_labor_schedule_discount(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25627       l_labor_schd_discount_flag := 'N';
25628   end if;
25629 
25630   if p_nl_bill_rate_org_id.count = 1 and p_nl_bill_rate_org_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25631       l_nl_bill_rate_org_id_flag := 'N';
25632   end if;
25633 
25634   if p_nl_std_bill_rate_schdl.count = 1 and p_nl_std_bill_rate_schdl(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25635       l_nl_std_bill_rate_schdl_flag := 'N';
25636   end if;
25637 
25638   if p_nl_schedule_fixed_date.count = 1 and p_nl_schedule_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25639       l_nl_schedule_fixed_date_flag := 'N';
25640   end if;
25641 
25642   if p_nl_schedule_discount.count = 1 and p_nl_schedule_discount(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25643       l_nl_schedule_discount_flag := 'N';
25644   end if;
25645 
25646   if p_labor_cost_multiplier_name.count = 1 and p_labor_cost_multiplier_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25647       l_labor_cost_mult_name_flag := 'N';
25648   end if;
25649 
25650   if p_cost_ind_rate_sch_id.count = 1 and p_cost_ind_rate_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25651       l_cost_ind_rate_sch_id_flag := 'N';
25652   end if;
25653 
25654   if p_rev_ind_rate_sch_id.count = 1 and p_rev_ind_rate_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25655       l_rev_ind_rate_sch_id_flag := 'N';
25656   end if;
25657 
25658   if p_inv_ind_rate_sch_id.count = 1 and p_inv_ind_rate_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25659       l_inv_ind_rate_sch_id_flag := 'N';
25660   end if;
25661 
25662   if p_cost_ind_sch_fixed_date.count = 1 and p_cost_ind_sch_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25663       l_cost_ind_sch_fixed_date_flag := 'N';
25664   end if;
25665 
25666   if p_rev_ind_sch_fixed_date.count = 1 and p_rev_ind_sch_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25667       l_rev_ind_sch_fixed_date_flag := 'N';
25668   end if;
25669 
25670   if p_inv_ind_sch_fixed_date.count = 1 and p_inv_ind_sch_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25671       l_inv_ind_sch_fixed_date_flag := 'N';
25672   end if;
25673 
25674   if p_labor_sch_type.count = 1 and p_labor_sch_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25675       l_labor_sch_type_flag := 'N';
25676   end if;
25677 
25678   if p_nl_sch_type.count = 1 and p_nl_sch_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25679       l_nl_sch_type_flag := 'N';
25680   end if;
25681 
25682   if p_actual_start_date.count = 1 and p_actual_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25683       l_actual_start_date_flag := 'N';
25684   end if;
25685 
25686   if p_actual_finish_date.count = 1 and p_actual_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25687       l_actual_finish_date_flag := 'N';
25688   end if;
25689 
25690   if p_early_start_date.count = 1 and p_early_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25691       l_early_start_date_flag := 'N';
25692   end if;
25693 
25694   if p_early_finish_date.count = 1 and p_early_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25695       l_early_finish_date_flag := 'N';
25696   end if;
25697 
25698   if p_late_start_date.count = 1 and p_late_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25699       l_late_start_date_flag := 'N';
25700   end if;
25701 
25702   if p_late_finish_date.count = 1 and p_late_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25703       l_late_finish_date_flag := 'N';
25704   end if;
25705 
25706   if p_scheduled_start_date.count = 1 and p_scheduled_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25707       l_scheduled_start_date_flag := 'N';
25708   end if;
25709 
25710   if p_scheduled_finish_date.count = 1 and p_scheduled_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25711       l_scheduled_finish_date_flag := 'N';
25712   end if;
25713 
25714   if p_attribute_category.count = 1 and p_attribute_category(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25715       l_attribute_category_flag := 'N';
25716   end if;
25717   if p_attribute1.count = 1 and p_attribute1(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25718       l_attribute1_flag := 'N';
25719   end if;
25720   if p_attribute2.count = 1 and p_attribute2(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25721       l_attribute2_flag := 'N';
25722   end if;
25723   if p_attribute3.count = 1 and p_attribute3(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25724       l_attribute3_flag := 'N';
25725   end if;
25726   if p_attribute4.count = 1 and p_attribute4(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25727       l_attribute4_flag := 'N';
25728   end if;
25729   if p_attribute5.count = 1 and p_attribute5(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25730       l_attribute5_flag := 'N';
25731   end if;
25732   if p_attribute6.count = 1 and p_attribute6(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25733       l_attribute6_flag := 'N';
25734   end if;
25735   if p_attribute7.count = 1 and p_attribute7(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25736       l_attribute7_flag := 'N';
25737   end if;
25738   if p_attribute8.count = 1 and p_attribute8(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25739       l_attribute8_flag := 'N';
25740   end if;
25741   if p_attribute9.count = 1 and p_attribute9(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25742       l_attribute9_flag := 'N';
25743   end if;
25744   if p_attribute10.count = 1 and p_attribute10(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25745       l_attribute10_flag := 'N';
25746   end if;
25747 
25748   if p_allow_cross_charge_flag.count = 1 and p_allow_cross_charge_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25749       l_allow_cross_charge_flag_flag := 'N';
25750   end if;
25751 
25752   if p_project_rate_date.count = 1 and p_project_rate_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25753       l_project_rate_date_flag := 'N';
25754   end if;
25755 
25756   if p_project_rate_type.count = 1 and p_project_rate_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25757       l_project_rate_type_flag := 'N';
25758   end if;
25759 
25760   if p_cc_process_labor_flag.count = 1 and p_cc_process_labor_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25761       l_cc_process_labor_flag_flag := 'N';
25762   end if;
25763 
25764   if p_labor_tp_schedule_id.count = 1 and p_labor_tp_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25765       l_labor_tp_schedule_id_flag := 'N';
25766   end if;
25767 
25768   if p_labor_tp_fixed_date.count = 1 and p_labor_tp_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25769       l_labor_tp_fixed_date_flag := 'N';
25770   end if;
25771 
25772   if p_cc_process_nl_flag.count = 1 and p_cc_process_nl_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25773       l_cc_process_nl_flag_flag := 'N';
25774   end if;
25775   if p_nl_tp_schedule_id.count = 1 and p_nl_tp_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25776       l_nl_tp_schedule_id_flag := 'N';
25777   end if;
25778 
25779   if p_nl_tp_fixed_date.count = 1 and p_nl_tp_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25780       l_nl_tp_fixed_date_flag := 'N';
25781   end if;
25782 
25783   if p_receive_project_invoice_flag.count = 1 and p_receive_project_invoice_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25784       l_receive_proj_inv_flag_flag := 'N';
25785   end if;
25786 
25787   if p_work_type_id.count = 1 and p_work_type_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25788       l_work_type_id_flag := 'N';
25789   end if;
25790 
25791   if p_emp_bill_rate_schedule_id.count = 1 and p_emp_bill_rate_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25792       l_emp_bill_rate_schd_id_flag := 'N';
25793   end if;
25794   if p_job_bill_rate_schedule_id.count = 1 and p_job_bill_rate_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25795       l_job_bill_rate_schd_id_flag := 'N';
25796   end if;
25797   if p_non_lab_std_bill_rt_sch_id.count = 1 and p_non_lab_std_bill_rt_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25798       l_non_lab_std_bill_rt_sch_flag := 'N';
25799   end if;
25800 
25801   if p_taskfunc_cost_rate_type.count = 1 and p_taskfunc_cost_rate_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25802       l_taskfunc_cost_rate_type_flag := 'N';
25803   end if;
25804   if p_taskfunc_cost_rate_date.count = 1 and p_taskfunc_cost_rate_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25805       l_taskfunc_cost_rate_date_flag := 'N';
25806   end if;
25807   if p_display_sequence.count = 1 and p_display_sequence(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25808       l_display_sequence_flag := 'N';
25809   end if;
25810   if p_wbs_level.count = 1 and p_wbs_level(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25811       l_wbs_level_flag := 'N';
25812   end if;
25813 
25814   if p_obligation_start_date.count = 1 and p_obligation_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25815       l_obligation_start_date_flag := 'N';
25816   end if;
25817 
25818  if p_obligation_finish_date.count = 1 and p_obligation_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25819       l_obligation_finish_date_flag := 'N';
25820   end if;
25821 
25822   if p_baseline_start_date.count = 1 and p_baseline_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25823       l_baseline_start_date_flag := 'N';
25824   end if;
25825 
25826   if p_baseline_finish_date.count = 1 and p_baseline_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25827       l_baseline_finish_date_flag := 'N';
25828   end if;
25829 
25830  if p_closed_date.count = 1 and p_closed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25831       l_closed_date_flag := 'N';
25832   end if;
25833 
25834   if p_wq_uom_code.count = 1 and p_wq_uom_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25835       l_wq_uom_code_flag := 'N';
25836   end if;
25837 
25838   if p_wq_item_code.count = 1 and p_wq_item_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25839       l_wq_item_code_flag := 'N';
25840   end if;
25841   if p_status_code.count = 1 and p_status_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25842       l_status_code_flag := 'N';
25843   end if;
25844 
25845   if p_wf_status_code.count = 1 and p_wf_status_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25846       l_wf_status_code_flag := 'N';
25847   end if;
25848 
25849   if p_pm_source_code.count = 1 and p_pm_source_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25850       l_pm_source_code_flag := 'N';
25851   end if;
25852 
25853   if p_inc_proj_progress_flag.count = 1 and p_inc_proj_progress_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25854       l_inc_proj_progress_flag_flag := 'N';
25855   end if;
25856 
25857   if p_link_task_flag.count = 1 and p_link_task_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25858       l_link_task_flag_flag := 'N';
25859   end if;
25860 
25861 
25862   if p_calendar_id.count = 1 and p_calendar_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25863       l_calendar_id_flag := 'N';
25864   end if;
25865 
25866   if p_planned_effort.count = 1 and p_planned_effort(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25867       l_planned_effort_flag := 'N';
25868   end if;
25869 
25870   if p_planned_work_quantity.count = 1 and p_planned_work_quantity(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25871       l_planned_work_quantity_flag := 'N';
25872   end if;
25873 
25874   if p_task_type.count = 1 and p_task_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25875       l_task_type_flag := 'N';
25876   end if;
25877 
25878 --bug 2744729, 2740565
25879   if p_estimated_start_date.count = 1 and p_estimated_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25880       l_estimated_start_date_flag := 'N';
25881   end if;
25882 
25883   if p_estimated_finish_date.count = 1 and p_estimated_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25884       l_estimated_finish_date_flag := 'N';
25885   end if;
25886 
25887   if p_priority_code.count = 1 and p_priority_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25888       l_priority_code_flag := 'N';
25889   end if;
25890 
25891   if p_milestone.count = 1 and p_milestone(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25892       l_milestone_flag_flag := 'N';
25893   end if;
25894 
25895   if p_critical_flag.count = 1 and p_critical_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25896       l_critical_flag_flag := 'N';
25897   end if;
25898 --bug 2744729, 2740565
25899 
25900   if p_labor_disc_reason_code.count = 1 and p_labor_disc_reason_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25901       l_labor_disc_reason_code_flag := 'N';
25902   end if;
25903 
25904   if p_non_labor_disc_reason_code.count = 1 and p_non_labor_disc_reason_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25905       l_nl_disc_reason_code_flag := 'N';
25906   end if;
25907 
25908 --bug 2872708
25909   if p_retirement_cost_flag.count = 1 and p_retirement_cost_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25910       l_retirement_cost_flag_flag := 'N';
25911   end if;
25912 
25913   if p_cint_eligible_flag.count = 1 and p_cint_eligible_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25914       l_cint_eligible_flag_flag := 'N';
25915   end if;
25916 
25917   if p_cint_stop_date.count = 1 and p_cint_stop_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25918       l_cint_stop_date_flag := 'N';
25919   end if;
25920 --bug 2872708
25921 
25922 -- FP-M Bug # 3301192
25923   if p_pred_string.count = 1 and p_pred_string(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25924       l_pred_string_flag := 'N';
25925   end if;
25926 
25927   if p_pred_delimiter.count = 1 and p_pred_delimiter(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25928       l_pred_delimiter_flag := 'N';
25929   end if;
25930 
25931 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25932 -- FP M changes begin (venkat)
25933 
25934   if p_base_percent_comp_deriv_code.count = 1 and p_base_percent_comp_deriv_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25935       l_base_prct_comp_drv_code_flag := 'N';
25936   end if;
25937 
25938   if p_sch_tool_tsk_type_code.count = 1 and p_sch_tool_tsk_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25939       l_sch_tool_tsk_type_code_flag := 'N';
25940   end if;
25941 
25942   if p_constraint_type_code.count = 1 and p_constraint_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25943       l_constraint_type_code_flag := 'N';
25944   end if;
25945 
25946   if p_constraint_date.count = 1 and p_constraint_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25947       l_constraint_date_flag := 'N';
25948   end if;
25949 
25950   if p_free_slack.count = 1 and p_free_slack(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25951       l_free_slack_flag := 'N';
25952   end if;
25953 
25954   if p_total_slack.count = 1 and p_total_slack(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25955       l_total_slack_flag := 'N';
25956   end if;
25957 
25958   if p_effort_driven_flag.count = 1 and p_effort_driven_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25959       l_effort_driven_flag_flag := 'N';
25960   end if;
25961 
25962 
25963   if p_level_assignments_flag.count = 1 and p_level_assignments_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25964       l_level_assignments_flag_flag := 'N';
25965   end if;
25966 
25967   if p_invoice_method.count = 1 and p_invoice_method(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25968       l_invoice_method_flag := 'N';
25969   end if;
25970 
25971   if p_customer_id.count = 1 and p_customer_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25972       l_customer_id_flag := 'N';
25973   end if;
25974 
25975 
25976   if p_gen_etc_source_code.count = 1 and p_gen_etc_source_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25977       l_gen_etc_source_code_flag := 'N';
25978   end if;
25979 
25980 -- FP M changes end (venkat)
25981 
25982 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
25983 
25984   if p_ext_act_duration.count = 1 and p_ext_act_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25985       l_ext_act_duration_flag := 'N';
25986   end if;
25987 
25988   if p_ext_remain_duration.count = 1 and p_ext_remain_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25989       l_ext_remain_duration_flag := 'N';
25990   end if;
25991 
25992   if p_ext_sch_duration.count = 1 and p_ext_sch_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25993       l_ext_sch_duration_flag := 'N';
25994   end if;
25995 
25996 -- (End venkat) new params for bug #3450684 -------------------------------------------------
25997 --SMukka
25998    if p_financial_task_flag.count = 1 and p_financial_task_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25999        l_financial_task_flag := 'N';
26000    end if;
26001 
26002    if p_mapped_task_id.count = 1 and p_mapped_task_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26003        l_mapped_task_id_flag := 'N';
26004    end if;
26005 
26006    if p_mapped_task_reference.count = 1 and p_mapped_task_reference(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26007        l_mapped_task_reference_flag := 'N';
26008    end if;
26009 
26010    -- 3661788 added condition for deliverable_id
26011 
26012    if p_deliverable.count = 1 and ( p_deliverable(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR and  p_deliverable_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) then
26013        l_deliverable_flag := 'N';
26014    end if;
26015 
26016    if p_etc_effort.count = 1 and p_etc_effort(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26017        l_etc_effort_flag := 'N';
26018    end if;
26019 
26020    if p_percent_complete.count = 1 and p_percent_complete(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26021        l_percent_complete_flag := 'N';
26022    end if;
26023 
26024 --error_msg('BEFORE THE FOR LOOP ');
26025 
26026   FOR i in 1..1000 LOOP
26027 
26028     if p_pm_task_reference(i) is null then
26029 --       G_tasks_tbl_count := i;
26030 --       error_msg('INSIDE THE LOOP  '||G_tasks_tbl_count);
26031        return;
26032     end if;
26033 
26034     if l_task_name_flag = 'N' then
26035         l_task_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26036     else
26037         /*Start of changes for bug 4024659*/
26038 
26039         --l_task_name := substr(p_task_name(i),1,20);
26040 
26041          l_task_name := substrb(p_task_name(i),1,240); -- Bug 6193314 . Changed to 240 from 20
26042 
26043         /*End of changes for bug 4024659*/
26044     end if;
26045 
26046     if l_long_task_name_flag = 'N' then
26047         l_long_task_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26048     else
26049         /*Start of changes for bug 4024659*/
26050 
26051         --l_long_task_name := substr(p_long_task_name(i),1,240);
26052 
26053         l_long_task_name := substrb(p_long_task_name(i),1,240);
26054 
26055         /*End of changes for bug 4024659*/
26056     end if;
26057 
26058     if l_pa_task_number_flag = 'N' then
26059         l_pa_task_number := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26060     else
26061        l_pa_task_number := substrb(p_pa_task_number(i),1,100); -- Modified for bug 6193314
26062     end if;
26063 
26064     if l_task_description_flag = 'N' then
26065         l_task_description := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26066     else
26067         l_task_description :=  substrb(p_task_description(i),1,250); -- Fix for Bug # 4513291.
26068     end if;
26069 
26070     if l_task_start_date_flag = 'N' then
26071         l_task_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26072     else
26073         l_task_start_date := p_task_start_date(i);
26074     end if;
26075 
26076     if l_task_completion_date_flag = 'N' then
26077         l_task_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26078     else
26079         l_task_completion_date := p_task_completion_date(i);
26080     end if;
26081 
26082     if l_pm_parent_task_ref_flag = 'N' then
26083         l_pm_parent_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26084     else
26085         l_pm_parent_task_reference := p_pm_parent_task_reference(i);
26086     end if;
26087 
26088     if l_pa_parent_task_id_flag = 'N' then
26089         l_pa_parent_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26090     else
26091         l_pa_parent_task_id := p_pa_parent_task_id(i);
26092     end if;
26093 
26094     if l_address_id_flag = 'N' then
26095         l_address_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26096     else
26097         l_address_id := p_address_id(i);
26098     end if;
26099 
26100     if l_carrying_out_org_id_flag = 'N' then
26101         l_carrying_out_organization_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26102     else
26103         l_carrying_out_organization_id := p_carrying_out_organization_id(i);
26104     end if;
26105 
26106     if l_service_type_code_flag = 'N' then
26107         l_service_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26108     else
26109         l_service_type_code := p_service_type_code(i);
26110     end if;
26111 
26112     if l_task_manager_person_id_flag = 'N' then
26113         l_task_manager_person_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26114     else
26115         l_task_manager_person_id := p_task_manager_person_id(i);
26116     end if;
26117  -- Added NVL for bug 4737984
26118     if l_billable_flag_flag = 'N' then
26119         l_billable_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26120     else
26121         l_billable_flag := NVL(p_billable_flag(i),PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
26122     end if;
26123  -- Added NVL for bug 4737984
26124     if l_chargeable_flag_flag = 'N' then
26125         l_chargeable_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26126     else
26127         l_chargeable_flag := NVL(p_chargeable_flag(i),PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
26128     end if;
26129 
26130     if l_ready_to_bill_flag_flag = 'N' then
26131         l_ready_to_bill_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26132     else
26133         l_ready_to_bill_flag := p_ready_to_bill_flag(i);
26134     end if;
26135 
26136     if l_ready_to_dist_flag_flag = 'N' then
26137         l_ready_to_distribute_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26138     else
26139         l_ready_to_distribute_flag := p_ready_to_distribute_flag(i);
26140     end if;
26141 
26142     if l_limit_to_txn_cnt_flag_flag = 'N' then
26143         l_limit_to_txn_controls_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26144     else
26145         l_limit_to_txn_controls_flag := p_limit_to_txn_controls_flag(i);
26146     end if;
26147 
26148     if l_labor_bill_rate_org_id_flag = 'N' then
26149         l_labor_bill_rate_org_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26150     else
26151         l_labor_bill_rate_org_id := p_labor_bill_rate_org_id(i);
26152     end if;
26153 
26154     if l_labor_std_bill_rate_flag = 'N' then
26155         l_labor_std_bill_rate_schdl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26156     else
26157         l_labor_std_bill_rate_schdl := p_labor_std_bill_rate_schdl(i);
26158     end if;
26159 
26160     if l_labor_schd_fixed_date_flag = 'N' then
26161         l_labor_schedule_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26162     else
26163         l_labor_schedule_fixed_date := p_labor_schedule_fixed_date(i);
26164     end if;
26165 
26166     if l_labor_schd_discount_flag = 'N' then
26167         l_labor_schedule_discount := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26168     else
26169         l_labor_schedule_discount := p_labor_schedule_discount(i);
26170     end if;
26171 
26172     if l_nl_bill_rate_org_id_flag = 'N' then
26173         l_nl_bill_rate_org_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26174     else
26175         l_nl_bill_rate_org_id := p_nl_bill_rate_org_id(i);
26176     end if;
26177 
26178     if l_nl_std_bill_rate_schdl_flag = 'N' then
26179         l_nl_std_bill_rate_schdl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26180     else
26181         l_nl_std_bill_rate_schdl := p_nl_std_bill_rate_schdl(i);
26182     end if;
26183 
26184     if l_nl_schedule_fixed_date_flag = 'N' then
26185         l_nl_schedule_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26186     else
26187         l_nl_schedule_fixed_date := p_nl_schedule_fixed_date(i);
26188     end if;
26189 
26190     if l_nl_schedule_discount_flag = 'N' then
26191         l_nl_schedule_discount := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26192     else
26193         l_nl_schedule_discount := p_nl_schedule_discount(i);
26194     end if;
26195 
26196     if l_labor_cost_mult_name_flag = 'N' then
26197         l_labor_cost_multiplier_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26198     else
26199         l_labor_cost_multiplier_name := p_labor_cost_multiplier_name(i);
26200     end if;
26201 
26202     if l_cost_ind_rate_sch_id_flag = 'N' then
26203         l_cost_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26204     else
26205         l_cost_ind_rate_sch_id := p_cost_ind_rate_sch_id(i);
26206     end if;
26207 
26208     if l_rev_ind_rate_sch_id_flag = 'N' then
26209         l_rev_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26210     else
26211         l_rev_ind_rate_sch_id := p_rev_ind_rate_sch_id(i);
26212     end if;
26213 
26214     if l_inv_ind_rate_sch_id_flag = 'N' then
26215         l_inv_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26216     else
26217         l_inv_ind_rate_sch_id := p_inv_ind_rate_sch_id(i);
26218     end if;
26219 
26220     if l_cost_ind_sch_fixed_date_flag = 'N' then
26221         l_cost_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26222     else
26223         l_cost_ind_sch_fixed_date := p_cost_ind_sch_fixed_date(i);
26224     end if;
26225 
26226     if l_rev_ind_sch_fixed_date_flag = 'N' then
26227         l_rev_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26228     else
26229         l_rev_ind_sch_fixed_date := p_rev_ind_sch_fixed_date(i);
26230     end if;
26231 
26232     if l_inv_ind_sch_fixed_date_flag = 'N' then
26233         l_inv_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26234     else
26235         l_inv_ind_sch_fixed_date := p_inv_ind_sch_fixed_date(i);
26236     end if;
26237 
26238     if l_labor_sch_type_flag = 'N' then
26239         l_labor_sch_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26240     else
26241         l_labor_sch_type := p_labor_sch_type(i);
26242     end if;
26243 
26244     if l_nl_sch_type_flag = 'N' then
26245         l_nl_sch_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26246     else
26247         l_nl_sch_type := p_nl_sch_type(i);
26248     end if;
26249 
26250     if l_actual_start_date_flag = 'N' then
26251         l_actual_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26252     else
26253         l_actual_start_date := p_actual_start_date(i);
26254     end if;
26255 
26256     if l_actual_finish_date_flag = 'N' then
26257         l_actual_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26258     else
26259         l_actual_finish_date := p_actual_finish_date(i);
26260     end if;
26261 
26262     if l_early_start_date_flag = 'N' then
26263         l_early_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26264     else
26265         l_early_start_date := p_early_start_date(i);
26266     end if;
26267 
26268     if l_early_finish_date_flag = 'N' then
26269         l_early_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26270     else
26271         l_early_finish_date := p_early_finish_date(i);
26272     end if;
26273 
26274     if l_late_start_date_flag = 'N' then
26275         l_late_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26276     else
26277         l_late_start_date := p_late_start_date(i);
26278     end if;
26279 
26280     if l_late_finish_date_flag = 'N' then
26281         l_late_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26282     else
26283         l_late_finish_date := p_late_finish_date(i);
26284     end if;
26285 
26286     if l_scheduled_start_date_flag = 'N' then
26287         l_scheduled_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26288     else
26289         l_scheduled_start_date := p_scheduled_start_date(i);
26290     end if;
26291 
26292     if l_scheduled_finish_date_flag = 'N' then
26293         l_scheduled_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26294     else
26295         l_scheduled_finish_date := p_scheduled_finish_date(i);
26296     end if;
26297 
26298     if l_attribute_category_flag = 'N' then
26299         l_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26300     else
26301         l_attribute_category := p_attribute_category(i);
26302     end if;
26303 
26304     if l_attribute1_flag = 'N' then
26305         l_attribute1 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26306     else
26307         l_attribute1 := p_attribute1(i);
26308     end if;
26309 
26310     if l_attribute2_flag = 'N' then
26311         l_attribute2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26312     else
26313         l_attribute2 := p_attribute2(i);
26314     end if;
26315 
26316     if l_attribute3_flag = 'N' then
26317         l_attribute3 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26318     else
26319         l_attribute3 := p_attribute3(i);
26320     end if;
26321 
26322     if l_attribute4_flag = 'N' then
26323         l_attribute4 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26324     else
26325         l_attribute4 := p_attribute4(i);
26326     end if;
26327 
26328     if l_attribute5_flag = 'N' then
26329         l_attribute5 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26330     else
26331         l_attribute5 := p_attribute5(i);
26332     end if;
26333 
26334     if l_attribute6_flag = 'N' then
26335         l_attribute6 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26336     else
26337         l_attribute6 := p_attribute6(i);
26338     end if;
26339 
26340     if l_attribute7_flag = 'N' then
26341         l_attribute7 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26342     else
26343         l_attribute7 := p_attribute7(i);
26344     end if;
26345 
26346     if l_attribute8_flag = 'N' then
26347         l_attribute8 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26348     else
26349         l_attribute8 := p_attribute8(i);
26350     end if;
26351 
26352     if l_attribute9_flag = 'N' then
26353         l_attribute9 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26354     else
26355         l_attribute9 := p_attribute9(i);
26356     end if;
26357 
26358     if l_attribute10_flag = 'N' then
26359         l_attribute10 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26360     else
26361         l_attribute10 := p_attribute10(i);
26362     end if;
26363 
26364     if l_allow_cross_charge_flag_flag = 'N' then
26365         l_allow_cross_charge_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26366     else
26367         l_allow_cross_charge_flag := p_allow_cross_charge_flag(i);
26368     end if;
26369 
26370     if l_project_rate_date_flag = 'N' then
26371         l_project_rate_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26372     else
26373         l_project_rate_date := p_project_rate_date(i);
26374     end if;
26375 
26376     if l_project_rate_type_flag = 'N' then
26377         l_project_rate_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26378     else
26379         l_project_rate_type := p_project_rate_type(i);
26380     end if;
26381 
26382     if l_allow_cross_charge_flag_flag = 'N' then
26383         l_allow_cross_charge_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26384     else
26385         l_allow_cross_charge_flag := p_allow_cross_charge_flag(i);
26386     end if;
26387 
26388     if l_cc_process_labor_flag_flag = 'N' then
26389         l_cc_process_labor_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26390     else
26391         l_cc_process_labor_flag := p_cc_process_labor_flag(i);
26392     end if;
26393 
26394     if l_labor_tp_schedule_id_flag = 'N' then
26395         l_labor_tp_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26396     else
26397         l_labor_tp_schedule_id := p_labor_tp_schedule_id(i);
26398     end if;
26399 
26400     if l_labor_tp_fixed_date_flag = 'N' then
26401         l_labor_tp_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26402     else
26403         l_labor_tp_fixed_date := p_labor_tp_fixed_date(i);
26404     end if;
26405 
26406     if l_cc_process_nl_flag_flag = 'N' then
26407         l_cc_process_nl_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26408     else
26409         l_cc_process_nl_flag := p_cc_process_nl_flag(i);
26410     end if;
26411 
26412     if l_nl_tp_schedule_id_flag = 'N' then
26413         l_nl_tp_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26414     else
26415         l_nl_tp_schedule_id := p_nl_tp_schedule_id(i);
26416     end if;
26417 
26418     if l_nl_tp_fixed_date_flag = 'N' then
26419         l_nl_tp_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26420     else
26421         l_nl_tp_fixed_date := p_nl_tp_fixed_date(i);
26422     end if;
26423 
26424     if l_receive_proj_inv_flag_flag = 'N' then
26425         l_receive_project_invoice_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26426     else
26427         l_receive_project_invoice_flag := p_receive_project_invoice_flag(i);
26428     end if;
26429 
26430     if l_work_type_id_flag = 'N' then
26431         l_work_type_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26432     else
26433         l_work_type_id := p_work_type_id(i);
26434     end if;
26435 
26436     if l_emp_bill_rate_schd_id_flag = 'N' then
26437         l_emp_bill_rate_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26438     else
26439         l_emp_bill_rate_schedule_id := p_emp_bill_rate_schedule_id(i);
26440     end if;
26441 
26442     if l_job_bill_rate_schd_id_flag = 'N' then
26443         l_job_bill_rate_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26444     else
26445         l_job_bill_rate_schedule_id := p_job_bill_rate_schedule_id(i);
26446     end if;
26447 
26448     if l_non_lab_std_bill_rt_sch_flag = 'N' then
26449         l_non_lab_std_bill_rt_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26450     else
26451         l_non_lab_std_bill_rt_sch_id := p_non_lab_std_bill_rt_sch_id(i);
26452     end if;
26453 
26454     if l_taskfunc_cost_rate_type_flag = 'N' then
26455         l_taskfunc_cost_rate_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26456     else
26457         l_taskfunc_cost_rate_type := p_taskfunc_cost_rate_type(i);
26458     end if;
26459 
26460     if l_taskfunc_cost_rate_date_flag = 'N' then
26461         l_taskfunc_cost_rate_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26462     else
26463         l_taskfunc_cost_rate_date := p_taskfunc_cost_rate_date(i);
26464     end if;
26465 
26466     if l_display_sequence_flag = 'N' then
26467         l_display_sequence := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26468     else
26469         l_display_sequence := p_display_sequence(i);
26470     end if;
26471 
26472     if l_wbs_level_flag = 'N' then
26473         l_wbs_level := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26474     else
26475         l_wbs_level := p_wbs_level(i);
26476     end if;
26477 
26478     if l_obligation_start_date_flag = 'N' then
26479        l_obligation_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26480     else
26481        l_obligation_start_date := p_obligation_start_date(i);
26482     end if;
26483 
26484     if l_obligation_finish_date_flag = 'N' then
26485        l_obligation_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26486     else
26487        l_obligation_finish_date := p_obligation_finish_date(i);
26488     end if;
26489 
26490 
26491     if l_baseline_start_date_flag = 'N' then
26492        l_baseline_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26493     else
26494        l_baseline_start_date := p_baseline_start_date(i);
26495     end if;
26496 
26497     if l_baseline_finish_date_flag = 'N' then
26498        l_baseline_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26499     else
26500        l_baseline_finish_date := p_baseline_finish_date(i);
26501     end if;
26502 
26503     if l_closed_date_flag = 'N' then
26504        l_closed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26505     else
26506        l_closed_date := p_closed_date(i);
26507     end if;
26508 
26509     if l_wq_uom_code_flag = 'N' then
26510        l_wq_uom_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26511     else
26512        l_wq_uom_code := p_wq_uom_code(i);
26513     end if;
26514 
26515     if l_wq_item_code_flag = 'N' then
26516        l_wq_item_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26517     else
26518        l_wq_item_code := p_wq_item_code(i);
26519     end if;
26520 
26521     if l_status_code_flag = 'N' then
26522        l_status_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26523     else
26524        l_status_code := p_status_code(i);
26525     end if;
26526 
26527 
26528     if l_wf_status_code_flag = 'N' then
26529        l_wf_status_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26530     else
26531        l_wf_status_code := p_wf_status_code(i);
26532     end if;
26533 
26534     if l_pm_source_code_flag = 'N' then
26535        l_pm_source_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26536     else
26537        l_pm_source_code := p_pm_source_code(i);
26538     end if;
26539 
26540 
26541     if l_inc_proj_progress_flag_flag = 'N' then
26542        l_inc_proj_progress_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26543     else
26544        l_inc_proj_progress_flag := p_inc_proj_progress_flag(i);
26545     end if;
26546 
26547     if l_link_task_flag_flag = 'N' then
26548        l_link_task_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26549     else
26550        l_link_task_flag := p_link_task_flag(i);
26551     end if;
26552 
26553     if l_calendar_id_flag = 'N' then
26554         l_calendar_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26555     else
26556         l_calendar_id := p_calendar_id(i);
26557     end if;
26558 
26559     if l_planned_effort_flag = 'N' then
26560         l_planned_effort := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26561     else
26562         l_planned_effort := p_planned_effort(i);
26563     end if;
26564 
26565     if l_planned_work_quantity_flag = 'N' then
26566         l_planned_work_quantity := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26567     else
26568         l_planned_work_quantity := p_planned_work_quantity(i);
26569     end if;
26570 
26571 
26572     if l_task_type_flag = 'N' then
26573        l_task_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26574     else
26575        l_task_type := p_task_type(i);
26576     end if;
26577 
26578 --bug 2744729, 2740565
26579     if l_estimated_start_date_flag = 'N' then
26580        l_estimated_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26581     else
26582        l_estimated_start_date := p_estimated_start_date(i);
26583     end if;
26584 
26585     if l_estimated_finish_date_flag = 'N' then
26586        l_estimated_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26587     else
26588        l_estimated_finish_date := p_estimated_finish_date(i);
26589     end if;
26590 
26591     if l_critical_flag_flag = 'N' then
26592        l_critical_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26593     else
26594        l_critical_flag := p_critical_flag(i);
26595     end if;
26596 
26597     if l_milestone_flag_flag = 'N' then
26598        l_milestone_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26599     else
26600        l_milestone_flag := p_milestone(i);
26601     end if;
26602 
26603     if l_priority_code_flag = 'N' then
26604        l_priority_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26605     else
26606        l_priority_code := p_priority_code(i);
26607     end if;
26608 --bug 2744729, 2740565
26609 
26610     if l_labor_disc_reason_code_flag = 'N' then
26611        l_labor_disc_reason_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26612     else
26613        l_labor_disc_reason_code := p_labor_disc_reason_code(i);
26614     end if;
26615 
26616     if l_nl_disc_reason_code_flag = 'N' then
26617        l_non_labor_disc_reason_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26618     else
26619        l_non_labor_disc_reason_code := p_non_labor_disc_reason_code(i);
26620     end if;
26621 
26622 --bug 2872708
26623     if l_retirement_cost_flag_flag = 'N' then
26624        l_retirement_cost_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26625     else
26626        l_retirement_cost_flag := p_retirement_cost_flag(i);
26627     end if;
26628 
26629     if l_cint_eligible_flag_flag = 'N' then
26630        l_cint_eligible_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26631     else
26632        l_cint_eligible_flag := p_cint_eligible_flag(i);
26633     end if;
26634 
26635     if l_cint_stop_date_flag = 'N' then
26636        l_cint_stop_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26637     else
26638        l_cint_stop_date := p_cint_stop_date(i);
26639     end if;
26640 --bug 2872708
26641 
26642 -- FP-M Bug # 3301192
26643     if l_pred_string_flag = 'N' then
26644        l_pred_string := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26645     else
26646        l_pred_string := p_pred_string(i);
26647     end if;
26648 
26649     if l_pred_delimiter_flag = 'N' then
26650        l_pred_delimiter := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26651     else
26652        l_pred_delimiter := p_pred_delimiter(i);
26653     end if;
26654 
26655 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
26656 -- FP M changes begin (venkat)
26657 
26658     if l_base_prct_comp_drv_code_flag = 'N' then
26659        l_base_percent_comp_deriv_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26660     else
26661        l_base_percent_comp_deriv_code := p_base_percent_comp_deriv_code(i);
26662     end if;
26663 
26664     if l_sch_tool_tsk_type_code_flag = 'N' then
26665        l_sch_tool_tsk_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26666     else
26667        l_sch_tool_tsk_type_code := p_sch_tool_tsk_type_code(i);
26668     end if;
26669 
26670     if l_constraint_type_code_flag = 'N' then
26671        l_constraint_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26672     else
26673        l_constraint_type_code := p_constraint_type_code(i);
26674     end if;
26675 
26676 
26677     if l_constraint_date_flag = 'N' then
26678        l_constraint_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26679     else
26680        l_constraint_date := p_constraint_date(i);
26681     end if;
26682 
26683 
26684     if l_free_slack_flag = 'N' then
26685        l_free_slack := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26686     else
26687        l_free_slack := p_free_slack(i);
26688     end if;
26689 
26690 
26691     if l_total_slack_flag = 'N' then
26692        l_total_slack := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26693     else
26694        l_total_slack := p_total_slack(i);
26695     end if;
26696 
26697     if l_effort_driven_flag_flag = 'N' then
26698        l_effort_driven_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26699     else
26700        l_effort_driven_flag := p_effort_driven_flag(i);
26701     end if;
26702 
26703 
26704     if l_level_assignments_flag_flag = 'N' then
26705        l_level_assignments_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26706     else
26707        l_level_assignments_flag := p_level_assignments_flag(i);
26708     end if;
26709 
26710 
26711     if l_invoice_method_flag = 'N' then
26712        l_invoice_method := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26713     else
26714        l_invoice_method := p_invoice_method(i);
26715     end if;
26716 
26717 
26718     if l_customer_id_flag = 'N' then
26719        l_customer_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26720     else
26721        l_customer_id := p_customer_id(i);
26722     end if;
26723 
26724     if l_gen_etc_source_code_flag = 'N' then
26725        l_gen_etc_source_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26726     else
26727        l_gen_etc_source_code := p_gen_etc_source_code(i);
26728     end if;
26729 
26730 -- FP M changes end (venkat)
26731 
26732 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
26733 
26734     if l_ext_act_duration_flag = 'N' then
26735          l_ext_act_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26736     else
26737          l_ext_act_duration := p_ext_act_duration(i);
26738     end if;
26739 
26740     if l_ext_remain_duration_flag = 'N' then
26741          l_ext_remain_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26742     else
26743          l_ext_remain_duration := p_ext_remain_duration(i);
26744     end if;
26745 
26746     if l_ext_sch_duration_flag = 'N' then
26747          l_ext_sch_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26748     else
26749          l_ext_sch_duration := p_ext_sch_duration(i);
26750     end if;
26751 
26752 -- (end venkat) new params for bug #3450684 ----------------------------------------------
26753 --SMukka
26754         -- 3661788 added code for l_deliverable_id
26755 
26756         if l_deliverable_flag = 'N' then
26757                  l_deliverable := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26758                  l_deliverable_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26759         else
26760                  l_deliverable := p_deliverable(i);
26761                  l_deliverable_id := p_deliverable_id(i);
26762         end if;
26763 
26764         if l_financial_task_flag = 'N' then
26765                  l_financial_task_fl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26766         else
26767                  l_financial_task_fl := p_financial_task_flag(i);
26768         end if;
26769 
26770         if l_mapped_task_id_flag = 'N' then
26771                  l_mapped_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26772         else
26773                  l_mapped_task_id := p_mapped_task_id(i);
26774         end if;
26775 
26776         if l_mapped_task_reference_flag = 'N' then
26777                  l_mapped_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26778         else
26779                  l_mapped_task_reference := p_mapped_task_reference(i);
26780         end if;
26781 
26782 -- Progress Management Changes. Bug # 3420093.
26783 
26784   if l_etc_effort_flag = 'N' then
26785                  l_etc_effort := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26786   else
26787                  l_etc_effort := p_etc_effort(i);
26788   end if;
26789 
26790   if l_percent_complete_flag = 'N' then
26791                  l_percent_complete := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26792   else
26793                  l_percent_complete := p_percent_complete(i);
26794   end if;
26795 
26796 -- Progress Management Changes. Bug # 3420093.
26797 
26798 
26799     PA_PROJECT_PUB.load_task (
26800      p_api_version_number         => G_API_VERSION_NUMBER
26801     ,p_init_msg_list          => p_init_msg_list
26802     ,p_return_status             => l_return_status
26803     ,p_pm_task_reference         => p_pm_task_reference(i)
26804     ,p_pa_task_id               => p_pa_task_id(i)
26805     ,p_task_name               => l_task_name
26806     ,p_long_task_name               => l_long_task_name
26807     ,p_pa_task_number             => l_pa_task_number
26808     ,p_task_description            => l_task_description
26809     ,p_task_start_date             => l_task_start_date
26810     ,p_task_completion_date       => l_task_completion_date
26811     ,p_scheduled_start_date        => l_scheduled_start_date
26812     ,p_scheduled_finish_date        => l_scheduled_finish_date
26813     ,p_display_sequence             => l_display_sequence
26814     ,p_wbs_level                    => l_wbs_level
26815     ,p_pm_parent_task_reference      => l_pm_parent_task_reference
26816     ,p_pa_parent_task_id        => l_pa_parent_task_id
26817     ,p_address_id              => l_address_id
26818     ,p_carrying_out_organization_id  => l_carrying_out_organization_id
26819     ,p_service_type_code            => l_service_type_code
26820     ,p_task_manager_person_id      => l_task_manager_person_id
26821     ,p_billable_flag                => l_billable_flag
26822     ,p_chargeable_flag           => l_chargeable_flag
26823     ,p_ready_to_bill_flag        => l_ready_to_bill_flag
26824     ,p_ready_to_distribute_flag    => l_ready_to_distribute_flag
26825     ,p_limit_to_txn_controls_flag  => l_limit_to_txn_controls_flag
26826     ,p_labor_bill_rate_org_id    => l_labor_bill_rate_org_id
26827     ,p_labor_std_bill_rate_schdl  => l_labor_std_bill_rate_schdl
26828     ,p_labor_schedule_fixed_date  => l_labor_schedule_fixed_date
26829     ,p_labor_schedule_discount    => l_labor_schedule_discount
26830     ,p_nl_bill_rate_org_id        => l_nl_bill_rate_org_id
26831     ,p_nl_std_bill_rate_schdl    => l_nl_std_bill_rate_schdl
26832     ,p_nl_schedule_fixed_date    => l_nl_schedule_fixed_date
26833     ,p_nl_schedule_discount        => l_nl_schedule_discount
26834     ,p_labor_cost_multiplier_name  => l_labor_cost_multiplier_name
26835     ,p_cost_ind_rate_sch_id        => l_cost_ind_rate_sch_id
26836     ,p_rev_ind_rate_sch_id        => l_rev_ind_rate_sch_id
26837     ,p_inv_ind_rate_sch_id        => l_inv_ind_rate_sch_id
26838     ,p_cost_ind_sch_fixed_date    => l_cost_ind_sch_fixed_date
26839     ,p_rev_ind_sch_fixed_date    => l_rev_ind_sch_fixed_date
26840     ,p_inv_ind_sch_fixed_date    => l_inv_ind_sch_fixed_date
26841     ,p_labor_sch_type          => l_labor_sch_type
26842     ,p_nl_sch_type              => l_nl_sch_type
26843     ,p_actual_start_date        => l_actual_start_date
26844     ,p_actual_finish_date        => l_actual_finish_date
26845     ,p_early_start_date         => l_early_start_date
26846     ,p_early_finish_date         => l_early_finish_date
26847     ,p_late_start_date             => l_late_start_date
26848     ,p_late_finish_date         => l_late_finish_date
26849     ,p_attribute_category            => l_attribute_category
26850     ,p_attribute1              => l_attribute1
26851     ,p_attribute2              => l_attribute2
26852     ,p_attribute3              => l_attribute3
26853     ,p_attribute4              => l_attribute4
26854     ,p_attribute5              => l_attribute5
26855     ,p_attribute6              => l_attribute6
26856     ,p_attribute7              => l_attribute7
26857     ,p_attribute8              => l_attribute8
26858     ,p_attribute9              => l_attribute9
26859     ,p_attribute10              => l_attribute10
26860     ,p_allow_cross_charge_flag    => l_allow_cross_charge_flag
26861     ,p_project_rate_date        => l_project_rate_date
26862     ,p_project_rate_type        => l_project_rate_type
26863     ,p_cc_process_labor_flag    => l_cc_process_labor_flag
26864     ,p_labor_tp_schedule_id        => l_labor_tp_schedule_id
26865     ,p_labor_tp_fixed_date        => l_labor_tp_fixed_date
26866     ,p_cc_process_nl_flag        => l_cc_process_nl_flag
26867     ,p_nl_tp_schedule_id        => l_nl_tp_schedule_id
26868     ,p_nl_tp_fixed_date          => l_nl_tp_fixed_date
26869     ,p_receive_project_invoice_flag  => l_receive_project_invoice_flag
26870     ,p_work_type_id              => l_work_type_id
26871     ,p_emp_bill_rate_schedule_id  => l_emp_bill_rate_schedule_id
26872     ,p_job_bill_rate_schedule_id  => l_job_bill_rate_schedule_id
26873     ,p_non_lab_std_bill_rt_sch_id  => l_non_lab_std_bill_rt_sch_id
26874     ,p_taskfunc_cost_rate_type    => l_taskfunc_cost_rate_type
26875     ,p_taskfunc_cost_rate_date    => l_taskfunc_cost_rate_date
26876     ,P_OBLIGATION_START_DATE    => l_obligation_start_date
26877     ,P_OBLIGATION_FINISH_DATE   => l_obligation_finish_date
26878     ,P_BASELINE_START_DATE      => l_baseline_start_date
26879     ,P_BASELINE_FINISH_DATE     => l_baseline_finish_date
26880     ,P_CLOSED_DATE              => l_closed_date
26881     ,P_WQ_UOM_CODE              => l_wq_uom_code
26882     ,P_WQ_ITEM_CODE             => l_wq_item_code
26883     ,P_STATUS_CODE              => l_status_code
26884     ,P_WF_STATUS_CODE           => l_wf_status_code
26885     ,P_PM_SOURCE_CODE           => l_pm_source_code
26886     ,P_INC_PROJ_PROGRESS_FLAG   => l_inc_proj_progress_flag
26887     ,P_LINK_TASK_FLAG           => l_link_task_flag
26888     ,P_CALENDAR_ID              => l_calendar_id
26889     ,P_PLANNED_EFFORT           => l_planned_effort
26890     ,P_PLANNED_WORK_QUANTITY    => l_planned_work_quantity
26891     ,P_TASK_TYPE                => l_task_type
26892 --bug 2744729, 2740565
26893     ,P_estimated_start_date     => l_estimated_start_date
26894     ,P_estimated_finish_date    => l_estimated_start_date
26895     ,P_milestone_flag           => l_milestone_flag
26896     ,P_critical_flag            => l_critical_flag
26897     ,P_priority_code            => l_priority_code
26898 --bug 2744729, 2740565
26899     ,P_labor_disc_reason_code                => l_labor_disc_reason_code
26900     ,P_non_labor_disc_reason_code            => l_non_labor_disc_reason_code
26901 --bug 2872708
26902     ,p_retirement_cost_flag     => l_retirement_cost_flag
26903     ,p_cint_eligible_flag       => l_cint_eligible_flag
26904     ,p_cint_stop_date           => l_cint_stop_date
26905 --bug 2872708
26906 -- FP-M Bug # 3301192
26907     ,p_pred_string              => l_pred_string
26908     ,p_pred_delimiter           => l_pred_delimiter
26909 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
26910 -- FP M changes begin (venkat)
26911     ,p_base_percent_comp_deriv_code =>  l_base_percent_comp_deriv_code
26912     ,p_sch_tool_tsk_type_code       =>  l_sch_tool_tsk_type_code
26913     ,p_constraint_type_code     =>  l_constraint_type_code
26914     ,p_constraint_date          =>  l_constraint_date
26915     ,p_free_slack           =>  l_free_slack
26916     ,p_total_slack          =>  l_total_slack
26917     ,p_effort_driven_flag       =>  l_effort_driven_flag
26918     ,p_level_assignments_flag       =>  l_level_assignments_flag
26919     ,p_invoice_method           =>  l_invoice_method
26920     ,p_customer_id          =>  l_customer_id
26921     ,p_gen_etc_source_code      =>  l_gen_etc_source_code
26922 -- FP M changes end (venkat)
26923    --SMukka
26924     ,p_financial_task_flag        =>     l_financial_task_fl
26925     ,p_mapped_task_id             =>     l_mapped_task_id
26926     ,p_mapped_task_reference      =>     l_mapped_task_reference
26927     ,p_deliverable                =>     l_deliverable
26928     ,p_deliverable_id             =>     l_deliverable_id  -- 3661788 Passing added deliverable_id to load_task
26929 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
26930     ,p_ext_act_duration         => l_ext_act_duration
26931     ,p_ext_remain_duration      => l_ext_remain_duration
26932     ,p_ext_sch_duration         => l_ext_sch_duration
26933 -- (end venkat) new params for bug #3450684 ----------------------------------------------
26934 
26935 -- Progress Management Changes. Bug # 3420093.
26936   ,p_etc_effort                 =>      l_etc_effort
26937   ,p_percent_complete           =>      l_percent_complete
26938 -- Progress Management Changes. Bug # 3420093.
26939 
26940     );
26941 
26942     l_stage := '1.4';
26943 
26944     if (l_return_status <> 'S') then
26945        p_return_status := l_return_status;
26946        return;
26947     end if;
26948 
26949   END LOOP;
26950 
26951   p_return_status := l_return_status;
26952 
26953 -- 4537865
26954 EXCEPTION
26955 
26956         WHEN OTHERS THEN
26957         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
26958 
26959         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
26960         THEN
26961                FND_MSG_PUB.add_exc_msg
26962                ( p_pkg_name            => G_PKG_NAME
26963                , p_procedure_name      => 'load_tasks');
26964         END IF;
26965 
26966 END load_tasks;
26967 
26968 
26969 PROCEDURE fetch_tasks
26970 ( p_api_version_number    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
26971  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
26972  ,p_return_status    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
26973  ,p_task_index      IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
26974  ,p_pa_task_id      OUT  NOCOPY PA_NUM_1000_NUM  /*Added the nocopy check for 4537865 */
26975  ,p_task_version_id             OUT  NOCOPY   PA_NUM_1000_NUM  /*Added the nocopy check for 4537865 */
26976  ,p_pm_task_reference    OUT NOCOPY PA_VC_1000_150  /*Added the nocopy check for 4537865 */
26977  ,p_task_return_status    OUT  NOCOPY PA_VC_1000_150  /*Added the nocopy check for 4537865 */
26978 )
26979 IS
26980 
26981 l_return_status                     VARCHAR2(1):= 'S';
26982 l_pm_task_reference                 PA_VC_1000_150 := PA_VC_1000_150(1);
26983 l_task_return_status                PA_VC_1000_150 := PA_VC_1000_150(1);
26984 l_pa_task_id                        PA_NUM_1000_NUM := PA_NUM_1000_NUM(1);
26985 --project structrues
26986 l_task_version_id                   PA_NUM_1000_NUM := PA_NUM_1000_NUM(1);
26987 --project structures
26988 BEGIN
26989 
26990     l_pm_task_reference.extend(1000);
26991     l_task_return_status.extend(1000);
26992     l_pa_task_id.extend(1000);
26993 --project structrues
26994     l_task_version_id.extend(1000);
26995 --project structrues
26996 
26997     FOR i in 1..1000 LOOP
26998 
26999        if p_task_index(i) is null or p_task_index(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  then
27000           p_return_status := l_return_status;
27001     p_pm_task_reference := l_pm_task_reference;
27002     p_task_return_status := l_task_return_status;
27003     p_pa_task_id := l_pa_task_id;
27004           return;
27005        end if;
27006 
27007        fetch_task( p_api_version_number  => p_api_version_number
27008       ,p_init_msg_list => p_init_msg_list
27009       ,p_return_status => l_return_status
27010       ,p_task_index => p_task_index(i)
27011       ,p_pa_task_id => l_pa_task_id(i)
27012       ,p_pm_task_reference => l_pm_task_reference(i)
27013        ,p_task_return_status  => l_task_return_status(i));
27014 
27015     if (l_return_status <> 'S') then
27016           p_return_status := l_return_status;
27017     p_pm_task_reference := l_pm_task_reference;
27018     p_task_return_status := l_task_return_status;
27019     p_pa_task_id := l_pa_task_id;
27020           return;
27021      end if;
27022 
27023 
27024        fetch_task_version( p_api_version_number  => p_api_version_number
27025       ,p_init_msg_list => p_init_msg_list
27026       ,p_return_status => l_return_status
27027       ,p_task_index => p_task_index(i)
27028       ,p_task_version_id => l_task_version_id(i)
27029        ,p_task_return_status  => l_task_return_status(i));
27030 
27031     if (l_return_status <> 'S') then
27032           p_return_status := l_return_status;
27033     p_pm_task_reference := l_pm_task_reference;
27034     p_task_return_status := l_task_return_status;
27035     p_pa_task_id := l_pa_task_id;
27036           return;
27037      end if;
27038 
27039     END LOOP;
27040 
27041     p_return_status := l_return_status;
27042     p_pm_task_reference := l_pm_task_reference;
27043     p_task_return_status := l_task_return_status;
27044     p_pa_task_id := l_pa_task_id;
27045 
27046 --project structrues
27047     p_task_version_id := l_task_version_id;
27048 --project structrues
27049 
27050 -- 4537865
27051 EXCEPTION
27052 
27053         WHEN OTHERS THEN
27054         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27055 
27056     p_pm_task_reference := NULL ;
27057     p_pa_task_id := NULL ;
27058     p_task_version_id := NULL ;
27059 
27060         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27061         THEN
27062                FND_MSG_PUB.add_exc_msg
27063                ( p_pkg_name            => G_PKG_NAME
27064                , p_procedure_name      => 'fetch_tasks');
27065         END IF;
27066 
27067 END fetch_tasks;
27068 -- <EA>
27069 --------------------------------------------------------------------------------
27070 --Name:        LOAD_EXTENSIBLE_ATTRIBUTE
27071 --Type:        Procedure
27072 --Description: This procedure can be used to move an extensible attribute value
27073 --            from the client side to a PL/SQL table on the server side,
27074 --             where it will be used by a LOAD/EXECUTE/FETCH cycle.
27075 --
27076 --Called subprograms:
27077 --
27078 --History:
27079 --    16-APR-2003    zahid.khan  Initial creation
27080 --
27081 
27082 PROCEDURE load_extensible_attribute(P_API_VERSION_NUMBER     IN     NUMBER   := 1.0,
27083                                     P_INIT_MSG_LIST          IN     VARCHAR2 := FND_API.G_FALSE,
27084                                     P_COMMIT                 IN     VARCHAR2 := FND_API.G_FALSE,
27085                                     X_RETURN_STATUS             OUT NOCOPY VARCHAR2,  /*Added the nocopy check for 4537865 */
27086                                     P_TRANSACTION_TYPE       IN     VARCHAR2 := PA_PROJECT_PUB.G_SYNC_MODE,
27087                         P_TASK_ID                IN     NUMBER   := NULL,
27088                                     P_TASK_REFERENCE         IN     VARCHAR2 := NULL,
27089                                     P_ATTR_GRP_INTERNAL_NAME IN     VARCHAR2 := NULL,
27090                                     P_ATTR_GRP_ID            IN     NUMBER   := NULL,
27091                                     P_ATTR_GRP_ROW_INDEX     IN     NUMBER   := NULL,
27092                                     P_ATTR_INTERNAL_NAME     IN     VARCHAR2 := NULL,
27093                                     P_ATTR_VALUE_STR         IN     VARCHAR2 := NULL,
27094                                     P_ATTR_VALUE_NUM         IN     NUMBER   := NULL,
27095                                     P_ATTR_VALUE_NUM_UOM     IN     VARCHAR2 := NULL,
27096                                     P_ATTR_VALUE_DATE        IN     DATE     := NULL,
27097                                     P_ATTR_DISP_VALUE        IN     VARCHAR2 := NULL
27098                                     )
27099 
27100 IS
27101 
27102    l_api_name           CONSTANT    VARCHAR2(30)        := 'Load_Extensible_Attribute';
27103    i                        NUMBER;
27104 
27105 BEGIN
27106 --  Standard begin of API savepoint
27107 
27108     SAVEPOINT load_extensible_attribute_pub;
27109 
27110 --  Standard call to check for call compatibility.
27111     IF NOT FND_API.Compatible_API_Call (  g_api_version_number  ,
27112                                                 p_api_version_number    ,
27113                                                     l_api_name,
27114                                                     G_PKG_NAME)
27115     THEN
27116       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27117     END IF;
27118 
27119 --  Initialize the message table if requested.
27120     IF FND_API.TO_BOOLEAN( p_init_msg_list )
27121     THEN
27122       FND_MSG_PUB.initialize;
27123     END IF;
27124 
27125 --  assign a value to the global counter for this table
27126    G_ext_attr_tbl_count   := G_ext_attr_tbl_count + 1;
27127 
27128    G_ext_attr_in_tbl(G_ext_attr_tbl_count).PROJ_ELEMENT_ID     := P_TASK_ID;
27129    G_ext_attr_in_tbl(G_ext_attr_tbl_count).PROJ_ELEMENT_REFERENCE := P_TASK_REFERENCE;
27130    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ROW_IDENTIFIER      := P_ATTR_GRP_ROW_INDEX;
27131    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_GROUP_INT_NAME := P_ATTR_GRP_INTERNAL_NAME;
27132    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_GROUP_ID       := P_ATTR_GRP_ID;
27133    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_INT_NAME       := P_ATTR_INTERNAL_NAME;
27134    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_STR      := P_ATTR_VALUE_STR;
27135    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_NUM      := P_ATTR_VALUE_NUM;
27136    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_DATE     := P_ATTR_VALUE_DATE;
27137    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_DISP_VALUE     := P_ATTR_DISP_VALUE;
27138    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_UNIT_OF_MEASURE:= P_ATTR_VALUE_NUM_UOM;
27139    G_ext_attr_in_tbl(G_ext_attr_tbl_count).TRANSACTION_TYPE    := P_TRANSACTION_TYPE;
27140 
27141 --  Set API return status to success
27142    x_return_status := FND_API.G_RET_STS_SUCCESS;
27143 
27144 EXCEPTION
27145 
27146     WHEN FND_API.G_EXC_ERROR
27147     THEN
27148     ROLLBACK TO load_extensible_attribute_pub;
27149 
27150     x_return_status := FND_API.G_RET_STS_ERROR;
27151 
27152     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27153     THEN
27154     ROLLBACK TO load_extensible_attribute_pub;
27155 
27156     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27157 
27158     WHEN OTHERS THEN
27159     ROLLBACK TO load_extensible_attribute_pub;
27160 
27161     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27162 
27163     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27164     THEN
27165         FND_MSG_PUB.add_exc_msg
27166                 ( p_pkg_name        => G_PKG_NAME
27167                 , p_procedure_name  => l_api_name   );
27168 
27169     END IF;
27170 
27171 END load_extensible_attribute;
27172 
27173 --------------------------------------------------------------------------------
27174 --Name:        LOAD_EXTENSIBLE_ATTRIBUTES
27175 --Type:        Procedure
27176 --Description: This procedure can be used to bulk-load extensible attribute
27177 --             information into the global pl/sql table in batch of thousand
27178 --             records.
27179 --
27180 --Called subprograms: LOAD_EXTENSIBLE_ATTRIBUTE
27181 --
27182 --History:
27183 --    22-APR-2003    zahid.khan  Initial creation
27184 --
27185 PROCEDURE load_extensible_attributes(P_API_VERSION_NUMBER     IN     NUMBER,
27186                                      P_INIT_MSG_LIST          IN     VARCHAR2          := FND_API.G_FALSE,
27187                                      P_COMMIT                 IN     VARCHAR2          := FND_API.G_FALSE,
27188                                      X_RETURN_STATUS          OUT NOCOPY   VARCHAR2,  /*Added the nocopy check for 4537865 */
27189                                      P_TRANSACTION_TYPE       IN     PA_VC_1000_10     := PA_VC_1000_10(PA_PROJECT_PUB.G_SYNC_MODE),
27190                                      P_TASK_ID        IN     PA_NUM_1000_NUM   := PA_NUM_1000_NUM(NULL),
27191                                      P_TASK_REFERENCE IN     PA_VC_1000_150    := PA_VC_1000_150(NULL),
27192                                      P_ATTR_GRP_INTERNAL_NAME    IN     PA_VC_1000_30     := PA_VC_1000_30(NULL),
27193                                      P_ATTR_GRP_ID          IN     PA_NUM_1000_NUM   := PA_NUM_1000_NUM(NULL),
27194                                      P_ATTR_GRP_ROW_INDEX          IN     PA_NUM_1000_NUM   := PA_NUM_1000_NUM(NULL),
27195                                      P_ATTR_INTERNAL_NAME          IN     PA_VC_1000_30     := PA_VC_1000_30(NULL),
27196                                      P_ATTR_VALUE_STR         IN     PA_VC_1000_150    := PA_VC_1000_150(NULL),
27197                                      P_ATTR_VALUE_NUM         IN     PA_NUM_1000_NUM   := PA_NUM_1000_NUM(NULL),
27198                                      P_ATTR_VALUE_NUM_UOM   IN     PA_VC_1000_30     := PA_VC_1000_30(NULL),
27199                                      P_ATTR_VALUE_DATE        IN     PA_DATE_1000_DATE := PA_DATE_1000_DATE(NULL),
27200                                      P_ATTR_DISP_VALUE        IN     PA_VC_1000_150    := PA_VC_1000_150(NULL)
27201                          )
27202 IS
27203    l_api_name           CONSTANT    VARCHAR2(30)        := 'Load_Extensible_Attributes';
27204    l_return_status VARCHAR(1) := FND_API.G_RET_STS_SUCCESS;
27205 
27206    l_proj_element_id_flag         BOOLEAN := (P_TASK_ID.count = 1 and P_TASK_ID(1) = NULL);
27207    l_proj_element_reference_flag BOOLEAN := (P_TASK_REFERENCE.count = 1 and P_TASK_REFERENCE(1) = NULL);
27208    l_row_identifier_flag          BOOLEAN := (P_ATTR_GRP_ROW_INDEX.count = 1 and P_ATTR_GRP_ROW_INDEX(1) = NULL);
27209    l_attr_group_int_name_flag    BOOLEAN := (P_ATTR_GRP_INTERNAL_NAME.count = 1 and P_ATTR_GRP_INTERNAL_NAME(1) = NULL);
27210    l_attr_group_id_flag          BOOLEAN := (P_ATTR_GRP_ID.count = 1 and P_ATTR_GRP_ID(1) = NULL);
27211    l_attr_int_name_flag          BOOLEAN := (P_ATTR_INTERNAL_NAME.count = 1 and P_ATTR_INTERNAL_NAME(1) = NULL);
27212    l_attr_value_str_flag          BOOLEAN := (P_ATTR_VALUE_STR.count = 1 and P_ATTR_VALUE_STR(1) = NULL);
27213    l_attr_value_num_flag          BOOLEAN := (P_ATTR_VALUE_NUM.count = 1 and P_ATTR_VALUE_NUM(1) = NULL);
27214    l_attr_value_date_flag         BOOLEAN := (P_ATTR_VALUE_DATE.count = 1 and P_ATTR_VALUE_DATE(1) = NULL);
27215    l_attr_disp_value_flag         BOOLEAN := (P_ATTR_DISP_VALUE.count = 1 and P_ATTR_DISP_VALUE(1) = NULL);
27216    l_attr_unit_of_measure_flag   BOOLEAN := (P_ATTR_VALUE_NUM_UOM.count = 1 and P_ATTR_VALUE_NUM_UOM(1) = NULL);
27217    l_transaction_type_flag     BOOLEAN := (P_TRANSACTION_TYPE.count = 1 and P_TRANSACTION_TYPE(1) = PA_PROJECT_PUB.G_SYNC_MODE);
27218 
27219    l_proj_element_id              NUMBER;
27220    l_proj_element_reference      VARCHAR2(30);
27221    l_attr_group_int_name         VARCHAR2(30);
27222    l_attr_group_id               NUMBER;
27223    l_attr_int_name               VARCHAR2(30);
27224    l_attr_value_str               VARCHAR2(150);
27225    l_attr_value_num               NUMBER;
27226    l_attr_value_date              DATE;
27227    l_attr_disp_value             VARCHAR2(150);
27228    l_attr_unit_of_measure        VARCHAR2(30);
27229    l_user_row_identifier         VARCHAR2(150);
27230    l_transaction_type          VARCHAR2(30);
27231 BEGIN
27232    -- initialize message stack, if needed
27233     IF  FND_API.to_boolean(p_init_msg_list)
27234     THEN
27235         FND_MSG_PUB.initialize;
27236     END IF;
27237 
27238    -- There are two ways to load the global pl/sql table:
27239    -- 1. Call Load_Extensible_Attribute
27240    -- 2. Directly populate the table
27241    -- We will use approach 1.
27242    FOR i in 1..1000 LOOP
27243       -- increment global table record counter
27244       G_ext_attr_tbl_count  := G_ext_attr_tbl_count + 1;
27245 
27246       -- if Row Identifier is NULL, that means there were
27247       -- fewer than 1000 rows and we're done processing
27248       IF(P_ATTR_GRP_ROW_INDEX(i) IS NULL) THEN
27249          return;
27250       END IF;
27251 
27252       -- default parameter values if they were not bound
27253       -- by caller. This needs to be done because
27254       -- there is no way to default the entire
27255       -- array contents to NULL via the procedure
27256       -- declaration. For e.g., using the syntax
27257       -- 'P_ATTR_UNIT_OF_MEASURE  IN PA_VC_1000_30 := PA_VC_1000_30(NULL)'
27258       -- only sets the first array cell to the
27259       -- value NULL
27260       if (l_proj_element_id_flag <> TRUE) then
27261          l_proj_element_id := P_TASK_ID(i);
27262       else
27263          l_proj_element_id := NULL;
27264       end if;
27265 
27266       if (l_proj_element_reference_flag <> TRUE) then
27267          l_proj_element_reference := P_TASK_REFERENCE(i);
27268       else
27269          l_proj_element_reference := NULL;
27270       end if;
27271 
27272       if (l_attr_group_int_name_flag <> TRUE) then
27273          l_attr_group_int_name := P_ATTR_GRP_INTERNAL_NAME(i);
27274       else
27275          l_attr_group_int_name := NULL;
27276       end if;
27277 
27278       if (l_attr_group_id_flag <> TRUE) then
27279          l_attr_group_id := P_ATTR_GRP_ID(i);
27280       else
27281          l_attr_group_id := NULL;
27282       end if;
27283 
27284       if (l_attr_int_name_flag <> TRUE) then
27285          l_attr_int_name := P_ATTR_INTERNAL_NAME(i);
27286       else
27287          l_attr_int_name := NULL;
27288       end if;
27289 
27290       if (l_attr_value_str_flag <> TRUE) then
27291          l_attr_value_str := P_ATTR_VALUE_STR(i);
27292       else
27293          l_attr_value_str := NULL;
27294       end if;
27295 
27296       if (l_attr_value_num_flag <> TRUE) then
27297          l_attr_value_num := P_ATTR_VALUE_NUM(i);
27298       else
27299          l_attr_value_num := NULL;
27300       end if;
27301 
27302       if (l_attr_value_date_flag <> TRUE) then
27303          l_attr_value_date := P_ATTR_VALUE_DATE(i);
27304       else
27305          l_attr_value_date := NULL;
27306       end if;
27307 
27308       if (l_attr_disp_value_flag <> TRUE) then
27309          l_attr_disp_value := P_ATTR_DISP_VALUE(i);
27310       else
27311          l_attr_disp_value := NULL;
27312       end if;
27313 
27314       if (l_attr_unit_of_measure_flag <> TRUE) then
27315          l_attr_unit_of_measure := P_ATTR_VALUE_NUM_UOM(i);
27316       else
27317          l_attr_unit_of_measure := NULL;
27318       end if;
27319 
27320       if (l_transaction_type_flag <> TRUE) then
27321          l_transaction_type := P_TRANSACTION_TYPE(i);
27322       else
27323          l_transaction_type := PA_PROJECT_PUB.G_SYNC_MODE;
27324       end if;
27325 
27326       -- call unit api
27327       load_extensible_attribute
27328       (  P_INIT_MSG_LIST        => P_INIT_MSG_LIST,
27329          P_COMMIT                   => FND_API.G_FALSE,--bug 3766967
27330          X_RETURN_STATUS          => l_return_status,
27331          P_TASK_ID            => l_proj_element_id,
27332          P_TASK_REFERENCE       => l_proj_element_reference,
27333          P_ATTR_GRP_ROW_INDEX         => P_ATTR_GRP_ROW_INDEX(i),
27334          P_ATTR_GRP_INTERNAL_NAME   => l_attr_group_int_name,
27335          P_ATTR_GRP_ID            => l_attr_group_id,
27336          P_ATTR_INTERNAL_NAME         => l_attr_int_name,
27337          P_ATTR_VALUE_STR         => l_attr_value_str,
27338          P_ATTR_VALUE_NUM         => l_attr_value_num,
27339          P_ATTR_VALUE_DATE        => l_attr_value_date,
27340          P_ATTR_DISP_VALUE        => l_attr_disp_value,
27341          P_ATTR_VALUE_NUM_UOM       => l_attr_unit_of_measure,
27342          P_TRANSACTION_TYPE     => l_transaction_type
27343       );
27344 
27345     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
27346         THEN
27347             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27348         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
27349         THEN
27350             RAISE FND_API.G_EXC_ERROR;
27351         END IF;
27352 
27353    END LOOP;
27354 
27355    X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
27356     EXCEPTION
27357         WHEN FND_API.G_EXC_ERROR THEN
27358             x_return_status := FND_API.G_RET_STS_ERROR;
27359         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
27360             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27361         WHEN OTHERS THEN
27362             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27363             IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
27364                 FND_MSG_PUB.Add_Exc_Msg
27365                 (   G_PKG_NAME
27366                     , l_api_name
27367                 );
27368             END IF;
27369 END load_extensible_attributes;
27370 -- </EA>
27371 
27372 --------------------------------------------------------------------------------
27373 --Project Structures
27374 
27375 PROCEDURE load_structure
27376 ( p_api_version_number     IN  NUMBER
27377  ,p_init_msg_list           IN  VARCHAR2         := FND_API.G_FALSE
27378  ,p_return_status           OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
27379  ,p_pa_project_id           IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27380  ,p_structure_type             IN    VARCHAR2          := 'FINANCIAL'
27381  ,p_structure_version_name     IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27382  ,P_structure_version_id       IN    NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27383  ,P_DESCRIPTION                IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27384  /*,P_VERSION_NUMBER             IN    NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27385  ,P_NAME                       IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27386  ,P_CURRENT_FLAG               IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27387  ,P_ORIGINAL_FLAG              IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27388  ,P_LATEST_EFF_PUBLISHED_FLAG IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27389  ,P_EFFECTIVE_DATE             IN    DATE              := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27390  ,P_PUBLISHED_DATE             IN    DATE              := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27391  ,P_PUBLISHED_BY_PERSON_ID     IN    NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27392  ,P_CURRENT_BASELINE_DATE      IN    DATE              := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27393  ,P_CURRENT_BASELINE_PERSON_ID   IN    NUMBER         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27394  ,P_ORIGINAL_BASELINE_DATE       IN    DATE           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27395  ,P_ORIGINAL_BASELINE_PERSON_ID  IN    NUMBER         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27396  ,P_LOCK_STATUS_CODE             IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27397  ,P_LOCKED_BY_PERSON_ID          IN    NUMBER         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27398  ,P_LOCKED_DATE                  IN    DATE           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27399  ,P_STATUS_CODE                  IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27400  ,P_WF_STATUS_CODE               IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27401  ,P_PM_SOURCE_CODE               IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27402  ,P_PM_SOURCE_REFERENCE          IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27403  ,P_CHANGE_REASON_CODE           IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27404 */
27405 ) IS
27406 
27407    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_structure';
27408 
27409 
27410 BEGIN
27411 
27412 --  Standard begin of API savepoint
27413 
27414     SAVEPOINT load_structure_pub;
27415 
27416 --  Standard call to check for call compatibility.
27417 
27418     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
27419                                p_api_version_number  ,
27420                                l_api_name         ,
27421                                G_PKG_NAME         )
27422     THEN
27423 
27424   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27425 
27426     END IF;
27427 
27428 --  Initialize the message table if requested.
27429 
27430     IF FND_API.TO_BOOLEAN( p_init_msg_list )
27431     THEN
27432 
27433   FND_MSG_PUB.initialize;
27434 
27435     END IF;
27436 
27437 --  Set API return status to success
27438 
27439     p_return_status := FND_API.G_RET_STS_SUCCESS;
27440 
27441 --  Bug 2978114.
27442 --  Validate the structure type. It should be FINANCIAL / WORKPLAN /DELIVERABLE.
27443 --  Throw an error otherwise.
27444 
27445     IF nvl(p_structure_type,'-99') not in ('FINANCIAL','WORKPLAN', 'DELIVERABLE') THEN
27446           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
27447                                ,p_msg_name       => 'PA_PS_INV_STR_TYPE');
27448 
27449           RAISE FND_API.G_EXC_ERROR;
27450     END IF;
27451 
27452 -- assign incoming parameters to the fields of global structure record
27453 
27454     G_structure_in_rec.pa_project_id      := p_pa_project_id;
27455     G_structure_in_rec.structure_type                 := p_structure_type;
27456     G_structure_in_rec.structure_version_name         := p_structure_version_name;
27457     G_structure_in_rec.structure_version_id           := p_structure_version_id;
27458     G_structure_in_rec.DESCRIPTION                    := p_DESCRIPTION;
27459     /*G_structure_in_rec.VERSION_NUMBER                 := p_VERSION_NUMBER;
27460     G_structure_in_rec.NAME                           := p_NAME;
27461     G_structure_in_rec.CURRENT_FLAG                   := p_CURRENT_FLAG;
27462     G_structure_in_rec.ORIGINAL_FLAG                  := p_ORIGINAL_FLAG;
27463     G_structure_in_rec.LATEST_EFF_PUBLISHED_FLAG      := p_LATEST_EFF_PUBLISHED_FLAG;
27464     G_structure_in_rec.EFFECTIVE_DATE                 := p_EFFECTIVE_DATE;
27465     G_structure_in_rec.PUBLISHED_DATE                 := p_PUBLISHED_DATE;
27466     G_structure_in_rec.PUBLISHED_BY_PERSON_ID         := p_PUBLISHED_BY_PERSON_ID;
27467     G_structure_in_rec.CURRENT_BASELINE_DATE          := p_CURRENT_BASELINE_DATE;
27468     G_structure_in_rec.CURRENT_BASELINE_PERSON_ID     := p_CURRENT_BASELINE_PERSON_ID;
27469     G_structure_in_rec.ORIGINAL_BASELINE_DATE         := p_ORIGINAL_BASELINE_DATE;
27470     G_structure_in_rec.ORIGINAL_BASELINE_PERSON_ID    := p_ORIGINAL_BASELINE_PERSON_ID;
27471     G_structure_in_rec.LOCK_STATUS_CODE               := p_LOCK_STATUS_CODE;
27472     G_structure_in_rec.LOCKED_BY_PERSON_ID            := p_LOCKED_BY_PERSON_ID;
27473     G_structure_in_rec.LOCKED_DATE                    := p_LOCKED_DATE;
27474     G_structure_in_rec.STATUS_CODE                    := p_STATUS_CODE;
27475     G_structure_in_rec.WF_STATUS_CODE                 := p_WF_STATUS_CODE;
27476     G_structure_in_rec.PM_SOURCE_CODE                 := p_PM_SOURCE_CODE;
27477     G_structure_in_rec.PM_SOURCE_REFERENCE            := p_PM_SOURCE_REFERENCE;
27478     G_structure_in_rec.CHANGE_REASON_CODE             := p_CHANGE_REASON_CODE;
27479     */
27480 
27481 EXCEPTION
27482 
27483   WHEN FND_API.G_EXC_ERROR
27484   THEN
27485   ROLLBACK TO load_structure_pub;
27486 
27487   p_return_status := FND_API.G_RET_STS_ERROR;
27488 
27489 
27490   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27491   THEN
27492   ROLLBACK TO load_structure_pub;
27493 
27494   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27495 
27496 
27497   WHEN OTHERS THEN
27498   ROLLBACK TO load_structure_pub;
27499 
27500   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27501 
27502   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27503   THEN
27504     FND_MSG_PUB.add_exc_msg
27505         ( p_pkg_name    => G_PKG_NAME
27506         , p_procedure_name  => l_api_name  );
27507 
27508   END IF;
27509 
27510 
27511 END load_structure;
27512 
27513 PROCEDURE change_structure_status
27514 (p_api_version_number           IN      NUMBER          := 1.0 -- for bug# 3802319
27515 , p_init_msg_list               IN      VARCHAR2        := 'F'
27516 , p_commit                      IN      VARCHAR2        := 'F'
27517 , p_return_status               OUT NOCOPY    VARCHAR2  /*Added the nocopy check for 4537865 */
27518 , p_msg_count                   OUT NOCOPY    NUMBER  /*Added the nocopy check for 4537865 */
27519 , p_msg_data                    OUT NOCOPY    VARCHAR2  /*Added the nocopy check for 4537865 */
27520 , p_structure_version_id        IN      NUMBER
27521 , p_pa_project_id               IN      NUMBER
27522 , p_status_code                 IN      VARCHAR2
27523 , p_process_mode                IN      VARCHAR2 := 'ONLINE'
27524 , p_published_struct_ver_id     OUT NOCOPY     NUMBER  /*Added the nocopy check for 4537865 */
27525 
27526 )IS
27527 
27528 l_api_name CONSTANT VARCHAR2(30)  := 'change_structure_status';
27529 l_update_wbs_flag   VARCHAR2(1);
27530 l_msg_count         NUMBER ;
27531 l_msg_data          VARCHAR2(2000);
27532 l_return_status     VARCHAR2(1);
27533 BEGIN
27534 
27535 -- Begin fix for Bug # 4314797.
27536 
27537 --  Standard begin of API savepoint
27538 
27539     SAVEPOINT change_structure_status;
27540 
27541 --  Standard call to check for call compatibility.
27542 
27543     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
27544                                          p_api_version_number   ,
27545                                          l_api_name             ,
27546                                          G_PKG_NAME             )
27547     THEN
27548 
27549         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27550 
27551     END IF;
27552 
27553 --  Initialize the message table if requested.
27554 
27555     IF FND_API.TO_BOOLEAN( p_init_msg_list )
27556     THEN
27557 
27558         FND_MSG_PUB.initialize;
27559 
27560     END IF;
27561 
27562 --  Set API return status to success
27563 
27564     p_return_status := FND_API.G_RET_STS_SUCCESS;
27565 
27566 -- End fix for Bug # 4314797.
27567 
27568     PA_WORKPLAN_AMG_PUB.CHANGE_STRUCTURE_STATUS
27569             (
27570             p_api_version_number                => p_api_version_number
27571            ,p_init_msg_list                     => p_init_msg_list
27572            ,p_commit                            => FND_API.G_FALSE--bug 3766967
27573            ,p_pa_project_id                     => p_pa_project_id
27574            ,p_structure_version_id              => p_structure_version_id
27575            ,p_status_code                       => p_status_code
27576            ,p_return_status                     => p_return_status
27577            ,p_msg_count                         => p_msg_count
27578            ,p_msg_data                          => p_msg_data
27579            , p_published_struct_ver_id          => p_published_struct_ver_id
27580            );
27581    IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
27582           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
27583    ELSIF  (p_return_status = FND_API.G_RET_STS_ERROR) THEN
27584           RAISE  FND_API.G_EXC_ERROR;
27585    END IF;
27586 
27587    -- PA L Changes 3010538
27588 --Commenting as for a publishing case we need to always check for update wbs required flag
27589 --   IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
27590 --       ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
27591 --         PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
27592 --         PA_PROJECT_PUB.G_Published_version_exists = 'N')
27593 --   THEN
27594 
27595    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => p_pa_project_id
27596                                                         ,p_structure_version_id => p_published_struct_ver_id ) ;
27597    IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
27598         IF p_process_mode = 'ONLINE' THEN
27599 
27600         --Added by rtarway for BUG 4032291
27601         if p_status_code = 'STRUCTURE_PUBLISHED' then
27602              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_PUBLISH'
27603                                                        ,p_project_id           => p_pa_project_id
27604                                                            ,p_commit           => p_commit
27605                                                        -- Fix for Bug # 4314797.
27606                                                        ,p_structure_version_id => p_structure_version_id
27607                                                        ,p_pub_struc_ver_id     => p_published_struct_ver_id
27608                                                        ,x_return_status        => l_return_status
27609                                                        ,x_msg_count            => l_msg_count
27610                                                        ,x_msg_data             => l_msg_data ) ;
27611        --Added by rtarway for BUG 4032291
27612         else
27613              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
27614                                                        ,p_project_id           => p_pa_project_id
27615                                                        ,p_structure_version_id => p_published_struct_ver_id
27616                                                        ,x_return_status        => l_return_status
27617                                                        ,x_msg_count            => l_msg_count
27618                                                        ,x_msg_data             => l_msg_data ) ;
27619         end if;
27620 
27621 
27622 
27623         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
27624              THEN
27625                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27626         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
27627              THEN
27628                RAISE FND_API.G_EXC_ERROR;
27629         END IF;
27630         ELSIF p_process_mode = 'CONCURRENT' THEN
27631           /* Added if block for bug 5390015 */
27632           IF p_status_code = 'STRUCTURE_PUBLISHED' THEN
27633 
27634                 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_PUBLISH'
27635                                                                ,p_project_id            => p_pa_project_id
27636                                                                ,p_commit                     => p_commit
27637                                                                              ,p_structure_version_id  => p_structure_version_id
27638                                                                ,p_pub_struc_ver_id      => p_published_struct_ver_id
27639                                                                              ,x_return_status         => l_return_status
27640                                                                ,x_msg_count             => l_msg_count
27641                                                                ,x_msg_data              => l_msg_data ) ;
27642          ELSE
27643 
27644             PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_UPDATE'
27645                                                             ,p_project_id            => p_pa_project_id
27646                                                             ,p_structure_version_id  => p_published_struct_ver_id
27647                                                             ,x_return_status         => l_return_status
27648                                                             ,x_msg_count             => l_msg_count
27649                                                             ,x_msg_data              => l_msg_data ) ;
27650         END IF;
27651 
27652         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
27653              THEN
27654                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27655         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
27656              THEN
27657                RAISE FND_API.G_EXC_ERROR;
27658         END IF;
27659 
27660 
27661         END IF ;
27662      END IF ;
27663 --   END IF ;
27664 
27665 -- PA L Changes 3010538
27666 
27667 EXCEPTION
27668         WHEN FND_API.G_EXC_ERROR THEN
27669         p_return_status := FND_API.G_RET_STS_ERROR;
27670 
27671     -- 4537865
27672      p_published_struct_ver_id := NULL ;
27673 
27674     -- Begin fix for Bug # 4314797.
27675 
27676         ROLLBACK TO change_structure_status;
27677 
27678         p_msg_count := l_msg_count;
27679         p_msg_data := l_msg_data;
27680 
27681         FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
27682                           , p_data   =>  p_msg_data);
27683 
27684     -- End fix for Bug # 4314797.
27685 
27686         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
27687         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27688 
27689     -- 4537865
27690          p_published_struct_ver_id := NULL ;
27691 
27692         -- Begin fix for Bug # 4314797.
27693 
27694         ROLLBACK TO change_structure_status;
27695 
27696                 p_msg_count := l_msg_count;
27697                 p_msg_data := l_msg_data;
27698 
27699                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
27700                                           , p_data   =>  p_msg_data);
27701 
27702         -- End fix for Bug # 4314797.
27703 
27704 
27705         WHEN OTHERS THEN
27706         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27707 
27708     -- 4537865
27709          p_published_struct_ver_id := NULL ;
27710 
27711         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
27712           FND_MSG_PUB.add_exc_msg
27713               (p_pkg_name            => G_PKG_NAME
27714               ,p_procedure_name      => l_api_name);
27715         END IF;
27716 
27717 
27718         -- Begin fix for Bug # 4314797.
27719 
27720                 ROLLBACK TO change_structure_status;
27721 
27722                 p_msg_count := l_msg_count;
27723                 p_msg_data := l_msg_data;
27724 
27725                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
27726                                           , p_data   =>  p_msg_data);
27727 
27728         -- End fix for Bug # 4314797.
27729 
27730 END change_structure_status;
27731 
27732 
27733 PROCEDURE baseline_structure
27734 (p_api_version_number           IN      NUMBER
27735 , p_init_msg_list               IN      VARCHAR2        := 'F'
27736 , p_commit                      IN      VARCHAR2        := 'F'
27737 , p_return_status               OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
27738 , p_msg_count                   OUT NOCOPY    NUMBER /*Added the nocopy check for 4537865 */
27739 , p_msg_data                    OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
27740 , p_structure_version_id        IN      NUMBER
27741 , p_pa_project_id                  IN      NUMBER
27742 
27743 ) IS
27744 
27745 l_api_name CONSTANT VARCHAR2(30)  := 'baseline_structure';
27746 
27747 BEGIN
27748 
27749 -- 4537865
27750 --Initialize p_return_status to Success
27751 p_return_status := FND_API.G_RET_STS_SUCCESS ;
27752 
27753     PA_WORKPLAN_AMG_PUB.BASELINE_STRUCTURE
27754             (
27755             p_api_version_number                => p_api_version_number
27756            ,p_init_msg_list                     => p_init_msg_list
27757            ,p_commit                            => FND_API.G_FALSE--bug 3766967
27758            ,p_pa_project_id                     => p_pa_project_id
27759            ,p_structure_version_id              => p_structure_version_id
27760            ,p_return_status                     => p_return_status
27761            ,p_msg_count                         => p_msg_count
27762            ,p_msg_data                          => p_msg_data
27763            );
27764    IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
27765           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
27766    ELSIF  (p_return_status = FND_API.G_RET_STS_ERROR) THEN
27767           RAISE  FND_API.G_EXC_ERROR;
27768    END IF;
27769 
27770 EXCEPTION
27771         WHEN FND_API.G_EXC_ERROR THEN
27772         p_return_status := FND_API.G_RET_STS_ERROR;
27773 
27774         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
27775         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27776 
27777         WHEN OTHERS THEN
27778         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27779 
27780         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
27781           FND_MSG_PUB.add_exc_msg
27782               (p_pkg_name            => G_PKG_NAME
27783               ,p_procedure_name      => l_api_name);
27784         END IF;
27785 END baseline_structure;
27786 
27787 
27788 PROCEDURE delete_structure_version
27789 ( p_api_version_number          IN      NUMBER          := 1.0 -- for bug# 3802759
27790  ,p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
27791  ,p_init_msg_list               IN      VARCHAR2        := FND_API.G_FALSE
27792  ,p_msg_count                   OUT NOCOPY    NUMBER  /*Added the nocopy check for 4537865 */
27793  ,p_msg_data                    OUT NOCOPY    VARCHAR2   /*Added the nocopy check for 4537865 */
27794  ,p_return_status               OUT NOCOPY    VARCHAR2   /*Added the nocopy check for 4537865 */
27795  ,p_structure_version_id        IN  NUMBER
27796  ,p_record_version_number       IN      NUMBER
27797 ) IS
27798    l_api_name                   CONSTANT        VARCHAR2(30)            := 'delete_structure_version';
27799 
27800 BEGIN
27801 
27802 --  Standard begin of API savepoint
27803 
27804     SAVEPOINT delete_structure_ver_pub;
27805 
27806 --  Standard call to check for call compatibility.
27807 
27808     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
27809                                          p_api_version_number   ,
27810                                          l_api_name             ,
27811                                          G_PKG_NAME             )
27812     THEN
27813 
27814         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27815 
27816     END IF;
27817 
27818 --  Initialize the message table if requested.
27819 
27820     IF FND_API.TO_BOOLEAN( p_init_msg_list )
27821     THEN
27822 
27823         FND_MSG_PUB.initialize;
27824 
27825     END IF;
27826 
27827 --  Set API return status to success
27828 
27829     p_return_status := FND_API.G_RET_STS_SUCCESS;
27830 
27831     PA_PROJ_TASK_STRUC_PUB.DELETE_STRUCTURE_VERSION(
27832          p_api_version                       => p_api_version_number
27833         ,p_init_msg_list                     => p_init_msg_list
27834         ,p_commit                            => FND_API.G_FALSE--bug 3766967
27835         ,p_calling_module                    => 'AMG'
27836         ,p_structure_version_id              => p_structure_version_id
27837         ,p_record_version_number             => p_record_version_number
27838         ,x_return_status                     => p_return_status
27839         ,x_msg_count                         => p_msg_count
27840         ,x_msg_data                          => p_msg_data
27841    );
27842 
27843    IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
27844           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
27845    ELSIF  (p_return_status = FND_API.G_RET_STS_ERROR) THEN
27846           RAISE  FND_API.G_EXC_ERROR;
27847    END IF;
27848 
27849 EXCEPTION
27850 
27851         WHEN FND_API.G_EXC_ERROR
27852         THEN
27853         ROLLBACK TO delete_structure_ver_pub;
27854 
27855         p_return_status := FND_API.G_RET_STS_ERROR;
27856 
27857 
27858         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27859         THEN
27860         ROLLBACK TO delete_structure_ver_pub;
27861 
27862         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27863 
27864 
27865         WHEN OTHERS THEN
27866         ROLLBACK TO delete_structure_ver_pub;
27867 
27868         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27869 
27870         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27871         THEN
27872                 FND_MSG_PUB.add_exc_msg
27873                                 ( p_pkg_name            => G_PKG_NAME
27874                                 , p_procedure_name      => l_api_name   );
27875 
27876         END IF;
27877 
27878 END delete_structure_version;
27879 
27880 --Project Structures
27881 
27882 --Project Connect 4.0
27883 --------------------------------------------------------------------------------
27884 --Name:               fetch_structure_version
27885 --Type:               Procedure
27886 --Description:        This procedure can be used to get the structure version ids
27887 --                    to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
27888 --
27889 --Called subprograms:
27890 --
27891 --
27892 --
27893 --History:
27894 --    03-DEC-2002        Created
27895 --
27896 
27897 PROCEDURE fetch_structure_version
27898 ( p_api_version_number          IN      NUMBER
27899  ,p_init_msg_list               IN      VARCHAR2        := FND_API.G_FALSE
27900  ,p_return_status               OUT NOCOPY    VARCHAR2  /*Added the nocopy check for 4537865 */
27901  ,p_structure_type              IN      VARCHAR2        := 'FINANCIAL'
27902  ,p_pa_structure_version_id     OUT NOCOPY    NUMBER  /*Added the nocopy check for 4537865 */
27903  ,p_struc_return_status          OUT NOCOPY     VARCHAR2   /*Added the nocopy check for 4537865 */
27904 )
27905 IS
27906    l_api_name                   CONSTANT        VARCHAR2(30)            := 'fetch_structure_version';
27907    l_index                                      NUMBER;
27908    i                                            NUMBER;
27909 
27910 BEGIN
27911 
27912 --  Standard begin of API savepoint
27913 
27914     SAVEPOINT fetch_struc_pub;
27915 
27916 --  Standard call to check for call compatibility.
27917 
27918     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
27919                                          p_api_version_number   ,
27920                                          l_api_name             ,
27921                                          G_PKG_NAME             )
27922     THEN
27923 
27924         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27925 
27926     END IF;
27927 
27928 --  Initialize the message table if requested.
27929 
27930     IF FND_API.TO_BOOLEAN( p_init_msg_list )
27931     THEN
27932 
27933         FND_MSG_PUB.initialize;
27934 
27935     END IF;
27936 
27937 --  Set API return status to success
27938 
27939     p_return_status := FND_API.G_RET_STS_SUCCESS;
27940 
27941 
27942   FOR i in 1..G_Struc_out_tbl.count LOOP
27943 
27944       IF G_struc_out_tbl(i).structure_type = p_structure_type
27945       THEN
27946 
27947         IF G_struc_out_tbl(i).structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27948         THEN
27949                 p_pa_structure_version_id := NULL;
27950         ELSE
27951 
27952                 p_pa_structure_version_id := G_struc_out_tbl(i).structure_version_id;
27953 
27954         END IF;
27955         p_struc_return_status := G_struc_out_tbl(i).return_status;
27956         exit;
27957       END IF;
27958   END LOOP;
27959 
27960 EXCEPTION
27961         WHEN FND_API.G_EXC_ERROR
27962         THEN
27963         ROLLBACK TO fetch_struc_pub;
27964 
27965         p_return_status := FND_API.G_RET_STS_ERROR;
27966 
27967     -- 4537865
27968     p_pa_structure_version_id := NULL ;
27969     p_struc_return_status := NULL ;
27970 
27971 
27972         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27973         THEN
27974         ROLLBACK TO fetch_struc_pub;
27975 
27976         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27977 
27978         -- 4537865
27979         p_pa_structure_version_id := NULL ;
27980         p_struc_return_status := NULL ;
27981 
27982 
27983         WHEN OTHERS THEN
27984         ROLLBACK TO fetch_struc_pub;
27985 
27986         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27987 
27988         -- 4537865
27989         p_pa_structure_version_id := NULL ;
27990         p_struc_return_status := NULL ;
27991 
27992         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27993         THEN
27994                 FND_MSG_PUB.add_exc_msg
27995                                 ( p_pkg_name            => G_PKG_NAME
27996                                 , p_procedure_name      => l_api_name   );
27997 
27998         END IF;
27999 
28000 
28001 END fetch_structure_version;
28002 
28003 
28004 --------------------------------------------------------------------------------
28005 --Name:               fetch_task_version
28006 --Type:               Procedure
28007 --Description:        This procedure can be used to get the task version related output data
28008 --           to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
28009 --
28010 --Called subprograms:
28011 --
28012 --
28013 --
28014 --History:
28015 --    30-JAN-2003        anlee    Created
28016 --
28017 
28018 PROCEDURE fetch_task_version
28019 ( p_api_version_number    IN  NUMBER
28020  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
28021  ,p_return_status    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
28022  ,p_task_index      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28023  ,p_task_version_id    OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
28024  ,p_task_return_status    OUT NOCOPY  VARCHAR2  )  /*Added the nocopy check for 4537865 */
28025 IS
28026 
28027    l_api_name      CONSTANT  VARCHAR2(30)     := 'fetch_task_version';
28028    l_index          NUMBER;
28029    i            NUMBER;
28030 
28031 BEGIN
28032 
28033 --  Standard begin of API savepoint
28034 
28035     SAVEPOINT fetch_task_version_pub;
28036 
28037 --  Standard call to check for call compatibility.
28038 
28039     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
28040                                p_api_version_number  ,
28041                                l_api_name         ,
28042                                G_PKG_NAME         )
28043     THEN
28044 
28045   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28046 
28047     END IF;
28048 
28049 --  Initialize the message table if requested.
28050 
28051     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28052     THEN
28053 
28054   FND_MSG_PUB.initialize;
28055 
28056     END IF;
28057 
28058 --  Set API return status to success
28059 
28060     p_return_status := FND_API.G_RET_STS_SUCCESS;
28061 
28062 --  Check Task index value, when they don't provide an index we will error out
28063     IF p_task_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28064     OR p_task_index IS NULL
28065     THEN
28066   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28067   THEN
28068          pa_interface_utils_pub.map_new_amg_msg
28069            ( p_old_message_code => 'PA_INDEX_NOT_PROVIDED'
28070             ,p_msg_attribute    => 'CHANGE'
28071             ,p_resize_flag      => 'N'
28072             ,p_msg_context      => 'GENERAL'
28073             ,p_attribute1       => ''
28074             ,p_attribute2       => ''
28075             ,p_attribute3       => ''
28076             ,p_attribute4       => ''
28077             ,p_attribute5       => '');
28078   END IF;
28079 
28080   p_return_status := FND_API.G_RET_STS_ERROR;
28081   RAISE FND_API.G_EXC_ERROR;
28082     ELSE
28083   l_index := p_task_index;
28084     END IF;
28085 
28086   If G_Tasks_out_tbl.exists(l_index) THEN
28087 --  assign global table fields to the outgoing parameter
28088 --  we don't want to return the big number G_PA_MISS_NUM
28089 
28090                 --project structrues
28091     IF G_tasks_out_tbl(l_index).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28092         THEN
28093                 p_task_version_id := NULL;
28094         ELSE
28095 
28096                 p_task_version_id := G_tasks_out_tbl(l_index).task_version_id;
28097 
28098         END IF;
28099                 --project structrues
28100 
28101      p_task_return_status    := G_tasks_out_tbl(l_index).return_status;
28102 
28103 END IF;
28104 
28105 EXCEPTION
28106 
28107   WHEN FND_API.G_EXC_ERROR
28108   THEN
28109   ROLLBACK TO fetch_task_version_pub;
28110 
28111   p_return_status := FND_API.G_RET_STS_ERROR;
28112 
28113  -- 4537865
28114   p_task_version_id := NULL ;
28115 
28116 
28117   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28118   THEN
28119   ROLLBACK TO fetch_task_version_pub;
28120 
28121   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28122 
28123  -- 4537865
28124   p_task_version_id := NULL ;
28125 
28126 
28127   WHEN OTHERS THEN
28128   ROLLBACK TO fetch_task_version_pub;
28129 
28130   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28131  -- 4537865
28132   p_task_version_id := NULL ;
28133 
28134   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28135   THEN
28136     FND_MSG_PUB.add_exc_msg
28137         ( p_pkg_name    => G_PKG_NAME
28138         , p_procedure_name  => l_api_name  );
28139 
28140   END IF;
28141 
28142 
28143 END fetch_task_version;
28144 
28145 --bug 2765115
28146 PROCEDURE get_task_version
28147 ( p_api_version_number          IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28148  ,p_init_msg_list               IN      VARCHAR2        := FND_API.G_FALSE
28149  ,p_return_status               OUT NOCOPY     VARCHAR2  /*Added the nocopy check for 4537865 */
28150  ,p_pa_project_id                  IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28151  ,p_pa_task_id                     IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28152  ,p_pa_structure_version_id        IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28153  ,p_task_version_id             OUT  NOCOPY   NUMBER  /*Added the nocopy check for 4537865 */
28154 ) IS
28155 
28156    l_api_name                   CONSTANT        VARCHAR2(30)            := 'get_task_version';
28157    l_index                                      NUMBER;
28158    i                                            NUMBER;
28159 
28160 BEGIN
28161 
28162 --  Standard begin of API savepoint
28163 
28164     SAVEPOINT get_task_version_pub;
28165 
28166 --  Standard call to check for call compatibility.
28167 
28168     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
28169                                          p_api_version_number   ,
28170                                          l_api_name             ,
28171                                          G_PKG_NAME             )
28172     THEN
28173 
28174         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28175 
28176     END IF;
28177 
28178 --  Initialize the message table if requested.
28179 
28180     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28181     THEN
28182 
28183         FND_MSG_PUB.initialize;
28184 
28185     END IF;
28186 
28187 --  Set API return status to success
28188     p_return_status := FND_API.G_RET_STS_SUCCESS;
28189 
28190     IF ( p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_task_id IS NULL ) OR
28191        ( p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_project_id IS NULL ) OR
28192        ( p_pa_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_structure_version_id IS NULL )
28193     THEN
28194         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28195         THEN
28196         --My suggestion was to create a new message but Sakthi asked me use the following
28197         --Since these changes are done at the last moment of PA K around build9. We are hesitant to
28198         --log a new message bug. Sakthi suggested to use an existing message PA_PS_INV_STR_VER_ID
28199         --although it does not convey full message here and we will change it later
28200         --The message PA_PS_INV_STR_VER_ID does not have the AMG at the end so I cant use the standard api
28201         --call for AMG messages i.e,pa_interface_utils_pub.map_new_amg_msg
28202 
28203           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28204                                ,p_msg_name       => 'PA_PS_INV_STR_VER_ID');
28205         END IF;
28206         p_return_status := FND_API.G_RET_STS_ERROR;
28207         RAISE FND_API.G_EXC_ERROR;
28208     END IF;
28209 
28210     PA_PROJ_TASK_STRUC_PUB.get_task_version_id(
28211               p_project_id               => p_pa_project_id
28212              ,p_structure_version_id     => p_pa_structure_version_id
28213              ,p_task_id                  => p_pa_task_id
28214              ,x_task_version_id          => p_task_version_id
28215           );
28216 
28217     IF p_task_version_id IS NULL
28218     THEN
28219         p_return_status := FND_API.G_RET_STS_ERROR;
28220         RAISE FND_API.G_EXC_ERROR;
28221     END IF;
28222 
28223 EXCEPTION
28224 
28225         WHEN FND_API.G_EXC_ERROR
28226         THEN
28227         ROLLBACK TO get_task_version_pub;
28228 
28229         p_return_status := FND_API.G_RET_STS_ERROR;
28230 
28231     --4537865
28232     p_task_version_id := NULL ;
28233 
28234 
28235         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28236         THEN
28237         ROLLBACK TO get_task_version_pub;
28238 
28239         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28240             --4537865
28241         p_task_version_id := NULL ;
28242 
28243 
28244         WHEN OTHERS THEN
28245         ROLLBACK TO get_task_version_pub;
28246 
28247         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28248         --4537865
28249         p_task_version_id := NULL ;
28250         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28251         THEN
28252                 FND_MSG_PUB.add_exc_msg
28253                                 ( p_pkg_name            => G_PKG_NAME
28254                                 , p_procedure_name      => l_api_name   );
28255 
28256         END IF;
28257 
28258 END get_task_version;
28259 --bug 2765115
28260 
28261 --------------------------- FP M changes begin (venkat) 4 ------------------------------------
28262 
28263 PROCEDURE change_current_working_version
28264 (p_api_version_number           IN      NUMBER
28265 , p_init_msg_list               IN      VARCHAR2        := 'F'
28266 , p_commit                      IN      VARCHAR2        := 'F'
28267 , p_return_status               OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
28268 , p_msg_count                   OUT NOCOPY    NUMBER /*Added the nocopy check for 4537865 */
28269 , p_msg_data                    OUT NOCOPY     VARCHAR2  /*Added the nocopy check for 4537865 */
28270 , p_structure_version_id        IN      NUMBER
28271 , p_pa_project_id               IN      NUMBER
28272 )
28273 
28274 IS
28275 
28276 l_api_name   CONSTANT        VARCHAR2(30)  := 'change_current_working_version';
28277 l_rec_version_number         NUMBER;
28278 l_pev_structure_id       NUMBER;
28279 l_name               VARCHAR2(30);
28280 
28281 CURSOR l_temp_cursor
28282 IS
28283 SELECT record_version_number, pev_structure_id, name
28284 FROM      PA_PROJ_ELEM_VER_STRUCTURE
28285 WHERE  project_id = p_pa_project_id  and element_version_id = p_structure_version_id;
28286 
28287 
28288 BEGIN
28289 
28290 --  Standard begin of API savepoint
28291 
28292     SAVEPOINT get_task_version_pub;
28293 
28294 --  Standard call to check for call compatibility.
28295 
28296     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
28297                                          p_api_version_number   ,
28298                                          l_api_name             ,
28299                                          G_PKG_NAME             )
28300     THEN
28301 
28302         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28303 
28304     END IF;
28305 
28306 --  Initialize the message table if requested.
28307 
28308     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28309     THEN
28310 
28311         FND_MSG_PUB.initialize;
28312 
28313     END IF;
28314 
28315 --  Set API return status to success
28316     p_return_status := FND_API.G_RET_STS_SUCCESS;
28317 
28318     IF ( p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_project_id IS NULL ) OR
28319        ( p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_structure_version_id IS NULL )
28320     THEN
28321         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28322         THEN
28323 
28324     -- Using the message name PA_PS_INV_STR_VER_ID
28325 
28326       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28327                                ,p_msg_name       => 'PA_PS_INV_STR_VER_ID');
28328         END IF;
28329         p_return_status := FND_API.G_RET_STS_ERROR;
28330         RAISE FND_API.G_EXC_ERROR;
28331     END IF;
28332 
28333    OPEN l_temp_cursor;
28334    FETCH l_temp_cursor INTO l_rec_version_number, l_pev_structure_id, l_name;
28335 
28336    IF l_temp_cursor%NOTFOUND
28337    THEN
28338     CLOSE l_temp_cursor;
28339         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28340         THEN
28341     -- Using the message name PA_PS_INV_STR_VER_ID
28342     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28343                               ,p_msg_name       => 'PA_PS_INV_STR_VER_ID');
28344         END IF;
28345         p_return_status := FND_API.G_RET_STS_ERROR;
28346         RAISE FND_API.G_EXC_ERROR;
28347    END IF;
28348    CLOSE l_temp_cursor;
28349 
28350    PA_PROJECT_STRUCTURE_PVT1.update_structure_version_attr
28351     (p_api_version          => p_api_version_number
28352     ,p_init_msg_list        => p_init_msg_list
28353     ,p_commit                       => FND_API.G_FALSE--bug 3766967
28354     ,p_pev_structure_id     => l_pev_structure_id
28355     ,p_structure_version_name       => l_name
28356     ,p_record_version_number        => l_rec_version_number
28357     ,p_current_working_ver_flag     => 'Y'
28358     ,x_return_status        => p_return_status
28359     ,x_msg_count            => p_msg_count
28360     ,x_msg_data         => p_msg_data
28361     );
28362 
28363    IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28364           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
28365    ELSIF  (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28366           RAISE  FND_API.G_EXC_ERROR;
28367    END IF;
28368 
28369 EXCEPTION
28370 
28371         WHEN FND_API.G_EXC_ERROR
28372         THEN
28373         ROLLBACK TO get_task_version_pub;
28374 
28375         p_return_status := FND_API.G_RET_STS_ERROR;
28376 
28377 
28378         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28379         THEN
28380         ROLLBACK TO get_task_version_pub;
28381 
28382         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28383 
28384 
28385         WHEN OTHERS THEN
28386         ROLLBACK TO get_task_version_pub;
28387 
28388         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28389         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28390         THEN
28391                 FND_MSG_PUB.add_exc_msg
28392                                 ( p_pkg_name            => G_PKG_NAME
28393                                 , p_procedure_name      => l_api_name   );
28394 
28395         END IF;
28396 
28397 
28398 END change_current_working_version;
28399 
28400 -------------------------- FP M changes end (venkat) 4 ----------------------------------------
28401 
28402 -- Progress Management Changes. Bug # 3420093.
28403 
28404 -- Name:               apply_lp_prog_on_cwv
28405 -- Type:               Procedure
28406 -- Description:        This procedure can be used to apply the latest progress on the given
28407 --                     structure_version.
28408 --
28409 -- Called subprograms: pa_progress_pub.apply_lp_prog_on_cwv().
28410 --
28411 --
28412 --
28413 --History:
28414 --
28415 --    02-APR-2004       Rakesh Raghavan         Created
28416 
28417 PROCEDURE apply_lp_prog_on_cwv(
28418   p_api_version                 IN      NUMBER          :=1.0
28419  ,p_init_msg_list               IN      VARCHAR2        :=FND_API.G_TRUE
28420  ,p_commit                      IN      VARCHAR2        :=FND_API.G_FALSE
28421  ,p_pa_project_id               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28422  ,p_pm_project_reference        IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28423  ,p_working_str_version_id      IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28424  ,p_return_status               OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
28425  ,p_msg_count                   OUT NOCOPY     NUMBER  /*Added the nocopy check for 4537865 */
28426  ,p_msg_data                    OUT NOCOPY     VARCHAR2 /*Added the nocopy check for 4537865 */
28427 )
28428 
28429 IS
28430    l_api_name           CONSTANT   VARCHAR2(30)    := 'APPLY_LP_PROG_ON_CWV';
28431    l_api_version        CONSTANT   NUMBER          := p_api_version;
28432    l_user_id                       NUMBER          := FND_GLOBAL.USER_ID;
28433    l_login_id                      NUMBER          := FND_GLOBAL.LOGIN_ID;
28434    l_return_status                 VARCHAR2(1);
28435    l_msg_count                     NUMBER;
28436    l_msg_data                      VARCHAR2(250);
28437 
28438    l_function_allowed      VARCHAR2(1);
28439    l_resp_id               NUMBER := FND_GLOBAL.Resp_id;
28440    l_debug_mode            VARCHAR2(1);
28441 
28442    l_project_id            NUMBER;
28443 
28444 BEGIN
28445         --  Standard begin of API savepoint.
28446 
28447         savepoint APPLY_LP_PROG_ON_CWV;
28448 
28449         l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
28450 
28451         --  Standard call to check for call compatibility.
28452 
28453         IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
28454 
28455                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28456 
28457         END IF;
28458 
28459         -- Initialize the message table if requested.
28460 
28461         IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
28462 
28463                 FND_MSG_PUB.initialize;
28464 
28465         END IF;
28466 
28467         --  Set API return status to success.
28468 
28469         p_return_status := FND_API.G_RET_STS_SUCCESS;
28470 
28471         /*      Checking function security.     */
28472 
28473        -- Actions performed using the APIs would be subject to
28474        -- function security. If the responsibility does not allow
28475        -- such functions to be executed, the API should not proceed further
28476        -- since the user does not have access to such functions.
28477        -- The function security for this API is the same as that enforced
28478        -- in the the update_task() API.
28479 
28480     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
28481       (p_api_version_number => p_api_version,
28482        p_responsibility_id  => l_resp_id,
28483        p_function_name      => 'PA_PM_UPDATE_TASK',
28484        p_msg_count          => l_msg_count,
28485        p_msg_data           => l_msg_data,
28486        p_return_status      => l_return_status,
28487        p_function_allowed   => l_function_allowed );
28488 
28489         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
28490         THEN
28491                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28492 
28493         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
28494         THEN
28495                         RAISE FND_API.G_EXC_ERROR;
28496         END IF;
28497         IF l_function_allowed = 'N' THEN
28498           pa_interface_utils_pub.map_new_amg_msg
28499           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
28500            ,p_msg_attribute    => 'CHANGE'
28501            ,p_resize_flag      => 'Y'
28502            ,p_msg_context      => 'GENERAL'
28503            ,p_attribute1       => ''
28504            ,p_attribute2       => ''
28505            ,p_attribute3       => ''
28506            ,p_attribute4       => ''
28507            ,p_attribute5       => '');
28508            p_return_status := FND_API.G_RET_STS_ERROR;
28509            RAISE FND_API.G_EXC_ERROR;
28510         END IF;
28511 
28512         /*      Converting project_reference to project_id      */
28513 
28514         PA_PROJECT_PVT.Convert_pm_projref_to_id
28515                 (p_pm_project_reference =>      p_pm_project_reference
28516                  ,  p_pa_project_id     =>      p_pa_project_id
28517                  ,  p_out_project_id    =>      l_project_id
28518                  ,  p_return_status     =>      l_return_status);
28519 
28520       IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28521               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
28522       ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
28523               RAISE  FND_API.G_EXC_ERROR;
28524       END IF;
28525 
28526         /*      Getting the working structure_version_id        */
28527 
28528         if (p_working_str_version_id = NULL or p_working_str_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) then
28529                 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
28530                          pa_interface_utils_pub.map_new_amg_msg
28531                                 (p_old_message_code => 'PA_WRKG_STR_VER_ID_IS_MISSING'
28532                                 ,p_msg_attribute    => 'CHANGE'
28533                                 ,p_resize_flag      => 'N'
28534                                 ,p_msg_context      => 'GENERAL'
28535                                 ,p_attribute1       => ''
28536                                 ,p_attribute2       => ''
28537                                 ,p_attribute3       => ''
28538                                 ,p_attribute4       => ''
28539                                 ,p_attribute5       => '');
28540                 end if;
28541 
28542                           p_return_status := FND_API.G_RET_STS_ERROR;
28543                           RAISE FND_API.G_EXC_ERROR;
28544         end if;
28545 
28546         /*      Calling: PA_PROGRESS_PUB.apply_lp_prog_on_cwv.  */
28547 
28548         PA_PROGRESS_PUB.apply_lp_prog_on_cwv(p_api_version              =>      p_api_version
28549                                             ,p_init_msg_list            =>      p_init_msg_list
28550                                             ,p_commit                   =>      FND_API.G_FALSE--bug 3766967
28551                                             ,p_project_id               =>      l_project_id
28552                                             ,p_working_str_version_id   =>      p_working_str_version_id
28553                                             ,x_return_status            =>      l_return_status
28554                                             ,x_msg_count                =>      l_msg_count
28555                                             ,x_msg_data                 =>      l_msg_data);
28556 
28557         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
28558                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
28559                                      p_msg_name       => l_msg_data);
28560                 p_msg_data := l_msg_data;
28561                 p_return_status := 'E';
28562                 p_msg_count := l_msg_count;
28563                 RAISE  FND_API.G_EXC_ERROR;
28564         END IF;
28565 
28566         IF (p_commit = FND_API.G_TRUE) THEN
28567                 COMMIT;
28568         END IF;
28569 
28570 EXCEPTION
28571 
28572     when FND_API.G_EXC_ERROR then
28573 
28574       if p_commit = FND_API.G_TRUE then
28575         rollback to APPLY_LP_PROG_ON_CWV;
28576       end if;
28577 
28578       p_return_status := FND_API.G_RET_STS_ERROR;
28579 
28580       FND_MSG_PUB.Count_And_Get
28581         (p_count    =>  p_msg_count
28582          ,p_data    =>  p_msg_data);
28583 
28584     when FND_API.G_EXC_UNEXPECTED_ERROR then
28585       if p_commit = FND_API.G_TRUE then
28586          rollback to APPLY_LP_PROG_ON_CWV;
28587       end if;
28588 
28589       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28590 
28591       FND_MSG_PUB.Count_And_Get
28592         (p_count    =>  p_msg_count
28593          ,p_data    =>  p_msg_data);
28594 
28595     when OTHERS then
28596 
28597       if p_commit = FND_API.G_TRUE then
28598          rollback to APPLY_LP_PROG_ON_CWV;
28599       end if;
28600 
28601       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28602 
28603       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28604         THEN
28605                 FND_MSG_PUB.add_exc_msg
28606                    (p_pkg_name    => G_PKG_NAME
28607                    ,p_procedure_name  => l_api_name);
28608         END IF;
28609 
28610       FND_MSG_PUB.Count_And_Get
28611         (p_count    =>  p_msg_count
28612          ,p_data    =>  p_msg_data);
28613       raise;
28614 
28615 END apply_lp_prog_on_cwv;
28616 
28617 -- Progress Management Changes. Bug # 3420093.
28618 
28619 -- 3435905 FP M Changes for Deliverables : Start
28620 
28621 --------------------------------------------------------------------------------
28622 --Name:               load_deliverable
28623 --Type:               Procedure
28624 --Description:        This procedure can be used to load a record of deliverable from input
28625 --                     paramters to global table
28626 --
28627 --Called subprograms:
28628 --
28629 --
28630 --
28631 --History:
28632 --    03-Mar-2004   Puneet            Created
28633 --
28634 
28635 PROCEDURE load_deliverable
28636 (   p_api_version            IN  NUMBER     := 1.0
28637   , p_init_msg_list          IN  VARCHAR2   := FND_API.G_TRUE
28638   , p_debug_mode             IN  VARCHAR2   := 'N'
28639   , x_return_status          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28640   , p_deliverable_name       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28641   , p_deliverable_short_name IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28642   , p_deliverable_type_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28643   , p_deliverable_owner_id   IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28644   , p_description            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28645   , p_status_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28646   , p_due_date               IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28647   , p_completion_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28648   , p_progress_weight        IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28649   , p_pm_source_code         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28650   , px_deliverable_id     IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28651   , p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28652   -- for bug# 3729250
28653   --  , p_carrying_out_org_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28654   , p_task_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28655   , p_task_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28656   , p_item_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28657   , P_inventory_org_id       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28658   , p_quantity               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28659   , p_uom_code               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28660   -- for bug# 3729250
28661   --  , p_item_description       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28662   , p_unit_price         IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28663   -- for bug# 3729250
28664   , p_unit_number        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28665   , p_currency_code      IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28666   )
28667   IS
28668 
28669    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_deliverable';
28670 
28671 BEGIN
28672 
28673 --  Standard begin of API savepoint
28674 
28675     SAVEPOINT load_deliverable_pub;
28676 
28677 --  Standard call to check for call compatibility.
28678 
28679     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
28680                                p_api_version  ,
28681                                l_api_name         ,
28682                                G_PKG_NAME       )
28683     THEN
28684 
28685        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28686 
28687     END IF;
28688 
28689 --  Initialize the message table if requested.
28690 
28691     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28692     THEN
28693 
28694        FND_MSG_PUB.initialize;
28695 
28696     END IF;
28697 
28698 --  Set API return status to success
28699 
28700     x_return_status := FND_API.G_RET_STS_SUCCESS;
28701 
28702 -- Load the record only if deliverable_short_name is passed
28703   --   IF (p_deliverable_short_name <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND  /* Bug 39590235 */
28704        IF (p_deliverable_short_name <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
28705           (p_deliverable_short_name IS NOT NULL) THEN
28706 
28707 -- assign a value to the global counter for this table
28708        G_deliverables_in_tbl_count  := G_deliverables_in_tbl_count + 1;
28709 
28710         IF p_debug_mode = 'Y' THEN
28711            pa_debug.g_err_stage := 'Loading deliverable ['|| p_deliverable_short_name||'] element [ '||G_deliverables_in_tbl_count ||']';
28712            pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
28713         END IF;
28714 
28715 -- assign incoming parameters to the global table fields
28716     G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_name          := p_deliverable_name       ;
28717     G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_short_name    := p_deliverable_short_name ;
28718     G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_type_id       := p_deliverable_type_id    ;
28719     G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_owner_id      := p_deliverable_owner_id   ;
28720     G_deliverables_in_tbl(G_deliverables_in_tbl_count).description               := p_description            ;
28721     G_deliverables_in_tbl(G_deliverables_in_tbl_count).status_code               := p_status_code            ;
28722     G_deliverables_in_tbl(G_deliverables_in_tbl_count).due_date                  := p_due_date               ;
28723     G_deliverables_in_tbl(G_deliverables_in_tbl_count).completion_date           := p_completion_date        ;
28724     G_deliverables_in_tbl(G_deliverables_in_tbl_count).progress_weight           := p_progress_weight        ;
28725     G_deliverables_in_tbl(G_deliverables_in_tbl_count).pm_source_code            := p_pm_source_code         ;
28726         G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_id            := px_deliverable_id        ;
28727     G_deliverables_in_tbl(G_deliverables_in_tbl_count).pm_deliverable_reference  := p_pm_deliverable_reference;
28728     -- for bug# 3729250
28729     --  G_deliverables_in_tbl(G_deliverables_in_tbl_count).carrying_out_org_id       := p_carrying_out_org_id  ;
28730     G_deliverables_in_tbl(G_deliverables_in_tbl_count).task_id                   := p_task_id                ;
28731     G_deliverables_in_tbl(G_deliverables_in_tbl_count).task_source_reference     := p_task_source_reference  ;
28732     G_deliverables_in_tbl(G_deliverables_in_tbl_count).item_id                   := p_item_id                ;
28733     G_deliverables_in_tbl(G_deliverables_in_tbl_count).inventory_org_id      := p_inventory_org_id       ;
28734     G_deliverables_in_tbl(G_deliverables_in_tbl_count).quantity                  := p_quantity               ;
28735     G_deliverables_in_tbl(G_deliverables_in_tbl_count).uom_code                  := p_uom_code               ;
28736     -- for bug# 3729250
28737     --  G_deliverables_in_tbl(G_deliverables_in_tbl_count).item_description          := p_item_description       ;
28738     G_deliverables_in_tbl(G_deliverables_in_tbl_count).unit_price                := p_unit_price             ;
28739     G_deliverables_in_tbl(G_deliverables_in_tbl_count).unit_number               := p_unit_number            ;
28740     G_deliverables_in_tbl(G_deliverables_in_tbl_count).currency_code         := p_currency_code          ;
28741    END IF;
28742 
28743 EXCEPTION
28744 
28745   WHEN FND_API.G_EXC_ERROR THEN
28746     ROLLBACK TO load_deliverable_pub;
28747     x_return_status := FND_API.G_RET_STS_ERROR;
28748 
28749 
28750   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
28751     ROLLBACK TO load_deliverable_pub;
28752     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28753 
28754 
28755   WHEN OTHERS THEN
28756     ROLLBACK TO load_deliverable_pub;
28757     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28758 
28759   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28760   THEN
28761     FND_MSG_PUB.add_exc_msg
28762         ( p_pkg_name    => G_PKG_NAME
28763         , p_procedure_name  => l_api_name  );
28764 
28765   END IF;
28766 
28767 END load_deliverable;
28768 
28769 --------------------------------------------------------------------------------
28770 --Name:               load_deliverables
28771 --Type:               Procedure
28772 --Description:        This procedure can be used to load a set record of deliverables from input
28773 --                     paramters to global table
28774 --
28775 --Called subprograms:   load_deliverable
28776 --
28777 --
28778 --
28779 --History:
28780 --    03-Mar-2004   Puneet            Created
28781 --
28782 
28783 PROCEDURE load_deliverables
28784 (   p_api_version            IN  NUMBER     := 1.0
28785   , p_init_msg_list          IN  VARCHAR2   := FND_API.G_TRUE
28786   , p_debug_mode             IN  VARCHAR2  := 'N'
28787   , x_return_status          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28788   , p_deliverable_name       IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28789   --, p_deliverable_name       IN  PA_VC_1000_240 := PA_VC_1000_240(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28790 --  , p_deliverable_short_name IN  PA_VC_1000_100 := PA_VC_1000_100(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28791   , p_deliverable_short_name IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28792   , p_deliverable_type_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28793   , p_deliverable_owner_id   IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28794   , p_description            IN  PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28795   , p_status_code            IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28796   , p_due_date               IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
28797   , p_completion_date        IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
28798   , p_progress_weight        IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28799   , p_pm_source_code         IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28800   , px_deliverable_id     IN OUT NOCOPY PA_NUM_1000_NUM /*Added the nocopy check for 4537865 */
28801   , p_pm_deliverable_reference IN  PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28802   -- for bug# 3729250
28803   --  , p_carrying_out_org_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28804   , p_task_id                IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28805   , p_task_source_reference  IN  PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28806   , p_item_id                IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28807   , P_inventory_org_id       IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28808   , p_quantity               IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28809   , p_uom_code               IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28810   -- for bug# 3729250
28811   --  , p_item_description       IN  PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28812   , p_unit_price         IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28813   -- for bug# 3729250
28814   , p_unit_number        IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28815 --  , p_currency_code        IN  PA_VC_1000_15 := PA_VC_1000_15(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28816   , p_currency_code      IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28817   )
28818   IS
28819 
28820    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_deliverables';
28821 
28822 BEGIN
28823 
28824 --  Standard begin of API savepoint
28825 
28826     SAVEPOINT load_deliverables_pub;
28827 
28828 --  Standard call to check for call compatibility.
28829 
28830     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
28831                                p_api_version  ,
28832                                l_api_name         ,
28833                                G_PKG_NAME       )
28834     THEN
28835 
28836        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28837 
28838     END IF;
28839 
28840 --  Initialize the message table if requested.
28841 
28842     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28843     THEN
28844 
28845        FND_MSG_PUB.initialize;
28846 
28847     END IF;
28848 
28849 --  Set API return status to success
28850 
28851     x_return_status := FND_API.G_RET_STS_SUCCESS;
28852 
28853 -- Load the table only if deliverable_short_name is passed
28854  FOR i in 1..1000 LOOP
28855     IF (p_deliverable_short_name(i) <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND                    /* Bug # 3590235 */
28856           (p_deliverable_short_name(i) IS NOT NULL) THEN
28857 
28858        load_deliverable
28859        (   p_api_version              => p_api_version
28860          , p_init_msg_list            => p_init_msg_list
28861          , p_debug_mode               => p_debug_mode
28862          , x_return_status            => x_return_status
28863          , p_deliverable_name         => p_deliverable_name(i)
28864          , p_deliverable_short_name   => p_deliverable_short_name(i)
28865          , p_deliverable_type_id      => p_deliverable_type_id(i)
28866          , p_deliverable_owner_id     => p_deliverable_owner_id(i)
28867          , p_description              => p_description(i)
28868          , p_status_code              => p_status_code(i)
28869          , p_due_date                 => p_due_date(i)
28870          , p_completion_date          => p_completion_date(i)
28871          , p_progress_weight          => p_progress_weight(i)
28872          , p_pm_source_code           => p_pm_source_code(i)
28873          , px_deliverable_id          => px_deliverable_id(i)
28874          , p_pm_deliverable_reference => p_pm_deliverable_reference(i)
28875          -- for bug# 3729250
28876          --  , p_carrying_out_org_id      => p_carrying_out_org_id(i)
28877          , p_task_id                  => p_task_id(i)
28878          , p_task_source_reference    => p_task_source_reference(i)
28879          , p_item_id                  => p_item_id(i)
28880          , P_inventory_org_id         => p_inventory_org_id(i)
28881          , p_quantity                 => p_quantity(i)
28882          , p_uom_code                 => p_uom_code(i)
28883          -- for bug# 3729250
28884          --  , p_item_description         => p_item_description(i)
28885          , p_unit_price               => p_unit_price(i)
28886          , p_unit_number              => p_unit_number(i)
28887          , p_currency_code            => p_currency_code(i)
28888          ) ;
28889    END IF;
28890 END LOOP;
28891 
28892 EXCEPTION
28893 
28894   WHEN FND_API.G_EXC_ERROR
28895   THEN
28896   ROLLBACK TO load_deliverables_pub;
28897 
28898   x_return_status := FND_API.G_RET_STS_ERROR;
28899 
28900 
28901   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28902   THEN
28903   ROLLBACK TO load_deliverables_pub;
28904 
28905   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28906 
28907 
28908   WHEN OTHERS THEN
28909   ROLLBACK TO load_deliverables_pub;
28910 
28911   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28912 
28913   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28914   THEN
28915     FND_MSG_PUB.add_exc_msg
28916         ( p_pkg_name    => G_PKG_NAME
28917         , p_procedure_name  => l_api_name  );
28918 
28919   END IF;
28920 
28921 END load_deliverables;
28922 
28923 --------------------------------------------------------------------------------
28924 --Name:               load_action
28925 --Type:               Procedure
28926 --Description:        This procedure can be used to load a record of Deliverable
28927 --                    Actions from input paramters to global tables
28928 --
28929 --Called subprograms:
28930 --
28931 --
28932 --
28933 --History:
28934 --    03-Mar-2004   Puneet            Created
28935 --
28936 
28937 PROCEDURE load_action
28938 (   p_api_version                  IN  NUMBER    := 1.0
28939   , p_init_msg_list                IN  VARCHAR2  := FND_API.G_TRUE
28940   , p_debug_mode                   IN  VARCHAR2  := 'N'
28941   , x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28942   , p_action_name                  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28943   , p_action_id                    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28944   , p_action_owner_id              IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28945   , p_function_code                IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28946   , p_due_date                     IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28947   , p_description                  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28948   , p_completion_date              IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28949   , p_pm_source_code               IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28950   , p_pm_action_reference          IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28951   -- for bug# 3729250
28952   --  , p_carrying_out_org_id          IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28953   , p_pm_deliverable_reference     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28954   , p_deliverable_id               IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28955   -- added for bug# 3729250
28956   , p_financial_task_reference     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28957   , p_financial_task_id            IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28958   , p_destination_type_code        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28959   , p_receiving_org_id             IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28960   , p_receiving_location_id        IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28961   , p_po_need_by_date              IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28962   , p_vendor_id                    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28963   , p_vendor_site_code             IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28964 --  , p_project_currency             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28965   , p_Quantity                     IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28966   , p_uom_code                     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28967   , p_unit_price                   IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28968   , p_exchange_rate_type           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28969   , p_exchange_rate_date           IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28970   , p_exchange_rate                IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  /* Bug 3590235 */
28971   , p_expenditure_type             IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28972   , p_expenditure_org_id           IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28973   , p_expenditure_item_date        IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28974   , p_requisition_line_type_id     IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28975   , p_category_id                  IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28976   , p_ready_to_procure_flag        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28977   , p_initiate_procure_flag        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28978   , p_ship_from_organization_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28979   , p_ship_from_location_id        IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28980   , p_ship_to_organization_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28981   , p_ship_to_location_id          IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28982   , p_demand_schedule              IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28983   , p_expected_shipment_date       IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28984   , p_promised_shipment_date       IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28985   , p_volume                       IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28986   , p_volume_uom                   IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28987   , p_weight                       IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28988   , p_weight_uom                   IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28989   , p_ready_to_ship_flag           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28990   , p_initiate_planning_flag       IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28991   , p_initiate_shipping_flag       IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28992   , p_event_type                   IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28993   , p_currency                     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28994   , p_invoice_amount               IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28995   , p_revenue_amount               IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28996   , p_event_date                   IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28997   , p_event_number                 IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28998   , p_organization_id              IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28999   , p_bill_hold_flag               IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29000   , p_project_functional_rate_type IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29001   , p_project_functional_rate_date IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29002   , p_project_functional_rate      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29003   , p_project_rate_type            IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29004   , p_project_rate_date            IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29005   , p_project_rate                 IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29006   , p_funding_rate_type            IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29007   , p_funding_rate_date            IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29008   , p_funding_rate                 IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29009   , p_pm_event_reference           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
29010 )
29011   IS
29012 
29013    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_actions';
29014 
29015 BEGIN
29016 
29017 --  Standard begin of API savepoint
29018 
29019     SAVEPOINT load_action_pub;
29020 
29021 --  Standard call to check for call compatibility.
29022 
29023     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
29024                                p_api_version  ,
29025                                l_api_name         ,
29026                                G_PKG_NAME       )
29027     THEN
29028 
29029        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29030 
29031     END IF;
29032 
29033 --  Initialize the message table if requested.
29034 
29035     IF FND_API.TO_BOOLEAN( p_init_msg_list )
29036     THEN
29037 
29038        FND_MSG_PUB.initialize;
29039 
29040     END IF;
29041 
29042 --  Set API return status to success
29043 
29044     x_return_status := FND_API.G_RET_STS_SUCCESS;
29045 
29046 -- Load the table only if action_name is passed
29047    IF (p_action_name <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29048          (p_action_name IS NOT NULL) THEN
29049 
29050 -- assign a value to the global counter for this table
29051         G_dlvr_actions_in_tbl_count  := G_dlvr_actions_in_tbl_count + 1;
29052 
29053         IF p_debug_mode = 'Y' THEN
29054            pa_debug.g_err_stage := 'Loading action ['|| p_action_name||'] element [ '||G_dlvr_actions_in_tbl_count ||']';
29055            pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29056         END IF;
29057 
29058 -- assign incoming parameters to the global table fields
29059     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_name                  := p_action_name                   ;
29060     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_owner_id              := p_action_owner_id               ;
29061     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_id                    := p_action_id                     ;
29062     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).function_code                := p_function_code                 ;
29063     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).due_date                     := p_due_date                      ;
29064     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).description                  := p_description                   ;
29065     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).completion_date              := p_completion_date               ;
29066     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_source_code               := p_pm_source_code                ;
29067     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_action_reference          := p_pm_action_reference           ;
29068     -- for bug# 3729250
29069     -- G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).carrying_out_org_id          := p_carrying_out_org_id           ;
29070     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_deliverable_reference     := p_pm_deliverable_reference      ;
29071     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).deliverable_id               := p_deliverable_id                ;
29072    -- added for bug# 3729250
29073     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).financial_task_reference     := p_financial_task_reference      ;
29074     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).financial_task_id            := p_financial_task_id             ;
29075     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).destination_type_code        := p_destination_type_code         ;
29076     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).receiving_org_id             := p_receiving_org_id              ;
29077     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).receiving_location_id        := p_receiving_location_id         ;
29078     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).po_need_by_date              := p_po_need_by_date               ;
29079     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).vendor_id                    := p_vendor_id                     ;
29080     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).vendor_site_code             := p_vendor_site_code              ;
29081 --  G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_currency             := p_project_currency              ;
29082     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).Quantity                     := p_Quantity                      ;
29083     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).uom_code                     := p_uom_code                      ;
29084     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).unit_price                   := p_unit_price                    ;
29085     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate_type           := p_exchange_rate_type            ;
29086     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate_date           := p_exchange_rate_date            ;
29087     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate                := p_exchange_rate                 ;
29088     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_type             := p_expenditure_type              ;
29089     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_org_id           := p_expenditure_org_id            ;
29090     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_item_date        := p_expenditure_item_date         ;
29091     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).requisition_line_type_id     := p_requisition_line_type_id      ;
29092     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).category_id                  := p_category_id                   ;
29093     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ready_to_procure_flag        := p_ready_to_procure_flag         ;
29094     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_procure_flag        := p_initiate_procure_flag         ;
29095     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_from_organization_id    := p_ship_from_organization_id     ;
29096     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_from_location_id        := p_ship_from_location_id         ;
29097     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_to_organization_id      := p_ship_to_organization_id       ;
29098     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_to_location_id          := p_ship_to_location_id           ;
29099     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).demand_schedule              := p_demand_schedule               ;
29100     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expected_shipment_date       := p_expected_shipment_date        ;
29101     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).promised_shipment_date       := p_promised_shipment_date        ;
29102     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).volume                       := p_volume                        ;
29103     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).volume_uom                   := p_volume_uom                    ;
29104     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).weight                       := p_weight                        ;
29105     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).weight_uom                   := p_weight_uom                    ;
29106     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ready_to_ship_flag           := p_ready_to_ship_flag               ;
29107     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_planning_flag       := p_initiate_planning_flag        ;
29108     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_shipping_flag       := p_initiate_shipping_flag        ;
29109     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_type                   := p_event_type                    ;
29110     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).currency                     := p_currency                      ;
29111     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).invoice_amount               := p_invoice_amount                ;
29112     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).revenue_amount               := p_revenue_amount                ;
29113     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_date                   := p_event_date                    ;
29114     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_number                 := p_event_number                  ;
29115     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).organization_id              := p_organization_id               ;
29116     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).bill_hold_flag               := p_bill_hold_flag                ;
29117     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate_type := p_project_functional_rate_type  ;
29118     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate_date := p_project_functional_rate_date  ;
29119     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate      := p_project_functional_rate       ;
29120     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate_type            := p_project_rate_type             ;
29121     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate_date            := p_project_rate_date             ;
29122     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate                 := p_project_rate                  ;
29123     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate_type            := p_funding_rate_type             ;
29124     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate_date            := p_funding_rate_date             ;
29125     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate                 := p_funding_rate                  ;
29126     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_event_reference           := p_pm_event_reference            ; -- 3651489 added parameter
29127     END IF;
29128 
29129 EXCEPTION
29130 
29131   WHEN FND_API.G_EXC_ERROR
29132   THEN
29133   ROLLBACK TO load_action_pub;
29134 
29135   x_return_status := FND_API.G_RET_STS_ERROR;
29136 
29137 
29138   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29139   THEN
29140   ROLLBACK TO load_action_pub;
29141 
29142   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29143 
29144 
29145   WHEN OTHERS THEN
29146   ROLLBACK TO load_action_pub;
29147 
29148   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29149 
29150   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29151   THEN
29152     FND_MSG_PUB.add_exc_msg
29153         ( p_pkg_name    => G_PKG_NAME
29154         , p_procedure_name  => l_api_name  );
29155 
29156   END IF;
29157 
29158 END load_action;
29159 
29160 --------------------------------------------------------------------------------
29161 --Name:               load_actions
29162 --Type:               Procedure
29163 --Description:        This procedure can be used to load Actions from input
29164 --                     paramters to global tables
29165 --
29166 --Called subprograms:
29167 --
29168 --
29169 --
29170 --History:
29171 --    03-Mar-2004   Puneet            Created
29172 --
29173 PROCEDURE load_actions
29174 (   p_api_version                  IN  NUMBER            := 1.0
29175   , p_init_msg_list                IN  VARCHAR2          := FND_API.G_TRUE
29176   , p_debug_mode                   IN  VARCHAR2          := 'N'
29177   , x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29178   --, p_action_name                  IN  PA_VC_1000_240  := PA_VC_1000_240(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29179   , p_action_name                  IN  PA_VC_1000_150    := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29180   , p_action_id                    IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29181   , p_action_owner_id              IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29182   , p_function_code                IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29183   , p_due_date                     IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29184   , p_description                  IN  PA_VC_1000_2000   := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29185   , p_completion_date              IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29186   , p_pm_source_code               IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29187   , p_pm_action_reference          IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29188   -- for bug# 3729250
29189   --  , p_carrying_out_org_id          IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29190   , p_pm_deliverable_reference     IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29191   , p_deliverable_id               IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29192   -- added for bug# 3729250
29193   , p_financial_task_reference     IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29194   , p_financial_task_id            IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29195   , p_destination_type_code        IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29196   , p_receiving_org_id             IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29197   , p_receiving_location_id        IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29198   , p_po_need_by_date              IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29199   , p_vendor_id                    IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29200   , p_vendor_site_code             IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29201 --  , p_project_currency             IN  PA_VC_1000_25   := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29202   , p_Quantity                     IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29203   , p_uom_code                     IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29204   , p_unit_price                   IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29205   , p_exchange_rate_type           IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29206   , p_exchange_rate_date           IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29207   , p_exchange_rate                IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)   /* Bug # 3590235 */
29208   , p_expenditure_type             IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29209   , p_expenditure_org_id           IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29210   , p_expenditure_item_date        IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29211   , p_requisition_line_type_id     IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29212   , p_category_id                  IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29213 --  , p_ready_to_procure_flag        IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29214 --  , p_initiate_procure_flag        IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29215   , p_ready_to_procure_flag        IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29216   , p_initiate_procure_flag        IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29217   , p_ship_from_organization_id    IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29218   , p_ship_from_location_id        IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29219   , p_ship_to_organization_id      IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29220   , p_ship_to_location_id          IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29221   , p_demand_schedule              IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29222   , p_expected_shipment_date       IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29223   , p_promised_shipment_date       IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29224   , p_volume                       IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29225   , p_volume_uom                   IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29226   , p_weight                       IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29227   , p_weight_uom                   IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29228 --  , p_ready_to_ship_flag           IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29229 --  , p_initiate_planning_flag       IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29230 --  , p_initiate_shipping_flag       IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29231   , p_ready_to_ship_flag           IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29232   , p_initiate_planning_flag       IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29233   , p_initiate_shipping_flag       IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29234   , p_event_type                   IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29235   , p_currency                     IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29236   , p_invoice_amount               IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29237   , p_revenue_amount               IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29238   , p_event_date                   IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29239   , p_event_number                 IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29240   , p_organization_id              IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29241   , p_bill_hold_flag               IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29242   , p_project_functional_rate_type IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29243   , p_project_functional_rate_date IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29244   , p_project_functional_rate      IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29245   , p_project_rate_type            IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29246   , p_project_rate_date            IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29247   , p_project_rate                 IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29248   , p_funding_rate_type            IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29249   , p_funding_rate_date            IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29250   , p_funding_rate                 IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29251   , p_pm_event_reference           IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- 3651489 added parameter
29252 )
29253   IS
29254 
29255    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_actions';
29256    l_return_status VARCHAR2(1) := null;
29257 
29258 BEGIN
29259 
29260 --  Standard begin of API savepoint
29261 
29262     SAVEPOINT load_actions_pub;
29263 
29264 --  Standard call to check for call compatibility.
29265 
29266     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
29267                                p_api_version  ,
29268                                l_api_name         ,
29269                                G_PKG_NAME       )
29270     THEN
29271 
29272        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29273 
29274     END IF;
29275 
29276 --  Initialize the message table if requested.
29277 
29278     IF FND_API.TO_BOOLEAN( p_init_msg_list )
29279     THEN
29280 
29281        FND_MSG_PUB.initialize;
29282 
29283     END IF;
29284 
29285 --  Set API return status to success
29286 
29287     x_return_status := FND_API.G_RET_STS_SUCCESS;
29288 
29289 -- Load the table only if action_name is passed
29290  FOR i in 1..1000 LOOP
29291     IF (p_action_name(i) <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29292          (p_action_name(i) IS NOT NULL) THEN
29293 
29294 -- assign a value to the global counter for this table
29295         G_dlvr_actions_in_tbl_count  := G_dlvr_actions_in_tbl_count + 1;
29296 
29297 -- assign incoming parameters to the global table fields
29298     load_action
29299      (  p_api_version                  => p_api_version
29300       , p_init_msg_list                => p_init_msg_list
29301       , p_debug_mode                   => p_debug_mode
29302       , x_return_status            => l_return_status
29303       , p_action_name                  => p_action_name(i)
29304       , p_action_id                    => p_action_id(i)
29305       , p_action_owner_id              => p_action_owner_id(i)
29306       , p_function_code                => p_function_code(i)
29307       , p_due_date                     => p_due_date(i)
29308       , p_description                  => p_description(i)
29309       , p_completion_date              => p_completion_date(i)
29310       , p_pm_source_code               => p_pm_source_code(i)
29311       , p_pm_action_reference          => p_pm_action_reference(i)
29312       -- for bug# 3729250
29313       --      , p_carrying_out_org_id          => p_carrying_out_org_id(i)
29314       , p_pm_deliverable_reference     => p_pm_deliverable_reference(i)
29315       , p_deliverable_id               => p_deliverable_id(i)
29316       , p_financial_task_reference     => p_financial_task_reference(i) -- added for bug# 3729250
29317       , p_financial_task_id            => p_financial_task_id(i)
29318       , p_destination_type_code        => p_destination_type_code(i)
29319       , p_receiving_org_id             => p_receiving_org_id(i)
29320       , p_receiving_location_id        => p_receiving_location_id(i)
29321       , p_po_need_by_date              => p_po_need_by_date(i)
29322       , p_vendor_id                    => p_vendor_id(i)
29323       , p_vendor_site_code             => p_vendor_site_code(i)
29324 --    , p_project_currency             => p_project_currency(i)
29325       , p_Quantity                     => p_Quantity(i)
29326       , p_uom_code                     => p_uom_code(i)
29327       , p_unit_price                   => p_unit_price(i)
29328       , p_exchange_rate_type           => p_exchange_rate_type(i)
29329       , p_exchange_rate_date           => p_exchange_rate_date(i)
29330       , p_exchange_rate                => p_exchange_rate(i)
29331       , p_expenditure_type             => p_expenditure_type(i)
29332       , p_expenditure_org_id           => p_expenditure_org_id(i)
29333       , p_expenditure_item_date        => p_expenditure_item_date(i)
29334       , p_requisition_line_type_id     => p_requisition_line_type_id(i)
29335       , p_category_id                  => p_category_id(i)
29336       , p_ready_to_procure_flag        => p_ready_to_procure_flag(i)
29337       , p_initiate_procure_flag        => p_initiate_procure_flag(i)
29338       , p_ship_from_organization_id    => p_ship_from_organization_id(i)
29339       , p_ship_from_location_id        => p_ship_from_location_id(i)
29340       , p_ship_to_organization_id      => p_ship_to_organization_id(i)
29341       , p_ship_to_location_id          => p_ship_to_location_id(i)
29342       , p_demand_schedule              => p_demand_schedule(i)
29343       , p_expected_shipment_date       => p_expected_shipment_date(i)
29344       , p_promised_shipment_date       => p_promised_shipment_date(i)
29345       , p_volume                       => p_volume(i)
29346       , p_volume_uom                   => p_volume_uom(i)
29347       , p_weight                       => p_weight(i)
29348       , p_weight_uom                   => p_weight_uom(i)
29349       , p_ready_to_ship_flag           => p_ready_to_ship_flag(i)
29350       , p_initiate_planning_flag       => p_initiate_planning_flag(i)
29351       , p_initiate_shipping_flag       => p_initiate_shipping_flag(i)
29352       , p_event_type                   => p_event_type(i)
29353       , p_currency                     => p_currency(i)
29354       , p_invoice_amount               => p_invoice_amount(i)
29355       , p_revenue_amount               => p_revenue_amount(i)
29356       , p_event_date                   => p_event_date(i)
29357       , p_event_number                 => p_event_number(i)
29358       , p_organization_id              => p_organization_id(i)
29359       , p_bill_hold_flag               => p_bill_hold_flag(i)
29360       , p_project_functional_rate_type => p_project_functional_rate_type(i)
29361       , p_project_functional_rate_date => p_project_functional_rate_date(i)
29362       , p_project_functional_rate      => p_project_functional_rate(i)
29363       , p_project_rate_type            => p_project_rate_type(i)
29364       , p_project_rate_date            => p_project_rate_date(i)
29365       , p_project_rate                 => p_project_rate(i)
29366       , p_funding_rate_type            => p_funding_rate_type(i)
29367       , p_funding_rate_date            => p_funding_rate_date(i)
29368       , p_funding_rate                 => p_funding_rate(i)
29369       , p_pm_event_reference           => p_pm_event_reference(i)  -- 3651489 added parameter
29370     );
29371 
29372     END IF;
29373 END LOOP;
29374 
29375 EXCEPTION
29376 
29377   WHEN FND_API.G_EXC_ERROR
29378   THEN
29379   ROLLBACK TO load_actions_pub;
29380 
29381   x_return_status := FND_API.G_RET_STS_ERROR;
29382 
29383 
29384   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29385   THEN
29386   ROLLBACK TO load_actions_pub;
29387 
29388   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29389 
29390 
29391   WHEN OTHERS THEN
29392   ROLLBACK TO load_actions_pub;
29393 
29394   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29395 
29396   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29397   THEN
29398     FND_MSG_PUB.add_exc_msg
29399         ( p_pkg_name    => G_PKG_NAME
29400         , p_procedure_name  => l_api_name  );
29401 
29402   END IF;
29403 
29404 END load_actions;
29405 
29406 
29407 --------------------------------------------------------------------------------
29408 --Name:               Create_Deliverable
29409 --Type:               Procedure
29410 --Description:        This procedure creates a deliverable and its related actions
29411 --                    which are passed through actions PLSQL table
29412 --
29413 --Called subprograms:   PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
29414 --                      Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
29415 --
29416 --
29417 --
29418 --History:
29419 --    08-Mar-2004   Puneet            Created
29420 --
29421 
29422 PROCEDURE create_deliverable
29423 (   p_api_version            IN  NUMBER     := 1.0
29424   , p_init_msg_list          IN  VARCHAR2   := FND_API.G_TRUE
29425   , p_commit                 IN  VARCHAR2   := FND_API.G_FALSE
29426   , p_debug_mode             IN  VARCHAR2   := 'N'
29427   , x_return_status          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29428   , p_deliverable_name       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29429   , p_deliverable_short_name IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29430   , p_deliverable_type_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29431   , p_deliverable_owner_id   IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29432   , p_description            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29433   , p_status_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29434   , p_due_date               IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29435   , p_completion_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29436   , p_progress_weight        IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29437   , px_deliverable_id        IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
29438   , p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29439   -- for bug# 3729250
29440   --  , p_carrying_out_org_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29441   , p_task_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29442   , p_task_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29443   , p_project_id             IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29444   , p_proj_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29445   , p_action_in_tbl          IN  action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
29446   , x_action_out_tbl         OUT NOCOPY action_out_tbl_type /*Added the nocopy check for 4537865 */
29447   , p_item_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29448   , P_inventory_org_id       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29449   , p_quantity               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29450   , p_uom_code               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29451   -- for bug# 3729250
29452   --  , p_item_description       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29453   , p_unit_price             IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29454   -- for bug# 3729250
29455   , p_unit_number            IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29456   , p_currency_code          IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29457   , p_pm_source_code         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR              /* Bug no. 3651113 */
29458   , x_msg_count              OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
29459   , x_msg_data               OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
29460   )
29461 
29462   IS
29463 
29464     l_project_id NUMBER;
29465     l_task_id    NUMBER;
29466     l_project_number          Pa_Projects_All.Segment1%TYPE;
29467     l_task_number             Pa_Proj_Elements.Name%TYPE;
29468     l_task_source_reference VARCHAR2(240);
29469     l_deliverable_element_id NUMBER;
29470     l_deliverable_version_id  NUMBER;
29471     l_dlvr_prg_enabled     VARCHAR2(1) := NULL;
29472     l_dlvr_action_enabled  VARCHAR2(1) := NULL;
29473     l_dlvr_enabled         VARCHAR2(1) := NULL;
29474     l_status_code   PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
29475 
29476     l_unique_flag  VARCHAR2(1) := null;
29477     l_err_message    Fnd_New_Messages.Message_text%TYPE;  -- for AMG message
29478 
29479     l_data                       VARCHAR2(2000); -- 4537865
29480     l_action_in_tbl action_in_tbl_type;
29481     l_action_out_tlb action_out_tbl_type;
29482 
29483     l_api_name      CONSTANT  VARCHAR2(30)     := 'CREATE_DELIVERABLES';
29484     l_msg_index_out              NUMBER;
29485 
29486     i       NUMBER := 0;
29487     i_actn  NUMBER := 0;
29488 
29489     l_resp_id NUMBER := FND_GLOBAL.Resp_id;
29490     l_function_allowed      VARCHAR2(1);
29491     l_pm_product_code VARCHAR2(2) :='Z';                          /* Bug 3651113 */
29492 
29493     -- 3651542 added local variable
29494 
29495     l_dlvr_owner_id             PA_PROJ_ELEMENTS.MANAGER_PERSON_ID%TYPE;
29496     l_dlvr_owner_name           PER_ALL_PEOPLE_F.FULL_NAME%TYPE;
29497     l_default_date              DATE;
29498 
29499   /*cursor added for Bug 3651113 */
29500   Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
29501   Is
29502   Select 'X'
29503   from pa_lookups
29504   where lookup_type='PM_PRODUCT_CODE'
29505   and lookup_code = p_pm_product_code;
29506 
29507   l_wp_task_flag varchar2(1); -- Added for bug5462298
29508 
29509 BEGIN
29510  --  Initialize the message table if requested.
29511     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
29512        FND_MSG_PUB.initialize;
29513     END IF;
29514 
29515     -- 3735792 , setting save point unconditionally
29516     -- IF (p_commit = FND_API.G_TRUE) THEN
29517     savepoint CREATE_DELIVERABLE_PUB;
29518     -- END IF;
29519 
29520 -- Validation check for product code : Bug 3651113
29521 
29522     OPEN p_product_code_csr (p_pm_source_code);
29523     FETCH p_product_code_csr INTO l_pm_product_code;
29524     CLOSE p_product_code_csr;
29525 
29526     IF l_pm_product_code <> 'X'
29527            AND p_pm_source_code <> 'WORKPLAN'
29528     THEN
29529          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
29530          THEN
29531          pa_interface_utils_pub.map_new_amg_msg
29532          ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
29533           ,p_msg_attribute    => 'CHANGE'
29534           ,p_resize_flag      => 'N'
29535           ,p_msg_context      => 'GENERAL'
29536           ,p_attribute1       => ''
29537           ,p_attribute2       => ''
29538           ,p_attribute3       => ''
29539           ,p_attribute4       => ''
29540           ,p_attribute5       => '');
29541          END IF;
29542     x_return_status             := FND_API.G_RET_STS_ERROR;
29543     RAISE FND_API.G_EXC_ERROR;
29544     END IF;
29545 
29546     IF p_debug_mode = 'Y' THEN
29547           PA_DEBUG.set_curr_function( p_function   => l_api_name,
29548                                       p_debug_mode => p_debug_mode );
29549           pa_debug.g_err_stage:= 'Inside '||l_api_name;
29550           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
29551      END IF;
29552 
29553    --  Set API return status to success
29554     x_return_status     := FND_API.G_RET_STS_SUCCESS;
29555 
29556 
29557     IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
29558        l_task_id := NULL;
29559     ELSE
29560        l_task_id := p_task_id;
29561     END IF;
29562 
29563 
29564     IF p_task_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
29565        l_task_source_reference := NULL;
29566     ELSE
29567        l_task_source_reference := p_task_source_reference;
29568     END IF;
29569 
29570 
29571 
29572     -- Function Security Check
29573     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
29574     (p_api_version_number => p_api_version,
29575      p_responsibility_id  => l_resp_id,
29576      p_function_name      => 'PA_DELIVERABLE_EDIT',
29577      p_msg_count          => x_msg_count,
29578      p_msg_data           => x_msg_data,
29579      p_return_status      => x_return_status,
29580      p_function_allowed   => l_function_allowed);
29581 
29582      IF p_debug_mode = 'Y' THEN
29583           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
29584      END IF;
29585 
29586      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
29587          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29588      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
29589          RAISE FND_API.G_EXC_ERROR;
29590      END IF;
29591 
29592     IF l_function_allowed = 'N' THEN
29593          PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
29594                              ,p_msg_name         => 'PA_FUNCTION_SECURITY_ENFORCED');
29595          x_return_status := FND_API.G_RET_STS_ERROR;
29596          RAISE FND_API.G_EXC_ERROR;
29597      END IF;
29598 
29599  -- validate the input parameters.
29600  -- Get the task and Project details based on source reference passed
29601     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
29602                     p_pm_project_reference =>   p_proj_source_reference
29603                  ,  p_pa_project_id     =>      p_project_id
29604                  ,  p_out_project_id    =>      l_project_id
29605                  ,  p_return_status     =>      x_return_status
29606         );
29607 
29608     IF p_debug_mode = 'Y' THEN
29609          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
29610     END IF;
29611 
29612     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
29613         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
29614     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
29615         RAISE  FND_API.G_EXC_ERROR;
29616     END IF;
29617 
29618     IF ( l_task_id IS NOT NULL OR l_task_source_reference IS NOT NULL ) THEN
29619        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
29620                    p_pa_project_id      => l_project_id
29621                  , p_structure_type     => 'WORKPLAN'
29622                  , p_pa_task_id         => p_task_id
29623                  , p_pm_task_reference  => p_task_source_reference
29624                  , p_out_task_id        => l_task_id
29625                  , p_return_status      => x_return_status );
29626 
29627        IF p_debug_mode = 'Y' THEN
29628            pa_debug.write(g_pkg_name,'Task Ref to ID Return Status ['||x_return_status||']Task ID['||l_task_id||']',3) ;
29629        END IF;
29630 
29631        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
29632              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
29633        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
29634              RAISE FND_API.G_EXC_ERROR;
29635        END IF;
29636 
29637        -- 5462298 Added below code to validate passed task id
29638        -- if it is not workplan task , throw error message
29639 
29640        l_wp_task_flag := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_WORKPLAN_TASK (
29641                                            p_project_id         => l_project_id
29642                                          , p_proj_element_id    => l_task_id );
29643 
29644        IF l_wp_task_flag <> 'Y' THEN
29645 
29646         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
29647         THEN
29648 
29649            PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
29650                                ,p_msg_name         => 'PA_TASK_ID_INVALID');
29651 
29652            x_return_status := FND_API.G_RET_STS_ERROR;
29653            RAISE FND_API.G_EXC_ERROR;
29654 
29655         END IF;
29656 
29657        END IF;
29658 
29659        -- 5462298 end
29660 
29661     END IF;
29662 
29663  -- Validate Deliverable reference - not null, unique
29664     PA_Deliverable_Utils.is_dlvr_reference_unique(
29665            p_deliverable_reference  => p_pm_deliverable_reference
29666          , p_project_id         => l_project_id
29667          , x_unique_flag        => l_unique_flag
29668          , x_return_status      => x_return_status );
29669 
29670     IF p_debug_mode = 'Y' THEN
29671         pa_debug.write(g_pkg_name,'Dlvr Reference Unique Return Status ['||x_return_status||']Unique['||l_unique_flag||']',3) ;
29672     END IF;
29673 
29674     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
29675         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
29676     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
29677         RAISE FND_API.G_EXC_ERROR;
29678     END IF;
29679 
29680  -- Fetching Task Name , Project Name to use as token in Error Messages.
29681 
29682    IF (l_task_id IS NOT NULL) THEN
29683       SELECT name INTO   l_task_number
29684       FROM Pa_Proj_Elements
29685       WHERE  proj_element_id = l_task_id;
29686    ELSE
29687        l_task_number := null;
29688    END IF;
29689 
29690    SELECT segment1 INTO   l_project_number
29691    FROM Pa_Projects_All
29692    WHERE  project_id = l_project_id;
29693 
29694     IF p_debug_mode = 'Y' THEN
29695        pa_debug.g_err_stage := 'Creating deliverable ['|| p_deliverable_short_name||']['||p_pm_deliverable_reference||']['
29696                                 ||p_deliverable_owner_id||']['||p_deliverable_Type_id||']['||l_project_id||']['||l_task_id||']';
29697        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29698     END IF;
29699 
29700  -- Check if deliverable is enabled for project.
29701  -- If not then first enable it before creating the deliverable.
29702 
29703     -- 3700247, check for G_DLVR_STRUCTURE_ENABLED parameter, if it is null,
29704     -- check for target project, whether deliverable is enabled or not
29705     -- if deliverable is not enabled and deliverables are loaded, throw error message
29706 
29707     IF p_debug_mode = 'Y' THEN
29708        pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
29709        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29710     END IF;
29711 
29712     IF G_DLVR_STRUCTURE_ENABLED IS NULL THEN
29713         G_DLVR_STRUCTURE_ENABLED := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_id);
29714 
29715         IF p_debug_mode = 'Y' THEN
29716            pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
29717            pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29718         END IF;
29719     END IF;
29720 
29721     IF G_DLVR_STRUCTURE_ENABLED = 'N' THEN
29722         PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
29723                             ,p_msg_name         => 'PA_DLV_STRUCTURE_DISABLED');
29724         x_return_status := FND_API.G_RET_STS_ERROR;
29725         RAISE FND_API.G_EXC_ERROR;
29726     END IF;
29727 
29728     -- 3700247, if deliverable structure is not enabled for target and deliverables are passed in loading,
29729     -- error message is thrown. So, removing the below code , which enables the structure for the target project in
29730     -- above condition.
29731 
29732 /*
29733     l_dlvr_enabled := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_id);
29734 
29735     IF p_debug_mode = 'Y' THEN
29736        pa_debug.g_err_stage := 'Deliverable Enabled ['||l_dlvr_enabled||']';
29737        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29738     END IF;
29739 
29740     IF ( l_dlvr_enabled = 'N' ) THEN
29741 
29742     Pa_Deliverable_Utils.enable_deliverable(
29743            p_api_version            => p_api_version
29744          , p_init_msg_list          => FND_API.G_FALSE
29745          , p_commit                 => p_commit
29746          , p_debug_mode             => p_debug_mode
29747          , p_validate_only          => FND_API.G_FALSE
29748          , p_project_id             => l_project_id
29749          , x_return_status          => x_return_status
29750          , x_msg_count              => x_msg_count
29751          , x_msg_data               => x_msg_data
29752          );
29753 
29754         IF p_debug_mode = 'Y' THEN
29755             pa_debug.write(g_pkg_name,'Pa_Deliverable_Utils.enable_deliverable Return Status ['||x_return_status||']',3) ;
29756         END IF;
29757 
29758         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
29759             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
29760         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
29761             RAISE FND_API.G_EXC_ERROR;
29762         END IF;
29763 
29764     END IF; -- deliverable not enabled
29765 */
29766 
29767 
29768    -- 3651542 if deliverable onwer and date is not passed
29769    -- call util api to retrieve default value and assign it to local variables
29770    -- if it is passed, use the passed owner id and due date
29771 
29772    -- here in defaulting , considered only project flow
29773    -- task flow is not considered and passing task ver id as NULL
29774 
29775    IF p_deliverable_owner_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
29776        PA_DELIVERABLE_UTILS.GET_DEFAULT_DLVR_OWNER
29777             (
29778                  p_project_id   =>  p_project_id
29779                 ,p_task_ver_id  =>  NULL
29780                 ,x_owner_id     =>  l_dlvr_owner_id
29781                 ,x_owner_name   =>  l_dlvr_owner_name
29782             );
29783    ELSE
29784        l_dlvr_owner_id := p_deliverable_owner_id;
29785    END IF;
29786 
29787    IF p_due_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
29788        PA_DELIVERABLE_UTILS.GET_DEFAULT_DLVR_DATE
29789             (
29790                  p_project_id   =>  p_project_id
29791                 ,p_task_ver_id  =>  NULL
29792                 ,x_due_date     =>  l_default_date
29793             );
29794    ELSE
29795        l_default_date := p_due_date;
29796    END IF;
29797 
29798    -- 3651542 end
29799 
29800  -- All other validations done in PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
29801  --invoke the api to create deliverable
29802     Pa_Deliverable_Pub.Create_Deliverable
29803     (  p_api_version            =>  p_api_version
29804      , p_init_msg_list          =>  FND_API.G_FALSE -- passed as false as doesn't want message stack to be reset.
29805       -- 3735792, passing p_commit as false to next level api calls
29806      , p_commit                 =>  FND_API.G_FALSE
29807      , p_validate_only          =>  FND_API.G_FALSE
29808      , p_validation_level       =>  FND_API.G_VALID_LEVEL_FULL
29809      , p_calling_module         =>  'AMG'
29810      , p_debug_mode             =>  p_debug_mode
29811      , p_max_msg_count          =>  NULL
29812      , p_record_version_number  =>  1
29813      , p_object_type            =>  'PA_DELIVERABLES'
29814      , p_project_id             =>  l_project_id
29815      , p_dlvr_number            =>  p_deliverable_short_name
29816      , p_dlvr_name              =>  p_deliverable_name
29817      , p_dlvr_description       =>  p_description
29818      , p_dlvr_owner_id          =>  l_dlvr_owner_id     -- for bug# 3651542, earlier p_deliverable_owner_id was passed
29819      , p_dlvr_owner_name        =>  NULL
29820      -- for bug# 3729250
29821      --     , p_carrying_out_org_id    =>  p_carrying_out_org_id
29822      , p_carrying_out_org_name  =>  NULL
29823      , p_dlvr_version_id        =>  null
29824      , p_status_code            =>  p_status_code
29825      , p_parent_structure_id    =>  NULL
29826      , p_dlvr_type_id           =>  p_deliverable_type_id
29827      , p_dlvr_type_name         =>  NULL
29828      , p_progress_weight        =>  p_progress_weight
29829      , p_scheduled_finish_date  =>  l_default_date      -- for bug# 3651542, earlier p_due_date was passed
29830      , p_actual_finish_date     =>  p_completion_date
29831      , p_task_id                =>  l_task_id
29832      , p_task_version_id        =>  null
29833      , p_task_name              =>  null
29834      , p_deliverable_reference  =>  p_pm_deliverable_reference
29835      , p_item_id                =>  p_item_id
29836      , p_inventory_org_id       =>  p_inventory_org_id
29837      , p_quantity               =>  p_quantity
29838      , p_uom_code               =>  p_uom_code
29839      -- for bug# 3729250
29840      --     , p_item_description       =>  p_item_description
29841      , p_unit_price             =>  p_unit_price
29842      , p_unit_number            =>  p_unit_number
29843      , p_currency_code          =>  p_currency_code
29844      , p_dlvr_item_id           =>  px_deliverable_id
29845      , p_pm_source_code         =>  p_pm_source_code                       /* Bug no. 3651113 */
29846      , x_return_status          =>  x_return_status
29847      , x_msg_count              =>  x_msg_count
29848      , x_msg_data               =>  x_msg_data
29849     );
29850 
29851        l_deliverable_element_id := px_deliverable_id ;
29852 
29853     IF p_debug_mode = 'Y' THEN
29854        pa_debug.g_err_stage := 'Created deliverable ['|| l_deliverable_element_id||']['||x_return_status||']';
29855        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29856     END IF;
29857 
29858 
29859    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
29860           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
29861    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
29862           RAISE  FND_API.G_EXC_ERROR;
29863    END IF;
29864 -- Will create actions only when deliverable type of deliverable
29865 -- has action creation enabled.
29866 
29867    Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
29868    (
29869        p_dlvr_type_id                 =>  p_deliverable_type_id
29870       ,x_dlvr_prg_enabled             =>  l_dlvr_prg_enabled
29871       ,x_dlvr_action_enabled          =>  l_dlvr_action_enabled
29872       ,x_dlvr_default_status_code     =>  l_status_code
29873     );
29874 
29875     IF p_debug_mode = 'Y' THEN
29876        pa_debug.g_err_stage := 'Dlvr Type allow action creation ['|| l_dlvr_action_enabled||']';
29877        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29878     END IF;
29879 
29880 -- invoke the api pa_actions_pub.create_dlvr_action_wrapper
29881 -- to create actions for the deliverable, insert records
29882 -- in OKE tables, create events if required.
29883 
29884    i := p_action_in_tbl.first();
29885    l_action_in_tbl.delete;
29886 
29887 
29888    WHILE (i IS NOT NULL ) LOOP
29889       IF ( p_pm_deliverable_reference = p_action_in_tbl(i).pm_deliverable_reference) THEN
29890           i_actn := i_actn + 1;
29891           l_action_in_tbl(i_actn) := p_action_in_tbl(i);
29892           l_action_in_tbl(i_actn).deliverable_id   :=  l_deliverable_element_id;
29893 
29894          -- added for bug# 3749447
29895          -- if pm_source_code is not passed in action record, use it from deliverable record
29896          IF p_action_in_tbl(i).pm_source_code IS NOT NULL and p_action_in_tbl(i).pm_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
29897              l_action_in_tbl(i_actn).pm_source_code := p_pm_source_code;
29898          END IF;
29899 
29900       END IF;
29901       i := p_action_in_tbl.next(i);
29902    END LOOP;
29903 
29904     IF p_debug_mode = 'Y' THEN
29905        pa_debug.g_err_stage := 'About to Create ['|| i_actn ||'] out of ['||i ||'] Actn enabled ['||l_dlvr_action_enabled||']';
29906        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29907     END IF;
29908 
29909 
29910    IF (i_actn > 0 ) THEN
29911 
29912        IF ( l_dlvr_action_enabled = 'Y') THEN
29913 
29914           Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
29915           ( p_api_version            => p_api_version
29916           , p_init_msg_list          => FND_API.G_FALSE
29917           , p_commit                 => FND_API.G_FALSE
29918           , p_validate_only          => FND_API.G_FALSE
29919           , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
29920           , p_calling_module         => 'AMG'
29921           , p_debug_mode             => p_debug_mode
29922           , p_insert_or_update       => 'INSERT'
29923           , p_action_in_tbl          => l_action_in_tbl
29924           , x_action_out_tbl         => x_action_out_tbl
29925           , x_return_status          => x_return_status
29926           , x_msg_count              => x_msg_count
29927           , x_msg_data               => x_msg_data);
29928 
29929          IF p_debug_mode = 'Y' THEN
29930              pa_debug.g_err_stage := 'Returned after Create actions for ['|| i_actn ||'] action return['||x_return_status||']';
29931              pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29932          END IF;
29933 
29934          IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
29935                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
29936          ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
29937                 RAISE  FND_API.G_EXC_ERROR;
29938          END IF;
29939 
29940       ELSE --l_dlvr_action_enabled <> 'Y'
29941 
29942             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)  THEN
29943                 l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
29944                 PA_UTILS.ADD_MESSAGE
29945                                (p_app_short_name => 'PA',
29946                                 p_msg_name       => 'PA_DLVR_VALID_ERR',
29947                                 p_token1         => 'PROJECT',
29948                                 p_value1         =>  l_project_number,
29949                                 p_token2         =>  'TASK',
29950                                 p_value2         =>  l_task_number,
29951                                 p_token3         => 'DLVR_REFERENCE',
29952                                 p_value3         =>  p_pm_deliverable_reference,
29953                                 p_token4         => 'MESSAGE',
29954                                 p_value4         =>  l_err_message
29955                                );
29956             END IF;
29957 
29958             x_return_status             := FND_API.G_RET_STS_ERROR;
29959             RAISE FND_API.G_EXC_ERROR;
29960       END IF; -- l_dlvr_action_enabled = 'Y'
29961 
29962    END IF; --i_actn > 0
29963 
29964    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
29965    IF (p_commit = FND_API.G_TRUE) THEN
29966        COMMIT;
29967    END IF;
29968 
29969    IF p_debug_mode = 'Y' THEN
29970        pa_debug.reset_curr_function;
29971        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
29972    END IF;
29973 
29974 EXCEPTION
29975    WHEN FND_API.G_EXC_ERROR        THEN
29976       -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
29977       --IF (p_commit = FND_API.G_TRUE) THEN
29978       ROLLBACK TO CREATE_DELIVERABLE_PUB;
29979       --END IF;
29980 
29981       IF p_debug_mode = 'Y' THEN
29982           pa_debug.reset_curr_function;
29983           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
29984       END IF;
29985       x_return_status := FND_API.G_RET_STS_ERROR;
29986       x_msg_count := FND_MSG_PUB.count_msg;
29987 
29988       IF x_msg_count = 1 THEN
29989            PA_INTERFACE_UTILS_PUB.get_messages
29990                (p_encoded        => FND_API.G_FALSE,
29991                 p_msg_index      => 1,
29992                 p_msg_count      => x_msg_count,
29993                 p_msg_data       => x_msg_data,
29994                 p_data           => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
29995                 p_msg_index_out  => l_msg_index_out);
29996         x_msg_data := l_data ; -- 4537865
29997      END IF;
29998 
29999    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
30000       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
30001       --IF (p_commit = FND_API.G_TRUE) THEN
30002       ROLLBACK TO CREATE_DELIVERABLE_PUB;
30003       --END IF;
30004 
30005       IF p_debug_mode = 'Y' THEN
30006           pa_debug.reset_curr_function;
30007           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
30008       END IF;
30009       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30010       x_msg_count := FND_MSG_PUB.count_msg;
30011 
30012       IF x_msg_count = 1 THEN
30013            PA_INTERFACE_UTILS_PUB.get_messages
30014                (p_encoded        => FND_API.G_FALSE,
30015                 p_msg_index      => 1,
30016                 p_msg_count      => x_msg_count,
30017                 p_msg_data       => x_msg_data,
30018                 p_data           => l_data, --  4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
30019                 p_msg_index_out  => l_msg_index_out);
30020                 x_msg_data := l_data ; -- 4537865
30021      END IF;
30022 
30023    WHEN OTHERS THEN
30024       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
30025       --IF (p_commit = FND_API.G_TRUE) THEN
30026       ROLLBACK TO CREATE_DELIVERABLE_PUB;
30027       --END IF;
30028 
30029       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30030       x_msg_count := 1;
30031       x_msg_data := SQLERRM;
30032 
30033       IF p_debug_mode = 'Y' THEN
30034           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
30035           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
30036           pa_debug.reset_curr_function;
30037       END IF;
30038 
30039    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
30040        FND_MSG_PUB.add_exc_msg
30041                    ( p_pkg_name            => G_PKG_NAME
30042                    , p_procedure_name      => l_api_name   );
30043   END IF;
30044 END create_deliverable;
30045 
30046 PROCEDURE create_deliverable_action
30047 (   p_api_version                  IN  NUMBER   := 1.0
30048   , p_init_msg_list                IN  VARCHAR2 := FND_API.G_TRUE
30049   , p_debug_mode                   IN  VARCHAR2 := FND_API.G_FALSE
30050   , p_commit                       IN  VARCHAR2 := FND_API.G_FALSE
30051   , p_action_name                  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30052   , p_action_owner_id              IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30053   , p_function_code                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30054   , p_due_date                     IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30055   , p_description                  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30056   , p_completion_date              IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30057   , p_pm_source_code               IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30058   , p_pm_action_reference          IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30059   -- for bug# 3729250
30060   --  , p_carrying_out_org_id          IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30061   , p_deliverable_reference        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30062   , p_deliverable_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30063   -- added for bug# 3729250
30064   , p_pm_proj_reference            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30065   , p_project_id                   IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30066   -- added for bug# 3729250
30067   , p_financial_task_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30068   , p_financial_task_id            IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30069   , p_destination_type_code        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30070   , p_receiving_org_id             IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30071   , p_receiving_location_id        IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30072   , p_po_need_by_date              IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30073   , p_vendor_id                    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30074   , p_vendor_site_code             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30075 --  , p_project_currency             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30076   , p_Quantity                     IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30077   , p_uom_code                     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30078   , p_unit_price                   IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30079   , p_exchange_rate_type           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30080   , p_exchange_rate_date           IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30081   , p_exchange_rate                IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30082   , p_expenditure_type             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30083   , p_expenditure_org_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30084   , p_expenditure_item_date        IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30085   , p_requisition_line_type_id     IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30086   , p_category_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30087   , p_ready_to_procure_flag        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30088   , p_initiate_procure_flag        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30089   , p_ship_from_organization_id    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30090   , p_ship_from_location_id        IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30091   , p_ship_to_organization_id      IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30092   , p_ship_to_location_id          IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30093   , p_demand_schedule              IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30094   , p_expected_shipment_date       IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30095   , p_promised_shipment_date       IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30096   , p_volume                       IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30097   , p_volume_uom                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30098   , p_weight                       IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30099   , p_weight_uom                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30100   , p_ready_to_ship_flag           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30101   , p_initiate_planning_flag       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30102   , p_initiate_shipping_flag       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30103   , p_event_type                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30104   , p_currency                     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3749462 changed datatype
30105   , p_invoice_amount               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30106   , p_revenue_amount               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30107   , p_event_date                   IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30108   , p_event_number                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30109   , p_organization_id              IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30110   , p_bill_hold_flag               IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30111   , p_project_functional_rate_type IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30112   , p_project_functional_rate_date IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30113   , p_project_functional_rate      IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30114   , p_project_rate_type            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30115   , p_project_rate_date            IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30116   , p_project_rate                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30117   , p_funding_rate_type            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30118   , p_funding_rate_date            IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30119   , p_funding_rate                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30120   , p_pm_event_reference           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
30121   , x_action_out                   OUT NOCOPY  action_out_tbl_type
30122   , x_return_status                OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
30123   , x_msg_count                    OUT NOCOPY NUMBER     /*Added the nocopy check for 4537865 */
30124   , x_msg_data                     OUT NOCOPY VARCHAR2   /*Added the nocopy check for 4537865 */
30125   )
30126 IS
30127 
30128     -- 3749462 changed the cursor, added two parameters and using it
30129     Cursor C_dlvr_type(l_project_id NUMBER, l_deliverable_id NUMBER) IS
30130        SELECT type_id
30131        FROM   PA_PROJ_ELEMENTS
30132        WHERE  proj_element_id = l_deliverable_id
30133        AND    project_id      = l_project_id
30134        AND    OBJECT_TYPE     = 'PA_DELIVERABLES';
30135 
30136     l_api_name      CONSTANT  VARCHAR2(30)     := 'create_deliverable_actions';
30137 
30138     l_action_in_tbl   action_in_tbl_type ;
30139     l_action_out_tbl  action_out_tbl_type ;
30140 
30141     l_project_id NUMBER;
30142     l_task_id    NUMBER;
30143     l_project_number          Pa_Projects_All.Segment1%TYPE;
30144     l_task_number             Pa_Proj_Elements.Name%TYPE;
30145     l_dlvr_type_id            Pa_Proj_Elements.type_id%TYPE;
30146 
30147     l_dlvr_prg_enabled  VARCHAR2(1) := NULL;
30148     l_dlvr_action_enabled  VARCHAR2(1) := NULL;
30149     l_status_code   PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
30150 
30151     l_msg_index_out              NUMBER;
30152     l_msg_count                  NUMBER ;
30153     l_data                       VARCHAR2(2000);
30154     l_msg_data                   VARCHAR2(2000);
30155     l_err_message                VARCHAR2(2000);
30156     l_unique_flag                VARCHAR2(1);
30157 
30158     l_function_allowed      VARCHAR2(1);
30159     l_resp_id NUMBER := FND_GLOBAL.Resp_id;
30160 
30161     l_deliverable_id NUMBER := 0;
30162 
30163     i  NUMBER := 1;
30164 
30165     -- 3729250 added local variables
30166     l_fin_task_id   NUMBER := NULL;
30167 
30168 BEGIN
30169 
30170 --  Standard begin of API savepoint
30171 
30172     -- 3735792, setting save point unconditionally
30173  -- IF (p_commit = FND_API.G_TRUE) THEN
30174     SAVEPOINT create_deliverable_actions_pub;
30175  -- END IF;
30176 
30177 --  Standard call to check for call compatibility.
30178     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
30179                                p_api_version  ,
30180                                l_api_name         ,
30181                                G_PKG_NAME       )
30182     THEN
30183        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30184     END IF;
30185 
30186 --  Initialize the message table if requested.
30187     IF FND_API.TO_BOOLEAN( p_init_msg_list )   THEN
30188        FND_MSG_PUB.initialize;
30189     END IF;
30190 
30191     IF p_debug_mode = 'Y' THEN
30192           PA_DEBUG.set_curr_function( p_function   => l_api_name,
30193                                       p_debug_mode => p_debug_mode );
30194           pa_debug.g_err_stage:= 'Inside '||l_api_name;
30195           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
30196     END IF;
30197 
30198 --  Set API return status to success
30199     x_return_status := FND_API.G_RET_STS_SUCCESS;
30200 
30201 -- Function Security Check
30202     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
30203     (p_api_version_number => p_api_version,
30204      p_responsibility_id  => l_resp_id,
30205      p_function_name      => 'PA_DELIVERABLE_EDIT',
30206      p_msg_count          => x_msg_count,
30207      p_msg_data           => x_msg_data,
30208      p_return_status      => x_return_status,
30209      p_function_allowed   => l_function_allowed);
30210 
30211      IF p_debug_mode = 'Y' THEN
30212           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
30213      END IF;
30214 
30215      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
30216          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30217      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
30218          RAISE FND_API.G_EXC_ERROR;
30219      END IF;
30220 
30221      IF l_function_allowed = 'N' THEN
30222         pa_interface_utils_pub.map_new_amg_msg
30223         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
30224          ,p_msg_attribute    => 'CHANGE'
30225          ,p_resize_flag      => 'Y'
30226          ,p_msg_context      => 'GENERAL'
30227          ,p_attribute1       => ''
30228          ,p_attribute2       => ''
30229          ,p_attribute3       => ''
30230          ,p_attribute4       => ''
30231          ,p_attribute5       => '');
30232 
30233      x_return_status := FND_API.G_RET_STS_ERROR;
30234          RAISE FND_API.G_EXC_ERROR;
30235      END IF;
30236 
30237  -- validate the input parameters.
30238     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
30239                     p_pm_project_reference =>   p_pm_proj_reference -- 3729250 , earlier was passed as null
30240                  ,  p_pa_project_id     =>      p_project_id
30241                  ,  p_out_project_id    =>      l_project_id
30242                  ,  p_return_status     =>      x_return_status
30243         );
30244 
30245     IF p_debug_mode = 'Y' THEN
30246          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
30247     END IF;
30248 
30249     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30250         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30251     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30252         RAISE  FND_API.G_EXC_ERROR;
30253     END IF;
30254 
30255  -- Validate Deliverable reference / ID
30256     PA_Deliverable_Utils.Convert_pm_dlvrref_to_id(
30257           p_deliverable_reference => p_deliverable_reference
30258         , p_deliverable_id        => p_deliverable_id
30259         , p_project_id            => l_project_id
30260         , p_out_deliverable_id    => l_deliverable_id
30261         , p_return_status         => x_return_status);
30262 
30263     IF p_debug_mode = 'Y' THEN
30264         pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID ['||l_deliverable_id||'] Return Status ['||x_return_status||']',3) ;
30265     END IF;
30266 
30267     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30268         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30269     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30270         RAISE FND_API.G_EXC_ERROR;
30271     END IF;
30272 
30273     -- 3729250, Validate Financial Task Reference / ID
30274     -- PA_PROJECT_PVT.Convert_pm_taskref_to_id_all should only be called if either p_financial_task_id or
30275     -- p_financial_task_reference is passed
30276 
30277     IF ( ( p_financial_task_id IS NOT NULL AND p_financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
30278          ( p_financial_task_reference IS NOT NULL AND p_financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) THEN
30279 
30280         PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
30281                    p_pa_project_id      => l_project_id
30282                  , p_structure_type     => 'FINANCIAL'
30283                  , p_pa_task_id         => p_financial_task_id
30284                  , p_pm_task_reference  => p_financial_task_reference
30285                  , p_out_task_id        => l_fin_task_id
30286                  , p_return_status      => x_return_status );
30287 
30288         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30289               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30290         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30291               RAISE FND_API.G_EXC_ERROR;
30292         END IF;
30293 
30294    END IF;
30295 
30296 -- Validate Action reference - not null, unique
30297    pa_deliverable_utils.is_action_reference_unique (
30298          p_action_reference      => p_pm_action_reference
30299        , p_deliverable_id        => l_deliverable_id
30300        , p_project_id            => l_project_id
30301        , x_unique_flag           => l_unique_flag
30302        , x_return_status         => x_return_status
30303        );
30304 
30305     IF p_debug_mode = 'Y' THEN
30306         pa_debug.write(g_pkg_name,'Action Reference Unique Return Status ['||x_return_status||']Unique['||l_unique_flag||']',3) ;
30307     END IF;
30308 
30309     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30310         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30311     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30312         RAISE FND_API.G_EXC_ERROR;
30313     END IF;
30314 
30315 -- Derive the dlvr_Type of a deliverable
30316    -- 3749462 passing l_project_id and l_deliverable_id to cursor
30317    -- earlier p_project_id and p_deliverable_id was used directly, which may be G_PA_MISS_NUM and
30318    -- cursor will return l_dlvr_type_id as NULL
30319 
30320    OPEN C_dlvr_type(l_project_id,l_deliverable_id);
30321    FETCH C_dlvr_Type INTO l_dlvr_type_id;
30322    CLOSE  C_dlvr_type;
30323 
30324 -- Will create actions only when deliverable type of deliverable
30325 -- has action creation enabled.
30326 
30327    Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
30328    (
30329        p_dlvr_type_id                 =>  l_dlvr_type_id
30330       ,x_dlvr_prg_enabled             =>  l_dlvr_prg_enabled
30331       ,x_dlvr_action_enabled          =>  l_dlvr_action_enabled
30332       ,x_dlvr_default_status_code     =>  l_status_code
30333     );
30334 
30335     IF p_debug_mode = 'Y' THEN
30336        pa_debug.g_err_stage := 'Dlvr Type allow action creation ['|| l_dlvr_action_enabled||']';
30337        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30338     END IF;
30339 
30340 --  Populate the table with input parameters
30341     ---- --dbms_output.put_line('loading');
30342 
30343     IF ( i IS NOT NULL ) THEN
30344 
30345        IF (l_dlvr_action_enabled = 'Y') THEN
30346 
30347            l_action_in_tbl(i).action_name                 :=  p_action_name                 ;
30348            l_action_in_tbl(i).action_owner_id             :=  p_action_owner_id             ;
30349            l_action_in_tbl(i).function_code               :=  p_function_code               ;
30350            l_action_in_tbl(i).due_date                    :=  p_due_date                    ;
30351            l_action_in_tbl(i).description                 :=  p_description                 ;
30352            l_action_in_tbl(i).completion_date             :=  p_completion_date             ;
30353            l_action_in_tbl(i).pm_source_code              :=  p_pm_source_code              ;
30354            l_action_in_tbl(i).pm_action_reference         :=  p_pm_action_reference         ;
30355            -- for bug# 3729250
30356 --           l_action_in_tbl(i).carrying_out_org_id         :=  p_carrying_out_org_id         ;
30357            l_action_in_tbl(i).pm_deliverable_reference    :=  p_deliverable_reference       ;
30358            l_action_in_tbl(i).deliverable_id              :=  l_deliverable_id              ;   -- 3749462 earlier p_deliverable_id was passed
30359            l_action_in_tbl(i).financial_task_id           :=  l_fin_task_id                 ; -- for bug# 3729250
30360            l_action_in_tbl(i).destination_type_code       :=  p_destination_type_code       ;
30361            l_action_in_tbl(i).receiving_org_id            :=  p_receiving_org_id            ;
30362            l_action_in_tbl(i).receiving_location_id       :=  p_receiving_location_id       ;
30363            l_action_in_tbl(i).po_need_by_date             :=  p_po_need_by_date             ;
30364            l_action_in_tbl(i).vendor_id                   :=  p_vendor_id                   ;
30365            l_action_in_tbl(i).vendor_site_code            :=  p_vendor_site_code            ;
30366            l_action_in_tbl(i).Quantity                    :=  p_Quantity                    ;
30367            l_action_in_tbl(i).uom_code                    :=  p_uom_code                    ;
30368            l_action_in_tbl(i).unit_price                  :=  p_unit_price                  ;
30369            l_action_in_tbl(i).exchange_rate_type          :=  p_exchange_rate_type          ;
30370            l_action_in_tbl(i).exchange_rate_date          :=  p_exchange_rate_date          ;
30371            l_action_in_tbl(i).exchange_rate               :=  p_exchange_rate               ;
30372            l_action_in_tbl(i).expenditure_type            :=  p_expenditure_type            ;
30373            l_action_in_tbl(i).expenditure_org_id          :=  p_expenditure_org_id          ;
30374            l_action_in_tbl(i).expenditure_item_date       :=  p_expenditure_item_date       ;
30375            l_action_in_tbl(i).requisition_line_type_id    :=  p_requisition_line_type_id    ;
30376            l_action_in_tbl(i).category_id                 :=  p_category_id                 ;
30377            l_action_in_tbl(i).ready_to_procure_flag       :=  p_ready_to_procure_flag       ;
30378            l_action_in_tbl(i).initiate_procure_flag       :=  p_initiate_procure_flag       ;
30379            l_action_in_tbl(i).ship_from_organization_id   :=  p_ship_from_organization_id   ;
30380            l_action_in_tbl(i).ship_from_location_id       :=  p_ship_from_location_id       ;
30381            l_action_in_tbl(i).ship_to_organization_id     :=  p_ship_to_organization_id     ;
30382            l_action_in_tbl(i).ship_to_location_id         :=  p_ship_to_location_id         ;
30383            l_action_in_tbl(i).demand_schedule             :=  p_demand_schedule             ;
30384            l_action_in_tbl(i).expected_shipment_date      :=  p_expected_shipment_date      ;
30385            l_action_in_tbl(i).promised_shipment_date      :=  p_promised_shipment_date      ;
30386            l_action_in_tbl(i).volume                      :=  p_volume                      ;
30387            l_action_in_tbl(i).volume_uom                  :=  p_volume_uom                  ;
30388            l_action_in_tbl(i).weight                      :=  p_weight                      ;
30389            l_action_in_tbl(i).weight_uom                  :=  p_weight_uom                  ;
30390            l_action_in_tbl(i).ready_to_ship_flag          :=  p_ready_to_ship_flag          ;
30391            l_action_in_tbl(i).initiate_planning_flag      :=  p_initiate_planning_flag      ;
30392            l_action_in_tbl(i).initiate_shipping_flag      :=  p_initiate_shipping_flag      ;
30393            l_action_in_tbl(i).event_type                  :=  p_event_type                  ;
30394            l_action_in_tbl(i).currency                    :=  p_currency                    ;
30395            l_action_in_tbl(i).invoice_amount              :=  p_invoice_amount              ;
30396            l_action_in_tbl(i).revenue_amount              :=  p_revenue_amount              ;
30397            l_action_in_tbl(i).event_date                  :=  p_event_date                  ;
30398            l_action_in_tbl(i).event_number                :=  p_event_number                ;
30399            l_action_in_tbl(i).organization_id             :=  p_organization_id             ;
30400            l_action_in_tbl(i).bill_hold_flag              :=  p_bill_hold_flag              ;
30401            l_action_in_tbl(i).project_functional_rate_type:=  p_project_functional_rate_type;
30402            l_action_in_tbl(i).project_functional_rate_date:=  p_project_functional_rate_date;
30403            l_action_in_tbl(i).project_functional_rate     :=  p_project_functional_rate     ;
30404            l_action_in_tbl(i).project_rate_type           :=  p_project_rate_type           ;
30405            l_action_in_tbl(i).project_rate_date           :=  p_project_rate_date           ;
30406            l_action_in_tbl(i).project_rate                :=  p_project_rate                ;
30407            l_action_in_tbl(i).funding_rate_type           :=  p_funding_rate_type           ;
30408            l_action_in_tbl(i).funding_rate_date           :=  p_funding_rate_date           ;
30409            l_action_in_tbl(i).funding_rate                :=  p_funding_rate                ;
30410            l_action_in_tbl(i).pm_event_reference          :=  p_pm_event_reference          ; -- 3651489 added parameter
30411 
30412 
30413       ELSE --l_dlvr_action_enabled <> 'Y'
30414 
30415      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)  THEN
30416               l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
30417               PA_UTILS.ADD_MESSAGE
30418                                (p_app_short_name => 'PA',
30419                                 p_msg_name       => 'PA_DLVR_VALID_ERR',
30420                                 p_token1         => 'PROJECT',
30421                                 p_value1         =>  l_project_number,
30422                                 p_token2         =>  'TASK',
30423                                 p_value2         =>  l_task_number,
30424                                 p_token3         => 'DLVR_REFERENCE',
30425                                 p_value3         =>  p_deliverable_reference,
30426                                 p_token4         => 'MESSAGE',
30427                                 p_value4         =>  l_err_message
30428                                );
30429      END IF;
30430            x_return_status             := FND_API.G_RET_STS_ERROR;
30431           RAISE FND_API.G_EXC_ERROR;
30432 
30433       END IF; -- l_dlvr_action_enabled = 'Y'
30434     END IF;
30435 
30436 --  Call api to create actions  passing the newly populated plsql table
30437     Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
30438     ( p_api_version            => p_api_version
30439     , p_init_msg_list          => FND_API.G_FALSE
30440     , p_commit                 => FND_API.G_FALSE
30441     , p_validate_only          => FND_API.G_FALSE
30442     , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
30443     , p_calling_module         => 'AMG'
30444     , p_debug_mode             => p_debug_mode
30445     , p_insert_or_update       => 'INSERT'
30446     , p_action_in_tbl          => l_action_in_tbl
30447     , x_action_out_tbl         => l_action_out_tbl
30448     , x_return_status          => x_return_status
30449     , x_msg_count              => l_msg_count
30450     , x_msg_data               => l_msg_data);
30451 
30452     IF p_debug_mode = 'Y' THEN
30453        pa_debug.g_err_stage := 'Returned from Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper ['|| x_return_status||']';
30454        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30455     END IF;
30456 
30457     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30458         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30459     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30460         RAISE FND_API.G_EXC_ERROR;
30461     END IF;     i := l_action_out_tbl.first();
30462 
30463    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
30464    IF (p_commit = FND_API.G_TRUE) THEN
30465        COMMIT;
30466    END IF;
30467 
30468    IF p_debug_mode = 'Y' THEN
30469        pa_debug.reset_curr_function;
30470        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
30471    END IF;
30472 
30473 EXCEPTION
30474   WHEN FND_API.G_EXC_ERROR  THEN
30475       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
30476   --  IF (p_commit = FND_API.G_TRUE) THEN
30477       ROLLBACK TO create_deliverable_actions_pub;
30478   --  END IF;
30479 
30480       x_return_status := FND_API.G_RET_STS_ERROR;
30481       l_msg_count := FND_MSG_PUB.count_msg;
30482 
30483       IF l_msg_count = 1 AND x_msg_data IS NULL
30484       THEN
30485            PA_INTERFACE_UTILS_PUB.get_messages
30486                (p_encoded        => FND_API.G_FALSE,
30487                 p_msg_index      => 1,
30488                 p_msg_count      => x_msg_count,
30489                 p_msg_data       => l_msg_data,
30490                 p_data           => l_data,
30491                 p_msg_index_out  => l_msg_index_out);
30492 
30493        x_msg_data := l_data;
30494            x_msg_count := l_msg_count;
30495      ELSE
30496           x_msg_count := l_msg_count;
30497 
30498      END IF;
30499 
30500      IF  p_debug_mode = 'Y' THEN
30501           pa_debug.reset_curr_function;
30502           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
30503      END IF;
30504 
30505   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
30506      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
30507      --IF (p_commit = FND_API.G_TRUE) THEN
30508      ROLLBACK TO create_deliverable_actions_pub;
30509      --END IF;
30510 
30511      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30512      l_msg_count := FND_MSG_PUB.count_msg;
30513 
30514      IF l_msg_count = 1 AND x_msg_data IS NULL
30515      THEN
30516            PA_INTERFACE_UTILS_PUB.get_messages
30517                (p_encoded        => FND_API.G_FALSE,
30518                 p_msg_index      => 1,
30519                 p_msg_count      => x_msg_count,
30520                 p_msg_data       => l_msg_data,
30521                 p_data           => l_data,
30522                 p_msg_index_out  => l_msg_index_out);
30523 
30524        x_msg_data := l_data;
30525            x_msg_count := l_msg_count;
30526      ELSE
30527           x_msg_count := l_msg_count;
30528 
30529      END IF;
30530 
30531      IF  p_debug_mode = 'Y' THEN
30532           pa_debug.reset_curr_function;
30533           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
30534      END IF;
30535 
30536    WHEN OTHERS THEN
30537       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
30538       --IF (p_commit = FND_API.G_TRUE) THEN
30539       ROLLBACK TO create_deliverable_actions_pub;
30540       --END IF;
30541 
30542       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30543       x_msg_count := 1;
30544       x_msg_data := SQLERRM;
30545 
30546       IF p_debug_mode = 'Y' THEN
30547           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
30548           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
30549           pa_debug.reset_curr_function;
30550       END IF;
30551 
30552 
30553       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
30554        FND_MSG_PUB.add_exc_msg
30555                    ( p_pkg_name            => G_PKG_NAME
30556                    , p_procedure_name      => l_api_name   );
30557      END IF;
30558   END create_deliverable_action;
30559 
30560 --------------------------------------------------------------------------------
30561 --Name:               Update_Deliverable
30562 --Type:               Procedure
30563 --Description:        This procedure updates a deliverable and its related actions
30564 --                    which are passed through actions PLSQL table
30565 --
30566 --Called subprograms:   PA_DELIVERABLE_PUB.UPDATE_DELIVERABLE
30567 --                      Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
30568 --
30569 --
30570 --
30571 --History:
30572 --    08-Mar-2004   Puneet            Created
30573 --
30574 
30575 PROCEDURE update_deliverable
30576 (   p_api_version            IN  NUMBER     := 1.0
30577   , p_init_msg_list          IN  VARCHAR2   := 'F'
30578   , p_commit                 IN  VARCHAR2   := FND_API.G_FALSE
30579   , p_debug_mode             IN  VARCHAR2   := 'N'
30580   , x_return_status          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30581   , p_deliverable_name       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30582   , p_deliverable_short_name IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30583   , p_deliverable_type_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30584   , p_deliverable_owner_id   IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30585   , p_description            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30586   , p_status_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30587   , p_due_date               IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30588   , p_completion_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30589   , p_progress_weight        IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30590   , px_deliverable_id        IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
30591   , p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30592   -- for bug# 3729250
30593 --  , p_carrying_out_org_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30594   , p_task_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30595   , p_task_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30596   , p_project_id             IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30597   , p_proj_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30598   , p_action_in_tbl          IN  action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
30599   , x_action_out_tbl         OUT NOCOPY action_out_tbl_type /*Added the nocopy check for 4537865 */
30600   , p_item_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30601   , P_inventory_org_id       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30602   , p_quantity               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30603   , p_uom_code               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30604   -- for bug# 3729250
30605 --  , p_item_description       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30606   , p_unit_price             IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30607   -- for bug# 3729250
30608   , p_unit_number            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30609   , p_currency_code          IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30610   , p_pm_source_code         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR              /* Bug no. 3651113 */
30611   , x_msg_count              OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
30612   , x_msg_data               OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30613   )
30614 
30615   IS
30616     l_project_id NUMBER;
30617     l_task_id    NUMBER;
30618     l_task_source_reference VARCHAR2(240);
30619     l_msg_count NUMBER;
30620     l_msg_data VARCHAR2(2000);
30621     l_msg_index_out              NUMBER;
30622     l_data                       VARCHAR2(2000);
30623 
30624 
30625     l_deliverable_id NUMBER;
30626     l_action_id      NUMBER;
30627     l_deliverable_version_id NUMBER;
30628 
30629     l_action_in_tbl_ins action_in_tbl_type;
30630     l_action_in_tbl_upd action_in_tbl_type;
30631 
30632     l_api_name      CONSTANT  VARCHAR2(30)     := 'UPDATE_DELIVERABLE';
30633 
30634     i      NUMBER := 0;
30635     i_actn NUMBER := 0;
30636     i_actn_ins NUMBER := 0;
30637     i_actn_upd NUMBER := 0;
30638 
30639     l_function_allowed      VARCHAR2(1);
30640     l_resp_id NUMBER := FND_GLOBAL.Resp_id;
30641     l_pm_product_code VARCHAR2(2) :='Z';                          /* Bug 3651113 */
30642 
30643     /*cursor added for Bug 3651113 */
30644     Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
30645     Is
30646     Select 'X'
30647     from pa_lookups
30648     where lookup_type='PM_PRODUCT_CODE'
30649     and lookup_code = p_pm_product_code;
30650 
30651      Cursor C_vers (p_proj_element_id NUMBER) IS
30652      SELECT   vers.element_version_id
30653      FROM     pa_proj_element_versions vers
30654            ,  pa_proj_elements elem
30655      WHERE    vers.proj_element_id = elem.proj_element_id
30656      AND      elem.project_id  = vers.project_id
30657      AND      elem.proj_element_id  = p_proj_element_id
30658      AND      elem.project_id  = vers.project_id
30659      AND      elem.object_type = 'PA_DELIVERABLES';
30660 
30661      l_dlvr_id NUMBER; -- added for bug# 3749447
30662 
30663 BEGIN
30664  --  Initialize the message table if requested.
30665     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
30666        FND_MSG_PUB.initialize;
30667     END IF;
30668 ---- --dbms_output.put_line('entering pa_project_pub.Update_deliverable['||p_project_id||']['||p_task_id||']');
30669 
30670     -- 3735792, setting save point unconditionally
30671     --IF (p_commit = FND_API.G_TRUE) THEN
30672     savepoint UPDATE_DELIVERABLE_PUB;
30673     --END IF;
30674 
30675     IF p_debug_mode = 'Y' THEN
30676           PA_DEBUG.set_curr_function( p_function   => l_api_name,
30677                                       p_debug_mode => p_debug_mode );
30678           pa_debug.g_err_stage:= 'Inside '||l_api_name;
30679           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
30680     END IF;
30681 
30682 -- Validation check for product code : Bug 3651113
30683 
30684     OPEN p_product_code_csr (p_pm_source_code);
30685     FETCH p_product_code_csr INTO l_pm_product_code;
30686     CLOSE p_product_code_csr;
30687 
30688     IF l_pm_product_code <> 'X'
30689            AND p_pm_source_code <> 'WORKPLAN'
30690     THEN
30691          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
30692          THEN
30693          pa_interface_utils_pub.map_new_amg_msg
30694          ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
30695           ,p_msg_attribute    => 'CHANGE'
30696           ,p_resize_flag      => 'N'
30697           ,p_msg_context      => 'GENERAL'
30698           ,p_attribute1       => ''
30699           ,p_attribute2       => ''
30700           ,p_attribute3       => ''
30701           ,p_attribute4       => ''
30702           ,p_attribute5       => '');
30703          END IF;
30704     x_return_status             := FND_API.G_RET_STS_ERROR;
30705     RAISE FND_API.G_EXC_ERROR;
30706     END IF;
30707 
30708  --  Set API return status to success
30709     x_return_status     := FND_API.G_RET_STS_SUCCESS;
30710 
30711     IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
30712        l_task_id := NULL;
30713     ELSE
30714        l_task_id := p_task_id;
30715     END IF;
30716 
30717     IF p_task_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
30718        l_task_source_reference := NULL;
30719     ELSE
30720        l_task_source_reference := p_task_source_reference;
30721     END IF;
30722 
30723 -- Function Security Check
30724     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
30725     (p_api_version_number => p_api_version,
30726      p_responsibility_id  => l_resp_id,
30727      p_function_name      => 'PA_DELIVERABLE_EDIT',
30728      p_msg_count          => x_msg_count,
30729      p_msg_data           => x_msg_data,
30730      p_return_status      => x_return_status,
30731      p_function_allowed   => l_function_allowed);
30732 
30733      IF p_debug_mode = 'Y' THEN
30734           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
30735      END IF;
30736 
30737      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
30738          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30739      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
30740          RAISE FND_API.G_EXC_ERROR;
30741      END IF;
30742 
30743      IF l_function_allowed = 'N' THEN
30744         pa_interface_utils_pub.map_new_amg_msg
30745         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
30746          ,p_msg_attribute    => 'CHANGE'
30747          ,p_resize_flag      => 'Y'
30748          ,p_msg_context      => 'GENERAL'
30749          ,p_attribute1       => ''
30750          ,p_attribute2       => ''
30751          ,p_attribute3       => ''
30752          ,p_attribute4       => ''
30753          ,p_attribute5       => '');
30754 
30755      x_return_status := FND_API.G_RET_STS_ERROR;
30756          RAISE FND_API.G_EXC_ERROR;
30757      END IF;
30758 
30759  -- validate the input parameters.
30760  -- Get the task and Project details based on source reference passed
30761     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
30762                     p_pm_project_reference =>   p_proj_source_reference
30763                  ,  p_pa_project_id     =>      p_project_id
30764                  ,  p_out_project_id    =>      l_project_id
30765                  ,  p_return_status     =>      x_return_status
30766         );
30767 
30768     IF p_debug_mode = 'Y' THEN
30769          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
30770     END IF;
30771 
30772     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30773         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30774     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30775         RAISE  FND_API.G_EXC_ERROR;
30776     END IF;
30777 
30778     -- 3749447 Changed from p_task_id to l_task_id in if conditon
30779     -- also did the same change in below api's parameter passing
30780 
30781     IF ( l_task_id IS NOT NULL OR l_task_source_reference IS NOT NULL ) THEN
30782        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
30783                    p_pa_project_id      => l_project_id
30784                  , p_structure_type     => 'WORKPLAN'
30785                  , p_pa_task_id         => l_task_id
30786                  , p_pm_task_reference  => l_task_source_reference
30787                  , p_out_task_id        => l_task_id
30788                  , p_return_status      => x_return_status );
30789 
30790        IF p_debug_mode = 'Y' THEN
30791            pa_debug.write(g_pkg_name,'Task Ref to ID Return Status ['||x_return_status||']Task ID['||l_task_id||']',3) ;
30792        END IF;
30793 
30794        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30795              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30796        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30797              RAISE FND_API.G_EXC_ERROR;
30798        END IF;
30799     END IF;
30800 
30801  -- Validate Deliverable reference / id- not null, unique
30802     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
30803       (   p_deliverable_reference => p_pm_deliverable_reference
30804         , p_deliverable_id        => px_deliverable_id
30805         , p_project_id            => l_project_id
30806         , p_out_deliverable_id    => l_deliverable_id
30807         , p_return_status         => x_return_status
30808       );
30809 
30810     IF p_debug_mode = 'Y' THEN
30811         pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID ['||l_deliverable_id||'] Return Status ['||x_return_status||']',3) ;
30812     END IF;
30813 
30814     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30815         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30816     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30817         RAISE FND_API.G_EXC_ERROR;
30818     END IF;
30819 
30820     OPEN C_vers(l_deliverable_id);
30821     FETCH C_vers INTO l_deliverable_version_id;
30822     CLOSE C_vers;
30823 
30824     IF p_debug_mode = 'Y' THEN
30825        pa_debug.write(g_pkg_name,'Updatinging deliverable ['|| p_deliverable_short_name||']['||l_deliverable_id||']['||l_project_id||']['||l_task_id||']',3);
30826     END IF;
30827 
30828  -- All other validations done in PA_DELIVERABLE_PUB.UPDATE_DELIVERABLE
30829  --invoke the api to Update deliverable
30830 
30831     Pa_Deliverable_Pub.Update_Deliverable
30832     (  p_api_version            =>  p_api_version
30833      , p_init_msg_list          =>  p_init_msg_list
30834      -- 3735792, passing p_commit as false to next level api calls
30835      , p_commit                 =>  FND_API.G_FALSE
30836      , p_validate_only          =>  FND_API.G_FALSE
30837      , p_validation_level       =>  FND_API.G_VALID_LEVEL_FULL
30838      , p_calling_module         =>  'AMG'
30839      , p_debug_mode             =>  p_debug_mode
30840      , p_max_msg_count          =>  NULL
30841      , p_record_version_number  =>  null
30842      , p_object_type            =>  'PA_DELIVERABLES'
30843      , p_project_id             =>  l_project_id
30844      , p_dlvr_number            =>  p_deliverable_short_name
30845      , p_dlvr_name              =>  p_deliverable_name
30846      , p_dlvr_description       =>  p_description
30847      , p_dlvr_owner_id          =>  p_deliverable_owner_id
30848      , p_dlvr_owner_name        =>  NULL
30849      -- for bug# 3729250
30850 --     , p_carrying_out_org_id    =>  p_carrying_out_org_id
30851      , p_carrying_out_org_name  =>  NULL
30852      , p_dlvr_version_id        =>  l_deliverable_version_id --3733221
30853      , p_status_code            =>  p_status_code
30854      , p_parent_structure_id    =>  NULL
30855      , p_dlvr_type_id           =>  p_deliverable_type_id
30856      , p_dlvr_type_name         =>  NULL
30857      , p_progress_weight        =>  p_progress_weight
30858      , p_scheduled_finish_date  =>  p_due_date
30859      , p_actual_finish_date     =>  p_completion_date
30860      , p_task_id                =>  l_task_id
30861      , p_task_version_id        =>  null
30862      , p_task_name              =>  null
30863      , p_deliverable_reference  =>  p_pm_deliverable_reference
30864      , p_item_id                =>  p_item_id
30865      , p_inventory_org_id       =>  p_inventory_org_id
30866      , p_quantity               =>  p_quantity
30867      , p_uom_code               =>  p_uom_code
30868      -- for bug# 3729250
30869 --     , p_item_description       =>  p_item_description
30870      , p_unit_price             =>  p_unit_price
30871      , p_unit_number            =>  p_unit_number
30872      , p_currency_code          =>  p_currency_code
30873      , p_dlvr_item_id           =>  l_deliverable_id -- 3749447 changed from px_deliverable_id to l_deliverable_id
30874      , p_pm_source_code         =>  p_pm_source_code -- 3749447 passing p_pm_source_code
30875      , x_return_status          =>  x_return_status
30876      , x_msg_count              =>  l_msg_count
30877      , x_msg_data               =>  l_msg_data
30878     );
30879 
30880     -- 3749447 assigning the derived deliverale id, this is required in the below case
30881     -- while calling update_deliverable, if user has passed only deliverable reference,
30882     -- after api execution, returned value for px_deliverable_id will be g_pa_miss_num
30883     px_deliverable_id := l_deliverable_id;
30884 
30885     x_msg_count              := l_msg_count;
30886     x_msg_data               := l_msg_data;
30887 
30888     IF p_debug_mode = 'Y' THEN
30889        pa_debug.g_err_stage := 'Pa_Deliverable_Pub.Update_Deliverable return status ['||x_return_status||']';
30890        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30891     END IF;
30892 
30893    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30894           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30895    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30896           RAISE  FND_API.G_EXC_ERROR;
30897    END IF;
30898 
30899 -- From the action_in table, select the actions for the given deliverable.
30900 -- Based on action_reference / action_id identify if new action is to
30901 -- to be created or existing action is to be updated.
30902 
30903    i := p_action_in_tbl.first();
30904 
30905    -- added for bug# 3749447, added below code to handle following scenario
30906    -- if user has not passed deliverable id in action record , only deliverable reference is passed
30907    -- and for deliverable record not passed passed deliverable id
30908    -- in this case, passed action will not be considered for update or create
30909 
30910    -- deriving deliverable id from deliverable reference
30911 
30912    IF i IS NOT NULL THEN
30913        Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
30914          (   p_deliverable_reference => p_action_in_tbl(i).pm_deliverable_reference
30915            , p_deliverable_id        => p_action_in_tbl(i).deliverable_id
30916            , p_project_id            => l_project_id
30917            , p_out_deliverable_id    => l_dlvr_id
30918            , p_return_status         => x_return_status
30919          );
30920 
30921         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30922             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30923         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30924             RAISE FND_API.G_EXC_ERROR;
30925         END IF;
30926 
30927    END IF;
30928 
30929    WHILE (i IS NOT NULL ) LOOP
30930       IF ( p_pm_deliverable_reference = p_action_in_tbl(i).pm_deliverable_reference OR
30931            px_deliverable_id = l_dlvr_id ) THEN -- 3749447 using derived deliverable id instead of passed id, for above mentioned case
30932 
30933           -- action is for current deliverable only
30934           IF (p_action_in_tbl(i).action_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
30935               p_action_in_tbl(i).action_id = NULL) THEN
30936              l_action_id := NULL;
30937           ELSE
30938              l_action_id := p_action_in_tbl(i).action_id;
30939           END IF;
30940 
30941           i_actn := i_actn + 1;
30942 
30943           -- added for bug# 3749447, added if condition to check for not null action id
30944           -- if action id not null, then and only then , action reference to id validation should be done
30945           -- in case of new action below validon will fail and will not allow user to create new actions from update_deliverable
30946 
30947           IF l_action_id IS NOT NULL THEN
30948               Pa_Deliverable_Utils.Convert_pm_actionref_to_id      (
30949                     p_action_reference  =>  p_action_in_tbl(i_actn).pm_action_reference
30950                    ,p_action_id         =>  l_action_id
30951                    ,p_deliverable_id    =>  l_deliverable_id
30952                    ,p_project_id        =>  l_Project_id
30953                    ,p_out_action_id     =>  l_action_id
30954                    ,p_return_status     =>  x_return_status
30955                    );
30956           END IF;
30957 
30958          IF p_debug_mode = 'Y' THEN
30959            pa_debug.write(g_pkg_name,'Dlvr Action Reference Valid Return Status ['||x_return_status||']Action ID['||l_action_id||']',3) ;
30960          END IF;
30961 
30962          IF (l_action_id is NOT NULL) THEN
30963             -- action is an existing action and is to be updated
30964             i_actn_upd := i_actn_upd + 1 ;
30965             l_action_in_tbl_upd(i_actn_upd) := p_action_in_tbl(i);
30966 
30967             -- added for bug# 3749447
30968             -- passing derived values of action id and deliverable id
30969             -- when ever deliverable and action reference is passed , update will not work
30970             l_action_in_tbl_upd(i_actn_upd).action_id := l_action_id;
30971             l_action_in_tbl_upd(i_actn_upd).deliverable_id := l_deliverable_id;
30972 
30973             -- added for bug# 3749447
30974             -- if for action record , pm_source_code is not passed , use it from deliverable pm source code
30975             IF p_action_in_tbl(i).pm_source_code IS NOT NULL and p_action_in_tbl(i).pm_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
30976                 l_action_in_tbl_upd(i_actn_upd).pm_source_code := p_pm_source_code;
30977             END IF;
30978 
30979          ELSE
30980             -- New action is to be created.
30981             i_actn_ins := i_actn_ins + 1 ;
30982             l_action_in_tbl_ins(i_actn_ins) := p_action_in_tbl(i);
30983 
30984             -- added for bug# 3749447
30985             -- passing derived values of action id and deliverable id
30986             -- when ever deliverable reference is passed , create will not work
30987             l_action_in_tbl_ins(i_actn_ins).deliverable_id := l_deliverable_id;
30988 
30989             -- added for bug# 3749447
30990             -- if pm_source_code is not passed in action record, use it from deliverable record
30991 
30992             IF p_action_in_tbl(i).pm_source_code IS NOT NULL and p_action_in_tbl(i).pm_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
30993                 l_action_in_tbl_ins(i_actn_ins).pm_source_code := p_pm_source_code;
30994             END IF;
30995 
30996          END IF; -- l_action_id is NULL
30997 
30998       END IF; -- deliverable reference
30999       i := p_action_in_tbl.next(i);     -- added for bug# 3749447, next was not done
31000    END LOOP;
31001 
31002     IF p_debug_mode = 'Y' THEN
31003         pa_debug.write(g_pkg_name,'Uploaded action detail for Updation/Insertion upd ['||i_actn_upd||'] ins ['||i_actn_ins||'] tot ['||i_actn||']',3) ;
31004     END IF;
31005 
31006    IF (i_actn_upd > 0 ) THEN
31007 
31008 -- There are actions to be updated
31009        Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31010        ( p_api_version            => p_api_version
31011        , p_init_msg_list          => FND_API.G_FALSE
31012        , p_commit                 => FND_API.G_FALSE
31013        , p_validate_only          => FND_API.G_FALSE
31014        , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
31015        , p_calling_module         => 'AMG'
31016        , p_debug_mode             => p_debug_mode
31017        , p_insert_or_update       => 'UPDATE'
31018        , p_action_in_tbl          => l_action_in_tbl_upd
31019        , x_action_out_tbl         => x_action_out_tbl
31020        , x_return_status          => x_return_status
31021        , x_msg_count              => l_msg_count
31022        , x_msg_data               => l_msg_data);
31023 
31024       IF p_debug_mode = 'Y' THEN
31025           pa_debug.write(g_pkg_name,'Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper upd return status['||x_return_status||']',3) ;
31026       END IF;
31027 
31028       IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31029              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31030       ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31031              RAISE  FND_API.G_EXC_ERROR;
31032       END IF;
31033 
31034    END IF; --i_actn_upd > 0
31035 
31036    IF (i_actn_ins > 0 ) THEN
31037 
31038 -- There are actions to be updated
31039        Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31040        ( p_api_version            => p_api_version
31041        , p_init_msg_list          => FND_API.G_FALSE
31042        , p_commit                 => FND_API.G_FALSE
31043        , p_validate_only          => FND_API.G_FALSE
31044        , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
31045        , p_calling_module         => 'AMG'
31046        , p_debug_mode             => p_debug_mode
31047        , p_insert_or_update       => 'INSERT'
31048        , p_action_in_tbl          => l_action_in_tbl_ins
31049        , x_action_out_tbl         => x_action_out_tbl
31050        , x_return_status          => x_return_status
31051        , x_msg_count              => l_msg_count
31052        , x_msg_data               => l_msg_data);
31053 
31054       IF p_debug_mode = 'Y' THEN
31055           pa_debug.write(g_pkg_name,'Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper upd return status['||x_return_status||']',3) ;
31056       END IF;
31057 
31058       IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31059              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31060       ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31061              RAISE  FND_API.G_EXC_ERROR;
31062       END IF;
31063 
31064    END IF; --i_actn_upd > 0
31065 
31066    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31067    IF (p_commit = FND_API.G_TRUE) THEN
31068        COMMIT;
31069    END IF;
31070 
31071    IF p_debug_mode = 'Y' THEN
31072        pa_debug.reset_curr_function;
31073        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31074    END IF;
31075 
31076 EXCEPTION
31077    WHEN FND_API.G_EXC_ERROR        THEN
31078       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31079       --IF (p_commit = FND_API.G_TRUE) THEN
31080       ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31081       --END IF;
31082 
31083       IF p_debug_mode = 'Y' THEN
31084           pa_debug.reset_curr_function;
31085           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31086       END IF;
31087       x_return_status := FND_API.G_RET_STS_ERROR;
31088       x_msg_count := FND_MSG_PUB.count_msg;
31089 
31090       IF x_msg_count = 1 THEN
31091            PA_INTERFACE_UTILS_PUB.get_messages
31092                (p_encoded        => FND_API.G_FALSE,
31093                 p_msg_index      => 1,
31094                 p_msg_count      => x_msg_count,
31095                 p_msg_data       => x_msg_data,
31096                 p_data           => l_data, --  4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31097                 p_msg_index_out  => l_msg_index_out);
31098         x_msg_data := l_data ; -- 4537865
31099      END IF;
31100 
31101    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
31102       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31103       --IF (p_commit = FND_API.G_TRUE) THEN
31104       ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31105       --END IF;
31106 
31107       IF p_debug_mode = 'Y' THEN
31108           pa_debug.reset_curr_function;
31109           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31110       END IF;
31111       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31112       x_msg_count := FND_MSG_PUB.count_msg;
31113 
31114       IF x_msg_count = 1 THEN
31115            PA_INTERFACE_UTILS_PUB.get_messages
31116                (p_encoded        => FND_API.G_FALSE,
31117                 p_msg_index      => 1,
31118                 p_msg_count      => x_msg_count,
31119                 p_msg_data       => x_msg_data,
31120                 p_data           => l_data, --  4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31121                 p_msg_index_out  => l_msg_index_out);
31122                 x_msg_data := l_data ; -- 4537865
31123      END IF;
31124 
31125    WHEN OTHERS THEN
31126       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31127       --IF (p_commit = FND_API.G_TRUE) THEN
31128       ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31129       --END IF;
31130 
31131       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31132       x_msg_count := 1;
31133       x_msg_data := SQLERRM;
31134 
31135       IF p_debug_mode = 'Y' THEN
31136           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31137           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31138           pa_debug.reset_curr_function;
31139       END IF;
31140 
31141 
31142    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
31143        FND_MSG_PUB.add_exc_msg
31144                    ( p_pkg_name            => G_PKG_NAME
31145                    , p_procedure_name      => l_api_name   );
31146   END IF;
31147 END update_deliverable;
31148 
31149 
31150 PROCEDURE update_deliverable_action
31151 (   p_api_version                  IN  NUMBER   := 1.0
31152   , p_init_msg_list                IN  VARCHAR2 := FND_API.G_TRUE
31153   , p_debug_mode                   IN  VARCHAR2 := FND_API.G_FALSE
31154   , p_commit                       IN  VARCHAR2 := FND_API.G_FALSE
31155   , p_action_name                  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31156   , p_action_owner_id              IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31157   , p_function_code                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31158   , p_due_date                     IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31159   , p_description                  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31160   , p_completion_date              IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31161   , p_pm_source_code               IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31162   , p_pm_action_reference          IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31163   -- added for bug# 3729250
31164   , p_action_id                    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31165   -- for bug# 3729250
31166   --  , p_carrying_out_org_id          IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31167   , p_deliverable_reference        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31168   , p_deliverable_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31169   -- added for bug# 3729250
31170   , p_pm_proj_reference            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31171   , p_project_id                   IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31172   , p_financial_task_id            IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31173   -- added for bug# 3729250
31174   , p_financial_task_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31175   , p_destination_type_code        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31176   , p_receiving_org_id             IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31177   , p_receiving_location_id        IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31178   , p_po_need_by_date              IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31179   , p_vendor_id                    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31180   , p_vendor_site_code             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31181 --  , p_project_currency             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31182   , p_Quantity                     IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31183   , p_uom_code                     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31184   , p_unit_price                   IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31185   , p_exchange_rate_type           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31186   , p_exchange_rate_date           IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31187   , p_exchange_rate                IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31188   , p_expenditure_type             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31189   , p_expenditure_org_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31190   , p_expenditure_item_date        IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31191   , p_requisition_line_type_id     IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31192   , p_category_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31193   , p_ready_to_procure_flag        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31194   , p_initiate_procure_flag        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31195   , p_ship_from_organization_id    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31196   , p_ship_from_location_id        IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31197   , p_ship_to_organization_id      IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31198   , p_ship_to_location_id          IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31199   , p_demand_schedule              IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31200   , p_expected_shipment_date       IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31201   , p_promised_shipment_date       IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31202   , p_volume                       IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31203   , p_volume_uom                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31204   , p_weight                       IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31205   , p_weight_uom                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31206   , p_ready_to_ship_flag           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31207   , p_initiate_planning_flag       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31208   , p_initiate_shipping_flag       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31209   , p_event_type                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31210   , p_currency                     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3749474 changed data type
31211   , p_invoice_amount               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31212   , p_revenue_amount               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31213   , p_event_date                   IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31214   , p_event_number                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31215   , p_organization_id              IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31216   , p_bill_hold_flag               IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31217   , p_project_functional_rate_type IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31218   , p_project_functional_rate_date IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31219   , p_project_functional_rate      IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31220   , p_project_rate_type            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31221   , p_project_rate_date            IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31222   , p_project_rate                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31223   , p_funding_rate_type            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31224   , p_funding_rate_date            IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31225   , p_funding_rate                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31226   , p_pm_event_reference           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
31227   , x_action_out                   OUT NOCOPY  action_out_tbl_type
31228   , x_return_status                OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31229   , x_msg_count                    OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31230   , x_msg_data                     OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31231   )
31232 IS
31233     l_api_name      CONSTANT  VARCHAR2(30)     := 'update_deliverable_actions';
31234 
31235     l_action_in_tbl   action_in_tbl_type ;
31236     l_action_out_tbl  action_out_tbl_type ;
31237 
31238     l_msg_count     NUMBER   := null;
31239     l_msg_data      VARCHAR2(2000) := null;
31240     l_msg_index_out              NUMBER;
31241     l_data                       VARCHAR2(2000);
31242 
31243 
31244     l_project_id   NUMBER := null;
31245     l_deliverable_id NUMBER := null;
31246     l_function_allowed      VARCHAR2(1);
31247     l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31248 
31249     -- 3729250 added local variables
31250     l_fin_task_id   NUMBER := NULL;
31251     l_action_id     NUMBER := NULL;
31252 
31253     i  NUMBER := 1;
31254 BEGIN
31255 
31256 --  Standard begin of API savepoint
31257     SAVEPOINT update_deliverable_actions_pub;
31258 
31259 --  Standard call to check for call compatibility.
31260     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
31261                                p_api_version  ,
31262                                l_api_name         ,
31263                                G_PKG_NAME       )
31264     THEN
31265        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31266     END IF;
31267 
31268 --  Initialize the message table if requested.
31269     IF FND_API.TO_BOOLEAN( p_init_msg_list )   THEN
31270        FND_MSG_PUB.initialize;
31271     END IF;
31272 
31273     IF p_debug_mode = 'Y' THEN
31274           PA_DEBUG.set_curr_function( p_function   => l_api_name,
31275                                       p_debug_mode => p_debug_mode );
31276           pa_debug.g_err_stage:= 'Inside '||l_api_name;
31277           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31278     END IF;
31279 --  Set API return status to success
31280     x_return_status := FND_API.G_RET_STS_SUCCESS;
31281 
31282 -- Function Security Check
31283     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31284     (p_api_version_number => p_api_version,
31285      p_responsibility_id  => l_resp_id,
31286      p_function_name      => 'PA_DELIVERABLE_EDIT',
31287      p_msg_count          => x_msg_count,
31288      p_msg_data           => x_msg_data,
31289      p_return_status      => x_return_status,
31290      p_function_allowed   => l_function_allowed);
31291 
31292 
31293      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
31294          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31295      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
31296          RAISE FND_API.G_EXC_ERROR;
31297      END IF;
31298 
31299      IF l_function_allowed = 'N' THEN
31300         pa_interface_utils_pub.map_new_amg_msg
31301         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
31302          ,p_msg_attribute    => 'CHANGE'
31303          ,p_resize_flag      => 'Y'
31304          ,p_msg_context      => 'GENERAL'
31305          ,p_attribute1       => ''
31306          ,p_attribute2       => ''
31307          ,p_attribute3       => ''
31308          ,p_attribute4       => ''
31309          ,p_attribute5       => '');
31310 
31311      x_return_status := FND_API.G_RET_STS_ERROR;
31312          RAISE FND_API.G_EXC_ERROR;
31313      END IF;
31314 
31315  -- validate the input parameters.
31316  -- Validate Project reference/id
31317     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
31318                     p_pm_project_reference =>   p_pm_proj_reference -- 3729250, earlier was passed as null
31319                  ,  p_pa_project_id     =>      p_project_id
31320                  ,  p_out_project_id    =>      l_project_id
31321                  ,  p_return_status     =>      x_return_status
31322         );
31323 
31324     IF p_debug_mode = 'Y' THEN
31325          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31326     END IF;
31327 
31328     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31329         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31330     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31331         RAISE  FND_API.G_EXC_ERROR;
31332     END IF;
31333 
31334  -- Validate Deliverable reference / ID
31335     PA_Deliverable_Utils.Convert_pm_dlvrref_to_id(
31336           p_deliverable_reference => p_deliverable_reference
31337         , p_deliverable_id        => p_deliverable_id
31338         , p_project_id            => l_project_id
31339         , p_out_deliverable_id    => l_deliverable_id
31340         , p_return_status         => x_return_status);
31341 
31342     IF p_debug_mode = 'Y' THEN
31343         pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID Return Status ['||x_return_status,3) ;
31344     END IF;
31345 
31346     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31347         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31348     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31349         RAISE FND_API.G_EXC_ERROR;
31350     END IF;
31351 
31352 
31353  -- 3729250 Validate Deliverable Action reference / ID
31354     PA_Deliverable_Utils.Convert_pm_actionref_to_id(
31355           p_action_reference      => p_pm_action_reference
31356         , p_action_id             => p_action_id
31357         , p_deliverable_id        => l_deliverable_id
31358         , p_project_id            => l_project_id
31359         , p_out_action_id         => l_action_id
31360         , p_return_status         => x_return_status);
31361 
31362     IF p_debug_mode = 'Y' THEN
31363         pa_debug.write(g_pkg_name,'Convert_pm_actionref_to_id Return Status ['||x_return_status,3) ;
31364     END IF;
31365 
31366     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31367         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31368     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31369         RAISE FND_API.G_EXC_ERROR;
31370     END IF;
31371 
31372     -- 3729250, Validate Financial Task Reference / ID
31373     -- PA_PROJECT_PVT.Convert_pm_taskref_to_id_all should only be called if either p_financial_task_id or
31374     -- p_financial_task_reference is passed
31375 
31376     IF ( ( p_financial_task_id IS NOT NULL AND p_financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
31377          ( p_financial_task_reference IS NOT NULL AND p_financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) THEN
31378         PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
31379                    p_pa_project_id      => l_project_id
31380                  , p_structure_type     => 'FINANCIAL'
31381                  , p_pa_task_id         => p_financial_task_id
31382                  , p_pm_task_reference  => p_financial_task_reference
31383                  , p_out_task_id        => l_fin_task_id
31384                  , p_return_status      => x_return_status );
31385 
31386         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31387               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31388         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31389               RAISE FND_API.G_EXC_ERROR;
31390         END IF;
31391     END IF;
31392 
31393 --  Populate the table with input parameters
31394 
31395     IF ( i IS NOT NULL ) THEN
31396        l_action_in_tbl(i).action_name                 :=  p_action_name                 ;
31397        l_action_in_tbl(i).action_owner_id             :=  p_action_owner_id             ;
31398        l_action_in_tbl(i).function_code               :=  p_function_code               ;
31399        l_action_in_tbl(i).due_date                    :=  p_due_date                    ;
31400        l_action_in_tbl(i).description                 :=  p_description                 ;
31401        l_action_in_tbl(i).completion_date             :=  p_completion_date             ;
31402        l_action_in_tbl(i).pm_source_code              :=  p_pm_source_code              ;
31403        l_action_in_tbl(i).pm_action_reference         :=  p_pm_action_reference         ;
31404        -- for bug# 3729250
31405 --       l_action_in_tbl(i).carrying_out_org_id         :=  p_carrying_out_org_id         ;
31406        l_action_in_tbl(i).pm_deliverable_reference    :=  p_deliverable_reference       ;
31407        l_action_in_tbl(i).deliverable_id              :=  l_deliverable_id              ; -- 3749474 earlier p_deliverable_id was passed
31408        l_action_in_tbl(i).financial_task_id           :=  l_fin_task_id                 ; -- for bug# 3729250
31409        l_action_in_tbl(i).destination_type_code       :=  p_destination_type_code       ;
31410        l_action_in_tbl(i).receiving_org_id            :=  p_receiving_org_id            ;
31411        l_action_in_tbl(i).receiving_location_id       :=  p_receiving_location_id       ;
31412        l_action_in_tbl(i).po_need_by_date             :=  p_po_need_by_date             ;
31413        l_action_in_tbl(i).vendor_id                   :=  p_vendor_id                   ;
31414        l_action_in_tbl(i).vendor_site_code            :=  p_vendor_site_code            ;
31415 --       l_action_in_tbl(i).project_currency            :=  p_project_currency            ;
31416        l_action_in_tbl(i).Quantity                    :=  p_Quantity                    ;
31417        l_action_in_tbl(i).uom_code                    :=  p_uom_code                    ;
31418        l_action_in_tbl(i).unit_price                  :=  p_unit_price                  ;
31419        l_action_in_tbl(i).exchange_rate_type          :=  p_exchange_rate_type          ;
31420        l_action_in_tbl(i).exchange_rate_date          :=  p_exchange_rate_date          ;
31421        l_action_in_tbl(i).exchange_rate               :=  p_exchange_rate               ;
31422        l_action_in_tbl(i).expenditure_type            :=  p_expenditure_type            ;
31423        l_action_in_tbl(i).expenditure_org_id          :=  p_expenditure_org_id          ;
31424        l_action_in_tbl(i).expenditure_item_date       :=  p_expenditure_item_date       ;
31425        l_action_in_tbl(i).requisition_line_type_id    :=  p_requisition_line_type_id    ;
31426        l_action_in_tbl(i).category_id                 :=  p_category_id                 ;
31427        l_action_in_tbl(i).ready_to_procure_flag       :=  p_ready_to_procure_flag       ;
31428        l_action_in_tbl(i).initiate_procure_flag       :=  p_initiate_procure_flag       ;
31429        l_action_in_tbl(i).ship_from_organization_id   :=  p_ship_from_organization_id   ;
31430        l_action_in_tbl(i).ship_from_location_id       :=  p_ship_from_location_id       ;
31431        l_action_in_tbl(i).ship_to_organization_id     :=  p_ship_to_organization_id     ;
31432        l_action_in_tbl(i).ship_to_location_id         :=  p_ship_to_location_id         ;
31433        l_action_in_tbl(i).demand_schedule             :=  p_demand_schedule             ;
31434        l_action_in_tbl(i).expected_shipment_date      :=  p_expected_shipment_date      ;
31435        l_action_in_tbl(i).promised_shipment_date      :=  p_promised_shipment_date      ;
31436        l_action_in_tbl(i).volume                      :=  p_volume                      ;
31437        l_action_in_tbl(i).volume_uom                  :=  p_volume_uom                  ;
31438        l_action_in_tbl(i).weight                      :=  p_weight                      ;
31439        l_action_in_tbl(i).weight_uom                  :=  p_weight_uom                  ;
31440        l_action_in_tbl(i).ready_to_ship_flag          :=  p_ready_to_ship_flag          ;
31441        l_action_in_tbl(i).initiate_planning_flag      :=  p_initiate_planning_flag      ;
31442        l_action_in_tbl(i).initiate_shipping_flag      :=  p_initiate_shipping_flag      ;
31443        l_action_in_tbl(i).event_type                  :=  p_event_type                  ;
31444        l_action_in_tbl(i).currency                    :=  p_currency                    ;
31445        l_action_in_tbl(i).invoice_amount              :=  p_invoice_amount              ;
31446        l_action_in_tbl(i).revenue_amount              :=  p_revenue_amount              ;
31447        l_action_in_tbl(i).event_date                  :=  p_event_date                  ;
31448        l_action_in_tbl(i).event_number                :=  p_event_number                ;
31449        l_action_in_tbl(i).organization_id             :=  p_organization_id             ;
31450        l_action_in_tbl(i).bill_hold_flag              :=  p_bill_hold_flag              ;
31451        l_action_in_tbl(i).project_functional_rate_type:=  p_project_functional_rate_type;
31452        l_action_in_tbl(i).project_functional_rate_date:=  p_project_functional_rate_date;
31453        l_action_in_tbl(i).project_functional_rate     :=  p_project_functional_rate     ;
31454        l_action_in_tbl(i).project_rate_type           :=  p_project_rate_type           ;
31455        l_action_in_tbl(i).project_rate_date           :=  p_project_rate_date           ;
31456        l_action_in_tbl(i).project_rate                :=  p_project_rate                ;
31457        l_action_in_tbl(i).funding_rate_type           :=  p_funding_rate_type           ;
31458        l_action_in_tbl(i).funding_rate_date           :=  p_funding_rate_date           ;
31459        l_action_in_tbl(i).funding_rate                :=  p_funding_rate                ;
31460        l_action_in_tbl(i).pm_event_reference          :=  p_pm_event_reference          ; -- 3651489 added parameter
31461        l_action_in_tbl(i).action_id                   :=  l_action_id                   ; -- 3729250 added parameter
31462     END IF;
31463 
31464 --  Call api to update actions  passing the newly populated plsql table
31465     Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31466     ( p_api_version            => p_api_version
31467     , p_init_msg_list          => FND_API.G_FALSE
31468     , p_commit                 => FND_API.G_FALSE
31469     , p_validate_only          => FND_API.G_FALSE
31470     , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
31471     , p_calling_module         => 'AMG'
31472     , p_debug_mode             => p_debug_mode
31473     , p_insert_or_update       => 'UPDATE'
31474     , p_action_in_tbl          => l_action_in_tbl
31475     , x_action_out_tbl         => l_action_out_tbl
31476     , x_return_status          => x_return_status
31477     , x_msg_count              => l_msg_count
31478     , x_msg_data               => l_msg_data);
31479 
31480     -- 3749474 added code to check for return status
31481 
31482     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31483           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31484     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31485           RAISE FND_API.G_EXC_ERROR;
31486     END IF;
31487 
31488 ---- --dbms_output.put_line('after  Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper'||x_return_status);
31489      i := l_action_out_tbl.first();
31490 
31491      WHILE i IS NOT NULL LOOP
31492         ---- --dbms_output.put_line('action created ['||l_action_out_tbl(i).action_id||'] status ['||l_action_out_tbl(i).return_status);
31493         i := l_action_out_tbl.next(i);
31494      END LOOP;
31495 
31496     -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31497     IF (p_commit = FND_API.G_TRUE) THEN
31498         COMMIT;
31499     END IF;
31500 
31501     IF p_debug_mode = 'Y' THEN
31502        pa_debug.reset_curr_function;
31503        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31504    END IF;
31505 
31506 EXCEPTION
31507    WHEN FND_API.G_EXC_ERROR        THEN
31508       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31509       --IF (p_commit = FND_API.G_TRUE) THEN
31510       ROLLBACK TO update_deliverable_actions_pub;
31511       --END IF;
31512 
31513       IF p_debug_mode = 'Y' THEN
31514           pa_debug.reset_curr_function;
31515           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31516       END IF;
31517       x_return_status := FND_API.G_RET_STS_ERROR;
31518       x_msg_count := FND_MSG_PUB.count_msg;
31519 
31520       IF x_msg_count = 1 THEN
31521            PA_INTERFACE_UTILS_PUB.get_messages
31522                (p_encoded        => FND_API.G_FALSE,
31523                 p_msg_index      => 1,
31524                 p_msg_count      => x_msg_count,
31525                 p_msg_data       => x_msg_data,
31526                 p_data           => l_data, --4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31527                 p_msg_index_out  => l_msg_index_out);
31528         x_msg_data := l_data ; -- 4537865
31529      END IF;
31530 
31531    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
31532       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31533       --IF (p_commit = FND_API.G_TRUE) THEN
31534       ROLLBACK TO update_deliverable_actions_pub;
31535       --END IF;
31536 
31537       IF p_debug_mode = 'Y' THEN
31538           pa_debug.reset_curr_function;
31539           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31540       END IF;
31541       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31542       x_msg_count := FND_MSG_PUB.count_msg;
31543 
31544       IF x_msg_count = 1 THEN
31545            PA_INTERFACE_UTILS_PUB.get_messages
31546                (p_encoded        => FND_API.G_FALSE,
31547                 p_msg_index      => 1,
31548                 p_msg_count      => x_msg_count,
31549                 p_msg_data       => x_msg_data,
31550                 p_data           => l_data,-- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31551                 p_msg_index_out  => l_msg_index_out);
31552                 x_msg_data := l_data ; -- 4537865
31553      END IF;
31554 
31555    WHEN OTHERS THEN
31556       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31557       -- IF (p_commit = FND_API.G_TRUE) THEN
31558       ROLLBACK TO update_deliverable_actions_pub;
31559       -- END IF;
31560 
31561       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31562       x_msg_count := 1;
31563       x_msg_data := SQLERRM;
31564 
31565       IF p_debug_mode = 'Y' THEN
31566           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31567           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31568           pa_debug.reset_curr_function;
31569       END IF;
31570 
31571    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
31572        FND_MSG_PUB.add_exc_msg
31573                    ( p_pkg_name            => G_PKG_NAME
31574                    , p_procedure_name      => l_api_name   );
31575   END IF;
31576 
31577   END update_deliverable_action;
31578 
31579 
31580 -- SubProgram           : DELETE_DELIVERABLES
31581 -- Type                 : PUBLIC FUNCTION
31582 -- Purpose              : This function will delete the deliverable - Single record
31583 -- Assumptions          : None
31584 
31585 Procedure Delete_Deliverables (
31586    p_api_version              IN  NUMBER   := 1.0
31587   ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_FALSE
31588   ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
31589   ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31590   ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31591   ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31592   --for bug# 3729250
31593   ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31594   ,p_pm_dlv_source_reference  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31595   ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31596   ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31597   ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31598 )IS
31599   l_api_name VARCHAR2(30) := 'Delete_Deliverables';
31600   l_deliverable_id NUMBER;
31601   l_dlvr_version_id NUMBER;
31602   l_project_id NUMBER;
31603   l_function_allowed      VARCHAR2(1);
31604   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31605 
31606   l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
31607   l_msg_index_out              NUMBER;
31608   l_msg_count                  NUMBER ;
31609   l_data                       VARCHAR2(2000);
31610   l_msg_data                   VARCHAR2(2000);
31611 
31612 
31613 BEGIN
31614  --  Initialize the message table if requested.
31615     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
31616        FND_MSG_PUB.initialize;
31617     END IF;
31618 
31619     -- 3735792, setting save point unconditionally
31620     --IF (p_commit = FND_API.G_TRUE) THEN
31621     savepoint DELETE_DELIVERABLE_PUB;
31622     --END IF;
31623 
31624     IF l_debug_mode = 'Y' THEN
31625           PA_DEBUG.set_curr_function( p_function   => l_api_name,
31626                                       p_debug_mode => l_debug_mode );
31627           pa_debug.g_err_stage:= 'Inside '||l_api_name;
31628           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31629     END IF;
31630 
31631  --  Set API return status to success
31632     x_return_status     := FND_API.G_RET_STS_SUCCESS;
31633 
31634 -- Function Security Check
31635     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31636     (p_api_version_number => p_api_version,
31637      p_responsibility_id  => l_resp_id,
31638      p_function_name      => 'PA_DELIVERABLE_EDIT',
31639      p_msg_count          => x_msg_count,
31640      p_msg_data           => x_msg_data,
31641      p_return_status      => x_return_status,
31642      p_function_allowed   => l_function_allowed);
31643 
31644      IF l_debug_mode = 'Y' THEN
31645           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
31646      END IF;
31647 
31648      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
31649          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31650      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
31651          RAISE FND_API.G_EXC_ERROR;
31652      END IF;
31653 
31654      IF l_function_allowed = 'N' THEN
31655         PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
31656                             ,p_msg_name         => 'PA_FUNCTION_SECURITY_ENFORCED');
31657          x_return_status := FND_API.G_RET_STS_ERROR;
31658          RAISE FND_API.G_EXC_ERROR;
31659      END IF;
31660 
31661 -- validate the input parameters.
31662 -- Validate Project Reference / ID
31663     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
31664                     p_pm_project_reference =>   p_pm_project_reference
31665                  ,  p_pa_project_id     =>      p_project_id
31666                  ,  p_out_project_id    =>      l_project_id
31667                  ,  p_return_status     =>      x_return_status
31668         );
31669 
31670     IF l_debug_mode = 'Y' THEN
31671          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31672     END IF;
31673 
31674     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31675         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31676     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31677         RAISE  FND_API.G_EXC_ERROR;
31678     END IF;
31679 
31680 -- Validate Deliverable Reference / ID
31681     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
31682       (   p_deliverable_reference => p_pm_dlv_source_reference
31683         -- for bug# 3729250
31684         , p_deliverable_id        => p_deliverable_id
31685         , p_project_id            => l_project_id
31686         , p_out_deliverable_id    => l_deliverable_id
31687         , p_return_status         => x_return_status
31688       );
31689 
31690     IF l_debug_mode = 'Y' THEN
31691         pa_debug.write(g_pkg_name,'Dlvr Reference Valid Return Status ['||x_return_status||']Dlvr ID['||l_deliverable_id||']',3) ;
31692     END IF;
31693 
31694     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31695         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31696     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31697         RAISE FND_API.G_EXC_ERROR;
31698     END IF;
31699 
31700 -- Derive deliverable version ID and call api Delete Deliverable. It
31701      l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
31702 
31703     IF l_debug_mode = 'Y' THEN
31704         pa_debug.write(g_pkg_name,'Derived Dlvr Version ID ['||l_dlvr_version_id||'] for Dlvr ID['||l_deliverable_id||']',3) ;
31705     END IF;
31706 
31707 -- deletes the corresponding actions and associations also.
31708    IF ( l_dlvr_version_id IS NOT NULL )
31709    THEN
31710       pa_deliverable_pvt.delete_deliverable
31711          (p_api_version         => p_api_version
31712          ,p_init_msg_list       => FND_API.G_FALSE
31713          -- 3735792, passing p_commit as false to next level api calls
31714          ,p_commit              => FND_API.G_FALSE
31715          ,p_validate_only       => FND_API.G_FALSE
31716          ,p_validation_level    => FND_API.G_VALID_LEVEL_FULL
31717          ,p_calling_module      => 'AMG'
31718          ,p_debug_mode          => l_debug_mode
31719          ,p_max_msg_count       => null
31720          ,p_dlv_element_id      => l_deliverable_id
31721          ,p_dlv_version_id      => l_dlvr_version_id
31722          ,p_rec_ver_number      => null
31723          ,p_project_id          => l_project_id
31724          ,x_return_status       => x_return_status
31725          ,x_msg_count           => x_msg_count
31726          ,x_msg_data            => x_msg_data   );
31727 
31728      IF l_debug_mode = 'Y' THEN
31729         pa_debug.write(g_pkg_name,' after pa_deliverable_pvt.delete_deliverable ['||x_return_status||']',3) ;
31730      END IF;
31731 
31732      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31733         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31734      ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31735         RAISE FND_API.G_EXC_ERROR;
31736      END IF;
31737 
31738    END IF;
31739 
31740    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31741    IF (p_commit = FND_API.G_TRUE) THEN
31742        COMMIT;
31743    END IF;
31744 
31745    IF l_debug_mode = 'Y' THEN
31746        pa_debug.reset_curr_function;
31747        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31748    END IF;
31749 
31750 EXCEPTION
31751   WHEN FND_API.G_EXC_ERROR  THEN
31752       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31753       --IF (p_commit = FND_API.G_TRUE) THEN
31754       ROLLBACK TO DELETE_DELIVERABLE_PUB;
31755       --END IF;
31756 
31757       x_return_status := FND_API.G_RET_STS_ERROR;
31758       l_msg_count := FND_MSG_PUB.count_msg;
31759 
31760       IF l_msg_count = 1 AND x_msg_data IS NULL
31761       THEN
31762            PA_INTERFACE_UTILS_PUB.get_messages
31763                (p_encoded        => FND_API.G_FALSE,
31764                 p_msg_index      => 1,
31765                 p_msg_count      => x_msg_count,
31766                 p_msg_data       => l_msg_data,
31767                 p_data           => l_data,
31768                 p_msg_index_out  => l_msg_index_out);
31769 
31770        x_msg_data := l_data;
31771            x_msg_count := l_msg_count;
31772      ELSE
31773           x_msg_count := l_msg_count;
31774 
31775      END IF;
31776 
31777      IF  l_debug_mode = 'Y' THEN
31778           pa_debug.reset_curr_function;
31779           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31780      END IF;
31781 
31782   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
31783      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31784      --IF (p_commit = FND_API.G_TRUE) THEN
31785      ROLLBACK TO DELETE_DELIVERABLE_PUB;
31786      --END IF;
31787 
31788      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31789      l_msg_count := FND_MSG_PUB.count_msg;
31790 
31791      IF l_msg_count = 1 AND x_msg_data IS NULL
31792      THEN
31793            PA_INTERFACE_UTILS_PUB.get_messages
31794                (p_encoded        => FND_API.G_FALSE,
31795                 p_msg_index      => 1,
31796                 p_msg_count      => x_msg_count,
31797                 p_msg_data       => l_msg_data,
31798                 p_data           => l_data,
31799                 p_msg_index_out  => l_msg_index_out);
31800 
31801        x_msg_data := l_data;
31802            x_msg_count := l_msg_count;
31803      ELSE
31804           x_msg_count := l_msg_count;
31805      END IF;
31806 
31807      IF  l_debug_mode = 'Y' THEN
31808           pa_debug.reset_curr_function;
31809           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31810      END IF;
31811 
31812   WHEN OTHERS THEN
31813     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31814     --IF (p_commit = FND_API.G_TRUE) THEN
31815     ROLLBACK TO DELETE_DELIVERABLE_PUB;
31816     --END IF;
31817 
31818      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31819      x_msg_count := 1;
31820      x_msg_data := SQLERRM;
31821 
31822      IF l_debug_mode = 'Y' THEN
31823           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31824           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31825           pa_debug.reset_curr_function;
31826      END IF;
31827 
31828      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
31829        FND_MSG_PUB.add_exc_msg
31830            ( p_pkg_name    => G_PKG_NAME
31831            , p_procedure_name  => l_api_name  );
31832     END IF;
31833 
31834 END Delete_Deliverables;
31835 
31836 -- SubProgram           : DELETE_DELIVERABLE_ACTIONS
31837 -- Type                 : PUBLIC FUNCTION
31838 -- Purpose              : This function will delete the action - Single record
31839 -- Assumptions          : None
31840 
31841 PROCEDURE delete_deliverable_actions
31842 (  p_api_version              IN  NUMBER   := 1.0 -- 3749480 earlier defaulted with G_PA_MISS_NUM ; Bug#3451073 Removed Quotes
31843   ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_FALSE
31844   ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
31845   ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31846   ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31847   ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31848   -- for bug# 3729250 , changed datatype from NUMBER TO VARCHAR2
31849   ,p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31850   ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31851   -- for bug# 3729250 , changed datatype from NUMBER TO VARCHAR2
31852   ,p_action_source_reference  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31853   ,p_action_id                IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31854   ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31855   ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31856   ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31857 )
31858 
31859 IS
31860   l_api_name VARCHAR2(30) := 'Delete_Deliverable_Actions';
31861   l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
31862 
31863   l_project_id NUMBER ;
31864   l_action_id NUMBER;
31865   l_action_version_id NUMBER;
31866   l_deliverable_id NUMBER;
31867   l_dlvr_version_id NUMBER;
31868   l_function_code  Pa_Proj_Elements.function_code%TYPE;
31869 
31870   l_function_allowed      VARCHAR2(1);
31871   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31872 
31873   l_msg_index_out              NUMBER;
31874   l_msg_count                  NUMBER ;
31875   l_data                       VARCHAR2(2000);
31876   l_msg_data                   VARCHAR2(2000);
31877 
31878 BEGIN
31879  --  Initialize the message table if requested.
31880     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
31881        FND_MSG_PUB.initialize;
31882     END IF;
31883 
31884     -- 3735792, setting save point unconditionally
31885     --IF (p_commit = FND_API.G_TRUE) THEN
31886     savepoint DELETE_DELIVERABLE_ACTION_PUB;
31887     --END IF;
31888 
31889     IF l_debug_mode = 'Y' THEN
31890           PA_DEBUG.set_curr_function( p_function   => l_api_name,
31891                                       p_debug_mode => l_debug_mode );
31892           pa_debug.g_err_stage:= 'Inside '||l_api_name;
31893           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31894     END IF;
31895  --  Set API return status to success
31896     x_return_status     := FND_API.G_RET_STS_SUCCESS;
31897 
31898 -- Function Security Check
31899     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31900     (p_api_version_number => p_api_version,
31901      p_responsibility_id  => l_resp_id,
31902      p_function_name      => 'PA_DELIVERABLE_EDIT',
31903      p_msg_count          => x_msg_count,
31904      p_msg_data           => x_msg_data,
31905      p_return_status      => x_return_status,
31906      p_function_allowed   => l_function_allowed);
31907 
31908      IF l_debug_mode = 'Y' THEN
31909           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
31910      END IF;
31911 
31912      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
31913          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31914      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
31915          RAISE FND_API.G_EXC_ERROR;
31916      END IF;
31917 
31918      IF l_function_allowed = 'N' THEN
31919         pa_interface_utils_pub.map_new_amg_msg
31920         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
31921          ,p_msg_attribute    => 'CHANGE'
31922          ,p_resize_flag      => 'Y'
31923          ,p_msg_context      => 'GENERAL'
31924          ,p_attribute1       => ''
31925          ,p_attribute2       => ''
31926          ,p_attribute3       => ''
31927          ,p_attribute4       => ''
31928          ,p_attribute5       => '');
31929 
31930      x_return_status := FND_API.G_RET_STS_ERROR;
31931          RAISE FND_API.G_EXC_ERROR;
31932      END IF;
31933 
31934 -- validate the input parameters.
31935 -- Validate Project Reference / ID
31936     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
31937                     p_pm_project_reference =>   p_pm_project_reference
31938                  ,  p_pa_project_id     =>      p_project_id
31939                  ,  p_out_project_id    =>      l_project_id
31940                  ,  p_return_status     =>      x_return_status
31941         );
31942 
31943     IF l_debug_mode = 'Y' THEN
31944          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31945     END IF;
31946 
31947     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31948         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31949     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31950         RAISE  FND_API.G_EXC_ERROR;
31951     END IF;
31952 
31953 -- Validate Deliverable Reference / ID
31954     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
31955       (   p_deliverable_reference => p_pm_deliverable_reference
31956         , p_deliverable_id        => p_deliverable_id
31957         , p_project_id            => l_project_id
31958         , p_out_deliverable_id    => l_deliverable_id
31959         , p_return_status         => x_return_status
31960       );
31961 
31962     IF l_debug_mode = 'Y' THEN
31963         pa_debug.write(g_pkg_name,'Dlvr Reference Valid Return Status ['||x_return_status||']Dlvr ID['||l_deliverable_id||']',3) ;
31964     END IF;
31965 
31966     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31967         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31968     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31969         RAISE FND_API.G_EXC_ERROR;
31970     END IF;
31971 
31972 -- Validate Action Reference / ID
31973     Pa_Deliverable_Utils.Convert_pm_actionref_to_id
31974     (
31975        p_action_reference   =>  p_action_source_reference
31976       ,p_action_id          =>  p_action_id
31977       ,p_deliverable_id     =>  l_deliverable_id -- 3749480 earlier p_deliverable_id was used
31978       ,p_project_id         =>  l_project_id
31979       ,p_out_action_id      =>  l_action_id
31980       ,p_return_status      =>  x_return_status
31981     );
31982 
31983     IF l_debug_mode = 'Y' THEN
31984         pa_debug.write(g_pkg_name,'Dlvr Action Reference Valid Return Status ['||x_return_status||']Action ID['||l_action_id||']',3) ;
31985     END IF;
31986 
31987    IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31988         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31989     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31990         RAISE FND_API.G_EXC_ERROR;
31991     END IF;
31992 
31993 -- Derive Deliverable_version_id
31994    l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
31995 
31996     IF l_debug_mode = 'Y' THEN
31997         pa_debug.write(g_pkg_name,'Derived Dlvr Version ID ['||l_dlvr_version_id||'] for Dlvr ID['||l_deliverable_id||']',3) ;
31998     END IF;
31999 
32000 -- Derive Action_version_id and Function Code
32001    l_action_version_id := Pa_Deliverable_Utils.Get_Action_Version_Id (l_action_id, null, l_project_id) ;
32002    l_function_code     := Pa_Deliverable_Utils.GET_FUNCTION_CODE(l_action_id) ;
32003 
32004     IF l_debug_mode = 'Y' THEN
32005         pa_debug.write(g_pkg_name,'Derived Action version ID  ['||l_action_version_id||']and function code ['||l_function_code||']',3) ;
32006     END IF;
32007 
32008 -- Calling Actions API to delete actions.
32009 
32010    pa_actions_pvt.DELETE_DLV_ACTION
32011      (p_api_version           =>  p_api_version
32012      ,p_init_msg_list         =>  FND_API.G_FALSE
32013      ,p_commit                =>  FND_API.G_FALSE
32014      ,p_validate_only         =>  FND_API.G_FALSE
32015      ,p_validation_level      =>  FND_API.G_VALID_LEVEL_FULL
32016      ,p_calling_module        =>  'AMG'
32017      ,p_debug_mode            =>  l_debug_mode
32018      ,p_max_msg_count         =>  null
32019      ,p_action_id             =>  l_action_id
32020      ,p_action_ver_id         =>  l_action_version_id
32021      ,p_dlv_element_id        =>  l_deliverable_id
32022      ,p_dlv_version_id        =>  l_dlvr_version_id
32023      ,p_function_code         =>  l_function_code
32024      ,p_project_id            =>  l_project_id
32025      ,x_return_status         =>  x_return_status
32026      ,x_msg_count             =>  x_msg_count
32027      ,x_msg_data              =>  x_msg_data
32028      ) ;
32029 
32030      IF l_debug_mode = 'Y' THEN
32031         pa_debug.write(g_pkg_name,' after  pa_actions_pvt.DELETE_DLV_ACTION ['||x_return_status||']',3) ;
32032      END IF;
32033 
32034     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32035         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32036     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32037         RAISE FND_API.G_EXC_ERROR;
32038     END IF;
32039 
32040    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32041    IF (p_commit = FND_API.G_TRUE) THEN
32042        COMMIT;
32043    END IF;
32044 
32045    IF l_debug_mode = 'Y' THEN
32046        pa_debug.reset_curr_function;
32047        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32048    END IF;
32049 
32050 EXCEPTION
32051   WHEN FND_API.G_EXC_ERROR  THEN
32052       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32053       --IF (p_commit = FND_API.G_TRUE) THEN
32054       ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32055       --END IF;
32056 
32057       x_return_status := FND_API.G_RET_STS_ERROR;
32058       l_msg_count := FND_MSG_PUB.count_msg;
32059 
32060       IF l_msg_count = 1 AND x_msg_data IS NULL
32061       THEN
32062            PA_INTERFACE_UTILS_PUB.get_messages
32063                (p_encoded        => FND_API.G_FALSE,
32064                 p_msg_index      => 1,
32065                 p_msg_count      => x_msg_count,
32066                 p_msg_data       => l_msg_data,
32067                 p_data           => l_data,
32068                 p_msg_index_out  => l_msg_index_out);
32069 
32070        x_msg_data := l_data;
32071            x_msg_count := l_msg_count;
32072      ELSE
32073           x_msg_count := l_msg_count;
32074 
32075      END IF;
32076 
32077      IF  l_debug_mode = 'Y' THEN
32078           pa_debug.reset_curr_function;
32079           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32080      END IF;
32081 
32082   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
32083      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32084      --IF (p_commit = FND_API.G_TRUE) THEN
32085      ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32086      --END IF;
32087 
32088      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32089      l_msg_count := FND_MSG_PUB.count_msg;
32090 
32091      IF l_msg_count = 1 AND x_msg_data IS NULL
32092      THEN
32093            PA_INTERFACE_UTILS_PUB.get_messages
32094                (p_encoded        => FND_API.G_FALSE,
32095                 p_msg_index      => 1,
32096                 p_msg_count      => x_msg_count,
32097                 p_msg_data       => l_msg_data,
32098                 p_data           => l_data,
32099                 p_msg_index_out  => l_msg_index_out);
32100 
32101        x_msg_data := l_data;
32102            x_msg_count := l_msg_count;
32103      ELSE
32104           x_msg_count := l_msg_count;
32105 
32106      END IF;
32107 
32108      IF  l_debug_mode = 'Y' THEN
32109           pa_debug.reset_curr_function;
32110           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32111      END IF;
32112 
32113   WHEN OTHERS THEN
32114     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32115     --IF (p_commit = FND_API.G_TRUE) THEN
32116     ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32117     --END IF;
32118 
32119      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32120      x_msg_count := 1;
32121      x_msg_data := SQLERRM;
32122 
32123      IF l_debug_mode = 'Y' THEN
32124           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32125           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32126           pa_debug.reset_curr_function;
32127      END IF;
32128 
32129      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32130        FND_MSG_PUB.add_exc_msg
32131            ( p_pkg_name    => G_PKG_NAME
32132            , p_procedure_name  => l_api_name  );
32133     END IF;
32134 
32135 END Delete_Deliverable_Actions;
32136 
32137 -- SubProgram           : DELETE_DLV_TO_TASK_ASSCN
32138 -- Type                 : PUBLIC FUNCTION
32139 -- Purpose              : This function will delete the association of Deliverable with Task - Single record
32140 -- Assumptions          : None
32141 
32142 Procedure DELETE_DLV_TO_TASK_ASSCN (
32143       p_api_version              IN  NUMBER   := 1.0
32144      ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_TRUE
32145      ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
32146      ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32147      ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32148      ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32149      ,p_task_reference           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32150      ,p_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32151      ,p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32152      ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32153      ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32154      ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32155      ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32156      )IS
32157 
32158 
32159   l_api_name VARCHAR2(30) := 'DELETE_DLV_TO_TASK_ASSCN';
32160   l_project_id NUMBER ;
32161   l_task_id NUMBER;
32162   l_task_reference VARCHAR2(240);
32163   l_deliverable_id NUMBER;
32164   l_dlvr_version_id NUMBER;
32165   l_function_code  Pa_Proj_Elements.function_code%TYPE;
32166   l_object_relationship_Id     pa_object_relationships.object_relationship_Id%TYPE;
32167   l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
32168 
32169   l_function_allowed      VARCHAR2(1);
32170   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32171 
32172   l_msg_index_out              NUMBER;
32173   l_msg_count                  NUMBER ;
32174   l_data                       VARCHAR2(2000);
32175   l_msg_data                   VARCHAR2(2000);
32176 
32177 BEGIN
32178 
32179  --  Initialize the message table if requested.
32180     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
32181        FND_MSG_PUB.initialize;
32182     END IF;
32183 
32184     -- 3735792, setting save point unconditionally
32185     --IF (p_commit = FND_API.G_TRUE) THEN
32186     savepoint DELETE_DLV_TO_TASK_ASSCN_PUB;
32187     --END IF;
32188 
32189     IF l_debug_mode = 'Y' THEN
32190           PA_DEBUG.set_curr_function( p_function   => l_api_name,
32191                                       p_debug_mode => l_debug_mode );
32192           pa_debug.g_err_stage:= 'Inside '||l_api_name;
32193           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32194     END IF;
32195 
32196  --  Set API return status to success
32197     x_return_status     := FND_API.G_RET_STS_SUCCESS;
32198 
32199 -- Function Security Check
32200     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32201     (p_api_version_number => p_api_version,
32202      p_responsibility_id  => l_resp_id,
32203      p_function_name      => 'PA_DELIVERABLE_EDIT',
32204      p_msg_count          => x_msg_count,
32205      p_msg_data           => x_msg_data,
32206      p_return_status      => x_return_status,
32207      p_function_allowed   => l_function_allowed);
32208 
32209 
32210      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
32211          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32212      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
32213          RAISE FND_API.G_EXC_ERROR;
32214      END IF;
32215 
32216      IF l_function_allowed = 'N' THEN
32217         pa_interface_utils_pub.map_new_amg_msg
32218         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32219          ,p_msg_attribute    => 'CHANGE'
32220          ,p_resize_flag      => 'Y'
32221          ,p_msg_context      => 'GENERAL'
32222          ,p_attribute1       => ''
32223          ,p_attribute2       => ''
32224          ,p_attribute3       => ''
32225          ,p_attribute4       => ''
32226          ,p_attribute5       => '');
32227 
32228      x_return_status := FND_API.G_RET_STS_ERROR;
32229          RAISE FND_API.G_EXC_ERROR;
32230      END IF;
32231 
32232 -- validate the input parameters.
32233 -- Validate Project Reference / ID
32234     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
32235                     p_pm_project_reference =>   p_pm_project_reference
32236                  ,  p_pa_project_id     =>      p_project_id
32237                  ,  p_out_project_id    =>      l_project_id
32238                  ,  p_return_status     =>      x_return_status
32239         );
32240 
32241     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32242         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32243     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32244         RAISE  FND_API.G_EXC_ERROR;
32245     END IF;
32246 
32247 -- Validate Deliverable Reference / ID
32248     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32249       (   p_deliverable_reference => p_pm_deliverable_reference
32250         , p_deliverable_id        => p_deliverable_id
32251         , p_project_id            => l_project_id
32252         , p_out_deliverable_id    => l_deliverable_id
32253         , p_return_status         => x_return_status
32254       );
32255 
32256     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32257         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32258     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32259         RAISE FND_API.G_EXC_ERROR;
32260     END IF;
32261 
32262 -- Validate Task Reference / ID
32263     IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
32264        l_task_id := NULL;
32265     ELSE
32266        l_task_id := p_task_id;
32267     END IF;
32268 
32269     IF p_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
32270        l_task_reference := NULL;
32271     ELSE
32272        l_task_reference := p_task_reference;
32273     END IF;
32274 
32275     IF ( p_task_id IS NOT NULL OR l_task_reference IS NOT NULL ) THEN
32276        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
32277                    p_pa_project_id      => l_project_id
32278                  , p_structure_type     => 'WORKPLAN'
32279                  , p_pa_task_id         => p_task_id
32280                  , p_pm_task_reference  => p_task_reference
32281                  , p_out_task_id        => l_task_id
32282                  , p_return_status      => x_return_status );
32283 
32284        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32285              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32286        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32287              RAISE FND_API.G_EXC_ERROR;
32288        END IF;
32289     END IF;
32290 
32291 
32292 -- Derive Deliverable_version_id
32293    l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32294 
32295 -- Derive Object Relationship ID
32296    l_object_relationship_id := Pa_Deliverable_Utils.Get_Dlvr_Task_Asscn_ID(l_deliverable_id, l_task_id);
32297 
32298 -- Calling deliverable api to Delete Association
32299    pa_deliverable_pub.DELETE_DLV_TASK_ASSOCIATION
32300      (p_api_version              =>   p_api_version
32301      ,p_init_msg_list            =>   FND_API.G_FALSE
32302      ,p_commit                   =>   FND_API.G_FALSE
32303      ,p_validate_only            =>   FND_API.G_FALSE
32304      ,p_validation_level         =>   FND_API.G_VALID_LEVEL_FULL
32305      ,p_calling_module           =>   'AMG'
32306      ,p_debug_mode               =>   l_debug_mode
32307      ,p_max_msg_count            =>   null
32308      ,p_task_element_id          =>   l_task_id
32309      ,p_task_version_id          =>   -99       -- 3749498 passing -99 instead of null
32310      ,p_dlv_element_id           =>   l_deliverable_Id
32311      ,p_dlv_version_id           =>   l_dlvr_version_id
32312      ,p_object_relationship_id   =>   l_object_relationship_id
32313      ,p_obj_rec_ver_number       =>   null
32314      ,p_project_id               =>   l_project_id
32315      ,p_calling_context        =>   'TASKS'
32316      ,x_return_status            =>   x_return_status
32317      ,x_msg_count                =>   x_msg_count
32318      ,x_msg_data                 =>   x_msg_data
32319      );
32320 
32321     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32322         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32323     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32324         RAISE FND_API.G_EXC_ERROR;
32325     END IF;
32326 
32327    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32328    IF (p_commit = FND_API.G_TRUE) THEN
32329        COMMIT;
32330    END IF;
32331 
32332    IF l_debug_mode = 'Y' THEN
32333        pa_debug.reset_curr_function;
32334        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32335    END IF;
32336 
32337 EXCEPTION
32338   WHEN FND_API.G_EXC_ERROR  THEN
32339       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32340       --IF (p_commit = FND_API.G_TRUE) THEN
32341       ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32342       --END IF;
32343 
32344       x_return_status := FND_API.G_RET_STS_ERROR;
32345       l_msg_count := FND_MSG_PUB.count_msg;
32346 
32347       IF l_msg_count = 1 AND x_msg_data IS NULL
32348       THEN
32349            PA_INTERFACE_UTILS_PUB.get_messages
32350                (p_encoded        => FND_API.G_FALSE,
32351                 p_msg_index      => 1,
32352                 p_msg_count      => x_msg_count,
32353                 p_msg_data       => l_msg_data,
32354                 p_data           => l_data,
32355                 p_msg_index_out  => l_msg_index_out);
32356 
32357        x_msg_data := l_data;
32358            x_msg_count := l_msg_count;
32359      ELSE
32360           x_msg_count := l_msg_count;
32361      END IF;
32362 
32363      IF  l_debug_mode = 'Y' THEN
32364           pa_debug.reset_curr_function;
32365           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32366      END IF;
32367 
32368   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
32369      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32370      -- IF (p_commit = FND_API.G_TRUE) THEN
32371      ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32372      --END IF;
32373 
32374      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32375      l_msg_count := FND_MSG_PUB.count_msg;
32376 
32377      IF l_msg_count = 1 AND x_msg_data IS NULL
32378      THEN
32379            PA_INTERFACE_UTILS_PUB.get_messages
32380                (p_encoded        => FND_API.G_FALSE,
32381                 p_msg_index      => 1,
32382                 p_msg_count      => x_msg_count,
32383                 p_msg_data       => l_msg_data,
32384                 p_data           => l_data,
32385                 p_msg_index_out  => l_msg_index_out);
32386 
32387        x_msg_data := l_data;
32388            x_msg_count := l_msg_count;
32389      ELSE
32390           x_msg_count := l_msg_count;
32391      END IF;
32392 
32393      IF  l_debug_mode = 'Y' THEN
32394           pa_debug.reset_curr_function;
32395           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32396      END IF;
32397 
32398   WHEN OTHERS THEN
32399     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32400     --IF (p_commit = FND_API.G_TRUE) THEN
32401     ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32402     --END IF;
32403 
32404      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32405      x_msg_count := 1;
32406      x_msg_data := SQLERRM;
32407 
32408      IF l_debug_mode = 'Y' THEN
32409           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32410           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32411           pa_debug.reset_curr_function;
32412      END IF;
32413 
32414      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32415        FND_MSG_PUB.add_exc_msg
32416            ( p_pkg_name    => G_PKG_NAME
32417            , p_procedure_name  => l_api_name  );
32418     END IF;
32419 
32420 END DELETE_DLV_TO_TASK_ASSCN;
32421 
32422 -- SubProgram           : ASSOCIATE_DLV_TO_TASK
32423 -- Type                 : PUBLIC FUNCTION
32424 -- Purpose              : This function will create the association of Deliverable with Task - Single record
32425 -- Assumptions          : None
32426 
32427 Procedure ASSOCIATE_DLV_TO_TASK (
32428       p_api_version              IN  NUMBER   := 1.0
32429      ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_TRUE
32430      ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
32431      ,p_debug_mode               IN  VARCHAR2 := FND_API.G_FALSE
32432      ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32433      -- added for bug# 3729250
32434      ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32435      ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32436      -- added for bug# 3729250
32437      ,p_pm_task_reference        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32438      ,p_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32439      -- added for bug# 3729250
32440      ,p_deliverable_reference    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32441      ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32442      ,x_return_status            OUT NOCOPY VARCHAR2/*Added the nocopy check for 4537865 */
32443      ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32444      ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32445      )IS
32446 
32447   l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK';
32448   l_project_id NUMBER ;
32449   l_task_id NUMBER;
32450   l_task_reference VARCHAR2(240);
32451   l_deliverable_id NUMBER;
32452   l_dlvr_version_id NUMBER;
32453   l_function_code  Pa_Proj_Elements.function_code%TYPE;
32454   l_object_relationship_Id     pa_object_relationships.object_relationship_Id%TYPE;
32455 
32456   l_function_allowed      VARCHAR2(1);
32457   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32458 
32459   l_msg_index_out              NUMBER;
32460   l_msg_count                  NUMBER ;
32461   l_data                       VARCHAR2(2000);
32462   l_msg_data                   VARCHAR2(2000);
32463 
32464   l_wp_task_flag varchar2(1); -- Added for bug5462298
32465 
32466 BEGIN
32467 
32468  --  Initialize the message table if requested.
32469     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
32470        FND_MSG_PUB.initialize;
32471     END IF;
32472 
32473     -- 3735792, setting save point unconditionally
32474     --IF (p_commit = FND_API.G_TRUE) THEN
32475     savepoint ASSOCIATE_DLV_TO_TASK_PUB;
32476     --END IF;
32477 
32478     IF p_debug_mode = 'Y' THEN
32479           PA_DEBUG.set_curr_function( p_function   => l_api_name,
32480                                       p_debug_mode => p_debug_mode );
32481           pa_debug.g_err_stage:= 'Inside '||l_api_name;
32482           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32483     END IF;
32484 
32485  --  Set API return status to success
32486     x_return_status     := FND_API.G_RET_STS_SUCCESS;
32487 
32488 -- Function Security Check
32489     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32490     (p_api_version_number => p_api_version,
32491      p_responsibility_id  => l_resp_id,
32492      p_function_name      => 'PA_DELIVERABLE_EDIT',
32493      p_msg_count          => x_msg_count,
32494      p_msg_data           => x_msg_data,
32495      p_return_status      => x_return_status,
32496      p_function_allowed   => l_function_allowed);
32497 
32498 
32499      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
32500          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32501      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
32502          RAISE FND_API.G_EXC_ERROR;
32503      END IF;
32504 
32505      IF l_function_allowed = 'N' THEN
32506         pa_interface_utils_pub.map_new_amg_msg
32507         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32508          ,p_msg_attribute    => 'CHANGE'
32509          ,p_resize_flag      => 'Y'
32510          ,p_msg_context      => 'GENERAL'
32511          ,p_attribute1       => ''
32512          ,p_attribute2       => ''
32513          ,p_attribute3       => ''
32514          ,p_attribute4       => ''
32515          ,p_attribute5       => '');
32516 
32517      x_return_status := FND_API.G_RET_STS_ERROR;
32518          RAISE FND_API.G_EXC_ERROR;
32519      END IF;
32520 
32521 -- validate the input parameters.
32522 -- Validate Project Reference / ID
32523     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
32524                     p_pm_project_reference =>   p_pm_project_reference -- 3729250, earlier null was passed
32525                  ,  p_pa_project_id     =>      p_project_id
32526                  ,  p_out_project_id    =>      l_project_id
32527                  ,  p_return_status     =>      x_return_status
32528         );
32529 
32530     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32531         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32532     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32533         RAISE  FND_API.G_EXC_ERROR;
32534     END IF;
32535 
32536 -- Validate Deliverable Reference / ID
32537     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32538       (   p_deliverable_reference => p_deliverable_reference -- 3729250, earlier null was passed
32539         , p_deliverable_id        => p_deliverable_id
32540         , p_project_id            => l_project_id
32541         , p_out_deliverable_id    => l_deliverable_id
32542         , p_return_status         => x_return_status
32543       );
32544 
32545     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32546         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32547     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32548         RAISE FND_API.G_EXC_ERROR;
32549     END IF;
32550 
32551 -- Validate Task Reference / ID
32552        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
32553                    p_pa_project_id      => l_project_id
32554                  , p_structure_type     => 'WORKPLAN'
32555                  , p_pa_task_id         => p_task_id
32556                  , p_pm_task_reference  => p_pm_task_reference -- 3729250, earlier null was passed
32557                  , p_out_task_id        => l_task_id
32558                  , p_return_status      => x_return_status );
32559 
32560     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32561           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32562     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32563           RAISE FND_API.G_EXC_ERROR;
32564     END IF;
32565 
32566 
32567     -- 5462298 Added below code to validate passed task id
32568     -- if it is not workplan task , throw error message
32569 
32570     l_wp_task_flag := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_WORKPLAN_TASK (
32571                                         p_project_id         => l_project_id
32572                                       , p_proj_element_id    => l_task_id );
32573 
32574     IF l_wp_task_flag <> 'Y' THEN
32575 
32576      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
32577      THEN
32578 
32579         PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
32580                             ,p_msg_name         => 'PA_TASK_ID_INVALID');
32581 
32582         x_return_status := FND_API.G_RET_STS_ERROR;
32583         RAISE FND_API.G_EXC_ERROR;
32584 
32585      END IF;
32586 
32587     END IF;
32588 
32589     -- 5462298 end
32590 
32591 -- Derive Deliverable_version_id
32592    l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32593 
32594 -- Calling deliverable api to Create Association
32595      pa_deliverable_pvt.CREATE_DLV_TASK_ASSOCIATION
32596      (p_api_version              =>   p_api_version
32597      ,p_init_msg_list            =>   FND_API.G_FALSE
32598      ,p_commit                   =>   FND_API.G_FALSE
32599      ,p_validate_only            =>   FND_API.G_FALSE
32600      ,p_validation_level         =>   FND_API.G_VALID_LEVEL_FULL
32601      ,p_calling_module           =>   'AMG'
32602      ,p_debug_mode               =>   p_debug_mode
32603      ,p_max_msg_count            =>   null
32604      ,p_task_element_id          =>   l_task_id
32605      ,p_task_version_id          =>   null
32606      ,p_dlv_element_id           =>   l_deliverable_id
32607      ,p_dlv_version_id           =>   l_dlvr_version_id
32608      ,p_project_id               =>   l_project_id
32609      ,x_return_status            =>   x_return_status
32610      ,x_msg_count                =>   x_msg_count
32611      ,x_msg_data                 =>   x_msg_data
32612      );
32613 
32614     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32615         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32616     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32617         RAISE FND_API.G_EXC_ERROR;
32618     END IF;
32619 
32620    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32621    IF (p_commit = FND_API.G_TRUE) THEN
32622        COMMIT;
32623    END IF;
32624 
32625    IF p_debug_mode = 'Y' THEN
32626        pa_debug.reset_curr_function;
32627        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32628    END IF;
32629 
32630 EXCEPTION
32631   WHEN FND_API.G_EXC_ERROR  THEN
32632 
32633       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32634       --IF (p_commit = FND_API.G_TRUE) THEN
32635       ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
32636       --END IF;
32637 
32638       x_return_status := FND_API.G_RET_STS_ERROR;
32639       l_msg_count := FND_MSG_PUB.count_msg;
32640 
32641       IF l_msg_count = 1 AND x_msg_data IS NULL
32642       THEN
32643            PA_INTERFACE_UTILS_PUB.get_messages
32644                (p_encoded        => FND_API.G_FALSE,
32645                 p_msg_index      => 1,
32646                 p_msg_count      => x_msg_count,
32647                 p_msg_data       => l_msg_data,
32648                 p_data           => l_data,
32649                 p_msg_index_out  => l_msg_index_out);
32650 
32651        x_msg_data := l_data;
32652            x_msg_count := l_msg_count;
32653      ELSE
32654           x_msg_count := l_msg_count;
32655      END IF;
32656 
32657      IF  p_debug_mode = 'Y' THEN
32658           pa_debug.reset_curr_function;
32659           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32660      END IF;
32661 
32662   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
32663      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32664      --IF (p_commit = FND_API.G_TRUE) THEN
32665      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
32666      --END IF;
32667 
32668      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32669      l_msg_count := FND_MSG_PUB.count_msg;
32670 
32671      IF l_msg_count = 1 AND x_msg_data IS NULL
32672      THEN
32673            PA_INTERFACE_UTILS_PUB.get_messages
32674                (p_encoded        => FND_API.G_FALSE,
32675                 p_msg_index      => 1,
32676                 p_msg_count      => x_msg_count,
32677                 p_msg_data       => l_msg_data,
32678                 p_data           => l_data,
32679                 p_msg_index_out  => l_msg_index_out);
32680 
32681        x_msg_data := l_data;
32682            x_msg_count := l_msg_count;
32683      ELSE
32684           x_msg_count := l_msg_count;
32685      END IF;
32686 
32687      IF  p_debug_mode = 'Y' THEN
32688           pa_debug.reset_curr_function;
32689           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32690      END IF;
32691 
32692   WHEN OTHERS THEN
32693     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32694     -- IF (p_commit = FND_API.G_TRUE) THEN
32695     ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
32696     -- END IF;
32697 
32698      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32699      x_msg_count := 1;
32700      x_msg_data := SQLERRM;
32701 
32702      IF p_debug_mode = 'Y' THEN
32703           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32704           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32705           pa_debug.reset_curr_function;
32706      END IF;
32707 
32708      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32709        FND_MSG_PUB.add_exc_msg
32710            ( p_pkg_name    => G_PKG_NAME
32711            , p_procedure_name  => l_api_name  );
32712     END IF;
32713 
32714 END ASSOCIATE_DLV_TO_TASK;
32715 
32716 Procedure ASSOCIATE_DLV_TO_TASK_ASSIGN (
32717       p_api_version              IN  NUMBER   := 1.0
32718      ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_TRUE
32719      ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
32720      ,p_debug_mode               IN  VARCHAR2 := FND_API.G_FALSE
32721      ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32722      -- added for bug# 3729250
32723      ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32724      ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32725      ,p_pm_task_asgmt_reference  IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32726      ,p_task_assign_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32727      -- added for bug# 3729250
32728      ,p_deliverable_reference    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32729      ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32730      ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32731      ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32732      ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32733      )IS
32734 
32735   l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK_ASSIGN';
32736   l_project_id NUMBER ;
32737   l_task_assign_id NUMBER;
32738   l_task_assign_reference VARCHAR2(240);
32739   l_deliverable_id NUMBER;
32740   l_dlvr_version_id NUMBER;
32741   l_function_code  Pa_Proj_Elements.function_code%TYPE;
32742   l_object_relationship_Id     pa_object_relationships.object_relationship_Id%TYPE;
32743   l_task_assignment_id  NUMBER ;
32744 
32745   l_function_allowed      VARCHAR2(1);
32746   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32747 
32748   l_msg_index_out              NUMBER;
32749   l_msg_count                  NUMBER ;
32750   l_data                       VARCHAR2(2000);
32751   l_msg_data                   VARCHAR2(2000);
32752 
32753 BEGIN
32754 
32755  --  Initialize the message table if requested.
32756     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
32757        FND_MSG_PUB.initialize;
32758     END IF;
32759 
32760     -- 3735792, setting save point unconditionally
32761     -- IF (p_commit = FND_API.G_TRUE) THEN
32762     savepoint ASSOCIATE_DLV_TO_TASK_ASSIGN;
32763     --END IF;
32764 
32765     IF p_debug_mode = 'Y' THEN
32766           PA_DEBUG.set_curr_function( p_function   => l_api_name,
32767                                       p_debug_mode => p_debug_mode );
32768           pa_debug.g_err_stage:= 'Inside '||l_api_name;
32769           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32770     END IF;
32771 
32772  --  Set API return status to success
32773     x_return_status     := FND_API.G_RET_STS_SUCCESS;
32774 
32775 -- Function Security Check
32776     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32777     (p_api_version_number => p_api_version,
32778      p_responsibility_id  => l_resp_id,
32779      p_function_name      => 'PA_DELIVERABLE_EDIT',
32780      p_msg_count          => x_msg_count,
32781      p_msg_data           => x_msg_data,
32782      p_return_status      => x_return_status,
32783      p_function_allowed   => l_function_allowed);
32784 
32785 
32786      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
32787          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32788      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
32789          RAISE FND_API.G_EXC_ERROR;
32790      END IF;
32791 
32792      IF l_function_allowed = 'N' THEN
32793         pa_interface_utils_pub.map_new_amg_msg
32794         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32795          ,p_msg_attribute    => 'CHANGE'
32796          ,p_resize_flag      => 'Y'
32797          ,p_msg_context      => 'GENERAL'
32798          ,p_attribute1       => ''
32799          ,p_attribute2       => ''
32800          ,p_attribute3       => ''
32801          ,p_attribute4       => ''
32802          ,p_attribute5       => '');
32803 
32804      x_return_status := FND_API.G_RET_STS_ERROR;
32805          RAISE FND_API.G_EXC_ERROR;
32806      END IF;
32807 
32808 -- validate the input parameters.
32809 -- Validate Project Reference / ID
32810     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
32811                     p_pm_project_reference =>   p_pm_project_reference -- 3729250, earlier was passed as null
32812                  ,  p_pa_project_id     =>      p_project_id
32813                  ,  p_out_project_id    =>      l_project_id
32814                  ,  p_return_status     =>      x_return_status
32815         );
32816 
32817     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32818         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32819     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32820         RAISE  FND_API.G_EXC_ERROR;
32821     END IF;
32822 
32823 -- Validate Deliverable Reference / ID
32824     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32825       (   p_deliverable_reference => p_deliverable_reference -- 3729250 , earlier passed was null
32826         , p_deliverable_id        => p_deliverable_id
32827         , p_project_id            => l_project_id
32828         , p_out_deliverable_id    => l_deliverable_id
32829         , p_return_status         => x_return_status
32830       );
32831 
32832     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32833         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32834     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32835         RAISE FND_API.G_EXC_ERROR;
32836     END IF;
32837 
32838 -- Validate Task Assignment Reference / ID
32839     IF p_task_assign_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
32840        l_task_assign_id := NULL;
32841     ELSE
32842        l_task_assign_id := p_task_assign_id;
32843     END IF;
32844 
32845 
32846  PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID
32847      ( p_pm_product_code           => p_pm_source_code
32848       ,p_pa_project_id             => l_project_id
32849       ,p_pa_structure_version_id   => null
32850       ,p_pa_task_id                => null
32851       ,p_pa_task_elem_ver_id       => null
32852       ,p_pm_task_asgmt_reference   => p_pm_task_asgmt_reference
32853       ,p_pa_task_assignment_id     => p_task_assign_id
32854       ,p_resource_alias            => null
32855       ,p_resource_list_member_id   => null
32856       ,x_pa_task_assignment_id     => l_task_assignment_id
32857       ,x_return_status             => x_return_status
32858        ) ;
32859 
32860        IF p_debug_mode = 'Y' THEN
32861            pa_debug.write(g_pkg_name,'PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID ret status'||x_return_status||
32862                           ']task assign ref['||l_task_assign_reference||']task assign id['||l_task_assign_id||']',3) ;
32863        END IF;
32864 
32865        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32866              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32867        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32868              RAISE FND_API.G_EXC_ERROR;
32869        END IF;
32870 
32871 -- Derive Deliverable_version_id
32872    l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32873 
32874 -- Calling deliverable api to Create Association
32875      pa_deliverable_pvt.CREATE_DLV_TASK_ASSOCIATION
32876      (p_api_version              => p_api_version
32877      ,p_init_msg_list            => FND_API.G_FALSE
32878      ,p_commit                   => FND_API.G_FALSE
32879      ,p_validate_only            => FND_API.G_FALSE
32880      ,p_validation_level         => FND_API.G_VALID_LEVEL_FULL
32881      ,p_calling_module           => 'AMG'
32882      ,p_calling_context        => 'PA_ASSIGNMENTS'
32883      ,p_debug_mode               => p_debug_mode
32884      ,p_max_msg_count            => null
32885      ,p_task_element_id        => l_task_assignment_id
32886      ,p_task_version_id        => null
32887      ,p_dlv_element_id         => l_deliverable_id
32888      ,p_dlv_version_id         => l_dlvr_version_id
32889      ,p_project_id             => l_project_id
32890      ,x_return_status            => x_return_status
32891      ,x_msg_count                => x_msg_count
32892      ,x_msg_data                 => x_msg_data
32893      );
32894 
32895     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32896         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32897     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32898         RAISE FND_API.G_EXC_ERROR;
32899     END IF;
32900 
32901    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32902    IF (p_commit = FND_API.G_TRUE) THEN
32903        COMMIT;
32904    END IF;
32905 
32906    IF p_debug_mode = 'Y' THEN
32907        pa_debug.reset_curr_function;
32908        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32909    END IF;
32910 
32911 EXCEPTION
32912   WHEN FND_API.G_EXC_ERROR  THEN
32913       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32914       -- IF (p_commit = FND_API.G_TRUE) THEN
32915       ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
32916       -- END IF;
32917 
32918       x_return_status := FND_API.G_RET_STS_ERROR;
32919       l_msg_count := FND_MSG_PUB.count_msg;
32920 
32921       IF l_msg_count = 1 AND x_msg_data IS NULL
32922       THEN
32923            PA_INTERFACE_UTILS_PUB.get_messages
32924                (p_encoded        => FND_API.G_FALSE,
32925                 p_msg_index      => 1,
32926                 p_msg_count      => x_msg_count,
32927                 p_msg_data       => l_msg_data,
32928                 p_data           => l_data,
32929                 p_msg_index_out  => l_msg_index_out);
32930 
32931        x_msg_data := l_data;
32932            x_msg_count := l_msg_count;
32933      ELSE
32934           x_msg_count := l_msg_count;
32935      END IF;
32936 
32937      IF  p_debug_mode = 'Y' THEN
32938           pa_debug.reset_curr_function;
32939           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32940      END IF;
32941 
32942   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
32943      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32944      --IF (p_commit = FND_API.G_TRUE) THEN
32945      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
32946      --END IF;
32947      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32948      l_msg_count := FND_MSG_PUB.count_msg;
32949 
32950      IF l_msg_count = 1 AND x_msg_data IS NULL
32951      THEN
32952            PA_INTERFACE_UTILS_PUB.get_messages
32953                (p_encoded        => FND_API.G_FALSE,
32954                 p_msg_index      => 1,
32955                 p_msg_count      => x_msg_count,
32956                 p_msg_data       => l_msg_data,
32957                 p_data           => l_data,
32958                 p_msg_index_out  => l_msg_index_out);
32959 
32960        x_msg_data := l_data;
32961            x_msg_count := l_msg_count;
32962      ELSE
32963           x_msg_count := l_msg_count;
32964      END IF;
32965 
32966      IF  p_debug_mode = 'Y' THEN
32967           pa_debug.reset_curr_function;
32968           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32969      END IF;
32970 
32971   WHEN OTHERS THEN
32972     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32973     --IF (p_commit = FND_API.G_TRUE) THEN
32974      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
32975     --END IF;
32976 
32977      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32978      x_msg_count := 1;
32979      x_msg_data := SQLERRM;
32980 
32981      IF p_debug_mode = 'Y' THEN
32982           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32983           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32984           pa_debug.reset_curr_function;
32985      END IF;
32986 
32987      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32988        FND_MSG_PUB.add_exc_msg
32989            ( p_pkg_name    => G_PKG_NAME
32990            , p_procedure_name  => l_api_name  );
32991     END IF;
32992 
32993 END ASSOCIATE_DLV_TO_TASK_ASSIGN;
32994 
32995 
32996 Procedure DELETE_DLV_TO_TASK_ASSIGN (
32997       p_api_version              IN  NUMBER   := 1.0
32998      ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_TRUE
32999      ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
33000      ,p_debug_mode               IN  VARCHAR2 := FND_API.G_FALSE
33001      ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33002      ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33003      -- added for bug# 3729250
33004      ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33005      ,p_task_assign_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33006      ,p_pm_task_asgmt_reference  IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33007      ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  --added for bug 3888280
33008      ,p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR --added for bug 3888280
33009      ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33010      ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33011      ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33012      )IS
33013 
33014   l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK_ASSIGN';
33015   l_project_id         NUMBER ;
33016   l_task_assign_id     NUMBER;
33017   l_task_assign_reference VARCHAR2(240);
33018   l_deliverable_id     NUMBER;
33019   l_dlvr_version_id    NUMBER;
33020   l_function_code      Pa_Proj_Elements.function_code%TYPE;
33021   l_object_relationship_Id     pa_object_relationships.object_relationship_Id%TYPE;
33022   l_task_assignment_id NUMBER ;
33023 
33024   l_function_allowed      VARCHAR2(1);
33025   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
33026 
33027   l_msg_index_out              NUMBER;
33028   l_msg_count                  NUMBER ;
33029   l_data                       VARCHAR2(2000);
33030   l_msg_data                   VARCHAR2(2000);
33031 
33032    -- 3888280 Added cursor to retrieve object_relationship_id for a TA to a DLVR
33033    -- Association
33034 
33035   CURSOR c_obj_rel_id(l_task_assng_id NUMBER, l_dlvr_id NUMBER) IS
33036   SELECT
33037         OBJ.OBJECT_RELATIONSHIP_ID
33038   FROM  PA_OBJECT_RELATIONSHIPS OBJ
33039   WHERE
33040         OBJ.OBJECT_ID_FROM2         =   l_task_assng_id
33041     AND OBJ.OBJECT_ID_TO2           =   l_dlvr_id
33042     AND OBJ.OBJECT_TYPE_FROM        =   'PA_ASSIGNMENTS'
33043     AND OBJ.OBJECT_TYPE_TO          =   'PA_DELIVERABLES'
33044     AND OBJ.RELATIONSHIP_TYPE       =   'A'
33045     AND OBJ.RELATIONSHIP_SUBTYPE    =   'ASSIGNMENT_TO_DELIVERABLE';
33046 
33047 BEGIN
33048 
33049  --  Initialize the message table if requested.
33050     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
33051        FND_MSG_PUB.initialize;
33052     END IF;
33053 
33054     -- 3735792, setting save point unconditionally
33055     --IF (p_commit = FND_API.G_TRUE) THEN
33056     savepoint ASSOCIATE_DLV_TO_TASK_ASSIGN;
33057     --END IF;
33058 
33059     IF p_debug_mode = 'Y' THEN
33060           PA_DEBUG.set_curr_function( p_function   => l_api_name,
33061                                       p_debug_mode => p_debug_mode );
33062           pa_debug.g_err_stage:= 'Inside '||l_api_name;
33063           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33064     END IF;
33065 
33066  --  Set API return status to success
33067     x_return_status     := FND_API.G_RET_STS_SUCCESS;
33068 
33069      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
33070          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33071      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
33072          RAISE FND_API.G_EXC_ERROR;
33073      END IF;
33074 
33075      IF l_function_allowed = 'N' THEN
33076         pa_interface_utils_pub.map_new_amg_msg
33077         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
33078          ,p_msg_attribute    => 'CHANGE'
33079          ,p_resize_flag      => 'Y'
33080          ,p_msg_context      => 'GENERAL'
33081          ,p_attribute1       => ''
33082          ,p_attribute2       => ''
33083          ,p_attribute3       => ''
33084          ,p_attribute4       => ''
33085          ,p_attribute5       => '');
33086 
33087      x_return_status := FND_API.G_RET_STS_ERROR;
33088          RAISE FND_API.G_EXC_ERROR;
33089      END IF;
33090 
33091 -- validate the input parameters.
33092 -- Validate Project Reference / ID
33093     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
33094                     p_pm_project_reference =>   p_pm_project_reference -- 3729250 , earlier null was passed
33095                  ,  p_pa_project_id     =>      p_project_id
33096                  ,  p_out_project_id    =>      l_project_id
33097                  ,  p_return_status     =>      x_return_status
33098         );
33099 
33100     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33101         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33102     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33103         RAISE  FND_API.G_EXC_ERROR;
33104     END IF;
33105 
33106 -- Validate Task Assignment Reference / ID
33107     IF p_task_assign_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33108        l_task_assign_id := NULL;
33109     ELSE
33110        l_task_assign_id := p_task_assign_id;
33111     END IF;
33112 
33113    PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID
33114      ( p_pm_product_code           => p_pm_source_code
33115       ,p_pa_project_id             => l_project_id
33116       ,p_pa_structure_version_id   => null
33117       ,p_pa_task_id                => null
33118       ,p_pa_task_elem_ver_id       => null
33119       ,p_pm_task_asgmt_reference   => p_pm_task_asgmt_reference
33120       ,p_pa_task_assignment_id     => p_task_assign_id
33121       ,p_resource_alias            => null
33122       ,p_resource_list_member_id   => null
33123       ,x_pa_task_assignment_id     => l_task_assignment_id
33124       ,x_return_status             => x_return_status
33125        ) ;
33126 
33127        IF p_debug_mode = 'Y' THEN
33128            pa_debug.write(g_pkg_name,'PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID ret status'||x_return_status||
33129                           ']task assign ref['||l_task_assign_reference||']task assign id['||l_task_assign_id||']',3) ;
33130        END IF;
33131 
33132        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33133              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33134        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33135              RAISE FND_API.G_EXC_ERROR;
33136        END IF;
33137 
33138    -- 3888280 start
33139    -- Added code to validate Deliverable Reference and Id
33140 
33141     -- Validate Deliverable Reference / ID
33142     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
33143       (   p_deliverable_reference => p_pm_deliverable_reference
33144         , p_deliverable_id        => p_deliverable_id
33145         , p_project_id            => l_project_id
33146         , p_out_deliverable_id    => l_deliverable_id
33147         , p_return_status         => x_return_status
33148       );
33149 
33150     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33151         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33152     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33153         RAISE FND_API.G_EXC_ERROR;
33154     END IF;
33155 
33156     -- Addec code to retrieve object_relationship_id for a TA to a DLVR relationship
33157     -- passing this retrieved id to DELETE_DLV_TASK_ASSOCIATION api
33158 
33159     OPEN c_obj_rel_id(l_task_assignment_id,l_deliverable_id) ;
33160     FETCH c_obj_rel_id into l_object_relationship_Id ;
33161     CLOSE c_obj_rel_id;
33162 
33163     -- commented below code because below api was deleting all the association to deliverables
33164     -- for a TA
33165 
33166 /*
33167    PA_DELIVERABLE_PVT.DELETE_DLV_TASK_ASSCN_IN_BULK
33168      (p_calling_module      => 'AMG'
33169      ,p_calling_context     => 'PA_ASSIGNMENTS'
33170      ,p_task_element_id     => l_task_assignment_id
33171      ,p_task_version_id     => null
33172      ,p_project_id          => l_project_id
33173      ,x_return_status       => x_return_status
33174      ,x_msg_count           => x_msg_count
33175      ,x_msg_data            => x_msg_data
33176      ) ;
33177 */
33178 
33179     IF p_debug_mode = 'Y' THEN
33180          pa_debug.g_err_stage:= ' l_object_relationship_Id is  ' || l_object_relationship_Id;
33181          pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33182     END IF ;
33183 
33184    -- Added below api call to delete a TA to a DLVR association
33185    -- passing calling context as TASK_ASSIGNMENT and for calling context TASK_ASSIGNMENT
33186    -- below api is not doing any validation to check whether the deletion is allowed or not
33187 
33188     PA_DELIVERABLE_PVT.DELETE_DLV_TASK_ASSOCIATION
33189     (
33190       p_calling_module          =>  'AMG'
33191      ,p_task_element_id         =>  l_task_assignment_id
33192      ,p_task_version_id         =>  NULL
33193      ,p_dlv_element_id          =>  l_deliverable_id
33194      ,p_dlv_version_id          =>  NULL
33195      ,p_object_relationship_id  =>  l_object_relationship_Id
33196      ,p_obj_rec_ver_number      =>  NULL
33197      ,p_project_id              =>  l_project_id
33198      ,p_calling_context         =>  'TASK_ASSIGNMENT'
33199      ,x_return_status           =>  x_return_status
33200      ,x_msg_count               =>  x_msg_count
33201      ,x_msg_data                =>  x_msg_data
33202     );
33203 
33204    -- 3888280 end
33205 
33206    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
33207    IF (p_commit = FND_API.G_TRUE) THEN
33208        COMMIT;
33209    END IF;
33210 
33211    IF p_debug_mode = 'Y' THEN
33212        pa_debug.reset_curr_function;
33213        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
33214    END IF;
33215 
33216 EXCEPTION
33217   WHEN FND_API.G_EXC_ERROR  THEN
33218       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33219       --IF (p_commit = FND_API.G_TRUE) THEN
33220       ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33221       --END IF;
33222 
33223       x_return_status := FND_API.G_RET_STS_ERROR;
33224       l_msg_count := FND_MSG_PUB.count_msg;
33225 
33226       IF l_msg_count = 1 AND x_msg_data IS NULL
33227       THEN
33228            PA_INTERFACE_UTILS_PUB.get_messages
33229                (p_encoded        => FND_API.G_FALSE,
33230                 p_msg_index      => 1,
33231                 p_msg_count      => x_msg_count,
33232                 p_msg_data       => l_msg_data,
33233                 p_data           => l_data,
33234                 p_msg_index_out  => l_msg_index_out);
33235 
33236        x_msg_data := l_data;
33237            x_msg_count := l_msg_count;
33238      ELSE
33239           x_msg_count := l_msg_count;
33240      END IF;
33241 
33242      IF  p_debug_mode = 'Y' THEN
33243           pa_debug.reset_curr_function;
33244           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
33245      END IF;
33246 
33247   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
33248      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33249      --IF (p_commit = FND_API.G_TRUE) THEN
33250      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33251      --END IF;
33252 
33253      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33254      l_msg_count := FND_MSG_PUB.count_msg;
33255 
33256      IF l_msg_count = 1 AND x_msg_data IS NULL
33257      THEN
33258            PA_INTERFACE_UTILS_PUB.get_messages
33259                (p_encoded        => FND_API.G_FALSE,
33260                 p_msg_index      => 1,
33261                 p_msg_count      => x_msg_count,
33262                 p_msg_data       => l_msg_data,
33263                 p_data           => l_data,
33264                 p_msg_index_out  => l_msg_index_out);
33265 
33266        x_msg_data := l_data;
33267            x_msg_count := l_msg_count;
33268      ELSE
33269           x_msg_count := l_msg_count;
33270      END IF;
33271 
33272      IF  p_debug_mode = 'Y' THEN
33273           pa_debug.reset_curr_function;
33274           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33275      END IF;
33276 
33277   WHEN OTHERS THEN
33278     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33279     --IF (p_commit = FND_API.G_TRUE) THEN
33280      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33281     --END IF;
33282 
33283      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33284      x_msg_count := 1;
33285      x_msg_data := SQLERRM;
33286 
33287      IF p_debug_mode = 'Y' THEN
33288           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33289           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33290           pa_debug.reset_curr_function;
33291      END IF;
33292 
33293      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33294        FND_MSG_PUB.add_exc_msg
33295            ( p_pkg_name    => G_PKG_NAME
33296            , p_procedure_name  => l_api_name  );
33297     END IF;
33298 
33299 END DELETE_DLV_TO_TASK_ASSIGN;
33300 -- FP M Changes for deliverables : End
33301 
33302 --Added by rtarway for FP.M Development
33303 PROCEDURE Delete_Mapping
33304 (
33305    p_api_version              IN   NUMBER     := 1.0
33306  , p_init_msg_list            IN   VARCHAR2   := FND_API.G_TRUE
33307  , p_commit                   IN   VARCHAR2   := FND_API.G_TRUE
33308  , p_debug_mode               IN   VARCHAR2   := 'N'
33309  , p_wp_task_version_id       IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33310  , p_fp_task_version_id       IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33311  , p_wp_task_id               IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33312  , p_fp_task_id               IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33313  , p_pm_wp_task_reference     IN   VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33314  , p_pm_fp_task_reference     IN   VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33315  , p_wp_structure_version_id  IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33316  , p_project_id               IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33317  , p_proj_source_reference    IN   VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33318  , x_return_status            OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
33319  , x_msg_count                OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
33320  , x_msg_data                 OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
33321 )
33322 IS
33323     l_msg_count             NUMBER;
33324     l_msg_data              VARCHAR2(2000);
33325     l_api_name              CONSTANT  VARCHAR2(30)     := 'DELETE_MAPPING';
33326     l_return_status         VARCHAR2(1);
33327     l_debug_mode                     VARCHAR2(1);
33328     l_debug_level2                   CONSTANT NUMBER := 2;
33329     l_debug_level3                   CONSTANT NUMBER := 3;
33330     l_debug_level4                   CONSTANT NUMBER := 4;
33331     l_debug_level5                   CONSTANT NUMBER := 5;
33332 
33333     l_wp_task_version_id             NUMBER;
33334     l_fp_task_version_id             NUMBER;
33335     l_wp_task_id                     NUMBER;
33336     l_fp_task_id                     NUMBER;
33337     l_project_id                     NUMBER;
33338     l_wp_structure_version_id        NUMBER;
33339 
33340 --This cursor is based on assumption that a financial structure will have only one version in a project.
33341 CURSOR cur_get_fin_task_version_id(l_project_id NUMBER, l_fp_task_id NUMBER)
33342 is
33343      Select element_version_id
33344      from pa_proj_element_versions
33345      where proj_element_id = l_fp_task_id
33346      and project_id = l_project_id
33347      and financial_task_flag = 'Y';
33348 
33349 
33350 BEGIN
33351 
33352 -- 4537865
33353 x_return_status := FND_API.G_RET_STS_SUCCESS;
33354 
33355     --  Initialize the message table if requested.
33356     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
33357        FND_MSG_PUB.initialize;
33358     END IF;
33359 
33360 -- Bug 4142254 : Commenting this condition, as we want to create savepoint always.
33361 -- We could have done other way around too i.e. Savepoint and rollback shoud both be in
33362 -- conditions. But we prefer removing conditions due to bug 3735792
33363 --    IF (p_commit = FND_API.G_TRUE) THEN
33364        savepoint DELETE_MAPPING_PUB;
33365 --    END IF;
33366 
33367     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
33368     IF l_debug_mode = 'Y' THEN
33369           PA_DEBUG.set_curr_function( p_function   => 'DELETE_MAPPING',
33370                                       p_debug_mode => l_debug_mode );
33371     END IF;
33372 
33373     IF l_debug_mode = 'Y' THEN
33374           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : DELETE_MAPPING : Printing Input parameters';
33375           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33376                                      l_debug_level3);
33377           Pa_Debug.WRITE(g_pkg_name,'p_wp_task_version_id'||':'||p_wp_task_version_id,
33378                                      l_debug_level3);
33379           Pa_Debug.WRITE(g_pkg_name,'p_fp_task_version_id'||':'||p_fp_task_version_id,
33380                                      l_debug_level3);
33381           Pa_Debug.WRITE(g_pkg_name,'p_wp_task_id'||':'||p_wp_task_id,
33382                                      l_debug_level3);
33383           Pa_Debug.WRITE(g_pkg_name,'p_fp_task_id'||':'||p_fp_task_id,
33384                                      l_debug_level3);
33385           Pa_Debug.WRITE(g_pkg_name,'p_pm_wp_task_reference'||':'||p_pm_wp_task_reference,
33386                                      l_debug_level3);
33387           Pa_Debug.WRITE(g_pkg_name,'p_pm_fp_task_reference'||':'||p_pm_fp_task_reference,
33388                                      l_debug_level3);
33389           Pa_Debug.WRITE(g_pkg_name,'p_wp_structure_version_id'||':'||p_wp_structure_version_id,
33390                                      l_debug_level3);
33391           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
33392                                      l_debug_level3);
33393 
33394      END IF;
33395    --Validate for input parameters
33396      IF l_debug_mode = 'Y' THEN
33397           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : DELETE_MAPPING : Validating Input parameters';
33398           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33399                                      l_debug_level3);
33400      END IF;
33401 
33402      --If task ids or names are passed , then we need to derive task_version_ids to be used by the DELETE_MAPPING API.
33403 
33404      --1. If Task version ids are null , start deriving task version id
33405      IF (
33406           (p_wp_task_version_id IS NULL OR p_wp_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
33407           AND
33408           (p_fp_task_version_id IS NULL OR p_fp_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
33409         )
33410      THEN
33411           --1.0 Get the project id
33412           IF (
33413                ( p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
33414                AND
33415                ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
33416              )
33417           THEN
33418 
33419                     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
33420                          p_pm_project_reference =>   p_proj_source_reference
33421                       ,  p_pa_project_id     =>      p_project_id
33422                       ,  p_out_project_id    =>      l_project_id
33423                       ,  p_return_status     =>      x_return_status
33424                     );
33425 
33426                     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33427                          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33428                     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33429                          RAISE  FND_API.G_EXC_ERROR;
33430                     END IF;
33431           ELSE
33432                l_project_id := p_project_id;
33433           END IF;
33434 
33435           IF p_debug_mode = 'Y' THEN
33436             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'DELETE_MAPPING'||'Project ID:'||l_project_id;
33437             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33438           END IF;
33439           --1.1 Get the task ids if these are null
33440                --WP TASK ID
33441                IF( (p_wp_task_id IS NULL OR p_wp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33442                     AND
33443                     (p_pm_wp_task_reference IS NOT NULL AND p_pm_wp_task_reference <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33444                  )
33445                THEN
33446                     --get the task id from task reference
33447                      PA_PROJECT_PVT.Convert_pm_taskref_to_id_all(
33448                                                p_pa_project_id => l_project_id
33449                                               ,p_structure_type => 'WORKPLAN'
33450                                               ,p_pm_task_reference => p_pm_wp_task_reference
33451                                               ,p_out_task_id => l_wp_task_id
33452                                               ,p_return_status => l_return_status);
33453 
33454                      x_return_status := l_return_status;
33455                      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33456                         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33457                      ELSIF l_return_status = FND_API.G_RET_STS_ERROR      THEN
33458                         RAISE FND_API.G_EXC_ERROR;
33459                      END IF;
33460 
33461                ELSE
33462                     l_wp_task_id := p_wp_task_id;
33463                END IF;
33464                --FP TASK ID
33465                IF(
33466                     (p_fp_task_id IS NULL OR p_fp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33467                     AND
33468                     (p_pm_fp_task_reference IS NOT NULL AND p_pm_fp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33469                  )
33470                THEN
33471                     --get the task id from task reference
33472                      PA_PROJECT_PVT.Convert_pm_taskref_to_id_all(
33473                                                p_pa_project_id => l_project_id
33474                                               ,p_structure_type => 'FINANCIAL'
33475                                               ,p_pm_task_reference => p_pm_fp_task_reference
33476                                               ,p_out_task_id => l_fp_task_id
33477                                               ,p_return_status => l_return_status);
33478                      x_return_status := l_return_status;
33479                      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33480                         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33481                      ELSIF l_return_status = FND_API.G_RET_STS_ERROR      THEN
33482                         RAISE FND_API.G_EXC_ERROR;
33483                      END IF;
33484                ELSE
33485                     l_fp_task_id := p_fp_task_id;
33486                END IF;
33487           --1.2 Get the task version ids
33488                --1.2.1 get the wp structure version id
33489                  IF (
33490                          l_wp_task_id IS NOT NULL
33491                      AND ( p_wp_structure_version_id IS NULL OR p_wp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33492                     )
33493                  THEN
33494 
33495                     IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
33496                     l_wp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
33497                          IF (l_wp_structure_version_id = -1 OR l_wp_structure_version_id = NULL)
33498                          THEN
33499                             l_wp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
33500                          END IF;
33501                      END IF;
33502                  ELSIF(p_wp_structure_version_id IS NOT NULL AND p_wp_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33503                  THEN
33504                          l_wp_structure_version_id :=p_wp_structure_version_id;
33505                  END IF;
33506                --1.2.1.1 get the l_wp_task_version_id
33507                  l_wp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
33508                                  (
33509                                      p_structure_version_id => l_wp_structure_version_id
33510                                    , p_task_id => l_wp_task_id
33511                                  );
33512 
33513                --1.2.2 get the fp task version id, as there will be only one structure version for financial
33514                 IF (l_fp_task_id IS NOT NULL) THEN
33515                    open  cur_get_fin_task_version_id (l_project_id, l_fp_task_id);
33516                    fetch cur_get_fin_task_version_id into l_fp_task_version_id;
33517                    close cur_get_fin_task_version_id ;
33518                 END IF;
33519 
33520 
33521      ELSE
33522           l_wp_task_version_id := p_wp_task_version_id;
33523           l_fp_task_version_id := p_fp_task_version_id;
33524      END IF;
33525 
33526 
33527 --Calling Delete Mapping
33528    PA_PROJ_STRUC_MAPPING_PUB.DELETE_MAPPING
33529    (
33530        p_api_version           => p_api_version
33531      , p_init_msg_list         => FND_API.G_FALSE
33532      , p_commit                => FND_API.G_FALSE--bug 3766967
33533      , p_debug_mode            => p_debug_mode
33534      , p_wp_task_version_id    => l_wp_task_version_id
33535      , p_fp_task_version_id    => l_fp_task_version_id
33536      , p_calling_module        => 'AMG' -- Bug 4142254
33537      , x_return_status         => x_return_status
33538      , x_msg_count             => l_msg_count
33539      , x_msg_data              => l_msg_data
33540    );
33541     x_msg_count              := l_msg_count;
33542     x_msg_data               := l_msg_data;
33543 
33544     IF p_debug_mode = 'Y' THEN
33545        pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'DELETE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.DELETE_MAPPING:'||x_return_status;
33546        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33547     END IF;
33548 
33549    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33550           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33551    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33552           RAISE  FND_API.G_EXC_ERROR;
33553    END IF;
33554 
33555 EXCEPTION
33556    WHEN FND_API.G_EXC_ERROR        THEN
33557        ROLLBACK TO DELETE_MAPPING_PUB;
33558        x_return_status := FND_API.G_RET_STS_ERROR;
33559 
33560    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
33561        ROLLBACK TO DELETE_MAPPING_PUB;
33562        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33563 
33564    WHEN OTHERS THEN
33565        ROLLBACK TO DELETE_MAPPING_PUB;
33566        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33567 
33568    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
33569        FND_MSG_PUB.add_exc_msg
33570                    ( p_pkg_name            => G_PKG_NAME
33571                    , p_procedure_name      => l_api_name   );
33572   END IF;
33573 
33574 END Delete_Mapping ;
33575 --------------------------------------------------------------------------------
33576 --Name:               Create_Mapping
33577 --Type:               Procedure
33578 --Description:        This procedure creates a Mapping for the passed Wkp Task Id and Financial Task Id
33579 --                    This program can be called as per following:
33580 --mapped_task_id   mapped_task_ref mapped_task_name    wkp_task_id    wkp_task_name  wkp_task_reference  wkp_structure_ver_id   Status
33581 --   y               N                N                  y               N              N                   N                   Valid
33582 --   N               N                Y                  N               Y              N                   Y                   Valid
33583 --   N               Y                N                  N               N              Y                   N                   Valid
33584 --
33585 --Called subprograms:    PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING
33586 
33587 --History:
33588 --    24-Mar-2004   Ritesg            Created
33589 --
33590 
33591 PROCEDURE create_mapping
33592 (   p_api_version                  IN        NUMBER     := 1.0
33593   , p_init_msg_list                IN        VARCHAR2   := FND_API.G_TRUE
33594   , p_commit                       IN        VARCHAR2   := FND_API.G_TRUE
33595   , p_debug_mode                   IN        VARCHAR2   := 'N'
33596   , px_mapped_task_id              IN        NUMBER
33597   , p_mapped_task_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33598   , p_mapped_task_name             IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33599   , p_wkp_task_id                  IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33600   , p_wkp_task_name                IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33601   , p_wkp_structure_version_id     IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33602   , p_wkp_task_reference           IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33603   , p_project_id                   IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33604   , p_proj_source_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33605   , x_return_status                OUT  NOCOPY     VARCHAR2 /*Added the nocopy check for 4537865 */
33606   , x_msg_count                    OUT  NOCOPY     NUMBER /*Added the nocopy check for 4537865 */
33607   , x_msg_data                     OUT  NOCOPY     VARCHAR2 /*Added the nocopy check for 4537865 */
33608   )
33609 
33610   IS
33611     l_project_id               NUMBER;
33612 
33613     l_wkp_task_id              NUMBER;
33614     l_wkp_structure_version_id NUMBER;
33615     l_wkp_task_version_id      NUMBER;
33616     l_wkp_task_name            VARCHAR2(240);
33617 
33618     l_mapped_task_id           NUMBER;
33619     l_mapped_task_reference    VARCHAR2(240);
33620     l_mapped_task_version_id   NUMBER;
33621     l_mapped_task_name         VARCHAR2(240);
33622 
33623     l_msg_count             NUMBER;
33624     l_msg_data              VARCHAR2(2000);
33625     l_api_name              CONSTANT  VARCHAR2(30)     := 'CREATE_MAPPING';
33626 
33627     l_debug_mode                     VARCHAR2(1);
33628     l_debug_level2                   CONSTANT NUMBER := 2;
33629     l_debug_level3                   CONSTANT NUMBER := 3;
33630     l_debug_level4                   CONSTANT NUMBER := 4;
33631     l_debug_level5                   CONSTANT NUMBER := 5;
33632 
33633 --This cursor is based on assumption that a financial structure will have only one version in a project.
33634 CURSOR cur_get_mapped_task_version_id(p_project_id NUMBER, p_mapped_task_id NUMBER)
33635 is
33636      Select element_version_id
33637      from pa_proj_element_versions
33638      where proj_element_id = p_mapped_task_id
33639      and project_id = p_project_id
33640      and financial_task_flag = 'Y';
33641 
33642 BEGIN
33643  --  Initialize the message table if requested.
33644     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
33645        FND_MSG_PUB.initialize;
33646     END IF;
33647 
33648     IF (p_commit = FND_API.G_TRUE) THEN
33649        savepoint CREATE_MAPPING_PUB;
33650     END IF;
33651 
33652     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
33653     IF l_debug_mode = 'Y' THEN
33654           PA_DEBUG.set_curr_function( p_function   => 'CREATE_MAPPING',
33655                                       p_debug_mode => l_debug_mode );
33656     END IF;
33657 
33658     IF l_debug_mode = 'Y' THEN
33659           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : Printing Input parameters';
33660           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33661                                      l_debug_level3);
33662           Pa_Debug.WRITE(g_pkg_name,'px_mapped_task_id'||':'||px_mapped_task_id,
33663                                      l_debug_level3);
33664           Pa_Debug.WRITE(g_pkg_name,'p_mapped_task_name'||':'||p_mapped_task_name,
33665                                      l_debug_level3);
33666           Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_id'||':'||p_wkp_task_id,
33667                                      l_debug_level3);
33668           Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_name'||':'||p_wkp_task_name,
33669                                      l_debug_level3);
33670           Pa_Debug.WRITE(g_pkg_name,'p_wkp_structure_version_id'||':'||p_wkp_structure_version_id,
33671                                      l_debug_level3);
33672           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
33673                                      l_debug_level3);
33674           Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
33675                                      l_debug_level3);
33676      END IF;
33677    --Validate for input parameters
33678     IF l_debug_mode = 'Y' THEN
33679           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : Validating Input parameters';
33680           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33681                                      l_debug_level3);
33682     END IF;
33683 
33684     IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33685           AND
33686           (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33687         )
33688     THEN
33689           IF l_debug_mode = 'Y' THEN
33690                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving Project id should be passed';
33691                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33692                                           l_debug_level3);
33693           END IF;
33694           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33695     END IF;
33696 
33697     IF (
33698          ( px_mapped_task_id IS NULL OR px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
33699          ( p_mapped_task_reference IS NULL OR p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
33700          ( p_mapped_task_name IS NULL OR p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33701         )
33702     THEN
33703           IF l_debug_mode = 'Y' THEN
33704                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving financial task version id should be passed';
33705                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33706                                           l_debug_level3);
33707           END IF;
33708           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33709     END IF;
33710 
33711     IF (
33712           (p_wkp_task_id IS NULL OR p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
33713           (p_wkp_task_reference IS NULL OR p_wkp_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
33714           (p_wkp_task_name IS NULL OR p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
33715         )
33716     THEN
33717           IF l_debug_mode = 'Y' THEN
33718                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving workplan task version id should be passed';
33719                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33720                                           l_debug_level3);
33721           END IF;
33722           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33723     END IF;
33724 
33725 
33726   --  Set API return status to success
33727      x_return_status     := FND_API.G_RET_STS_SUCCESS;
33728 
33729      IF p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33730         l_wkp_task_id := NULL;
33731      ELSE
33732         l_wkp_task_id := p_wkp_task_id;
33733      END IF;
33734 
33735      IF px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33736        l_mapped_task_id := NULL;
33737      ELSE
33738        l_mapped_task_id := px_mapped_task_id;
33739      END IF;
33740 
33741      IF p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
33742        l_mapped_task_reference := NULL;
33743      ELSE
33744        l_mapped_task_reference := p_mapped_task_reference;
33745      END IF;
33746 
33747      IF p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
33748        l_wkp_task_name := NULL;
33749      ELSE
33750        l_wkp_task_name := p_wkp_task_name;
33751      END IF;
33752 
33753      IF p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
33754        l_mapped_task_name := NULL;
33755      ELSE
33756        l_mapped_task_name := p_mapped_task_name;
33757      END IF;
33758 
33759      IF p_wkp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33760        l_wkp_structure_version_id := NULL;
33761      ELSE
33762        l_wkp_structure_version_id := p_wkp_structure_version_id;
33763      END IF;
33764 
33765      IF p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33766           l_project_id := NULL;
33767      ELSE
33768           l_project_id := p_project_id;
33769      END IF;
33770 
33771   -- Get the task and Project details based on source reference passed
33772      IF (
33773           p_project_id IS NULL
33774           AND ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
33775         )
33776      THEN
33777           PA_PROJECT_PVT.Convert_pm_projref_to_id  (
33778                          p_pm_project_reference =>   p_proj_source_reference
33779                       ,  p_pa_project_id     =>      p_project_id
33780                       ,  p_out_project_id    =>      l_project_id
33781                       ,  p_return_status     =>      x_return_status
33782              );
33783      END IF;
33784 
33785      IF p_debug_mode = 'Y' THEN
33786             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'Project ID:'||l_project_id;
33787             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33788      END IF;
33789 
33790      IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33791         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33792      ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33793         RAISE  FND_API.G_EXC_ERROR;
33794      END IF;
33795 
33796  --Get the Wkp Task ID using Wkp Task Reference
33797     IF (
33798          (l_wkp_task_id IS NULL)
33799          AND
33800          (p_wkp_task_reference IS NOT NULL AND p_wkp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33801        )
33802     THEN
33803         PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
33804                    p_pa_project_id      => l_project_id
33805                  , p_structure_type     => 'WORKPLAN'
33806                  , p_pm_task_reference  => p_wkp_task_reference
33807                  , p_out_task_id        => l_wkp_task_id
33808                  , p_return_status      => x_return_status );
33809 
33810         IF p_debug_mode = 'Y' THEN
33811             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'wkp_task_id:'||l_wkp_task_id;
33812             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33813         END IF;
33814 
33815         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33816           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33817         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33818           RAISE FND_API.G_EXC_ERROR;
33819         END IF;
33820     END IF;
33821 
33822 -- Get the mapped task Id based in mapped_task_reference
33823     IF ( l_mapped_task_id IS NULL
33824          AND
33825          l_mapped_task_reference IS NOT NULL
33826     )
33827     THEN
33828          PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
33829                    p_pa_project_id      => l_project_id
33830                  , p_structure_type     => 'FINANCIAL'
33831                  , p_pm_task_reference  => p_mapped_task_reference
33832                  , p_out_task_id        => l_mapped_task_id
33833                  , p_return_status      => x_return_status );
33834 
33835      --Assign mapped task_id to px_mapped_task_id as it is in out parameter
33836           IF p_debug_mode = 'Y' THEN
33837                  pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'mapped_task_id:'||l_mapped_task_id;
33838                  pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33839           END IF;
33840           IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33841              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33842           ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33843              RAISE FND_API.G_EXC_ERROR;
33844           END IF;
33845     END IF;
33846      --Get the task version id from Wkp task Id
33847      -- Avoid this call if wkp task name and wkp task version ids are passed
33848      IF (l_wkp_task_id IS NOT NULL AND l_wkp_structure_version_id IS NULL ) THEN
33849 
33850            IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
33851                   l_wkp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
33852                   IF (l_wkp_structure_version_id = -1 OR l_wkp_structure_version_id = NULL)
33853                   THEN
33854                        l_wkp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
33855                   END IF;
33856            END IF;
33857      END IF;
33858      l_wkp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
33859                                  (
33860                                      p_structure_version_id => l_wkp_structure_version_id
33861                                    , p_task_id => l_wkp_task_id
33862                                  );
33863 
33864 
33865      --Get the financial task version id from financial task id,
33866      IF (l_mapped_task_id IS NOT NULL) THEN
33867          open cur_get_mapped_task_version_id (l_project_id, l_mapped_task_id);
33868          fetch cur_get_mapped_task_version_id into l_mapped_task_version_id;
33869          close cur_get_mapped_task_version_id ;
33870      END IF;
33871      IF p_debug_mode = 'Y' THEN
33872             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'Before Calling PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING:';
33873             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33874      END IF;
33875 
33876 
33877 -- All other validations done in PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
33878 -- call PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING here only
33879 
33880    PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING
33881    (
33882        p_api_version           => p_api_version
33883      , p_init_msg_list         => FND_API.G_FALSE
33884      , p_calling_module        => 'AMG'
33885      , p_commit                => FND_API.G_FALSE--bug 3766967
33886      , p_debug_mode            => p_debug_mode
33887      , p_wp_task_name          => l_wkp_task_name
33888      , p_wp_task_version_id    => l_wkp_task_version_id
33889      , p_parent_str_version_id => l_wkp_structure_version_id
33890      , p_fp_task_version_id    => l_mapped_task_version_id
33891      , p_fp_task_name          => l_mapped_task_name
33892      , p_project_id            => l_project_id
33893      , x_return_status         => x_return_status
33894      , x_msg_count             => l_msg_count
33895      , x_msg_data              => l_msg_data
33896    );
33897     x_msg_count              := l_msg_count;
33898     x_msg_data               := l_msg_data;
33899 
33900     IF p_debug_mode = 'Y' THEN
33901        pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING:'||x_return_status;
33902        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33903     END IF;
33904 
33905    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33906           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33907    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33908           RAISE  FND_API.G_EXC_ERROR;
33909    END IF;
33910 
33911 EXCEPTION
33912    WHEN FND_API.G_EXC_ERROR THEN
33913        IF (p_commit = FND_API.G_TRUE) THEN
33914         ROLLBACK TO CREATE_MAPPING_PUB;
33915        END IF;
33916        x_return_status := FND_API.G_RET_STS_ERROR;
33917 
33918    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
33919        IF (p_commit = FND_API.G_TRUE) THEN
33920         ROLLBACK TO CREATE_MAPPING_PUB;
33921        END IF;
33922        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33923 
33924    WHEN OTHERS THEN
33925        IF (p_commit = FND_API.G_TRUE) THEN
33926         ROLLBACK TO CREATE_MAPPING_PUB;
33927        END IF;
33928        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33929 
33930    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
33931        FND_MSG_PUB.add_exc_msg
33932                    ( p_pkg_name            => G_PKG_NAME
33933                    , p_procedure_name      => l_api_name   );
33934   END IF;
33935 END create_mapping;
33936 --------------------------------------------------------------------------------
33937 --Name:               Update_Mapping
33938 --Type:               Procedure
33939 --Description:        This procedure creates a Mapping for the passed Wkp Task Id and Financial Task Id
33940 --                    This program can be called as per following:
33941 --mapped_task_id   mapped_task_ref mapped_task_name    wkp_task_id    wkp_task_name  wkp_task_reference  wkp_structure_ver_id   Status
33942 --   y               N                N                  y               N              N                   N                   Valid
33943 --   N               N                Y                  N               Y              N                   Y                   Valid
33944 --   N               Y                N                  N               N              Y                   N                   Valid
33945 --
33946 --Called subprograms:    PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
33947 
33948 --History:
33949 --    24-Mar-2004   Ritesg            Created
33950 --
33951 
33952 PROCEDURE update_mapping
33953 (   p_api_version                  IN        NUMBER     := 1.0
33954   , p_init_msg_list                IN        VARCHAR2   := FND_API.G_TRUE
33955   , p_commit                       IN        VARCHAR2   := FND_API.G_TRUE
33956   , p_debug_mode                   IN        VARCHAR2   := 'N'
33957   , px_mapped_task_id              IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33958   , p_mapped_task_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33959   , p_mapped_task_name             IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33960   , p_wkp_task_id                  IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33961   , p_wkp_task_name                IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33962   , p_wkp_structure_version_id     IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33963   , p_wkp_task_reference           IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33964   , p_project_id                   IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33965   , p_proj_source_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33966   , x_return_status                OUT NOCOPY       VARCHAR2 /*Added the nocopy check for 4537865 */
33967   , x_msg_count                    OUT NOCOPY      NUMBER /*Added the nocopy check for 4537865 */
33968   , x_msg_data                     OUT NOCOPY      VARCHAR2 /*Added the nocopy check for 4537865 */
33969   )
33970 
33971   IS
33972     l_project_id            NUMBER;
33973 
33974     l_wkp_task_id              NUMBER;
33975     l_wkp_structure_version_id NUMBER;
33976     l_wkp_task_version_id      NUMBER;
33977     l_wkp_task_name            VARCHAR2(240);
33978 
33979     l_mapped_task_id        NUMBER;
33980     l_mapped_task_reference VARCHAR2(240);
33981     l_mapped_task_version_id NUMBER;
33982     l_mapped_task_name     VARCHAR2(240);
33983 
33984     l_msg_count             NUMBER;
33985     l_msg_data              VARCHAR2(2000);
33986     l_api_name              CONSTANT  VARCHAR2(30)     := 'UPDATE_MAPPING';
33987 
33988     l_return_status                  VARCHAR2(1);
33989     l_debug_mode                     VARCHAR2(1);
33990     l_debug_level2                   CONSTANT NUMBER := 2;
33991     l_debug_level3                   CONSTANT NUMBER := 3;
33992     l_debug_level4                   CONSTANT NUMBER := 4;
33993     l_debug_level5                   CONSTANT NUMBER := 5;
33994 
33995 --This cursor is based on assumption that a financial structure will have only one version in a project.
33996 CURSOR cur_get_mapped_task_version_id(p_project_id NUMBER, p_mapped_task_id NUMBER)
33997 is
33998      Select element_version_id
33999      from pa_proj_element_versions
34000      where proj_element_id = p_mapped_task_id
34001      and project_id = p_project_id
34002      and financial_task_flag = 'Y';
34003 
34004 BEGIN
34005  --  Initialize the message table if requested.
34006     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
34007        FND_MSG_PUB.initialize;
34008     END IF;
34009 
34010     IF (p_commit = FND_API.G_TRUE) THEN
34011        savepoint UPDATE_MAPPING_PUB;
34012     END IF;
34013 
34014     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34015     IF l_debug_mode = 'Y' THEN
34016           PA_DEBUG.set_curr_function( p_function   => 'UPDATE_MAPPING',
34017                                       p_debug_mode => l_debug_mode );
34018     END IF;
34019 
34020     IF l_debug_mode = 'Y' THEN
34021           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : Printing Input parameters';
34022           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34023                                      l_debug_level3);
34024           Pa_Debug.WRITE(g_pkg_name,'px_mapped_task_id'||':'||px_mapped_task_id,
34025                                      l_debug_level3);
34026           Pa_Debug.WRITE(g_pkg_name,'p_mapped_task_name'||':'||p_mapped_task_name,
34027                                      l_debug_level3);
34028           Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_id'||':'||p_wkp_task_id,
34029                                      l_debug_level3);
34030           Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_name'||':'||p_wkp_task_name,
34031                                      l_debug_level3);
34032           Pa_Debug.WRITE(g_pkg_name,'p_wkp_structure_version_id'||':'||p_wkp_structure_version_id,
34033                                      l_debug_level3);
34034           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34035                                      l_debug_level3);
34036           Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34037                                      l_debug_level3);
34038      END IF;
34039    --Validate for input parameters
34040      IF l_debug_mode = 'Y' THEN
34041           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : Validating Input parameters';
34042           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34043                                      l_debug_level3);
34044      END IF;
34045 
34046      IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34047           AND
34048           (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34049         )
34050      THEN
34051           IF l_debug_mode = 'Y' THEN
34052                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : At least one of the parameters for deriving Project id should be passed';
34053                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34054                                           l_debug_level3);
34055           END IF;
34056           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34057      END IF;
34058 
34059 
34060      IF (
34061           (p_wkp_task_id IS NULL OR p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34062           AND
34063           (p_wkp_task_reference IS NULL OR p_wkp_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34064           AND
34065           ( p_wkp_task_name IS NULL OR p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34066         )
34067      THEN
34068           IF l_debug_mode = 'Y' THEN
34069                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : At least one of the parameters for deriving workplan task version id should be passed';
34070                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34071                                           l_debug_level3);
34072           END IF;
34073           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34074      END IF;
34075 
34076 
34077   --  Set API return status to success
34078      x_return_status     := FND_API.G_RET_STS_SUCCESS;
34079 
34080      IF p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34081         l_wkp_task_id := NULL;
34082      ELSE
34083         l_wkp_task_id := p_wkp_task_id;
34084      END IF;
34085 
34086      IF px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34087        l_mapped_task_id := NULL;
34088      ELSE
34089        l_mapped_task_id := px_mapped_task_id;
34090      END IF;
34091 
34092      IF p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34093        l_mapped_task_reference := NULL;
34094      ELSE
34095        l_mapped_task_reference := p_mapped_task_reference;
34096      END IF;
34097 
34098      IF p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34099        l_wkp_task_name := NULL;
34100      ELSE
34101        l_wkp_task_name := p_wkp_task_name;
34102      END IF;
34103 
34104      IF p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34105        l_mapped_task_name := NULL;
34106      ELSE
34107        l_mapped_task_name := p_mapped_task_name;
34108      END IF;
34109 
34110      IF p_wkp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34111        l_wkp_structure_version_id := NULL;
34112      ELSE
34113        l_wkp_structure_version_id := p_wkp_structure_version_id;
34114      END IF;
34115 
34116      IF p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34117           l_project_id := NULL;
34118      ELSE
34119           l_project_id := p_project_id;
34120      END IF;
34121     -- Get the task and Project details based on source reference passed
34122     IF (
34123           ( p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34124           AND
34125           ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34126        )
34127     THEN
34128           PA_PROJECT_PVT.Convert_pm_projref_to_id  (
34129                          p_pm_project_reference =>   p_proj_source_reference
34130                       ,  p_pa_project_id     =>      p_project_id
34131                       ,  p_out_project_id    =>      l_project_id
34132                       ,  p_return_status     =>      x_return_status
34133              );
34134     END IF;
34135 
34136     IF p_debug_mode = 'Y' THEN
34137             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'Project ID:'||l_project_id;
34138             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34139     END IF;
34140 
34141     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34142         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34143     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34144         RAISE  FND_API.G_EXC_ERROR;
34145     END IF;
34146  --Get the Wkp Task ID using Wkp Task Reference
34147      IF ( l_wkp_task_id IS NULL
34148           AND
34149           (p_wkp_task_reference IS NOT NULL AND p_wkp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34150         )
34151      THEN
34152              PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34153                    p_pa_project_id      => l_project_id
34154                  , p_structure_type     => 'WORKPLAN'
34155                  , p_pm_task_reference  => p_wkp_task_reference
34156                  , p_out_task_id        => l_wkp_task_id
34157                  , p_return_status      => x_return_status );
34158 
34159                IF p_debug_mode = 'Y' THEN
34160                       pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'wkp_task_id:'||l_wkp_task_id;
34161                       pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34162                END IF;
34163 
34164         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
34165           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34166         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
34167           RAISE FND_API.G_EXC_ERROR;
34168         END IF;
34169      END IF;
34170 
34171 -- Get the mapped task Id based in mapped_task_reference
34172    IF (  l_mapped_task_id IS NULL
34173           AND
34174           (l_mapped_task_reference IS NOT NULL AND l_mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34175        )
34176    THEN
34177        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34178                    p_pa_project_id      => l_project_id
34179                  , p_structure_type     => 'FINANCIAL'
34180                  , p_pm_task_reference  => p_mapped_task_reference
34181                  , p_out_task_id        => l_mapped_task_id
34182                  , p_return_status      => x_return_status );
34183 
34184       IF p_debug_mode = 'Y' THEN
34185             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'mapped_task_id:'||l_mapped_task_id;
34186             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34187       END IF;
34188       IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
34189              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34190       ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
34191              RAISE FND_API.G_EXC_ERROR;
34192       END IF;
34193    END IF;
34194 
34195      --Get the task version id from Wkp task Id
34196      -- Avoid this call if wkp task name and wkp task version ids are passed
34197      IF (l_wkp_task_id IS NOT NULL AND l_wkp_structure_version_id IS NULL ) THEN
34198            IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
34199                    l_wkp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
34200                   IF (l_wkp_structure_version_id  IS NULL OR l_wkp_structure_version_id  = -1) THEN
34201                        l_wkp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
34202                   END IF;
34203            END IF;
34204      END IF;
34205      l_wkp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
34206                                  (
34207                                      p_structure_version_id => l_wkp_structure_version_id
34208                                    , p_task_id => l_wkp_task_id
34209                                  );
34210      --Get the financial task version id from financial task id,
34211      IF (l_mapped_task_id IS NOT NULL) THEN
34212          open cur_get_mapped_task_version_id (l_project_id, l_mapped_task_id);
34213          fetch cur_get_mapped_task_version_id into l_mapped_task_version_id;
34214          close cur_get_mapped_task_version_id ;
34215 
34216      END IF;
34217 
34218      IF p_debug_mode = 'Y' THEN
34219             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'Before Calling PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING:';
34220             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34221      END IF;
34222 
34223 
34224 -- All other validations done in PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34225 -- call PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING here only
34226 
34227    PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34228    (
34229        p_api_version               => p_api_version
34230      , p_calling_module            => 'AMG'
34231      , p_init_msg_list             => FND_API.G_FALSE
34232      , p_commit                    => FND_API.G_FALSE--bug 3766967
34233      , p_debug_mode                => p_debug_mode
34234      , p_project_id                => l_project_id
34235      , p_wp_task_name              => l_wkp_task_name
34236      , p_wp_prnt_str_ver_id        => l_wkp_structure_version_id
34237      , p_wp_task_version_id        => l_wkp_task_version_id
34238      , p_fp_task_name              => l_mapped_task_name
34239      , p_fp_task_version_id        => l_mapped_task_version_id
34240      , x_return_status             => l_return_status
34241      , x_msg_count                 => x_msg_count
34242      , x_msg_data                  => x_msg_data
34243    );
34244 
34245     x_msg_count              := l_msg_count;
34246     x_msg_data               := l_msg_data;
34247 
34248     IF p_debug_mode = 'Y' THEN
34249        pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING:'||x_return_status;
34250        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34251     END IF;
34252 
34253    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34254           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34255    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34256           RAISE  FND_API.G_EXC_ERROR;
34257    END IF;
34258 
34259 EXCEPTION
34260    WHEN FND_API.G_EXC_ERROR        THEN
34261         IF (p_commit = FND_API.G_TRUE) THEN
34262           ROLLBACK TO UPDATE_MAPPING_PUB;
34263          END IF;
34264        x_return_status := FND_API.G_RET_STS_ERROR;
34265 
34266    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
34267         IF (p_commit = FND_API.G_TRUE) THEN
34268           ROLLBACK TO UPDATE_MAPPING_PUB;
34269          END IF;
34270        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34271 
34272    WHEN OTHERS THEN
34273         IF (p_commit = FND_API.G_TRUE) THEN
34274           ROLLBACK TO UPDATE_MAPPING_PUB;
34275         END IF;
34276        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34277 
34278    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
34279        FND_MSG_PUB.add_exc_msg
34280                    ( p_pkg_name            => G_PKG_NAME
34281                    , p_procedure_name      => l_api_name   );
34282   END IF;
34283 END UPDATE_MAPPING;
34284 --------------------------------------------------------------------------------
34285 --Name:               process_tasks_table
34286 --Type:               Procedure
34287 
34288 --History:
34289 --    24-Mar-2004   Ritesh            Created
34290 --
34291 
34292 PROCEDURE process_tasks_table
34293 (   p_api_version                  IN        NUMBER     := 1.0
34294   , p_init_msg_list                IN        VARCHAR2   := FND_API.G_TRUE
34295   , p_debug_mode                   IN        VARCHAR2   := 'N'
34296   , p_structure_type               IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34297   , p_tasks_in_tbl                 IN OUT  NOCOPY     task_in_tbl_type /*Added the nocopy check for 4537865 */
34298 --  , p_tasks_out_tbl                OUT       task_in_tbl_type
34299   , p_project_id                   IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34300   , p_proj_source_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34301   , x_return_status                OUT NOCOPY       VARCHAR2 /*Added the nocopy check for 4537865 */
34302   , x_msg_count                    OUT NOCOPY       NUMBER /*Added the nocopy check for 4537865 */
34303   , x_msg_data                     OUT NOCOPY       VARCHAR2 /*Added the nocopy check for 4537865 */
34304   )
34305 
34306   IS
34307     l_project_id            NUMBER;
34308     l_proj_share_type       VARCHAR2(240);
34309     iCounter                NUMBER := 0;
34310     last_financial_flag     VARCHAR2(1) := NULL;
34311     last_wbs_level          NUMBER := -1;
34312     l_task_rec              task_in_rec_type;
34313     l_msg_count             NUMBER;
34314     l_msg_data              VARCHAR2(2000);
34315     l_api_name              CONSTANT  VARCHAR2(30)     := 'PROCESS_TASK_TABLE';
34316 
34317     l_return_status                  VARCHAR2(1);
34318     l_debug_mode                     VARCHAR2(1);
34319     l_debug_level2                   CONSTANT NUMBER := 2;
34320     l_debug_level3                   CONSTANT NUMBER := 3;
34321     l_debug_level4                   CONSTANT NUMBER := 4;
34322     l_debug_level5                   CONSTANT NUMBER := 5;
34323 
34324 BEGIN
34325     --Initialize the message table if requested.
34326     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
34327        FND_MSG_PUB.initialize;
34328     END IF;
34329 
34330     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34331     IF l_debug_mode = 'Y' THEN
34332           PA_DEBUG.set_curr_function( p_function   => 'PROCESS_TASK_TABLE',
34333                                       p_debug_mode => l_debug_mode );
34334     END IF;
34335 
34336     IF l_debug_mode = 'Y' THEN
34337           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Printing Input parameters';
34338           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34339                                      l_debug_level3);
34340           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34341                                      l_debug_level3);
34342           Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34343                                   l_debug_level3);
34344      END IF;
34345    --Validate for input parameters
34346      IF l_debug_mode = 'Y' THEN
34347           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Validating Input parameters';
34348           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34349                                      l_debug_level3);
34350      END IF;
34351 
34352      IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34353           AND
34354           (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34355         )
34356      THEN
34357           IF l_debug_mode = 'Y' THEN
34358                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : At least one of the parameters for deriving Project id should be passed';
34359                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34360                                           l_debug_level3);
34361           END IF;
34362           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34363      END IF;
34364 
34365      IF ( p_tasks_in_tbl IS NULL OR p_tasks_in_tbl.count <= 0 )
34366      THEN
34367           IF l_debug_mode = 'Y' THEN
34368                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Empty or NULL Task Table';
34369                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34370                                           l_debug_level3);
34371           END IF;
34372           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34373      END IF;
34374 
34375 
34376 
34377   --  Set API return status to success
34378      x_return_status     := FND_API.G_RET_STS_SUCCESS;
34379 
34380 
34381   -- Get the task and Project details based on source reference passed
34382      IF (p_project_id IS NULL AND p_proj_source_reference IS NOT NULL ) THEN
34383           PA_PROJECT_PVT.Convert_pm_projref_to_id  (
34384                          p_pm_project_reference =>   p_proj_source_reference
34385                       ,  p_pa_project_id     =>      p_project_id
34386                       ,  p_out_project_id    =>      l_project_id
34387                       ,  p_return_status     =>      x_return_status
34388              );
34389      END IF;
34390 
34391      IF p_debug_mode = 'Y' THEN
34392             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'PROCESS_TASK_TABLE'||'Project ID:'||l_project_id;
34393             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34394      END IF;
34395 
34396      IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34397         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34398      ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34399         RAISE  FND_API.G_EXC_ERROR;
34400      END IF;
34401 -- Get the project sharing type
34402      l_proj_share_type  := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
34403      IF (l_proj_share_type = 'SHARE_PARTIAL' and p_structure_type = 'FINANCIAL')
34404      THEN
34405           FOR iCounter IN REVERSE p_tasks_in_tbl.FIRST..p_tasks_in_tbl.LAST LOOP
34406                l_task_rec := p_tasks_in_tbl(iCounter);
34407 
34408                IF (iCounter <> p_tasks_in_tbl.LAST OR last_wbs_level <> 1)
34409                THEN
34410                     --If not the summary task and not at the same level as the last task, set flag as 'Y', if lower task is 'Y'
34411                     IF (l_task_rec.wbs_level <> last_wbs_level )
34412                     THEN
34413                          l_task_rec.financial_task_flag := last_financial_flag;
34414                     END IF;
34415 
34416                END IF;
34417 
34418                IF (l_task_rec.financial_task_flag IS NOT NULL)
34419                THEN
34420                     IF(
34421                          l_task_rec.wbs_level = last_wbs_level
34422                          and
34423                          last_financial_flag = 'Y'
34424                          and
34425                          l_task_rec.financial_task_flag = 'N'
34426                       )
34427                     THEN
34428                          NULL;
34429                     ELSE
34430                         last_financial_flag :=  l_task_rec.financial_task_flag;
34431                     END IF;
34432                ELSE
34433                     last_financial_flag := 'N';
34434                END IF;
34435 
34436                last_wbs_level := l_task_rec.wbs_level;
34437                --p_tasks_out_tbl(iCounter):= l_task_rec;
34438           END LOOP;
34439 
34440      END IF;
34441 
34442 EXCEPTION
34443    WHEN FND_API.G_EXC_ERROR        THEN
34444 
34445        x_return_status := FND_API.G_RET_STS_ERROR;
34446 
34447    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
34448 
34449        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34450 
34451    WHEN OTHERS THEN
34452 
34453        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34454 
34455    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
34456        FND_MSG_PUB.add_exc_msg
34457                    ( p_pkg_name            => G_PKG_NAME
34458                    , p_procedure_name      => l_api_name   );
34459   END IF;
34460 END process_tasks_table;
34461 --End Add by rtarway for FP.M Development
34462 
34463 --added by hsiu
34464 --
34465 PROCEDURE Create_Dependency(
34466   p_api_version_number          IN  NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34467  ,p_commit                      IN  VARCHAR2 := FND_API.G_FALSE
34468  ,p_init_msg_list               IN  VARCHAR2 := FND_API.G_FALSE
34469  ,p_msg_count                   OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
34470  ,p_msg_data                    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34471  ,p_return_status               OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34472  ,p_pm_product_code     IN  VARCHAR2
34473  ,p_pm_project_reference    IN  VARCHAR2
34474  ,p_pa_project_id       IN  NUMBER
34475  ,p_structure_version_id        IN  NUMBER
34476  ,p_pm_task_reference           IN  VARCHAR2
34477  ,p_pa_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34478  ,p_pm_pred_reference           IN  VARCHAR2
34479  ,p_pa_pred_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34480  ,p_type                        IN  VARCHAR2 := 'FS'
34481  ,p_lag_days                    IN  NUMBER   := 0
34482  ,p_comments                    IN  VARCHAR2 := NULL
34483 )
34484 IS
34485   l_msg_count NUMBER;
34486   l_msg_data      VARCHAR2(250);
34487   l_return_status VARCHAR2(1);
34488   l_project_id  NUMBER;
34489   l_task_ver_id     NUMBER;
34490   l_pred_ver_id     NUMBER;
34491   l_template_flag   VARCHAR2(1);
34492   l_wp_status       VARCHAR2(150);
34493   l_versioning      VARCHAR2(1);
34494 
34495 --  CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER)  --Bug 3735799
34496   CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2)  --Bug 3735799
34497   IS
34498   select ppev.element_version_id
34499     from pa_proj_elements ppe, pa_proj_element_versions ppev
34500    where ppe.project_id = c_project_id
34501      and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
34502      and ppe.project_id = ppev.project_Id
34503      and ppe.proj_element_id = ppev.proj_element_id
34504      and ppev.parent_structure_version_id = p_structure_version_id;
34505 
34506   CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER)  --Bug 3880403
34507   IS
34508   select ppev.element_version_id
34509     from pa_proj_elements ppe, pa_proj_element_versions ppev
34510    where ppe.project_id = c_project_id
34511      and ppe.proj_element_id = c_task_id
34512      and ppe.project_id = ppev.project_Id
34513      and ppe.proj_element_id = ppev.proj_element_id
34514      and ppev.parent_structure_version_id = p_structure_version_id;
34515 
34516   CURSOR get_template_flag(c_project_id NUMBER)
34517   IS
34518   select template_flag
34519     from pa_projects_all
34520    where project_id = c_project_id;
34521 
34522   CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
34523   IS
34524   select STATUS_CODE
34525     from pa_proj_elem_ver_structure
34526    where project_id = c_project_id
34527      and element_version_id = c_structure_version_id;
34528 BEGIN
34529   savepoint create_dep_pub_amg;
34530 
34531   IF FND_API.TO_BOOLEAN( p_init_msg_list )
34532   THEN
34533     FND_MSG_PUB.Initialize;
34534   END IF;
34535 
34536   --get project id
34537   PA_PROJECT_PVT.Convert_pm_projref_to_id
34538   (        p_pm_project_reference =>      p_pm_project_reference
34539         ,  p_pa_project_id     =>      p_pa_project_id
34540         ,  p_out_project_id    =>      l_project_id
34541         ,  p_return_status     =>      l_return_status
34542    );
34543 
34544    IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34545      RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34546    ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
34547      RAISE  FND_API.G_EXC_ERROR;
34548    END IF;
34549 --
34550    --Bug 3768875
34551    If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
34552       If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
34553            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34554                                 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
34555            RAISE FND_API.G_EXC_ERROR;
34556       End If;
34557    Else
34558       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34559                            p_msg_name => 'PA_INV_PROJECT_ID');
34560       RAISE FND_API.G_EXC_ERROR;
34561    End If;
34562 --
34563    --check if structure version can be modified
34564    OPEN get_template_flag(l_project_id);
34565    FETCH get_template_flag into l_template_flag;
34566    CLOSE get_template_flag;
34567 
34568    l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
34569 
34570    --if template, then ok
34571    IF l_template_flag = 'N' THEN
34572      --project, check if versioning is enabled
34573      --            ok if versioning is disabled
34574      IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
34575        --            if versioning enabled, ok if working
34576        OPEN get_workplan_status(l_project_id, p_structure_version_id);
34577        FETCH get_workplan_status into l_wp_status;
34578        CLOSE get_workplan_status;
34579        IF l_wp_status <> 'STRUCTURE_WORKING' THEN
34580          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34581                               p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
34582          RAISE FND_API.G_EXC_ERROR;
34583        END IF;
34584      ELSE
34585        IF (l_versioning IS NULL) THEN
34586          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34587                               p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
34588          RAISE FND_API.G_EXC_ERROR;
34589        END IF;
34590      END IF;
34591    END IF;
34592 
34593    --get task id
34594    IF (p_pm_task_reference IS NOT NULL) THEN
34595      open get_task_ver_id(l_project_id, p_pm_task_reference);
34596      Fetch get_task_ver_id into l_task_ver_id;
34597      --   Bug 3768875
34598      IF get_task_ver_id%NOTFOUND THEN
34599          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34600                               p_msg_name => 'PA_PS_INV_TASK_ID');
34601          CLOSE get_task_ver_id;
34602          RAISE FND_API.G_EXC_ERROR;
34603      END IF;
34604      CLOSE get_task_ver_id;
34605    END IF;
34606 
34607    --bug 3880403
34608    IF (p_pm_task_reference IS NULL OR l_task_ver_id IS NULL) THEN
34609      --need to get id using task id
34610      OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
34611      FETCH get_task_Ver_id2 into l_task_ver_id;
34612      IF get_task_ver_id2%NOTFOUND THEN
34613          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34614                               p_msg_name => 'PA_PS_INV_TASK_ID');
34615          CLOSE get_task_ver_id2;
34616          RAISE FND_API.G_EXC_ERROR;
34617      END IF;
34618      CLOSE get_task_ver_id2;
34619    END IF;
34620    --end bug 3880403
34621 --
34622    --get predecessor id
34623    IF (p_pm_pred_reference IS NOT NULL) THEN
34624      open get_task_ver_id(l_project_id, p_pm_pred_reference);
34625      Fetch get_task_ver_id into l_pred_ver_id;
34626      --Bug 3768875
34627      IF get_task_ver_id%NOTFOUND THEN
34628          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34629                               p_msg_name => 'PA_PS_INV_TASK_ID');
34630          CLOSE get_task_ver_id;
34631          RAISE FND_API.G_EXC_ERROR;
34632      END IF;
34633      CLOSE get_task_ver_id;
34634    END IF;
34635 
34636    --bug 3880403
34637    IF (p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL) THEN
34638      --need to get id using task id
34639      OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
34640      FETCH get_task_Ver_id2 into l_pred_ver_id;
34641      IF get_task_ver_id2%NOTFOUND THEN
34642          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34643                               p_msg_name => 'PA_PS_INV_TASK_ID');
34644          CLOSE get_task_ver_id2;
34645          RAISE FND_API.G_EXC_ERROR;
34646      END IF;
34647      CLOSE get_task_ver_id2;
34648    END IF;
34649    --end bug 3880403
34650 --
34651 -- Bug 3768933 Validating the relationship_subtype
34652    IF PA_PROJ_ELEMENTS_UTILS.check_pa_lookup_exists('PA_OBJECT_DEPENDENCY_TYPES',p_type) <> 'Y' THEN
34653       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34654                            p_msg_name => 'PA_PS_INV_REL_SUBTYPE_VAL');
34655       RAISE FND_API.G_EXC_ERROR;
34656    END IF;
34657 --
34658    --call existing create dependency API to create intra dependency
34659    PA_RELATIONSHIP_PVT.Create_Dependency(
34660              p_calling_module                   => 'SELF_SERVICE'
34661             ,p_src_proj_id                      => l_project_id
34662             ,p_src_task_ver_id                  => l_task_ver_id
34663             ,p_dest_proj_id                     => l_project_id
34664             ,p_dest_task_ver_id                 => l_pred_ver_id
34665             ,p_type                             => p_type
34666             ,p_lag_days                         => p_lag_days
34667             ,p_comments                         => p_comments
34668             ,x_return_status                    => p_return_status
34669             ,x_msg_count                        => p_msg_count
34670             ,x_msg_data                         => p_msg_data
34671             );
34672 
34673   IF p_msg_count > 0 THEN
34674     RAISE FND_API.G_EXC_ERROR;
34675   END IF;
34676 
34677   p_return_status := FND_API.G_RET_STS_SUCCESS;
34678 
34679 EXCEPTION
34680   WHEN FND_API.G_EXC_ERROR THEN
34681     ROLLBACK TO create_dep_pub_amg;
34682     p_return_status := FND_API.G_RET_STS_ERROR;
34683 
34684 -- Begin fix for Bug # 4323969.
34685 
34686    FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
34687                              , p_data   =>  p_msg_data);
34688 
34689 -- End fix for Bug # 4323969.
34690 
34691   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34692     ROLLBACK TO create_dep_pub_amg;
34693     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34694 
34695 -- Begin fix for Bug # 4323969.
34696 
34697    FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
34698                              , p_data   =>  p_msg_data);
34699 
34700 -- End fix for Bug # 4323969.
34701 
34702   When OTHERS then
34703     ROLLBACK TO create_dep_pub_amg;
34704     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34705 
34706 -- Begin fix for Bug # 4323969.
34707 
34708    FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
34709                              , p_data   =>  p_msg_data);
34710 
34711 -- End fix for Bug # 4323969.
34712 
34713 END Create_Dependency;
34714 
34715 
34716 
34717 PROCEDURE Update_Dependency(
34718   p_api_version_number          IN  NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34719  ,p_commit                      IN  VARCHAR2 := FND_API.G_FALSE
34720  ,p_init_msg_list               IN  VARCHAR2 := FND_API.G_FALSE
34721  ,p_msg_count                   OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
34722  ,p_msg_data                    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34723  ,p_return_status               OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34724  ,p_pm_product_code             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34725  ,p_pm_project_reference        IN  VARCHAR2
34726  ,p_pa_project_id       IN  NUMBER
34727  ,p_structure_version_id        IN  NUMBER
34728  ,p_pm_task_reference           IN  VARCHAR2
34729  ,p_pa_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34730  ,p_pm_pred_reference           IN  VARCHAR2
34731  ,p_pa_pred_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34732  ,p_type                        IN  VARCHAR2 := 'FS'
34733  ,p_lag_days                    IN  NUMBER   := 0
34734  ,p_comments                    IN  VARCHAR2 := NULL
34735 )
34736 IS
34737   l_return_status VARCHAR2(1);
34738   l_project_id  NUMBER;
34739   l_task_ver_id     NUMBER;
34740   l_pred_ver_id     NUMBER;
34741   l_template_flag   VARCHAR2(1);
34742   l_wp_status       VARCHAR2(150);
34743   l_versioning      VARCHAR2(1);
34744   l_record_version_number NUMBER;
34745 
34746 --  CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER)  --Bug 3735799
34747   CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2)  --Bug 3735799
34748   IS
34749   select ppev.element_version_id
34750     from pa_proj_elements ppe, pa_proj_element_versions ppev
34751    where ppe.project_id = c_project_id
34752      and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
34753      and ppe.project_id = ppev.project_Id
34754      and ppe.proj_element_id = ppev.proj_element_id
34755      and ppev.parent_structure_version_id = p_structure_version_id;
34756 
34757   CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER)  --Bug 3880403
34758   IS
34759   select ppev.element_version_id
34760     from pa_proj_elements ppe, pa_proj_element_versions ppev
34761    where ppe.project_id = c_project_id
34762      and ppe.proj_element_id = c_task_id
34763      and ppe.project_id = ppev.project_Id
34764      and ppe.proj_element_id = ppev.proj_element_id
34765      and ppev.parent_structure_version_id = p_structure_version_id;
34766 
34767   CURSOR get_template_flag(c_project_id NUMBER)
34768   IS
34769   select template_flag
34770     from pa_projects_all
34771    where project_id = c_project_id;
34772 
34773   CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
34774   IS
34775   select STATUS_CODE
34776     from pa_proj_elem_ver_structure
34777    where project_id = c_project_id
34778      and element_version_id = c_structure_version_id;
34779 
34780   CURSOR get_rvn(c_id_from NUMBER, c_id_to NUMBER) IS
34781       SELECT record_version_number
34782         FROM pa_object_relationships
34783        WHERE object_id_to1 = c_id_to
34784          AND object_id_from1 = c_id_from
34785          AND relationship_type = 'D';
34786 BEGIN
34787   savepoint update_dep_pub_amg;
34788 
34789   IF FND_API.TO_BOOLEAN( p_init_msg_list )
34790   THEN
34791     FND_MSG_PUB.Initialize;
34792   END IF;
34793 
34794   --get project id
34795   PA_PROJECT_PVT.Convert_pm_projref_to_id
34796   (        p_pm_project_reference =>      p_pm_project_reference
34797         ,  p_pa_project_id     =>      p_pa_project_id
34798         ,  p_out_project_id    =>      l_project_id
34799         ,  p_return_status     =>      l_return_status
34800    );
34801 
34802    IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34803      RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34804    ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
34805      RAISE  FND_API.G_EXC_ERROR;
34806    END IF;
34807 --
34808    --Bug 3769089
34809    If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
34810       If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
34811            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34812                                 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
34813 
34814            RAISE FND_API.G_EXC_ERROR;
34815       End If;
34816    Else
34817       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34818                            p_msg_name => 'PA_INV_PROJECT_ID');
34819       RAISE FND_API.G_EXC_ERROR;
34820    End If;
34821 --
34822 --
34823    --check if structure version can be modified
34824    OPEN get_template_flag(l_project_id);
34825    FETCH get_template_flag into l_template_flag;
34826    CLOSE get_template_flag;
34827 
34828    l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
34829 
34830    --if template, then ok
34831    IF l_template_flag = 'N' THEN
34832      --project, check if versioning is enabled
34833      --            ok if versioning is disabled
34834      IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
34835        --            if versioning enabled, ok if working
34836        OPEN get_workplan_status(l_project_id, p_structure_version_id);
34837        FETCH get_workplan_status into l_wp_status;
34838        CLOSE get_workplan_status;
34839        IF l_wp_status <> 'STRUCTURE_WORKING' THEN
34840          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34841                               p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
34842          RAISE FND_API.G_EXC_ERROR;
34843        END IF;
34844      ELSE
34845        IF (l_versioning IS NULL) THEN
34846          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34847                               p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
34848          RAISE FND_API.G_EXC_ERROR;
34849        END IF;
34850      END IF;
34851    END IF;
34852 
34853    --get task id
34854    IF p_pm_task_reference IS NOT NULL THEN
34855      open get_task_ver_id(l_project_id, p_pm_task_reference);
34856      Fetch get_task_ver_id into l_task_ver_id;
34857      --Bug 3769089
34858      IF get_task_ver_id%NOTFOUND THEN
34859          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34860                               p_msg_name => 'PA_PS_INV_TASK_ID');
34861          CLOSE get_task_ver_id;
34862          RAISE FND_API.G_EXC_ERROR;
34863      END IF;
34864      CLOSE get_task_ver_id;
34865    END IF;
34866 
34867    --bug 3880403
34868    IF p_pm_task_reference IS NULL OR l_task_ver_id IS NULL THEN
34869      --need to get id using task id
34870      OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
34871      FETCH get_task_Ver_id2 into l_task_ver_id;
34872      IF get_task_ver_id2%NOTFOUND THEN
34873          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34874                               p_msg_name => 'PA_PS_INV_TASK_ID');
34875          CLOSE get_task_ver_id2;
34876          RAISE FND_API.G_EXC_ERROR;
34877      END IF;
34878      CLOSE get_task_ver_id2;
34879    END IF;
34880    --end bug 3880403
34881 
34882 
34883    --get predecessor id
34884    IF (p_pm_pred_reference IS NOT NULL) THEN
34885      open get_task_ver_id(l_project_id, p_pm_pred_reference);
34886      Fetch get_task_ver_id into l_pred_ver_id;
34887      --Bug 3769089
34888      IF get_task_ver_id%NOTFOUND THEN
34889          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34890                               p_msg_name => 'PA_PS_INV_TASK_ID');
34891          CLOSE get_task_ver_id;
34892          RAISE FND_API.G_EXC_ERROR;
34893      END IF;
34894      CLOSE get_task_ver_id;
34895    END IF;
34896 
34897    --bug 3880403
34898    IF p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL THEN
34899      --need to get id using task id
34900      OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
34901      FETCH get_task_Ver_id2 into l_pred_ver_id;
34902      IF get_task_ver_id2%NOTFOUND THEN
34903          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34904                               p_msg_name => 'PA_PS_INV_TASK_ID');
34905          CLOSE get_task_ver_id2;
34906          RAISE FND_API.G_EXC_ERROR;
34907      END IF;
34908      CLOSE get_task_ver_id2;
34909    END IF;
34910    --end bug 3880403
34911 
34912 --
34913    --get record version number
34914    open get_rvn(l_task_ver_id, l_pred_ver_id);
34915    FETCH get_rvn into l_record_version_number;
34916    --Bug 3769047
34917    IF get_rvn%NOTFOUND THEN
34918          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34919                               p_msg_name => 'PA_PS_INV_DEP_ID');
34920          RAISE FND_API.G_EXC_ERROR;
34921    END IF;
34922    CLOSE get_rvn;
34923 --
34924    --call existing update dependency API to create intra dependency
34925    PA_RELATIONSHIP_PVT.Update_Dependency(
34926              p_calling_module                   => 'SELF_SERVICE'
34927             ,p_task_version_id                  => l_pred_ver_id
34928             ,p_src_task_version_id              => l_task_ver_id
34929             ,p_type                             => p_type
34930             ,p_lag_days                         => p_lag_days
34931             ,p_comments                         => p_comments
34932             ,p_record_version_number            => l_record_version_number
34933             ,x_return_status                    => p_return_status
34934             ,x_msg_count                        => p_msg_count
34935             ,x_msg_data                         => p_msg_data
34936             );
34937 
34938   IF p_msg_count > 0 THEN
34939     RAISE FND_API.G_EXC_ERROR;
34940   END IF;
34941 
34942   p_return_status := FND_API.G_RET_STS_SUCCESS;
34943 
34944 EXCEPTION
34945   WHEN FND_API.G_EXC_ERROR THEN
34946     ROLLBACK TO update_dep_pub_amg;
34947     p_return_status := FND_API.G_RET_STS_ERROR;
34948 
34949     -- 4537865 Included same fix as 4323969.
34950     FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
34951                           , p_data   =>  p_msg_data);
34952 
34953   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34954     ROLLBACK TO update_dep_pub_amg;
34955     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34956 
34957     -- 4537865 : Included same fix as 4323969.
34958     FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
34959                           , p_data   =>  p_msg_data);
34960 
34961   When OTHERS then
34962     ROLLBACK TO update_dep_pub_amg;
34963     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34964     IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
34965 
34966       FND_MSG_PUB.add_exc_msg
34967       (p_pkg_name     => G_PKG_NAME
34968       , p_procedure_name => 'Update_Dependency');
34969 
34970     END IF;
34971    -- 4537865 : Included same fix as 4323969.
34972     FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
34973                           , p_data   =>  p_msg_data);
34974 END Update_Dependency;
34975 
34976 
34977 
34978 PROCEDURE Delete_Dependency(
34979   p_api_version_number          IN  NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34980  ,p_commit                      IN  VARCHAR2 := FND_API.G_FALSE
34981  ,p_init_msg_list               IN  VARCHAR2 := FND_API.G_FALSE
34982  ,p_msg_count                   OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
34983  ,p_msg_data                    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
34984  ,p_return_status               OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
34985  ,p_pm_product_code     IN  VARCHAR2
34986  ,p_pm_project_reference    IN  VARCHAR2
34987  ,p_pa_project_id       IN  NUMBER
34988  ,p_structure_version_id        IN  NUMBER
34989  ,p_pm_task_reference           IN  VARCHAR2
34990  ,p_pa_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34991  ,p_pm_pred_reference           IN  VARCHAR2
34992  ,p_pa_pred_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34993 )
34994 IS
34995   l_msg_count       NUMBER;
34996   l_msg_data        VARCHAR2(250);
34997   l_return_status VARCHAR2(1);
34998   l_project_id  NUMBER;
34999   l_task_ver_id     NUMBER;
35000   l_pred_ver_id     NUMBER;
35001   l_template_flag   VARCHAR2(1);
35002   l_wp_status       VARCHAR2(150);
35003   l_versioning      VARCHAR2(1);
35004   l_record_version_number NUMBER;
35005   l_obj_rel_id      NUMBER;
35006 
35007 --  CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER)   --Bug 3735799
35008   CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2)   --Bug 3735799
35009   IS
35010   select ppev.element_version_id
35011     from pa_proj_elements ppe, pa_proj_element_versions ppev
35012    where ppe.project_id = c_project_id
35013      and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
35014      and ppe.project_id = ppev.project_Id
35015      and ppe.proj_element_id = ppev.proj_element_id
35016      and ppev.parent_structure_version_id = p_structure_version_id;
35017 
35018   CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER)  --Bug 3880403
35019   IS
35020   select ppev.element_version_id
35021     from pa_proj_elements ppe, pa_proj_element_versions ppev
35022    where ppe.project_id = c_project_id
35023      and ppe.proj_element_id = c_task_id
35024      and ppe.project_id = ppev.project_Id
35025      and ppe.proj_element_id = ppev.proj_element_id
35026      and ppev.parent_structure_version_id = p_structure_version_id;
35027 
35028   CURSOR get_template_flag(c_project_id NUMBER)
35029   IS
35030   select template_flag
35031     from pa_projects_all
35032    where project_id = c_project_id;
35033 
35034   CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
35035   IS
35036   select STATUS_CODE
35037     from pa_proj_elem_ver_structure
35038    where project_id = c_project_id
35039      and element_version_id = c_structure_version_id;
35040 
35041   CURSOR get_rvn(c_id_from NUMBER, c_id_to NUMBER) IS
35042       SELECT object_relationship_id, record_version_number
35043         FROM pa_object_relationships
35044        WHERE object_id_to1 = c_id_to
35045          AND object_id_from1 = c_id_from
35046          AND relationship_type = 'D';
35047 BEGIN
35048   savepoint delete_dep_pub_amg;
35049 
35050   IF FND_API.TO_BOOLEAN( p_init_msg_list )
35051   THEN
35052     FND_MSG_PUB.Initialize;
35053   END IF;
35054 
35055   --get project id
35056   PA_PROJECT_PVT.Convert_pm_projref_to_id
35057   (        p_pm_project_reference =>      p_pm_project_reference
35058         ,  p_pa_project_id     =>      p_pa_project_id
35059         ,  p_out_project_id    =>      l_project_id
35060         ,  p_return_status     =>      l_return_status
35061    );
35062 
35063    IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35064      RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35065    ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35066      RAISE  FND_API.G_EXC_ERROR;
35067    END IF;
35068 --
35069    --Bug 3769079
35070    If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
35071       If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
35072            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35073                                 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35074            RAISE FND_API.G_EXC_ERROR;
35075       End If;
35076    Else
35077       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35078                            p_msg_name => 'PA_INV_PROJECT_ID');
35079       RAISE FND_API.G_EXC_ERROR;
35080    End If;
35081 --
35082 --
35083    --check if structure version can be modified
35084    OPEN get_template_flag(l_project_id);
35085    FETCH get_template_flag into l_template_flag;
35086    CLOSE get_template_flag;
35087 
35088    l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
35089 
35090    --if template, then ok
35091    IF l_template_flag = 'N' THEN
35092      --project, check if versioning is enabled
35093      --            ok if versioning is disabled
35094      IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
35095        --            if versioning enabled, ok if working
35096        OPEN get_workplan_status(l_project_id, p_structure_version_id);
35097        FETCH get_workplan_status into l_wp_status;
35098        CLOSE get_workplan_status;
35099        IF l_wp_status <> 'STRUCTURE_WORKING' THEN
35100          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35101                               p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
35102          RAISE FND_API.G_EXC_ERROR;
35103        END IF;
35104      ELSE
35105        IF (l_versioning IS NULL) THEN
35106          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35107                               p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
35108          RAISE FND_API.G_EXC_ERROR;
35109        END IF;
35110      END IF;
35111    END IF;
35112 
35113    --get task id
35114    IF (p_pm_task_reference IS NOT NULL) THEN
35115      open get_task_ver_id(l_project_id, p_pm_task_reference);
35116      Fetch get_task_ver_id into l_task_ver_id;
35117      --Bug 3769079
35118      IF get_task_ver_id%NOTFOUND THEN
35119          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35120                               p_msg_name => 'PA_PS_INV_TASK_ID');
35121          CLOSE get_task_ver_id;
35122          RAISE FND_API.G_EXC_ERROR;
35123      END IF;
35124      CLOSE get_task_ver_id;
35125    END IF;
35126 
35127    --bug 3880403
35128    IF p_pm_task_reference IS NULL OR l_task_ver_id IS NULL THEN
35129      --need to get id using task id
35130      OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
35131      FETCH get_task_Ver_id2 into l_task_ver_id;
35132      IF get_task_ver_id2%NOTFOUND THEN
35133          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35134                               p_msg_name => 'PA_PS_INV_TASK_ID');
35135          CLOSE get_task_ver_id2;
35136          RAISE FND_API.G_EXC_ERROR;
35137      END IF;
35138      CLOSE get_task_ver_id2;
35139    END IF;
35140    --end bug 3880403
35141 --
35142    --get predecessor id
35143    IF (p_pm_pred_reference IS NOT NULL) THEN
35144      open get_task_ver_id(l_project_id, p_pm_pred_reference);
35145      Fetch get_task_ver_id into l_pred_ver_id;
35146      --Bug 3769079
35147      IF get_task_ver_id%NOTFOUND THEN
35148          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35149                               p_msg_name => 'PA_PS_INV_TASK_ID');
35150          CLOSE get_task_ver_id;
35151          RAISE FND_API.G_EXC_ERROR;
35152      END IF;
35153      CLOSE get_task_ver_id;
35154    END IF;
35155 
35156    --bug 3880403
35157    IF p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL THEN
35158      --need to get id using task id
35159      OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
35160      FETCH get_task_Ver_id2 into l_pred_ver_id;
35161      IF get_task_ver_id2%NOTFOUND THEN
35162          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35163                               p_msg_name => 'PA_PS_INV_TASK_ID');
35164          CLOSE get_task_ver_id2;
35165          RAISE FND_API.G_EXC_ERROR;
35166      END IF;
35167      CLOSE get_task_ver_id2;
35168    END IF;
35169    --end bug 3880403
35170 
35171 
35172    --call existing delete dependency API to create intra dependency
35173    --get record version number
35174    open get_rvn(l_task_ver_id, l_pred_ver_id);
35175    FETCH get_rvn into l_obj_rel_id, l_record_version_number;
35176    --Bug 3769066
35177    IF get_rvn%NOTFOUND THEN
35178          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35179                               p_msg_name => 'PA_PS_INV_DEP_ID');
35180          RAISE FND_API.G_EXC_ERROR;
35181    END IF;
35182    CLOSE get_rvn;
35183 
35184     PA_RELATIONSHIP_PVT.Delete_Dependency(
35185              p_calling_module                   => 'SELF_SERVICE'
35186             ,p_object_relationship_id           => l_obj_rel_id
35187             ,x_return_status                    => l_return_status
35188             ,x_msg_count                        => l_msg_count
35189             ,x_msg_data                         => l_msg_data
35190             );
35191 
35192   -- 4537865 : Check has to be made against l_msg_count ,not p_msg_count
35193   -- IF p_msg_count > 0 THEN
35194   IF l_msg_count > 0 THEN
35195     RAISE FND_API.G_EXC_ERROR;
35196   END IF;
35197 
35198   p_return_status := FND_API.G_RET_STS_SUCCESS;
35199 EXCEPTION
35200 
35201   WHEN FND_API.G_EXC_ERROR THEN
35202     ROLLBACK TO delete_dep_pub_amg;
35203     p_return_status := FND_API.G_RET_STS_ERROR;
35204     -- 4537865 Included same fix as 4323969.
35205     FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35206     , p_data   =>  p_msg_data);
35207   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35208     ROLLBACK TO delete_dep_pub_amg;
35209     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35210   -- 4537865 Included same fix as 4323969.
35211   FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35212   , p_data   =>  p_msg_data);
35213   When OTHERS then
35214     ROLLBACK TO delete_dep_pub_amg;
35215     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35216 
35217     IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35218 
35219       FND_MSG_PUB.add_exc_msg
35220       (p_pkg_name     => G_PKG_NAME
35221       , p_procedure_name => 'Delete_Dependency');
35222 
35223     END IF;
35224   -- 4537865 Included same fix as 4323969.
35225   FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35226   , p_data   =>  p_msg_data);
35227 
35228 END Delete_Dependency;
35229 --
35230 --
35231 -- Begin fix for Bug # 4096218.
35232 
35233 PROCEDURE check_task_mfd
35234 ( p_api_version_number          IN      NUMBER
35235  , p_init_msg_list              IN      VARCHAR2        := FND_API.G_FALSE
35236  , p_return_status              OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
35237  , p_msg_count                  OUT NOCOPY     NUMBER /*Added the nocopy check for 4537865 */
35238  , p_msg_data                   OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
35239  , p_project_id                 IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35240  , p_pm_project_reference       IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35241  , p_task_id                    IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35242  , p_pm_task_reference          IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35243  , p_task_version_id            IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35244  , p_structure_type             IN      VARCHAR2        := 'FINANCIAL'
35245  , p_perform_check_delete_task_ok IN    VARCHAR2        := 'N'
35246  , p_check_task_mfd_flag        OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
35247 )
35248 IS
35249 
35250 cursor cur_task_status(c_project_id NUMBER, c_task_id NUMBER, c_task_version_id NUMBER)
35251 is
35252 select task_unpub_ver_status_code,parent_structure_version_id
35253 from pa_proj_element_versions ppev
35254 where ppev.project_id = c_project_id
35255 and ppev.proj_element_id = c_task_id
35256 and ppev.element_version_id = c_task_version_id;
35257 
35258 cursor c_valid_task_id(c_task_id NUMBER,c_project_id NUMBER)
35259 is
35260 select 'Y'
35261 from pa_proj_elements
35262 where proj_element_id = c_task_id
35263   and project_id = c_project_id ;
35264 
35265 cursor get_task_ver_id(c_task_id NUMBER)
35266 is
35267 select element_version_id from pa_proj_element_versions
35268 where proj_element_id = c_task_id ;
35269 
35270  -- Begin fix for Bug # 4096218 : 09-AUG-2005.
35271 
35272  -- Modified cursor to return the element_number if the task exists
35273  -- in a published workplan structure version. This cursor will
35274  -- work for both split and shared projects.
35275  /*
35276 
35277  CURSOR   l_amg_task_csr
35278       (p_pa_task_id pa_tasks.task_id%type)
35279    IS
35280    SELECT   task_number
35281    FROM     pa_tasks p
35282    WHERE p.task_id = p_pa_task_id;
35283 
35284   */
35285 
35286   -- The Following cursor has been commented for Performance Bug 4878722 SQL ID 14909071
35287   -- The purpose of this cursor per usage in this API is to verify whether the task exists in any of the previously published versions
35288   -- cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35289   -- select ppe.element_number
35290   -- from pa_proj_elements ppe, pa_proj_elem_ver_structure ppevs
35291   -- where ppe.proj_element_id = p_pa_task_id
35292   -- and ppe.parent_structure_id = ppevs.proj_element_id
35293   -- and ppevs.status_code = 'STRUCTURE_PUBLISHED';
35294 
35295   -- The Following cursor has been re-written for Performance Bug 4878722 SQL ID 14909071
35296 
35297 /*
35298   Bug Fix 5263426
35299 
35300   Issue:
35301 
35302    After succesful deletion of a task and the publishing of the structure, a new task is added to the current working version.
35303    And that the task was deleted and the MSP was returning a message saying 'Mark this task for deletion?'. Ideally this
35304    should be used for tasks which are present in the published versions as well. Only those tasks will be marked for deletion
35305    and during publishing those marked tasks will be deleted. All the other tasks which dont have any transactions and are not
35306    present in the published versions should be deleted right away and the MSP should not show any message.
35307 
35308   Analysis:
35309 
35310    This is happening due to value 'M' being returned from the PA_PROJECT_PUB.check_task_mfd APIs OUT param  p_check_task_mfd_flag.
35311    The reason is due to the bug in the cursor l_amg_task_csr.
35312    This SQL is starting with an element id i.e the task id and getting the parent sturcture id and looking for that parent
35313    structure id's published status in other tables.
35314 
35315    Ideally this is ignoring the versions of a strucutre. Even if one structure version is published the above SQL will always
35316    find a record in the structures table with status published irrespective of the fact that the task was added to a working
35317    version and same is not in a published version.
35318 
35319  Solution:
35320    The correct way of doing this is to get the task status directly from the element versions table itself as shown below
35321    and modify the logic to use the above column value.
35322 
35323 
35324   cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35325   select 1 from dual
35326   where exists (select  ppe.element_number
35327   from pa_proj_elements ppe, pa_proj_elem_ver_structure ppevs
35328   where ppe.proj_element_id = p_pa_task_id
35329   and ppe.object_type = 'PA_TASKS'
35330   and ppe.parent_structure_id = ppevs.proj_element_id
35331   and ppe.project_id = ppevs.project_id
35332   and ppevs.status_code = 'STRUCTURE_PUBLISHED');
35333 */
35334 
35335   cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35336   select 1 from dual
35337   where exists(
35338   select pev.task_unpub_ver_status_code
35339   from  pa_proj_element_versions pev
35340   where pev.proj_element_id = p_pa_task_id
35341   and   pev.object_type = 'PA_TASKS'
35342   and pev.task_unpub_ver_status_code in ('PUBLISHED','TO_BE_DELETED'));
35343 -- End fix for Bug  5263429
35344 -- End fix for Bug # 4096218 : 09-AUG-2005.
35345 
35346 l_dummy varchar2(1);
35347 l_derive varchar2(1);
35348 
35349 l_project_id NUMBER := NULL;
35350 
35351 l_task_version_id NUMBER := NULL;
35352 
35353 l_task_id NUMBER := NULL;
35354 
35355 l_structure_version_id NUMBER := NULL;
35356 
35357 l_task_status VARCHAR2(30) := NULL;
35358 
35359 l_check_task_mfd_flag VARCHAR2(1) := NULL;
35360 
35361 l_api_name CONSTANT VARCHAR2(30) := 'check_task_mfd';
35362 
35363 l_return_status VARCHAR2(1) := NULL;
35364 
35365 l_msg_count NUMBER := NULL; -- 4096218 : Issues found during Unit Testing
35366 
35367 l_msg_data VARCHAR2(2000) := NULL;  -- 4096218 : This was declared as size 30 ,causing unexpected error.Corrected it
35368 
35369 
35370 l_delete_task_ok_flag VARCHAR2(1);
35371 
35372 l_wp_str_exists VARCHAR2(1);
35373 
35374 l_versioning_enabled VARCHAR2(1);
35375 
35376 l_pub_ver_exists VARCHAR2(1);
35377 
35378 l_amg_task_number       NUMBER; -- Datatype changed for Bug 4878722
35379 BEGIN
35380 
35381     IF NOT FND_API.Compatible_API_Call (g_api_version_number
35382                                         , p_api_version_number
35383                                         , l_api_name
35384                                         , G_PKG_NAME) THEN
35385 
35386         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35387 
35388         END IF;
35389 
35390     IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
35391 
35392         FND_MSG_PUB.initialize;
35393 
35394     END IF;
35395 
35396     p_return_status := FND_API.G_RET_STS_SUCCESS;
35397 
35398     -- Initialize output flag.
35399 
35400     l_check_task_mfd_flag := 'N';
35401         l_delete_task_ok_flag := 'N';
35402         l_versioning_enabled := 'N' ;
35403         l_pub_ver_exists     :='N' ;
35404 
35405     -- Convert project reference to id.
35406 
35407         PA_PROJECT_PVT.Convert_pm_projref_to_id
35408         (p_pm_project_reference         =>      p_pm_project_reference
35409          , p_pa_project_id              =>      p_project_id
35410          , p_out_project_id             =>      l_project_id
35411          , p_return_status              =>      l_return_status);
35412 
35413         IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35414 
35415                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35416 
35417         ELSIF  (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
35418 
35419                 RAISE  FND_API.G_EXC_ERROR;
35420         END IF;
35421 
35422     -- If task id is passed ,verify whether it is a valid value
35423         IF p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35424         THEN
35425 
35426             open c_valid_task_id(p_task_id,l_project_id) ;
35427         fetch c_valid_task_id into l_dummy;
35428         close c_valid_task_id ;
35429 
35430         IF nvl(l_dummy,'N') = 'Y' THEN
35431                    l_task_id := p_task_id ;
35432             -- Task ID exists and its a valid one.
35433         ELSE
35434         -- Try to derive task_id from its reference
35435            l_derive := 'Y';
35436         END IF;
35437 
35438         END IF;
35439 
35440         IF (p_task_id is NULL AND p_pm_task_reference IS NOT NULL
35441            AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
35442            OR nvl(l_derive,'N') = 'Y'
35443         THEN
35444     -- Convert task reference to id.
35445 
35446     PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
35447     (p_pa_project_id    =>  l_project_id
35448      , p_pa_task_id     =>  p_task_id
35449      , p_pm_task_reference  =>  p_pm_task_reference
35450      , p_out_task_id        =>  l_task_id
35451      , p_return_status  =>  l_return_status);
35452 
35453 
35454     IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35455 
35456         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35457 
35458     ELSIF  (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
35459 
35460         RAISE  FND_API.G_EXC_ERROR;
35461     END IF;
35462 
35463     END IF;
35464     --get structure_version_id and task_version_id
35465 
35466         PA_PROJ_TASK_STRUC_PUB.get_version_ids
35467         (p_task_id                 =>     l_task_id
35468          , p_task_version_id       =>     p_task_version_id
35469          , p_project_id            =>     l_project_id
35470          , x_structure_version_id  =>     l_structure_version_id
35471          , x_task_version_id       =>     l_task_version_id);
35472 --------------------------------------------------------------------------------------------------------------------------------
35473        -- If p_perform_check_delete_task_ok is "Y" , then we need to call the API
35474        -- pa_project_pub.Check_Delete_Task_OK
35475 
35476       IF p_perform_check_delete_task_ok ='Y' THEN
35477         pa_project_pub.Check_Delete_Task_OK
35478         (
35479           p_api_version_number => p_api_version_number
35480           -- Start OUT params
35481         , p_return_status   => l_return_status
35482         , p_msg_count       => l_msg_count
35483         , p_msg_data        => l_msg_data
35484           -- End OUT params
35485         , p_project_id      => l_project_id
35486         , p_pm_project_reference  => p_pm_project_reference
35487         , p_task_id         => l_task_id
35488         , p_pm_task_reference     => p_pm_task_reference
35489         , p_structure_type        => p_structure_type
35490         , p_task_version_id       => l_task_version_id
35491         , p_delete_task_ok_flag   => l_delete_task_ok_flag -- OUT param
35492         );
35493         IF l_return_status  = FND_API.G_RET_STS_UNEXP_ERROR THEN
35494 
35495                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35496 
35497         /* Commented because of Issue found during Unit testing
35498            In Check_Delete_Task_OK ,already message has been retrieved and
35499            Hence ,If we raise again here ,In this API ,it wont be able to find any msg in stack now
35500            thereby returning empty message
35501 
35502            The commented check corresponds to return status 'E' check .It will be 'E' if its nt
35503            allowed to delete the task. So, Just set the OUT params appropriately
35504            and return
35505 
35506         ELSIF  (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
35507 
35508                 RAISE  FND_API.G_EXC_ERROR;
35509         */
35510         END IF;
35511 
35512         IF l_delete_task_ok_flag = 'N' THEN
35513 
35514              -- Its not Ok to delete this task,so skip further steps and just return with 'N'
35515              l_check_task_mfd_flag := 'N';
35516 
35517         ELSIF l_delete_task_ok_flag = 'Y' THEN
35518 
35519              -- Its Ok to delete this task , Check whether it can be deleted immediately (l_check_task_mfd_flag = 'Y')
35520              -- (Or) it has to be marked for deletion. (l_check_task_mfd_flag = 'M')
35521 
35522              open cur_task_status(l_project_id, l_task_id, l_task_version_id);
35523              fetch cur_task_status into l_task_status,l_structure_version_id;
35524              close cur_task_status;
35525 
35526              open l_amg_task_csr(l_task_id );
35527              fetch l_amg_task_csr INTO l_amg_task_number;
35528              close l_amg_task_csr;
35529 
35530              l_wp_str_exists := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_project_id );
35531              l_versioning_enabled := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id);
35532              l_pub_ver_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
35533 
35534              -- If this passed task belongs to a Split - Fin. Only structure
35535              IF nvl(l_wp_str_exists,'N') = 'N'
35536                 AND (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id, 'FINANCIAL') = 'Y')
35537              THEN
35538                  -- Its ok to delete this task
35539                  l_check_task_mfd_flag := 'Y' ;
35540 
35541              -- If this passed task belongs to a WP structure (be it shared or be it split)
35542              ELSIF  PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id,'WORKPLAN') = 'Y'
35543              THEN
35544                  IF l_versioning_enabled = 'Y'
35545                     AND l_pub_ver_exists = 'Y'
35546                  THEN
35547                      IF l_amg_task_number IS NULL -- It means ,task is only in current working version,not in any previous pub. versions
35548                      THEN
35549                         -- It can be deleted, there is no need to mark it for deletion.
35550                         l_check_task_mfd_flag := 'Y';
35551                      ELSE -- Task exists in prior published version and it has entry in pa_tasks.
35552                         -- So, Mark it for deletion ,so that it can be deleted in publishing flow
35553 
35554                         /* This API call marks the task for deletion in OP
35555                         PA_TASK_PVT1.update_task_ver_delete_status(
35556                          p_task_version_id => p_task_version_id
35557                          ,x_return_status => l_return_status
35558                          ,x_msg_count => x_msg_count
35559                          ,x_msg_data => x_msg_data);
35560                         */
35561 
35562                         l_check_task_mfd_flag := 'M' ;
35563 
35564                      END IF;
35565                  ELSIF l_versioning_enabled = 'Y' and l_pub_ver_exists = 'N'
35566                  THEN
35567                         -- Versioning Enabled , But there is no published version so far .So,This is the Working version
35568                         -- So,its ok to delete this task.
35569                         l_check_task_mfd_flag := 'Y';
35570                  ELSIF l_versioning_enabled = 'N'
35571                  THEN
35572                         -- Versioning Disabled Case , Its ok to delete this task.
35573                         l_check_task_mfd_flag := 'Y';
35574                  END IF;
35575              END IF;
35576 
35577         END IF; -- End If for l_delete_task_ok_flag = 'Y'
35578 
35579       ELSE   -- So, Now the case if p_perform_check_delete_task_ok ='N'
35580 
35581         -- If this flag p_perform_check_delete_task_ok is passed as 'N' ,it means just we need to check
35582         -- whether task is marked for deletion or not in Oracle Projects.
35583         -- Return 'M' if marked for delete
35584 
35585 
35586     -- Check for task status.
35587 
35588     open cur_task_status(l_project_id, l_task_id, l_task_version_id);
35589     fetch cur_task_status into l_task_status,l_structure_version_id;
35590     close cur_task_status;
35591 
35592     if l_task_status = 'TO_BE_DELETED' then
35593 
35594        l_check_task_mfd_flag := 'M';
35595         else
35596            l_check_task_mfd_flag := 'N';
35597     end if;
35598 
35599       END IF;
35600 --------------------------------------------------------------------------------------------------------------------------------
35601     -- Set output variables.
35602 
35603     p_check_task_mfd_flag := l_check_task_mfd_flag;
35604 
35605     p_return_status := l_return_status;
35606     p_msg_count := l_msg_count;
35607     p_msg_data  := l_msg_data;
35608 
35609 EXCEPTION
35610 
35611     WHEN FND_API.G_EXC_ERROR THEN
35612 
35613             p_return_status := FND_API.G_RET_STS_ERROR;
35614 
35615         -- 4537865
35616         p_check_task_mfd_flag := NULL ;
35617 
35618             FND_MSG_PUB.Count_And_Get
35619             (   p_count     =>  p_msg_count ,
35620                 p_data      =>  p_msg_data  );
35621 
35622     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35623 
35624             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35625 
35626         -- 4537865
35627         p_check_task_mfd_flag := NULL ;
35628 
35629             FND_MSG_PUB.Count_And_Get
35630             (   p_count     =>  p_msg_count ,
35631                 p_data      =>  p_msg_data  );
35632 
35633     WHEN OTHERS THEN
35634 
35635             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35636 
35637        p_check_task_mfd_flag := NULL ; -- 4537865
35638 
35639             IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35640 
35641                 FND_MSG_PUB.add_exc_msg
35642                 (p_pkg_name     => G_PKG_NAME
35643                  , p_procedure_name => l_api_name);
35644 
35645             END IF;
35646 
35647             FND_MSG_PUB.Count_And_Get
35648             (p_count        =>  p_msg_count
35649              , p_data       =>  p_msg_data);
35650 
35651 END check_task_mfd;
35652 
35653 
35654 -- API Name         : get_deleted_tasks_from_op
35655 --
35656 -- Parameters       :
35657 --
35658 -- x_deleted_task_ver_ids  OUT PA_NUM_1000_NUM
35659 -- x_return_status             OUT VARCHAR2
35660 -- x_msg_count                 OUT  NUMBER
35661 -- x_msg_data                  OUT VARCHAR2
35662 --
35663 -- HISTORY
35664 -- Created by avaithia for Bug 4096218
35665 -- 29-Jun-2005                          Changed out param name from x_deleted_task_ver_ids to x_deleted_task_ids
35666 --                  Changed global var name from G_DELETED_TASK_VER_IDS_FROM_OP to  G_DELETED_TASK_IDS_FROM_OP
35667 --
35668 -- Notes About the API :-
35669 -- This API is supposed to be calling only in AMG/MSP context.
35670 --
35671 -- This is not a standalone API .This API will produce useful output only if its called after WP publishing flow
35672 --
35673 -- We set the value for out param  x_deleted_task_ver_ids in the global VARRAY PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP
35674 -- in the Publish_Structure API (PAXSTCVB.pls) ONLY if p_calling_module in that API is 'AMG'
35675 
35676 PROCEDURE get_deleted_tasks_from_op
35677 (
35678  x_deleted_task_ids      OUT NOCOPY PA_NUM_1000_NUM,/*4537865 : Added nocopy hint manually */
35679  x_return_status             OUT NOCOPY VARCHAR2, /*4537865 : Added nocopy hint manually */
35680  x_msg_count                 OUT NOCOPY  NUMBER, /*4537865 : Added nocopy hint manually */
35681  x_msg_data                  OUT NOCOPY VARCHAR2 /*4537865 : Added nocopy hint manually */
35682 )
35683 IS
35684 BEGIN
35685     x_msg_count := 0;
35686     x_return_status := FND_API.G_RET_STS_SUCCESS;
35687     x_msg_data := NULL;
35688     x_deleted_task_ids := PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP;
35689 EXCEPTION
35690         WHEN OTHERS THEN
35691                         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35692                         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35693 
35694                                 FND_MSG_PUB.add_exc_msg
35695                                 (p_pkg_name             => G_PKG_NAME
35696                                  , p_procedure_name     => 'get_deleted_tasks_from_op');
35697 
35698                         END IF;
35699 
35700                         FND_MSG_PUB.Count_And_Get
35701                         (p_count                =>      x_msg_count
35702                          , p_data               =>      x_msg_data);
35703 
35704 END get_deleted_tasks_from_op;
35705 
35706 -- End fix for Bug # 4096218.
35707 
35708 
35709 -- -------------
35710 -- Bug 5436264 : AMG API FOR PROCESS STRUCTURE UPDATES
35711 
35712 PROCEDURE process_structure_updates
35713 (p_api_version_number           IN      NUMBER          := 1.0
35714 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_FALSE
35715 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
35716 , p_return_status               OUT     NOCOPY VARCHAR2
35717 , p_msg_count                   OUT     NOCOPY NUMBER
35718 , p_msg_data                    OUT     NOCOPY VARCHAR2
35719 , p_structure_version_id        IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35720 , p_pa_project_id               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35721 , p_pm_project_reference        IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35722 , p_process_mode                IN      VARCHAR2        := 'ONLINE'
35723 , p_calling_context             IN      VARCHAR2        := 'AMG')
35724 IS
35725 
35726 l_api_name CONSTANT VARCHAR2(30)  := 'process_structure_updates';
35727 l_msg_count         NUMBER;
35728 l_msg_data          VARCHAR2(2000);
35729 l_return_status     VARCHAR2(1);
35730 l_responsibility_id NUMBER := 0;
35731 l_user_id           NUMBER := 0;
35732 l_module_name       VARCHAR2(80);
35733 l_function_allowed  VARCHAR2(1);
35734 
35735 l_project_id        pa_projects.project_id%type;
35736 
35737 l_update_wbs_flag   VARCHAR2(1);
35738 
35739 l_str_ver_id        NUMBER:= null;
35740 l_conc_request_id   NUMBER := null;
35741 l_message_name      VARCHAR2(30) := null;
35742 l_message_type      VARCHAR2(30) := null;
35743 l_process_code  pa_proj_elem_ver_structure.process_code%TYPE; --Bug# 5973460
35744 
35745 BEGIN
35746 
35747 --  Standard begin of API savepoint
35748 
35749     SAVEPOINT process_structure_updates;
35750 
35751 --  Standard call to check for call compatibility
35752 
35753     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
35754                                          p_api_version_number   ,
35755                                          l_api_name             ,
35756                                          g_pkg_name             )
35757     THEN
35758 
35759         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35760 
35761     END IF;
35762 
35763 --  Initialize the message table if requested
35764 
35765     IF FND_API.TO_BOOLEAN( p_init_msg_list )
35766     THEN
35767 
35768         FND_MSG_PUB.initialize;
35769 
35770     END IF;
35771 
35772 --  Set API return status to success
35773 
35774     p_return_status := FND_API.G_RET_STS_SUCCESS;
35775 
35776 
35777 -- Get the project ID
35778   -- Added if clause for Bug 6727014
35779    IF p_calling_context = 'CONC_WRP' then
35780 
35781          l_project_id := p_pa_project_id;
35782 
35783    ELSE
35784 
35785    PA_PROJECT_PVT.Convert_pm_projref_to_id
35786       (        p_pm_project_reference =>      p_pm_project_reference
35787                ,  p_pa_project_id     =>      p_pa_project_id
35788                ,  p_out_project_id    =>      l_project_id
35789                ,  p_return_status     =>      l_return_status
35790       );
35791 
35792    IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35793 
35794            RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35795 
35796    ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35797 
35798            RAISE  FND_API.G_EXC_ERROR;
35799    END IF;
35800 
35801    END IF;
35802 
35803    If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id, p_structure_version_id) <> 'Y' THEN
35804            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35805                                 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35806 
35807            RAISE FND_API.G_EXC_ERROR;
35808    End If;
35809 
35810    l_responsibility_id := FND_GLOBAL.Resp_id;
35811    l_user_id           := FND_GLOBAL.User_id;
35812 
35813 
35814    -- As part of enforcing project security, which would determine
35815    -- whether the user has the necessary privileges to update the project
35816    -- need to call the pa_security package
35817 
35818    pa_security.initialize (X_user_id        => l_user_id,
35819                            X_calling_module => l_module_name);
35820 
35821    -- Actions performed using the APIs would be subject to
35822    -- function security. If the responsibility does not allow
35823    -- such functions to be executed, the API should not proceed further
35824    -- since the user does not have access to such functions
35825 
35826    -- Function security procedure check whether user has the
35827    -- privilege to update the project or not
35828 
35829    PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;
35830 
35831    PA_PM_FUNCTION_SECURITY_PUB.check_function_security
35832       (p_api_version_number => p_api_version_number,
35833        p_responsibility_id  => l_responsibility_id,
35834        p_function_name      => 'PA_PM_UPDATE_PROJECT',
35835        p_msg_count          => l_msg_count,
35836        p_msg_data           => l_msg_data,
35837        p_return_status      => l_return_status,
35838        p_function_allowed   => l_function_allowed);
35839 
35840    IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
35841     THEN
35842         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35843 
35844    ELSIF l_return_status = FND_API.G_RET_STS_ERROR
35845    THEN
35846          RAISE FND_API.G_EXC_ERROR;
35847 
35848    END IF;
35849 
35850    IF l_function_allowed = 'N' THEN
35851      pa_interface_utils_pub.map_new_amg_msg
35852        ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
35853         ,p_msg_attribute    => 'CHANGE'
35854         ,p_resize_flag      => 'Y'
35855         ,p_msg_context      => 'GENERAL'
35856         ,p_attribute1       => ''
35857         ,p_attribute2       => ''
35858         ,p_attribute3       => ''
35859         ,p_attribute4       => ''
35860         ,p_attribute5       => '');
35861      p_return_status := FND_API.G_RET_STS_ERROR;
35862      RAISE FND_API.G_EXC_ERROR;
35863    END IF;
35864 
35865 --Bug# 5973460
35866 l_process_code := PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id
35867                                                                      ,p_structure_version_id => p_structure_version_id );
35868 
35869  IF  l_process_code = 'PUE'
35870  THEN
35871      PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
35872                            ,p_msg_name       => 'PA_PS_PUBLISH_ERROR');
35873 
35874      RAISE FND_API.G_EXC_ERROR;
35875  END IF;
35876 --Bug# 5973460
35877 
35878    -- check the process_update_wbs_flag
35879 
35880    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
35881                                                                        ,p_structure_version_id => p_structure_version_id ) ;
35882 
35883    IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
35884 
35885      PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
35886         p_project_id              => l_project_id
35887         , p_structure_version_id  => p_structure_version_id
35888         , p_context               => 'UPDATE_AMG'
35889         , x_message_name          => l_message_name
35890         , x_message_type          => l_message_type
35891         , x_structure_version_id  => l_str_ver_id
35892         , x_conc_request_id       => l_conc_request_id);
35893 
35894 
35895      IF nvl(l_message_type,'NOT_PROCESS') <> 'PROCESS' THEN
35896 
35897         IF p_process_mode = 'ONLINE' THEN
35898 
35899           PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
35900                                                     ,p_project_id           => l_project_id
35901                                                     ,p_structure_version_id => p_structure_version_id
35902                                                     ,x_return_status        => l_return_status
35903                                                     ,x_msg_count            => l_msg_count
35904                                                     ,x_msg_data             => l_msg_data ) ;
35905 
35906           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
35907                THEN
35908                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35909           ELSIF l_return_status = FND_API.G_RET_STS_ERROR
35910                THEN
35911                  RAISE FND_API.G_EXC_ERROR;
35912           END IF;
35913 
35914         ELSIF p_process_mode = 'CONCURRENT' THEN
35915 
35916           PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_UPDATE'
35917                                                             ,p_project_id            => l_project_id
35918                                                             ,p_structure_version_id  => p_structure_version_id
35919                                                             ,x_return_status         => l_return_status
35920                                                             ,x_msg_count             => l_msg_count
35921                                                             ,x_msg_data              => l_msg_data ) ;
35922 
35923           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
35924                THEN
35925                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35926           ELSIF l_return_status = FND_API.G_RET_STS_ERROR
35927                THEN
35928                   RAISE FND_API.G_EXC_ERROR;
35929           END IF;
35930 
35931         END IF ; -- p_process_mode
35932 
35933      END IF ; -- l_message_type
35934 
35935    END IF; -- l_update_wbs_flag
35936 
35937    IF FND_API.to_boolean( p_commit )
35938    THEN
35939      COMMIT;
35940    END IF;
35941 
35942 EXCEPTION
35943         WHEN FND_API.G_EXC_ERROR THEN
35944         p_return_status := FND_API.G_RET_STS_ERROR;
35945 
35946                 ROLLBACK TO process_structure_updates;
35947 
35948                 p_msg_count := l_msg_count;
35949                 p_msg_data := l_msg_data;
35950 
35951                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35952                                           , p_data   =>  p_msg_data);
35953 
35954 
35955         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35956         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35957 
35958                 ROLLBACK TO process_structure_updates;
35959 
35960                 p_msg_count := l_msg_count;
35961                 p_msg_data := l_msg_data;
35962 
35963                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35964                                           , p_data   =>  p_msg_data);
35965 
35966         WHEN OTHERS THEN
35967         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35968 
35969         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35970           FND_MSG_PUB.add_exc_msg
35971               (p_pkg_name            => G_PKG_NAME
35972               ,p_procedure_name      => l_api_name
35973               ,p_error_text          => SUBSTRB(SQLERRM,1,120));
35974         END IF;
35975 
35976                 ROLLBACK TO process_structure_updates;
35977 
35978                 p_msg_count := fnd_msg_pub.count_msg;
35979                 p_msg_data  := SUBSTRB(SQLERRM,1,120);
35980 
35981                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35982                                           , p_data   =>  p_msg_data);
35983 
35984 END process_structure_updates;
35985 -- -------------
35986 
35987 
35988 -- Bug 6727014. Creating a wrapper on process_structure_updates to be used in new concurrent request
35989 
35990 PROCEDURE process_structure_updates_wrp
35991      (errbuf                        OUT NOCOPY VARCHAR2
35992     , retcode                       OUT NOCOPY VARCHAR2
35993     , p_operating_unit              IN         VARCHAR2
35994     , p_project_num_from            IN         VARCHAR2
35995     , p_project_num_to              IN         VARCHAR2
35996     )
35997 is
35998 
35999      CURSOR cur_get_structures IS
36000      select ppes.pev_structure_id
36001            ,ppes.project_id          project_id
36002            ,ppes.element_version_id  structure_version_id
36003            ,ppa.segment1             project_number
36004            ,ppes.name                structure_name
36005        from pa_proj_elem_ver_structure ppes,
36006             pa_projects_all  ppa
36007       where ppa.project_id = ppes.project_id
36008         and ppes.process_update_wbs_flag = 'Y'
36009         and NVL(ppes.process_code,'WUE') = 'WUE'
36010         and ppa.segment1 between nvl(p_project_num_from,ppa.segment1)
36011                              and nvl(p_project_num_to,ppa.segment1)
36012         and nvl(ppa.org_id,-99) = nvl(p_operating_unit, nvl(org_id,-99))
36013       Order by 4,5;
36014 
36015    l_msg_count         NUMBER;
36016    l_msg_data          VARCHAR2(2000);
36017    l_return_status     VARCHAR2(1);
36018 
36019    l_data              VARCHAR2(2000);
36020    l_msg_index_out     NUMBER;
36021    l_retcode           NUMBER := 0;
36022 
36023    l_status            VARCHAR2(2000);
36024    l_exists            VARCHAR2(1);
36025 
36026 begin
36027   --Initializing global variable
36028 
36029   -- Print the input parameter values
36030   fnd_file.put_line(1, '');
36031   fnd_file.put_line(1, '***********************************************');
36032   fnd_file.put_line(1, '* Process Structure Update Concurrent Program *');
36033   fnd_file.put_line(1, '***********************************************');
36034   fnd_file.put_line(1, '');
36035   fnd_file.put_line(1,'Parameters List ');
36036   fnd_file.put_line(1,'------------------------------------------------');
36037   fnd_file.put_line(1,'Operating Unit           : '||p_operating_unit);
36038   fnd_file.put_line(1,'From Project Number      : '||p_project_num_from);
36039   fnd_file.put_line(1,'To Project Number        : '||p_project_num_to);
36040   fnd_file.put_line(1, '');
36041   fnd_file.put_line(1, '');
36042   fnd_file.put_line(1, 'List of Projects and Structures processed by the concurrent request and their Status');
36043   fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36044   fnd_file.put_line(1, 'Project Number                Structure Name                                                   Status');
36045   fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36046 
36047   For i in cur_get_structures loop
36048     l_return_status := 'S';
36049     l_msg_count     := 0;
36050     l_msg_data      := Null;
36051     l_status        := 'Success';
36052     l_exists        := NULL;
36053 
36054     Begin
36055     -- the below query will use PA_PROJ_ELEM_VER_STRUCTURE_U1 index
36056        select 'X'
36057          into l_exists
36058          from pa_proj_elem_ver_structure ppes
36059         where ppes.process_update_wbs_flag = 'Y'
36060           and NVL(ppes.process_code,'WUE') = 'WUE'
36061           and ppes.pev_structure_id = i.pev_structure_id;
36062 
36063        if nvl(l_exists,'Y') = 'X' Then
36064           PA_PROJECT_PUB.process_structure_updates
36065                  ( p_api_version_number    => 1.0
36066                  , p_init_msg_list         => FND_API.G_TRUE
36067                  , p_commit                => FND_API.G_FALSE
36068                  , p_return_status         => l_return_status
36069                  , p_msg_count             => l_msg_count
36070                  , p_msg_data              => l_msg_data
36071                  , p_structure_version_id  => i.structure_version_id
36072                  , p_pa_project_id         => i.project_id
36073                  , p_pm_project_reference  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36074                  , p_process_mode          => 'ONLINE'
36075                                  , p_calling_context       => 'CONC_WRP');
36076 
36077              IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36078                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
36079              ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
36080                  RAISE  FND_API.G_EXC_ERROR;
36081                          ELSIF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
36082                  COMMIT;
36083              END IF;
36084 
36085          fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status);
36086       Else
36087         fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||'A process is already running for this structure');
36088       End If;
36089 
36090  EXCEPTION
36091         WHEN FND_API.G_EXC_ERROR THEN
36092            l_retcode     := '1';
36093 
36094            IF l_msg_count >= 1 THEN
36095                 PA_INTERFACE_UTILS_PUB.get_messages
36096                     (p_encoded        => FND_API.G_FALSE
36097                     ,p_msg_index      => 1
36098                     ,p_msg_count      => l_msg_count
36099                     ,p_msg_data       => l_msg_data
36100                     ,p_data           => l_data
36101                     ,p_msg_index_out  => l_msg_index_out);
36102                 errbuf := l_data;
36103         fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36104            END IF;
36105         ROLLBACK;
36106 
36107         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
36108            l_retcode     := '1';
36109 
36110            IF l_msg_count >= 1 THEN
36111                 PA_INTERFACE_UTILS_PUB.get_messages
36112                     (p_encoded        => FND_API.G_FALSE
36113                     ,p_msg_index      => 1
36114                     ,p_msg_count      => l_msg_count
36115                     ,p_msg_data       => l_msg_data
36116                     ,p_data           => l_data
36117                     ,p_msg_index_out  => l_msg_index_out);
36118                 errbuf := l_data;
36119         fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36120            END IF;
36121         ROLLBACK;
36122 
36123      WHEN OTHERS THEN
36124      l_retcode         := '1';
36125      errbuf          := SQLERRM;
36126         fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36127       ROLLBACK;
36128 
36129    end;
36130   end loop;
36131   fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36132   fnd_file.put_line(1, '');
36133   fnd_file.put_line(1, '');
36134 
36135     if l_retcode = 1 then
36136       retcode := '1';
36137     else
36138       retcode := '0';
36139     end if;
36140 
36141 
36142 exception
36143   when others then
36144       retcode := '2';
36145       errbuf  := sqlerrm;
36146     return;
36147 End process_structure_updates_wrp;
36148 
36149 
36150 -- Bug # 5072032.
36151 
36152 PROCEDURE SETUP_PROJECT_AS_PROGRAM
36153 (p_api_version                  IN      NUMBER          := 1.0
36154 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_TRUE
36155 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
36156 , p_debug_mode                  IN      VARCHAR2        := 'N'
36157 , p_max_msg_count               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36158 , p_project_id                  IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36159 , p_pm_project_reference        IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36160 , p_sys_program_flag            IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36161 , p_allow_multi_program_rollup  IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36162 , x_return_status               OUT     NOCOPY VARCHAR2
36163 , x_msg_count                   OUT     NOCOPY NUMBER
36164 , x_msg_data                    OUT     NOCOPY VARCHAR2)
36165 is
36166 
36167 l_api_name		CONSTANT  VARCHAR2(30)	:= 'SETUP_PRJ_AS_PGM';
36168 
36169 l_pm_product_code 	VARCHAR2(2) 		:= NULL;
36170 l_function_allowed 	VARCHAR2(1) 		:= NULL;
36171 
36172 l_project_id 		NUMBER			:= NULL;
36173 l_wp_enabled 		VARCHAR2(1)		:= NULL;
36174 l_fin_enabled   	VARCHAR2(1)		:= NULL;
36175 l_delv_enabled  	VARCHAR2(1)		:= NULL;
36176 l_share_code            VARCHAR2(30)            := null;
36177 
36178 l_sys_program_flag            VARCHAR2(1)       := NULL;
36179 l_allow_multi_program_rollup  VARCHAR2(1)       := NULL;
36180 
36181 cursor l_cur_sys_program_flag(c_project_id NUMBER) is
36182 select ppa.sys_program_flag
36183 from pa_projects_all ppa
36184 where ppa.project_id = c_project_id;
36185 
36186 cursor l_cur_allow_multi_prog_rollup(c_project_id NUMBER) is
36187 select ppa.allow_multi_program_rollup
36188 from pa_projects_all ppa
36189 where ppa.project_id = c_project_id;
36190 
36191 l_msg_index_out     	NUMBER			:= NULL;
36192 l_return_status		VARCHAR2(1) 		:= NULL;
36193 l_msg_count 		NUMBER 			:= NULL;
36194 l_msg_data 		VARCHAR2(2000) 		:= NULL;
36195 
36196 begin
36197 
36198 -- Establish the save point.
36199 savepoint SETUP_PROJECT_AS_PROGRAM_AMG;
36200 
36201 --  Initialize the message table if requested.
36202 if FND_API.TO_BOOLEAN(p_init_msg_list) then
36203        FND_MSG_PUB.initialize;
36204 end if;
36205 
36206 --  Standard call to check for API compatibility.
36207 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
36208 	raise FND_API.G_EXC_UNEXPECTED_ERROR;
36209  end if;
36210 
36211 -- Initialize the return status
36212 x_return_status	:= FND_API.G_RET_STS_SUCCESS;
36213 
36214 -- Convert project reference to id.
36215 PA_PROJECT_PVT.Convert_pm_projref_to_id
36216 (p_pm_project_reference       =>      p_pm_project_reference
36217 , p_pa_project_id             =>      p_project_id
36218 , p_out_project_id            =>      l_project_id
36219 , p_return_status             =>      l_return_status);
36220 
36221 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36222 	raise FND_API.G_EXC_UNEXPECTED_ERROR;
36223 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36224 	raise FND_API.G_EXC_ERROR;
36225 end if;
36226 
36227 -- Get the current attributes of the project.
36228 l_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_workplan_enabled(l_project_id);
36229 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_financial_enabled(l_project_id);
36230 l_delv_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_deliverable_enabled(l_project_id);
36231 l_share_code := PA_PROJECT_STRUCTURE_UTILS.Get_Structure_sharing_code(l_project_id);
36232 
36233 -- Check if valid values are passed into the parameters: p_sys_program_flag, p_allow_multi_program_rollup, else use the current values.
36234 if ((p_sys_program_flag = 'Y') or (p_sys_program_flag = 'N')) then
36235 	l_sys_program_flag := p_sys_program_flag;
36236 else
36237 	open l_cur_sys_program_flag(l_project_id);
36238 	fetch l_cur_sys_program_flag into l_sys_program_flag;
36239 	close l_cur_sys_program_flag;
36240 end if;
36241 
36242 if ((p_allow_multi_program_rollup = 'Y') or (p_allow_multi_program_rollup = 'N')) then
36243 	l_allow_multi_program_rollup := p_allow_multi_program_rollup;
36244 else
36245 	open l_cur_allow_multi_prog_rollup(l_project_id);
36246 	fetch l_cur_allow_multi_prog_rollup into l_allow_multi_program_rollup;
36247 	close l_cur_allow_multi_prog_rollup;
36248 end if;
36249 
36250 -- Actions performed using the APIs are subject to function security.
36251 -- If the responsibility does not allow a function to be executed the API
36252 -- will error out as the user does not have access.
36253 
36254 	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36255 	(p_api_version_number   => p_api_version
36256 	, p_responsibility_id   => FND_GLOBAL.RESP_ID
36257 	, p_function_name       => 'PA_PM_UPDATE_PROJECT'
36258 	, p_msg_count           => l_msg_count
36259 	, p_msg_data            => l_msg_data
36260 	, p_return_status       => l_return_status
36261 	, p_function_allowed    => l_function_allowed);
36262 
36263 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36264         	raise FND_API.G_EXC_UNEXPECTED_ERROR;
36265 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36266         	raise FND_API.G_EXC_ERROR;
36267 	end if;
36268 
36269 	if l_function_allowed = 'N' then
36270         	pa_interface_utils_pub.map_new_amg_msg
36271         	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
36272         	, p_msg_attribute       => 'CHANGE'
36273         	, p_resize_flag         => 'Y'
36274         	, p_msg_context         => 'GENERAL'
36275         	, p_attribute1          => ''
36276         	, p_attribute2          => ''
36277         	, p_attribute3          => ''
36278         	, p_attribute4          => ''
36279         	, p_attribute5          => '');
36280         	raise FND_API.G_EXC_ERROR;
36281 	end if;
36282 
36283 -- Call the API to setup the project as a program.
36284 PA_PROJECT_STRUCTURE_PUB1.UPDATE_STRUCTURES_SETUP_ATTR
36285 (p_api_version      		=> p_api_version
36286 , p_init_msg_list    		=> p_init_msg_list
36287 , p_commit           		=> p_commit
36288 , p_calling_module   		=> 'AMG'
36289 , p_debug_mode       		=> p_debug_mode
36290 , p_max_msg_count    		=> p_max_msg_count
36291 , p_project_id       		=> l_project_id
36292 , p_workplan_enabled_flag 	=> l_wp_enabled
36293 , p_financial_enabled_flag 	=> l_fin_enabled
36294 , p_deliverables_enabled_flag 	=> l_delv_enabled
36295 , p_sharing_option_code         => l_share_code
36296 , p_sys_program_flag 		=> l_sys_program_flag
36297 , p_allow_multi_prog_rollup 	=> l_allow_multi_program_rollup
36298 , x_return_status 		=> l_return_status
36299 , x_msg_count 			=> l_msg_count
36300 , x_msg_data  			=> l_msg_data);
36301 
36302 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36303         raise FND_API.G_EXC_UNEXPECTED_ERROR;
36304 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36305         raise FND_API.G_EXC_ERROR;
36306 end if;
36307 
36308 -- Commit if p_commit = FND_API.G_TRUE.
36309 if (p_commit = FND_API.G_TRUE) then
36310 	commit;
36311 end if;
36312 
36313 exception
36314 
36315    when FND_API.G_EXC_ERROR then
36316       rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36317       x_return_status := FND_API.G_RET_STS_ERROR;
36318       x_msg_count := FND_MSG_PUB.count_msg;
36319 
36320       if x_msg_count = 1 then
36321            PA_INTERFACE_UTILS_PUB.get_messages
36322                (p_encoded        => FND_API.G_FALSE
36323                 , p_msg_index      => 1
36324                 , p_msg_count      => x_msg_count
36325                 , p_msg_data       => x_msg_data
36326                 , p_data           => x_msg_data
36327                 , p_msg_index_out  => l_msg_index_out);
36328      end if;
36329 
36330    when FND_API.G_EXC_UNEXPECTED_ERROR then
36331       rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36332       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36333       x_msg_count := FND_MSG_PUB.count_msg;
36334 
36335       if x_msg_count = 1 then
36336            PA_INTERFACE_UTILS_PUB.get_messages
36337                (p_encoded        => FND_API.G_FALSE
36338                 , p_msg_index      => 1
36339                 , p_msg_count      => x_msg_count
36340                 , p_msg_data       => x_msg_data
36341                 , p_data           => x_msg_data
36342                 , p_msg_index_out  => l_msg_index_out);
36343      end if;
36344 
36345    when OTHERS then
36346       rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36347       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36348       x_msg_count := 1;
36349       x_msg_data := SQLERRM;
36350       if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
36351       		FND_MSG_PUB.add_exc_msg
36352                 ( p_pkg_name            => G_PKG_NAME
36353                 , p_procedure_name      => l_api_name);
36354       end if;
36355 
36356 end SETUP_PROJECT_AS_PROGRAM;
36357 
36358 PROCEDURE CREATE_PROGRAM_LINKS
36359 (p_api_version                  IN      NUMBER          := 1.0
36360 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_TRUE
36361 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
36362 , p_debug_mode                  IN      VARCHAR2        := 'N'
36363 , p_max_msg_count               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36364 , p_program_links_tbl           IN      PA_PROJECT_PUB.PROGRAM_LINKS_TBL_TYPE
36365 , x_return_status               OUT     NOCOPY VARCHAR2
36366 , x_msg_count                   OUT     NOCOPY NUMBER
36367 , x_msg_data                    OUT     NOCOPY VARCHAR2)
36368 is
36369 
36370 l_api_name              CONSTANT  VARCHAR2(30)  := 'CREATE_PROGRAM_LINKS';
36371 
36372 l_pm_product_code       VARCHAR2(2)             := NULL;
36373 l_function_allowed      VARCHAR2(1)             := NULL;
36374 
36375 l_count            	NUMBER          	:= NULL;
36376 l_parent_project_id	NUMBER			:= NULL;
36377 l_sub_project_id	NUMBER			:= NULL;
36378 l_task_id		NUMBER			:= NULL;
36379 l_task_version_id	NUMBER			:= NULL;
36380 
36381 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
36382 select ppev.element_version_id
36383 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
36384 , pa_proj_structure_types ppst, pa_structure_types pst
36385 where ppevs.proj_element_id = ppst.proj_element_id
36386 and ppst.structure_type_id = pst.structure_type_id
36387 and ppev.project_id = ppevs.project_id
36388 and ppev.parent_structure_version_id = ppevs.element_version_id
36389 and ppevs.current_working_flag = 'Y'
36390 and ppev.proj_element_id = c_task_id
36391 and pst.structure_type = c_structure_type;
36392 
36393 cursor l_cur_project_id1(c_task_id NUMBER) is
36394 select ppe.project_id
36395 from pa_proj_elements ppe
36396 where ppe.proj_element_id = c_task_id;
36397 
36398 cursor l_cur_project_id2(c_task_version_id NUMBER) is
36399 select ppev.project_id, ppev.proj_element_id
36400 from pa_proj_element_versions ppev
36401 where ppev.element_version_id = c_task_version_id;
36402 
36403 l_unexp_error_flag      VARCHAR2(1)             := 'N';
36404 l_exp_error_flag        VARCHAR2(1)             := 'N';
36405 
36406 l_msg_index_out     	NUMBER                  := NULL;
36407 l_return_status         VARCHAR2(1)             := NULL;
36408 l_msg_count             NUMBER                  := NULL;
36409 l_msg_data              VARCHAR2(2000)          := NULL;
36410 
36411 cursor l_cur_prog_name (c_task_version_id NUMBER) is
36412 select ppa.name
36413 from pa_projects_all ppa, pa_proj_element_versions ppev
36414 where ppa.project_id = ppev.project_id
36415 and ppev.element_version_id = c_task_version_id;
36416 
36417 cursor l_cur_prog_name2 (c_project_id NUMBER) is
36418 select ppa.name
36419 from pa_projects_all ppa
36420 where ppa.project_id = c_project_id;
36421 
36422 cursor l_cur_proj_name (c_project_id NUMBER) is
36423 select ppa.name
36424 from pa_projects_all ppa
36425 where ppa.project_id = c_project_id;
36426 
36427 cursor l_cur_task_name (c_task_ver_id NUMBER) is
36428 select ppe.name
36429 from pa_proj_elements ppe, pa_proj_element_versions ppev
36430 where ppe.project_id = ppev.project_id
36431 and ppe.proj_element_id = ppev.proj_element_id
36432 and ppev.element_version_id = c_task_ver_id;
36433 
36434 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
36435 select ppa.project_id
36436 from pa_projects_all ppa
36437 where pm_project_reference = c_sub_project_reference
36438 and ppa.project_id = c_sub_project_id;
36439 
36440 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
36441 select ppa.project_id
36442 from pa_projects_all ppa
36443 where pm_project_reference = c_sub_project_reference;
36444 
36445 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
36446 select ppa.project_id
36447 from pa_projects_all ppa
36448 where ppa.project_id = c_sub_project_id;
36449 
36450 l_parent_sub_flag	VARCHAR2(1)		:= NULL;
36451 
36452 l_program_name          VARCHAR2(30)            := NULL;
36453 l_project_name          VARCHAR2(30)            := NULL;
36454 l_task_name             VARCHAR2(30)            := NULL;
36455 
36456 TYPE l_prog_error_rec_type IS RECORD
36457 (program_name           VARCHAR2(300)   := null
36458 ,object_relationship_id NUMBER 		:= null
36459 ,error_msg         	VARCHAR2(2000)  := null);
36460 
36461 TYPE l_prog_error_tbl_type IS TABLE OF l_prog_error_rec_type INDEX BY BINARY_INTEGER;
36462 
36463 l_prog_error_tbl l_prog_error_tbl_type;
36464 
36465 l_error_count 		NUMBER 		:= 0;
36466 l_msg_code		VARCHAR2(30) 	:= null;
36467 
36468 l			NUMBER 		:= 0;
36469 
36470 begin
36471 
36472 -- Establish the save point.
36473 savepoint CREATE_PROGRAM_LINKS_AMG;
36474 
36475 --  Initialize the message table if requested.
36476 if FND_API.TO_BOOLEAN(p_init_msg_list) then
36477        FND_MSG_PUB.initialize;
36478 end if;
36479 
36480 --  Standard call to check for API compatibility.
36481 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
36482         raise FND_API.G_EXC_UNEXPECTED_ERROR;
36483  end if;
36484 
36485 -- Initialize the return status
36486 x_return_status := FND_API.G_RET_STS_SUCCESS;
36487 
36488 -- Initialize the error flags.
36489 l_unexp_error_flag := 'N';
36490 l_exp_error_flag := 'N';
36491 
36492 -- Loop through the records in the input PL/SQL table.
36493 for l_count in p_program_links_tbl.FIRST..p_program_links_tbl.LAST loop
36494 
36495    	-- Clear the message stack.
36496      	FND_MSG_PUB.initialize;
36497 
36498 	-- Initialize the error flags.
36499 	l_unexp_error_flag := 'N';
36500 	l_exp_error_flag := 'N';
36501 	l_parent_sub_flag := 'P'; -- By default assume that any errors will be for the parent project.
36502 
36503         -- Initialize the local variables.
36504         l_parent_project_id             := NULL;
36505         l_sub_project_id                := NULL;
36506         l_task_id                       := NULL;
36507         l_task_version_id               := NULL;
36508 
36509 	-- If task version id is not passed in.
36510 	if ((p_program_links_tbl(l_count).task_version_id is null)
36511 	     or (p_program_links_tbl(l_count).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36512 
36513                 -- Convert parent project reference to id.
36514 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36515                 	PA_PROJECT_PVT.Convert_pm_projref_to_id
36516                 	(p_pm_project_reference       =>     p_program_links_tbl(l_count).pm_parent_project_reference
36517                 	, p_pa_project_id             =>     p_program_links_tbl(l_count).parent_project_id
36518                 	, p_out_project_id            =>     l_parent_project_id
36519                 	, p_return_status             =>     l_return_status);
36520 
36521                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36522                 		l_unexp_error_flag := 'Y';
36523                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36524                 		l_exp_error_flag := 'Y';
36525                 	end if;
36526 
36527 		end if;
36528 
36529                 -- Convert task reference to id.
36530 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36531                 	PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
36532                 	(p_pa_project_id        => l_parent_project_id
36533                 	, p_pm_task_reference   => p_program_links_tbl(l_count).pm_task_reference
36534 			, p_pa_task_id          => p_program_links_tbl(l_count).task_id
36535                 	, p_structure_type      => p_program_links_tbl(l_count).structure_type
36536                 	, p_out_task_id         => l_task_id
36537                 	, p_return_status       => l_return_status);
36538 
36539                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36540                 		l_unexp_error_flag := 'Y';
36541                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36542                 		l_exp_error_flag := 'Y';
36543                 	end if;
36544 
36545 		end if;
36546 
36547 		-- Find the task version id in the current working workplan structure version.
36548 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36549 			open l_cur_task_ver_id(l_task_id, p_program_links_tbl(l_count).structure_type);
36550 			fetch l_cur_task_ver_id into l_task_version_id;
36551 			close l_cur_task_ver_id;
36552 
36553 			-- Validate that the task has a version in the specified structure type.
36554 			if (l_task_version_id is null) then
36555 				PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
36556 				l_exp_error_flag := 'Y';
36557 			end if;
36558 
36559 		end if;
36560 
36561 	-- If task version id is passed in.
36562 	else
36563 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36564 			l_task_version_id := p_program_links_tbl(l_count).task_version_id;
36565 		end if;
36566 
36567 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36568                 	open l_cur_project_id2(l_task_version_id);
36569                 	fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
36570 			if l_cur_project_id2%NOTFOUND then
36571 				PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
36572                                 l_exp_error_flag := 'Y';
36573 			end if;
36574                 	close l_cur_project_id2;
36575 		end if;
36576 
36577 		-- Validate the task id and project id of the task version id.
36578 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36579                 	PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
36580                 	(p_pa_project_id        => l_parent_project_id
36581                 	, p_pa_task_id          => l_task_id
36582                 	, p_structure_type      => p_program_links_tbl(l_count).structure_type
36583                 	, p_out_task_id         => l_task_id
36584                 	, p_return_status       => l_return_status);
36585 
36586                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36587                         	l_unexp_error_flag := 'Y';
36588                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36589                         	l_exp_error_flag := 'Y';
36590                 	end if;
36591 		end if;
36592 
36593 	end if;
36594 
36595         -- Validate sub-project across organizations and convert sub-project reference to id.
36596 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36597 
36598 		if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
36599 		      and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
36600 		    and ((p_program_links_tbl(l_count).sub_project_id is not null)
36601 		          and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
36602 
36603 			open l_cur_sub_proj1(p_program_links_tbl(l_count).pm_sub_project_reference, p_program_links_tbl(l_count).sub_project_id);
36604 			fetch l_cur_sub_proj1 into l_sub_project_id;
36605 			close l_cur_sub_proj1;
36606 
36607 		elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
36608                         and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
36609 
36610                         open l_cur_sub_proj2(p_program_links_tbl(l_count).pm_sub_project_reference);
36611                         fetch l_cur_sub_proj2 into l_sub_project_id;
36612                         close l_cur_sub_proj2;
36613 
36614 		elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
36615                         and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36616 
36617                         open l_cur_sub_proj3(p_program_links_tbl(l_count).sub_project_id);
36618                         fetch l_cur_sub_proj3 into l_sub_project_id;
36619                         close l_cur_sub_proj3;
36620 
36621 		else
36622 
36623 		     l_sub_project_id := null;
36624 
36625 		end if;
36626 
36627         	if (l_sub_project_id is null) then
36628 
36629                 	PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
36630                         l_exp_error_flag := 'Y';
36631 
36632 			l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
36633 
36634 		end if;
36635 
36636 	end if;
36637 
36638         -- Check if the task version id corresponds to a summary task.
36639         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration
36640                 if (pa_proj_elements_utils.is_summary_task_or_structure(l_task_version_id) = 'Y') then
36641                         -- The task is a summary task.
36642                         open l_cur_prog_name(l_task_version_id);
36643                         fetch l_cur_prog_name into l_program_name;
36644                         close l_cur_prog_name;
36645 
36646                         open l_cur_proj_name(l_sub_project_id);
36647                         fetch l_cur_proj_name into l_project_name;
36648                         close l_cur_proj_name;
36649 
36650                         open l_cur_task_name(l_task_version_id);
36651                         fetch l_cur_task_name into l_task_name;
36652                         close l_cur_task_name;
36653 
36654                         PA_UTILS.ADD_MESSAGE('PA','PA_PS_CANT_LINK_SUMMARY_TASK'
36655                                              ,'PROJ', l_project_name
36656                                              ,'PROG', l_program_name
36657                                              ,'TASK', l_task_name);
36658 
36659 			l_exp_error_flag := 'Y';
36660 
36661                 end if;
36662         end if;
36663 
36664         -- Actions performed using the APIs are subject to function security.
36665         -- If the responsibility does not allow a function to be executed the API
36666         -- will error out as the user does not have access.
36667 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36668         	if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN'
36669             	    or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
36670                 	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36671                 	(p_api_version_number   => p_api_version
36672                 	, p_responsibility_id   => FND_GLOBAL.RESP_ID
36673                 	, p_function_name       => 'PA_PAXPREPR_WP_LINK_PROJ'
36674                 	, p_msg_count           => l_msg_count
36675                 	, p_msg_data            => l_msg_data
36676                 	, p_return_status       => l_return_status
36677                 	, p_function_allowed    => l_function_allowed);
36678 
36679                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36680                         	l_unexp_error_flag := 'Y';
36681                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36682                         	l_exp_error_flag := 'Y';
36683                 	end if;
36684 
36685                 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36686                         	if l_function_allowed = 'N' then
36687                                 	pa_interface_utils_pub.map_new_amg_msg
36688                                 	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
36689                                 	, p_msg_attribute       => 'CHANGE'
36690                                 	, p_resize_flag         => 'Y'
36691                                 	, p_msg_context         => 'GENERAL'
36692                                 	, p_attribute1          => ''
36693                                 	, p_attribute2          => ''
36694                                 	, p_attribute3          => ''
36695                                 	, p_attribute4          => ''
36696                                 	, p_attribute5          => '');
36697                                 	l_exp_error_flag := 'Y';
36698                         	end if;
36699                 	end if;
36700         	end if;
36701 	end if;
36702 
36703         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36704         	if (p_program_links_tbl(l_count).structure_type = 'FINANCIAL'
36705             	    or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
36706                 	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36707                 	(p_api_version_number   => p_api_version
36708                 	, p_responsibility_id   => FND_GLOBAL.RESP_ID
36709                 	, p_function_name       => 'PA_PAXPREPR_OPT_SUBPROJECTS'
36710                 	, p_msg_count           => l_msg_count
36711                 	, p_msg_data            => l_msg_data
36712                 	, p_return_status       => l_return_status
36713                 	, p_function_allowed    => l_function_allowed);
36714 
36715                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36716                         	l_unexp_error_flag := 'Y';
36717                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36718                         	l_exp_error_flag := 'Y';
36719                 	end if;
36720 
36721                 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36722                         	if l_function_allowed = 'N' then
36723                                 	pa_interface_utils_pub.map_new_amg_msg
36724                                 	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
36725                                 	, p_msg_attribute       => 'CHANGE'
36726                                 	, p_resize_flag         => 'Y'
36727                                 	, p_msg_context         => 'GENERAL'
36728                                 	, p_attribute1          => ''
36729                                 	, p_attribute2          => ''
36730                                 	, p_attribute3          => ''
36731                                 	, p_attribute4          => ''
36732                                 	, p_attribute5          => '');
36733                                 	l_exp_error_flag := 'Y';
36734                         	end if;
36735                 	end if;
36736         	end if;
36737 	end if;
36738 
36739 	-- Check if the sub-project has the appropriate structure type enabled.
36740 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36741 		if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN') then
36742 			if (pa_project_structure_utils.check_workplan_enabled(l_sub_project_id) = 'N') then
36743 
36744                         	open l_cur_proj_name(l_sub_project_id);
36745                         	fetch l_cur_proj_name into l_project_name;
36746                         	close l_cur_proj_name;
36747 
36748 				PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_WORKPLAN_TO_LINK'
36749                                              	     ,'PROJ', l_project_name);
36750 				l_exp_error_flag := 'Y';
36751 
36752 				l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
36753 
36754 			end if;
36755 		elsif (p_program_links_tbl(l_count).structure_type = 'FINANCIAL') then
36756                         if (pa_project_structure_utils.check_financial_enabled(l_sub_project_id) = 'N') then
36757 
36758                                 open l_cur_proj_name(l_sub_project_id);
36759                                 fetch l_cur_proj_name into l_project_name;
36760                                 close l_cur_proj_name;
36761 
36762                                 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_FINANCIAL_TO_LINK'
36763                                                      ,'PROJ', l_project_name);
36764                                 l_exp_error_flag := 'Y';
36765 
36766 				l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
36767 
36768                         end if;
36769 		end if;
36770 	end if;
36771 
36772 	-- Call the API to create the sub-project association.
36773 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
36774 		PA_RELATIONSHIP_PUB.CREATE_SUBPROJECT_ASSOCIATION
36775 		(p_api_version	 	=>	p_api_version
36776 		, p_init_msg_list 	=> 	FND_API.G_FALSE
36777 		, p_commit	 	=>	p_commit
36778 		, p_calling_module 	=> 	'AMG'
36779 		, p_debug_mode	 	=>	p_debug_mode
36780 		, p_max_msg_count 	=>	p_max_msg_count
36781 		, p_src_proj_id	 	=>	l_parent_project_id
36782 		, p_task_ver_id	 	=>	l_task_version_id
36783 		, p_dest_proj_id 	=>	l_sub_project_id
36784 		, p_comment	 	=> 	p_program_links_tbl(l_count).comments
36785 		, x_return_status 	=>	l_return_status
36786 		, x_msg_count	 	=>	l_msg_count
36787 		, x_msg_data		=> 	l_msg_data);
36788 
36789         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36790                 	l_unexp_error_flag := 'Y';
36791         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36792                 	l_exp_error_flag := 'Y';
36793         	end if;
36794 	end if;
36795 
36796 	-- In case of any errors in the loop store the message context and message code for the error message reported
36797 	-- in the local pl/sql error table.
36798 
36799 	if ((l_unexp_error_flag = 'Y') or (l_exp_error_flag = 'Y')) then
36800 
36801                 l_prog_error_tbl(l_count).program_name := NULL;
36802                 l_prog_error_tbl(l_count).object_relationship_id := NULL;
36803 
36804 		if (l_parent_sub_flag = 'P') then -- Indicates that the error is for the parent_project.
36805 
36806 			if (((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
36807                               and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
36808 			    and ((p_program_links_tbl(l_count).parent_project_id is not null)
36809                                	  and (p_program_links_tbl(l_count).parent_project_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
36810 					 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
36811 					 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
36812                	 	elsif ((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
36813                     	     and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
36814                         		l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
36815                 	elsif ((p_program_links_tbl(l_count).parent_project_id is not null)
36816                       	       and (p_program_links_tbl(l_count).parent_project_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36817                         		open l_cur_prog_name2(p_program_links_tbl(l_count).parent_project_id);
36818                         		fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
36819                         		close l_cur_prog_name2;
36820                         		l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
36821                 	elsif ((p_program_links_tbl(l_count).task_version_id is not null)
36822                        		and (p_program_links_tbl(l_count).task_version_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36823                         		l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).task_version_id;
36824                 	end if;
36825 
36826 		elsif (l_parent_sub_flag = 'S')  then -- Indicates that the error is for the sub-project.
36827 
36828                 	if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
36829                       	      and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
36830                     	    and ((p_program_links_tbl(l_count).sub_project_id is not null)
36831                           	  and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
36832                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
36833                                          l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
36834 			elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
36835                         	and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
36836                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
36837 		        elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
36838                         	and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36839                                         open l_cur_prog_name2(p_program_links_tbl(l_count).sub_project_id);
36840                                         fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
36841                                         close l_cur_prog_name2;
36842                                         l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
36843 			end if;
36844 
36845 		end if;
36846 
36847 		PA_INTERFACE_UTILS_PUB.get_messages
36848            	(p_encoded         => FND_API.G_FALSE     -- Get the encoded message.
36849                 , p_msg_index      => 1                   -- Get the message at index 1.
36850                 , p_data           => l_prog_error_tbl(l_count).error_msg
36851                 , p_msg_index_out  => l_msg_index_out);
36852 
36853 	end if;
36854 
36855 end loop;
36856 
36857 -- In case of any errors in the above loop, populate the tokenized error messages in the error stack and raise an exception:
36858 l_error_count := l_prog_error_tbl.count;
36859 
36860 if (l_error_count > 0) then
36861 
36862 	-- Set the return status to error.
36863   	x_return_status := FND_API.G_RET_STS_ERROR;
36864 
36865 	-- Clear all previous messages from the message stack.
36866   	FND_MSG_PUB.initialize;
36867 
36868 	-- Populate the generic error message.
36869 	PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
36870 
36871 	-- Loop through the local pl/sql error table to populate the tokenized error messages.
36872 	for l in l_prog_error_tbl.first..l_prog_error_tbl.last
36873 	loop
36874 		if (l_prog_error_tbl.exists(l)) then
36875 	 	 	PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
36876 	 				     ,'TASKNAME',l_prog_error_tbl(l).program_name
36877 					     ,'TASKNUMBER',l_prog_error_tbl(l).object_relationship_id
36878 					     ,'ERRORMSG', l_prog_error_tbl(l).error_msg);
36879 		end if;
36880 	 end loop;
36881 
36882   	 raise FND_API.G_EXC_ERROR;
36883 
36884   end if;
36885 
36886 -- Commit if p_commit = FND_API.G_TRUE.
36887 if (p_commit = FND_API.G_TRUE) then
36888         commit;
36889 end if;
36890 
36891 exception
36892 
36893    when FND_API.G_EXC_ERROR then
36894       rollback to CREATE_PROGRAM_LINKS_AMG;
36895       x_return_status := FND_API.G_RET_STS_ERROR;
36896       x_msg_count := FND_MSG_PUB.count_msg;
36897 
36898       if x_msg_count = 1 then
36899            PA_INTERFACE_UTILS_PUB.get_messages
36900                (p_encoded        => FND_API.G_FALSE
36901                 , p_msg_index      => 1
36902                 , p_msg_count      => x_msg_count
36903                 , p_msg_data       => x_msg_data
36904                 , p_data           => x_msg_data
36905                 , p_msg_index_out  => l_msg_index_out);
36906      end if;
36907 
36908    when FND_API.G_EXC_UNEXPECTED_ERROR then
36909       rollback to CREATE_PROGRAM_LINKS_AMG;
36910       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36911       x_msg_count := FND_MSG_PUB.count_msg;
36912 
36913       if x_msg_count = 1 then
36914            PA_INTERFACE_UTILS_PUB.get_messages
36915                (p_encoded        => FND_API.G_FALSE
36916                 , p_msg_index      => 1
36917                 , p_msg_count      => x_msg_count
36918                 , p_msg_data       => x_msg_data
36919                 , p_data           => x_msg_data
36920                 , p_msg_index_out  => l_msg_index_out);
36921      end if;
36922 
36923    when OTHERS then
36924       rollback to CREATE_PROGRAM_LINKS_AMG;
36925       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36926       x_msg_count := 1;
36927       x_msg_data := SQLERRM;
36928       if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
36929                 FND_MSG_PUB.add_exc_msg
36930                 ( p_pkg_name            => G_PKG_NAME
36931                 , p_procedure_name      => l_api_name);
36932       end if;
36933 
36934 end CREATE_PROGRAM_LINKS;
36935 
36936 PROCEDURE UPDATE_PROGRAM_LINK_COMMENTS
36937 (p_api_version                  IN      NUMBER          := 1.0
36938 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_TRUE
36939 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
36940 , p_debug_mode                  IN      VARCHAR2        := 'N'
36941 , p_max_msg_count               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36942 , p_program_links_tbl           IN      PA_PROJECT_PUB.PROGRAM_LINKS_TBL_TYPE
36943 , x_return_status               OUT     NOCOPY VARCHAR2
36944 , x_msg_count                   OUT     NOCOPY NUMBER
36945 , x_msg_data                    OUT     NOCOPY VARCHAR2)
36946 is
36947 
36948 l_api_name              CONSTANT  VARCHAR2(30)  := 'UPDATE_PROGRAM_LINK_COMMENTS';
36949 
36950 l_pm_product_code       VARCHAR2(2)             := NULL;
36951 l_function_allowed      VARCHAR2(1)             := NULL;
36952 
36953 l_count            		NUMBER          	:= NULL;
36954 l_parent_project_id		NUMBER			:= NULL;
36955 l_sub_project_id		NUMBER			:= NULL;
36956 l_task_id			NUMBER			:= NULL;
36957 l_task_version_id		NUMBER			:= NULL;
36958 l_object_relationship_id 	NUMBER                  := NULL;
36959 l_record_version_number 	NUMBER                  := NULL;
36960 
36961 
36962 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
36963 select ppev.element_version_id
36964 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
36965 , pa_proj_structure_types ppst, pa_structure_types pst
36966 where ppevs.proj_element_id = ppst.proj_element_id
36967 and ppst.structure_type_id = pst.structure_type_id
36968 and ppev.project_id = ppevs.project_id
36969 and ppev.parent_structure_version_id = ppevs.element_version_id
36970 and ppevs.current_working_flag = 'Y'
36971 and ppev.proj_element_id = c_task_id
36972 and pst.structure_type = c_structure_type;
36973 
36974 cursor l_cur_por1(c_task_version_id NUMBER, c_sub_proj_id NUMBER, c_structure_type VARCHAR2) is
36975 select por2.object_relationship_id, por2.record_version_number
36976 from pa_object_relationships por1, pa_object_relationships por2
36977 where por1.object_id_to1 = por2.object_id_from1
36978 and por1.relationship_type = 'S'
36979 and por1.object_id_from1 = c_task_version_id
36980 and por2.object_id_to2 = c_sub_proj_id
36981 and por2.relationship_type = decode(c_structure_type, 'WORKPLAN', 'LW', 'FINANCIAL', 'LF');
36982 
36983 cursor l_cur_por2(c_object_relationship_id NUMBER) is
36984 select por.object_relationship_id, por.record_version_number, por.object_id_from2
36985 from pa_object_relationships por
36986 where por.relationship_type in ('LW','LF')
36987 and por.object_relationship_id = c_object_relationship_id;
36988 
36989 cursor l_cur_prog_name (c_task_version_id NUMBER) is
36990 select ppa.name
36991 from pa_projects_all ppa, pa_proj_element_versions ppev
36992 where ppa.project_id = ppev.project_id
36993 and ppev.element_version_id = c_task_version_id;
36994 
36995 cursor l_cur_prog_name2 (c_project_id NUMBER) is
36996 select ppa.name
36997 from pa_projects_all ppa
36998 where ppa.project_id = c_project_id;
36999 
37000 cursor l_cur_proj_name (c_project_id NUMBER) is
37001 select ppa.name
37002 from pa_projects_all ppa
37003 where ppa.project_id = c_project_id;
37004 
37005 cursor l_cur_task_name (c_task_ver_id NUMBER) is
37006 select ppe.name
37007 from pa_proj_elements ppe, pa_proj_element_versions ppev
37008 where ppe.project_id = ppev.project_id
37009 and ppe.proj_element_id = ppev.proj_element_id
37010 and ppev.element_version_id = c_task_ver_id;
37011 
37012 cursor l_cur_project_id2(c_task_version_id NUMBER) is
37013 select ppev.project_id, ppev.proj_element_id
37014 from pa_proj_element_versions ppev
37015 where ppev.element_version_id = c_task_version_id;
37016 
37017 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
37018 select ppa.project_id
37019 from pa_projects_all ppa
37020 where pm_project_reference = c_sub_project_reference
37021 and ppa.project_id = c_sub_project_id;
37022 
37023 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
37024 select ppa.project_id
37025 from pa_projects_all ppa
37026 where pm_project_reference = c_sub_project_reference;
37027 
37028 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
37029 select ppa.project_id
37030 from pa_projects_all ppa
37031 where ppa.project_id = c_sub_project_id;
37032 
37033 l_parent_sub_flag       VARCHAR2(1)             := NULL;
37034 
37035 l_program_name		VARCHAR2(30)		:= NULL;
37036 l_project_name		VARCHAR2(30)		:= NULL;
37037 l_task_name		VARCHAR2(30)		:= NULL;
37038 
37039 l_unexp_error_flag      VARCHAR2(1)             := 'N';
37040 l_exp_error_flag        VARCHAR2(1)             := 'N';
37041 
37042 l_msg_index_out     	NUMBER                  := NULL;
37043 l_return_status         VARCHAR2(1)             := NULL;
37044 l_msg_count             NUMBER                  := NULL;
37045 l_msg_data              VARCHAR2(2000)          := NULL;
37046 
37047 TYPE l_prog_error_rec_type IS RECORD
37048 (program_name           VARCHAR2(300)   := null
37049 ,object_relationship_id NUMBER          := null
37050 ,error_msg              VARCHAR2(2000)  := null);
37051 
37052 TYPE l_prog_error_tbl_type IS TABLE OF l_prog_error_rec_type INDEX BY BINARY_INTEGER;
37053 
37054 l_prog_error_tbl l_prog_error_tbl_type;
37055 
37056 l_error_count           NUMBER          := 0;
37057 l_msg_code              VARCHAR2(30)    := null;
37058 
37059 l                       NUMBER          := 0;
37060 
37061 begin
37062 
37063 -- Establish the save point.
37064 savepoint UPDATE_PROGRAM_LINK_CMNTS_AMG;
37065 
37066 --  Initialize the message table if requested.
37067 if FND_API.TO_BOOLEAN(p_init_msg_list) then
37068        FND_MSG_PUB.initialize;
37069 end if;
37070 
37071 --  Standard call to check for API compatibility.
37072 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
37073         raise FND_API.G_EXC_UNEXPECTED_ERROR;
37074  end if;
37075 
37076 -- Initialize the return status
37077 x_return_status := FND_API.G_RET_STS_SUCCESS;
37078 
37079 -- Initialize the error flags.
37080 l_unexp_error_flag := 'N';
37081 l_exp_error_flag := 'N';
37082 
37083 -- Loop through the records in the input PL/SQL table.
37084 for l_count in p_program_links_tbl.FIRST..p_program_links_tbl.LAST loop
37085 
37086         -- Clear the message stack.
37087         FND_MSG_PUB.initialize;
37088 
37089         -- Initialize the error flags.
37090         l_unexp_error_flag := 'N';
37091         l_exp_error_flag := 'N';
37092         l_parent_sub_flag := 'P'; -- By default assume that any errors will be for the parent project.
37093 
37094 	-- Initialize the local variables.
37095 	l_parent_project_id             := NULL;
37096 	l_sub_project_id                := NULL;
37097 	l_task_id                       := NULL;
37098 	l_task_version_id               := NULL;
37099 	l_object_relationship_id        := NULL;
37100 	l_record_version_number         := NULL;
37101 
37102 	-- If object relationship id is not passed in.
37103 	if ((p_program_links_tbl(l_count).object_relationship_id is null)
37104              or (p_program_links_tbl(l_count).object_relationship_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37105 
37106 		-- If task version id is not passed in.
37107 		if ((p_program_links_tbl(l_count).task_version_id is null)
37108 	     	    or (p_program_links_tbl(l_count).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37109 
37110                 	-- Convert parent project reference to id.
37111 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37112                         	PA_PROJECT_PVT.Convert_pm_projref_to_id
37113                         	(p_pm_project_reference       =>     p_program_links_tbl(l_count).pm_parent_project_reference
37114                         	, p_pa_project_id             =>     p_program_links_tbl(l_count).parent_project_id
37115                         	, p_out_project_id            =>     l_parent_project_id
37116                         	, p_return_status             =>     l_return_status);
37117 
37118                         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37119                         		l_unexp_error_flag := 'Y';
37120                         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37121                         		l_exp_error_flag := 'Y';
37122                         	end if;
37123 			end if;
37124 
37125                         -- Convert task reference to id
37126 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37127                         	PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37128                         	(p_pa_project_id        => l_parent_project_id
37129                         	, p_pm_task_reference   => p_program_links_tbl(l_count).pm_task_reference
37130                 		, p_pa_task_id   	=> p_program_links_tbl(l_count).task_id
37131                         	, p_structure_type      => p_program_links_tbl(l_count).structure_type
37132                         	, p_out_task_id         => l_task_id
37133                         	, p_return_status       => l_return_status);
37134 
37135                         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37136                         		l_unexp_error_flag := 'Y';
37137                         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37138                         		l_exp_error_flag := 'Y';
37139                         	end if;
37140 			end if;
37141 
37142 			-- Find the task version id in the current working workplan structure version.
37143 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37144 				open l_cur_task_ver_id(l_task_id, p_program_links_tbl(l_count).structure_type);
37145 				fetch l_cur_task_ver_id into l_task_version_id;
37146 				close l_cur_task_ver_id;
37147 
37148                         	-- Validate that the task has a version in the specified structure type.
37149                         	if (l_task_version_id is null) then
37150                                 	PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
37151 					l_exp_error_flag := 'Y';
37152                         	end if;
37153 
37154 			end if;
37155 
37156 		-- If task version id is passed in.
37157 		else
37158 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37159 				l_task_version_id := p_program_links_tbl(l_count).task_version_id;
37160 			end if;
37161 
37162 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37163 	        		open l_cur_project_id2(l_task_version_id);
37164                 		fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
37165                         	if l_cur_project_id2%NOTFOUND then
37166                                 	PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
37167                                 	l_exp_error_flag := 'Y';
37168                         	end if;
37169 
37170                 		close l_cur_project_id2;
37171 			end if;
37172 
37173                 	-- Validate the task id and project id of the task version id.
37174 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37175                         	PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37176                         	(p_pa_project_id        => l_parent_project_id
37177                         	, p_pa_task_id          => l_task_id
37178                         	, p_structure_type      => p_program_links_tbl(l_count).structure_type
37179                         	, p_out_task_id         => l_task_id
37180                         	, p_return_status       => l_return_status);
37181 
37182                         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37183                                 	l_unexp_error_flag := 'Y';
37184                         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37185                                 	l_exp_error_flag := 'Y';
37186                         	end if;
37187 			end if;
37188 
37189 		end if;
37190 
37191         	-- Validate sub-project across organizations and convert sub-project reference to id.
37192         	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37193 
37194                 	if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37195                       	      and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37196                     	    and ((p_program_links_tbl(l_count).sub_project_id is not null)
37197                               and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37198 
37199                         	open l_cur_sub_proj1(p_program_links_tbl(l_count).pm_sub_project_reference, p_program_links_tbl(l_count).sub_project_id);
37200                         	fetch l_cur_sub_proj1 into l_sub_project_id;
37201                         	close l_cur_sub_proj1;
37202 
37203                 	elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37204                         	and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37205 
37206                         	open l_cur_sub_proj2(p_program_links_tbl(l_count).pm_sub_project_reference);
37207                         	fetch l_cur_sub_proj2 into l_sub_project_id;
37208                         	close l_cur_sub_proj2;
37209 
37210                 	elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37211                         	and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37212 
37213                         	open l_cur_sub_proj3(p_program_links_tbl(l_count).sub_project_id);
37214                         	fetch l_cur_sub_proj3 into l_sub_project_id;
37215                         	close l_cur_sub_proj3;
37216 
37217                 	else
37218 
37219                      		l_sub_project_id := null;
37220 
37221                 	end if;
37222 
37223                 	if (l_sub_project_id is null) then
37224 
37225         	                PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
37226                         	l_exp_error_flag := 'Y';
37227 
37228                         	l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37229 
37230                 	end if;
37231 
37232         	end if;
37233 
37234 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37235 			open l_cur_por1(l_task_version_id, l_sub_project_id, p_program_links_tbl(l_count).structure_type);
37236 			fetch l_cur_por1 into l_object_relationship_id, l_record_version_number;
37237 			if  l_cur_por1%NOTFOUND then
37238 				-- Program Link does not exist between the parent project and the sub-project.
37239 				open l_cur_prog_name(l_task_version_id);
37240 				fetch l_cur_prog_name into l_program_name;
37241 				close l_cur_prog_name;
37242 
37243 				open l_cur_proj_name(l_sub_project_id);
37244 				fetch l_cur_proj_name into l_project_name;
37245 				close l_cur_proj_name;
37246 
37247                 		open l_cur_task_name(l_task_version_id);
37248                 		fetch l_cur_task_name into l_task_name;
37249                 		close l_cur_task_name;
37250 
37251 				PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_LINK_EXISTS'
37252 						 ,'PROJ', l_project_name
37253 						 ,'PROG', l_program_name
37254 						 ,'TASK', l_task_name
37255 						 ,'STR', p_program_links_tbl(l_count).structure_type);
37256 
37257 				l_exp_error_flag := 'Y';
37258 			end if;
37259 			close l_cur_por1;
37260 		end if;
37261 
37262 	-- If object relationship id is passed in.
37263 	else
37264 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37265 	        	open l_cur_por2(p_program_links_tbl(l_count).object_relationship_id);
37266                 	fetch l_cur_por2 into l_object_relationship_id, l_record_version_number, l_parent_project_id;
37267 			if l_cur_por2%NOTFOUND then
37268 				-- Invalid object_relationship_id.
37269 				PA_UTILS.ADD_MESSAGE('PA','PA_PS_INVALID_OBJ_REL_ID'
37270                                                   	 ,'OBJRELID', p_program_links_tbl(l_count).object_relationship_id);
37271 
37272 				l_exp_error_flag := 'Y';
37273 			end if;
37274                 	close l_cur_por2;
37275 		end if;
37276 	end if;
37277 
37278         -- Actions performed using the APIs are subject to function security.
37279         -- If the responsibility does not allow a function to be executed the API
37280         -- will error out as the user does not have access.
37281         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37282                 if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN'
37283                     or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37284                         PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37285                         (p_api_version_number   => p_api_version
37286                         , p_responsibility_id   => FND_GLOBAL.RESP_ID
37287                         , p_function_name       => 'PA_PAXPREPR_WP_LINK_PROJ'
37288                         , p_msg_count           => l_msg_count
37289                         , p_msg_data            => l_msg_data
37290                         , p_return_status       => l_return_status
37291                         , p_function_allowed    => l_function_allowed);
37292 
37293                         if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37294                                 l_unexp_error_flag := 'Y';
37295                         elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37296                                 l_exp_error_flag := 'Y';
37297                         end if;
37298 
37299                         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37300                                 if l_function_allowed = 'N' then
37301                                         pa_interface_utils_pub.map_new_amg_msg
37302                                         (p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
37303                                         , p_msg_attribute       => 'CHANGE'
37304                                         , p_resize_flag         => 'Y'
37305                                         , p_msg_context         => 'GENERAL'
37306                                         , p_attribute1          => ''
37307                                         , p_attribute2          => ''
37308                                         , p_attribute3          => ''
37309                                         , p_attribute4          => ''
37310                                         , p_attribute5          => '');
37311                                         l_exp_error_flag := 'Y';
37312                                 end if;
37313                         end if;
37314                 end if;
37315 
37316 	end if;
37317 
37318 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37319                 if (p_program_links_tbl(l_count).structure_type = 'FINANCIAL'
37320                     or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37321                         PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37322                         (p_api_version_number   => p_api_version
37323                         , p_responsibility_id   => FND_GLOBAL.RESP_ID
37324                         , p_function_name       => 'PA_PAXPREPR_OPT_SUBPROJECTS'
37325                         , p_msg_count           => l_msg_count
37326                         , p_msg_data            => l_msg_data
37327                         , p_return_status       => l_return_status
37328                         , p_function_allowed    => l_function_allowed);
37329 
37330                         if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37331                                 l_unexp_error_flag := 'Y';
37332                         elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37333                                 l_exp_error_flag := 'Y';
37334                         end if;
37335 
37336                         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37337                                 if l_function_allowed = 'N' then
37338                                         pa_interface_utils_pub.map_new_amg_msg
37339                                         (p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
37340                                         , p_msg_attribute       => 'CHANGE'
37341                                         , p_resize_flag         => 'Y'
37342                                         , p_msg_context         => 'GENERAL'
37343                                         , p_attribute1          => ''
37344                                         , p_attribute2          => ''
37345                                         , p_attribute3          => ''
37346                                         , p_attribute4          => ''
37347                                         , p_attribute5          => '');
37348                                         l_exp_error_flag := 'Y';
37349                                 end if;
37350                         end if;
37351                 end if;
37352         end if;
37353 
37354 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37355 		-- Call the API to update the sub-project association.
37356 		PA_RELATIONSHIP_PUB.UPDATE_SUBPROJECT_ASSOCIATION
37357 		(p_api_version			=> 	p_api_version
37358 		, p_init_msg_list 		=> 	FND_API.G_FALSE
37359 		, p_calling_module		=>	'AMG'
37360 		, p_max_msg_count		=>	p_max_msg_count
37361 		, p_commit			=>	p_commit
37362 		, p_debug_mode			=>	p_debug_mode
37363 		, p_object_relationship_id	=>	l_object_relationship_id
37364 		, p_record_version_number	=>	l_record_version_number
37365 		, p_comment			=>	p_program_links_tbl(l_count).comments
37366 		, x_return_status		=>	l_return_status
37367 		, x_msg_count			=>	l_msg_count
37368 		, x_msg_data			=>	l_msg_data);
37369 
37370         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37371                 	l_unexp_error_flag := 'Y';
37372         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37373                 	l_exp_error_flag := 'Y';
37374         	end if;
37375 	end if;
37376 
37377         -- In case of any errors in the loop store the message context and message code for the error message reported
37378         -- in the local pl/sql error table.
37379 
37380         if ((l_unexp_error_flag = 'Y') or (l_exp_error_flag = 'Y')) then
37381 
37382                 l_prog_error_tbl(l_count).program_name := NULL;
37383                 l_prog_error_tbl(l_count).object_relationship_id := NULL;
37384 
37385                 if (l_parent_sub_flag = 'P') then -- Indicates that the error is for the parent_project.
37386 
37387                         if (((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
37388                               and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37389                             and ((p_program_links_tbl(l_count).parent_project_id is not null)
37390                                   and (p_program_links_tbl(l_count).parent_project_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37391                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
37392                                          l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
37393                         elsif ((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
37394                              and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37395                                         l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
37396                         elsif ((p_program_links_tbl(l_count).parent_project_id is not null)
37397                                and (p_program_links_tbl(l_count).parent_project_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37398                                         open l_cur_prog_name2(p_program_links_tbl(l_count).parent_project_id);
37399                                         fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
37400                                         close l_cur_prog_name2;
37401                                         l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
37402                         elsif ((p_program_links_tbl(l_count).task_version_id is not null)
37403                                 and (p_program_links_tbl(l_count).task_version_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37404                                         l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).task_version_id;
37405                         end if;
37406 
37407                 elsif (l_parent_sub_flag = 'S')  then -- Indicates that the error is for the sub-project.
37408 
37409                         if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37410                               and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37411                             and ((p_program_links_tbl(l_count).sub_project_id is not null)
37412                                   and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37413                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
37414                                          l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
37415                         elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37416                                 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37417                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
37418                         elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37419                                 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37420                                         open l_cur_prog_name2(p_program_links_tbl(l_count).sub_project_id);
37421                                         fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
37422                                         close l_cur_prog_name2;
37423                                         l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
37424                         end if;
37425 
37426                 end if;
37427 
37428                 PA_INTERFACE_UTILS_PUB.get_messages
37429                 (p_encoded         => FND_API.G_FALSE     -- Get the encoded message.
37430                 , p_msg_index      => 1                   -- Get the message at index 1.
37431                 , p_data           => l_prog_error_tbl(l_count).error_msg
37432                 , p_msg_index_out  => l_msg_index_out);
37433 
37434         end if;
37435 
37436 end loop;
37437 
37438 -- In case of any errors in the above loop, populate the tokenized error messages in the error stack and raise an exception:
37439 l_error_count := l_prog_error_tbl.count;
37440 
37441 if (l_error_count > 0) then
37442 
37443         -- Set the return status to error.
37444         x_return_status := FND_API.G_RET_STS_ERROR;
37445 
37446         -- Clear all previous messages from the message stack.
37447         FND_MSG_PUB.initialize;
37448 
37449         -- Populate the generic error message.
37450         PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
37451 
37452         -- Loop through the local pl/sql error table to populate the tokenized error messages.
37453         for l in l_prog_error_tbl.first..l_prog_error_tbl.last
37454         loop
37455                 if (l_prog_error_tbl.exists(l)) then
37456                         PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
37457                                              ,'TASKNAME',l_prog_error_tbl(l).program_name
37458                                              ,'TASKNUMBER',l_prog_error_tbl(l).object_relationship_id
37459                                              ,'ERRORMSG', l_prog_error_tbl(l).error_msg);
37460                 end if;
37461          end loop;
37462 
37463          raise FND_API.G_EXC_ERROR;
37464 
37465   end if;
37466 
37467 -- Commit if p_commit = FND_API.G_TRUE.
37468 if (p_commit = FND_API.G_TRUE) then
37469         commit;
37470 end if;
37471 
37472 exception
37473 
37474    when FND_API.G_EXC_ERROR then
37475       rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
37476       x_return_status := FND_API.G_RET_STS_ERROR;
37477       x_msg_count := FND_MSG_PUB.count_msg;
37478 
37479       if x_msg_count = 1 then
37480            PA_INTERFACE_UTILS_PUB.get_messages
37481                (p_encoded        => FND_API.G_FALSE
37482                 , p_msg_index      => 1
37483                 , p_msg_count      => x_msg_count
37484                 , p_msg_data       => x_msg_data
37485                 , p_data           => x_msg_data
37486                 , p_msg_index_out  => l_msg_index_out);
37487      end if;
37488 
37489    when FND_API.G_EXC_UNEXPECTED_ERROR then
37490       rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
37491       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37492       x_msg_count := FND_MSG_PUB.count_msg;
37493 
37494       if x_msg_count = 1 then
37495            PA_INTERFACE_UTILS_PUB.get_messages
37496                (p_encoded        => FND_API.G_FALSE
37497                 , p_msg_index      => 1
37498                 , p_msg_count      => x_msg_count
37499                 , p_msg_data       => x_msg_data
37500                 , p_data           => x_msg_data
37501                 , p_msg_index_out  => l_msg_index_out);
37502      end if;
37503 
37504    when OTHERS then
37505       rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
37506       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37507       x_msg_count := 1;
37508       x_msg_data := SQLERRM;
37509       if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
37510                 FND_MSG_PUB.add_exc_msg
37511                 ( p_pkg_name            => G_PKG_NAME
37512                 , p_procedure_name      => l_api_name);
37513       end if;
37514 
37515 end UPDATE_PROGRAM_LINK_COMMENTS;
37516 
37517 PROCEDURE DELETE_PROGRAM_LINK
37518 (p_api_version                  IN      NUMBER          := 1.0
37519 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_TRUE
37520 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
37521 , p_debug_mode                  IN      VARCHAR2        := 'N'
37522 , p_max_msg_count               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37523 , p_object_relationship_id      IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37524 , p_parent_project_id           IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37525 , p_pm_parent_project_reference IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37526 , p_task_id                     IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37527 , p_pm_task_reference           IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37528 , p_task_version_id             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37529 , p_structure_type		IN	VARCHAR2	:= 'WORKPLAN'
37530 , p_sub_project_id              IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37531 , p_pm_sub_project_reference    IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37532 , x_return_status               OUT     NOCOPY VARCHAR2
37533 , x_msg_count                   OUT     NOCOPY NUMBER
37534 , x_msg_data                    OUT     NOCOPY VARCHAR2)
37535 is
37536 
37537 l_api_name              CONSTANT  VARCHAR2(30)  := 'DELETE_PROGRAM_LINK';
37538 
37539 l_pm_product_code       VARCHAR2(2)             := NULL;
37540 l_function_allowed      VARCHAR2(1)             := NULL;
37541 
37542 l_count            		NUMBER          	:= NULL;
37543 l_parent_project_id		NUMBER			:= NULL;
37544 l_sub_project_id		NUMBER			:= NULL;
37545 l_task_id			NUMBER			:= NULL;
37546 l_task_version_id		NUMBER			:= NULL;
37547 l_object_relationship_id 	NUMBER                  := NULL;
37548 l_record_version_number 	NUMBER                  := NULL;
37549 
37550 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
37551 select ppev.element_version_id
37552 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
37553 , pa_proj_structure_types ppst, pa_structure_types pst
37554 where ppevs.proj_element_id = ppst.proj_element_id
37555 and ppst.structure_type_id = pst.structure_type_id
37556 and ppev.project_id = ppevs.project_id
37557 and ppev.parent_structure_version_id = ppevs.element_version_id
37558 and ppevs.current_working_flag = 'Y'
37559 and ppev.proj_element_id = c_task_id
37560 and pst.structure_type = c_structure_type;
37561 
37562 cursor l_cur_por1(c_task_version_id NUMBER, c_sub_proj_id NUMBER, c_structure_type VARCHAR2) is
37563 select por2.object_relationship_id, por2.record_version_number
37564 from pa_object_relationships por1, pa_object_relationships por2
37565 where por1.object_id_to1 = por2.object_id_from1
37566 and por1.relationship_type = 'S'
37567 and por1.object_id_from1 = c_task_version_id
37568 and por2.object_id_to2 = c_sub_proj_id
37569 and por2.relationship_type = decode(c_structure_type, 'WORKPLAN', 'LW', 'FINANCIAL', 'LF');
37570 
37571 cursor l_cur_por2(c_object_relationship_id NUMBER) is
37572 select por.object_relationship_id, por.record_version_number, por.object_id_from2
37573 from pa_object_relationships por
37574 where por.relationship_type in ('LW','LF')
37575 and por.object_relationship_id = c_object_relationship_id;
37576 
37577 cursor l_cur_prog_name (c_task_version_id NUMBER) is
37578 select ppa.name
37579 from pa_projects_all ppa, pa_proj_element_versions ppev
37580 where ppa.project_id = ppev.project_id
37581 and ppev.element_version_id = c_task_version_id;
37582 
37583 cursor l_cur_proj_name (c_project_id NUMBER) is
37584 select ppa.name
37585 from pa_projects_all ppa
37586 where ppa.project_id = c_project_id;
37587 
37588 cursor l_cur_task_name (c_task_ver_id NUMBER) is
37589 select ppe.name
37590 from pa_proj_elements ppe, pa_proj_element_versions ppev
37591 where ppe.project_id = ppev.project_id
37592 and ppe.proj_element_id = ppev.proj_element_id
37593 and ppev.element_version_id = c_task_ver_id;
37594 
37595 cursor l_cur_project_id2(c_task_version_id NUMBER) is
37596 select ppev.project_id, ppev.proj_element_id
37597 from pa_proj_element_versions ppev
37598 where ppev.element_version_id = c_task_version_id;
37599 
37600 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
37601 select ppa.project_id
37602 from pa_projects_all ppa
37603 where pm_project_reference = c_sub_project_reference
37604 and ppa.project_id = c_sub_project_id;
37605 
37606 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
37607 select ppa.project_id
37608 from pa_projects_all ppa
37609 where pm_project_reference = c_sub_project_reference;
37610 
37611 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
37612 select ppa.project_id
37613 from pa_projects_all ppa
37614 where ppa.project_id = c_sub_project_id;
37615 
37616 l_program_name          VARCHAR2(30)            := NULL;
37617 l_project_name          VARCHAR2(30)            := NULL;
37618 l_task_name 		VARCHAR2(30)		:= NULL;
37619 
37620 l_msg_index_out     	NUMBER                  := NULL;
37621 l_return_status         VARCHAR2(1)             := NULL;
37622 l_msg_count             NUMBER                  := NULL;
37623 l_msg_data              VARCHAR2(2000)          := NULL;
37624 
37625 begin
37626 
37627 -- Establish the save point.
37628 savepoint DELETE_PROGRAM_LINK_AMG;
37629 
37630 --  Initialize the message table if requested.
37631 if FND_API.TO_BOOLEAN(p_init_msg_list) then
37632        FND_MSG_PUB.initialize;
37633 end if;
37634 
37635 --  Standard call to check for API compatibility.
37636 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
37637         raise FND_API.G_EXC_UNEXPECTED_ERROR;
37638 end if;
37639 
37640 -- Initialize the return status
37641 x_return_status := FND_API.G_RET_STS_SUCCESS;
37642 
37643 -- If object relationship id is not passed in.
37644 if ((p_object_relationship_id is null)
37645      or (p_object_relationship_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37646 
37647 	-- If task version id is not passed in.
37648 	if ((p_task_version_id is null)
37649      	     or (p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37650 
37651         	-- Convert parent project reference to id.
37652                 PA_PROJECT_PVT.Convert_pm_projref_to_id
37653                 (p_pm_project_reference       =>     p_pm_parent_project_reference
37654                 , p_pa_project_id             =>     p_parent_project_id
37655                 , p_out_project_id            =>     l_parent_project_id
37656                 , p_return_status             =>     l_return_status);
37657 
37658                 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37659                 	raise FND_API.G_EXC_UNEXPECTED_ERROR;
37660                 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37661                 	raise FND_API.G_EXC_ERROR;
37662                 end if;
37663 
37664                 -- Convert task reference to id
37665                 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37666                 (p_pa_project_id        => l_parent_project_id
37667                 , p_pm_task_reference   => p_pm_task_reference
37668 		, p_pa_task_id          => p_task_id
37669                 , p_structure_type      => p_structure_type
37670                 , p_out_task_id         => l_task_id
37671                 , p_return_status       => l_return_status);
37672 
37673                 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37674                 	raise FND_API.G_EXC_UNEXPECTED_ERROR;
37675                 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37676                 	raise FND_API.G_EXC_ERROR;
37677                 end if;
37678 
37679 		-- Find the task version id in the current working workplan structure version.
37680 		open l_cur_task_ver_id(l_task_id, p_structure_type);
37681 		fetch l_cur_task_ver_id into l_task_version_id;
37682 		close l_cur_task_ver_id;
37683 
37684                 -- Validate that the task has a version in the specified structure type.
37685                 if (l_task_version_id is null) then
37686                 	PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
37687 			raise FND_API.G_EXC_ERROR;
37688                 end if;
37689 
37690 	-- If task version id is passed in.
37691 	else
37692 		l_task_version_id := p_task_version_id;
37693 
37694                 open l_cur_project_id2(l_task_version_id);
37695                 fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
37696                 if l_cur_project_id2%NOTFOUND then
37697                 	PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
37698                         raise FND_API.G_EXC_ERROR;
37699                 end if;
37700                 close l_cur_project_id2;
37701 
37702                 -- Validate the task id and project id of the task version id.
37703                 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37704                 (p_pa_project_id        => l_parent_project_id
37705                 , p_pa_task_id          => l_task_id
37706                 , p_structure_type      => p_structure_type
37707                 , p_out_task_id         => l_task_id
37708                 , p_return_status       => l_return_status);
37709 
37710                 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37711                         raise FND_API.G_EXC_UNEXPECTED_ERROR;
37712                 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37713                         raise FND_API.G_EXC_ERROR;
37714                 end if;
37715 
37716 	end if;
37717 
37718         -- Validate sub-project across organizations and convert sub-project reference to id.
37719         if (((p_pm_sub_project_reference is not null)
37720               and (p_pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37721             and ((p_sub_project_id is not null)
37722                   and (p_sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37723 
37724         	open l_cur_sub_proj1(p_pm_sub_project_reference, p_sub_project_id);
37725                 fetch l_cur_sub_proj1 into l_sub_project_id;
37726                 close l_cur_sub_proj1;
37727 
37728         elsif ((p_pm_sub_project_reference is not null)
37729                and (p_pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37730 
37731         	open l_cur_sub_proj2(p_pm_sub_project_reference);
37732                 fetch l_cur_sub_proj2 into l_sub_project_id;
37733                 close l_cur_sub_proj2;
37734 
37735         elsif ((p_sub_project_id is not null)
37736                and (p_sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37737 
37738         	open l_cur_sub_proj3(p_sub_project_id);
37739                 fetch l_cur_sub_proj3 into l_sub_project_id;
37740                 close l_cur_sub_proj3;
37741 
37742         else
37743 
37744                      l_sub_project_id := null;
37745 
37746         end if;
37747 
37748         if (l_sub_project_id is null) then
37749 
37750         	PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
37751                 raise FND_API.G_EXC_ERROR;
37752 
37753         end if;
37754 
37755 	open l_cur_por1(l_task_version_id, l_sub_project_id, p_structure_type);
37756 	fetch l_cur_por1 into l_object_relationship_id, l_record_version_number;
37757         if  l_cur_por1%NOTFOUND then
37758         	-- Program Link does not exist between the parent project and the sub-project.
37759 
37760         	open l_cur_prog_name(l_task_version_id);
37761                 fetch l_cur_prog_name into l_program_name;
37762                 close l_cur_prog_name;
37763 
37764                 open l_cur_proj_name(l_sub_project_id);
37765                 fetch l_cur_proj_name into l_project_name;
37766                 close l_cur_proj_name;
37767 
37768 		open l_cur_task_name(l_task_version_id);
37769 		fetch l_cur_task_name into l_task_name;
37770 		close l_cur_task_name;
37771 
37772                 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_LINK_EXISTS'
37773                                          ,'PROJ', l_project_name
37774                                          ,'PROG', l_program_name
37775                                          ,'TASK', l_task_name
37776                                          ,'STR', p_structure_type);
37777 
37778                  close l_cur_por1;
37779 
37780                  RAISE FND_API.G_EXC_ERROR;
37781         end if;
37782 
37783 	close l_cur_por1;
37784 
37785 -- If object relationship id is passed in.
37786 else
37787         open l_cur_por2(p_object_relationship_id);
37788       	fetch l_cur_por2 into l_object_relationship_id, l_record_version_number, l_parent_project_id;
37789         if l_cur_por2%NOTFOUND then
37790         	-- Invalid object_relationship_id.
37791 
37792         	PA_UTILS.ADD_MESSAGE('PA','PA_PS_INVALID_OBJ_REL_ID'
37793                                          ,'OBJRELID', p_object_relationship_id);
37794 
37795                 close l_cur_por2;
37796 
37797                 RAISE FND_API.G_EXC_ERROR;
37798         end if;
37799 
37800         close l_cur_por2;
37801 end if;
37802 
37803 -- Actions performed using the APIs are subject to function security.
37804 -- If the responsibility does not allow a function to be executed the API
37805 -- will error out as the user does not have access.
37806 if (p_structure_type = 'WORKPLAN'
37807     or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37808        	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37809        	(p_api_version_number   => p_api_version
37810        	, p_responsibility_id   => FND_GLOBAL.RESP_ID
37811        	, p_function_name       => 'PA_PAXPREPR_WP_LINK_PROJ'
37812        	, p_msg_count           => l_msg_count
37813        	, p_msg_data            => l_msg_data
37814        	, p_return_status       => l_return_status
37815        	, p_function_allowed    => l_function_allowed);
37816 
37817 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37818         	raise FND_API.G_EXC_UNEXPECTED_ERROR;
37819 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37820         	raise FND_API.G_EXC_ERROR;
37821 	end if;
37822 
37823         if l_function_allowed = 'N' then
37824                	pa_interface_utils_pub.map_new_amg_msg
37825                	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
37826                	, p_msg_attribute       => 'CHANGE'
37827                	, p_resize_flag         => 'Y'
37828                	, p_msg_context         => 'GENERAL'
37829                	, p_attribute1          => ''
37830                	, p_attribute2          => ''
37831                	, p_attribute3          => ''
37832                	, p_attribute4          => ''
37833                	, p_attribute5          => '');
37834 		raise FND_API.G_EXC_ERROR;
37835         end if;
37836 end if;
37837 
37838 if (p_structure_type = 'FINANCIAL'
37839     or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37840        	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37841        	(p_api_version_number   => p_api_version
37842        	, p_responsibility_id   => FND_GLOBAL.RESP_ID
37843        	, p_function_name       => 'PA_PAXPREPR_OPT_SUBPROJECTS'
37844        	, p_msg_count           => l_msg_count
37845        	, p_msg_data            => l_msg_data
37846        	, p_return_status       => l_return_status
37847        	, p_function_allowed    => l_function_allowed);
37848 
37849 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37850         	raise FND_API.G_EXC_UNEXPECTED_ERROR;
37851 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37852         	raise FND_API.G_EXC_ERROR;
37853 	end if;
37854 
37855        	if l_function_allowed = 'N' then
37856                	pa_interface_utils_pub.map_new_amg_msg
37857                	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
37858                	, p_msg_attribute       => 'CHANGE'
37859                	, p_resize_flag         => 'Y'
37860                	, p_msg_context         => 'GENERAL'
37861                	, p_attribute1          => ''
37862                	, p_attribute2          => ''
37863                	, p_attribute3          => ''
37864                	, p_attribute4          => ''
37865                	, p_attribute5          => '');
37866 		raise FND_API.G_EXC_ERROR;
37867        	end if;
37868 end if;
37869 
37870 -- Call the API to delete the sub-project association.
37871 PA_RELATIONSHIP_PUB.DELETE_SUBPROJECT_ASSOCIATION
37872 (p_api_version			=>	p_api_version
37873 , p_init_msg_list		=>	p_init_msg_list
37874 , p_commit			=>	p_commit
37875 , p_calling_module		=>	'AMG'
37876 , p_debug_mode			=>	p_debug_mode
37877 , p_max_msg_count		=>	p_max_msg_count
37878 , p_object_relationships_id	=>	l_object_relationship_id
37879 , p_record_version_number	=>	l_record_version_number
37880 , x_return_status	 	=>	l_return_status
37881 , x_msg_count	 		=>	l_msg_count
37882 , x_msg_data	 		=>	l_msg_data);
37883 
37884 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37885        	raise FND_API.G_EXC_UNEXPECTED_ERROR;
37886 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37887        	raise FND_API.G_EXC_ERROR;
37888 end if;
37889 
37890 -- Commit if p_commit = FND_API.G_TRUE.
37891 if (p_commit = FND_API.G_TRUE) then
37892         commit;
37893 end if;
37894 
37895 exception
37896 
37897    when FND_API.G_EXC_ERROR then
37898       rollback to DELETE_PROGRAM_LINK_AMG;
37899       x_return_status := FND_API.G_RET_STS_ERROR;
37900       x_msg_count := FND_MSG_PUB.count_msg;
37901 
37902       if x_msg_count = 1 then
37903            PA_INTERFACE_UTILS_PUB.get_messages
37904                (p_encoded        => FND_API.G_FALSE
37905                 , p_msg_index      => 1
37906                 , p_msg_count      => x_msg_count
37907                 , p_msg_data       => x_msg_data
37908                 , p_data           => x_msg_data
37909                 , p_msg_index_out  => l_msg_index_out);
37910      end if;
37911 
37912    when FND_API.G_EXC_UNEXPECTED_ERROR then
37913       rollback to DELETE_PROGRAM_LINK_AMG;
37914       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37915       x_msg_count := FND_MSG_PUB.count_msg;
37916 
37917       if x_msg_count = 1 then
37918            PA_INTERFACE_UTILS_PUB.get_messages
37919                (p_encoded        => FND_API.G_FALSE
37920                 , p_msg_index      => 1
37921                 , p_msg_count      => x_msg_count
37922                 , p_msg_data       => x_msg_data
37923                 , p_data           => x_msg_data
37924                 , p_msg_index_out  => l_msg_index_out);
37925      end if;
37926 
37927    when OTHERS then
37928       rollback to DELETE_PROGRAM_LINK_AMG;
37929       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37930       x_msg_count := 1;
37931       x_msg_data := SQLERRM;
37932       if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
37933                 FND_MSG_PUB.add_exc_msg
37934                 ( p_pkg_name            => G_PKG_NAME
37935                 , p_procedure_name      => l_api_name);
37936       end if;
37937 
37938 end DELETE_PROGRAM_LINK;
37939 
37940 -- Bug # 5072032.
37941 
37942 
37943 -- Bug 7525628
37944 PROCEDURE UPDATE_FINANCIAL_ATTRIBUTES
37945 (
37946  P_API_VERSION_NUMBER           IN  NUMBER,
37947  P_COMMIT                       IN  VARCHAR2,
37948  P_INIT_MSG_LIST                IN  VARCHAR2,
37949  P_PA_PROJECT_ID                IN  NUMBER,
37950  P_TASK_ID_TBL                  IN  SYSTEM.PA_NUM_TBL_TYPE,
37951  P_SERVICE_TYPE_CODE_TBL        IN  SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
37952  P_CHARGEABLE_FLAG_TBL          IN  SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
37953  P_BILLABLE_FLAG_TBL            IN  SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
37954  X_MSG_COUNT                    OUT NOCOPY NUMBER,
37955  X_MSG_DATA                     OUT NOCOPY VARCHAR2,
37956  X_RETURN_STATUS                OUT NOCOPY VARCHAR2
37957 )
37958 IS
37959 l_published_version             NUMBER(15);
37960 l_prev_published_version        NUMBER(15);
37961 l_new_task                      NUMBER(15);
37962 i                               NUMBER    := 0;
37963 l_api_name      CONSTANT        VARCHAR2(30)     := 'UPDATE_FINANCIAL_ATTRIBUTES';
37964 
37965 --cursor which fetches the previous published version
37966 cursor c_prev_published_version(p_pa_project_id IN NUMBER) is
37967 select element_version_id from (
37968   select element_version_id
37969         from pa_proj_elem_ver_structure ppevs,
37970              pa_proj_structure_types ppst
37971         where ppevs.latest_eff_published_flag = 'N'
37972                 and ppst.proj_element_id = ppevs.proj_element_id
37973                 and ppst.structure_type_id = 1
37974                 and ppevs.status_code = 'STRUCTURE_PUBLISHED'
37975                 and ppevs.project_id = p_pa_project_id
37976                 order by ppevs.published_date desc
37977         ) where rownum = 1;
37978 
37979 --cursor which fetches all tasks added as a result of last publish
37980 cursor c_newly_added_tasks(l_published_version IN NUMBER,l_prev_published_version IN NUMBER) is
37981 select proj_element_id
37982         from pa_proj_element_versions
37983         where   project_id = P_PA_PROJECT_ID
37984                 and object_type = 'PA_TASKS'
37985                 and PARENT_STRUCTURE_VERSION_ID = l_published_version
37986 MINUS
37987 select proj_element_id
37988         from pa_proj_element_versions
37989         where   project_id = P_PA_PROJECT_ID
37990                 and object_type = 'PA_TASKS'
37991                 and PARENT_STRUCTURE_VERSION_ID = l_prev_published_version;
37992 
37993 
37994 BEGIN
37995 
37996 l_published_version := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_pa_project_id);
37997 
37998 OPEN c_prev_published_version(p_pa_project_id);
37999 FETCH c_prev_published_version INTO l_prev_published_version;
38000 CLOSE c_prev_published_version;
38001 
38002 FOR rec IN c_newly_added_tasks(l_published_version, l_prev_published_version) LOOP
38003     FOR i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
38004                 IF p_task_id_tbl(i) = rec.proj_element_id THEN
38005 
38006                   UPDATE pa_tasks
38007                     SET service_type_code = nvl(p_service_type_code_tbl(i),service_type_code),  --  7525628
38008                         chargeable_flag = nvl(p_chargeable_flag_tbl(i),chargeable_flag),  --  7525628
38009                         billable_flag = nvl(p_billable_flag_tbl(i),billable_flag) --  7525628
38010                     WHERE task_id = p_task_id_tbl(i);
38011                     EXIT;
38012 
38013 
38014                  END IF;
38015         END LOOP;
38016 END LOOP;
38017 
38018 x_return_status := FND_API.G_RET_STS_SUCCESS;
38019 
38020 EXCEPTION
38021 
38022   WHEN FND_API.G_EXC_ERROR THEN
38023 
38024   x_return_status  := FND_API.G_RET_STS_ERROR;
38025 
38026 
38027  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
38028 
38029  x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38030 
38031   WHEN OTHERS THEN
38032 
38033   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38034 
38035   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
38036   THEN
38037     FND_MSG_PUB.add_exc_msg
38038         ( p_pkg_name    => G_PKG_NAME
38039         , p_procedure_name  => l_api_name  );
38040 
38041   END IF;
38042 
38043 END UPDATE_FINANCIAL_ATTRIBUTES;
38044 --End of fix for Bug 7525628
38045 
38046 
38047 end PA_PROJECT_PUB;