DBA Data[Home] [Help]

PACKAGE BODY: APPS.PA_PROJECT_PUB

Source


1 PACKAGE BODY pa_project_pub AS
2 /* $Header: PAPMPRPB.pls 120.125.12020000.10 2013/05/20 13:39:22 djambhek 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    t_adj_on_std_inv varchar2(2);
382 
383    CURSOR l_check_org_csr(c_customer_id IN NUMBER)  IS
384    SELECT PARTY_ID
385    FROM PA_CUSTOMERS_V
386    WHERE CUSTOMER_ID = c_customer_id
387    AND   PARTY_TYPE = 'ORGANIZATION';
388 
389    --Project Structures
390    l_structure_in_rec             structure_in_rec_type;
391    v_task_id                      NUMBER;
392    v_parent_task_id               NUMBER;
393    l_amg_segment1       VARCHAR2(25);
394    l_amg_task_number       VARCHAR2(50);
395    l_task_version_id        NUMBER;
396    l_delta                  NUMBER;
397    --Project Structures
398 
399    --proj conn
400    v_first_index            NUMBER;
401    l_ref_task_id     NUMBER;
402    --proj conn
403 
404    -- <EA>
405    l_failed_row_id_list VARCHAR2(32767);
406    l_errorcode      VARCHAR2(150);
407    -- </EA>
408 
409    --Bug 2931183
410    l_debug_mode               varchar2(1);
411    g_module_name              VARCHAR2(100) := 'pa.plsql.CREATE_PROJECT';
412 
413   /* Bug 3077676 */
414    l_cust_acc_rel_code pa_implementations.cust_acc_rel_code%TYPE;
415    CURSOR get_cust_acc_rel_code IS
416    Select cust_acc_rel_code
417    From pa_implementations;
418 
419 -- FP-M Bug # 3301192
420    l_d_task_ver_id NUMBER;
421    l_d_task_id NUMBER;
422    l_d_structure_version_id NUMBER;
423    l_d_loop_count NUMBER;
424 
425    l_deliverable_id NUMBER; -- 3435905
426    i_actn           NUMBER := 0; -- 3435905
427 
428 --Begin Add by rtarway for FP.M Set Financial Task Changes
429    l_patask_record_version_number NUMBER;
430 --End Add by rtarway for FP.M Set Financial Task Changes
431 
432 --Bug 3279981
433      CURSOR cur_get_orig_tt_cust_flag( c_project_id IN NUMBER ) IS
434      SELECT enable_top_task_customer_flag
435      FROM   pa_projects_all
436      WHERE  project_id = c_project_id ;
437 
438      l_orig_def_tt_flag VARCHAR2(1);
439      l_cust_bill_split  NUMBER;
440      l_def_tt_cust_flag VARCHAR2(1);
441      l_en_top_task_customer_flag VARCHAR2(1);
442      l_en_top_task_inv_mth_flag  VARCHAR2(1);
443 
444 
445 
446 --Bug 3279981
447 l_dup_name_flag VARCHAR2(1); --bug 2450064
448 
449 l1 number;
450 l2 varchar2(1);
451 l3 number;
452 l4 varchar2(1);
453 
454 l_in_customer_id NUMBER; -- Added for the bug 3825528
455 
456 l_bug_wp_enabled  VARCHAR2(1); -- Bug 4146369
457 l_bug_fp_enabled  VARCHAR2(1); -- Bug 4146369
458 
459 /* Start of code for bug #2111806 */
460 
461 -- Start of Bug fix 4878696
462 -- Commented this cursor for Performance Bug 4878696
463 -- CURSOR c_prj(c_project_id IN NUMBER ) IS
464 -- select project_system_status_code
465 --    ,project_type_class_code
466 -- from pa_projects_v
467 -- where project_id = c_project_id;
468 
469 -- Added the following cursor instead of the commented one as above for Performance Bug 4878696
470 CURSOR c_prj(c_project_id IN NUMBER ) IS
471 select PROJECT_SYSTEM_STATUS_CODE , PROJECT_TYPE_CLASS_CODE
472        from pa_projects_all ppa,pa_project_statuses pps,pa_project_types ppt
473 where ppa.project_id = c_project_id
474   and ppa.PROJECT_STATUS_CODE = pps.PROJECT_STATUS_CODE
475   and ppa.PROJECT_TYPE = ppt.PROJECT_TYPE
476   and pps.STATUS_TYPE = 'PROJECT'
477   and ppt.ORG_ID= ppa.ORG_ID ;
478 
479 -- End of Bug fix 4878696
480 
481 CURSOR c_prj_count(c_project_id IN NUMBER ) IS
482 select count(*)
483   from pa_project_players
484  where project_id = c_project_id
485    and project_role_type='PROJECT MANAGER';
486 
487 l_proj_status       pa_projects_all.project_status_code%TYPE;
488 l_proj_type_class       pa_project_types_all.project_type_class_code%TYPE;
489 l_prj_mgr_count         NUMBER;
490 /* End of code for bug #2111806. */
491 
492 -- 4193743 Added below local variables
493 l_bill_to_customer_id NUMBER;
494 l_ship_to_customer_id NUMBER;
495 l_enable_top_task_cust_flag  VARCHAR2(1)    := 'N'; --added for tracking bug  by aditi
496 l_project_relationship_code PA_PROJECT_CUSTOMERS.PROJECT_RELATIONSHIP_CODE%TYPE; --Variable added by aditi for tracking bug
497 
498 -- 5191417 Added below cursor to validate priority_code
499 
500 l_valid_prio_code VARCHAR2(1) := 'N';
501 
502 CURSOR priority_code_csr(p_priority_code IN VARCHAR2) IS
503 Select
504         'Y'
505 from
506         pa_lookups
507 where
508         lookup_type = 'PA_PROJECT_PRIORITY_CODE'
509    and  lookup_code = p_priority_code ;
510 
511 -- 5191417 end
512 
513                                           /* Added for 12.2Payroll billing ER 11899223 */
514 task_adj_on_std_inv varchar2(1) :='N';
515 
516   Cursor c_adj_on_std_inv (p_adj_on_std_inv IN VARCHAR2)
517   Is
518   Select 'X'
519   from pa_lookups
520   where lookup_type='PA_ADJ_ON_STD_INV'
521   and lookup_code = p_adj_on_std_inv;
522 
523                                   /* Added for 12.2Payroll billing ER 11899223 */
524 -- Bug#5191699. Added the cursor and the local variable below for validating
525 --              project security level.This can be either 'Enterprise' or 'Secured'.
526 
527 l_check_sec_level       VARCHAR2(1) := 'N';
528 
529 CURSOR cur_check_sec_level(p_proj_sec_level IN VARCHAR2 ) IS
530 SELECT 'Y'  FROM
531 dual
532 WHERE EXISTS
533         (SELECT NULL FROM pa_lookups
534          WHERE
535                 lookup_type     =       'PA_PROJECT_ACCESS_LEVEL' AND
536                 lookup_code     =       p_proj_sec_level
537         );
538 -- End of code changes for Bug#5191699 in declare section
539 
540 --Bug#5191521.  Added the cursor and the local variable below for validating
541 --              probability member id.
542 
543 l_check_prob_id VARCHAR2(1) := 'N';
544 
545 CURSOR  cur_validate_prob_member( p_project_id IN NUMBER ,p_probability_member_id IN NUMBER )
546 IS
547 SELECT 'Y' FROM dual
548 WHERE  EXISTS
549         (
550                 SELECT
551                 NULL
552                 FROM
553                         pa_probability_members ppm,
554                         pa_projects pp,
555                         pa_project_types ppt
556                 WHERE
557                         pp.project_type                 =       ppt.project_type AND
558                         pp.org_id                       =       ppt.org_id AND
559                         ppt.probability_list_id         =       ppm.probability_list_id AND
560                         pp.project_id                   =       p_project_id AND
561                         ppm.probability_member_id       =       p_probability_member_id AND
562                         trunc(sysdate) BETWEEN ppm.start_date_active AND nvl(ppm.end_date_active,trunc(sysdate))
563         );
564 --End of code changes for Bug#5191521 in declare section
565 
566 
567     --sunkalya:federal bug#5511353
568      l_date_eff_funds_flag VARCHAR2(1);
569      l_orig_date_eff_funds_flag VARCHAR2(1);
570      CURSOR get_date_eff_funds_flag( c_project_id IN NUMBER )
571      IS
572      SELECT
573      nvl(DATE_EFF_FUNDS_CONSUMPTION,'N')
574      FROM
575      pa_projects_all
576      WHERE project_id = c_project_id ;
577 
578      /* 7508661 : EnC : Start */
579 
580      l_ar_rec_notify_flag VARCHAR2(1);
581      l_orig_ar_rec_notify_flag VARCHAR2(1);
582 
583      CURSOR get_ar_rec_notify_flag( c_project_id IN NUMBER )
584      IS
585      SELECT
586      nvl(AR_REC_NOTIFY_FLAG,'N')
587      FROM
588      pa_projects_all
589      WHERE project_id = c_project_id ;
590                                 /* Added for 12.2Payroll billing ER 11899223 */
591      l_auto_release_pwp_inv VARCHAR2(1);
592      l_orig_auto_release_pwp_inv VARCHAR2(1);
593 
594        l_bill_labor_accrual VARCHAR2(1);
595      l_orig_bill_labor_accrual  VARCHAR2(1);
596           l_adj_on_std_inv VARCHAR2(2);
597      l_orig_adj_on_std_inv  VARCHAR2(2);
598           CURSOR get_adj_on_std_inv( c_project_id IN NUMBER )
599      IS
600      SELECT
601      nvl(adj_on_std_inv,'N')
602      FROM
603      pa_projects_all
604      WHERE project_id = c_project_id ;
605 
606           CURSOR get_bill_labor_accrual( c_project_id IN NUMBER )
607      IS
608      SELECT
609      nvl(bill_labor_accrual,'N')
610      FROM
611      pa_projects_all
612      WHERE project_id = c_project_id ;
613 
614                           /* Added for 12.2Payroll billing ER 11899223 */
615      CURSOR get_auto_release_pwp_inv( c_project_id IN NUMBER )
616      IS
617      SELECT
618      nvl(AUTO_RELEASE_PWP_INV,'Y')
619      FROM
620      pa_projects_all
621      WHERE project_id = c_project_id ;
622 
623      /* 7508661 : EnC : End */
624 
625 	CURSOR cur_enable_funds_flag(p_project_id IN VARCHAR2)
626 	IS
627 	SELECT 'Y'
628 	FROM
629 	pa_projects_all p,
630 	pa_project_types_all pt
631 	WHERE
632 	p.project_id			=	p_project_id	AND
633 	pt.project_type_class_code	=	'CONTRACT'	AND
634 	p.project_type			=	pt.project_type AND
635 	pt.CC_PRVDR_FLAG		=	'N'		AND
636 	p.org_id			=	pt.org_id;
637 
638 
639 	l_enable_funds_flag	VARCHAR2(1);
640 
641 /*	CURSOR cur_rev_inv(p_project_id IN VARCHAR2)
642 	IS
643 	SELECT 'Y'
644 	FROM dual
645 	WHERE EXISTS
646 		(SELECT  NULL
647 		 FROM
648 		 pa_draft_revenues r
649 		 WHERE
650 		 r.project_id		=	p_project_id
651 		)
652 	OR EXISTS
653 		(SELECT  NULL
654 		 FROM
655 		 pa_draft_invoices i
656 		 WHERE
657 		 i.project_id		=	p_project_id
658 		);
659 	l_chk_rev_inv_flag	VARCHAR2(1) := NULL;
660 
661 */
662 	CURSOR chk_task_level_funding(p_project_id IN VARCHAR2)
663 	IS
664 	SELECT 'Y'
665 	FROM sys.dual
666 	WHERE exists
667 		(	select 1
668 			from  pa_summary_project_fundings
669 			where project_id = p_project_id
670 			and task_id is not null
671 		);
672 
673 	l_chk_task_level_funding VARCHAR2(1) := NULL;
674 
675 	CURSOR count_cust(p_project_id IN VARCHAR2)
676 	IS
677 	SELECT count(*)
678 	FROM pa_project_customers
679 	WHERE project_id =  p_project_id;
680 
681 	l_count_cust	NUMBER := 0;  -- bug# 12972554, Changed datatype of l_count_cust from VARCHAR2(1) TO NUMBER.
682 
683      --sunkalya:federal bug#5511353
684 
685  /* Adding new cursor for bug 6408593 */
686 
687  CURSOR c_prj_key_role_type(c_key_role_meaning IN VARCHAR) IS
688  select project_role_type
689  from pa_project_role_types_vl
690  where meaning like c_key_role_meaning;
691 
692 /*Added for bug 7830143*/
693 CURSOR c_get_org_id(c_project_id NUMBER) IS
694 select org_id
695 from pa_projects_all
696 where project_id = c_project_id;
697 
698 l_org_id NUMBER ;
699 /*Added for bug 7830143*/
700 
701 
702 l_mapped_task_id   NUMBER;
703 /*  added for bug 9491704 - */
704 
705 
706 BEGIN
707 
708 --  Standard begin of API savepoint
709 
710     SAVEPOINT create_project_pub;
711 
712     l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
713 --  Standard call to check for call compatibility.
714 
715 
716     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
717                                p_api_version_number  ,
718                                l_api_name         ,
719                                G_PKG_NAME         )
720     THEN
721 
722   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
723 
724     END IF;
725 
726 
727      l_resp_id := FND_GLOBAL.Resp_id;
728 
729 
730 --Bug#5559292
731 
732 G_PROJECT_NUMBER_GEN_MODE := PA_PROJECT_UTILS.GetProjNumMode;
733 G_PROJECT_NUMBER_TYPE     := PA_PROJECT_UTILS.GetProjNumType;
734 
735 --Bug#5559292
736 
737 
738     -- Actions performed using the APIs would be subject to
739     -- function security. If the responsibility does not allow
740     -- such functions to be executed, the API should not proceed further
741     -- since the user does not have access to such functions
742 
743     PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := null;  --bug 2471668 ( not in the project context )
744 
745     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
746       (p_api_version_number => p_api_version_number,
747        p_responsibility_id  => l_resp_id,
748        p_function_name      => 'PA_PM_CREATE_PROJECT',
749        p_msg_count      => l_msg_count,
750        p_msg_data           => l_msg_data,
751        p_return_status      => l_return_status,
752        p_function_allowed   => l_function_allowed
753        );
754 
755 
756      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
757       THEN
758       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
759 
760       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
761       THEN
762       RAISE FND_API.G_EXC_ERROR;
763       END IF;
764         IF l_function_allowed = 'N' THEN
765          pa_interface_utils_pub.map_new_amg_msg
766            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
767             ,p_msg_attribute    => 'CHANGE'
768             ,p_resize_flag      => 'Y'
769             ,p_msg_context      => 'GENERAL'
770             ,p_attribute1       => ''
771             ,p_attribute2       => ''
772             ,p_attribute3       => ''
773             ,p_attribute4       => ''
774             ,p_attribute5       => '');
775      p_project_out.return_status := FND_API.G_RET_STS_ERROR;
776      RAISE FND_API.G_EXC_ERROR;
777         END IF;
778 
779 
780     --  Initialize the message table if requested.
781 
782     IF FND_API.TO_BOOLEAN( p_init_msg_list )
783     THEN
784 
785   FND_MSG_PUB.initialize;
786 
787     END IF;
788 
789     --  Set API return status to success
790 
791     p_return_status     := FND_API.G_RET_STS_SUCCESS;
792     p_project_out.return_status := FND_API.G_RET_STS_SUCCESS;
793 
794 -- 22-DEC-97, jwhite:
795 --  Initialize New OUT-parameter to indicate workflow status
796 
797 -- Set Worflow Started Status -------------------------------------------------
798 
799     p_workflow_started    := 'N';
800 -- ------------------------------------------------------------------------------------
801 
802 
803 
804     --Move incoming project record to a local project record
805     --Needs to be done to change incoming values to default values
806 
807     l_project_in_rec := p_project_in;
808 
809     --project structures
810     l_structure_in_rec := p_structure_in;
811     --project structures
812 
813 --Added by rtarway for BUG 3703440, 3717026: Populate Global Structure Type Record
814     G_structure_in_rec.pa_project_id                  := l_structure_in_rec.pa_project_id;
815     G_structure_in_rec.structure_type                 := l_structure_in_rec.structure_type;
816     G_structure_in_rec.structure_version_name         := l_structure_in_rec.structure_version_name;
817     G_structure_in_rec.structure_version_id           := l_structure_in_rec.structure_version_id;
818     G_structure_in_rec.DESCRIPTION                    := l_structure_in_rec.DESCRIPTION;
819 --End Add by rtarway for BUG 3703440, 3717026
820 
821 
822 
823     -- CHECK FOR MANDATORY FIELDS
824     -- check whether mandatory incoming parameters exist
825     -- some of the fields for projects are checked by procedure COPY_PROJECT
826 --bug 2841158
827 --    IF p_pm_product_code IS NULL
828 --    OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
829     IF p_pm_product_code IS NOT NULL
830     AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
831 --bug 2841158
832     THEN
833 
834   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
835   THEN
836          pa_interface_utils_pub.map_new_amg_msg
837            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
838             ,p_msg_attribute    => 'CHANGE'
839             ,p_resize_flag      => 'N'
840             ,p_msg_context      => 'GENERAL'
841             ,p_attribute1       => ''
842             ,p_attribute2       => ''
843             ,p_attribute3       => ''
844             ,p_attribute4       => ''
845             ,p_attribute5       => '');
846   END IF;
847   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
848   p_return_status             := FND_API.G_RET_STS_ERROR;
849   RAISE FND_API.G_EXC_ERROR;
850     END IF;
851 
852 --bug 2841158
853     IF p_pm_product_code <> 'WORKPLAN'
854        AND p_pm_product_code IS NOT NULL
855        AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
856     THEN
857 --bug 2841158
858           /*added for bug no :2413400*/
859         OPEN p_product_code_csr (p_pm_product_code);
860         FETCH p_product_code_csr INTO l_pm_product_code;
861         CLOSE p_product_code_csr;
862 
863         IF l_pm_product_code <> 'X'
864         THEN
865 
866         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
867         THEN
868          pa_interface_utils_pub.map_new_amg_msg
869            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
870             ,p_msg_attribute    => 'CHANGE'
871             ,p_resize_flag      => 'N'
872             ,p_msg_context      => 'GENERAL'
873             ,p_attribute1       => ''
874             ,p_attribute2       => ''
875             ,p_attribute3       => ''
876             ,p_attribute4       => ''
877             ,p_attribute5       => '');
878         END IF;
879         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
880         p_return_status             := FND_API.G_RET_STS_ERROR;
881         RAISE FND_API.G_EXC_ERROR;
882         END IF;
883     END IF; --bug 2841158
884 
885     IF l_project_in_rec.pm_project_reference IS NULL
886     OR l_project_in_rec.pm_project_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
887     THEN
888 
889   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
890   THEN
891          pa_interface_utils_pub.map_new_amg_msg
892            ( p_old_message_code => 'PA_PROJECT_REF_IS_MISSING'
893             ,p_msg_attribute    => 'CHANGE'
894             ,p_resize_flag      => 'N'
895             ,p_msg_context      => 'PROJ'
896             ,p_attribute1       => l_project_in_rec.pm_project_reference
897             ,p_attribute2       => ''
898             ,p_attribute3       => ''
899             ,p_attribute4       => ''
900             ,p_attribute5       => '');
901   END IF;
902   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
903   p_return_status             := FND_API.G_RET_STS_ERROR;
904   RAISE FND_API.G_EXC_ERROR;
905     END IF;
906 
907     IF l_project_in_rec.project_name IS NULL
908     OR l_project_in_rec.project_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
909     THEN
910 
911   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
912   THEN
913          pa_interface_utils_pub.map_new_amg_msg
914            ( p_old_message_code => 'PA_PROJECT_NAME_IS_MISSING'
915             ,p_msg_attribute    => 'CHANGE'
916             ,p_resize_flag      => 'N'
917             ,p_msg_context      => 'PROJ'
918             ,p_attribute1       => l_project_in_rec.pm_project_reference
919             ,p_attribute2       => ''
920             ,p_attribute3       => ''
921             ,p_attribute4       => ''
922             ,p_attribute5       => '');
923   END IF;
924   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
925   p_return_status             := FND_API.G_RET_STS_ERROR;
926   RAISE FND_API.G_EXC_ERROR;
927     END IF;
928 
929 -- Ensure that Project name is unique
930 
931     IF  pa_project_utils.check_unique_project_name
932                  (l_project_in_rec.project_name,
933                   NULL ) = 0 THEN
934   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
935   THEN
936          pa_interface_utils_pub.map_new_amg_msg
937            ( p_old_message_code => 'PA_PR_EPR_PROJ_NAME_NOT_UNIQUE'
938             ,p_msg_attribute    => 'CHANGE'
939             ,p_resize_flag      => 'Y'
940             ,p_msg_context      => 'ADDP'
941             ,p_attribute1       => l_project_in_rec.pm_project_reference
942             ,p_attribute2       => ''
943             ,p_attribute3       => ''
944             ,p_attribute4       => ''
945             ,p_attribute5       => '');
946   END IF;
947   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
948   p_return_status             := FND_API.G_RET_STS_ERROR;
949   RAISE FND_API.G_EXC_ERROR;
950   /*Adding for the bug 2450064*/
951 ELSE
952   pjm_seiban_pkg.project_name_dup(l_project_in_rec.project_name,l_dup_name_flag);
953 
954   IF l_dup_name_flag = 'Y' THEN
955         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
956   THEN
957          pa_interface_utils_pub.map_new_amg_msg
958            ( p_old_message_code => 'PA_SEIBAN_NAME_NOT_UNIQUE'
959             ,p_msg_attribute    => 'CHANGE'
960             ,p_resize_flag      => 'Y'
961             ,p_msg_context      => 'ADDP'
962             ,p_attribute1       => l_project_in_rec.pm_project_reference
963             ,p_attribute2       => ''
964             ,p_attribute3       => ''
965             ,p_attribute4       => ''
966             ,p_attribute5       => '');
967   END IF;
968   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
969   p_return_status             := FND_API.G_RET_STS_ERROR;
970   RAISE FND_API.G_EXC_ERROR;
971   END IF;
972   /*Adding for the bug 2450064*/
973     END IF;
974 
975 -- Bug#2638968 Ensure that Long name is unique
976   IF l_project_in_rec.long_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
977      AND l_project_in_rec.long_name IS NOT NULL THEN
978     IF  pa_project_utils.check_unique_long_name
979                  (l_project_in_rec.long_name,
980                   NULL ) = 0 THEN
981         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
982         THEN
983          pa_interface_utils_pub.map_new_amg_msg
984            ( p_old_message_code => 'PA_PR_EPR_LONG_NAME_NOT_UNIQUE'
985             ,p_msg_attribute    => 'CHANGE'
986             ,p_resize_flag      => 'Y'
987             ,p_msg_context      => 'ADDP'
988             ,p_attribute1       => l_project_in_rec.pm_project_reference
989             ,p_attribute2       => ''
990             ,p_attribute3       => ''
991             ,p_attribute4       => ''
992             ,p_attribute5       => '');
993         END IF;
994         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
995         p_return_status             := FND_API.G_RET_STS_ERROR;
996         RAISE FND_API.G_EXC_ERROR;
997     END IF;
998   END IF;
999 
1000   -- bug#3014919: Ensure Project Reference is unique
1001   IF l_project_in_rec.pm_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1002      AND l_project_in_rec.pm_project_reference IS NOT NULL THEN
1003      IF  pa_project_utils.check_unique_project_reference
1004                     (l_project_in_rec.pm_project_reference,
1005                      p_pm_product_code,  -- added for bug 4870305
1006                      NULL ) = 0
1007      THEN
1008         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1009         THEN
1010             pa_interface_utils_pub.map_new_amg_msg
1011               ( p_old_message_code => 'PA_PROJECT_REF_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     END IF;
1025   END IF;
1026 
1027 -- Check for implementation defined Project number generation mode
1028 -- If project number generation is manual then input project
1029 -- reference would be copied to project number
1030 -- Hence, need to ensure that this is unique
1031 -- First check whether a project number is passed.If so , use that
1032 -- else use the project reference
1033 
1034   IF (l_project_in_rec.pa_project_number IS NOT NULL AND
1035      l_project_in_rec.pa_project_number <>
1036      PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  THEN
1037      l_create_project_number := l_project_in_rec.pa_project_number;
1038   ELSE
1039      l_create_project_number := l_project_in_rec.pm_project_reference;
1040   END IF;
1041 
1042 
1043   IF G_PROJECT_NUMBER_GEN_MODE = 'MANUAL' THEN
1044       IF  pa_project_utils.check_unique_project_number
1045           (l_create_project_number,
1046            NULL ) = 0 THEN
1047   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1048          pa_interface_utils_pub.map_new_amg_msg
1049            ( p_old_message_code => 'PA_PR_EPR_PROJ_NUM_NOT_UNIQUE'
1050             ,p_msg_attribute    => 'CHANGE'
1051             ,p_resize_flag      => 'Y'
1052             ,p_msg_context      => 'ADDP'
1053             ,p_attribute1       => l_project_in_rec.pm_project_reference
1054             ,p_attribute2       => ''
1055             ,p_attribute3       => ''
1056             ,p_attribute4       => ''
1057             ,p_attribute5       => '');
1058   END IF;
1059   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1060   p_return_status             := FND_API.G_RET_STS_ERROR;
1061   RAISE FND_API.G_EXC_ERROR;
1062       /*Adding for the bug 2450064*/
1063   ELSE
1064     pjm_seiban_pkg.project_number_dup(l_create_project_number,l_dup_name_flag);
1065 
1066     IF l_dup_name_flag = 'Y' THEN
1067           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1068     THEN
1069            pa_interface_utils_pub.map_new_amg_msg
1070              ( p_old_message_code => 'PA_SEIBAN_NUM_NOT_UNIQUE'
1071               ,p_msg_attribute    => 'CHANGE'
1072               ,p_resize_flag      => 'Y'
1073               ,p_msg_context      => ' '
1074               ,p_attribute1       => l_project_in_rec.pm_project_reference
1075               ,p_attribute2       => ''
1076               ,p_attribute3       => ''
1077               ,p_attribute4       => ''
1078               ,p_attribute5       => '');
1079     END IF;
1080     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1081     p_return_status             := FND_API.G_RET_STS_ERROR;
1082         RAISE FND_API.G_EXC_ERROR;
1083   END IF;
1084   /*Adding for the bug 2450064*/
1085       END IF;
1086       -- Check for project number being numeric if project number type is
1087       -- defined as numeric
1088 
1089          BEGIN
1090           IF G_PROJECT_NUMBER_TYPE = 'NUMERIC' THEN
1091              l_proj_num_numeric  :=
1092                TO_NUMBER(l_create_project_number);
1093           END IF;
1094          EXCEPTION
1095           WHEN VALUE_ERROR THEN
1096       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1097           pa_interface_utils_pub.map_new_amg_msg
1098            ( p_old_message_code => 'PA_PR_NUMERIC_NUM_REQ'
1099             ,p_msg_attribute    => 'CHANGE'
1100             ,p_resize_flag      => 'N'
1101             ,p_msg_context      => 'PROJ'
1102             ,p_attribute1       => l_project_in_rec.pm_project_reference
1103             ,p_attribute2       => ''
1104             ,p_attribute3       => ''
1105             ,p_attribute4       => ''
1106             ,p_attribute5       => '');
1107       END IF;
1108       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1109       p_return_status             := FND_API.G_RET_STS_ERROR;
1110       RAISE FND_API.G_EXC_ERROR;
1111          END ;
1112   END IF;
1113 
1114     IF l_project_in_rec.created_from_project_id IS NULL
1115     OR l_project_in_rec.created_from_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1116     THEN
1117 
1118           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1119           THEN
1120                  pa_interface_utils_pub.map_new_amg_msg
1121                    ( p_old_message_code => 'PA_SOURCE_TEMPLATE_IS_MISSING'
1122                     ,p_msg_attribute    => 'CHANGE'
1123                     ,p_resize_flag      => 'Y'
1124                     ,p_msg_context      => 'PROJ'
1125                     ,p_attribute1       => l_project_in_rec.pm_project_reference
1126                     ,p_attribute2       => ''
1127                     ,p_attribute3       => ''
1128                     ,p_attribute4       => ''
1129                     ,p_attribute5       => '');
1130           END IF;
1131           p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1132           RAISE FND_API.G_EXC_ERROR;
1133     END IF;
1134 
1135     -- mandatory fields for tasks is checked here
1136 
1137 /*Added for bug 7830143*/
1138             OPEN c_get_org_id(l_project_in_rec.created_from_project_id);
1139 	    FETCH c_get_org_id INTO l_org_id;
1140 	    CLOSE c_get_org_id;
1141 
1142 	    IF NVL(PA_MOAC_UTILS.GET_CURRENT_ORG_ID,-1234) <>  l_org_id THEN
1143 		PA_MOAC_UTILS.SET_POLICY_CONTEXT('S', l_org_id);
1144 	    END IF;
1145 /*Added for bug 7830143*/
1146 
1147      -- code addition for bug 2254661 starts
1148         Open l_temp_flag_csr(l_project_in_rec.created_from_project_id);
1149         FETCH l_temp_flag_csr INTO l_temp_flag;
1150         IF l_temp_flag_csr%NOTFOUND
1151         THEN
1152                CLOSE l_temp_flag_csr;
1153                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1154                THEN
1155                   pa_interface_utils_pub.map_new_amg_msg
1156                    ( p_old_message_code => 'PA_SOURCE_TEMPLATE_INVALID'
1157                     ,p_msg_attribute    => 'CHANGE'
1158                     ,p_resize_flag      => 'N'
1159                     ,p_msg_context      => 'PROJ'
1160                     ,p_attribute1       => l_project_in_rec.pm_project_reference
1161                     ,p_attribute2       => ''
1162                     ,p_attribute3       => ''
1163                     ,p_attribute4       => ''
1164                     ,p_attribute5       => '');
1165                 END IF;
1166                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1167                 RAISE FND_API.G_EXC_ERROR;
1168         END IF;
1169         CLOSE l_temp_flag_csr;
1170 
1171      if l_temp_flag = 'Y' then
1172 
1173         -- 5182868 Validate the template for effectiveness
1174 
1175         Open l_temp_eff_flag_csr(l_project_in_rec.created_from_project_id);
1176         FETCH l_temp_eff_flag_csr INTO l_temp_eff_flag;
1177         CLOSE l_temp_eff_flag_csr;
1178 
1179         -- if template is inactive then throw error message
1180 
1181         IF l_temp_eff_flag = 'N' THEN
1182 
1183                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1184 
1185                 pa_utils.add_message
1186                  (
1187                    p_app_short_name   => 'PA'
1188                   ,p_msg_name         => 'PA_TEMPLATE_NOT_ACTIVE'
1189                  );
1190 
1191                 END IF;
1192 
1193                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1194                 RAISE FND_API.G_EXC_ERROR;
1195 
1196         END IF;
1197 
1198         -- 5182868 end
1199 
1200         l_created_from_proj_id := l_project_in_rec.created_from_project_id;
1201      else
1202         select created_from_project_id into l_created_from_proj_id
1203         from pa_projects_all
1204         where project_id = l_project_in_rec.created_from_project_id;
1205      end if;
1206     --code addition for bug 2254661 ends
1207 
1208 
1209     --CHECK FOR OVERRIDABILITY
1210     --get all the overridable fields for this project template source
1211     --changed the argument to the cursor below for bug 2254661
1212     OPEN l_override_fields_csr(l_created_from_proj_id);
1213     i := 0;
1214     LOOP
1215       i := i + 1;
1216       FETCH l_override_fields_csr INTO l_override_fields_rec;
1217       EXIT WHEN l_override_fields_csr%NOTFOUND;
1218       l_override_fields_tab(i) := l_override_fields_rec;
1219 
1220     END LOOP;
1221     i := 0;
1222     CLOSE l_override_fields_csr;
1223 
1224 ----dbms_output.put_line('Checking for Customer Overridability');
1225 --example of how to check for overridability
1226 /*
1227     ELSE
1228       l_is_overridable := FALSE;
1229   i := l_override_fields_tab.first;
1230   WHILE i IS NOT NULL LOOP
1231     IF l_override_fields_tab(i).pa_field_name = 'DESCRIPTION'
1232     THEN
1233       l_is_overridable := TRUE;
1234       EXIT;
1235     END IF;
1236     i := l_override_fields_tab.next(i);
1237   END LOOP;
1238 
1239   IF NOT l_is_overridable
1240   THEN
1241       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1242       THEN
1243         FND_MESSAGE.SET_NAME('PA','PA_DESCRIPTION_NOT_OVERRIDABLE');
1244         FND_MSG_PUB.add;
1245       END IF;
1246 
1247       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1248       RAISE FND_API.G_EXC_ERROR;
1249   END IF;
1250 */
1251 /* Code below is added for Customer Issue tracking bug. Customer Can still continue to project_in_rec_type to insert customers
1252   or can use the new record type for the same. However he cannot use both together in the same script*/
1253   ----dbms_output.put_line('Checking for Customer Overridability -- print till here ');
1254 ----dbms_output.put_line('value of l_project_in_rec.customer_id'||l_project_in_rec.customer_id);
1255 ------dbms_output.put_line('value of p_customers_in(1).customer_id'||p_customers_in(1).customer_id);
1256 
1257 i := p_customers_in.first;
1258 ----dbms_output.put_line('value of i'||i);
1259 IF NOT(p_customers_in.exists(i)) THEN
1260  If l_project_in_rec.customer_id IS NOT NULL Then
1261  l_in_customer_id := l_project_in_rec.customer_id;
1262  l_bill_to_customer_id := l_project_in_rec.bill_to_customer_id;
1263  l_ship_to_customer_id := l_project_in_rec.ship_to_customer_id;
1264  l_bill_to_address_id := l_project_in_rec.bill_to_address_id;
1265  l_ship_to_address_id := l_project_in_rec.ship_to_address_id;
1266 
1267  /* commenting this code for Bug#5517655 */
1268  /*
1269  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
1270  Then
1271 
1272 
1273                 l_project_relationship_code := 'Primary';
1274 
1275  Else
1276 
1277 
1278                 l_project_relationship_code := l_project_in_rec.project_relationship_code;
1279 
1280  End If;
1281 
1282  */ --  End of commenting for Bug#5517655
1283 
1284  l_cust_bill_split := 100; --default contribution for any customer that is being created
1285  l_enable_top_task_cust_flag := l_project_in_rec.enable_top_task_customer_flag;
1286  End If;
1287 ElSIF p_customers_in(i).customer_id IS NOT NULL then
1288   ------dbms_output.put_line('Comes in this loop');
1289  l_in_customer_id := p_customers_in(1).customer_id;
1290  l_bill_to_customer_id:=p_customers_in(1).bill_to_customer_id;
1291  l_ship_to_customer_id:=p_customers_in(1).ship_to_customer_id;
1292  l_bill_to_address_id :=p_customers_in(1).bill_to_address_id;
1293  l_ship_to_address_id :=p_customers_in(1).ship_to_address_id;
1294 
1295  /* commenting this code for Bug#5517655 */
1296  /*
1297  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
1298  Then
1299 
1300                 l_project_relationship_code := 'Primary';
1301  Else
1302 
1303                 l_project_relationship_code := p_customers_in(1).PROJECT_RELATIONSHIP_CODE;
1304  End If;
1305  */ -- End of commenting for Bug#5517655
1306  l_cust_bill_split := p_customers_in(1).Customer_Bill_Split;
1307  End If;
1308 
1309 ----dbms_output.put_line('value of l_in_customer_id'||l_in_customer_id);
1310 ----dbms_output.put_line('value of l_bill_to_customer_id'||l_bill_to_customer_id);
1311 ----dbms_output.put_line('value of l_ship_to_customer_id'||l_ship_to_customer_id);
1312 ----dbms_output.put_line('value of l_bill_to_address_id'||l_bill_to_address_id);
1313 ----dbms_output.put_line('value of l_ship_to_address_id'||l_ship_to_address_id);
1314 ----dbms_output.put_line('value of l_project_relationship_code'||l_project_relationship_code);
1315 ----dbms_output.put_line('value of l_cust_bill_split'||l_cust_bill_split);
1316 
1317  /* End of code changes for tracking bug */
1318 
1319 /*Start Code for Bug 6408593 */
1320 
1321 l_key_members := p_key_members;
1322 
1323 i := l_key_members.first;
1324 WHILE i IS NOT NULL LOOP
1325    IF(l_key_members(i).project_role_meaning <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1326    THEN
1327      OPEN c_prj_key_role_type(l_key_members(i).project_role_meaning);
1328      FETCH c_prj_key_role_type INTO l_key_members(i).project_role_type;
1329      CLOSE c_prj_key_role_type;
1330    END IF;
1331    i := l_key_members.next(i);
1332 END LOOP;
1333 /*End Code for Bug 6408593 */
1334 
1335 /* code added for the bug#1891621, starts here  */
1336     i := l_override_fields_tab.first;
1337 
1338     WHILE i IS NOT NULL LOOP
1339       IF l_override_fields_tab(i).mandatory_flag = 'Y' THEN
1340         IF l_override_fields_tab(i).pa_field_name = 'CARRYING_OUT_ORGANIZATION_ID' THEN
1341           IF l_project_in_rec.carrying_out_organization_id IS NULL
1342            OR l_project_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1343           THEN
1344 
1345             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1346             THEN
1347             pa_interface_utils_pub.map_new_amg_msg
1348             ( p_old_message_code => 'PA_ORGANIZATION_ID_IS_NULL'
1349              ,p_msg_attribute    => 'CHANGE'
1350              ,p_resize_flag      => 'N'
1351              ,p_msg_context      => 'PROJ'
1352              ,p_attribute1       => l_project_in_rec.pm_project_reference
1353              ,p_attribute2       => 'Organization'
1354              ,p_attribute3       => ''
1355              ,p_attribute4       => ''
1356              ,p_attribute5       => '');
1357             END IF;
1358             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1359             p_return_status             := FND_API.G_RET_STS_ERROR;
1360             RAISE FND_API.G_EXC_ERROR;
1361 
1362           END IF;
1363 
1364         ELSIF l_override_fields_tab(i).pa_field_name = 'CLASSIFICATION' THEN
1365 
1366           l_class_categories := p_class_categories;
1367           j := l_class_categories.first;
1368 
1369           IF j IS NULL THEN
1370 
1371             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1372             THEN
1373             pa_interface_utils_pub.map_new_amg_msg
1374             ( p_old_message_code => 'PA_CLASSIFICATION_IS_NULL'
1375              ,p_msg_attribute    => 'CHANGE'
1376              ,p_resize_flag      => 'N'
1377              ,p_msg_context      => 'PROJ'
1378              ,p_attribute1       => l_project_in_rec.pm_project_reference
1379              ,p_attribute2       => ''
1380              ,p_attribute3       => ''
1381              ,p_attribute4       => ''
1382              ,p_attribute5       => '');
1383             END IF;
1384             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1385             p_return_status             := FND_API.G_RET_STS_ERROR;
1386             RAISE FND_API.G_EXC_ERROR;
1387 
1388           END IF;
1389 
1390           l_class_code_categories := 0;
1391 
1392           WHILE j IS NOT NULL LOOP
1393             IF upper(l_override_fields_tab(i).type) = upper(l_class_categories(j).class_category)
1394             AND l_class_categories(j).class_code IS NOT NULL
1395             THEN
1396              l_class_code_categories := 1;
1397               -- check whether the class category and class code combination is a valid one
1398              IF pa_project_pvt.check_class_code_valid(l_class_categories(j).class_category,
1399                                        l_class_categories(j).class_code) = 'N'
1400              THEN
1401                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1402                THEN
1403                pa_interface_utils_pub.map_new_amg_msg
1404               ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
1405                ,p_msg_attribute    => 'CHANGE'
1406                ,p_resize_flag      => 'N'
1407                ,p_msg_context      => 'PROJ'
1408                ,p_attribute1       => l_project_in_rec.pm_project_reference
1409                ,p_attribute2       => ''
1410                ,p_attribute3       => ''
1411                ,p_attribute4       => ''
1412                ,p_attribute5       => '');
1413                END IF;
1414                p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1415                p_return_status             := FND_API.G_RET_STS_ERROR;
1416                RAISE FND_API.G_EXC_ERROR;
1417              END IF;
1418 
1419              EXIT;
1420             END IF;
1421             j := l_class_categories.next(j);
1422           END LOOP;
1423 
1424           IF l_class_code_categories <> 1
1425           THEN
1426             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1427             THEN
1428              pa_interface_utils_pub.map_new_amg_msg
1429               ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
1430                ,p_msg_attribute    => 'CHANGE'
1431                ,p_resize_flag      =>'N' --'Y'is Replaced with 'N';bug#1891621
1432                ,p_msg_context      => 'PROJ'
1433                ,p_attribute1       => l_project_in_rec.pm_project_reference
1434                ,p_attribute2       => ''
1435                ,p_attribute3       => ''
1436                ,p_attribute4       => ''
1437                ,p_attribute5       => '');
1438              END IF;
1439              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1440              p_return_status             := FND_API.G_RET_STS_ERROR;
1441              RAISE FND_API.G_EXC_ERROR;
1442           END IF;
1443         ELSIF l_override_fields_tab(i).pa_field_name = 'COMPLETION_DATE' THEN
1444           IF l_project_in_rec.completion_date IS NULL
1445            OR l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1446           THEN
1447 
1448             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1449             THEN
1450             pa_interface_utils_pub.map_new_amg_msg
1451             ( p_old_message_code => 'PA_COMPLETION_DATE_IS_NULL'
1452              ,p_msg_attribute    => 'CHANGE'
1453              ,p_resize_flag      => 'N'
1454              ,p_msg_context      => 'PROJ'
1455              ,p_attribute1       => l_project_in_rec.pm_project_reference
1456              ,p_attribute2       => ''
1457              ,p_attribute3       => ''
1458              ,p_attribute4       => ''
1459              ,p_attribute5       => '');
1460             END IF;
1461             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1462             p_return_status             := FND_API.G_RET_STS_ERROR;
1463             RAISE FND_API.G_EXC_ERROR;
1464 
1465           END IF;
1466 
1467         ELSIF l_override_fields_tab(i).pa_field_name = 'START_DATE' THEN
1468           IF l_project_in_rec.start_date IS NULL
1469            OR l_project_in_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1470           THEN
1471 
1472             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1473             THEN
1474             pa_interface_utils_pub.map_new_amg_msg
1475             ( p_old_message_code => 'PA_START_DATE_IS_NULL'
1476              ,p_msg_attribute    => 'CHANGE'
1477              ,p_resize_flag      => 'N'
1478              ,p_msg_context      => 'PROJ'
1479              ,p_attribute1       => l_project_in_rec.pm_project_reference
1480              ,p_attribute2       => ''
1481              ,p_attribute3       => ''
1482              ,p_attribute4       => ''
1483              ,p_attribute5       => '');
1484             END IF;
1485             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1486             p_return_status             := FND_API.G_RET_STS_ERROR;
1487             RAISE FND_API.G_EXC_ERROR;
1488 
1489           END IF;
1490         ELSIF l_override_fields_tab(i).pa_field_name = 'CUSTOMER_NAME' THEN
1491          /* Code commented for tracking bug
1492          IF l_project_in_rec.customer_id IS NULL
1493            OR l_project_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1494             /* Code added for tracking bug by aditi */
1495             ----dbms_output.put_line('value of l_in_customer_id'||l_in_customer_id);
1496          IF l_in_customer_id IS NULL
1497            OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1498             /* End of Code changes */
1499           THEN
1500             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1501             THEN
1502             pa_interface_utils_pub.map_new_amg_msg
1503             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
1504              ,p_msg_attribute    => 'CHANGE'
1505              ,p_resize_flag      => 'N'
1506              ,p_msg_context      => 'PROJ'
1507              ,p_attribute1       => l_project_in_rec.pm_project_reference
1508              ,p_attribute2       => ''
1509              ,p_attribute3       => ''
1510              ,p_attribute4       => ''
1511              ,p_attribute5       => '');
1512             END IF;
1513             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1514             p_return_status             := FND_API.G_RET_STS_ERROR;
1515             RAISE FND_API.G_EXC_ERROR;
1516 
1517           END IF;
1518 
1519 --Customer Account relationship Changes:
1520 
1521         ELSIF l_override_fields_tab(i).pa_field_name = 'BILL_TO_CUSTOMER' THEN
1522           /* Code commented for tracking bug
1523           IF l_project_in_rec.bill_to_customer_id IS NULL
1524            OR l_project_in_rec.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1525            /* Code added for tracking bug by aditi */
1526            IF l_bill_to_customer_id IS NULL
1527            OR l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1528             /* End of Code changes */
1529           THEN
1530 
1531             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1532             THEN
1533             pa_interface_utils_pub.map_new_amg_msg
1534             ( p_old_message_code => 'PA_BILL_TO_CUST_ID_IS_NULL'
1535              ,p_msg_attribute    => 'CHANGE'
1536              ,p_resize_flag      => 'N'
1537              ,p_msg_context      => 'PROJ'
1538              ,p_attribute1       => l_project_in_rec.pm_project_reference
1539              ,p_attribute2       => ''
1540              ,p_attribute3       => ''
1541              ,p_attribute4       => ''
1542              ,p_attribute5       => '');
1543             END IF;
1544             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1545             p_return_status             := FND_API.G_RET_STS_ERROR;
1546             RAISE FND_API.G_EXC_ERROR;
1547 
1548           END IF;
1549 
1550         ELSIF l_override_fields_tab(i).pa_field_name = 'SHIP_TO_CUSTOMER' THEN
1551          /* Code commented for tracking bug
1552           IF l_project_in_rec.ship_to_customer_id IS NULL
1553            OR l_project_in_rec.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1554             /* Code added for tracking bug by aditi */
1555         IF l_ship_to_customer_id IS NULL
1556            OR l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1557              /* End of Code changes */
1558           THEN
1559 
1560             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1561             THEN
1562             pa_interface_utils_pub.map_new_amg_msg
1563             ( p_old_message_code => 'PA_SHIP_TO_CUST_ID_IS_NULL'
1564              ,p_msg_attribute    => 'CHANGE'
1565              ,p_resize_flag      => 'N'
1566              ,p_msg_context      => 'PROJ'
1567              ,p_attribute1       => l_project_in_rec.pm_project_reference
1568              ,p_attribute2       => ''
1569              ,p_attribute3       => ''
1570              ,p_attribute4       => ''
1571              ,p_attribute5       => '');
1572             END IF;
1573             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1574             p_return_status             := FND_API.G_RET_STS_ERROR;
1575             RAISE FND_API.G_EXC_ERROR;
1576 
1577           END IF;
1578 
1579 ----dbms_output.put_line('Overriding bill to cst and ship to cst');
1580 
1581         ELSIF l_override_fields_tab(i).pa_field_name = 'DESCRIPTION' THEN
1582           IF l_project_in_rec.description IS NULL
1583            OR l_project_in_rec.description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1584           THEN
1585 
1586             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1587             THEN
1588             pa_interface_utils_pub.map_new_amg_msg
1589             ( p_old_message_code => 'PA_DESCRIPTION_IS_NULL'
1590              ,p_msg_attribute    => 'CHANGE'
1591              ,p_resize_flag      => 'N'
1592              ,p_msg_context      => 'PROJ'
1593              ,p_attribute1       => l_project_in_rec.pm_project_reference
1594              ,p_attribute2       => ''
1595              ,p_attribute3       => ''
1596              ,p_attribute4       => ''
1597              ,p_attribute5       => '');
1598             END IF;
1599             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1600             p_return_status             := FND_API.G_RET_STS_ERROR;
1601             RAISE FND_API.G_EXC_ERROR;
1602 
1603           END IF;
1604 
1605         ELSIF l_override_fields_tab(i).pa_field_name = 'KEY_MEMBER' THEN
1606 
1607     --       l_key_members := p_key_members; Commented for Bug 6408593
1608           j := l_key_members.first;
1609 
1610           IF j IS NULL THEN
1611 
1612             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1613             THEN
1614             pa_interface_utils_pub.map_new_amg_msg
1615             ( p_old_message_code => 'PA_KEY_MEMBER_IS_NULL'
1616              ,p_msg_attribute    => 'CHANGE'
1617              ,p_resize_flag      => 'N'
1618              ,p_msg_context      => 'PROJ'
1619              ,p_attribute1       => l_project_in_rec.pm_project_reference
1620              ,p_attribute2       => ''
1621              ,p_attribute3       => ''
1622              ,p_attribute4       => ''
1623              ,p_attribute5       => '');
1624             END IF;
1625             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1626             p_return_status             := FND_API.G_RET_STS_ERROR;
1627             RAISE FND_API.G_EXC_ERROR;
1628 
1629           END IF;
1630 
1631           l_key_member := 0;
1632 
1633           WHILE j IS NOT NULL LOOP
1634             IF upper(l_override_fields_tab(i).type) = upper(l_key_members(j).project_role_type)
1635             AND l_key_members(j).person_id IS NOT NULL
1636             THEN
1637              l_key_member := 1;
1638              EXIT;
1639             END IF;
1640             j := l_key_members.next(j);
1641           END LOOP;
1642 
1643           IF l_key_member <> 1
1644           THEN
1645             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1646             THEN
1647              pa_interface_utils_pub.map_new_amg_msg
1648               ( p_old_message_code => 'PA_KEY_MEMBER_IS_NULL'
1649                ,p_msg_attribute    => 'CHANGE'
1650                ,p_resize_flag      => 'N'
1651                ,p_msg_context      => 'PROJ'
1652                ,p_attribute1       => l_project_in_rec.pm_project_reference
1653                ,p_attribute2       => ''
1654                ,p_attribute3       => ''
1655                ,p_attribute4       => ''
1656                ,p_attribute5       => '');
1657              END IF;
1658              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1659              p_return_status             := FND_API.G_RET_STS_ERROR;
1660              RAISE FND_API.G_EXC_ERROR;
1661           END IF;
1662 
1663         ELSIF l_override_fields_tab(i).pa_field_name = 'DISTRIBUTION_RULE' THEN
1664           IF l_project_in_rec.distribution_rule IS NULL
1665            OR l_project_in_rec.distribution_rule = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1666           THEN
1667 
1668             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1669             THEN
1670             pa_interface_utils_pub.map_new_amg_msg
1671             ( p_old_message_code => 'PA_DISTRIBUTION_RULE_NULL'
1672              ,p_msg_attribute    => 'CHANGE'
1673              ,p_resize_flag      => 'N'
1674              ,p_msg_context      => 'PROJ'
1675              ,p_attribute1       => l_project_in_rec.pm_project_reference
1676              ,p_attribute2       => ''
1677              ,p_attribute3       => ''
1678              ,p_attribute4       => ''
1679              ,p_attribute5       => '');
1680             END IF;
1681             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1682             p_return_status             := FND_API.G_RET_STS_ERROR;
1683             RAISE FND_API.G_EXC_ERROR;
1684 
1685           END IF;
1686 
1687         ELSIF l_override_fields_tab(i).pa_field_name = 'PROJECT_STATUS_CODE' THEN
1688           IF l_project_in_rec.project_status_code IS NULL
1689            OR l_project_in_rec.project_status_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1690           THEN
1691             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1692             THEN
1693             pa_interface_utils_pub.map_new_amg_msg
1694             ( p_old_message_code => 'PA_PRJ_STATUS_CODE_IS_NULL'
1695              ,p_msg_attribute    => 'CHANGE'
1696              ,p_resize_flag      => 'N'
1697              ,p_msg_context      => 'PROJ'
1698              ,p_attribute1       => l_project_in_rec.pm_project_reference
1699              ,p_attribute2       => ''
1700              ,p_attribute3       => ''
1701              ,p_attribute4       => ''
1702              ,p_attribute5       => '');
1703             END IF;
1704             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1705             p_return_status             := FND_API.G_RET_STS_ERROR;
1706             RAISE FND_API.G_EXC_ERROR;
1707 
1708           END IF;
1709 
1710         ELSIF l_override_fields_tab(i).pa_field_name = 'PUBLIC_SECTOR_FLAG' THEN
1711           IF l_project_in_rec.public_sector_flag IS NULL
1712            OR l_project_in_rec.public_sector_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1713           THEN
1714 
1715             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1716             THEN
1717             pa_interface_utils_pub.map_new_amg_msg
1718             ( p_old_message_code => 'PA_PUB_SECTOR_FLAG_IS_NULL'
1719              ,p_msg_attribute    => 'CHANGE'
1720              ,p_resize_flag      => 'N'
1721              ,p_msg_context      => 'PROJ'
1722              ,p_attribute1       => l_project_in_rec.pm_project_reference
1723              ,p_attribute2       => ''
1724              ,p_attribute3       => ''
1725              ,p_attribute4       => ''
1726              ,p_attribute5       => '');
1727             END IF;
1728             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1729             p_return_status             := FND_API.G_RET_STS_ERROR;
1730             RAISE FND_API.G_EXC_ERROR;
1731 
1732           END IF;
1733 
1734         ELSIF l_override_fields_tab(i).pa_field_name = 'TEAM_TEMPLATE_ID' THEN
1735           IF l_project_in_rec.team_template_id IS NULL
1736            OR l_project_in_rec.team_template_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1737           THEN
1738 
1739             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1740             THEN
1741             pa_interface_utils_pub.map_new_amg_msg
1742             ( p_old_message_code => 'PA_TEAM_TMPLT_ID_IS_NULL'
1743              ,p_msg_attribute    => 'CHANGE'
1744              ,p_resize_flag      => 'N'
1745              ,p_msg_context      => 'PROJ'
1746              ,p_attribute1       => l_project_in_rec.pm_project_reference
1747              ,p_attribute2       => ''
1748              ,p_attribute3       => ''
1749              ,p_attribute4       => ''
1750              ,p_attribute5       => '');
1751             END IF;
1752             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1753             p_return_status             := FND_API.G_RET_STS_ERROR;
1754             RAISE FND_API.G_EXC_ERROR;
1755 
1756           END IF;
1757 
1758         ELSIF l_override_fields_tab(i).pa_field_name = 'COUNTRY' THEN
1759           IF l_project_in_rec.country_code IS NULL
1760            OR l_project_in_rec.country_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1761           THEN
1762 
1763             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1764             THEN
1765             pa_interface_utils_pub.map_new_amg_msg
1766             ( p_old_message_code => 'PA_COUNTRY_CODE_IS_NULL'
1767              ,p_msg_attribute    => 'CHANGE'
1768              ,p_resize_flag      => 'N'
1769              ,p_msg_context      => 'PROJ'
1770              ,p_attribute1       => l_project_in_rec.pm_project_reference
1771              ,p_attribute2       => ''
1772              ,p_attribute3       => ''
1773              ,p_attribute4       => ''
1774              ,p_attribute5       => '');
1775             END IF;
1776             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1777             p_return_status             := FND_API.G_RET_STS_ERROR;
1778             RAISE FND_API.G_EXC_ERROR;
1779 
1780           END IF;
1781 
1782         ELSIF l_override_fields_tab(i).pa_field_name = 'STATE_REGION' THEN
1783           IF l_project_in_rec.region IS NULL
1784            OR l_project_in_rec.region = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1785           THEN
1786 
1787             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1788             THEN
1789             pa_interface_utils_pub.map_new_amg_msg
1790             ( p_old_message_code => 'PA_REGION_IS_NULL'
1791              ,p_msg_attribute    => 'CHANGE'
1792              ,p_resize_flag      => 'N'
1793              ,p_msg_context      => 'PROJ'
1794              ,p_attribute1       => l_project_in_rec.pm_project_reference
1795              ,p_attribute2       => ''
1796              ,p_attribute3       => ''
1797              ,p_attribute4       => ''
1798              ,p_attribute5       => '');
1799             END IF;
1800             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1801             p_return_status             := FND_API.G_RET_STS_ERROR;
1802             RAISE FND_API.G_EXC_ERROR;
1803 
1804           END IF;
1805 
1806         ELSIF l_override_fields_tab(i).pa_field_name = 'CITY' THEN
1807           IF l_project_in_rec.city IS NULL
1808            OR l_project_in_rec.city = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1809           THEN
1810 
1811             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1812             THEN
1813             pa_interface_utils_pub.map_new_amg_msg
1814             ( p_old_message_code => 'PA_CITY_IS_NULL'
1815              ,p_msg_attribute    => 'CHANGE'
1816              ,p_resize_flag      => 'N'
1817              ,p_msg_context      => 'PROJ'
1818              ,p_attribute1       => l_project_in_rec.pm_project_reference
1819              ,p_attribute2       => ''
1820              ,p_attribute3       => ''
1821              ,p_attribute4       => ''
1822              ,p_attribute5       => '');
1823             END IF;
1824             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1825             p_return_status             := FND_API.G_RET_STS_ERROR;
1826             RAISE FND_API.G_EXC_ERROR;
1827 
1828           END IF;
1829 
1830         ELSIF l_override_fields_tab(i).pa_field_name = 'EXPECTED_APPROVAL_DATE' THEN
1831           IF l_project_in_rec.expected_approval_date IS NULL
1832            OR l_project_in_rec.expected_approval_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1833           THEN
1834 
1835             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1836             THEN
1837             pa_interface_utils_pub.map_new_amg_msg
1838             ( p_old_message_code => 'PA_EXP_APPR_DATE_IS_NULL'
1839              ,p_msg_attribute    => 'CHANGE'
1840              ,p_resize_flag      => 'N'
1841              ,p_msg_context      => 'PROJ'
1842              ,p_attribute1       => l_project_in_rec.pm_project_reference
1843              ,p_attribute2       => ''
1844              ,p_attribute3       => ''
1845              ,p_attribute4       => ''
1846              ,p_attribute5       => '');
1847             END IF;
1848             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1849             p_return_status             := FND_API.G_RET_STS_ERROR;
1850             RAISE FND_API.G_EXC_ERROR;
1851 
1852           END IF;
1853 
1854         ELSIF l_override_fields_tab(i).pa_field_name = 'PROBABILITY_MEMBER_ID' THEN
1855           IF l_project_in_rec.probability_member_id IS NULL
1856            OR l_project_in_rec.probability_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1857           THEN
1858 
1859             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1860             THEN
1861             pa_interface_utils_pub.map_new_amg_msg
1862             ( p_old_message_code => 'PA_PROB_MEMBER_ID_IS_NULL'
1863              ,p_msg_attribute    => 'CHANGE'
1864              ,p_resize_flag      => 'N'
1865              ,p_msg_context      => 'PROJ'
1866              ,p_attribute1       => l_project_in_rec.pm_project_reference
1867              ,p_attribute2       => ''
1868              ,p_attribute3       => ''
1869              ,p_attribute4       => ''
1870              ,p_attribute5       => '');
1871             END IF;
1872             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1873             p_return_status             := FND_API.G_RET_STS_ERROR;
1874             RAISE FND_API.G_EXC_ERROR;
1875 
1876           END IF;
1877 
1878         ELSIF l_override_fields_tab(i).pa_field_name = 'PROJECT_VALUE' THEN
1879           IF l_project_in_rec.project_value IS NULL
1880            OR l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1881           THEN
1882 
1883             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1884             THEN
1885             pa_interface_utils_pub.map_new_amg_msg
1886             ( p_old_message_code => 'PA_PROJECT_VALUE_IS_NULL'
1887              ,p_msg_attribute    => 'CHANGE'
1888              ,p_resize_flag      => 'N'
1889              ,p_msg_context      => 'PROJ'
1890              ,p_attribute1       => l_project_in_rec.pm_project_reference
1891              ,p_attribute2       => ''
1892              ,p_attribute3       => ''
1893              ,p_attribute4       => ''
1894              ,p_attribute5       => '');
1895             END IF;
1896             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1897             p_return_status             := FND_API.G_RET_STS_ERROR;
1898             RAISE FND_API.G_EXC_ERROR;
1899 
1900           END IF;
1901 
1902 -- anlee opportunity value changes
1903         ELSIF l_override_fields_tab(i).pa_field_name = 'OPP_VALUE_CURRENCY_CODE' THEN
1904           IF l_project_in_rec.project_value IS NULL
1905            OR l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1906           THEN
1907 
1908             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1909             THEN
1910             pa_interface_utils_pub.map_new_amg_msg
1911             ( p_old_message_code => 'PA_OPP_CURR_CODE_IS_NULL'
1912              ,p_msg_attribute    => 'CHANGE'
1913              ,p_resize_flag      => 'N'
1914              ,p_msg_context      => 'PROJ'
1915              ,p_attribute1       => l_project_in_rec.pm_project_reference
1916              ,p_attribute2       => ''
1917              ,p_attribute3       => ''
1918              ,p_attribute4       => ''
1919              ,p_attribute5       => '');
1920             END IF;
1921             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1922             p_return_status             := FND_API.G_RET_STS_ERROR;
1923             RAISE FND_API.G_EXC_ERROR;
1924 
1925           END IF;
1926 
1927 -- anlee org role changes
1928         ELSIF l_override_fields_tab(i).pa_field_name = 'ORG_ROLE' THEN
1929 
1930           l_org_roles := p_org_roles;
1931           j := l_org_roles.first;
1932 
1933           IF j IS NULL THEN
1934 
1935             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1936             THEN
1937             pa_interface_utils_pub.map_new_amg_msg
1938             ( p_old_message_code => 'PA_ORG_ROLE_IS_NULL'
1939              ,p_msg_attribute    => 'CHANGE'
1940              ,p_resize_flag      => 'N'
1941              ,p_msg_context      => 'PROJ'
1942              ,p_attribute1       => l_project_in_rec.pm_project_reference
1943              ,p_attribute2       => ''
1944              ,p_attribute3       => ''
1945              ,p_attribute4       => ''
1946              ,p_attribute5       => '');
1947             END IF;
1948             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1949             p_return_status             := FND_API.G_RET_STS_ERROR;
1950             RAISE FND_API.G_EXC_ERROR;
1951 
1952           END IF;
1953 
1954           l_org_role := 0;
1955 
1956           WHILE j IS NOT NULL LOOP
1957             IF upper(l_override_fields_tab(i).type) = upper(l_org_roles(j).project_role_type)
1958             AND l_org_roles(j).person_id IS NOT NULL
1959             THEN
1960              l_org_role := 1;
1961              EXIT;
1962             END IF;
1963             j := l_org_roles.next(j);
1964           END LOOP;
1965 
1966           IF l_org_role <> 1
1967           THEN
1968             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1969             THEN
1970              pa_interface_utils_pub.map_new_amg_msg
1971               ( p_old_message_code => 'PA_ORG_ROLE_IS_NULL'
1972                ,p_msg_attribute    => 'CHANGE'
1973                ,p_resize_flag      => 'N'
1974                ,p_msg_context      => 'PROJ'
1975                ,p_attribute1       => l_project_in_rec.pm_project_reference
1976                ,p_attribute2       => ''
1977                ,p_attribute3       => ''
1978                ,p_attribute4       => ''
1979                ,p_attribute5       => '');
1980              END IF;
1981              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1982              p_return_status             := FND_API.G_RET_STS_ERROR;
1983              RAISE FND_API.G_EXC_ERROR;
1984           END IF;
1985 
1986 /* Added this code for bug#2672646 if Long Name is an Quick Entry Field */
1987 
1988      ELSIF   l_override_fields_tab(i).pa_field_name = 'LONG_NAME' THEN
1989           IF l_project_in_rec.long_name IS NULL
1990            OR l_project_in_rec.long_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1991           THEN
1992             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1993             THEN
1994             pa_interface_utils_pub.map_new_amg_msg
1995             ( p_old_message_code => 'PA_PRJ_LONG_NAME_IS_NULL'
1996              ,p_msg_attribute    => 'CHANGE'
1997              ,p_resize_flag      => 'N'
1998              ,p_msg_context      => 'PROJ'
1999              ,p_attribute1       => l_project_in_rec.pm_project_reference
2000              ,p_attribute2       => ''
2001              ,p_attribute3       => ''
2002              ,p_attribute4       => ''
2003              ,p_attribute5       => '');
2004             END IF;
2005             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
2006             p_return_status             := FND_API.G_RET_STS_ERROR;
2007             RAISE FND_API.G_EXC_ERROR;
2008           END IF;
2009 
2010 /* End of code added for bug#2672646 */
2011 
2012         END IF;    /* l_override_fields_tab(i).pa_field_name  */
2013       END IF;     /* mandatory_flag = 'Y'  */
2014       i := l_override_fields_tab.next(i);
2015     END LOOP;
2016 
2017 /* code added for the bug#1891621, ends here  */
2018 
2019 
2020 /* Bug#2672646 - If long name is passed as null or has default value, then we must default to the project name,
2021             This if loop will succeed only if long name is not a mandatory quick entry field, otherwise error
2022       would have been given above itself
2023 Start of code for bug#2672646 */
2024 
2025    IF l_project_in_rec.long_name IS NULL
2026       OR l_project_in_rec.long_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2027    THEN
2028        l_project_in_rec.long_name := l_project_in_rec.project_name;
2029    END IF;
2030 
2031 /* End of code for bug#2672646 */
2032 
2033 -- Need to get the project type of the source template, to validate
2034    -- distribution rule
2035    -- Validates the ID of the source template as well.
2036 
2037       OPEN l_source_project_type_csr(l_project_in_rec.created_from_project_id);
2038       FETCH l_source_project_type_csr INTO l_source_project_type;
2039 
2040       IF l_source_project_type_csr%NOTFOUND
2041       THEN
2042     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2043     THEN
2044          pa_interface_utils_pub.map_new_amg_msg
2045            ( p_old_message_code => 'PA_SOURCE_TEMPLATE_INVALID'
2046             ,p_msg_attribute    => 'CHANGE'
2047             ,p_resize_flag      => 'N'
2048             ,p_msg_context      => 'PROJ'
2049             ,p_attribute1       => l_project_in_rec.pm_project_reference
2050             ,p_attribute2       => ''
2051             ,p_attribute3       => ''
2052             ,p_attribute4       => ''
2053             ,p_attribute5       => '');
2054     END IF;
2055 
2056     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
2057     CLOSE l_source_project_type_csr;
2058     RAISE FND_API.G_EXC_ERROR;
2059       END IF;
2060 
2061       CLOSE l_source_project_type_csr;
2062 
2063     IF  l_project_in_rec.distribution_rule <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2064     AND l_project_in_rec.distribution_rule IS NOT NULL
2065     THEN
2066           IF pa_project_pvt.check_valid_dist_rule
2067              (l_source_project_type,
2068               l_project_in_rec.distribution_rule,
2069               l_project_in_rec.enable_top_task_inv_mth_flag ) = 'N'  --Bug 3279981
2070           THEN
2071     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2072     THEN
2073          pa_interface_utils_pub.map_new_amg_msg
2074            ( p_old_message_code => 'PA_INVALID_DIST_RULE'
2075             ,p_msg_attribute    => 'CHANGE'
2076             ,p_resize_flag      => 'N'
2077             ,p_msg_context      => 'PROJ'
2078             ,p_attribute1       => l_project_in_rec.pm_project_reference
2079             ,p_attribute2       => ''
2080             ,p_attribute3       => ''
2081             ,p_attribute4       => ''
2082             ,p_attribute5       => '');
2083                 END IF;
2084 
2085                 RAISE  FND_API.G_EXC_ERROR;
2086           END IF;
2087     END IF;
2088 
2089     IF  l_project_in_rec.carrying_out_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2090     AND l_project_in_rec.carrying_out_organization_id IS NOT NULL
2091     THEN
2092        IF pa_project_pvt.check_valid_org
2093           (l_project_in_rec.carrying_out_organization_id) = 'N'
2094        THEN
2095     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2096     THEN
2097          pa_interface_utils_pub.map_new_amg_msg
2098            ( p_old_message_code => 'PA_INVALID_ORG'
2099             ,p_msg_attribute    => 'CHANGE'
2100             ,p_resize_flag      => 'N'
2101             ,p_msg_context      => 'PROJ'
2102             ,p_attribute1       => l_project_in_rec.pm_project_reference
2103             ,p_attribute2       => ''
2104             ,p_attribute3       => ''
2105             ,p_attribute4       => ''
2106             ,p_attribute5       => '');
2107              END IF;
2108 
2109              RAISE  FND_API.G_EXC_ERROR;
2110        END IF;
2111     END IF;
2112 
2113        l_project_start_date      := l_project_in_rec.start_date;
2114        l_project_completion_date := l_project_in_rec.completion_date;
2115 
2116     -- completion date can be specified only if there is a start date
2117        IF  l_project_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2118        AND ( l_project_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2119               OR l_project_start_date IS NULL )
2120        THEN
2121     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2122     THEN
2123          pa_interface_utils_pub.map_new_amg_msg
2124            ( p_old_message_code => 'PA_PR_START_DATE_NEEDED'
2125             ,p_msg_attribute    => 'CHANGE'
2126             ,p_resize_flag      => 'N'
2127             ,p_msg_context      => 'PROJ'
2128             ,p_attribute1       => l_project_in_rec.pm_project_reference
2129             ,p_attribute2       => ''
2130             ,p_attribute3       => ''
2131             ,p_attribute4       => ''
2132             ,p_attribute5       => '');
2133                END IF;
2134                        RAISE  FND_API.G_EXC_ERROR;
2135        END IF;
2136 
2137     -- completion date cannot be less than start date
2138     IF     l_project_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2139        AND l_project_start_date IS NOT NULL
2140        AND l_project_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2141        AND l_project_completion_date IS NOT NULL
2142        AND l_project_completion_date < l_project_start_date
2143        THEN
2144 
2145             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2146             THEN
2147 
2148                 -- 5182972 Commented below code , which was throwing wrong error message
2149                 /*
2150                  pa_interface_utils_pub.map_new_amg_msg
2151                    ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
2152                     ,p_msg_attribute    => 'CHANGE'
2153                     ,p_resize_flag      => 'N'
2154                     ,p_msg_context      => 'PROJ'
2155                     ,p_attribute1       => l_project_in_rec.pm_project_reference
2156                     ,p_attribute2       => ''
2157                     ,p_attribute3       => ''
2158                     ,p_attribute4       => ''
2159                     ,p_attribute5       => '');
2160                 */
2161 
2162                 -- Added below code which throws correct error message
2163                 pa_utils.add_message
2164                  (
2165                    p_app_short_name   => 'PA'
2166                   ,p_msg_name         => 'PA_SU_INVALID_DATES'
2167                  );
2168 
2169                 -- 5182972 end
2170              END IF;
2171 
2172      RAISE  FND_API.G_EXC_ERROR;
2173      END IF;
2174 /*
2175        IF l_project_in_rec.actual_start_date IS NULL OR
2176           l_project_in_rec.actual_start_date =
2177             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2178           l_actual_start_date := NULL;
2179        ELSE
2180           l_actual_start_date := l_project_in_rec.actual_start_date;
2181        END IF;
2182 
2183        IF l_project_in_rec.actual_finish_date IS NULL OR
2184           l_project_in_rec.actual_finish_date =
2185             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2186           l_actual_finish_date := NULL;
2187        ELSE
2188           l_actual_finish_date := l_project_in_rec.actual_finish_date;
2189        END IF;
2190 */
2191 
2192        l_actual_start_date := null;
2193        l_actual_finish_date := null;
2194 --Task progress changes. These dates will be passed from task progress
2195 
2196        IF l_project_in_rec.early_start_date IS NULL OR
2197           l_project_in_rec.early_start_date =
2198             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2199           l_early_start_date := NULL;
2200        ELSE
2201           l_early_start_date := l_project_in_rec.early_start_date;
2202        END IF;
2203 
2204 
2205        IF l_project_in_rec.early_start_date IS NULL OR
2206           l_project_in_rec.early_start_date =
2207             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2208           l_early_start_date := NULL;
2209        ELSE
2210           l_early_start_date := l_project_in_rec.early_start_date;
2211        END IF;
2212 
2213 
2214 
2215        IF l_project_in_rec.early_finish_date IS NULL OR
2216           l_project_in_rec.early_finish_date =
2217             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2218           l_early_finish_date := NULL;
2219        ELSIF l_early_start_date IS NOT NULL THEN
2220                    --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
2221                    IF  l_project_in_rec.early_finish_date < l_early_start_date THEN
2222 
2223                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2224 
2225                                  pa_utils.add_message
2226                                  (
2227                                    p_app_short_name   => 'PA'
2228                                   ,p_msg_name         => 'PA_SU_INVALID_DATES'
2229                                  );
2230 
2231                         END IF;
2232 
2233                         RAISE  FND_API.G_EXC_ERROR;
2234                    END IF;
2235                    l_early_finish_date := l_project_in_rec.early_finish_date;
2236 
2237        ELSE        --End of Logic added to check whether the finish date is earlier than the start date.Bug#5185673
2238           l_early_finish_date := l_project_in_rec.early_finish_date;
2239        END IF;
2240 
2241 
2242        IF l_project_in_rec.late_start_date IS NULL OR
2243           l_project_in_rec.late_start_date =
2244             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2245           l_late_start_date := NULL;
2246        ELSE
2247           l_late_start_date := l_project_in_rec.late_start_date;
2248        END IF;
2249 
2250        IF l_project_in_rec.late_finish_date IS NULL OR
2251           l_project_in_rec.late_finish_date =
2252             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2253           l_late_finish_date := NULL;
2254        ELSIF l_late_start_date IS NOT NULL THEN
2255                    --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
2256                    IF  l_project_in_rec.late_finish_date < l_late_start_date THEN
2257 
2258                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2259 
2260                                  pa_utils.add_message
2261                                  (
2262                                    p_app_short_name   => 'PA'
2263                                   ,p_msg_name         => 'PA_SU_INVALID_DATES'
2264                                  );
2265 
2266                         END IF;
2267 
2268                         RAISE  FND_API.G_EXC_ERROR;
2269                    END IF;
2270                    l_late_finish_date := l_project_in_rec.late_finish_date;
2271        ELSE        --End of Logic added to check whether the finish date is earlier than the start date.Bug#5185673
2272           l_late_finish_date := l_project_in_rec.late_finish_date;
2273        END IF;
2274 
2275        IF l_project_in_rec.scheduled_start_date IS NULL OR
2276           l_project_in_rec.scheduled_start_date =
2277             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2278           l_scheduled_start_date := NULL;
2279        ELSE
2280           l_scheduled_start_date := l_project_in_rec.scheduled_start_date;
2281        END IF;
2282 
2283        IF l_project_in_rec.scheduled_finish_date IS NULL OR
2284           l_project_in_rec.scheduled_finish_date =
2285             PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2286           l_scheduled_finish_date := NULL;
2287        ELSE
2288           l_scheduled_finish_date := l_project_in_rec.scheduled_finish_date;
2289        END IF;
2290 
2291 --  Call the client extension to override the default values for
2292 --  project start/completion dates
2293 
2294        PA_Client_Extn_PM.customize_dates (
2295        p_pm_project_reference       => l_project_in_rec.pm_project_reference,
2296        p_pm_product_code            => p_pm_product_code,
2297        p_in_start_date              => l_project_in_rec.start_date,
2298        p_in_completion_date         => l_project_in_rec.completion_date,
2299        p_actual_start_date          => l_actual_start_date,
2300        p_actual_finish_date         => l_actual_finish_date,
2301        p_early_start_date           => l_early_start_date,
2302        p_early_finish_date          => l_early_finish_date,
2303        p_late_start_date            => l_late_start_date,
2304        p_late_finish_date           => l_late_finish_date,
2305        p_scheduled_start_date       => l_scheduled_start_date,
2306        p_scheduled_finish_date      => l_scheduled_finish_date,
2307        p_out_start_date             => l_out_start_date,
2308        p_out_completion_date        => l_out_completion_date,
2309        p_error_code        => l_error_code,
2310        p_error_message        => l_error_message );
2311 
2312       IF l_error_code <> 0 THEN
2313    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2314          pa_interface_utils_pub.map_new_amg_msg
2315            ( p_old_message_code => 'PA_ERROR_IN_CLIENT_EXTN'
2316             ,p_msg_attribute    => 'CHANGE'
2317             ,p_resize_flag      => 'N'
2318             ,p_msg_context      => 'PROJ'
2319             ,p_attribute1       => l_project_in_rec.pm_project_reference
2320             ,p_attribute2       => ''
2321             ,p_attribute3       => ''
2322             ,p_attribute4       => ''
2323             ,p_attribute5       => '');
2324          END IF;
2325          RAISE  FND_API.G_EXC_ERROR;
2326       END IF;
2327 
2328 
2329     -- Check to ensure that the dates returned by the API are valid
2330     -- the out completion date cannot be less than out start date
2331      IF    l_out_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2332        AND l_out_start_date IS NOT NULL
2333        AND l_out_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2334        AND l_out_completion_date IS NOT NULL
2335        AND l_out_completion_date < l_out_start_date
2336        THEN
2337             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2338             THEN
2339 
2340                 -- 5182972 Commented below code , which was throwing wrong error message
2341                 /*
2342                  pa_interface_utils_pub.map_new_amg_msg
2343                    ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
2344                     ,p_msg_attribute    => 'CHANGE'
2345                     ,p_resize_flag      => 'N'
2346                     ,p_msg_context      => 'PROJ'
2347                     ,p_attribute1       => l_project_in_rec.pm_project_reference
2348                     ,p_attribute2       => ''
2349                     ,p_attribute3       => ''
2350                     ,p_attribute4       => ''
2351                     ,p_attribute5       => '');
2352                 */
2353 
2354                 -- Added below code which throws correct error message
2355                 pa_utils.add_message
2356                  (
2357                    p_app_short_name   => 'PA'
2358                   ,p_msg_name         => 'PA_SU_INVALID_DATES'
2359                  );
2360 
2361                 -- 5182972 end
2362             END IF;
2363 
2364     RAISE  FND_API.G_EXC_ERROR;
2365     END IF;
2366 
2367     --Since this is an insert API (and not an update API),
2368     --all missing incoming parameters will be defaulted to NULL
2369 
2370     IF l_project_in_rec.description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2371     THEN l_project_in_rec.description := NULL;
2372     END IF;
2373 
2374     IF l_project_in_rec.project_status_code =
2375        PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2376        OR l_project_in_rec.project_status_code IS NULL THEN
2377         l_project_in_rec.project_status_code :=
2378           pa_project_stus_utils.Get_Default_Starting_Status
2379           (x_project_type => l_source_project_type);
2380     ELSE
2381       IF pa_project_pvt.check_valid_project_status
2382       ( p_project_status => l_project_in_rec.project_status_code ) = 'N'
2383   THEN
2384     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2385     THEN
2386          pa_interface_utils_pub.map_new_amg_msg
2387            ( p_old_message_code => 'PA_PROJECT_STATUS_INVALID'
2388             ,p_msg_attribute    => 'CHANGE'
2389             ,p_resize_flag      => 'N'
2390             ,p_msg_context      => 'PROJ'
2391             ,p_attribute1       => l_project_in_rec.pm_project_reference
2392             ,p_attribute2       => ''
2393             ,p_attribute3       => ''
2394             ,p_attribute4       => ''
2395             ,p_attribute5       => '');
2396                 END IF;
2397                 RAISE  FND_API.G_EXC_ERROR;
2398   END IF;
2399         IF pa_project_stus_utils.Is_Starting_Status
2400            (l_project_in_rec.project_status_code) = 'N' THEN
2401             pa_interface_utils_pub.map_new_amg_msg
2402               ( p_old_message_code => 'PA_NOT_STARTING_STATUS'
2403                ,p_msg_attribute    => 'CHANGE'
2404                ,p_resize_flag      => 'N'
2405                ,p_msg_context      => 'PROJ'
2406                ,p_attribute1       => l_project_in_rec.pm_project_reference
2407                ,p_attribute2       => ''
2408                ,p_attribute3       => ''
2409                ,p_attribute4       => ''
2410                ,p_attribute5       => '');
2411             RAISE  FND_API.G_EXC_ERROR;
2412         END IF;
2413 
2414     END IF;
2415 
2416 
2417     IF l_project_in_rec.distribution_rule = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2418     THEN l_project_in_rec.distribution_rule := NULL;
2419     END IF;
2420 
2421 
2422     IF l_project_in_rec.public_sector_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2423     OR l_project_in_rec.public_sector_flag IS NULL
2424     THEN l_project_in_rec.public_sector_flag := NULL;
2425     ELSE
2426       IF l_project_in_rec.public_sector_flag NOT IN ('Y','N')
2427       THEN
2428         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2429     THEN
2430          pa_interface_utils_pub.map_new_amg_msg
2431            ( p_old_message_code => 'PA_PUBLIC_SECTOR_INVALID'
2432             ,p_msg_attribute    => 'CHANGE'
2433             ,p_resize_flag      => 'N'
2434             ,p_msg_context      => 'PROJ'
2435             ,p_attribute1       => l_project_in_rec.pm_project_reference
2436             ,p_attribute2       => ''
2437             ,p_attribute3       => ''
2438             ,p_attribute4       => ''
2439             ,p_attribute5       => '');
2440                 END IF;
2441                 RAISE  FND_API.G_EXC_ERROR;
2442         END IF;
2443     END IF;
2444 
2445      --When descriptive flex fields are not passed set them to NULL
2446 
2447      IF l_project_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2448      THEN
2449        l_attribute_category := NULL;
2450      ELSE
2451   l_attribute_category := l_project_in_rec.attribute_category;
2452      END IF;
2453      IF l_project_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2454      THEN
2455        l_attribute1 := NULL;
2456      ELSE
2457   l_attribute1 := l_project_in_rec.attribute1;
2458      END IF;
2459      IF l_project_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2460      THEN
2461        l_attribute2 := NULL;
2462      ELSE
2463   l_attribute2 := l_project_in_rec.attribute2;
2464      END IF;
2465      IF l_project_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2466      THEN
2467        l_attribute3 := NULL;
2468      ELSE
2469   l_attribute3 := l_project_in_rec.attribute3;
2470      END IF;
2471      IF l_project_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2472      THEN
2473        l_attribute4 := NULL;
2474      ELSE
2475   l_attribute4 := l_project_in_rec.attribute4;
2476      END IF;
2477 
2478      IF l_project_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2479      THEN
2480        l_attribute5 := NULL;
2481      ELSE
2482   l_attribute5 := l_project_in_rec.attribute5;
2483 
2484      END IF;
2485 
2486      IF l_project_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2487      THEN
2488        l_attribute6 := NULL;
2489      ELSE
2490   l_attribute6 := l_project_in_rec.attribute6;
2491      END IF;
2492 
2493      IF l_project_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2494      THEN
2495        l_attribute7 := NULL;
2496      ELSE
2497   l_attribute7 := l_project_in_rec.attribute7;
2498      END IF;
2499 
2500      IF l_project_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2501      THEN
2502        l_attribute8 := NULL;
2503      ELSE
2504   l_attribute8 := l_project_in_rec.attribute8;
2505      END IF;
2506      IF l_project_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2507      THEN
2508        l_attribute9 := NULL;
2509      ELSE
2510   l_attribute9 := l_project_in_rec.attribute9;
2511      END IF;
2512      IF l_project_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2513      THEN
2514        l_attribute10 := NULL;
2515      ELSE
2516   l_attribute10 := l_project_in_rec.attribute10;
2517      END IF;
2518 
2519 -- Team template parameters
2520      IF l_project_in_rec.team_template_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2521      THEN
2522        l_team_template_id := NULL;
2523      ELSE
2524   l_team_template_id := l_project_in_rec.team_template_id;
2525      END IF;
2526      IF l_project_in_rec.country_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2527      THEN
2528        l_country_code := NULL;
2529      ELSE
2530   l_country_code := l_project_in_rec.country_code;
2531      END IF;
2532      IF l_project_in_rec.region = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2533      THEN
2534        l_region := NULL;
2535      ELSE
2536   l_region := l_project_in_rec.region;
2537      END IF;
2538      IF l_project_in_rec.city = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2539      THEN
2540        l_city := NULL;
2541      ELSE
2542   l_city := l_project_in_rec.city;
2543      END IF;
2544 
2545 -- Tax Code changes starts ...
2546 
2547      IF l_project_in_rec.output_tax_code =
2548 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2549      THEN
2550       l_output_tax_code := NULL;
2551      ELSE
2552    l_output_tax_code := l_project_in_rec.output_tax_code;
2553      END IF;
2554 
2555      IF l_project_in_rec.retention_tax_code =
2556 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2557      THEN
2558       l_retention_tax_code := NULL;
2559      ELSE
2560    l_retention_tax_code := l_project_in_rec.retention_tax_code;
2561      END IF;
2562 
2563 -- Tax Code changes Ends ...
2564 
2565 -- IC AND Multi National Currency Changes starts here ...
2566 
2567      IF l_project_in_rec.project_currency_code =
2568         PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2569 --Bugfix 2293158 issue 2 --Start
2570  /*  Changing AND to OR and IS NOT NULL condition to IS NULL as The if condition has to be true
2571    when l_project_in_rec.project_currency_code is NULL or the default G_PA_MISS_ CHAR */
2572     /* AND */
2573    OR  l_project_in_rec.project_currency_code IS NULL  /* NOT NULL */
2574 --Bugfix 2293158 issue 2 --end.
2575      THEN
2576 --Bugfix 2293158 issue 1 --Start
2577 --      l_project_currency_code := 'USD';
2578         l_project_currency_code := pa_multi_currency.get_acct_currency_code;
2579 --Bugfix 2293158 issue 1 --End
2580      ELSE
2581       l_project_currency_code := l_project_in_rec.project_currency_code;
2582      END IF;
2583 
2584      IF l_project_in_rec.allow_cross_charge_flag =
2585 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2586      THEN
2587       l_allow_cross_charge_flag := 'N';
2588      ELSE
2589    l_allow_cross_charge_flag := l_project_in_rec.allow_cross_charge_flag;
2590      END IF;
2591 
2592      IF l_project_in_rec.project_rate_date =
2593 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2594      THEN
2595       l_project_rate_date := NULL;
2596      ELSE
2597    l_project_rate_date := l_project_in_rec.project_rate_date;
2598      END IF;
2599 
2600      IF l_project_in_rec.project_rate_type =
2601 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2602      THEN
2603       l_project_rate_type := NULL;
2604      ELSE
2605    l_project_rate_type := l_project_in_rec.project_rate_type;
2606      END IF;
2607 
2608      IF l_project_in_rec.cc_process_labor_flag =
2609 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2610      THEN
2611       l_cc_process_labor_flag := 'N';
2612      ELSE
2613    l_cc_process_labor_flag := l_project_in_rec.cc_process_labor_flag;
2614      END IF;
2615 
2616      IF l_project_in_rec.labor_tp_schedule_id =
2617 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2618      THEN
2619       l_labor_tp_schedule_id := NULL;
2620      ELSE
2621    l_labor_tp_schedule_id := l_project_in_rec.labor_tp_schedule_id;
2622      END IF;
2623 
2624      IF l_project_in_rec.labor_tp_fixed_date =
2625 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2626      THEN
2627       l_labor_tp_fixed_date := NULL;
2628      ELSE
2629    l_labor_tp_fixed_date := l_project_in_rec.labor_tp_fixed_date;
2630      END IF;
2631 
2632      IF l_project_in_rec.cc_process_nl_flag =
2633 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2634      THEN
2635       l_cc_process_nl_flag := 'N';
2636      ELSE
2637    l_cc_process_nl_flag := l_project_in_rec.cc_process_nl_flag;
2638      END IF;
2639 
2640      IF l_project_in_rec.nl_tp_schedule_id =
2641 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2642      THEN
2643       l_nl_tp_schedule_id := NULL;
2644      ELSE
2645    l_nl_tp_schedule_id := l_project_in_rec.nl_tp_schedule_id;
2646      END IF;
2647 
2648      IF l_project_in_rec.nl_tp_fixed_date =
2649 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2650      THEN
2651       l_nl_tp_fixed_date := NULL;
2652      ELSE
2653    l_nl_tp_fixed_date := l_project_in_rec.nl_tp_fixed_date;
2654      END IF;
2655 
2656      IF l_project_in_rec.cc_tax_task_id =
2657 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2658      THEN
2659       l_cc_tax_task_id := NULL;
2660      ELSE
2661    l_cc_tax_task_id := l_project_in_rec.cc_tax_task_id;
2662      END IF;
2663 
2664 -- IC and Multi National Currency Changes Ends here ...
2665 
2666 -- ORM Code change starts here ...
2667 
2668      IF l_project_in_rec.role_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2669      THEN
2670       l_role_list_id := NULL;
2671      ELSE
2672       l_role_list_id := l_project_in_rec.role_list_id;
2673      END IF;
2674 
2675      IF l_project_in_rec.work_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2676      THEN
2677 -- If work type attribute change to NOT Null, we need to call default API here.
2678       l_work_type_id := NULL;
2679      ELSE
2680       l_work_type_id := l_project_in_rec.work_type_id;
2681      END IF;
2682 
2683      IF l_project_in_rec.calendar_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2684      THEN
2685       l_calendar_id := NULL;
2686      ELSE
2687       l_calendar_id := l_project_in_rec.calendar_id;
2688      END IF;
2689 
2690     IF l_project_in_rec.location_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2691      THEN
2692       l_location_id := NULL;
2693      ELSE
2694       l_location_id := l_project_in_rec.location_id;
2695      END IF;
2696 
2697      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 )
2698      THEN
2699                 l_probability_member_id := NULL;
2700      ELSE
2701                 --Bug#5191521 included validation for probability_member_id
2702 
2703                 OPEN  cur_validate_prob_member( l_project_in_rec.created_from_project_id,l_project_in_rec.probability_member_id);
2704                 FETCH cur_validate_prob_member INTO l_check_prob_id;
2705                 CLOSE cur_validate_prob_member;
2706 
2707                 IF l_check_prob_id ='Y' THEN
2708 
2709                         l_probability_member_id := l_project_in_rec.probability_member_id;
2710                 ELSE
2711                         l_probability_member_id := NULL;
2712                 END IF;
2713                 -- ENd of changes for Bug#5191521.
2714 
2715      END IF;
2716 
2717      IF l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2718      THEN
2719       l_project_value := NULL;
2720 
2721      ELSE
2722 --Added for bug 5214431
2723              IF l_project_in_rec.project_value IS NOT NULL AND l_project_in_rec.project_value   < 0 THEN
2724                         PA_UTILS.ADD_MESSAGE
2725                          ( p_app_short_name   => 'PA'
2726                           ,p_msg_name         => 'PA_INVLD_OPPORTUNITY_VALUE');
2727                            RAISE FND_API.G_EXC_ERROR;
2728             ELSE
2729              l_project_value := l_project_in_rec.project_value;
2730            END IF;
2731      END IF;
2732 
2733 
2734      IF l_project_in_rec.expected_approval_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2735      THEN
2736         l_expected_approval_date := NULL;
2737      ELSE
2738         l_expected_approval_date := l_project_in_rec.expected_approval_date;
2739      END IF;
2740 
2741      IF l_project_in_rec.cost_job_group_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2742      THEN
2743       l_cost_job_group_id := NULL;
2744      ELSE
2745       l_cost_job_group_id := l_project_in_rec.cost_job_group_id;
2746      END IF;
2747 
2748      IF l_project_in_rec.bill_job_group_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2749      THEN
2750       l_bill_job_group_id := NULL;
2751      ELSE
2752       l_bill_job_group_id := l_project_in_rec.bill_job_group_id;
2753      END IF;
2754 
2755 -- ORM Code change ends here ...
2756 
2757      -- Bug 6144566: Changes start
2758      -- Bug 6144566: Introduced MCB related validations
2759 
2760      IF l_project_in_rec.multi_currency_billing_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2761         OR l_project_in_rec.multi_currency_billing_flag IS NULL  THEN
2762         l_project_in_rec.multi_currency_billing_flag :=null;
2763      ELSE
2764         IF l_project_in_rec.multi_currency_billing_flag = 'Y' THEN
2765            -- do MCB related validations
2766 
2767            -- Project Currency related attributes
2768            IF l_project_in_rec.PROJECT_BIL_RATE_TYPE is NULL
2769               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
2770               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2771      	    FND_MESSAGE.SET_NAME('PA','PA_PROJ_RATE_TYPE_INV_AMG');
2772      	    FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
2773      	    FND_MSG_PUB.ADD;
2774      	    RAISE  FND_API.G_EXC_ERROR;
2775               END IF;
2776            ELSE
2777               IF l_project_in_rec.PROJECT_BIL_RATE_TYPE = 'User' THEN
2778                  IF l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE is NULL
2779                     OR l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2780                     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.
2781      	          FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PC_AMG');
2782      	          FND_MSG_PUB.ADD;
2783      	          RAISE  FND_API.G_EXC_ERROR;
2784                     END IF;
2785                  END IF;
2786               ELSE  -- non-User type
2787                  IF l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE is NULL
2788                     OR l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2789 
2790                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2791                        FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2792                        FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
2793                        FND_MSG_PUB.ADD;
2794                        RAISE  FND_API.G_EXC_ERROR;
2795                     END IF;
2796                  ELSE
2797                     IF l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE = 'FIXED_DATE' THEN  --Modified for bug 6332591
2798                        IF l_project_in_rec.PROJECT_BIL_RATE_DATE is NULL
2799                           OR l_project_in_rec.PROJECT_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2800                           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2801      	        	FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2802                              FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
2803      	        	FND_MSG_PUB.ADD;
2804      	        	RAISE  FND_API.G_EXC_ERROR;
2805                           END IF;
2806                        END IF;
2807                     END IF;
2808                  END IF;
2809               END IF;
2810            END IF;
2811 
2812            -- Project Functional Currency related attributes
2813            IF l_project_in_rec.PROJFUNC_BIL_RATE_TYPE is NULL
2814               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
2815               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2816                  FND_MESSAGE.SET_NAME('PA','PA_PFC_RATE_TYPE_INV_AMG');
2817                  FND_MSG_PUB.ADD;
2818                  RAISE  FND_API.G_EXC_ERROR;
2819               END IF;
2820            ELSE
2821               IF l_project_in_rec.PROJFUNC_BIL_RATE_TYPE = 'User' THEN
2822                  IF l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE is NULL
2823                     OR l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2824                     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.
2825              	  FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PF_AMG');
2826              	  FND_MSG_PUB.ADD;
2827              	  RAISE  FND_API.G_EXC_ERROR;
2828                     END IF;
2829                  END IF;
2830 
2831               ELSE  -- non-User type
2832                  IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE is NULL
2833                     OR l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2834                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2835                        FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2836                        FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
2837                        FND_MSG_PUB.ADD;
2838                        RAISE  FND_API.G_EXC_ERROR;
2839                     END IF;
2840                  ELSE
2841                     IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE = 'FIXED_DATE' THEN  --Modified for bug 6332591
2842                        IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE is NULL
2843                           OR l_project_in_rec.PROJFUNC_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2844                           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2845      	        	FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2846                              FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
2847              		FND_MSG_PUB.ADD;
2848              		RAISE  FND_API.G_EXC_ERROR;
2849                           END IF;
2850                        END IF;
2851                     END IF;
2852                  END IF;
2853               END IF;
2854            END IF;
2855 
2856 
2857            -- Funding Currency related attributes
2858            IF l_project_in_rec.FUNDING_RATE_TYPE is NULL
2859               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
2860               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2861                  FND_MESSAGE.SET_NAME('PA','PA_FUND_RATE_TYPE_INV_AMG');
2862                  FND_MSG_PUB.ADD;
2863                  RAISE  FND_API.G_EXC_ERROR;
2864               END IF;
2865            ELSE
2866               IF l_project_in_rec.FUNDING_RATE_TYPE = 'User' THEN
2867                  IF l_project_in_rec.FUNDING_EXCHANGE_RATE is NULL
2868                     OR l_project_in_rec.FUNDING_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2869                     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.
2870              	  FND_MESSAGE.SET_NAME('PA','PA_EXCHANGE_RATE_NULL');
2871              	  FND_MSG_PUB.ADD;
2872              	  RAISE  FND_API.G_EXC_ERROR;
2873                     END IF;
2874                  END IF;
2875 
2876               ELSE  -- non-User type
2877                  IF l_project_in_rec.FUNDING_RATE_DATE_CODE is NULL
2878                     OR l_project_in_rec.FUNDING_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2879                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2880                        FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2881                        FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
2882                        FND_MSG_PUB.ADD;
2883                        RAISE  FND_API.G_EXC_ERROR;
2884                     END IF;
2885                  ELSE
2886                     IF l_project_in_rec.FUNDING_RATE_DATE_CODE = 'FIXED_DATE' THEN  --Modified for bug 6332591
2887                        IF l_project_in_rec.FUNDING_RATE_DATE is NULL
2888                           OR l_project_in_rec.FUNDING_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2889                           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2890      	        	FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2891                              FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
2892              		FND_MSG_PUB.ADD;
2893              		RAISE  FND_API.G_EXC_ERROR;
2894                           END IF;
2895                        END IF;
2896                     END IF;
2897                  END IF;
2898               END IF;
2899            END IF;
2900 
2901         ELSE -- MCB flag is not 'Y'
2902            -- set all currency conversion attributes to NULL
2903 
2904            l_project_in_rec.PROJECT_BIL_RATE_TYPE := NULL;
2905            l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE := NULL;
2906            l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE := NULL;
2907            l_project_in_rec.PROJECT_BIL_RATE_DATE := NULL;
2908 
2909            l_project_in_rec.PROJFUNC_BIL_RATE_TYPE := NULL;
2910            l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE := NULL;
2911            l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE := NULL;
2912            l_project_in_rec.PROJFUNC_BIL_RATE_DATE := NULL;
2913 
2914            l_project_in_rec.FUNDING_RATE_TYPE := NULL;
2915            l_project_in_rec.FUNDING_EXCHANGE_RATE := NULL;
2916            l_project_in_rec.FUNDING_RATE_DATE_CODE := NULL;
2917            l_project_in_rec.FUNDING_RATE_DATE := NULL;
2918 
2919         END IF;
2920      END IF;
2921 
2922 -- Bug 6144566: Changes end
2923 
2924      IF l_project_in_rec.emp_bill_rate_schedule_id =
2925 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2926      THEN
2927       l_emp_bill_rate_schedule_id := NULL;
2928      ELSE
2929    l_emp_bill_rate_schedule_id := l_project_in_rec.emp_bill_rate_schedule_id;
2930      END IF;
2931 
2932      IF l_project_in_rec.job_bill_rate_schedule_id =
2933 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2934      THEN
2935       l_job_bill_rate_schedule_id := NULL;
2936      ELSE
2937    l_job_bill_rate_schedule_id := l_project_in_rec.job_bill_rate_schedule_id;
2938      END IF;
2939 
2940     IF l_project_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2941     THEN l_project_in_rec.carrying_out_organization_id := NULL;
2942     END IF;
2943 
2944 
2945     IF l_project_in_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2946     THEN l_project_in_rec.start_date := NULL;
2947     END IF;
2948 
2949 
2950     IF l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2951     THEN l_project_in_rec.completion_date := NULL;
2952     END IF;
2953 
2954 
2955 --added to remove bug# 604762 : Ashia Bagai - 9-jan-98
2956     IF l_out_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE Then
2957        l_out_start_date := NULL ;
2958     END IF ;
2959 
2960     IF l_out_completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE Then
2961        l_out_completion_date := NULL ;
2962     END IF ;
2963 
2964 --end of addition to remove bug# 604762
2965 
2966 -- opportunity value changes
2967 -- anlee
2968    IF l_project_in_rec.opp_value_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2969      THEN
2970        l_opp_value_currency_code := NULL;
2971      ELSE
2972        l_opp_value_currency_code := l_project_in_rec.opp_value_currency_code;
2973    END IF;
2974 
2975 --Priority code
2976 
2977    IF l_project_in_rec.priority_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2978      THEN
2979        l_priority_code := NULL;
2980      ELSE
2981        l_priority_code := l_project_in_rec.priority_code;
2982    END IF;
2983 
2984    -- 5191417 validate l_priority_code for valid value
2985 
2986    IF l_priority_code IS NOT NULL THEN
2987 
2988         OPEN priority_code_csr(l_priority_code);
2989         FETCH priority_code_csr into l_valid_prio_code;
2990         CLOSE priority_code_csr;
2991 
2992         -- if not valid throw , error message
2993 
2994         IF l_valid_prio_code = 'N' THEN
2995 
2996           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2997 
2998             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
2999                                 ,p_msg_name         => 'PA_INVALID_PRIORITY_CODE');
3000 
3001             l_return_status := FND_API.G_RET_STS_ERROR;
3002 
3003             RAISE  FND_API.G_EXC_ERROR;
3004 
3005           END IF;
3006 
3007         END IF;
3008 
3009    END IF;
3010 
3011    -- 5191417 end
3012 
3013 IF l_project_in_rec.security_level = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3014 
3015        l_security_level := NULL;
3016 ELSE
3017         --Modified this else part for security level validations.Bug#5191699.
3018         --If the user passes an invalid value or if the user passes explicitly as null,
3019         --we need to handle that as,
3020         --security level is mandatory parameter and cant be null and it can take values only
3021         --from the lookup.Hence we update with default value 'Enterprise'.
3022 
3023         OPEN  cur_check_sec_level(l_project_in_rec.security_level);
3024         FETCH cur_check_sec_level INTO l_check_sec_level;
3025         CLOSE cur_check_sec_level;
3026 
3027         IF l_check_sec_level = 'Y' THEN
3028                 -- Not null and a Valid value has been passed
3029                 l_security_level := l_project_in_rec.security_level;
3030         ELSE
3031                 -- Either null has been explicitly passed or invalid value
3032                 -- is passed. Then update it with default value of 'Enterprise'
3033                 -- as this will be always present and cant be deleted or end dated.
3034 
3035                 l_security_level := 1; --1 lookup_code corresponds to 'Enterprise'.
3036         END IF;
3037         --End if code changes for Bug#5191699.
3038 END IF;
3039 /*Addtion started for bug 3825528*/
3040     /* Code added for tracking bug by aditi */
3041 --    --dbms_output.put_line('value of p_customers_in(1).customer_id'||p_customers_in(1).customer_id);
3042      IF l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3043   /* End of Code changes */
3044    -- IF l_project_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM Commented for tracking bug
3045     THEN
3046        l_in_customer_id := NULL;
3047 --    ELSE
3048   --     l_in_customer_id := l_project_in_rec.customer_id;
3049     END IF;
3050 ----dbms_output.put_line('value of l_in_customer_id at the end '||l_in_customer_id);
3051 /*Addtion ends for bug 3825528*/
3052 
3053 
3054 
3055 --sunkalya:federal changes bug#5511353
3056 
3057 OPEN  get_date_eff_funds_flag(l_project_in_rec.created_from_project_id);
3058 FETCH get_date_eff_funds_flag INTO l_orig_date_eff_funds_flag;
3059 CLOSE get_date_eff_funds_flag;
3060 
3061 OPEN  get_ar_rec_notify_flag(l_project_in_rec.created_from_project_id);   -- 7508661 : EnC : Added
3062 FETCH get_ar_rec_notify_flag INTO l_orig_ar_rec_notify_flag;
3063 CLOSE get_ar_rec_notify_flag;
3064 
3065 OPEN  get_auto_release_pwp_inv(l_project_in_rec.created_from_project_id);   -- 7508661 : EnC : Added
3066 FETCH get_auto_release_pwp_inv INTO l_orig_auto_release_pwp_inv;
3067 CLOSE get_auto_release_pwp_inv;
3068                                  /* Added for 12.2Payroll billing ER 11899223 */
3069 /*OPEN  get_bill_labor_accrual(l_project_in_rec.created_from_project_id);   -- 7508661 : EnC : Added
3070 FETCH get_bill_labor_accrual INTO l_orig_bill_labor_accrual;
3071 CLOSE get_bill_labor_accrual;
3072 
3073 OPEN  get_adj_on_std_inv(l_project_in_rec.created_from_project_id);   -- 7508661 : EnC : Added
3074 FETCH get_adj_on_std_inv INTO l_orig_adj_on_std_inv;
3075 CLOSE get_adj_on_std_inv;    */
3076                       /* Added for 12.2Payroll billing ER 11899223 */
3077 OPEN  cur_get_orig_tt_cust_flag(l_project_in_rec.created_from_project_id);
3078 FETCH cur_get_orig_tt_cust_flag INTO l_orig_def_tt_flag;
3079 CLOSE cur_get_orig_tt_cust_flag;
3080 
3081 
3082 IF (l_project_in_rec.date_eff_funds_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3083    (l_project_in_rec.date_eff_funds_flag IS NULL)
3084 THEN
3085 
3086 	l_date_eff_funds_flag := NULL;
3087 
3088 ELSE
3089 
3090 	OPEN  cur_enable_funds_flag(l_project_in_rec.created_from_project_id);
3091 	FETCH cur_enable_funds_flag INTO l_enable_funds_flag;
3092 	CLOSE cur_enable_funds_flag;
3093 
3094 /*
3095 	OPEN  cur_rev_inv(l_project_in_rec.created_from_project_id);
3096 	FETCH cur_rev_inv INTO l_chk_rev_inv_flag;
3097 	CLOSE cur_rev_inv;
3098 */
3099 	IF nvl(l_enable_funds_flag,'N')='N'  AND l_project_in_rec.date_eff_funds_flag ='Y' THEN
3100 
3101 		PA_UTILS.ADD_MESSAGE(	 p_app_short_name  =>  'PA'
3102 					,p_msg_name         => 'PA_FUNDS_FLAG_CANT_ENABLED'
3103 				    );
3104 
3105 		l_return_status := FND_API.G_RET_STS_ERROR;
3106 
3107 		RAISE  FND_API.G_EXC_ERROR;
3108 	END IF;
3109 /*
3110 	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
3111 
3112 		PA_UTILS.ADD_MESSAGE(	 p_app_short_name  =>  'PA'
3113 					,p_msg_name         => 'PA_FUNDS_FLAG_NOT_UPDATBL'
3114 				    );
3115 
3116 		l_return_status := FND_API.G_RET_STS_ERROR;
3117 
3118 		RAISE  FND_API.G_EXC_ERROR;
3119 	END IF;
3120 */
3121 		l_date_eff_funds_flag := l_project_in_rec.date_eff_funds_flag;
3122 END IF;
3123 --sunkalya:federal changes bug#5511353
3124 
3125 
3126 /* 7508661 : EnC : Start */
3127 
3128 IF (l_project_in_rec.ar_rec_notify_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3129    (l_project_in_rec.ar_rec_notify_flag IS NULL)
3130 THEN
3131     l_ar_rec_notify_flag := 'N';
3132 ELSE
3133     l_ar_rec_notify_flag := l_orig_ar_rec_notify_flag;
3134 END IF;
3135 
3136 IF (l_project_in_rec.auto_release_pwp_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3137    (l_project_in_rec.auto_release_pwp_inv IS NULL)
3138 THEN
3139     l_auto_release_pwp_inv := 'Y';
3140 ELSE
3141     l_auto_release_pwp_inv := l_orig_auto_release_pwp_inv;
3142 END IF;
3143 
3144         /* 7508661 : EnC : End */
3145 
3146   /* Added for 12.2Payroll billing ER 11899223 */
3147 IF (l_project_in_rec.bill_labor_accrual = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3148    (l_project_in_rec.bill_labor_accrual IS NULL)
3149 THEN
3150     l_bill_labor_accrual := 'N';
3151 ELSE
3152     l_bill_labor_accrual := l_bill_labor_accrual;
3153 END IF;
3154 
3155 IF (l_project_in_rec.adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3156    (l_project_in_rec.adj_on_std_inv IS NULL)
3157 THEN
3158     l_adj_on_std_inv := 'N';
3159 ELSE
3160     l_adj_on_std_inv := l_adj_on_std_inv;
3161 
3162     END IF;
3163       /* Added for 12.2Payroll billing ER 11899223 */
3164 
3165 
3166 
3167 --Bug 3279981 Review
3168    IF (l_project_in_rec.enable_top_task_customer_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3169      (p_project_in.enable_top_task_customer_flag IS NULL) --Added or condition for bug 4762153
3170    THEN
3171        l_en_top_task_customer_flag := NULL;
3172    ELSE
3173        IF l_project_in_rec.enable_top_task_customer_flag IN ('Y','N') THEN
3174           -- Function Security Check
3175           PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3176           ( p_api_version_number => p_api_version_number,
3177             p_responsibility_id  => l_resp_id,
3178             p_function_name      => 'PA_PAXPREPR_CUST_TOP_TASK',
3179             p_msg_count          => l_msg_count,
3180             p_msg_data           => l_msg_data,
3181             p_return_status      => l_return_status,
3182             p_function_allowed   => l_function_allowed);
3183           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3184                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3185           ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3186                RAISE FND_API.G_EXC_ERROR;
3187           END IF;
3188 
3189           IF l_function_allowed = 'N' THEN
3190                pa_interface_utils_pub.map_new_amg_msg
3191                 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3192                  ,p_msg_attribute    => 'CHANGE'
3193                  ,p_resize_flag      => 'Y'
3194                  ,p_msg_context      => 'GENERAL'
3195                  ,p_attribute1       => ''
3196                  ,p_attribute2       => ''
3197                  ,p_attribute3       => ''
3198                  ,p_attribute4       => ''
3199                  ,p_attribute5       => '');
3200                p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3201                RAISE FND_API.G_EXC_ERROR;
3202           END IF;
3203        ELSE
3204           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3205                pa_interface_utils_pub.map_new_amg_msg
3206                ( p_old_message_code => 'PA_TOP_TASK_CUST_FLAG_INVALID'
3207                 ,p_msg_attribute    => 'NOCHANGE' -- Changed to NOCHANGE for Bug  4762153
3208                 ,p_resize_flag      => 'N'
3209                 ,p_msg_context      => 'PROJ'
3210                 ,p_attribute1       => l_project_in_rec.pm_project_reference
3211                 ,p_attribute2       => ''
3212                 ,p_attribute3       => ''
3213                 ,p_attribute4       => ''
3214                 ,p_attribute5       => '');
3215           END IF;
3216           RAISE  FND_API.G_EXC_ERROR;
3217        END IF;
3218        l_en_top_task_customer_flag := l_project_in_rec.enable_top_task_customer_flag;
3219    END IF;
3220 
3221    IF l_project_in_rec.enable_top_task_inv_mth_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3222        l_en_top_task_inv_mth_flag := NULL;
3223    ELSE
3224        IF l_project_in_rec.enable_top_task_inv_mth_flag IN ('Y','N') THEN
3225           -- Function Security Check
3226           PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3227           ( p_api_version_number => p_api_version_number,
3228             p_responsibility_id  => l_resp_id,
3229             p_function_name      => 'PA_PAXPREPR_INV_MTH_TOP_TASK',
3230             p_msg_count          => l_msg_count,
3231             p_msg_data           => l_msg_data,
3232             p_return_status      => l_return_status,
3233             p_function_allowed   => l_function_allowed);
3234           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3235                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3236           ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3237                RAISE FND_API.G_EXC_ERROR;
3238           END IF;
3239 
3240           IF l_function_allowed = 'N' THEN
3241                pa_interface_utils_pub.map_new_amg_msg
3242                 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3243                  ,p_msg_attribute    => 'CHANGE'
3244                  ,p_resize_flag      => 'Y'
3245                  ,p_msg_context      => 'GENERAL'
3246                  ,p_attribute1       => ''
3247                  ,p_attribute2       => ''
3248                  ,p_attribute3       => ''
3249                  ,p_attribute4       => ''
3250                  ,p_attribute5       => '');
3251                p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3252                RAISE FND_API.G_EXC_ERROR;
3253           END IF;
3254        ELSE
3255           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3256                pa_interface_utils_pub.map_new_amg_msg
3257                ( p_old_message_code => 'PA_TT_INV_MTH_FLAG_INVALID'
3258                 ,p_msg_attribute    => 'CHANGE'
3259                 ,p_resize_flag      => 'N'
3260                 ,p_msg_context      => 'PROJ'
3261                 ,p_attribute1       => l_project_in_rec.pm_project_reference
3262                 ,p_attribute2       => ''
3263                 ,p_attribute3       => ''
3264                 ,p_attribute4       => ''
3265                 ,p_attribute5       => '');
3266           END IF;
3267           RAISE  FND_API.G_EXC_ERROR;
3268        END IF;
3269        l_en_top_task_inv_mth_flag := l_project_in_rec.enable_top_task_inv_mth_flag;
3270    END IF;
3271 --Bug 3279981 Review
3272 
3273     --PROJECT
3274     --create a new project using a template or other project as basis
3275 ----dbms_output.put_line('before calling Copy_Project');
3276     pa_project_core1.copy_project  (
3277      x_orig_project_id => l_project_in_rec.created_from_project_id
3278     ,x_project_name    => RTRIM(l_project_in_rec.project_name)
3279     ,x_long_name       => RTRIM(l_project_in_rec.long_name)
3280     ,x_project_number  => RTRIM(l_create_project_number)
3281     ,x_description     => RTRIM(l_project_in_rec.description)
3282     ,x_project_type    => NULL --project_type is always defaulted from template
3283     ,x_project_status_code => l_project_in_rec.project_status_code
3284     ,x_distribution_rule   => l_project_in_rec.distribution_rule
3285     ,x_public_sector_flag  => l_project_in_rec.public_sector_flag
3286     ,x_organization_id     => l_project_in_rec.carrying_out_organization_id
3287     ,x_start_date          => l_out_start_date
3288     ,x_completion_date     => l_out_completion_date
3289     ,x_probability_member_id => l_probability_member_id
3290     ,x_project_value         => l_project_value
3291     ,x_expected_approval_date => l_expected_approval_date
3292 --Sakthi MCB
3293     ,x_agreement_currency     =>   l_agreement_currency
3294     ,x_agreement_amount       =>   l_agreement_amount
3295     ,x_agreement_org_id       =>   l_agreement_org_id
3296 --Sakthi MCB
3297     ,x_copy_task_flag      => l_copy_task_flag
3298     ,x_copy_budget_flag    => l_copy_budget_flag
3299     ,x_use_override_flag   => l_use_override_flag
3300     ,x_copy_assignment_flag => l_copy_assignment_flag
3301     ,x_template_flag       => l_template_flag
3302     ,x_project_id          => l_project_id
3303     ,x_err_code            => l_err_code
3304     ,x_err_stage           => l_err_stage
3305     ,x_err_stack           => l_err_stack
3306     ,x_new_project_number  => l_project_number_out
3307     ,x_pm_product_code     => p_pm_product_code
3308     ,x_pm_project_reference => RTRIM(l_project_in_rec.pm_project_reference)
3309     ,x_project_currency_code => l_project_currency_code   /* 8297384 */
3310     ,x_attribute_category  => RTRIM(l_attribute_category)
3311     ,x_attribute1          => RTRIM(l_attribute1)
3312     ,x_attribute2          => RTRIM(l_attribute2)
3313     ,x_attribute3          => RTRIM(l_attribute3)
3314     ,x_attribute4          => RTRIM(l_attribute4)
3315     ,x_attribute5          => RTRIM(l_attribute5)
3316     ,x_attribute6          => RTRIM(l_attribute6)
3317     ,x_attribute7          => RTRIM(l_attribute7)
3318     ,x_attribute8          => RTRIM(l_attribute8)
3319     ,x_attribute9          => RTRIM(l_attribute9)
3320     ,x_attribute10         => RTRIM(l_attribute10)
3321     ,x_actual_start_date   => l_actual_start_date
3322     ,x_actual_finish_date  => l_actual_finish_date
3323     ,x_early_start_date    => l_early_start_date
3324     ,x_early_finish_date   => l_early_finish_date
3325     ,x_late_start_date     => l_late_start_date
3326     ,x_late_finish_date    => l_late_finish_date
3327     ,x_scheduled_start_date => l_scheduled_start_date
3328     ,x_scheduled_finish_date => l_scheduled_finish_date
3329     ,x_team_template_id    => l_team_template_id
3330     ,x_country_code        => l_country_code
3331     ,x_region              => l_region
3332     ,x_city                => l_city
3333 -- anlee opportunity changes
3334     ,x_opp_value_currency_code => l_opp_value_currency_code
3335     ,x_org_project_copy_flag  => 'N'
3336     ,x_priority_code       => l_priority_code
3337     ,x_security_level       => l_security_level
3338     ,x_customer_id          =>  l_in_customer_id  --Modified for bug 3825528 l_project_in_rec.customer_id Bug no 3106256
3339     --Bug 3279981 Review FP_M development
3340     ,p_en_top_task_cust_flag    => l_en_top_task_customer_flag
3341     ,p_en_top_task_inv_mth_flag => l_en_top_task_inv_mth_flag
3342     ,p_date_eff_funds_flag => l_date_eff_funds_flag   --sunkalya:federal changes bug#5511353
3343     ,p_ar_rec_notify_flag   =>  l_ar_rec_notify_flag   -- 7508661 : EnC
3344     ,p_auto_release_pwp_inv =>  l_auto_release_pwp_inv -- 7508661 : EnC
3345     );
3346 
3347     IF l_err_code > 0
3348     then
3349    p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3350 
3351    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3352    THEN
3353 
3354       IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3355       THEN
3356 
3357          pa_interface_utils_pub.map_new_amg_msg('PA_COPY_PROJECT_FAILED','CHANGE','N',
3358                       'PROJ',l_project_in_rec.pm_project_reference,
3359                       '','','','');
3360       ELSE
3361 
3362 
3363          pa_interface_utils_pub.map_new_amg_msg(l_err_stage,'CHANGE','Y',
3364                       'PROJ',l_project_in_rec.pm_project_reference,
3365                       '','','','');
3366       END IF;
3367 
3368    END IF;
3369 
3370    p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3371    RAISE FND_API.G_EXC_ERROR;
3372 
3373     ELSIF l_err_code < 0
3374     then
3375 
3376    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3377 
3378    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3379    THEN
3380       pa_interface_utils_pub.map_new_amg_msg('PA_COPY_PROJECT_FAILED','CHANGE','N',
3381                       'PROJ',l_project_in_rec.pm_project_reference,
3382                       '','','','');
3383       /*  Added the following code for bug 3725338 */
3384       FND_MESSAGE.SET_NAME('PA','PA_UNEXPECTED_ERR_AMG');
3385       FND_MESSAGE.SET_TOKEN('ORAERR',  l_err_stage);
3386       FND_MSG_PUB.add;
3387       /* Code addition ended for bug 3725338 */
3388    END IF;
3389 
3390    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3391    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3392 
3393     end IF;
3394 
3395 
3396             --Added for 14539941 to copy the budgetary control information
3397 	If(l_project_id is not null) then
3398 	PA_BUDGET_FUND_PKG.Copy_Budgetary_Controls
3399                              (  p_from_project_id    => l_project_in_rec.created_from_project_id,
3400                                 p_to_project_id      => l_project_id,
3401                                 x_return_status      => l_return_status,
3402                                 x_msg_count          => l_msg_count,
3403                                 x_msg_data           => l_msg_data);
3404 
3405             IF(l_return_status <> 'S') Then
3406                    l_err_code := 725;
3407                    l_err_stage := pa_project_core1.get_message_from_stack('PA_ERR_COPY_BUDGT_CONTRL');
3408                    l_err_stack   := l_err_stack||'->PA_BUDGET_FUND_PKG.Copy_Budgetary_Controls';
3409                   RAISE FND_API.G_EXC_ERROR;
3410            END IF;
3411 	end if; -- end of 14539941
3412 
3413 /*  Not required anymore since they are passed as input to copy project
3414     UPDATE pa_projects
3415     SET pm_project_reference = l_project_in_rec.pm_project_reference
3416     ,   pm_product_code      = p_pm_product_code
3417     WHERE project_id = l_project_id;
3418 */
3419 
3420     --get the values associated to the project
3421     OPEN l_project_csr(l_project_id);
3422     FETCH l_project_csr INTO l_project_rec;
3423     CLOSE l_project_csr;
3424 
3425     -- ADD CUSTOMERS
3426     -- add overridable Primary Customers and their contacts
3427 
3428   /*  IF l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3429     AND l_project_in_rec.customer_id IS NOT NULL */ --commented for tracking bug
3430     IF l_in_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3431     AND l_in_customer_id IS NOT NULL
3432 
3433     THEN
3434 
3435       l_is_overridable := FALSE;
3436   i := l_override_fields_tab.first;
3437   WHILE i IS NOT NULL LOOP
3438 
3439 
3440     IF l_override_fields_tab(i).pa_field_name = 'CUSTOMER_NAME'
3441     THEN
3442       l_is_overridable := TRUE;
3443 			l_project_relationship_code := l_override_fields_tab(i).type; --introduced for Bug#5517655
3444                         --l_relationship_type := l_override_fields_tab(i).type; commented for Bug#5517655
3445       EXIT;
3446     END IF;
3447     i := l_override_fields_tab.next(i);
3448   END LOOP;
3449 
3450   IF NOT l_is_overridable
3451   THEN
3452       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3453       THEN
3454             pa_interface_utils_pub.map_new_amg_msg
3455               ( p_old_message_code => 'PA_CUSTOMER_NOT_OVERRIDABLE'
3456                ,p_msg_attribute    => 'CHANGE'
3457                ,p_resize_flag      => 'Y'
3458                ,p_msg_context      => 'PROJ'
3459                ,p_attribute1       => l_project_in_rec.pm_project_reference
3460                ,p_attribute2       => ''
3461                ,p_attribute3       => ''
3462                ,p_attribute4       => ''
3463                ,p_attribute5       => '');
3464       END IF;
3465 
3466       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3467       RAISE FND_API.G_EXC_ERROR;
3468 
3469   END IF;
3470 
3471   /*Customer Account Relationship Changes*/
3472         IF l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3473     AND l_bill_to_customer_id IS NOT NULL
3474     THEN
3475 
3476         l_is_overridable := FALSE;
3477         i := l_override_fields_tab.first;
3478         WHILE i IS NOT NULL LOOP
3479 
3480 
3481                 IF l_override_fields_tab(i).pa_field_name = 'BILL_TO_CUSTOMER'
3482                 THEN
3483                         l_is_overridable := TRUE;
3484                         EXIT;
3485                 END IF;
3486                 i := l_override_fields_tab.next(i);
3487         END LOOP;
3488 
3489         IF NOT l_is_overridable
3490         THEN
3491                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3492                         THEN
3493             pa_interface_utils_pub.map_new_amg_msg
3494               ( p_old_message_code => 'PA_BILL_TO_NOT_OVERRIDABLE'
3495                ,p_msg_attribute    => 'CHANGE'
3496                ,p_resize_flag      => 'Y'
3497                ,p_msg_context      => 'PROJ'
3498                ,p_attribute1       => l_project_in_rec.pm_project_reference
3499                ,p_attribute2       => ''
3500                ,p_attribute3       => ''
3501                ,p_attribute4       => ''
3502                ,p_attribute5       => '');
3503                         END IF;
3504 
3505                         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3506                         RAISE FND_API.G_EXC_ERROR;
3507 
3508         END IF;
3509       END IF;
3510 
3511     IF l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3512     AND l_ship_to_customer_id IS NOT NULL
3513     THEN
3514 
3515         l_is_overridable := FALSE;
3516         i := l_override_fields_tab.first;
3517         WHILE i IS NOT NULL LOOP
3518 
3519 
3520                 IF l_override_fields_tab(i).pa_field_name = 'SHIP_TO_CUSTOMER'
3521                 THEN
3522                         l_is_overridable := TRUE;
3523                         EXIT;
3524                 END IF;
3525                 i := l_override_fields_tab.next(i);
3526         END LOOP;
3527 
3528         IF NOT l_is_overridable
3529         THEN
3530                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3531                         THEN
3532             pa_interface_utils_pub.map_new_amg_msg
3533               ( p_old_message_code => 'PA_SHIP_TO_NOT_OVERRIDABLE'
3534                ,p_msg_attribute    => 'CHANGE'
3535                ,p_resize_flag      => 'Y'
3536                ,p_msg_context      => 'PROJ'
3537                ,p_attribute1       => l_project_in_rec.pm_project_reference
3538                ,p_attribute2       => ''
3539                ,p_attribute3       => ''
3540                ,p_attribute4       => ''
3541                ,p_attribute5       => '');
3542                         END IF;
3543 
3544                         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3545                         RAISE FND_API.G_EXC_ERROR;
3546 
3547         END IF;
3548      END IF;
3549      ----dbms_output.put_line('Does the control come till here');
3550 /*Customer account relationship changes */
3551 /* Tracking bug ..customer code added in a loop */
3552 i := p_customers_in.first;
3553 ----dbms_output.put_line('value of i'||i);
3554 IF p_customers_in.exists(i) THEN
3555  ----dbms_output.put_line('if CUSTOMER ARE PASSED TO CREATE_PROJECT ');
3556   ----dbms_output.put_line('Value of p_project_in.customer_id'||p_customers_in(i).customer_id);
3557 
3558    /*
3559    These assignments have already been done
3560    l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
3561    l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
3562  --added for bug 3911782
3563    l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
3564    l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
3565    l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
3566    l_cust_bill_split := p_customers_in(i).Customer_Bill_Split; */
3567    ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3568    ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3569    ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3570    ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3571    --changes end for Bug 3911782
3572    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
3573      /* Commented the below code for Bug#5517655 */
3574 
3575      /*IF p_customers_in(i).project_relationship_code IS NULL OR
3576         p_customers_in(i).project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
3577           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3578               THEN
3579                pa_utils.add_message
3580                 ( p_app_short_name   => 'PA'-- new message for AA TRACKING
3581                  ,p_msg_name    => 'PA_RELATIONSHIP_CODE_REQD'
3582                  ,p_token1           => 'PROJECT_NAME'
3583                  ,p_value1           => l_project_rec.segment1
3584                  ,p_token2           => 'CUSTOMER_ID'
3585                  ,p_value2           => p_customers_in(i).customer_id
3586                 );
3587              END IF;
3588              RAISE FND_API.G_EXC_ERROR;
3589          END IF;
3590       */ --End of commenting for Bug#5517655
3591 
3592       IF p_customers_in(i).CUSTOMER_BILL_SPLIT IS NULL OR
3593         p_customers_in(i).CUSTOMER_BILL_SPLIT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
3594         l_cust_bill_split := 100; --Default it to 100
3595       END If;
3596 /* End of tracking changes */
3597  END IF;
3598    /* Code added for tracking bug */
3599        ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
3600    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)
3601       then
3602         ----dbms_output.put_line('is this fired');
3603 
3604          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
3605            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3606               THEN
3607                pa_utils.add_message
3608               ( p_app_short_name   => 'PA'-- new message for tracking bug
3609                  ,p_msg_name    => 'PA_CONTACT_TYPE_REQD'
3610                  ,p_token1           => 'PROJECT_NAME'
3611                  ,p_value1           => l_project_in_rec.pm_project_reference
3612                  ,p_token2           => 'CUSTOMER_ID'
3613                  ,p_value2           => p_customers_in(i).customer_id
3614                  ,p_token3           => 'CONTACT_ID'
3615                  ,p_value3           => p_customers_in(i).CONTACT_ID
3616               );
3617            END IF;
3618             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3619             p_return_status             := FND_API.G_RET_STS_ERROR;
3620             RAISE FND_API.G_EXC_ERROR;
3621          END IF;
3622    end if;
3623         ----dbms_output.put_line('Error is hrown soon after this');
3624       If  p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
3625         l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
3626 	l_ship_to_contact_id := NULL; -- Bug 5622539
3627       ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
3628         l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
3629 	l_bill_to_contact_id := NULL; -- Bug 5622539
3630       Else
3631         l_bill_to_contact_id := NULL;
3632         l_ship_to_contact_id := NULL;
3633       End If;
3634       /** end of chnages for tracking bug by aditi **/
3635 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
3636 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
3637 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
3638 
3639 /* Code changes end for tracking bug */
3640 If (l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3641        OR (l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3642         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
3643 
3644 --bug 3716805
3645     THEN
3646       If l_in_customer_id IS NULL OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3647        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3648             THEN
3649             pa_interface_utils_pub.map_new_amg_msg
3650             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
3651              ,p_msg_attribute    => 'CHANGE'
3652              ,p_resize_flag      => 'N'
3653              ,p_msg_context      => 'PROJ'
3654              ,p_attribute1       => l_project_in_rec.pm_project_reference
3655              ,p_attribute2       => ''
3656              ,p_attribute3       => ''
3657              ,p_attribute4       => ''
3658              ,p_attribute5       => '');
3659         END IF;
3660             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3661             p_return_status             := FND_API.G_RET_STS_ERROR;
3662             RAISE FND_API.G_EXC_ERROR;
3663     end if;
3664 
3665 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
3666 END if; -- end here
3667 -------------------------------------------------------------------------------------------
3668 ----dbms_output.put_line('before calling get_customer_info');
3669 ----dbms_output.put_line('If project_in_rec_type is there - then control will directl come here');
3670 
3671 
3672    If (l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3673        OR (l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3674 
3675 --bug 3716805
3676     THEN
3677       If l_in_customer_id IS NULL OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3678        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3679             THEN
3680             pa_interface_utils_pub.map_new_amg_msg
3681             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
3682              ,p_msg_attribute    => 'CHANGE'
3683              ,p_resize_flag      => 'N'
3684              ,p_msg_context      => 'PROJ'
3685              ,p_attribute1       => l_project_in_rec.pm_project_reference
3686              ,p_attribute2       => ''
3687              ,p_attribute3       => ''
3688              ,p_attribute4       => ''
3689              ,p_attribute5       => '');
3690         END IF;
3691             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3692             p_return_status             := FND_API.G_RET_STS_ERROR;
3693             RAISE FND_API.G_EXC_ERROR;
3694     end if;
3695 
3696 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
3697 
3698 
3699 /* Bug 3077676 Begin */
3700 
3701  -- Not adding this error message in get_customer_info as that is called from lot of other places too
3702  -- and it would be a risk changing that.
3703 
3704    OPEN  get_cust_acc_rel_code;
3705    FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
3706    CLOSE get_cust_acc_rel_code;
3707  -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
3708    -- relations ship code is N.
3709    /* CODE COMMENTED FOR TRACKING BUG
3710    IF(NVL(l_cust_acc_rel_code,'N') ='N' and
3711       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
3712     ((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
3713       l_project_in_rec.customer_id <> l_project_in_rec.bill_to_customer_id
3714      ) or
3715      (
3716       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
3717       l_project_in_rec.customer_id <> l_project_in_rec.ship_to_customer_id
3718     ))
3719    THEN
3720             pa_interface_utils_pub.map_new_amg_msg
3721               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3722                ,p_msg_attribute    => 'CHANGE'
3723                ,p_resize_flag      => 'Y'
3724                ,p_msg_context      => 'PROJ'
3725                ,p_attribute1       => l_project_in_rec.pm_project_reference
3726                ,p_attribute2       => ''
3727                ,p_attribute3       => ''
3728                ,p_attribute4       => ''
3729                ,p_attribute5       => '');
3730            RAISE FND_API.G_EXC_ERROR;
3731    END IF; */
3732   /* Code added for tracking bug */
3733      IF(NVL(l_cust_acc_rel_code,'N') ='N' and
3734       l_in_customer_id IS NOT NULL AND l_in_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
3735     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3736       l_in_customer_id <> l_bill_to_customer_id
3737      ) or
3738      (
3739       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3740      l_in_customer_id <> l_ship_to_customer_id
3741     ))
3742    THEN
3743             pa_interface_utils_pub.map_new_amg_msg
3744               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3745                ,p_msg_attribute    => 'CHANGE'
3746                ,p_resize_flag      => 'Y'
3747                ,p_msg_context      => 'PROJ'
3748                ,p_attribute1       => l_project_in_rec.pm_project_reference
3749                ,p_attribute2       => ''
3750                ,p_attribute3       => ''
3751                ,p_attribute4       => ''
3752                ,p_attribute5       => '');
3753            RAISE FND_API.G_EXC_ERROR;
3754    END IF;
3755 
3756    /* End of part 1 tracking */
3757 
3758 
3759    /* Bug 3123361. Commenting the following validation as the complete validation of the below is done above.
3760    IF NVL(l_cust_acc_rel_code,'N') ='N'
3761            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
3762        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
3763        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
3764        AND l_project_in_rec.customer_id <> l_project_in_rec.bill_to_customer_id
3765        AND l_project_in_rec.customer_id <> l_project_in_rec.ship_to_customer_id
3766    THEN
3767             pa_interface_utils_pub.map_new_amg_msg
3768               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3769                ,p_msg_attribute    => 'CHANGE'
3770                ,p_resize_flag      => 'Y'
3771                ,p_msg_context      => 'PROJ'
3772                ,p_attribute1       => l_project_in_rec.pm_project_reference
3773                ,p_attribute2       => ''
3774                ,p_attribute3       => ''
3775                ,p_attribute4       => ''
3776                ,p_attribute5       => '');
3777            RAISE FND_API.G_EXC_ERROR;
3778 
3779    END IF;
3780    */
3781 /* Bug 3077676 End */
3782 
3783       -- 4193743 IF bill_to_cutomer_id and ship_to_customer_id are not passed set it to NULL
3784       -- as get_customer_info relies on NULL value not the PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3785       -- Using the local variables l_ship_to_customer_id and l_bill_to_customer_id for further processing
3786 /* The code below is being commented by aditi for tracking bug..these assignmentd have already been made
3787 at the begiinning of the customers addition code
3788 
3789       IF l_project_in_rec.bill_to_customer_id IS NOT NULL AND
3790          l_project_in_rec.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3791       THEN
3792          l_bill_to_customer_id := NULL;
3793       ELSE
3794          -- if value is passed assign it to local variable
3795          l_bill_to_customer_id := l_project_in_rec.bill_to_customer_id; -- 4193743 review comment
3796       END IF;
3797 
3798       IF l_project_in_rec.ship_to_customer_id IS NOT NULL AND
3799          l_project_in_rec.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3800       THEN
3801          l_ship_to_customer_id := NULL;
3802       ELSE
3803          -- if value is passed assign it to local variable
3804          l_ship_to_customer_id := l_project_in_rec.ship_to_customer_id; --  4193743 review comment
3805       END IF;
3806 
3807      -- 4193743 end */
3808 
3809 /* Start of changes for bug 5482997 */
3810 
3811       IF l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3812          l_bill_to_customer_id := NULL;
3813       END IF;
3814 
3815       IF l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3816          l_ship_to_customer_id := NULL;
3817       END IF;
3818 
3819 /* End of changes for bug 5482997 */
3820 
3821 
3822 ----dbms_output.put_line('Before CALLING get_cstomer_info');
3823 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3824 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3825 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3826 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3827 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3828 ----dbms_output.put_line('Value of l_bill_to_contact_id'||l_bill_to_contact_id);
3829 ----dbms_output.put_line('Value of l_ship_to_contact_id'||l_ship_to_contact_id);
3830 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3831 
3832 /* Bug 5731766 This code was moved to before get_customer_info call
3833        We need to bypass call get_customer_info if l_proj_type_class
3834        is 'contract'.*/
3835 IF l_project_id IS NOT NULL THEN
3836 OPEN  c_prj(l_project_id);
3837 FETCH c_prj INTO l_proj_status, l_proj_type_class;
3838 CLOSE c_prj;
3839 END IF;
3840 
3841 --if condition introduced for bug 5731766
3842 --dbms_output.put_line('Value of l_source_project_type '||l_proj_type_class);
3843 If nvl(l_proj_type_class,'NONE') = 'CONTRACT' then
3844       pa_customer_info.get_customer_info( X_project_ID          => l_project_id      --CAR changes
3845                                          ,X_Customer_Id         => l_in_customer_id -- l_project_in_rec.customer_id tracking
3846                                          ,X_Bill_To_Customer_Id => l_bill_to_customer_id -- 4193743 l_project_in_rec.bill_to_customer_id  -- car changes
3847                                          ,X_Ship_To_Customer_Id => l_ship_to_customer_id -- 4193743 l_project_in_rec.ship_to_customer_id  -- car changes
3848                                          ,X_Bill_To_Address_Id  => l_bill_to_address_id
3849                                          ,X_Ship_To_Address_Id  => l_ship_to_address_id
3850                                          ,X_Bill_To_Contact_Id  => l_bill_to_contact_id
3851                                          ,X_Ship_To_Contact_Id  => l_ship_to_contact_id
3852                                          ,X_Err_Code            => l_err_code
3853                                          ,X_Err_Stage           => l_err_stage
3854                                          ,X_Err_Stack           => l_err_stack
3855                                          ,p_calling_module      => 'AMG' --added for Bug#4770535
3856                                         );
3857 
3858 
3859 ----dbms_output.put_line('AFTER calling get_customer_info l_err_code'||l_err_code);
3860 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3861 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3862 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3863 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3864 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3865 ----dbms_output.put_line('Value of l_bill_to_contact_id'||l_bill_to_contact_id);
3866 ----dbms_output.put_line('Value of l_ship_to_contact_id'||l_ship_to_contact_id);
3867 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3868 -- For this API,error code 10 is a warning.Anything above 10 is an error
3869       IF l_err_code > 10
3870       THEN
3871 
3872     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3873     THEN
3874 
3875       IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3876       THEN
3877             pa_interface_utils_pub.map_new_amg_msg
3878               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
3879                ,p_msg_attribute    => 'CHANGE'
3880                ,p_resize_flag      => 'Y'
3881                ,p_msg_context      => 'PROJ'
3882                ,p_attribute1       => l_project_in_rec.pm_project_reference
3883                ,p_attribute2       => ''
3884                ,p_attribute3       => ''
3885                ,p_attribute4       => ''
3886                ,p_attribute5       => '');
3887          ELSE
3888             pa_interface_utils_pub.map_new_amg_msg
3889               ( p_old_message_code => l_err_stage
3890                ,p_msg_attribute    => 'CHANGE'
3891                ,p_resize_flag      => 'Y'
3892                ,p_msg_context      => 'PROJ'
3893                ,p_attribute1       => l_project_in_rec.pm_project_reference
3894                ,p_attribute2       => ''
3895                ,p_attribute3       => ''
3896                ,p_attribute4       => ''
3897                ,p_attribute5       => '');
3898       END IF;
3899 
3900     END IF;
3901 
3902     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3903     RAISE FND_API.G_EXC_ERROR;
3904 
3905       ELSIF l_err_code < 0
3906       THEN
3907 
3908     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3909     THEN
3910             pa_interface_utils_pub.map_new_amg_msg
3911               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
3912                ,p_msg_attribute    => 'CHANGE'
3913                ,p_resize_flag      => 'Y'
3914                ,p_msg_context      => 'PROJ'
3915                ,p_attribute1       => l_project_in_rec.pm_project_reference
3916                ,p_attribute2       => ''
3917                ,p_attribute3       => ''
3918                ,p_attribute4       => ''
3919                ,p_attribute5       => '');
3920     END IF;
3921 
3922     p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3923     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3924       END IF;
3925 end if;  --bug 5731766
3926 --bug 5731766
3927 If l_bill_to_customer_id is null then
3928     l_bill_to_customer_id := l_in_customer_id;
3929 end if;
3930 
3931 If l_ship_to_customer_id is null then
3932     l_ship_to_customer_id := l_in_customer_id;
3933 end if;
3934 --bug 5731766
3935 
3936 -- IC and Multi National Currency Changes starts here ...
3937 
3938 /* commented for bug 3000981*/
3939 /*    OPEN l_customer_csr (l_project_in_rec.customer_id);
3940     FETCH l_customer_csr INTO l_inv_currency_code,
3941                               l_inv_rate_type,
3942                               l_inv_rate_date,
3943                               l_inv_exchange_rate,
3944                               l_allow_inv_rate_type_fg,
3945                               l_bill_another_prj_flag,
3946                               l_receiver_task_id;
3947     CLOSE l_customer_csr;
3948 */
3949 /* commented till here for bug 3000981*/
3950 
3951 /* added for bug 3000981*/
3952     OPEN cur_pa_impl;
3953     FETCH cur_pa_impl INTO l_inv_rate_type;
3954     CLOSE cur_pa_impl;
3955 /* added till for bug 3000981*/
3956 
3957 
3958 -- IC and Multi National Currency Changes ends here ...
3959 
3960 --  Removed because of the ALL OR NOTHING decision
3961 --  --only create customer when there is a billing and shipping address
3962 --  IF l_err_code <> 20
3963 --  THEN
3964 
3965 -- Bug 3279981
3966 -- Set the values of customer bill split and default top task customer flag colums based on
3967 -- whether the top task customer flag is checked or not
3968 
3969 --sunkalya federal changes. Bug#5511353
3970 
3971 IF l_project_in_rec.enable_top_task_customer_flag = 'Y' OR l_project_in_rec.date_eff_funds_flag ='Y' THEN
3972 
3973      l_cust_bill_split := null;
3974 
3975      IF (l_project_in_rec.enable_top_task_customer_flag = 'Y') THEN
3976 
3977 	l_def_tt_cust_flag := 'Y';
3978      ELSE
3979 	l_def_tt_cust_flag := 'N';
3980      END IF;
3981 
3982 ELSIF l_project_in_rec.enable_top_task_customer_flag = 'N' AND l_project_in_rec.date_eff_funds_flag ='N' THEN
3983       l_cust_bill_split := 100;
3984       l_def_tt_cust_flag := 'N';
3985 
3986 ELSIF l_project_in_rec.enable_top_task_customer_flag ='N' OR l_project_in_rec.date_eff_funds_flag ='N' THEN
3987 
3988       IF l_project_in_rec.enable_top_task_customer_flag ='N' THEN
3989 		IF l_orig_date_eff_funds_flag ='Y' THEN
3990 			l_cust_bill_split := null;
3991 			l_def_tt_cust_flag := 'N';
3992 		ELSE
3993 			l_cust_bill_split := 100;
3994 			l_def_tt_cust_flag := 'N';
3995 		END IF;
3996       ELSIF l_project_in_rec.date_eff_funds_flag ='N' THEN
3997 		IF l_orig_def_tt_flag ='Y' THEN
3998 			l_cust_bill_split := null;
3999 			l_def_tt_cust_flag := 'Y';
4000 		ELSE
4001 			l_cust_bill_split := 100;
4002 			l_def_tt_cust_flag := 'N';
4003 		END IF;
4004       END IF;
4005 
4006 ELSIF l_orig_def_tt_flag = 'Y' OR l_orig_date_eff_funds_flag ='Y' THEN
4007 
4008      l_cust_bill_split := null;
4009 
4010      IF l_orig_def_tt_flag = 'Y' THEN
4011 	l_def_tt_cust_flag := 'Y';
4012      END IF;
4013 ELSE
4014 
4015      l_cust_bill_split := 100;
4016      l_def_tt_cust_flag := 'N';
4017 
4018 END IF;
4019 --sunkalya:federal changes bug#5511353
4020 ----dbms_output.put_line('Before Calling create_customer_contacts');
4021 
4022   pa_customer_info.create_customer_contacts
4023                                ( l_project_id
4024                                 ,l_in_customer_id -- l_project_in_rec.customer_id
4025                                 ,l_project_relationship_code -- l_relationship_type tracking
4026                                 --Bug 3279981
4027                                 --,100
4028                                 ,l_cust_bill_split
4029                                 ,l_bill_to_customer_id -- 4193743 l_project_in_rec.bill_to_customer_id  -- car changes
4030                                 ,l_ship_to_customer_id -- 4193743 l_project_in_rec.ship_to_customer_id  -- car changes
4031                                 ,l_bill_to_address_id
4032                                 ,l_ship_to_address_id
4033                                 ,l_bill_to_contact_id
4034                                 ,l_ship_to_contact_id
4035                                           --bug 2293158
4036                                 --,nvl(l_inv_currency_code, l_project_currency_code)
4037                                 ,l_project_currency_code -- bug 3000981
4038                                 ,l_inv_rate_type
4039                                 ,l_inv_rate_date
4040                                 ,l_inv_exchange_rate
4041                                 ,l_allow_inv_rate_type_fg
4042                                 ,l_bill_another_prj_flag
4043                                 ,l_receiver_task_id
4044                                 ,l_def_tt_cust_flag   --Bug 3279981
4045                                 ,fnd_global.user_id
4046                                 ,fnd_global.login_id
4047                                 ,l_err_code
4048                                 ,l_err_stage
4049                                 ,l_err_stack );
4050 ----dbms_output.put_line('After  Calling create_customer_contacts l_err_code'||l_err_code);
4051 
4052 
4053   IF l_err_code > 0
4054    THEN
4055 
4056       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4057       THEN
4058 
4059         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4060         THEN
4061                                     pa_interface_utils_pub.map_new_amg_msg
4062                                        ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
4063                                         ,p_msg_attribute    => 'CHANGE'
4064                                         ,p_resize_flag      => 'N'
4065                                         ,p_msg_context      => 'PROJ'
4066                                         ,p_attribute1       => l_project_in_rec.pm_project_reference
4067                                         ,p_attribute2       => ''
4068                                         ,p_attribute3       => ''
4069                                         ,p_attribute4       => ''
4070                                         ,p_attribute5       => '');
4071                                 ELSE
4072                                      pa_interface_utils_pub.map_new_amg_msg
4073                                         ( p_old_message_code => l_err_stage
4074                                          ,p_msg_attribute    => 'CHANGE'
4075                                          ,p_resize_flag      => 'N'
4076                                          ,p_msg_context      => 'PROJ'
4077                                          ,p_attribute1       => l_project_in_rec.pm_project_reference
4078                                          ,p_attribute2       => ''
4079                                          ,p_attribute3       => ''
4080                                          ,p_attribute4       => ''
4081                                          ,p_attribute5       => '');
4082         END IF;
4083 
4084       END IF;
4085 
4086       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4087       RAISE FND_API.G_EXC_ERROR;
4088 
4089         ELSIF l_err_code < 0
4090         THEN
4091 
4092       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4093       THEN
4094                             pa_interface_utils_pub.map_new_amg_msg
4095                              ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
4096                               ,p_msg_attribute    => 'CHANGE'
4097                               ,p_resize_flag      => 'N'
4098                               ,p_msg_context      => 'PROJ'
4099                               ,p_attribute1       => l_project_in_rec.pm_project_reference
4100                               ,p_attribute2       => ''
4101                               ,p_attribute3       => ''
4102                               ,p_attribute4       => ''
4103                               ,p_attribute5       => '');
4104       END IF;
4105 
4106       p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4107       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4108         END IF;
4109         --END if;
4110 
4111                 --Call copy retention after all customers are created.
4112                 DECLARE
4113                 BEGIN
4114                      pa_retention_util.copy_retention_setup (
4115                             p_fr_project_id             => l_project_in_rec.created_from_project_id
4116                            ,p_to_project_id             => l_project_id
4117                            ,p_fr_date                   => l_project_rec.start_date
4118                            ,p_to_date                   => l_project_rec.completion_date
4119                            ,x_return_status             => l_return_status
4120                            ,x_msg_count                 => l_msg_count
4121                            ,x_msg_data                  => l_msg_data);
4122 
4123                      l_msg_count := FND_MSG_PUB.count_msg;
4124                      IF l_msg_count > 0 THEN
4125                         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4126                         RAISE  FND_API.G_EXC_ERROR;
4127                      END IF;
4128                 END;
4129                 --End copy retention changes.
4130 
4131 --  END IF; --l_err_code <> 20
4132 
4133        -- anlee org role changes
4134        -- create a project party if the added customer is an organization
4135        l_party_id := null;
4136        l_project_party_id := null;
4137        OPEN l_check_org_csr(l_in_customer_id);
4138        FETCH l_check_org_csr INTO l_party_id;
4139        IF l_check_org_csr%NOTFOUND then
4140          l_party_id := null;
4141        END IF;
4142        CLOSE l_check_org_csr;
4143 
4144        if l_party_id is not null then
4145 
4146           PA_PROJECT_PARTIES_PUB.CREATE_PROJECT_PARTY(
4147             p_validate_only              => FND_API.G_FALSE
4148           , p_object_id                  => l_project_id
4149           , p_OBJECT_TYPE                => 'PA_PROJECTS'
4150           , p_project_role_id            => 100
4151           , p_project_role_type          => 'CUSTOMER_ORG'
4152           , p_RESOURCE_TYPE_ID           => 112
4153           , p_resource_source_id         => l_party_id
4154           , p_start_date_active          => null
4155           , p_calling_module             => 'FORM'
4156           , p_project_id                 => l_project_id
4157           , p_project_end_date           => null
4158           , p_end_date_active            => l_end_date_active
4159           , x_project_party_id           => l_project_party_id
4160           , x_resource_id                => l_resource_id
4161           , x_wf_item_type               => l_wf_item_type
4162           , x_wf_type                    => l_wf_type
4163           , x_wf_process                 => l_wf_party_process
4164           , x_assignment_id              => l_assignment_id
4165           , x_return_status              => l_return_status
4166           , x_msg_count                  => l_msg_count
4167           , x_msg_data                   => l_msg_data );
4168 
4169           l_msg_count := FND_MSG_PUB.count_msg;
4170           IF l_msg_count > 0 THEN
4171             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4172             RAISE  FND_API.G_EXC_ERROR;
4173           END IF;
4174 
4175           -- Add the new project party ID to the customers row
4176           UPDATE PA_PROJECT_CUSTOMERS
4177           SET project_party_id = l_project_party_id
4178           WHERE project_id = l_project_id
4179           AND customer_id = l_in_customer_id; -- l_project_in_rec.customer_id; Tracking
4180        end if;
4181 
4182     END IF; --customer exists
4183 /*
4184 
4185 --Sunkalya federal. Bug#5511353
4186     OPEN  count_cust(l_project_id);
4187     FETCH count_cust INTO l_count_cust;
4188     CLOSE count_cust;
4189 
4190     OPEN  chk_task_level_funding(l_project_id);
4191     FETCH chk_task_level_funding INTO l_chk_task_level_funding;
4192     CLOSE chk_task_level_funding;
4193 
4194 
4195     IF l_count_cust > 1										AND
4196        l_chk_task_level_funding = 'Y'								AND
4197        l_project_in_rec.date_eff_funds_flag = 'N'						AND
4198        l_orig_date_eff_funds_flag= 'Y'								AND
4199        (
4200 		l_project_in_rec.enable_top_task_customer_flag = 'N' OR
4201 			(
4202 				nvl(l_project_in_rec.enable_top_task_customer_flag,
4203 				PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
4204 				l_orig_def_tt_flag = 'N'
4205 			)
4206        )
4207 THEN
4208 		PA_UTILS.ADD_MESSAGE(	 p_app_short_name  =>  'PA'
4209 					,p_msg_name         => 'PA_TASK_FUNDING_EXIST'
4210 				    );
4211 
4212 		l_return_status := FND_API.G_RET_STS_ERROR;
4213 
4214 		RAISE  FND_API.G_EXC_ERROR;
4215 
4216 END IF;
4217 --Sunkalya federal. Bug#5511353
4218 
4219 */
4220 
4221     -- KEY_MEMBER
4222     -- add overridable Key Members
4223 
4224     -- l_key_members := p_key_members; Commented for Bug 6408593
4225 
4226     i := l_key_members.first;
4227 
4228     IF l_key_members.exists(i)
4229     THEN
4230 
4231     --checking for overridability is done in the called procedure add_key_members
4232 
4233   WHILE i IS NOT NULL LOOP
4234 
4235         /*Commented the below code for the bug 2910972 since the defaulting is handled in the
4236         pa_project_parties_pub.create_project_party when a null value is passed*/
4237 
4238    /*IF l_key_members(i).start_date IS NULL
4239     OR l_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4240     THEN   IF l_project_rec.start_date IS NULL
4241       OR l_project_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4242       THEN l_key_members(i).start_date := trunc(sysdate);
4243       ELSE l_key_members(i).start_date := l_project_rec.start_date;
4244       END IF;
4245     END IF;*/
4246 
4247      /*Bug#2910972-Adding the below code*/
4248 
4249      IF l_key_members(i).start_date =
4250         PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4251      THEN
4252         l_key_members(i).start_date := NULL;
4253      END IF;
4254 
4255 /*
4256 -- Not required.Key member end date can be left blank.Otherwise poses
4257 -- problems with security,since a key member has to be currently active
4258 -- to be able to update a project and defaulting the end date to the
4259 -- project's end date would result in inability to update projects
4260 -- with earlier completion dates
4261 
4262     IF l_key_members(i).end_date IS NULL
4263     OR l_key_members(i).end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4264     THEN   IF l_project_rec.completion_date IS NULL
4265       OR l_project_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4266       THEN l_key_members(i).end_date := NULL;
4267       ELSE l_key_members(i).end_date := l_project_rec.completion_date;
4268       END IF;
4269     END IF;
4270 */
4271     IF l_key_members(i).end_date =
4272                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
4273        l_key_members(i).end_date := NULL;
4274                 END IF;
4275 
4276     i := l_key_members.next(i);
4277 
4278   END LOOP;
4279 
4280   pa_project_pvt.add_key_members(l_return_status
4281               ,l_project_in_rec.created_from_project_id
4282               ,l_project_id
4283               ,l_key_members
4284                );
4285 
4286       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4287       THEN
4288       p_project_out.return_status := l_return_status;
4289       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4290 
4291       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4292       THEN
4293       p_project_out.return_status := l_return_status;
4294       RAISE FND_API.G_EXC_ERROR;
4295       END IF;
4296 
4297       /* Start of code for bug #2111806
4298          Call the check_manager_date_range to check if the Project
4299      Manager exists for the complete duration of the Project. */
4300 
4301       pa_project_check_pvt.check_manager_date_range(p_project_id    =>  l_project_id
4302                                ,p_return_status =>  l_return_status);
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       /* End of code for bug #2111806 */
4315 
4316     END IF;
4317 
4318     /* Start of code for bug #2111806
4319        Throw an error if there are no Project Managers assigned.
4320        This has to be thrown irrespective of whether there are any Key Member records
4321        being passed or not. So, it cannot be done in the above IF condition. */
4322 
4323 
4324     /* Bug 5731766 This code was moved to before get_customer_info call
4325        We need to bypass call get_customer_info if l_proj_type_class
4326        is 'contract'.
4327     IF l_project_id IS NOT NULL THEN
4328     OPEN  c_prj(l_project_id);
4329     FETCH c_prj INTO l_proj_status, l_proj_type_class;
4330     CLOSE c_prj;
4331     END IF;
4332     */
4333     /* The check has to be done only for an Approved Contract Type project. */
4334     IF (nvl(l_proj_type_class,'NONE') = 'CONTRACT' AND
4335         nvl(l_proj_status,'UNAPPROVED') = 'APPROVED') THEN
4336     OPEN c_prj_count(l_project_id);
4337     FETCH c_prj_count INTO l_prj_mgr_count;
4338     CLOSE c_prj_count;
4339         IF l_prj_mgr_count = 0 THEN
4340           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4341          pa_utils.add_message
4342           ( p_app_short_name   => 'PA'
4343            ,p_msg_name         => 'PA_PR_INSUF_PROJ_MGR'
4344           );
4345               RAISE FND_API.G_EXC_ERROR;
4346           END IF;
4347         END IF;
4348     END IF;
4349     /* End of code for bug #2111806 */
4350 
4351     -- anlee org role changes
4352     -- ORG_ROLE
4353     -- add overridable Org Roles
4354 
4355     l_org_roles := p_org_roles;
4356 
4357     i := l_org_roles.first;
4358 
4359     IF l_org_roles.exists(i)
4360     THEN
4361 
4362     --checking for overridability is done in the called procedure add_org_roles
4363 
4364   WHILE i IS NOT NULL LOOP
4365 
4366     IF l_org_roles(i).start_date IS NULL
4367     OR l_org_roles(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4368     THEN   IF l_project_rec.start_date IS NULL
4369       OR l_project_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4370       THEN l_org_roles(i).start_date := trunc(sysdate);
4371       ELSE l_org_roles(i).start_date := l_project_rec.start_date;
4372       END IF;
4373     END IF;
4374 
4375     IF l_org_roles(i).end_date =
4376                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
4377        l_org_roles(i).end_date := NULL;
4378                 END IF;
4379 
4380     i := l_org_roles.next(i);
4381 
4382   END LOOP;
4383 
4384   pa_project_pvt.add_org_roles(l_return_status
4385               ,l_project_in_rec.created_from_project_id
4386               ,l_project_id
4387               ,l_org_roles
4388                );
4389 
4390       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4391       THEN
4392       p_project_out.return_status := l_return_status;
4393       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4394 
4395       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4396       THEN
4397       p_project_out.return_status := l_return_status;
4398       RAISE FND_API.G_EXC_ERROR;
4399       END IF;
4400 
4401     END IF;
4402 
4403 
4404     --CLASS_CATEGORY
4405     --add overidable Class Categories
4406 
4407 
4408     i := p_class_categories.first;
4409 
4410     IF p_class_categories.exists(i)
4411     THEN
4412 
4413     --checking for overridability is done in the called procedure add_class_categories
4414 
4415   pa_project_pvt.add_class_categories(l_return_status
4416                                      ,l_project_in_rec.created_from_project_id
4417              ,l_project_id
4418              ,p_class_categories
4419           );
4420 
4421      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4422       THEN
4423       p_project_out.return_status := l_return_status;
4424       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4425 
4426       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4427       THEN
4428           p_project_out.return_status := l_return_status;
4429       RAISE FND_API.G_EXC_ERROR;
4430       END IF;
4431 
4432     END IF;
4433 
4434 
4435     -- need to understand feature of p_multiple_task_msg := 'F';
4436 
4437 --Project Structure Integration
4438 --This creates the
4439 /*  not required as
4440         l_delta := PA_PROJ_TASK_STRUC_PUB.get_proj_dates_delta(
4441                        l_project_in_rec.created_from_project_id
4442                       ,l_out_start_date );
4443 */
4444 
4445 /*--bug 2805602 we dont this anymore as copy project will take care of creating structures only
4446         PA_PROJ_TASK_STRUC_PUB.COPY_STRUCTURE(
4447                    p_dest_project_id         => l_project_id
4448                   ,p_src_project_id          => l_project_in_rec.created_from_project_id
4449                   ,p_delta                   => l_delta
4450                   ,p_copy_task_flag          => 'N'
4451                   ,x_msg_count               => l_msg_count
4452                   ,x_msg_data                => l_msg_data
4453                   ,x_return_status           => l_return_status  );
4454 
4455        --The following code is copied from create_project_party call above.
4456        l_msg_count := FND_MSG_PUB.count_msg;
4457        IF l_msg_count > 0 THEN
4458           p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4459           RAISE  FND_API.G_EXC_ERROR;
4460        END IF;
4461 */
4462 
4463 --Project Connect 4.0
4464       PA_PROJECT_PVT.get_structure_version(
4465                p_project_id             => l_project_id
4466               ,p_structure_versions_out => g_struc_out_tbl
4467             );
4468 
4469 --Project Connect 4.0
4470 
4471        --syns up pa_proj_elements with pa_tasks
4472 /* not required this anymore
4473 
4474        --Clean up first the unwanted tasks that are created by copy_structure in pa_proj_elements
4475        --although they had not been created in pa_tasks.
4476 
4477        PA_PROJ_TASK_STRUC_PUB.Clean_unwanted_tasks(
4478              p_project_id         => l_project_id
4479             ,x_msg_count          => l_msg_count
4480             ,x_msg_data           => l_msg_data
4481             ,x_return_status      => l_return_status
4482            );
4483 
4484        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4485        THEN
4486            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4487 
4488        ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4489        THEN
4490            RAISE FND_API.G_EXC_ERROR;
4491        END IF;
4492 */
4493 
4494 --Project Structure Integration
4495 
4496    --bug 2738747      --create project api. Here ther is actually no pupose of this call
4497    G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
4498    G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
4499    G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
4500    --bug 2738747
4501 
4502    G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
4503     --Begin Add by rtarway FP.M changes for mapping
4504    G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
4505    --End Add by rtarway FP.M changes for mapping
4506 
4507 --TASK
4508 --add tasks to the just created project
4509 
4510 --ISSUE
4511 --Where do I get the info about automatic numbering for SEGMENT1
4512 
4513 --  l_structure_type := p_structure_in.structure_type;
4514 
4515 i := p_tasks_in.first;
4516 
4517 v_first_index := i;          --proj conn
4518 
4519 -- Bug 4146369 : Added following condition so that the error comes if user has passed tasks
4520 -- and when both the structures are disbaled in the source project.
4521 -- If we do not raise error here, then user will get Invalid Paramters passed error
4522 -- which will not make much sense to users.
4523 l_bug_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( l_project_in_rec.created_from_project_id );
4524 l_bug_fp_enabled := PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( l_project_in_rec.created_from_project_id );
4525 
4526 IF l_bug_wp_enabled = 'N' AND l_bug_fp_enabled = 'N' AND p_tasks_in.exists(i)
4527 THEN
4528     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4529               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
4530               -- Workplan or Financial Structures must be enabled at source project/template level in order to enter Tasks.
4531     RAISE FND_API.G_EXC_ERROR ;
4532 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'
4533 THEN
4534     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4535               p_msg_name       => 'PA_WRONG_STR_TYPE_AMG' );
4536               -- Please enter the correct structure type or enable the Workplan/Financial structure at the source project/template level.
4537     RAISE FND_API.G_EXC_ERROR ;
4538 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'
4539 THEN
4540     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4541               p_msg_name       => 'PA_WRONG_STR_TYPE_AMG' );
4542               -- Please enter the correct structure type or enable the Workplan/Financial structure at the source project/template level.
4543     RAISE FND_API.G_EXC_ERROR ;
4544 END IF;
4545 
4546 IF p_tasks_in.exists(i)
4547    --Project Structures
4548    AND l_structure_in_rec.structure_type = 'FINANCIAL'
4549    --Project Structures
4550 THEN
4551 
4552    --Inserting tasks will be done in 2 steps
4553    --1> an INSERT step to get a task_id linked to task_reference
4554    --2> and then an UPDATE step to get the appropriate parent id and toptask id.
4555    --This second step will also be used to default data from parents to children.
4556 
4557    --get the project_type_class_code and service_code associated to the project_type
4558 
4559    OPEN l_project_type_csr(l_project_rec.project_type);
4560    FETCH l_project_type_csr INTO l_project_type_rec;
4561    CLOSE l_project_type_csr;
4562 
4563 
4564    --ROUND TRIP 1
4565 
4566    WHILE i IS NOT NULL LOOP
4567 
4568   --initialize return status to success
4569   p_tasks_out(i).return_status   := FND_API.G_RET_STS_SUCCESS;
4570 
4571   l_task_in_rec := p_tasks_in(i);
4572 
4573         pa_project_pvt.validate_billing_info (
4574 	   p_project_id         =>l_project_id,  -- Added for Bug 5643876
4575            p_project_class_code =>l_project_type_rec.project_type_class_code,
4576            p_in_task_rec        =>l_task_in_rec,
4577            p_return_status      =>l_return_status
4578   );
4579 
4580 
4581      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4582       THEN
4583       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4584 
4585       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4586       THEN
4587             p_multiple_task_msg := 'F';
4588 --          RAISE FND_API.G_EXC_ERROR;
4589       END IF;
4590 
4591        IF l_task_in_rec.adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4592      THEN
4593        t_adj_on_std_inv := NULL;
4594      ELSE
4595        t_adj_on_std_inv := l_task_in_rec.adj_on_std_inv;
4596    END IF;
4597 
4598  if t_adj_on_std_inv is not null then
4599     OPEN c_adj_on_std_inv(t_adj_on_std_inv);
4600         FETCH c_adj_on_std_inv into task_adj_on_std_inv;
4601         CLOSE c_adj_on_std_inv;
4602 
4603         if task_adj_on_std_inv <> 'X' then
4604 
4605           PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
4606                                 ,p_msg_name         => 'PA_INVALID_ADJ_ON_STD_INV');
4607 
4608             l_return_status := FND_API.G_RET_STS_ERROR;
4609 
4610             RAISE  FND_API.G_EXC_ERROR;
4611 
4612 
4613 
4614         END IF;
4615 
4616 end if;
4617 
4618     -- Actions performed using the APIs would be subject to
4619     -- function security. If the responsibility does not allow
4620     -- such functions to be executed, the API should not proceed further
4621     -- since the user does not have access to such functions
4622 
4623     -- Function security procedure check whether user have the
4624     -- privilege to add task or not
4625 
4626     --Bug 2471668: we do not need to assign project id to the global variable as it is already done
4627     --above before checking for create_project function.
4628 
4629       PA_PM_FUNCTION_SECURITY_PUB.check_function_security
4630       (p_api_version_number => p_api_version_number,
4631        p_responsibility_id  => l_resp_id,
4632        p_function_name      => 'PA_PM_ADD_TASK',
4633        p_msg_count       => l_msg_count,
4634        p_msg_data           => l_msg_data,
4635        p_return_status      => l_return_status,
4636        p_function_allowed   => l_function_allowed);
4637 
4638 
4639       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4640       THEN
4641          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4642 
4643       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4644       THEN
4645             p_multiple_task_msg := 'F';
4646 --          RAISE FND_API.G_EXC_ERROR;
4647       END IF;
4648 
4649       IF l_function_allowed = 'N' THEN
4650          pa_interface_utils_pub.map_new_amg_msg
4651            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
4652             ,p_msg_attribute    => 'CHANGE'
4653             ,p_resize_flag      => 'Y'
4654             ,p_msg_context      => 'GENERAL'
4655             ,p_attribute1       => ''
4656             ,p_attribute2       => ''
4657             ,p_attribute3       => ''
4658             ,p_attribute4       => ''
4659             ,p_attribute5       => '');
4660          p_return_status := FND_API.G_RET_STS_ERROR;
4661             p_multiple_task_msg := 'F';
4662 --          RAISE FND_API.G_EXC_ERROR;
4663       END IF;
4664 
4665       /*Code added for bug 2982057*/
4666 
4667        IF l_task_in_rec.long_task_name IS NULL
4668        OR l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4669        THEN
4670          l_task_in_rec.long_task_name := l_task_in_rec.task_name;
4671        ELSE
4672          l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
4673        END IF;
4674 
4675        /*Code addition for bug 2982057 ends*/
4676 
4677      pa_project_pvt.add_task_round_one(l_return_status
4678               ,l_project_rec
4679               ,l_task_in_rec
4680               ,l_project_type_rec.project_type_class_code
4681               ,l_project_type_rec.service_type_code
4682               ,l_task_id);
4683 
4684   -- assign the appropriate values to the task out record
4685   p_tasks_out(i).return_status    := l_return_status;
4686   p_tasks_out(i).pa_task_id    := l_task_id;
4687   p_tasks_out(i).pm_task_reference := l_task_in_rec.pm_task_reference;
4688 
4689      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4690       THEN
4691       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4692 
4693       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4694       THEN
4695             p_multiple_task_msg := 'F';
4696 --          RAISE FND_API.G_EXC_ERROR;
4697       END IF;
4698 
4699   i := p_tasks_in.next(i);
4700 
4701    END LOOP;
4702 
4703    --ROUND TRIP 2
4704 
4705    i := p_tasks_in.first;
4706 
4707    WHILE i IS NOT NULL LOOP
4708 
4709   --move the incoming record to a local record
4710   l_task_in_rec   := p_tasks_in(i);
4711 
4712   --get the unique task ID for this task
4713   l_task_id  := p_tasks_out(i).pa_task_id;
4714 
4715   pa_project_pvt.add_task_round_two(l_return_status
4716               ,l_project_rec
4717               ,l_task_id
4718               ,l_task_in_rec
4719                --project structures
4720                ,null
4721                ,p_tasks_in
4722                ,p_tasks_out
4723                ,l_task_version_id
4724                ,'N'               -- Bug 2931183 p_create_task_structure param.
4725             -- distinguishes bulk calling context.
4726                --project structures
4727                );
4728 
4729   -- assign the return_status to the task out record
4730   p_tasks_out(i).return_status := l_return_status;
4731   p_tasks_out(i).task_version_id := l_task_version_id;
4732 
4733      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4734       THEN
4735       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4736 
4737       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4738       THEN
4739             p_multiple_task_msg := 'F';
4740 --          RAISE FND_API.G_EXC_ERROR;
4741       END IF;
4742 
4743   --move to next task in task pl/sql table
4744   i := p_tasks_in.next(i);
4745 
4746    END LOOP;
4747 
4748 --Project Structures
4749 ELSIF p_tasks_in.exists(i)
4750    AND l_structure_in_rec.structure_type = 'WORKPLAN'
4751 THEN
4752 
4753     IF G_WP_STR_EXISTS = 'N' OR
4754        G_IS_WP_SEPARATE_FROM_FN = 'N' --bug 2876703         --create project
4755     THEN
4756         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4757         THEN
4758             pa_interface_utils_pub.map_new_amg_msg
4759               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
4760                   ,p_msg_attribute    => 'CHANGE'
4761                   ,p_resize_flag      => 'N'
4762                   ,p_msg_context      => 'GENERAL'
4763                   ,p_attribute1       => ''
4764                   ,p_attribute2       => ''
4765                   ,p_attribute3       => ''
4766                   ,p_attribute4       => ''
4767                   ,p_attribute5       => '');
4768         END IF;
4769         RAISE FND_API.G_EXC_ERROR;
4770     END IF;
4771 
4772 
4773 
4774     -- Actions performed using the APIs would be subject to
4775     -- function security. If the responsibility does not allow
4776     -- such functions to be executed, the API should not proceed further
4777     -- since the user does not have access to such functions
4778 
4779     -- Function security procedure check whether user have the
4780     -- privilege to add task or not
4781 
4782     --Bug 2471668: we do not need to assign project id to the global variable as it is already done
4783     --above before checking for create_project function.
4784 
4785       PA_PM_FUNCTION_SECURITY_PUB.check_function_security
4786       (p_api_version_number => p_api_version_number,
4787        p_responsibility_id  => l_resp_id,
4788        p_function_name      => 'PA_PM_ADD_TASK',
4789        p_msg_count       => l_msg_count,
4790        p_msg_data           => l_msg_data,
4791        p_return_status      => l_return_status,
4792        p_function_allowed   => l_function_allowed);
4793 
4794 
4795       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4796       THEN
4797          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4798 
4799       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4800       THEN
4801             p_multiple_task_msg := 'F';
4802             RAISE FND_API.G_EXC_ERROR;
4803       END IF;
4804 
4805       IF l_function_allowed = 'N' THEN
4806          pa_interface_utils_pub.map_new_amg_msg
4807            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
4808             ,p_msg_attribute    => 'CHANGE'
4809             ,p_resize_flag      => 'Y'
4810             ,p_msg_context      => 'GENERAL'
4811             ,p_attribute1       => ''
4812             ,p_attribute2       => ''
4813             ,p_attribute3       => ''
4814             ,p_attribute4       => ''
4815             ,p_attribute5       => '');
4816          p_return_status := FND_API.G_RET_STS_ERROR;
4817             p_multiple_task_msg := 'F';
4818             RAISE FND_API.G_EXC_ERROR;
4819       END IF;
4820    /*
4821    FP K one off Bug 2931183
4822    Commenting out this loop. Instead of this processing, we will call process_task_structure_bulk
4823    API which needs to be called only once.
4824 
4825 
4826 
4827    WHILE i IS NOT NULL LOOP
4828 
4829         --initialize return status to success
4830         p_tasks_out(i).return_status    := FND_API.G_RET_STS_SUCCESS;
4831 
4832         l_task_in_rec := p_tasks_in(i);
4833 
4834      IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
4835   AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
4836      THEN
4837         v_parent_task_id := l_task_in_rec.pa_parent_task_id;
4838      ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4839      AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
4840      THEN
4841        --convert pm_parent_task_reference to parent_task_id.
4842        --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
4843        PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
4844               p_pm_parent_task_reference      =>  l_task_in_rec.pm_parent_task_reference
4845              ,p_project_id                    =>  l_project_id
4846              ,x_parent_task_id                =>  v_parent_task_id
4847              ,x_return_status                 =>  l_return_status
4848            );
4849 
4850        IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4851        THEN
4852            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4853      THEN
4854                      pa_interface_utils_pub.map_new_amg_msg
4855                      ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
4856                       ,p_msg_attribute    => 'CHANGE'
4857                       ,p_resize_flag      => 'N'
4858                       ,p_msg_context      => 'TASK'
4859                       ,p_attribute1       => l_amg_segment1
4860                       ,p_attribute2       => l_amg_task_number
4861                       ,p_attribute3       => ''
4862                       ,p_attribute4       => ''
4863                       ,p_attribute5       => '');
4864            END IF;
4865            RAISE  FND_API.G_EXC_ERROR;
4866        END IF;
4867 
4868      ELSE
4869         v_parent_task_id := null;
4870      END IF;
4871 
4872      --proj conn
4873      IF i = v_first_index
4874      THEN
4875         l_ref_task_id := null;
4876      ELSE
4877         l_ref_task_id := v_task_id;
4878      END IF;
4879     --proj conn
4880 
4881      PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
4882               p_project_id                   => l_project_id
4883              ,p_task_id                      => l_task_in_rec.pa_task_id
4884              ,p_parent_task_id               => v_parent_task_id
4885              ,p_ref_task_id                  => l_ref_task_id   --proj conn
4886              ,p_task_number                  => l_task_in_rec.pa_task_number
4887              ,p_task_name                    => l_task_in_rec.long_task_name    --bug 2833194
4888              ,p_task_description             => l_task_in_rec.task_description
4889              ,p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id
4890              ,p_calling_module               => 'AMG'
4891              ,p_structure_type               => l_structure_in_rec.structure_type
4892              ,p_OBLIGATION_START_DATE        => l_task_in_rec.OBLIGATION_START_DATE
4893              ,p_OBLIGATION_FINISH_DATE       => l_task_in_rec.OBLIGATION_FINISH_DATE
4894              ,p_ESTIMATED_START_DATE         => l_task_in_rec.ESTIMATED_START_DATE
4895              ,p_ESTIMATED_FINISH_DATE        => l_task_in_rec.ESTIMATED_FINISH_DATE
4896              ,p_BASELINE_START_DATE          => l_task_in_rec.BASELINE_START_DATE
4897              ,p_BASELINE_FINISH_DATE         => l_task_in_rec.BASELINE_FINISH_DATE
4898              ,p_CLOSED_DATE                  => l_task_in_rec.CLOSED_DATE
4899              ,p_WQ_UOM_CODE                  => l_task_in_rec.WQ_UOM_CODE
4900              ,p_WQ_ITEM_CODE                 => l_task_in_rec.WQ_ITEM_CODE
4901              ,p_STATUS_CODE                  => l_task_in_rec.STATUS_CODE
4902              ,p_WF_STATUS_CODE               => l_task_in_rec.WF_STATUS_CODE
4903              ,p_PM_SOURCE_CODE               => p_PM_product_code
4904              ,p_PRIORITY_CODE                => l_task_in_rec.PRIORITY_CODE
4905              ,p_MILESTONE_FLAG               => l_task_in_rec.MILESTONE_FLAG
4906              ,p_CRITICAL_FLAG                => l_task_in_rec.CRITICAL_FLAG
4907              ,p_INC_PROJ_PROGRESS_FLAG       => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
4908              ,p_LINK_TASK_FLAG               => l_task_in_rec.LINK_TASK_FLAG
4909              ,p_CALENDAR_ID                  => l_task_in_rec.CALENDAR_ID
4910              ,p_PLANNED_EFFORT               => l_task_in_rec.PLANNED_EFFORT
4911              ,p_DURATION                     => l_task_in_rec.DURATION
4912              ,p_PLANNED_WORK_QUANTITY        => l_task_in_rec.PLANNED_WORK_QUANTITY
4913              ,p_TASK_TYPE                    => l_task_in_rec.TASK_TYPE
4914              ,p_actual_start_date                  => l_task_in_rec.actual_start_date
4915              ,p_actual_finish_date                 => l_task_in_rec.actual_finish_date
4916              ,p_early_start_date                   => l_task_in_rec.early_start_date
4917              ,p_early_finish_date                  => l_task_in_rec.early_finish_date
4918              ,p_late_start_date                    => l_task_in_rec.late_start_date
4919              ,p_late_finish_date                   => l_task_in_rec.late_finish_date
4920              ,p_scheduled_start_date               => l_task_in_rec.scheduled_start_date
4921              ,p_scheduled_finish_date              => l_task_in_rec.scheduled_finish_date
4922              ,P_PM_SOURCE_reference                => l_task_in_rec.pm_task_reference
4923              ,p_location_id                        => l_task_in_rec.address_id
4924              ,p_manager_person_id                  => l_task_in_rec.task_manager_person_id
4925 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
4926              ,p_ext_act_duration                   => l_task_in_rec.ext_act_duration
4927              ,p_ext_remain_duration                => l_task_in_rec.ext_remain_duration
4928              ,p_ext_sch_duration                   => l_task_in_rec.ext_sch_duration
4929 -- (End venkat) new params for bug #3450684 -------------------------------------------------
4930              ,x_task_version_id                    => l_task_version_id
4931              ,x_task_id                            => v_task_id
4932              ,x_msg_count                    => l_msg_count
4933              ,x_msg_data                     => l_msg_data
4934              ,x_return_status                => l_return_status
4935                      );
4936 
4937         -- assign the appropriate values to the task out record
4938         p_tasks_out(i).return_status     := l_return_status;
4939         p_tasks_out(i).pa_task_id        := v_task_id;
4940         p_tasks_out(i).task_version_id   := l_task_version_id;
4941         p_tasks_out(i).pm_task_reference := l_task_in_rec.pm_task_reference;
4942 
4943         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4944         THEN
4945            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4946 
4947         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4948         THEN
4949           p_multiple_task_msg := 'F';
4950           RAISE FND_API.G_EXC_ERROR;
4951         END IF;
4952 
4953         i := p_tasks_in.next(i);
4954 
4955    END LOOP;
4956 
4957    FP K one off Bug 2931183
4958    */
4959 --Project Structures
4960 
4961 END IF; --p_tasks_in.exists(i)
4962 
4963 -- Bug 5622539
4964        pa_project_pvt.validate_data(
4965             p_calling_context  => 'CREATE_PROJECT',
4966             p_project_id       => l_project_id,
4967             x_msg_count        => l_msg_count,
4968             x_msg_data         => l_msg_data,
4969             x_return_status    => l_return_status
4970         );
4971        p_return_status := l_return_status;
4972 
4973         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4974             THEN
4975                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4976 
4977         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4978             THEN
4979                 RAISE FND_API.G_EXC_ERROR;
4980         END IF;
4981 
4982 -- Made the following changes for post FP K one off. Bug 2931183
4983 -- Performance changes.
4984 IF l_debug_mode = 'Y' THEN
4985    pa_debug.g_err_stage := 'Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
4986    pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
4987 END IF;
4988 
4989 --Set the global variable G_OP_VALIDATE_FLAG.
4990 --BUG 4218977
4991 G_OP_VALIDATE_FLAG := p_op_validate_flag;
4992 
4993 PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK
4994    (  p_api_version_number              => p_api_version_number
4995      ,p_commit                          => FND_API.G_FALSE --p_commit : Bug 3668424: passing p_commit as FND_API.G_FALSE
4996      ,p_project_id                      => l_project_id                 -- Changed during UT.
4997      ,p_source_project_id               => l_project_in_rec.created_from_project_id --ADUT. Included this new param.
4998      ,p_pm_product_code                 => p_pm_product_code
4999      ,p_structure_type                  => p_structure_in.structure_type
5000      ,p_tasks_in_tbl                    => p_tasks_in
5001      ,p_wp_str_exists                   => G_WP_STR_EXISTS
5002      ,p_is_wp_separate_from_fn          => G_IS_WP_SEPARATE_FROM_FN
5003      ,p_is_wp_versioning_enabled        => G_IS_WP_VERSIONING_ENABLED
5004      ,p_structure_version_id            => null
5005      ,p_process_mode                    => l_project_in_rec.process_mode -- PA L Changes 3010538
5006      ,px_tasks_out_tbl                  => p_tasks_out
5007      ,x_return_status                   => p_return_status
5008      ,x_msg_count                       => p_msg_count
5009      ,x_msg_data                        => p_msg_data
5010     );
5011 
5012 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5013      IF l_debug_mode = 'Y' THEN
5014         pa_debug.g_err_stage := 'Errors in PROCESS_TASK_STRUCTURE_BULK ' ;
5015         pa_debug.write(g_module_name,pa_debug.g_err_stage,4);
5016      END IF;
5017      p_multiple_task_msg := 'F';
5018 END IF;
5019 
5020 IF l_debug_mode = 'Y' THEN
5021    pa_debug.g_err_stage := 'Returned from PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
5022    pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5023 END IF;
5024 
5025 /* Post FP K one off. Bug 2931183
5026    Commenting this code as this is done in PA_PROJ_TASK_STRUC_PUB.process_task_structure_bulk.
5027 --bug 2732895   --create_project
5028 IF ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
5029    ( 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
5030 THEN
5031   PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
5032              p_tasks_in             => p_tasks_out
5033             ,p_task_version_id      => null
5034             ,x_msg_count            => l_msg_count
5035             ,x_msg_data             => l_msg_data
5036             ,x_return_status        => l_return_status
5037        );
5038 
5039         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5040         THEN
5041            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5042 
5043         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5044         THEN
5045           p_multiple_task_msg := 'F';
5046           RAISE FND_API.G_EXC_ERROR;
5047         END IF;
5048 
5049   --bug 2856033
5050 
5051   PA_PROJ_TASK_STRUC_PUB.rollup_dates(
5052              p_tasks_in             => p_tasks_out
5053             ,p_task_version_id      => null
5054             ,p_project_id           => l_project_id
5055             ,P_structure_version_id => null
5056             ,x_msg_count            => l_msg_count
5057             ,x_msg_data             => l_msg_data
5058             ,x_return_status        => l_return_status
5059        );
5060 
5061         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5062         THEN
5063            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5064 
5065         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5066         THEN
5067           p_multiple_task_msg := 'F';
5068           RAISE FND_API.G_EXC_ERROR;
5069         END IF;
5070 
5071   --bug 2856033
5072 
5073 END IF;
5074 --bug 2732895
5075 Post FP K one off. Bug 2931183
5076 */
5077    IF p_multiple_task_msg = 'F'
5078    THEN
5079       RAISE FND_API.G_EXC_ERROR;
5080    END IF;
5081 
5082 -- FP-M Bug # 3301192 --create project
5083    l_d_loop_count := p_tasks_in.first;
5084    WHILE l_d_loop_count IS NOT NULL LOOP
5085       l_task_in_rec := p_tasks_in(l_d_loop_count);
5086 
5087       /*PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_project_out.pa_project_id
5088                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
5089                                               ,p_out_task_id => l_d_task_id
5090                                               ,p_return_status => l_return_status);*/
5091 
5092       --Begin Comment by rtarway for FP.M Changes,
5093       --This call is redundant because Task Id is already available,
5094       --Also CONVERT_PM_TASKREF_TO_ID will fail is Spilt_mapping
5095       -- p_project_out.pa_project_id is not available till this point. Should be replaced by following.
5096       -- l_d_task_id := p_tasks_out(l_d_loop_count).pa_task_id;
5097 
5098       --Commented by rtarway FP.M Changes for Mapping
5099       --IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(p_project_out.pa_project_id) = 'Y') THEN
5100       IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
5101 
5102 --maansari5/18 replaced api call CONVERT_PM_TASKREF_TO_ID to CONVERT_PM_TASKREF_TO_ID_all
5103       IF l_d_task_id IS NULL AND
5104          l_task_in_rec.pm_task_reference IS NOT NULL AND
5105          l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5106       THEN
5107         PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id
5108                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
5109                                               ,p_structure_type => p_structure_in.structure_type
5110                                               ,p_out_task_id => l_d_task_id
5111                                               ,p_return_status => l_return_status);
5112 
5113            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5114            THEN
5115               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5116            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5117            THEN
5118               p_multiple_task_msg := 'F';
5119               RAISE FND_API.G_EXC_ERROR;
5120            END IF;
5121         END IF;
5122 --maansari5/18
5123 
5124           --Set the global variable G_OP_VALIDATE_FLAG before going for dependence validation.
5125 
5126           IF NVL(PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED,'N') = 'Y'
5127           THEN
5128              l_d_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
5129           ELSE
5130              l_d_structure_version_id :=  PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID( l_project_id, 'WORKPLAN');
5131           END IF;
5132 
5133           l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_d_structure_version_id
5134                       ,p_task_id => l_d_task_id);
5135 
5136           pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
5137                                  ,p_delimeter => l_task_in_rec.pred_delimiter
5138                                  ,p_task_version_Id => l_d_task_ver_id
5139                                  ,x_return_status => l_return_status
5140                                  ,x_msg_count => l_msg_count
5141                                  ,x_msg_data  => l_msg_data);
5142 
5143            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5144            THEN
5145               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5146            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5147            THEN
5148               p_multiple_task_msg := 'F';
5149               RAISE FND_API.G_EXC_ERROR;
5150            END IF;
5151            l_d_task_id := null;
5152 
5153    END IF;
5154    l_d_loop_count := p_tasks_in.next(l_d_loop_count);
5155   END LOOP;
5156 -- Check to see if WF had been enabled by Copy projects
5157 -- If so, then need to commit.
5158 
5159 OPEN l_get_wf_status_csr (l_project_id);
5160 FETCH l_get_wf_status_csr INTO l_wf_status_code;
5161 CLOSE l_get_wf_status_csr;
5162 
5163 p_project_out.pa_project_id   := l_project_id;
5164 p_project_out.pa_project_number := l_project_number_out;
5165 
5166 -- Need to commit if either workflow had been started
5167 -- or p_commit was TRUE
5168 
5169 -- 22-DEC-97, jwhite ----------------------------------------------------------
5170 -- Added new OUT-paramter p_workflow_started
5171 
5172 IF (l_wf_status_code = 'IN_ROUTE' )
5173  THEN
5174   p_workflow_started    := 'Y';
5175 END IF;
5176 -- -----------------------------------------------------------------------------------
5177 
5178 --<EA Add Project/Task level Extensible Attributes>
5179 
5180     i := p_ext_attr_tbl_in.first;
5181 
5182     IF p_ext_attr_tbl_in.exists(i)
5183     THEN
5184      PA_USER_ATTR_PUB.Process_User_Attrs_Data(
5185          p_ext_attr_data_table   => p_ext_attr_tbl_in,
5186          p_project_id            => l_project_id,
5187          p_structure_type        => l_structure_in_rec.structure_type,
5188          x_failed_row_id_list    => l_failed_row_id_list,
5189          x_errorcode             => l_errorcode,
5190          x_msg_count             => l_msg_count,
5191          x_msg_data              => l_msg_data,
5192          x_return_status         => l_return_status      );
5193 
5194       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5195       THEN
5196          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5197       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5198       THEN
5199          RAISE FND_API.G_EXC_ERROR;
5200       END IF;
5201    END IF;
5202 --</EA Add Project/Task level Extensible Attributes>
5203 --Begin Add by rtarway for set financial task
5204 
5205 IF (G_PROJECT_SHARING_TYPE='SHARE_PARTIAL' AND l_structure_in_rec.structure_type = 'FINANCIAL' )
5206 THEN
5207      i := p_tasks_in.first();
5208 
5209      WHILE i IS NOT NULL LOOP
5210           --Initialize the return status to success
5211           p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
5212           l_task_in_rec := p_tasks_in(i);
5213           l_patask_record_version_number := NULL;
5214           --No Function Security Check required
5215 
5216           --Get record version number from pa_tasks table
5217          OPEN  c_get_pa_record_version_number ( p_tasks_out(i).task_version_id  , l_project_id);
5218          FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
5219          CLOSE c_get_pa_record_version_number;
5220 
5221          --If the record version Number is null, initialize it to 1 , considering in create project, It will be new record
5222          IF (l_patask_record_version_number IS NULL)
5223                THEN l_patask_record_version_number := 1;
5224          END IF;
5225 
5226         IF (
5227              l_task_in_rec.financial_task_flag IS NOT NULL
5228              AND
5229              l_task_in_rec.financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5230            )
5231         THEN
5232 
5233              PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
5234               (
5235                  p_api_version               => p_api_version_number
5236                , p_init_msg_list             => FND_API.G_FALSE
5237                , p_commit                    => FND_API.G_FALSE--BUG 3766967
5238                , p_calling_module            => 'AMG'
5239                , p_debug_mode                => FND_API.G_TRUE
5240                , p_task_version_id           => p_tasks_out(i).task_version_id
5241                , p_checked_flag              => l_task_in_rec.financial_task_flag
5242                , p_record_version_number     => l_patask_record_version_number
5243                , p_project_id                => l_project_id
5244                , p_published_version_exists  => G_Published_version_exists
5245                , x_return_status             => l_return_status
5246                , x_msg_count                 => l_msg_count
5247                , x_msg_data                  => l_msg_data
5248              );
5249 
5250              -- Populating the appropriate values in task out records
5251               p_tasks_out(i).return_status    := l_return_status;
5252               IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
5253                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5254               ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
5255                    RAISE FND_API.G_EXC_ERROR;
5256               END IF;
5257         END IF;
5258         i := p_tasks_in.next(i);
5259      END LOOP;
5260 END IF;
5261 --End Set Financial Task Changes
5262 --End Add by rtarway FP.M Changes for Set Financial Tasks
5263 
5264 --Begin Add by rtarway FP.M Changes for Mapping
5265 --Add the call to create mapping
5266 IF (G_PROJECT_SHARING_TYPE='SPLIT_MAPPING' AND l_structure_in_rec.structure_type = 'WORKPLAN' )
5267 THEN
5268      i := p_tasks_in.first();
5269      WHILE i IS NOT NULL LOOP
5270           --Initialize the return status to success
5271           l_return_status := FND_API.G_RET_STS_SUCCESS;
5272           l_task_in_rec := p_tasks_in(i);
5273 
5274           -- rbruno added for bug 9491704 - start
5275           -- If mapped_task_reference is NULL and mapped_task_id is 0 then make the
5276           -- mapped_task_id also NULL as 0 is not a valid value for an id. MSP is by
5277           -- default passing 0 for Number fields if there is no value assigned to them.
5278           l_mapped_task_id := p_tasks_in(i).mapped_task_id;
5279           IF ( (p_tasks_in(i).mapped_task_reference IS NULL OR p_tasks_in(i).mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5280                AND p_tasks_in(i).mapped_task_id = 0 ) THEN
5281             l_mapped_task_id := NULL;
5282           END IF;
5283 
5284           --No Function Security Check required
5285           --Call the create_mapping only id p_mapped_task_reference or p_mapped_task_id is passed
5286           --rbruno bug 9540263 start
5287           IF (
5288                ( l_mapped_task_id IS NOT NULL AND l_mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
5289           --rbruno bug 9540263 end
5290                OR
5291                ( 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)
5292              )
5293           THEN
5294                pa_project_pub.create_mapping
5295                (
5296                    p_api_version                  => p_api_version_number
5297                  , p_init_msg_list                => FND_API.G_FALSE
5298                  , p_commit                       => FND_API.G_FALSE--bug 3766967
5299                  , p_debug_mode                   => FND_API.G_TRUE
5300                  , p_project_id                   => l_project_id
5301                  , p_proj_source_reference        => null
5302                  , p_wkp_structure_version_id     => l_d_structure_version_id
5303                  , p_wkp_task_id                  => p_tasks_out(i).pa_task_id--Since the tasks are already created , this will have task Ids
5304                  , px_mapped_task_id              => p_tasks_in(i).mapped_task_id
5305                  , p_mapped_task_reference        => p_tasks_in(i).mapped_task_reference
5306                  , x_return_status                => l_return_status
5307                  , x_msg_count                    => l_msg_count
5308                  , x_msg_data                     => l_msg_data
5309                );
5310                -- Populating the appropriate values in task out records
5311                p_tasks_out(i).return_status    := l_return_status;
5312                IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
5313                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5314                ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
5315                      RAISE FND_API.G_EXC_ERROR;
5316                END IF;
5317           END IF;
5318           i := p_tasks_in.next(i);
5319      END LOOP;
5320 END IF;
5321 --End Create Mapping
5322 --End Add by rtarway FP.M Changes for Mapping
5323 
5324 ------ 3435905 : FP M : Deliverables Changes For AMG Start-----------
5325 
5326     -- 3700247, added code to check for source template/project deliverable is enabled or not
5327     -- if deliverable is enabled for source, call enable_deliverable api to enable deliverable for target project
5328     -- if deliverable is not enabled for source and for target deliverables are loaded, throw error message
5329 
5330     G_DLVR_STRUCTURE_ENABLED := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_in_rec.created_from_project_id);
5331 
5332     IF l_debug_mode = 'Y' THEN
5333        pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
5334        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
5335     END IF;
5336 
5337     i := p_deliverables_in.first();
5338 
5339     IF ( G_DLVR_STRUCTURE_ENABLED = 'Y' ) THEN
5340         Pa_Deliverable_Utils.enable_deliverable(
5341                p_api_version            => p_api_version_number
5342              , p_init_msg_list          => FND_API.G_FALSE
5343              , p_commit                 => FND_API.G_FALSE--bug 3766967
5344              , p_debug_mode             => l_debug_mode
5345              , p_validate_only          => FND_API.G_FALSE
5346              , p_project_id             => l_project_id
5347              , x_return_status          => l_return_status
5348              , x_msg_count              => l_msg_count
5349              , x_msg_data               => l_msg_data
5350              );
5351 
5352         -- 3700247 Added code to validate return status after enable_deliverabl call
5353         -- if return status is not 'S', raise the exception
5354 
5355         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
5356               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5357         ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
5358               RAISE FND_API.G_EXC_ERROR;
5359         END IF;
5360 
5361     ELSE
5362         IF i IS NOT NULL THEN
5363             PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
5364                                 ,p_msg_name         => 'PA_DLV_STRUCTURE_DISABLED');
5365             l_return_status := FND_API.G_RET_STS_ERROR;
5366             RAISE FND_API.G_EXC_ERROR;
5367         END IF;
5368     END IF;
5369 
5370     WHILE i IS NOT NULL LOOP
5371       l_deliverable_id := null;
5372 
5373   -- A call to Create_Deliverables api creates one deliverable and its
5374   -- assoicated actions.
5375 
5376   -- Invoking the Create Deliverable API
5377       Pa_Project_Pub.create_deliverable
5378       ( p_api_version            => p_api_version_number
5379       , p_init_msg_list          => p_init_msg_list
5380       -- 3735792, passing p_commit as false to next level api calls
5381       , p_commit                 => FND_API.G_FALSE
5382       , x_return_status          => l_return_status
5383       , p_deliverable_name       => p_deliverables_in(i).deliverable_name
5384       , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
5385       , p_deliverable_type_id    => p_deliverables_in(i).deliverable_type_id
5386       , p_deliverable_owner_id   => p_deliverables_in(i).deliverable_owner_id
5387       , p_description            => p_deliverables_in(i).description
5388       , p_status_code            => p_deliverables_in(i).status_code
5389       , p_due_date               => p_deliverables_in(i).due_date
5390       , p_completion_date        => p_deliverables_in(i).completion_date
5391       , p_progress_weight        => p_deliverables_in(i).progress_weight
5392       , px_deliverable_id        => l_deliverable_id
5393       , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
5394       -- for bug# 3729250
5395 --      , p_carrying_out_org_id    => p_deliverables_in(i).carrying_out_org_id
5396       , p_task_id                => p_deliverables_in(i).task_id
5397       , p_task_source_reference  => p_deliverables_in(i).task_source_reference
5398       , p_project_id             => l_project_id
5399       , p_proj_source_reference  => null
5400       , p_action_in_tbl          => p_deliverable_actions_in
5401       -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
5402 --    , x_action_out_tbl       => p_deliverable_actions_out
5403       , x_action_out_tbl         => G_deliverable_actions_out_tbl
5404       , p_item_id                => p_deliverables_in(i).item_id     --Added for bug 3630378
5405       , p_inventory_org_id       => p_deliverables_in(i).inventory_org_id
5406       , p_quantity               => p_deliverables_in(i).quantity
5407       , p_uom_code               => p_deliverables_in(i).uom_code
5408       -- for bug# 3729250
5409 --      , p_item_description       => p_deliverables_in(i).item_description
5410       , p_unit_price             => p_deliverables_in(i).unit_price
5411       , p_unit_number            => p_deliverables_in(i).unit_number
5412       , p_currency_code          => p_deliverables_in(i).currency_code
5413       , p_pm_source_code         =>  p_pm_product_code                       /* Bug no. 3651113 */
5414       , x_msg_count              => l_msg_count
5415       , x_msg_data               => l_msg_data
5416       );
5417 
5418     G_deliverables_out_tbl(i).return_status := l_return_status;
5419     G_deliverables_out_tbl(i).deliverable_id := l_deliverable_id;
5420 
5421   -- Populating the appropriate values in deliverables out records
5422 
5423   -- 3435905 return status and deliverable id is directly assigned to
5424   -- global deliverable table
5425   -- removed the p_deliverables_out parameter and added global table
5426 --      p_deliverables_out(i).return_status    := l_return_status;
5427 --      p_deliverables_out(i).deliverable_id   := l_deliverable_id;
5428 
5429     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
5430           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5431     ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
5432           RAISE FND_API.G_EXC_ERROR;
5433     END IF;
5434 
5435     i := p_deliverables_in.next(i);
5436 
5437     END LOOP;
5438 
5439    ------ 3435905 : FP M : Deliverables Changes For AMG END-----------
5440 --4218977, rtarway, unset this global variable upon successfull completion of create project
5441 G_OP_VALIDATE_FLAG := null;
5442 IF (FND_API.to_boolean( p_commit ) OR
5443    l_wf_status_code = 'IN_ROUTE' )
5444 THEN
5445   COMMIT WORK;
5446 END IF;
5447 
5448 
5449 EXCEPTION
5450   WHEN FND_API.G_EXC_ERROR
5451   THEN
5452 
5453 --    ROLLBACK TO create_project_pub;
5454 --start: cklee fix bug: 9065594
5455 begin
5456     ROLLBACK TO create_project_pub;
5457 exception when others then rollback;
5458 
5459 end;
5460 --end: cklee fix bug: 9065594
5461 
5462     -- Bug 7335526
5463     IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5464       PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name    => 'PA_PROJECTS',
5465                                                 p_user_id       => FND_GLOBAL.USER_ID,
5466                                                 p_unique_number => to_number(l_project_number_out));
5467     END IF;
5468 
5469      --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5470      G_OP_VALIDATE_FLAG := null;
5471     p_return_status := FND_API.G_RET_STS_ERROR;
5472 
5473     FND_MSG_PUB.Count_And_Get
5474       (   p_count    =>  p_msg_count  ,
5475           p_data    =>  p_msg_data  );
5476 
5477   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
5478   THEN
5479 --  ROLLBACK TO create_project_pub;
5480 --start: cklee fix bug: 9065594
5481 begin
5482     ROLLBACK TO create_project_pub;
5483 exception when others then rollback;
5484 
5485 end;
5486 --end: cklee fix bug: 9065594
5487 
5488   -- Bug 7335526
5489   IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5490     PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name    => 'PA_PROJECTS',
5491                                               p_user_id       => FND_GLOBAL.USER_ID,
5492                                               p_unique_number => to_number(l_project_number_out));
5493   END IF;
5494 
5495    --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5496      G_OP_VALIDATE_FLAG := null;
5497   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5498 
5499   FND_MSG_PUB.Count_And_Get
5500       (   p_count    =>  p_msg_count  ,
5501           p_data    =>  p_msg_data  );
5502 
5503   WHEN OTHERS
5504   THEN
5505 --  ROLLBACK TO create_project_pub;
5506 --start: cklee fix bug: 9065594
5507 begin
5508     ROLLBACK TO create_project_pub;
5509 exception when others then rollback;
5510 
5511 end;
5512 --end: cklee fix bug: 9065594
5513 
5514   -- Bug 7335526
5515   IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5516     PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name    => 'PA_PROJECTS',
5517                                               p_user_id       => FND_GLOBAL.USER_ID,
5518                                               p_unique_number => to_number(l_project_number_out));
5519   END IF;
5520 
5521   --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5522    G_OP_VALIDATE_FLAG := null;
5523   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5524 
5525   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5526   THEN
5527     FND_MSG_PUB.add_exc_msg
5528         ( p_pkg_name    => G_PKG_NAME
5529         , p_procedure_name  => l_api_name  );
5530 
5531   END IF;
5532 
5533   FND_MSG_PUB.Count_And_Get
5534       (   p_count    =>  p_msg_count  ,
5535           p_data    =>  p_msg_data  );
5536 
5537 END create_project;
5538 
5539 --------------------------------------------------------------------------------
5540 --Name:               add_task
5541 --Type:               Procedure
5542 --Description:        This procedure adds a task to a OP project, when this is allowed.
5543 --
5544 --
5545 --
5546 --Called subprograms: check_add_subtask_ok
5547 --
5548 --
5549 --
5550 --History:
5551 --    28-AUG-1996        L. de Werker    Created
5552 --    28-NOV-1996   L. de Werker   Added 11 parameters for descriptive flexfields
5553 --    10-DEC-1996   L. de Werker   Added parameter p_address_id
5554 --    27-MAY-1999   ODEO     Added parameter p_pa_parent_task_id *O
5555 --
5556 --      09-MAY-02       Maansari        - Project Structure Integration
5557 --                                      - Added call to PA_PROJ_TASK_STRUC.CREATE_DEFAULT_TASK_STRUCTURE api.
5558 --    17-APR-2002        amksingh        Bug 2316713 initialized the
5559 --                                       l_task_in_rec.pa_parent_task_id with the Appropriate
5560 --                                       parent_task_id.
5561 --    15-jul-2003      sramesh        -- Added the code for bug 2982057.
5562 --                                       Changed the logic to populate the long_task_name
5563 --                                       with task_name when the long_task_name is null.
5564 --    31-Jul-2003      Amit              Bug 3075623 : Added condition in add_task to throw error
5565 --                                       if no ref task id is passed
5566 --    12-Aug-2003      sacgupta          Bug 3086001. initialized l_task_in_rec.task_type with the
5567 --                                       appropriate value.
5568 --
5569 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
5570 --                                        dependency_type and lag days to tasks and create dependencies.
5571 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
5572 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
5573 
5574 --  07-JUL-2004  Rakesh Raghavan   Bug # 3663166. Modified API: add_task().
5575 --  09-01-2006   vkadimes          Bug 4689326 Modified the customer_id validation part.
5576 
5577 PROCEDURE add_task
5578 ( p_api_version_number      IN  NUMBER
5579  ,p_commit        IN  VARCHAR2  := FND_API.G_FALSE
5580  ,p_init_msg_list      IN  VARCHAR2  := FND_API.G_FALSE
5581  ,p_msg_count        OUT NOCOPY  NUMBER  /*Added the nocopy check for 4537865 */
5582  ,p_msg_data        OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5583  ,p_return_status      OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5584  ,p_pm_product_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5585  ,p_pm_project_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5586  ,p_pa_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5587  ,p_pm_task_reference      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5588  ,p_pa_task_number            IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5589 --Project Structures
5590  ,p_ref_task_id               IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5591 --Project Structures
5592 
5593  ,p_task_name        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5594  ,p_long_task_name      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5595  ,p_task_description      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5596  ,p_task_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5597  ,p_task_completion_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5598  ,p_pm_parent_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5599  ,p_pa_parent_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5600  ,p_address_id        IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5601  ,p_carrying_out_organization_id  IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5602  ,p_service_type_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5603  ,p_task_manager_person_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5604  ,p_billable_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5605  ,p_chargeable_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5606  ,p_ready_to_bill_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5607  ,p_ready_to_distribute_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5608  ,p_limit_to_txn_controls_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5609  ,p_labor_bill_rate_org_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5610  ,p_labor_std_bill_rate_schdl    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5611  ,p_labor_schedule_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5612  ,p_labor_schedule_discount    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5613  ,p_nl_bill_rate_org_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5614  ,p_nl_std_bill_rate_schdl    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5615  ,p_nl_schedule_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5616  ,p_nl_schedule_discount    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5617  ,p_labor_cost_multiplier_name    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5618  ,p_cost_ind_rate_sch_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5619  ,p_rev_ind_rate_sch_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5620  ,p_inv_ind_rate_sch_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5621  ,p_cost_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5622  ,p_rev_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5623  ,p_inv_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5624  ,p_labor_sch_type      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5625  ,p_nl_sch_type        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5626  ,p_actual_start_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5627  ,p_actual_finish_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5628  ,p_early_start_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5629  ,p_early_finish_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5630  ,p_late_start_date                     IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5631  ,p_late_finish_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5632  ,p_scheduled_start_date                IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5633  ,p_scheduled_finish_date               IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5634  ,p_tasks_dff                    IN VARCHAR2    := 'N' --bug 6153503
5635  ,p_attribute_category      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5636  ,p_attribute1        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5637  ,p_attribute2        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5638  ,p_attribute3        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5639  ,p_attribute4        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5640  ,p_attribute5        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5641  ,p_attribute6        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5642  ,p_attribute7        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5643  ,p_attribute8        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5644  ,p_attribute9        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5645  ,p_attribute10        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5646  --bug 6153503
5647  ,p_attribute11        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5648  ,p_attribute12        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5649  ,p_attribute13        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5650  ,p_attribute14        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5651  ,p_attribute15        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5652  --end bug 6153503
5653  ,p_allow_cross_charge_flag            IN VARCHAR2 :=
5654 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5655  ,p_project_rate_date               IN      DATE   :=
5656 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5657  ,p_project_rate_type            IN VARCHAR2       :=
5658 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5659  ,p_cc_process_labor_flag  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5660  ,p_labor_tp_schedule_id   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5661  ,p_labor_tp_fixed_date    IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5662  ,p_cc_process_nl_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5663  ,p_nl_tp_schedule_id      IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5664  ,p_nl_tp_fixed_date       IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5665  ,p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5666  ,p_work_type_id           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5667  ,p_emp_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5668  ,p_job_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5669 --Sakthi  MCB
5670  ,p_non_lab_std_bill_rt_sch_id  IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5671  ,p_taskfunc_cost_rate_type     IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5672  ,p_taskfunc_cost_rate_date     IN DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5673 --Sakthi  MCB
5674 --Project Structures
5675  ,p_structure_type                     IN VARCHAR2 := 'FINANCIAL'
5676  ,p_structure_version_id               IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5677  ,P_OBLIGATION_START_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5678  ,P_OBLIGATION_FINISH_DATE             IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5679  ,P_ESTIMATED_START_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5680  ,P_ESTIMATED_FINISH_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5681  ,P_BASELINE_START_DATE                IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5682  ,P_BASELINE_FINISH_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5683  ,P_CLOSED_DATE                        IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5684  ,P_WQ_UOM_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5685  ,P_WQ_ITEM_CODE                       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5686  ,P_STATUS_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5687  ,P_WF_STATUS_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5688  ,P_PM_SOURCE_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5689  ,P_PRIORITY_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5690  ,P_MILESTONE_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5691  ,P_CRITICAL_FLAG                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5692  ,P_INC_PROJ_PROGRESS_FLAG             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5693  ,P_LINK_TASK_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5694  ,P_CALENDAR_ID                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5695  ,P_PLANNED_EFFORT                     IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5696  ,P_DURATION                           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5697  ,P_PLANNED_WORK_QUANTITY              IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5698  ,P_TASK_TYPE                          IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5699 --Project Structures
5700  ,p_labor_disc_reason_code             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5701  ,p_non_labor_disc_reason_code         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5702 --PA L changes -- bug 2872708   --Add task
5703  ,p_retirement_cost_flag               VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5704  ,p_cint_eligible_flag            VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5705  ,p_cint_stop_date                DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5706 --end PA L changes -- bug 2872708
5707  ,p_pa_project_id_out              OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
5708  ,p_pa_project_number_out          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5709  ,p_task_id                        OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
5710  -- PA L Changes 3010538
5711  ,p_process_mode                   IN VARCHAR2 := 'ONLINE'
5712 -- FP-M Bug # 3301192
5713  ,p_pred_string                    IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5714 -- ,p_pred_delimiter                     VARCHAR2    DEFAULT ','
5715   ,p_pred_delimiter                IN VARCHAR2   :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5716 -- FP M changes begin (venkat)
5717   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5718   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5719   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5720   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5721   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5722   ,p_total_slack                   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5723   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5724   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5725   ,p_invoice_method                IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5726   ,p_customer_id                   IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5727   ,p_gen_etc_source_code             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5728 -- FP M changes end (venkat)
5729 -- FP M changes start (Mapping )
5730   ,p_financial_task_flag        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5731   ,p_mapped_task_id             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5732   ,p_mapped_task_reference      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5733 -- FP M changes end (Mapping )
5734  ,p_deliverable                 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5735  ,p_deliverable_id              IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM -- 3661788 added IN parameter
5736 -- (Begin venkat) Bug #3450684 ------------------------------------------------------------------
5737  ,p_ext_act_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5738  ,p_ext_remain_duration         IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5739  ,p_ext_sch_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5740 -- (End venkat) Bug #3450684   -------------------------------------------------------------------
5741  ,p_op_validate_flag            IN VARCHAR2 := 'Y' --added by rtarway for bug 4218977
5742  ,p_structure_updates_flag      IN VARCHAR2 := 'Y' --Added for Bug 7264422
5743   ,p_adj_on_std_inv                 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR       /* Added for 12.2Payroll billing ER 11899223 */
5744 
5745 
5746 )
5747 IS
5748 
5749    l_api_name      CONSTANT  VARCHAR2(30)     := 'add_task';
5750    l_return_status        VARCHAR2(1);
5751    l_add_subtask_ok_flag      VARCHAR2(1);
5752 
5753 -- FP-M Bug # 3301192
5754    l_d_task_id NUMBER;
5755    l_d_task_ver_id NUMBER;
5756    l_d_struct_ver_id NUMBER;
5757 
5758 --custom parameters
5759    l_project_type_rec       pa_project_types%rowtype;
5760    l_project_rec            pa_projects%rowtype;
5761    l_task_in_rec            task_in_rec_type;
5762    l_project_id             pa_projects.project_id%type;
5763    l_task_id                pa_tasks.task_id%type;
5764    l_msg_count              NUMBER ;
5765    l_msg_data               VARCHAR2(2000);
5766    l_function_allowed       VARCHAR2(1);
5767    l_resp_id                NUMBER := 0;
5768    l_user_id                NUMBER := 0;
5769    l_module_name            VARCHAR2(80);
5770    l_process_code           VARCHAR2(30) ;
5771    l_task_weight_basis_code VARCHAR2(30) ;
5772    l_update_wbs_flag        VARCHAR2(1) ;
5773    l_customer_name	    VARCHAR2(360); -- Added for Bug 4689888 -- Modified to VARCHAR2(360) for bug 5856469
5774 --needed to get the field values associated to a AMG message
5775 
5776    CURSOR   l_amg_project_csr
5777       (p_pa_project_id pa_projects.project_id%type)
5778    IS
5779    SELECT   segment1
5780    FROM     pa_projects p
5781    WHERE p.project_id = p_pa_project_id;
5782 
5783    --Added for bug 3280610
5784    --needed to get task_id of a task using project_id and task_reference.
5785    CURSOR   l_task_ref_to_id_csr
5786         (cp_project_id pa_tasks.project_id%TYPE
5787         ,cp_pm_task_reference pa_tasks.pm_task_reference%TYPE)
5788    IS
5789    SELECT   t.task_id
5790    FROM     pa_tasks t
5791    WHERE    t.project_id = cp_project_id
5792    AND      t.pm_task_reference = cp_pm_task_reference;
5793 
5794    --Bug 3279981. Fetch project information
5795    CURSOR cur_get_proj_billing_info IS
5796    SELECT enable_top_task_customer_flag, enable_top_task_inv_mth_flag,
5797           revenue_accrual_method, invoice_method, project_type
5798    FROM   pa_projects_all
5799    WHERE  project_id = p_pa_project_id;
5800 
5801    CURSOR cur_check_proj_cust_exist (c_customer_id IN NUMBER ) IS
5802    SELECT 'Y'
5803    FROM  pa_project_customers
5804    WHERE project_id = p_pa_project_id
5805    AND   customer_id = c_customer_id ;
5806 
5807 --Added for bug 3746912
5808 CURSOR cur_get_str_type_from_str_id( c_structure_version_id IN NUMBER ) IS
5809 SELECT pst.structure_type
5810 FROM   pa_proj_element_versions ppev
5811       ,pa_proj_structure_types ppst
5812       ,pa_structure_types pst
5813 WHERE ppev.element_version_id = c_structure_version_id
5814 AND   ppev.proj_element_id = ppst.proj_element_id
5815 AND   ppst.structure_type_id = pst.structure_type_id ;
5816 -- Added This cursor for Bug No 4689326
5817 CURSOR l_cur_customer_name(l_customer_id NUMBER)
5818  IS
5819   SELECT customer_name from PA_CUSTOMERS_V
5820   WHERE customer_id = l_customer_id;
5821 
5822 l_str_type VARCHAR2(150);
5823 --End : added for bug 3746912
5824 
5825    l_amg_segment1       VARCHAR2(25);
5826    l_amg_task_number       VARCHAR2(50);
5827 
5828    --Project Structures
5829      l_ref_task_id   NUMBER;
5830      l_tasks_in      pa_project_pub.task_in_tbl_type;       --dummy variables.
5831      l_tasks_out     pa_project_pub.task_out_tbl_type ;     --dummy variables.
5832    --Project Structures
5833    --bug 2738747
5834      l_structure_type    VARCHAR2(25);
5835    --bug 2738747
5836      l_task_version_id   NUMBER;
5837 
5838      -- Bug 3091798.
5839      l_request_id        pa_proj_elem_ver_structure.conc_request_id%TYPE;
5840 
5841      --bug 3098668
5842      struct_ver_updatable  VARCHAR2(1);
5843      l_str_ver_type        VARCHAR2(1);
5844      --bug 3098668
5845 
5846      -- Bug 3106457
5847      l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
5848      --Begin Add by rtarway For FP.M Changes for Mapping and Set Financial Task
5849      l_patask_record_version_number NUMBER;
5850      --End Add by rtarway For FP.M Changes for Mapping and Set Financial Task
5851      --Bug 3279981 To store the project's flags
5852      l_proj_top_task_customer_flag VARCHAR2(1);
5853      l_proj_top_task_inv_mth_flag  VARCHAR2(1);
5854      l_proj_revenue_acc_method     VARCHAR2(30);
5855      l_proj_invoice_method         VARCHAR2(30);
5856      l_proj_type                   VARCHAR2(20);
5857      l_dummy                       VARCHAR2(1);
5858 
5859      l_deliverable_id              NUMBER := NULL;  -- 3661788 added local variable
5860 
5861 -- Begin fix for Bug # 4373055.
5862 
5863 l_str_ver_id            NUMBER:= null;
5864 l_conc_request_id       NUMBER := null;
5865 l_message_name  VARCHAR2(30) := null;
5866 l_message_type  VARCHAR2(30) := null;
5867 
5868 -- End fix for Bug # 4373055.
5869 
5870 --Added for Bug 6026370
5871    CURSOR   l_default_parent_task_csr (c_pa_parent_task_id pa_tasks.task_id%type) IS
5872    SELECT   allow_cross_charge_flag,
5873             cc_process_labor_flag,
5874             labor_tp_schedule_id,
5875             labor_tp_fixed_date,
5876             cc_process_nl_flag,
5877             nl_tp_schedule_id,
5878             nl_tp_fixed_date
5879    FROM     pa_tasks
5880    WHERE task_id = c_pa_parent_task_id;
5881 
5882 
5883 
5884    Cursor c_adj_on_std_inv (p_adj_on_std_inv IN VARCHAR2)
5885   Is
5886   Select 'X'
5887   from pa_lookups
5888   where lookup_type='PA_ADJ_ON_STD_INV'
5889   and lookup_code = p_adj_on_std_inv;
5890 
5891 
5892 --Initializiing all the CC attributes to missing values so that if the new task is top task then values of these CC attibites
5893 --will be populated from project CC attributes in  pa_project_pvt.add_task_round_one api
5894 l_allow_cross_charge_flag VARCHAR(1) :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5895 l_cc_process_labor_flag VARCHAR(1) :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5896 l_labor_tp_schedule_id NUMBER :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
5897 l_labor_tp_fixed_date DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
5898 l_cc_process_nl_flag VARCHAR(1) :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5899 l_nl_tp_schedule_id NUMBER :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
5900 l_nl_tp_fixed_date DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
5901 
5902 --End for Bug 6026370
5903 
5904 --bug 6153503
5905 l_validate_dff               VARCHAR2(1);
5906 l_attribute_category         VARCHAR2(30);
5907 l_attribute1                 VARCHAR2(150);
5908 l_attribute2                 VARCHAR2(150);
5909 l_attribute3                 VARCHAR2(150);
5910 l_attribute4                 VARCHAR2(150);
5911 l_attribute5                 VARCHAR2(150);
5912 l_attribute6                 VARCHAR2(150);
5913 l_attribute7                 VARCHAR2(150);
5914 l_attribute8                 VARCHAR2(150);
5915 l_attribute9                 VARCHAR2(150);
5916 l_attribute10                VARCHAR2(150);
5917 l_attribute11                VARCHAR2(150);
5918 l_attribute12                VARCHAR2(150);
5919 l_attribute13                VARCHAR2(150);
5920 l_attribute14                VARCHAR2(150);
5921 l_attribute15                VARCHAR2(150);
5922 
5923 -- Bug 6410745
5924 l_financial_task_flag         VARCHAR2(1);
5925 l_share_code                  VARCHAR2(30);
5926 l_shared                      VARCHAR(1) := 'N';
5927 
5928 task_adj_on_std_inv varchar2(1) :='N';
5929 t_adj_on_std_inv  varchar2(2);
5930 
5931 BEGIN
5932 
5933 --  Standard begin of API savepoint
5934 
5935     SAVEPOINT add_task_pub;
5936 
5937 --  Standard call to check for call compatibility.
5938 
5939     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
5940                                p_api_version_number  ,
5941                                l_api_name         ,
5942                                G_PKG_NAME         )
5943     THEN
5944 
5945   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5946 
5947     END IF;
5948 
5949 
5950     --  Initialize the message table if requested.
5951     --  pm_product_code is mandatory
5952 
5953 --bug 2841158
5954 --    IF p_pm_product_code IS NULL
5955 --    OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5956     IF p_pm_product_code IS NOT NULL
5957     AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5958 --bug 2841158
5959     THEN
5960 
5961   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5962   THEN
5963          pa_interface_utils_pub.map_new_amg_msg
5964            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
5965             ,p_msg_attribute    => 'CHANGE'
5966             ,p_resize_flag      => 'N'
5967             ,p_msg_context      => 'GENERAL'
5968             ,p_attribute1       => ''
5969             ,p_attribute2       => ''
5970             ,p_attribute3       => ''
5971             ,p_attribute4       => ''
5972             ,p_attribute5       => '');
5973   END IF;
5974   RAISE FND_API.G_EXC_ERROR;
5975     END IF;
5976 
5977     /*
5978      * Bug 9379239
5979      * As per bug 2841158, the following validations are done for pm_product_code
5980      * 1. Throw PA_PRODUCT_CODE_IS_MISSING only if p_pm_product_code is g_miss_char
5981      * 2. Do not validate p_pm_product_code if its null or 'WORKPLAN' against pa_lookups
5982      */
5983     IF (p_pm_product_code IS NOT NULL) AND (p_pm_product_code <> 'WORKPLAN') THEN
5984 
5985         l_pm_product_code := 'Z'; -- Reset global variable l_pm_product_code
5986         OPEN p_product_code_csr(p_pm_product_code);
5987         FETCH p_product_code_csr INTO l_pm_product_code;
5988         CLOSE p_product_code_csr;
5989 
5990         IF l_pm_product_code <> 'X' THEN
5991             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5992                 pa_interface_utils_pub.map_new_amg_msg
5993                  ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
5994                    ,p_msg_attribute    => 'CHANGE'
5995                    ,p_resize_flag      => 'N'
5996                    ,p_msg_context      => 'GENERAL'
5997                    ,p_attribute1       => ''
5998                    ,p_attribute2       => ''
5999                    ,p_attribute3       => ''
6000                    ,p_attribute4       => ''
6001                    ,p_attribute5       => ''
6002                  );
6003             END IF;
6004             RAISE FND_API.G_EXC_ERROR;
6005         END IF;
6006 
6007     END IF;
6008 
6009         IF p_adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6010      THEN
6011        t_adj_on_std_inv := NULL;
6012      ELSE
6013        t_adj_on_std_inv := p_adj_on_std_inv;
6014    END IF;
6015 
6016 if t_adj_on_std_inv is not null then
6017     OPEN c_adj_on_std_inv(t_adj_on_std_inv);
6018         FETCH c_adj_on_std_inv into task_adj_on_std_inv;
6019         CLOSE c_adj_on_std_inv;
6020 
6021         if task_adj_on_std_inv <> 'X'then
6022 
6023           PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
6024                                 ,p_msg_name         => 'PA_INVALID_ADJ_ON_STD_INV');
6025 
6026             l_return_status := FND_API.G_RET_STS_ERROR;
6027 
6028             RAISE  FND_API.G_EXC_ERROR;
6029 
6030 
6031 
6032         END IF;
6033 
6034 end if;
6035 
6036     l_resp_id := FND_GLOBAL.Resp_id;
6037     l_user_id := FND_GLOBAL.User_id;
6038     --l_module_name := p_pm_product_code||'.'||'PA_PM_ADD_TASK';
6039     l_module_name := 'PA_PM_ADD_TASK';
6040 
6041 --Moved from below for bug 2471668
6042 -- get the project ID
6043 
6044         PA_PROJECT_PVT.Convert_pm_projref_to_id
6045         (        p_pm_project_reference =>      p_pm_project_reference
6046                  ,  p_pa_project_id     =>      p_pa_project_id
6047                  ,  p_out_project_id    =>      l_project_id
6048                  ,  p_return_status     =>      l_return_status
6049         );
6050 
6051 
6052         IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6053 
6054                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
6055 
6056         ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
6057 
6058                 RAISE  FND_API.G_EXC_ERROR;
6059         END IF;
6060 --Moved from below for bug 2471668
6061 
6062 -- Added for bug 3746912, reopened rtarway
6063 --Added initialization code for l_str_type for reopened bug , now l_str_type will always be initialized with passed structure type
6064 --and will be overridden if structure version id is passed.
6065                l_str_type := p_structure_type;
6066 
6067 -- Added for bug 3746912
6068      --If the structure version id is passed, it gets priority over the structure type.
6069      --And the structure type should be derived from the version id in such a case
6070      IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6071           OPEN  cur_get_str_type_from_str_id(p_structure_version_id);
6072           FETCH cur_get_str_type_from_str_id INTO l_str_type;
6073           IF cur_get_str_type_from_str_id%NOTFOUND THEN
6074                l_str_type := p_structure_type;
6075            --Foll IF condition added for Bug 3810365
6076           ELSIF 'N' = PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) THEN
6077                l_str_type := 'FINANCIAL';
6078           END IF;
6079           CLOSE cur_get_str_type_from_str_id;
6080      END IF;
6081 -- End : Added for bug 3746912
6082 
6083 -- Moved from above for bug 3106457. The customer might pass only the project reference and not the project
6084 -- id. So we should derive the id and use it.
6085 -- PA L Changes 3010538
6086 -- Need not use map new amg msg api here as we donot have context information to be displayed and
6087 -- _AMG messages are not defined.
6088 -- Using PA_UTILS.ADD_MESSAGE
6089     --IF p_structure_type IS NOT NULL THEN  Replaced p_structure_type by l_str_type for 3746912
6090     IF l_str_type IS NOT NULL THEN
6091 
6092 -- Begin fix for Bug # 4373055.
6093 
6094 /*
6095 
6096           l_process_code :=
6097                       PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id --p_pa_project_id 3106457
6098                                                                         ,p_structure_type => l_str_type ); --p_structure_type 3746912
6099           IF nvl(l_process_code,'-1') = 'WUP' THEN
6100                     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
6101                                                                                   ,p_structure_type => l_str_type ); --p_structure_type 3746912
6102 
6103                PA_UTILS.ADD_MESSAGE
6104                      (p_app_short_name => 'PA',
6105                       --p_msg_name       => 'PA_PS_VD_UPDWBS_PRC_INPROC');
6106                       p_msg_name       => 'PA_PS_UPDWBS_PRC_INPROC_AMG',  -- Bug 3091798. Message includes the request id.
6107                       p_token1         => 'REQUESTID',
6108                       p_value1         => l_request_id);
6109 
6110 
6111                RAISE FND_API.G_EXC_ERROR;
6112 
6113           ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
6114                     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
6115                                                                                   ,p_structure_type => l_str_type ); --p_structure_type 3746912
6116 
6117                PA_UTILS.ADD_MESSAGE
6118                      (p_app_short_name => 'PA',
6119                      -- p_msg_name       => 'PA_PS_VD_UPD_WBS_PRC_ERR');
6120                       p_msg_name       => 'PA_PS_UPDWBS_PRC_ERR_AMG',  -- Bug 3091798. Message includes the request id.
6121                       p_token1         => 'REQUESTID',
6122                       p_value1         => l_request_id);
6123 
6124 
6125               RAISE FND_API.G_EXC_ERROR;
6126 
6127           END IF;
6128 
6129 */
6130 
6131     PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
6132         p_project_id              => l_project_id
6133         , p_structure_type        => l_str_type
6134         , p_structure_version_id  => null
6135         , p_context               => 'UPDATE_AMG'
6136         , x_message_name          => l_message_name
6137         , x_message_type          => l_message_type
6138         , x_structure_version_id  => l_str_ver_id
6139         , x_conc_request_id       => l_conc_request_id);
6140 
6141 
6142     if l_message_name is not null then
6143 
6144              PA_UTILS.ADD_MESSAGE(
6145                      p_app_short_name => 'PA'
6146                      , p_msg_name       => l_message_name
6147                      , p_token1         => 'REQUESTID'
6148                      , p_value1         => l_conc_request_id);
6149 
6150                   RAISE FND_API.G_EXC_ERROR;
6151     end if;
6152 
6153 -- End fix for Bug # 4373055.
6154 
6155     END IF ;
6156   --  END IF ;
6157 
6158   -- PA L Changes 3010538
6159 
6160     -- As part of enforcing project security, which would determine
6161     -- whether the user has the necessary privileges to update the project
6162     -- need to call the pa_security package
6163 
6164     pa_security.initialize (X_user_id        => l_user_id,
6165                             X_calling_module => l_module_name);
6166 
6167     -- Actions performed using the APIs would be subject to
6168     -- function security. If the responsibility does not allow
6169     -- such functions to be executed, the API should not proceed further
6170     -- since the user does not have access to such functions
6171 
6172     -- Function security procedure check whether user have the
6173     -- privilege to add task or not
6174 
6175       PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id;  --bug 2471668 ( in the project context )
6176 
6177       PA_PM_FUNCTION_SECURITY_PUB.check_function_security
6178       (p_api_version_number => p_api_version_number,
6179        p_responsibility_id  => l_resp_id,
6180        p_function_name      => 'PA_PM_ADD_TASK',
6181        p_msg_count      => l_msg_count,
6182        p_msg_data           => l_msg_data,
6183        p_return_status      => l_return_status,
6184        p_function_allowed   => l_function_allowed);
6185 
6186        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6187        THEN
6188       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6189 
6190        ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6191        THEN
6192       RAISE FND_API.G_EXC_ERROR;
6193        END IF;
6194 
6195        IF l_function_allowed = 'N' THEN
6196          pa_interface_utils_pub.map_new_amg_msg
6197            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
6198             ,p_msg_attribute    => 'CHANGE'
6199             ,p_resize_flag      => 'Y'
6200             ,p_msg_context      => 'GENERAL'
6201             ,p_attribute1       => ''
6202             ,p_attribute2       => ''
6203             ,p_attribute3       => ''
6204             ,p_attribute4       => ''
6205             ,p_attribute5       => '');
6206          p_return_status := FND_API.G_RET_STS_ERROR;
6207          RAISE FND_API.G_EXC_ERROR;
6208        END IF;
6209 
6210     IF FND_API.TO_BOOLEAN( p_init_msg_list )
6211     THEN
6212 
6213   FND_MSG_PUB.initialize;
6214 
6215     END IF;
6216 
6217 --  Set API return status to success
6218 
6219     p_return_status := FND_API.G_RET_STS_SUCCESS;
6220 
6221 
6222 /* Moving this code before calling the security API. Although p_pa_project_id contains the project id but
6223    it is converted and l_project_id is used subsequently.
6224    --bug 2471668
6225 -- get the project ID
6226 
6227   PA_PROJECT_PVT.Convert_pm_projref_to_id
6228   (   p_pm_project_reference  =>  p_pm_project_reference
6229      ,  p_pa_project_id   =>  p_pa_project_id
6230      ,  p_out_project_id   =>  l_project_id
6231      ,  p_return_status   =>  l_return_status
6232   );
6233 
6234 
6235   IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6236 
6237     RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
6238 
6239   ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
6240 
6241     RAISE  FND_API.G_EXC_ERROR;
6242   END IF;
6243 */
6244 
6245       -- Now verify whether project security allows the user to update
6246       -- the project
6247 
6248       IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
6249 
6250          -- The user does not have query privileges on this project
6251          -- Hence, cannot update the project.Raise error
6252          pa_interface_utils_pub.map_new_amg_msg
6253            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
6254             ,p_msg_attribute    => 'CHANGE'
6255             ,p_resize_flag      => 'Y'
6256             ,p_msg_context      => 'GENERAL'
6257             ,p_attribute1       => ''
6258             ,p_attribute2       => ''
6259             ,p_attribute3       => ''
6260             ,p_attribute4       => ''
6261             ,p_attribute5       => '');
6262      p_return_status := FND_API.G_RET_STS_ERROR;
6263      RAISE FND_API.G_EXC_ERROR;
6264       ELSE
6265             -- If the user has query privileges, then check whether
6266             -- update privileges are also available
6267          IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
6268 
6269             -- The user does not have update privileges on this project
6270             -- Hence , raise error
6271 
6272          pa_interface_utils_pub.map_new_amg_msg
6273            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
6274             ,p_msg_attribute    => 'CHANGE'
6275             ,p_resize_flag      => 'Y'
6276             ,p_msg_context      => 'GENERAL'
6277             ,p_attribute1       => ''
6278             ,p_attribute2       => ''
6279             ,p_attribute3       => ''
6280             ,p_attribute4       => ''
6281             ,p_attribute5       => '');
6282      p_return_status := FND_API.G_RET_STS_ERROR;
6283      RAISE FND_API.G_EXC_ERROR;
6284         END IF;
6285      END IF;
6286 
6287 -- Get segment1 for AMG messages
6288 
6289    OPEN l_amg_project_csr( l_project_id );
6290    FETCH l_amg_project_csr INTO l_amg_segment1;
6291    CLOSE l_amg_project_csr;
6292 
6293    --bug 2738747    ---Add task
6294    G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
6295    G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
6296    G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
6297    --bug 2738747
6298    G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
6299    G_OP_VALIDATE_FLAG         := p_op_validate_flag; --added by rtarway for bug 4218977
6300 
6301 --bug 2876703   --Add_task
6302    IF G_IS_WP_SEPARATE_FROM_FN = 'N' AND
6303       l_str_type = 'WORKPLAN' --p_structure_type = 'WORKPLAN' 3746912
6304    THEN
6305         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6306         THEN
6307             pa_interface_utils_pub.map_new_amg_msg
6308               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
6309                   ,p_msg_attribute    => 'CHANGE'
6310                   ,p_resize_flag      => 'N'
6311                   ,p_msg_context      => 'GENERAL'
6312                   ,p_attribute1       => ''
6313                   ,p_attribute2       => ''
6314                   ,p_attribute3       => ''
6315                   ,p_attribute4       => ''
6316                   ,p_attribute5       => '');
6317         END IF;
6318         RAISE FND_API.G_EXC_ERROR;
6319    END IF;
6320 --bug 2876703
6321 
6322    --bug 2738747
6323    IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
6324       AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
6325       AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
6326       AND l_str_type /*p_structure_type 3746912*/= 'FINANCIAL'
6327    THEN
6328        --Change the flow to WORKPLAN
6329        l_structure_type := 'WORKPLAN';
6330 
6331    ELSE
6332        l_structure_type := l_str_type; --p_structure_type  3746912
6333    END IF;
6334    --bug 2738747
6335 
6336 /* Though it does not matter but for clarity should only be done for Financial
6337    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6338     (p_task_number=> p_task_name
6339     ,p_task_reference => p_pm_task_reference
6340     ,p_task_id => '');
6341 */
6342 
6343 --check for parent task,when no parent task is given,the new task will become a
6344 --top task and a top task can alway be added.
6345 --modified to allow creation of sub-task for a parent not create through AMG
6346 --A non AMG created task could have its pm_parent_task_reference NULL. *O
6347 
6348 --project structure
6349 --This validation should be done for only FINANCIAL structrues
6350 --IF p_structure_type = 'FINANCIAL'    bug 2738747
6351 IF l_structure_type = 'FINANCIAL'      --bug 2738747
6352 THEN
6353 --project structure
6354 
6355    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6356     (p_task_number=> p_task_name
6357     ,p_task_reference => p_pm_task_reference
6358     ,p_task_id => '');
6359 
6360    IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
6361    (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
6362    THEN
6363 
6364      check_add_subtask_ok(    p_api_version_number   => p_api_version_number
6365                 ,p_init_msg_list  => FND_API.G_FALSE
6366                 ,p_msg_data    => p_msg_data
6367               ,p_msg_count    => p_msg_count
6368               ,p_return_status  => l_return_status
6369               ,p_project_id     => l_project_id
6370               ,p_pm_project_reference  => NULL
6371               ,p_task_id    => p_pa_parent_task_id
6372               ,p_pm_task_reference  => p_pm_parent_task_reference
6373               ,p_add_subtask_ok_flag  => l_add_subtask_ok_flag  );
6374 
6375    END IF;
6376 
6377    IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6378    THEN
6379     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6380 
6381    ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6382    THEN
6383 
6384     RAISE FND_API.G_EXC_ERROR;
6385    END IF;
6386 
6387    IF l_add_subtask_ok_flag <> 'Y'
6388    then
6389   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6390   THEN
6391          pa_interface_utils_pub.map_new_amg_msg
6392            ( p_old_message_code => 'PA_TASK_CAN_NOT_BE_ADDED'
6393             ,p_msg_attribute    => 'CHANGE'
6394             ,p_resize_flag      => 'N'
6395             ,p_msg_context      => 'TASK'
6396             ,p_attribute1       => l_amg_segment1
6397             ,p_attribute2       => l_amg_task_number
6398             ,p_attribute3       => ''
6399             ,p_attribute4       => ''
6400             ,p_attribute5       => '');
6401   END IF;
6402 
6403   RAISE FND_API.G_EXC_ERROR;
6404 
6405    end IF;
6406 
6407 END IF;  --<<l_structrue_type = 'FINANCIAL' >>
6408 
6409   -- Bug 3279981. FP_M Changes for customer and invoice method at top task
6410   -- Validate and set invoice method and customer id for the task
6411   OPEN  cur_get_proj_billing_info;
6412   FETCH cur_get_proj_billing_info INTO l_proj_top_task_customer_flag, l_proj_top_task_inv_mth_flag,
6413                                        l_proj_revenue_acc_method, l_proj_invoice_method, l_proj_type;
6414   CLOSE cur_get_proj_billing_info;
6415 
6416   IF 'Y' = l_proj_top_task_inv_mth_flag
6417   AND p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6418      IF pa_project_pvt.check_valid_dist_rule
6419              ( l_proj_type,
6420                l_proj_revenue_acc_method||'/'||p_invoice_method,
6421                l_proj_top_task_inv_mth_flag ) = 'N'   THEN
6422                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6423                    pa_interface_utils_pub.map_new_amg_msg
6424                      ( p_old_message_code => 'PA_INV_TASK_INVOICE_METHOD' -- 4146813 changed error message code
6425                       ,p_msg_attribute    => 'CHANGE'
6426                       ,p_resize_flag      => 'N'
6427                       ,p_msg_context      => 'TASK'
6428                       ,p_attribute1       => p_invoice_method
6429                       ,p_attribute2       => ''
6430                       ,p_attribute3       => ''
6431                       ,p_attribute4       => ''
6432                       ,p_attribute5       => '');
6433                END IF;
6434                RAISE  FND_API.G_EXC_ERROR;
6435      ELSE
6436                l_task_in_rec.invoice_method := p_invoice_method;
6437      END IF;
6438   ELSE
6439        l_task_in_rec.invoice_method := NULL;
6440   END IF;
6441 
6442   IF 'Y' = l_proj_top_task_customer_flag THEN
6443   -- If condition is changed for Bug Number 4689326
6444       IF p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6445           OPEN  cur_check_proj_cust_exist(p_customer_id);
6446           FETCH cur_check_proj_cust_exist INTO l_dummy;
6447           IF cur_check_proj_cust_exist%NOTFOUND THEN
6448                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6449                 /*Commented for Bug Number 4689326
6450                     pa_interface_utils_pub.map_new_amg_msg
6451                      ( p_old_message_code => 'PA_INVALID_TASK_CUSTOMER'
6452                       ,p_msg_attribute    => 'CHANGE'
6453                       ,p_resize_flag      => 'N'
6454                       ,p_msg_context      => 'TASK'
6455                       ,p_attribute1       => p_customer_id
6456                       ,p_attribute2       => ''
6457                       ,p_attribute3       => ''
6458                       ,p_attribute4       => ''
6459                       ,p_attribute5       => '');*/
6460                    -- Start of Bug Number 4689326
6461                    OPEN l_cur_customer_name(p_customer_id);
6462                    FETCH l_cur_customer_name INTO l_customer_name;
6463                    CLOSE l_cur_customer_name;
6464                    IF (l_customer_name IS NULL OR l_customer_name =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6465                     -- Checking whether the specified customer exits or not
6466                      pa_interface_utils_pub.map_new_amg_msg
6467                      ( p_old_message_code => 'PA_CUSTOMER_NOT_EXIST'
6468                       ,p_msg_attribute    => 'CHANGE'
6469                       ,p_resize_flag      => 'N'
6470                       ,p_msg_context      => 'GENERAL'
6471                       ,p_attribute1       => ''
6472                       ,p_attribute2       => ''
6473                       ,p_attribute3       => ''
6474                       ,p_attribute4       => ''
6475                       ,p_attribute5       => '');
6476                    ELSE
6477                         PA_UTILS.ADD_MESSAGE
6478                               (p_app_short_name => 'PA',
6479                                 p_msg_name       => 'PA_INVALID_PROJECT_CUSTOMER',
6480                                 p_token1         => 'CUSTOMER_NAME',
6481                                 p_value1         =>  l_customer_name
6482                                 );
6483                    END IF;
6484                   -- End of Bug Number 4689326.
6485                END IF;
6486                CLOSE cur_check_proj_cust_exist;
6487                RAISE  FND_API.G_EXC_ERROR;
6488           ELSE
6489                l_task_in_rec.customer_id := p_customer_id;
6490                CLOSE cur_check_proj_cust_exist;
6491           END IF;
6492       ELSE
6493        -- Added for Bug Number 4689326
6494        -- Start of Bug Number 4689326
6495         IF p_customer_id IS NULL THEN
6496           pa_interface_utils_pub.map_new_amg_msg
6497                      ( p_old_message_code => 'PA_INVALID_CUST'
6498                       ,p_msg_attribute    => 'CHANGE'
6499                       ,p_resize_flag      => 'N'
6500                       ,p_msg_context      => 'GENERAL'
6501                       ,p_attribute1       => ''
6502                       ,p_attribute2       => ''
6503                       ,p_attribute3       => ''
6504                       ,p_attribute4       => ''
6505                       ,p_attribute5       => '');
6506                     RAISE FND_API.G_EXC_ERROR;
6507         ELSE
6508           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.
6509         END IF;
6510         -- End of Bug Number 4689326
6511       END IF;
6512   ELSE
6513           l_task_in_rec.customer_id := NULL;
6514   END IF;
6515 
6516    --Binding the incoming parameters to the local task record
6517    l_task_in_rec.pm_task_reference    :=  p_pm_task_reference;
6518    IF p_pa_task_number IS NULL OR
6519       p_pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6520       l_task_in_rec.pa_task_number        :=  p_pm_task_reference;
6521    ELSE
6522       l_task_in_rec.pa_task_number        :=  p_pa_task_number;
6523    END IF;
6524    l_task_in_rec.pa_task_id      :=  NULL;
6525    l_task_in_rec.task_name      :=  p_task_name;
6526   -- l_task_in_rec.long_task_name      :=  p_long_task_name;
6527 /* Commented the above line of code for bug 2982057 and add the below code*/
6528    IF p_long_task_name IS NULL
6529     OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6530     THEN
6531       l_task_in_rec.long_task_name := p_task_name;
6532     ELSE
6533       l_task_in_rec.long_task_name := p_long_task_name;
6534     END IF;
6535     /* Code addition for bug 2982057 ends*/
6536    l_task_in_rec.task_description    :=  p_task_description;
6537    l_task_in_rec.task_start_date    :=  p_task_start_date;
6538    l_task_in_rec.task_completion_date    :=  p_task_completion_date;
6539    l_task_in_rec.pa_parent_task_id              :=      p_pa_parent_task_id; -- Added for Bug2316713
6540    l_task_in_rec.pm_parent_task_reference  :=  p_pm_parent_task_reference;
6541    l_task_in_rec.address_id      :=  p_address_id;
6542    l_task_in_rec.carrying_out_organization_id  :=  p_carrying_out_organization_id;
6543    l_task_in_rec.service_type_code    :=  p_service_type_code;
6544    l_task_in_rec.task_manager_person_id    :=  p_task_manager_person_id;
6545    l_task_in_rec.billable_flag      :=  p_billable_flag;
6546    l_task_in_rec.chargeable_flag    :=  p_chargeable_flag;
6547    l_task_in_rec.ready_to_bill_flag    :=  p_ready_to_bill_flag;
6548    l_task_in_rec.ready_to_distribute_flag  :=  p_ready_to_distribute_flag;
6549    l_task_in_rec.limit_to_txn_controls_flag  :=  p_limit_to_txn_controls_flag;
6550    l_task_in_rec.labor_bill_rate_org_id    :=  p_labor_bill_rate_org_id;
6551    l_task_in_rec.labor_std_bill_rate_schdl  :=  p_labor_std_bill_rate_schdl;
6552    l_task_in_rec.labor_schedule_fixed_date  :=  p_labor_schedule_fixed_date;
6553    l_task_in_rec.labor_schedule_discount  :=  p_labor_schedule_discount;
6554    l_task_in_rec.non_labor_bill_rate_org_id  :=  p_nl_bill_rate_org_id;
6555    l_task_in_rec.non_labor_std_bill_rate_schdl  :=  p_nl_std_bill_rate_schdl;
6556    l_task_in_rec.non_labor_schedule_fixed_date  :=  p_nl_schedule_fixed_date;
6557    l_task_in_rec.non_labor_schedule_discount  :=  p_nl_schedule_discount;
6558    l_task_in_rec.labor_cost_multiplier_name  :=  p_labor_cost_multiplier_name;
6559    l_task_in_rec.cost_ind_rate_sch_id    :=  p_cost_ind_rate_sch_id;
6560    l_task_in_rec.rev_ind_rate_sch_id    :=  p_rev_ind_rate_sch_id;
6561    l_task_in_rec.inv_ind_rate_sch_id    :=  p_inv_ind_rate_sch_id;
6562    l_task_in_rec.cost_ind_sch_fixed_date  :=  p_cost_ind_sch_fixed_date;
6563    l_task_in_rec.rev_ind_sch_fixed_date    :=  p_rev_ind_sch_fixed_date;
6564    l_task_in_rec.inv_ind_sch_fixed_date    :=  p_inv_ind_sch_fixed_date;
6565    l_task_in_rec.labor_sch_type      :=  p_labor_sch_type;
6566    l_task_in_rec.non_labor_sch_type    :=  p_nl_sch_type;
6567    l_task_in_rec.actual_start_date              :=      p_actual_start_date;
6568    l_task_in_rec.actual_finish_date             :=      p_actual_finish_date;
6569    l_task_in_rec.early_start_date               :=      p_early_start_date;
6570    l_task_in_rec.early_finish_date              :=      p_early_finish_date;
6571    l_task_in_rec.late_start_date                :=      p_late_start_date;
6572    l_task_in_rec.late_finish_date               :=      p_late_finish_date;
6573    l_task_in_rec.scheduled_start_date           :=      p_scheduled_start_date;
6574    l_task_in_rec.scheduled_finish_date          :=      p_scheduled_finish_date;
6575    l_task_in_rec.tasks_dff                      :=      p_tasks_dff; --bug 6153503
6576    l_task_in_rec.attribute_category             :=      p_attribute_category;
6577    l_task_in_rec.attribute1            :=      p_attribute1;
6578    l_task_in_rec.attribute2            :=      p_attribute2;
6579    l_task_in_rec.attribute3            :=      p_attribute3;
6580    l_task_in_rec.attribute4            :=      p_attribute4;
6581    l_task_in_rec.attribute5            :=      p_attribute5;
6582    l_task_in_rec.attribute6            :=      p_attribute6;
6583    l_task_in_rec.attribute7            :=      p_attribute7;
6584    l_task_in_rec.attribute8            :=      p_attribute8;
6585    l_task_in_rec.attribute9            :=      p_attribute9;
6586    l_task_in_rec.attribute10           :=      p_attribute10;
6587    --bug 6153503
6588    l_task_in_rec.attribute11           :=      p_attribute11;
6589    l_task_in_rec.attribute12           :=      p_attribute12;
6590    l_task_in_rec.attribute13           :=      p_attribute13;
6591    l_task_in_rec.attribute14           :=      p_attribute14;
6592    l_task_in_rec.attribute15           :=      p_attribute15;
6593     l_task_in_rec.adj_on_std_inv           :=      p_adj_on_std_inv;         /* Added for 12.2Payroll billing ER 11899223 */
6594 
6595    IF l_task_in_rec.tasks_dff = 'Y' THEN
6596             l_validate_dff          := 'N';
6597             l_attribute_category     := null;
6598             l_attribute1             := null;
6599             l_attribute2             := null;
6600             l_attribute3             := null;
6601             l_attribute4             := null;
6602             l_attribute5             := null;
6603             l_attribute6             := null;
6604             l_attribute7             := null;
6605             l_attribute8             := null;
6606             l_attribute9             := null;
6607             l_attribute10            := null;
6608             l_attribute11            := null;
6609             l_attribute12            := null;
6610             l_attribute13            := null;
6611             l_attribute14            := null;
6612             l_attribute15            := null;
6613 
6614    ELSIF l_task_in_rec.tasks_dff = 'N' THEN
6615 
6616             l_validate_dff           := 'Y';
6617             l_attribute_category     := l_task_in_rec.attribute_category;
6618             l_attribute1             := l_task_in_rec.attribute1;
6619             l_attribute2             := l_task_in_rec.attribute2;
6620             l_attribute3             := l_task_in_rec.attribute3;
6621             l_attribute4             := l_task_in_rec.attribute4;
6622             l_attribute5             := l_task_in_rec.attribute5;
6623             l_attribute6             := l_task_in_rec.attribute6;
6624             l_attribute7             := l_task_in_rec.attribute7;
6625             l_attribute8             := l_task_in_rec.attribute8;
6626             l_attribute9             := l_task_in_rec.attribute9;
6627             l_attribute10            := l_task_in_rec.attribute10;
6628             l_attribute11            := l_task_in_rec.attribute11;
6629             l_attribute12            := l_task_in_rec.attribute12;
6630             l_attribute13            := l_task_in_rec.attribute13;
6631             l_attribute14            := l_task_in_rec.attribute14;
6632             l_attribute15            := l_task_in_rec.attribute15;
6633    END IF;
6634    --end bug 6153503
6635 
6636    l_task_in_rec.task_type             :=      p_task_type;   -- Added for bug 3086001
6637 
6638   --bug 3281110
6639   l_task_in_rec.retirement_cost_flag  :=      p_retirement_cost_flag;
6640   l_task_in_rec.cint_eligible_flag    :=      p_cint_eligible_flag;
6641   l_task_in_rec.cint_stop_date        :=      p_cint_stop_date;
6642   --bug 3281110
6643 
6644  -- FP-M Bug # 3301192
6645  l_task_in_rec.pred_string       :=      p_pred_string;
6646  l_task_in_rec.pred_delimiter    :=  p_pred_delimiter;
6647 
6648 --Added for Bug 6026370
6649 IF p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6650         OPEN l_default_parent_task_csr( p_pa_parent_task_id );
6651           FETCH l_default_parent_task_csr
6652             INTO l_allow_cross_charge_flag,
6653                  l_cc_process_labor_flag,
6654                  l_labor_tp_schedule_id,
6655                  l_labor_tp_fixed_date,
6656                  l_cc_process_nl_flag,
6657                  l_nl_tp_schedule_id,
6658                  l_nl_tp_fixed_date;
6659            CLOSE l_default_parent_task_csr;
6660 END IF;
6661 -- Changes End for Bug 6026370
6662 
6663 -- IC AND  Multi National Currency Changes Starts Here ...
6664      IF p_allow_cross_charge_flag IS NULL THEN --Added null condition for Bug 6026370
6665 
6666         l_task_in_rec.allow_cross_charge_flag  :=  'N';
6667 
6668      ELSIF p_allow_cross_charge_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6669 --      l_task_in_rec.allow_cross_charge_flag  :=  'N'; -- Bug 6026370
6670         l_task_in_rec.allow_cross_charge_flag  :=  l_allow_cross_charge_flag;  -- Bug 6026370
6671 
6672      ELSE
6673         l_task_in_rec.allow_cross_charge_flag  :=  p_allow_cross_charge_flag;
6674      END IF;
6675 
6676      l_task_in_rec.project_rate_type  :=  p_project_rate_type;
6677      l_task_in_rec.project_rate_date  :=  p_project_rate_date;
6678 
6679 /*   Commented for Bug 6026370
6680      IF p_cc_process_labor_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6681      THEN
6682         l_task_in_rec.cc_process_labor_flag  :=  'N';
6683      ELSE
6684         l_task_in_rec.cc_process_labor_flag  :=  p_cc_process_labor_flag;
6685      END IF;
6686 
6687      IF p_cc_process_nl_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6688      THEN
6689         l_task_in_rec.cc_process_nl_flag  :=  'N';
6690      ELSE
6691         l_task_in_rec.cc_process_nl_flag  :=  p_cc_process_nl_flag;
6692      END IF;
6693 */
6694 
6695 -- Added for Bug 6026370
6696      IF p_cc_process_labor_flag IS NULL THEN
6697         l_task_in_rec.cc_process_labor_flag := 'N';
6698         l_labor_tp_schedule_id := NULL;
6699         l_labor_tp_fixed_date := NULL;
6700      ELSIF p_cc_process_labor_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6701 --        l_task_in_rec.cc_process_labor_flag  :=  'N';  -- Bug 6026370
6702         l_task_in_rec.cc_process_labor_flag  := l_cc_process_labor_flag;  -- Bug 6026370
6703              ELSE
6704         l_task_in_rec.cc_process_labor_flag  :=  p_cc_process_labor_flag;
6705         IF p_cc_process_labor_flag = 'Y' THEN
6706                 IF (p_labor_tp_schedule_id IS NULL OR p_labor_tp_schedule_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6707                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6708                            pa_interface_utils_pub.map_new_amg_msg
6709                              ( p_old_message_code => 'PA_TASK_LAB_TP_SCH_MAND'
6710                               ,p_msg_attribute    => 'CHANGE'
6711                               ,p_resize_flag      => 'N'
6712                               ,p_msg_context      => 'TASK'
6713                               ,p_attribute1       => ''
6714                               ,p_attribute2       => ''
6715                               ,p_attribute3       => ''
6716                               ,p_attribute4       => ''
6717                               ,p_attribute5       => '');
6718                         END IF;
6719                         RAISE  FND_API.G_EXC_ERROR;
6720                 ELSE
6721                         /*As of now we are not doing the basic validation check for p_labor_tp_schedule_id */
6722                         l_labor_tp_schedule_id := p_labor_tp_schedule_id;
6723                         IF p_labor_tp_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6724                                 l_labor_tp_fixed_date := NULL;
6725                         ELSE
6726                                 l_labor_tp_fixed_date := p_labor_tp_fixed_date;
6727                         END IF;
6728                 END IF;
6729         ELSE
6730                 --- If we pass p_cc_process_labor_flag = 'N' then we will not honor the values passed in
6731                 --  p_labor_tp_schedule_id and p_labor_tp_fixed_date
6732                 l_labor_tp_schedule_id := NULL;
6733                 l_labor_tp_fixed_date := NULL;
6734         END IF;
6735      END IF;
6736 
6737 -- End Bug 6026370
6738 
6739 -- Added for Bug 6026370
6740      IF p_cc_process_nl_flag IS NULL THEN
6741         l_task_in_rec.cc_process_nl_flag := 'N';
6742         l_nl_tp_schedule_id := NULL;
6743         l_nl_tp_fixed_date := NULL;
6744      ELSIF p_cc_process_nl_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6745 --        l_task_in_rec.cc_process_labor_flag  :=  'N';  -- Bug 6026370
6746         l_task_in_rec.cc_process_nl_flag  := l_cc_process_nl_flag;  -- Bug 6026370
6747      ELSE
6748         l_task_in_rec.cc_process_nl_flag  :=  p_cc_process_nl_flag;
6749         IF p_cc_process_nl_flag = 'Y' THEN
6750                 IF p_nl_tp_schedule_id IS NULL OR p_nl_tp_schedule_id =  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6751                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6752                            pa_interface_utils_pub.map_new_amg_msg
6753                              ( p_old_message_code => 'PA_TASK_NL_TP_SCH_MAND'
6754                               ,p_msg_attribute    => 'CHANGE'
6755                               ,p_resize_flag      => 'N'
6756                               ,p_msg_context      => 'TASK'
6757                               ,p_attribute1       => ''
6758                               ,p_attribute2       => ''
6759                               ,p_attribute3       => ''
6760                               ,p_attribute4       => ''
6761                               ,p_attribute5       => '');
6762                         END IF;
6763                         RAISE  FND_API.G_EXC_ERROR;
6764                 ELSE
6765                         /*As of now we are not doing the basic validation check for p_nl_tp_schedule_id */
6766                         l_nl_tp_schedule_id := p_nl_tp_schedule_id;
6767                         IF p_nl_tp_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6768                                 l_nl_tp_fixed_date := NULL;
6769                         ELSE
6770                                 l_nl_tp_fixed_date := p_nl_tp_fixed_date;
6771                         END IF;
6772                 END IF;
6773         ELSE
6774                 --- If we pass p_cc_process_nl_flag = 'N' then we will not honor the values passed in
6775                 --  p_nl_tp_schedule_id and p_nl_tp_fixed_date
6776                 l_nl_tp_schedule_id := NULL;
6777                 l_nl_tp_fixed_date := NULL;
6778         END IF;
6779      END IF;
6780 -- End Bug 6026370
6781 
6782   --Project Structures
6783      IF p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6784      THEN
6785         l_ref_task_id :=  null;
6786      ELSE
6787         l_ref_task_id :=  p_ref_task_id;
6788      END IF;
6789   --Project Structures
6790 -- For bug 3280610 Commented the below code and added code for
6791 -- if l_ref_task_id is not passed then we pass parent Task id instead of throwing an error message
6792 --      Bug 3075623 : Added following condition to throw error if no ref task id
6793 --    IF (( (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
6794 --         (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
6795 --   AND l_ref_task_id is null ) THEN
6796 --       PA_UTILS.ADD_MESSAGE
6797 --         (p_app_short_name => 'PA',
6798 --              p_msg_name       => 'PA_PS_INV_REF_TASK_ID');
6799 --
6800 --       RAISE FND_API.G_EXC_ERROR;
6801 --     END IF;
6802        IF l_ref_task_id is null THEN
6803 
6804           IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6805 
6806           l_ref_task_id :=  p_pa_parent_task_id;
6807 
6808           ELSIF (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6809 
6810             --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
6811             --OPEN l_task_ref_to_id_csr(l_project_id,p_pm_parent_task_reference);
6812             --FETCH l_task_ref_to_id_csr INTO l_ref_task_id;
6813             PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
6814             (
6815                 p_pa_project_id        => l_project_id    ,
6816                 p_structure_type       => l_structure_type,
6817                 p_pm_task_reference    => p_pm_parent_task_reference ,
6818                 p_out_task_id          => l_ref_task_id,
6819                 p_return_status        => l_return_status
6820             );
6821 
6822             --changed by rtarway for BUG 3661788
6823             --IF l_task_ref_to_id_csr%NOTFOUND
6824             IF (l_return_status <> 'S')
6825             THEN
6826                 --rtarway , 3661788, comment close command
6827                 --CLOSE l_task_ref_to_id_csr;
6828                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6829                 THEN
6830                  l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6831                                           (p_task_number=> p_task_name
6832                                           ,p_task_reference => p_pm_task_reference
6833                                           ,p_task_id => '');
6834 
6835                          pa_interface_utils_pub.map_new_amg_msg
6836                           ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
6837                            ,p_msg_attribute    => 'CHANGE'
6838                            ,p_resize_flag      => 'N'
6839                            ,p_msg_context      => 'TASK'
6840                            ,p_attribute1       => l_amg_segment1
6841                            ,p_attribute2       => l_amg_task_number
6842                            ,p_attribute3       => ''
6843                            ,p_attribute4       => ''
6844                            ,p_attribute5       => '');
6845                 END IF;
6846                 RAISE  FND_API.G_EXC_ERROR;
6847              END IF;
6848             --rtarway , 3661788, comment close command
6849             --CLOSE l_task_ref_to_id_csr;
6850            END IF;
6851        END IF;
6852     --Bug 13923366 changes start here
6853     l_task_in_rec.PM_SOURCE_CODE             := p_pm_source_code;
6854     --Bug 13923366 changes end here
6855 -- End for changes done for bug 3280610
6856 
6857 /*Commented for Bug 6026370
6858   l_task_in_rec.labor_tp_schedule_id  :=  p_labor_tp_schedule_id;
6859   l_task_in_rec.labor_tp_fixed_date  :=  p_labor_tp_fixed_date;
6860   l_task_in_rec.nl_tp_schedule_id  :=  p_labor_tp_schedule_id;
6861   l_task_in_rec.nl_tp_fixed_date  :=  p_labor_tp_fixed_date;*/
6862 
6863 --Added for Bug 6026370
6864   l_task_in_rec.labor_tp_schedule_id  :=  l_labor_tp_schedule_id;
6865   l_task_in_rec.labor_tp_fixed_date  :=  l_labor_tp_fixed_date;
6866   l_task_in_rec.nl_tp_schedule_id  :=  l_nl_tp_schedule_id;
6867   l_task_in_rec.nl_tp_fixed_date  :=  l_nl_tp_fixed_date;
6868   l_task_in_rec.receive_project_invoice_flag  :=  p_receive_project_invoice_flag;
6869   l_task_in_rec.work_type_id  :=  p_work_type_id;
6870   l_task_in_rec.emp_bill_rate_schedule_id  :=  p_emp_bill_rate_schedule_id;
6871   l_task_in_rec.job_bill_rate_schedule_id  :=  p_job_bill_rate_schedule_id;
6872 
6873 -- IC AND  Multi National Currency Changes Ends Here ...
6874 
6875 --Sakthi MCB
6876 
6877   l_task_in_rec.non_lab_std_bill_rt_sch_id  :=  p_non_lab_std_bill_rt_sch_id;
6878   l_task_in_rec.taskfunc_cost_rate_type     :=  p_taskfunc_cost_rate_type;
6879   l_task_in_rec.taskfunc_cost_rate_date     :=  p_taskfunc_cost_rate_date;
6880 
6881 --Sakthi MCB
6882 
6883   l_task_in_rec.labor_disc_reason_code  :=  p_labor_disc_reason_code;
6884   l_task_in_rec.non_labor_disc_reason_code     :=  p_non_labor_disc_reason_code;
6885 
6886 -- (begin venkat) new params for bug #3450684 ------------------------
6887   l_task_in_rec.ext_act_duration    := p_ext_act_duration;
6888   l_task_in_rec.ext_remain_duration := p_ext_remain_duration;
6889   l_task_in_rec.ext_sch_duration    := p_ext_sch_duration;
6890 -- (end venkat) new params for bug #3450684 ---------------------------
6891 
6892 -- set the new params - bug #3654243 ----------------------------------------------
6893       G_tasks_in_tbl(G_tasks_tbl_count).base_percent_comp_deriv_code := p_base_percent_comp_deriv_code;
6894       G_tasks_in_tbl(G_tasks_tbl_count).sch_tool_tsk_type_code       := p_sch_tool_tsk_type_code;
6895       G_tasks_in_tbl(G_tasks_tbl_count).constraint_type_code         := p_constraint_type_code;
6896       G_tasks_in_tbl(G_tasks_tbl_count).constraint_date              := p_constraint_date;
6897       G_tasks_in_tbl(G_tasks_tbl_count).free_slack                   := p_free_slack;
6898       G_tasks_in_tbl(G_tasks_tbl_count).total_slack                  := p_total_slack;
6899       G_tasks_in_tbl(G_tasks_tbl_count).effort_driven_flag           := p_effort_driven_flag;
6900       G_tasks_in_tbl(G_tasks_tbl_count).level_assignments_flag       := p_level_assignments_flag;
6901       G_tasks_in_tbl(G_tasks_tbl_count).invoice_method               := p_invoice_method;
6902       G_tasks_in_tbl(G_tasks_tbl_count).customer_id                  := p_customer_id;
6903       G_tasks_in_tbl(G_tasks_tbl_count).gen_etc_source_code          := p_gen_etc_source_code;
6904 -- set the new params - bug #3654243 -------------------------------------------------
6905 
6906    l_task_in_rec.gen_etc_source_code  := p_gen_etc_source_code; -- added for bug#13864323
6907 
6908 --Bug 6410745 Changes done to set default value for financial task flag.
6909     l_shared      := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(l_project_id);
6910     l_Share_Code  := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id);
6911 
6912     IF l_shared = 'Y'
6913     THEN
6914         If l_Share_Code = 'SHARE_PARTIAL' then
6915            l_financial_task_flag  := NVL(p_financial_task_flag,'N');
6916         Else
6917            l_financial_task_flag  := 'Y';
6918         End If;
6919     ELSE
6920         If l_structure_type = 'WORKPLAN' THEN
6921            l_financial_task_flag := 'N';
6922         Else
6923            l_financial_task_flag := 'Y';
6924         End If;
6925     End IF;
6926 
6927     IF  l_financial_task_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR   THEN
6928         PA_UTILS.ADD_MESSAGE('PA', 'PA_AMG_RES_INV_PARAMS',
6929                               'INVALID_PARAMS', 'FINANCIAL_TASK_FLAG');
6930         RAISE FND_API.G_EXC_ERROR;
6931     End If;
6932 --Bug 6410745 End Changes
6933 
6934 --Begin Add by rtarway for FP.M Set Financial Task and Mapping
6935    l_task_in_rec.financial_task_flag := l_financial_task_flag; --Bug 6410745
6936    l_task_in_rec.mapped_task_id      := p_mapped_task_id;
6937    l_task_in_rec.mapped_task_reference := p_mapped_task_reference;
6938 --End Add by rtarway For FP.M set financial task and Mapping
6939 
6940    l_task_in_rec.MILESTONE_FLAG := p_MILESTONE_FLAG; --bug#14095637
6941 --project structure
6942 --FINANCIAL structrues
6943 
6944 -- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
6945 IF PA_PROJECT_PUB.G_MASS_ADD_TASKS = 'Y' OR PA_PROJECT_PUB.G_MASS_UPDATE_TASKS = 'Y' THEN
6946 
6947 		 l_task_in_rec.PLANNED_WORK_QUANTITY      := p_PLANNED_WORK_QUANTITY;
6948 		 l_task_in_rec.TASK_TYPE                  := p_TASK_TYPE;
6949 		 l_task_in_rec.WQ_UOM_CODE                := p_WQ_UOM_CODE;
6950 		 l_task_in_rec.CRITICAL_FLAG              := p_CRITICAL_FLAG;
6951 
6952 END IF;
6953     --Bug 13923366 changes start here
6954     l_task_in_rec.PM_SOURCE_CODE             := p_pm_source_code;
6955 	--Bug 13923366 changes end here
6956 /* End of code changes for new parameters */
6957 
6958 IF l_structure_type = 'FINANCIAL'    --bug 2738747
6959 THEN
6960 --project structure
6961 
6962 
6963    --Inserting a task will be done in 2 steps
6964    --1> an INSERT step to get a task_id linked to task_reference
6965    --2> and then an UPDATE step to get the appropriate parent id and toptask id.
6966    --This second step will also be used to default data from parents to children.
6967 
6968     --get the values associated to the project
6969     OPEN l_project_csr(l_project_id);
6970     FETCH l_project_csr INTO l_project_rec;
6971     CLOSE l_project_csr;
6972 
6973    --get the project_type_class_code and service_code associated to the project_type
6974 
6975    OPEN l_project_type_csr(l_project_rec.project_type);
6976    FETCH l_project_type_csr INTO l_project_type_rec;
6977    CLOSE l_project_type_csr;
6978 
6979 
6980    --ROUND TRIP 1
6981 
6982 
6983   pa_project_pvt.add_task_round_one(p_return_status    => l_return_status
6984               ,p_project_rec      => l_project_rec
6985               ,p_task_rec      => l_task_in_rec
6986               ,p_project_type_class_code  => l_project_type_rec.project_type_class_code
6987               ,p_service_type_code    => l_project_type_rec.service_type_code
6988               ,p_task_id      => l_task_id);
6989 
6990   -- assign the return_status to the out parameter
6991   p_return_status := l_return_status;
6992 
6993 --ISSUE
6994 --return the related task Reference as well?
6995 
6996 
6997      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6998       THEN
6999       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7000 
7001       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7002       THEN
7003       RAISE FND_API.G_EXC_ERROR;
7004       END IF;
7005 
7006   --we need to update to pm_product_code because it will be inherited
7007   --from the project in add_task_round_one
7008 
7009   UPDATE pa_tasks
7010   SET    pm_product_code   = p_pm_product_code
7011   WHERE  task_id     = l_task_id;
7012 
7013 
7014      --ROUND TRIP 2
7015 
7016   pa_project_pvt.add_task_round_two(p_return_status    => l_return_status
7017               ,p_project_rec      => l_project_rec
7018               ,p_task_id      => l_task_id
7019               ,p_task_rec      => l_task_in_rec
7020                                          --Project structures
7021                                          ,p_ref_task_id                 => l_ref_task_id
7022                                          ,p_tasks_in                    => l_tasks_in
7023                                          ,p_tasks_out                   => l_tasks_out
7024                                          ,p_task_version_id             => l_task_version_id
7025                                          --Project structures
7026                                          );
7027 
7028   -- assign the return_status to the out parameter
7029   p_return_status := l_return_status;
7030 
7031      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7032       THEN
7033       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7034 
7035       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7036       THEN
7037       RAISE FND_API.G_EXC_ERROR;
7038       END IF;
7039 --ELSIF p_structure_type = 'WORKPLAN'
7040 ELSIF l_structure_type = 'WORKPLAN'    --bug 2738747
7041 THEN
7042 
7043     IF G_WP_STR_EXISTS = 'N'
7044     THEN
7045         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7046         THEN
7047             pa_interface_utils_pub.map_new_amg_msg
7048               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
7049                   ,p_msg_attribute    => 'CHANGE'
7050                   ,p_resize_flag      => 'N'
7051                   ,p_msg_context      => 'GENERAL'
7052                   ,p_attribute1       => ''
7053                   ,p_attribute2       => ''
7054                   ,p_attribute3       => ''
7055                   ,p_attribute4       => ''
7056                   ,p_attribute5       => '');
7057         END IF;
7058         RAISE FND_API.G_EXC_ERROR;
7059     END IF;
7060 
7061        IF ( p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
7062             p_structure_version_id IS NULL  )
7063        THEN
7064             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7065             THEN
7066                pa_interface_utils_pub.map_new_amg_msg
7067                     ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
7068                      ,p_msg_attribute    => 'CHANGE'
7069                      ,p_resize_flag      => 'N'
7070                      ,p_msg_context      => 'GENERAL'
7071                      ,p_attribute1       => ''
7072                      ,p_attribute2       => ''
7073                      ,p_attribute3       => ''
7074                      ,p_attribute4       => ''
7075                      ,p_attribute5       => '');
7076             END IF;
7077             RAISE FND_API.G_EXC_ERROR;
7078         --bug 3098668
7079         ELSE
7080             l_str_ver_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id,l_structure_type);
7081             struct_ver_updatable := PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable(p_structure_version_id);
7082             IF (struct_ver_updatable IS NULL OR
7083                 struct_ver_updatable = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7084                 struct_ver_updatable = 'N' OR
7085                 NVL( l_str_ver_type, 'N' ) = 'N' )
7086             THEN
7087                 -- add error message to stack and throw exception
7088                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7089                 THEN
7090                     pa_interface_utils_pub.map_new_amg_msg
7091                      ( p_old_message_code => 'PA_STRUCT_VER_NO_UPDATE'
7092                       ,p_msg_attribute    => 'CHANGE'
7093                       ,p_resize_flag      => 'N'
7094                       ,p_msg_context      => 'GENERAL'
7095                       ,p_attribute1       => ''
7096                       ,p_attribute2       => ''
7097                       ,p_attribute3       => ''
7098                       ,p_attribute4       => ''
7099                       ,p_attribute5       => '');
7100                 END IF;
7101                 RAISE FND_API.G_EXC_ERROR;
7102             END IF;
7103             --bug 3098668
7104         END IF;
7105 
7106 -- FP-M Bug # 3301192  --add_task
7107 /*
7108       PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_pa_project_id
7109                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
7110                                               ,p_out_task_id => l_d_task_id
7111                                               ,p_return_status => l_return_status);
7112 */
7113 
7114       IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(p_pa_project_id) = 'Y') THEN
7115 
7116         IF l_d_task_id IS NULL AND l_task_in_rec.pm_task_reference IS NOT NULL AND
7117            l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7118         THEN
7119 
7120       /* Start commenting out the following code for issue in bug # 3663166.
7121 
7122           PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => p_pa_project_id
7123                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
7124                                               ,p_out_task_id => l_d_task_id
7125                                               ,p_return_status => l_return_status);
7126 
7127          End commenting out the following code for issue in bug # 3663166.*/
7128 
7129 
7130       /* Start adding code for issue in bug # 3663166. */
7131 
7132         l_d_task_id := l_task_id;
7133 
7134       /* End adding code for issue in bug # 3663166.  */
7135 
7136             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7137             THEN
7138                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7139 
7140             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7141             THEN
7142                         RAISE FND_API.G_EXC_ERROR;
7143             END IF;
7144 
7145         END IF;
7146 
7147         IF p_structure_version_id IS NULL OR p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7148         THEN
7149           IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id) = 'Y') THEN
7150                 l_d_struct_ver_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(p_pa_project_id);
7151           ELSE
7152              l_d_struct_ver_id :=  PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(p_pa_project_id, 'WORKPLAN');
7153           END IF;
7154         ELSE
7155           l_d_struct_ver_id := p_structure_version_id;
7156         END IF;
7157 
7158       l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_d_struct_ver_id
7159                                           ,p_task_id => l_d_task_id);
7160 
7161       pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
7162                                                      ,p_delimeter => l_task_in_rec.pred_delimiter
7163                                                      ,p_task_version_Id => l_d_task_ver_id
7164                                                      ,x_return_status => l_return_status
7165                                                      ,x_msg_count => l_msg_count
7166                                                      ,x_msg_data  => l_msg_data);
7167 
7168            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7169             THEN
7170                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7171 
7172             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7173             THEN
7174                         RAISE FND_API.G_EXC_ERROR;
7175             END IF;
7176             l_d_task_id := null;
7177 
7178      END IF;
7179 
7180              l_task_in_rec.OBLIGATION_START_DATE      := p_OBLIGATION_START_DATE;
7181              l_task_in_rec.OBLIGATION_FINISH_DATE     := p_OBLIGATION_FINISH_DATE;
7182              l_task_in_rec.ESTIMATED_START_DATE       := p_ESTIMATED_START_DATE;
7183              l_task_in_rec.ESTIMATED_FINISH_DATE      := p_ESTIMATED_FINISH_DATE;
7184              l_task_in_rec.BASELINE_START_DATE        := p_BASELINE_START_DATE;
7185              l_task_in_rec.BASELINE_FINISH_DATE       := p_BASELINE_FINISH_DATE;
7186              l_task_in_rec.CLOSED_DATE                := p_CLOSED_DATE;
7187              l_task_in_rec.WQ_UOM_CODE                := p_WQ_UOM_CODE;
7188              l_task_in_rec.WQ_ITEM_CODE               := p_WQ_ITEM_CODE;
7189              l_task_in_rec.STATUS_CODE                := p_STATUS_CODE;
7190              l_task_in_rec.WF_STATUS_CODE             := p_WF_STATUS_CODE;
7191              l_task_in_rec.PM_SOURCE_CODE             := nvl(p_pm_source_code,p_pm_product_code); --Bug 13923366 changes
7192              l_task_in_rec.PRIORITY_CODE              := p_PRIORITY_CODE;
7193              l_task_in_rec.MILESTONE_FLAG             := p_MILESTONE_FLAG;
7194              l_task_in_rec.CRITICAL_FLAG              := p_CRITICAL_FLAG;
7195              l_task_in_rec.INC_PROJ_PROGRESS_FLAG     := p_INC_PROJ_PROGRESS_FLAG;
7196              l_task_in_rec.LINK_TASK_FLAG             := p_LINK_TASK_FLAG;
7197              l_task_in_rec.CALENDAR_ID                := p_CALENDAR_ID;
7198          --Bug No 3802240
7199              IF ( p_PLANNED_EFFORT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_PLANNED_EFFORT IS NOT NULL )
7200              THEN
7201                 l_task_in_rec.PLANNED_EFFORT := null;
7202              ELSE
7203                 l_task_in_rec.PLANNED_EFFORT := p_PLANNED_EFFORT;
7204              END IF;
7205        --      l_task_in_rec.PLANNED_EFFORT             := p_PLANNED_EFFORT;    --Bug No 3802240
7206              l_task_in_rec.DURATION                   := p_DURATION;
7207              l_task_in_rec.PLANNED_WORK_QUANTITY      := p_PLANNED_WORK_QUANTITY;
7208              l_task_in_rec.TASK_TYPE                  := p_TASK_TYPE;
7209              l_task_in_rec.actual_start_date          := p_actual_start_date;
7210              l_task_in_rec.actual_finish_date         := p_actual_finish_date;
7211              l_task_in_rec.early_start_date           := p_early_start_date;
7212              l_task_in_rec.early_finish_date          := p_early_finish_date;
7213              l_task_in_rec.late_start_date            := p_late_start_date;
7214              l_task_in_rec.late_finish_date           := p_late_finish_date;
7215              l_task_in_rec.scheduled_start_date       := p_scheduled_start_date;
7216              l_task_in_rec.scheduled_finish_date      := p_scheduled_finish_date;
7217              l_task_in_rec.PM_task_reference        := p_pm_task_reference;
7218 
7219      PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
7220               p_project_id                   => l_project_id
7221              ,p_task_id                      => l_task_in_rec.pa_task_id
7222              ,p_parent_task_id               => l_task_in_rec.pa_parent_task_id
7223              ,p_ref_task_id                  => l_ref_task_id    --proj conn
7224              ,p_task_number                  => l_task_in_rec.pa_task_number
7225              ,p_task_name                    => l_task_in_rec.long_task_name     --bug 2833194
7226              ,p_task_description             => l_task_in_rec.task_description
7227              ,p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id
7228              ,p_calling_module               => 'AMG'
7229              ,p_structure_type               => l_structure_type             --bug 2738747
7230              ,p_OBLIGATION_START_DATE        => l_task_in_rec.OBLIGATION_START_DATE
7231              ,p_OBLIGATION_FINISH_DATE       => l_task_in_rec.OBLIGATION_FINISH_DATE
7232              ,p_ESTIMATED_START_DATE         => l_task_in_rec.ESTIMATED_START_DATE
7233              ,p_ESTIMATED_FINISH_DATE        => l_task_in_rec.ESTIMATED_FINISH_DATE
7234              ,p_BASELINE_START_DATE          => l_task_in_rec.BASELINE_START_DATE
7235              ,p_BASELINE_FINISH_DATE         => l_task_in_rec.BASELINE_FINISH_DATE
7236              ,p_CLOSED_DATE                  => l_task_in_rec.CLOSED_DATE
7237              ,p_WQ_UOM_CODE                  => l_task_in_rec.WQ_UOM_CODE
7238              ,p_WQ_ITEM_CODE                 => l_task_in_rec.WQ_ITEM_CODE
7239              ,p_STATUS_CODE                  => l_task_in_rec.STATUS_CODE
7240              ,p_WF_STATUS_CODE               => l_task_in_rec.WF_STATUS_CODE
7241              ,p_PM_SOURCE_CODE               => l_task_in_rec.PM_source_CODE
7242              ,p_PRIORITY_CODE                => l_task_in_rec.PRIORITY_CODE
7243              ,p_MILESTONE_FLAG               => l_task_in_rec.MILESTONE_FLAG
7244              ,p_CRITICAL_FLAG                => l_task_in_rec.CRITICAL_FLAG
7245              ,p_INC_PROJ_PROGRESS_FLAG       => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
7246              ,p_LINK_TASK_FLAG               => l_task_in_rec.LINK_TASK_FLAG
7247              ,p_CALENDAR_ID                  => l_task_in_rec.CALENDAR_ID
7248              ,p_PLANNED_EFFORT               => l_task_in_rec.PLANNED_EFFORT
7249              ,p_DURATION                     => l_task_in_rec.DURATION
7250              ,p_PLANNED_WORK_QUANTITY        => l_task_in_rec.PLANNED_WORK_QUANTITY
7251              ,p_TASK_TYPE                    => l_task_in_rec.TASK_TYPE
7252              ,p_actual_start_date                  => l_task_in_rec.actual_start_date
7253              ,p_actual_finish_date                 => l_task_in_rec.actual_finish_date
7254              ,p_early_start_date                   => l_task_in_rec.early_start_date
7255              ,p_early_finish_date                  => l_task_in_rec.early_finish_date
7256              ,p_late_start_date                    => l_task_in_rec.late_start_date
7257              ,p_late_finish_date                   => l_task_in_rec.late_finish_date
7258              ,p_scheduled_start_date               => l_task_in_rec.scheduled_start_date
7259              ,p_scheduled_finish_date              => l_task_in_rec.scheduled_finish_date
7260              ,P_PM_SOURCE_reference                => l_task_in_rec.pm_task_reference
7261              ,p_location_id                        => l_task_in_rec.address_id
7262              ,p_manager_person_id                  => l_task_in_rec.task_manager_person_id
7263              , p_structure_version_id              => p_structure_version_id  --Bug 3098668
7264 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
7265              ,p_ext_act_duration                   => l_task_in_rec.ext_act_duration
7266              ,p_ext_remain_duration                => l_task_in_rec.ext_remain_duration
7267              ,p_ext_sch_duration                   => l_task_in_rec.ext_sch_duration
7268 -- (End venkat) new params for bug #3450684 -------------------------------------------------
7269              ,p_financial_task_flag                => l_task_in_rec.financial_task_flag --Bug 4482903
7270              --bug 6153503
7271              ,p_validate_dff                       => l_validate_dff
7272              ,p_attribute_category                 => l_attribute_category
7273              ,p_attribute1                         => l_attribute1
7274              ,p_attribute2                         => l_attribute2
7275              ,p_attribute3                         => l_attribute3
7276              ,p_attribute4                         => l_attribute4
7277              ,p_attribute5                         => l_attribute5
7278              ,p_attribute6                         => l_attribute6
7279              ,p_attribute7                         => l_attribute7
7280              ,p_attribute8                         => l_attribute8
7281              ,p_attribute9                         => l_attribute9
7282              ,p_attribute10                        => l_attribute10
7283              ,p_attribute11                        => l_attribute11
7284              ,p_attribute12                        => l_attribute12
7285              ,p_attribute13                        => l_attribute13
7286              ,p_attribute14                        => l_attribute14
7287              ,p_attribute15                        => l_attribute15
7288              --end bug 6153503
7289              ,x_task_version_id                    => l_task_version_id
7290              ,x_task_id                            => l_task_id
7291              ,x_msg_count                    => l_msg_count
7292              ,x_msg_data                     => l_msg_data
7293              ,x_return_status                => l_return_status
7294                      );
7295 
7296         p_return_status := l_return_status;
7297 
7298         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7299         THEN
7300                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7301 
7302         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7303         THEN
7304                         RAISE FND_API.G_EXC_ERROR;
7305         END IF;
7306 
7307 END IF; --<< n_structure_type >>
7308 
7309 p_task_id      := l_task_id;
7310 p_pa_project_id_out    := l_project_rec.project_id;
7311 p_pa_project_number_out    := l_project_rec.segment1;   --this is the project_number field in PA_PROJECTS
7312 
7313 --Begin Add by rtarway FP.M Development
7314 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
7315 IF (G_PROJECT_SHARING_TYPE='SPLIT_MAPPING' AND l_structure_type = 'WORKPLAN' ) THEN
7316      IF (
7317          ( 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 )
7318          OR
7319          ( 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)
7320         )
7321      THEN
7322 
7323           pa_project_pub.create_mapping
7324           (
7325               p_api_version             => p_api_version_number
7326             , p_init_msg_list           => FND_API.G_FALSE
7327             , p_commit                  => FND_API.G_FALSE--bug 3766967
7328             , p_debug_mode              => FND_API.G_TRUE
7329             , p_project_id              => l_project_id
7330             , p_proj_source_reference   => null
7331             , p_wkp_structure_version_id   => p_structure_version_id
7332             , p_wkp_task_id            => l_task_id--Since the tasks are already created , this will have task Ids
7333             , px_mapped_task_id        => l_task_in_rec.mapped_task_id
7334             , p_mapped_task_reference  => l_task_in_rec.mapped_task_reference
7335             , x_return_status          => l_return_status
7336             , x_msg_count              => l_msg_count
7337             , x_msg_data               => l_msg_data
7338 
7339           );
7340            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7341            THEN
7342                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7343 
7344            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7345            THEN
7346                RAISE FND_API.G_EXC_ERROR;
7347            END IF;
7348      END IF;
7349 END IF;
7350 IF (G_PROJECT_SHARING_TYPE = 'SHARE_PARTIAL' and l_structure_type /*p_structure_type 3746912*/= 'FINANCIAL') THEN
7351     --Get the task Version Id
7352     --l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id, l_task_id);
7353     OPEN  c_get_pa_record_version_number ( l_task_version_id  , l_project_id);
7354     FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
7355     CLOSE c_get_pa_record_version_number;
7356    IF
7357    (p_financial_task_flag IS NOT NULL AND p_financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7358    THEN
7359         PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
7360          (
7361             p_api_version               => p_api_version_number
7362           , p_init_msg_list             => FND_API.G_FALSE
7363           , p_commit                    => FND_API.G_FALSE--bug 3766967
7364           , p_calling_module            => 'AMG'
7365           , p_debug_mode                => FND_API.G_TRUE
7366           , p_task_version_id           => l_task_version_id
7367           , p_checked_flag              => p_financial_task_flag
7368           , p_record_version_number     => l_patask_record_version_number
7369           , p_project_id                => l_project_id
7370           , p_published_version_exists  => G_Published_version_exists
7371           , x_return_status             => l_return_status
7372           , x_msg_count                 => l_msg_count
7373           , x_msg_data                  => l_msg_data
7374         );
7375            -- Added for 4537865 : Check for Return Status after API call
7376            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7377            THEN
7378                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7379 
7380            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7381            THEN
7382                RAISE FND_API.G_EXC_ERROR;
7383            END IF;
7384    END IF;
7385 END IF;
7386 --End Add by rtarway FP.M Development
7387 
7388 --bug 2732895   --Add_Task
7389 
7390 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
7391 IF (NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' AND (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
7392    ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y'
7393      AND  l_structure_type /*p_structure_type 3746912*/ = 'WORKPLAN' )))  --should not call if new task is added to FINANCIAL structure version
7394 THEN
7395 
7396  --bug 2856033
7397 
7398  -- The rollup of dates must be completed before we do
7399  -- the task weightage calculation.
7400 
7401   PA_PROJ_TASK_STRUC_PUB.rollup_dates(
7402              p_tasks_in             => l_tasks_out           --null if called for one task
7403             ,p_task_version_id      => l_task_version_id
7404             ,p_project_id           => l_project_id
7405             ,P_structure_version_id => null
7406             ,x_msg_count            => l_msg_count
7407             ,x_msg_data             => l_msg_data
7408             ,x_return_status        => l_return_status
7409        );
7410 
7411         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7412         THEN
7413            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7414 
7415         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7416         THEN
7417           RAISE FND_API.G_EXC_ERROR;
7418         END IF;
7419    --bug 2856033
7420 
7421   l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_pa_project_id) ;
7422 
7423   -- PA L Changes 3010538
7424   -- In new model PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings
7425   -- needs to be called only when task weight basis code is
7426   -- MANUAL.
7427   IF nvl(l_task_weight_basis_code,'-1') = 'MANUAL' THEN
7428 
7429        PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
7430                   p_tasks_in             => l_tasks_out            --null if called for one task
7431                  ,p_task_version_id      => l_task_version_id
7432                  ,x_msg_count            => l_msg_count
7433                  ,x_msg_data             => l_msg_data
7434                  ,x_return_status        => l_return_status
7435             );
7436 
7437              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7438              THEN
7439                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7440 
7441              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7442              THEN
7443                RAISE FND_API.G_EXC_ERROR;
7444              END IF;
7445   END IF ;
7446   -- PA L Changes 3010538
7447 END IF;
7448 --bug 2732895
7449 
7450 -- This block has been added for the bug 3106457 to derive the structure version id.
7451 declare
7452 cursor cur_str_ver(c_task_version_id pa_proj_element_versions.element_version_id%TYPE)
7453 is
7454 select parent_structure_version_id
7455   from pa_proj_element_versions
7456  where element_version_id = c_task_version_id;
7457 begin
7458      open cur_str_ver(l_task_version_id);
7459      fetch cur_str_ver into l_structure_version_id;
7460      close cur_str_ver;
7461 end;
7462 
7463 -- PA L Changes 3010538
7464 
7465    IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
7466        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
7467          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
7468          PA_PROJECT_PUB.G_Published_version_exists = 'N')
7469    THEN
7470 
7471    /* Starts added for Bug# 7264422 */
7472    IF (nvl(p_structure_updates_flag, 'Y') = 'N') THEN
7473       PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
7474                       (  p_calling_context       => 'AMG'
7475                         ,p_project_id            => l_project_id
7476                         ,p_structure_version_id  => l_structure_version_id
7477                         ,p_update_wbs_flag       => 'Y'
7478                         ,x_return_status         => l_return_status
7479                         ,x_msg_count             => l_msg_count
7480                         ,x_msg_data              => l_msg_data);
7481 
7482        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7483            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7484        end if;
7485 
7486    ELSE
7487    /* Ends added for Bug# 7264422 */
7488 
7489    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id -- bug 3106457 p_pa_project_id
7490                                                                        ,p_structure_version_id => l_structure_version_id); -- bug 3106457 p_structure_version_id ) ;
7491 
7492    IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
7493         IF p_process_mode = 'ONLINE' THEN
7494 
7495         PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
7496                                                   ,p_project_id           => l_project_id -- bug 3106457 p_pa_project_id
7497                                                   ,p_structure_version_id => l_structure_version_id -- bug 3106457 p_structure_version_id
7498                                                   ,x_return_status        => l_return_status
7499                                                   ,x_msg_count            => l_msg_count
7500                                                   ,x_msg_data             => l_msg_data ) ;
7501 
7502         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7503              THEN
7504                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7505         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7506              THEN
7507                RAISE FND_API.G_EXC_ERROR;
7508         END IF;
7509         ELSIF p_process_mode = 'CONCURRENT' THEN
7510 
7511         PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_UPDATE' -- Bug 6842218 'CON_UPDATE'
7512                                                             ,p_project_id            => l_project_id -- bug 3106457 p_pa_project_id
7513                                                             ,p_structure_version_id  => l_structure_version_id -- bug 3106457 p_structure_version_id
7514                                                             ,x_return_status         => l_return_status
7515                                                             ,x_msg_count             => l_msg_count
7516                                                             ,x_msg_data              => l_msg_data ) ;
7517 
7518         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7519              THEN
7520                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7521         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7522              THEN
7523                RAISE FND_API.G_EXC_ERROR;
7524         END IF;
7525 
7526 
7527         END IF ;
7528      END IF ;
7529     END IF; /* Added for Bug# 7264422 */
7530    END IF ;
7531 
7532 -- PA L Changes 3010538
7533   --  Commented by rtarway, for BUG 3661788 and 3665745, Changed If Condition
7534   --  IF (p_deliverable IS NOT NULL OR p_Deliverable <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7535 
7536       -- 3661788 If deliverable id or deliverable reference is passed , validate it and convert deliverable reference
7537       -- to deliverable id, if required
7538 
7539       IF ( ( p_deliverable_id IS NOT NULL AND p_deliverable_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
7540            ( p_deliverable IS NOT NULL AND p_deliverable <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) )  THEN
7541 
7542           Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
7543             ( p_deliverable_reference => p_deliverable
7544             , p_deliverable_id        => p_deliverable_id
7545             , p_project_id            => l_project_id
7546             , p_out_deliverable_id    => l_deliverable_id
7547             , p_return_status         => l_return_status
7548           );
7549 
7550           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR    THEN
7551              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7552           ELSIF l_return_status = FND_API.G_RET_STS_ERROR       THEN
7553              RAISE FND_API.G_EXC_ERROR;
7554           END IF;
7555 
7556           -- 3661788 pass validated deliverable id to association api
7557 
7558           pa_project_pub.ASSOCIATE_DLV_TO_TASK (
7559             p_api_version            => p_api_version_number
7560           , p_init_msg_list          => p_init_msg_list
7561           -- 3735792, passing p_commit as false to next level api calls
7562           , p_commit                 => FND_API.G_FALSE
7563           , p_debug_mode             => 'Y'
7564           , p_pm_source_code         => p_pm_product_code
7565           , p_project_id             => l_project_id
7566           , p_task_id                => l_task_id
7567           , p_deliverable_id         => l_deliverable_id -- 3661788 changed from p_deliverable to l_deliverable_id
7568           , x_return_status          => l_return_status
7569           , x_msg_count              => l_msg_count
7570           , x_msg_data               => l_msg_data
7571           );
7572 
7573           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR             THEN
7574                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7575           ELSIF l_return_status = FND_API.G_RET_STS_ERROR             THEN
7576                  RAISE FND_API.G_EXC_ERROR;
7577           END IF;
7578       END IF;
7579 
7580 IF FND_API.to_boolean( p_commit )
7581 THEN
7582   COMMIT;
7583 END IF;
7584 --Unset this gloabl variable upon sucessfull completion
7585 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7586 
7587 EXCEPTION
7588 
7589   WHEN FND_API.G_EXC_ERROR
7590   THEN
7591   ROLLBACK TO add_task_pub;
7592   G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7593   p_return_status := FND_API.G_RET_STS_ERROR;
7594 
7595   -- Added for 4537865
7596   p_pa_project_id_out := NULL ;
7597   p_pa_project_number_out := NULL ;
7598   p_task_id := NULL ;
7599  -- End : 4537865
7600 
7601   FND_MSG_PUB.Count_And_Get
7602       (   p_count    =>  p_msg_count  ,
7603           p_data    =>  p_msg_data  );
7604 
7605   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7606   THEN
7607   ROLLBACK TO add_task_pub;
7608   G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7609   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7610 
7611   -- Added for 4537865
7612   p_pa_project_id_out := NULL ;
7613   p_pa_project_number_out := NULL ;
7614   p_task_id := NULL ;
7615  -- End : 4537865
7616 
7617   FND_MSG_PUB.Count_And_Get
7618       (   p_count    =>  p_msg_count  ,
7619           p_data    =>  p_msg_data  );
7620 
7621   WHEN OTHERS THEN
7622   ROLLBACK TO add_task_pub;
7623   G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7624   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7625 
7626   -- Added for 4537865
7627   p_pa_project_id_out := NULL ;
7628   p_pa_project_number_out := NULL ;
7629   p_task_id := NULL ;
7630  -- End : 4537865
7631 
7632   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7633   THEN
7634     FND_MSG_PUB.add_exc_msg
7635         ( p_pkg_name    => G_PKG_NAME
7636         , p_procedure_name  => l_api_name  );
7637 
7638   END IF;
7639 
7640   FND_MSG_PUB.Count_And_Get
7641       (   p_count    =>  p_msg_count  ,
7642           p_data    =>  p_msg_data  );
7643 
7644 END add_task;
7645 
7646 
7647 -----------------------------------------------------------------------------------------
7648 --Name:               delete_task
7649 --Type:               Procedure
7650 --Description:        This procedure delete a task from a project when this is allowed.
7651 --          It either deletes only this task, and moves the children up, OR
7652 --          it deletes this tasks and all his children, depending on
7653 --          the cascaded_delete_flag.
7654 --
7655 --
7656 --Called subprograms: check_delete_task_ok
7657 --
7658 --
7659 --
7660 --History:
7661 --    21-AUG-1996        L. de Werker    Created
7662 --    06-DEC-1996   L. de Werker   Added locking mechanism.
7663 --
7664 --
7665 PROCEDURE delete_task ( p_api_version_number    IN  NUMBER     := 1.0  -- for bug# 3802319
7666                        ,p_commit                IN  VARCHAR2   := FND_API.G_FALSE
7667                        ,p_init_msg_list         IN   VARCHAR2  := FND_API.G_FALSE
7668                        ,p_msg_count             OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7669                        ,p_msg_data              OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
7670                        ,p_return_status         OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
7671                        ,p_pm_product_code       IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7672                        ,p_pm_project_reference  IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7673                        ,p_pa_project_id         IN   NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7674                        ,p_pm_task_reference     IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7675                        ,p_pa_task_id            IN   NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7676                        ,p_cascaded_delete_flag  IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7677                        ,p_project_id            OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7678                        ,p_task_id               OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7679                        ,p_task_version_id       IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7680                        ,p_structure_type        IN   VARCHAR2   := 'FINANCIAL'
7681                        ,p_process_mode          IN   VARCHAR2   := 'ONLINE'
7682 		       ,p_structure_updates_flag IN  VARCHAR2   := 'Y'
7683  )
7684 IS
7685 
7686 l_return_status                        VARCHAR2(1); --bug 2471668
7687 l_project_id                           NUMBER;      --bug 2471668
7688 l_structure_type    VARCHAR2(25) := p_structure_type; -- <Bug#2886014/>
7689 l_update_wbs_flag   VARCHAR2(1) ;
7690 l_structure_version_id NUMBER ;
7691 
7692 -- Bug 3010538
7693 l_process_code      pa_lookups.lookup_code%TYPE;
7694 
7695 l_request_id        pa_proj_elem_ver_structure.conc_request_id%TYPE;
7696 
7697 -- Bug 3106457. Obtain the structure version id give the task version id.
7698 cursor cur_str_ver(c_task_version_id pa_proj_element_versions.element_version_id%TYPE)
7699 is
7700 select parent_structure_version_id
7701   from pa_proj_element_versions
7702  where element_version_id = c_task_version_id;
7703 
7704 -- Begin fix for Bug # 4373055.
7705 
7706 l_str_ver_id            NUMBER:= null;
7707 l_conc_request_id       NUMBER := null;
7708 l_message_name  VARCHAR2(30) := null;
7709 l_message_type  VARCHAR2(30) := null;
7710 
7711 -- End fix for Bug # 4373055.
7712 
7713 BEGIN
7714 
7715           p_return_status := FND_API.G_RET_STS_SUCCESS ; -- 4537865 (Initialize p_return_status to Success)
7716         --bug 2471668.
7717         --We need to call this API here toget the corrct project id. This is also
7718         --called from the private API. But I discussed with Sakthi and he is ok to ca ll this
7719         --twice once here and second time in private API. The idea is to make the adv anced security changes
7720         --only in public APIs.
7721 
7722       PA_PROJECT_PVT.Convert_pm_projref_to_id
7723         (        p_pm_project_reference =>      p_pm_project_reference
7724                  ,  p_pa_project_id     =>      p_pa_project_id
7725                  ,  p_out_project_id    =>      l_project_id
7726                  ,  p_return_status     =>      l_return_status
7727         );
7728 
7729 
7730       IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7731 
7732               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
7733       ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
7734               RAISE  FND_API.G_EXC_ERROR;
7735       END IF;
7736 
7737      PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;  --bug 2471668 ( in the project context )
7738      --end of bug 24771668
7739 
7740      IF p_structure_type = 'WORKPLAN'
7741      THEN
7742          IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N'  OR
7743             PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) = 'N'    -- 2876703   --delete_task
7744          THEN
7745             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7746             THEN
7747                 pa_interface_utils_pub.map_new_amg_msg
7748                     ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
7749                   ,p_msg_attribute    => 'CHANGE'
7750                   ,p_resize_flag      => 'N'
7751                   ,p_msg_context      => 'GENERAL'
7752                   ,p_attribute1       => ''
7753                   ,p_attribute2       => ''
7754                   ,p_attribute3       => ''
7755                   ,p_attribute4       => ''
7756                   ,p_attribute5       => '');
7757             END IF;
7758         RAISE FND_API.G_EXC_ERROR;
7759          END IF;
7760 
7761          IF p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7762             OR p_task_version_id IS NULL
7763          THEN
7764             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7765             THEN
7766                 pa_interface_utils_pub.map_new_amg_msg
7767                     ( p_old_message_code => 'PA_PS_TSK_VER_REQ_WP'
7768                   ,p_msg_attribute    => 'CHANGE'
7769                   ,p_resize_flag      => 'N'
7770                   ,p_msg_context      => 'GENERAL'
7771                   ,p_attribute1       => ''
7772                   ,p_attribute2       => ''
7773                   ,p_attribute3       => ''
7774                   ,p_attribute4       => ''
7775                   ,p_attribute5       => '');
7776             END IF;
7777             RAISE FND_API.G_EXC_ERROR;
7778          END IF;
7779 
7780          -- Bug 3106457. Derive the structure version id from the task version id.
7781          open cur_str_ver(p_task_version_id);
7782          fetch cur_str_ver into l_structure_version_id;
7783          close cur_str_ver;
7784 
7785      ELSIF p_structure_type = 'FINANCIAL' THEN -- Obtain the structure version id. Bug 3106457.
7786           IF p_task_version_id IS NULL
7787              OR p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3174639
7788           THEN
7789               l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
7790           ELSE
7791               open cur_str_ver(p_task_version_id);
7792               fetch cur_str_ver into l_structure_version_id;
7793               close cur_str_ver;
7794           END IF;
7795      END IF; --<< p_structure_type >>
7796 
7797    -- <Bug#2886014>
7798    -- If the following criteria is satisfied,
7799    -- switch flow to WORKPLAN
7800    -- i) Workplan is enabled;
7801    -- ii) Structure is SHARED;
7802    -- iii) Published version exists;
7803    G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
7804    G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
7805    G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
7806 
7807    IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
7808       AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
7809       AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
7810       AND p_structure_type = 'FINANCIAL'
7811    THEN
7812        --Change the flow to WORKPLAN
7813        l_structure_type := 'WORKPLAN';
7814    END IF;
7815    -- </Bug#2886014>
7816 
7817 
7818 -- Check for the status of the process before deleting the task.
7819 -- PA L Changes 3010538
7820 
7821 IF p_structure_type is not NULL THEN
7822 
7823 -- Begin fix for Bug # 4373055.
7824 
7825 /*
7826 
7827      l_process_code :=
7828                        PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id  --Bug 3091798.
7829                                                                          ,p_structure_type => p_structure_type );
7830 
7831       IF nvl(l_process_code,'-1') = 'WUP' THEN
7832            l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id  -- Bug 3091798
7833                                                                          ,p_structure_type => p_structure_type );
7834 
7835            PA_UTILS.ADD_MESSAGE
7836                  (p_app_short_name => 'PA',
7837 --                  p_msg_name       => 'PA_PS_VD_UPDWBS_PRC_INPROC');
7838                   p_msg_name       => 'PA_PS_UPDWBS_PRC_INPROC_AMG',  -- Bug 3091798. Message includes the request id.
7839                   p_token1         => 'REQUESTID',
7840                   p_value1         => l_request_id);
7841 
7842            RAISE FND_API.G_EXC_ERROR;
7843 
7844       ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
7845            l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id  --Bug 3091798
7846                                                                          ,p_structure_type => p_structure_type );
7847 
7848            PA_UTILS.ADD_MESSAGE
7849                  (p_app_short_name => 'PA',
7850 --                  p_msg_name       => 'PA_PS_VD_UPD_WBS_PRC_ERR');
7851                   p_msg_name       => 'PA_PS_UPDWBS_PRC_ERR_AMG',  -- Bug 3091798. Message includes the request id.
7852                   p_token1         => 'REQUESTID',
7853                   p_value1         => l_request_id);
7854 
7855           RAISE FND_API.G_EXC_ERROR;
7856 
7857       END IF;
7858 
7859 */
7860 
7861         PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
7862         p_project_id              => l_project_id
7863         , p_structure_type        => p_structure_type
7864         , p_structure_version_id  => null
7865         , p_context               => 'UPDATE_AMG'
7866         , x_message_name          => l_message_name
7867         , x_message_type          => l_message_type
7868         , x_structure_version_id  => l_str_ver_id
7869         , x_conc_request_id       => l_conc_request_id);
7870 
7871 
7872         if l_message_name is not null then
7873 
7874                      PA_UTILS.ADD_MESSAGE(
7875                      p_app_short_name => 'PA'
7876                      , p_msg_name       => l_message_name
7877                      , p_token1         => 'REQUESTID'
7878                      , p_value1         => l_conc_request_id);
7879 
7880                       RAISE FND_API.G_EXC_ERROR;
7881         end if;
7882 
7883 -- End fix for Bug # 4373055.
7884 
7885 
7886 END IF ;
7887 
7888 /* This is buggy.... Bug 3106457
7889 -- Obtain the structure version id before deleting the task.
7890 -- Bug 3010538
7891 BEGIN
7892      SELECT parent_structure_version_id
7893        INTO l_structure_version_id
7894        FROM pa_proj_element_versions
7895       WHERE element_version_id = p_task_version_id ;
7896 EXCEPTION
7897      WHEN NO_DATA_FOUND THEN
7898      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7899 END ;
7900 */
7901 
7902 pa_project_pvt.delete_task1
7903 ( p_api_version_number => p_api_version_number
7904  ,p_commit             => FND_API.G_FALSE--bug 3766967
7905  ,p_init_msg_list      => p_init_msg_list
7906  ,p_msg_count          => p_msg_count
7907  ,p_msg_data           => p_msg_data
7908  ,p_return_status      => p_return_status
7909  ,p_pm_product_code    => p_pm_product_code
7910  ,p_pm_project_reference => p_pm_project_reference
7911  ,p_pa_project_id        => p_pa_project_id
7912  ,p_pm_task_reference    => p_pm_task_reference
7913  ,p_pa_task_id           => p_pa_task_id
7914  ,p_cascaded_delete_flag => p_cascaded_delete_flag
7915  ,p_project_id           => p_project_id
7916  ,p_task_id              => p_task_id
7917  ,p_task_version_id      => p_task_version_id
7918  ,p_structure_type       => l_structure_type     -- </Bug#2886014>
7919 );
7920 
7921 -- PA L Changes 3010538
7922 
7923    IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
7924        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
7925          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
7926          PA_PROJECT_PUB.G_Published_version_exists = 'N')
7927    THEN
7928 
7929    -- Fetch the structure version id for the task version id.
7930 
7931    -- PA L Changes 3010538
7932 
7933       -- Bug 7390781
7934       IF (nvl(p_structure_updates_flag, 'Y') = 'Y') THEN
7935 
7936         l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id --Bug 3106457 p_pa_project_id
7937                                                                      ,p_structure_version_id => l_structure_version_id ) ;
7938 
7939         IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
7940              IF p_process_mode = 'ONLINE' THEN
7941 
7942              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
7943                                                        ,p_project_id           => l_project_id --Bug 3106457 p_pa_project_id
7944                                                        ,p_structure_version_id => l_structure_version_id
7945                                                        ,x_return_status        => p_return_status
7946                                                        ,x_msg_count            => p_msg_count
7947                                                        ,x_msg_data             => p_msg_data ) ;
7948 
7949              IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7950                   THEN
7951                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7952              ELSIF p_return_status = FND_API.G_RET_STS_ERROR
7953                   THEN
7954                     RAISE FND_API.G_EXC_ERROR;
7955              END IF;
7956              ELSIF p_process_mode = 'CONCURRENT' THEN
7957 
7958              PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
7959                                                        ,p_project_id                => l_project_id -- Bug 3106457 p_pa_project_id
7960                                                        ,p_structure_version_id      => l_structure_version_id
7961                                                        ,x_return_status             => p_return_status
7962                                                        ,x_msg_count                 => p_msg_count
7963                                                        ,x_msg_data                  => p_msg_data ) ;
7964 
7965              IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7966                   THEN
7967                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7968              ELSIF p_return_status = FND_API.G_RET_STS_ERROR
7969                   THEN
7970                     RAISE FND_API.G_EXC_ERROR;
7971              END IF;
7972 
7973 
7974              END IF ;
7975         END IF ;
7976       END IF;
7977    END IF ;
7978 
7979 -- PA L Changes 3010538
7980 
7981 EXCEPTION
7982         WHEN FND_API.G_EXC_ERROR
7983         THEN
7984         p_return_status := FND_API.G_RET_STS_ERROR;
7985     p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7986 
7987         p_project_id := NULL ; -- 4537865
7988         p_task_id := NULL; -- 4537865
7989 
7990         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7991         THEN
7992 
7993         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7994     p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7995 
7996         p_project_id := NULL ; -- 4537865
7997         p_task_id := NULL; -- 4537865
7998 
7999         WHEN OTHERS THEN
8000         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8001     p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
8002 
8003         p_project_id := NULL ; -- 4537865
8004         p_task_id := NULL; -- 4537865
8005 
8006 END delete_task;
8007 
8008 
8009 --------------------------------------------------------------------------------
8010 --Name:               init_project
8011 --Type:               Procedure
8012 --Description:        This procedure can be used to initialize the global PL/SQL
8013 --          tables that are used by a LOAD/EXECUTE/FETCH cycle.
8014 --
8015 --
8016 --Called subprograms:
8017 --
8018 --
8019 --
8020 --History:
8021 --    16-AUG-1996        L. de Werker    Created
8022 --    30-AUG-1996   L. de Werker   Parameterlist removed.
8023 --    10-JAN-1997   L. de Werker   Changed name from INIT_CREATE_PROJECT to INIT_PROJECT
8024 --
8025 PROCEDURE init_project
8026 
8027 IS
8028 
8029 BEGIN
8030 
8031     FND_MSG_PUB.Initialize;
8032 
8033 --  Initialize global table and record types
8034 
8035     G_project_in_rec       := G_project_in_null_rec;
8036     G_key_members_in_tbl.delete;
8037     G_deliverables_in_tbl.delete;
8038     G_deliverable_actions_in_tbl.delete; --bug 343590
8039     G_class_categories_in_tbl.delete;     --bug 343590
8040     G_tasks_in_tbl.delete;
8041 -- anlee org role changes
8042     G_org_roles_in_tbl.delete;
8043 
8044     G_key_members_tbl_count     := 0;
8045     G_deliverables_in_tbl_count := 0; --bug 343590
8046     G_dlvr_actions_in_tbl_count := 0;  --bug 343590
8047     G_class_categories_tbl_count   := 0;
8048     G_tasks_tbl_count       := 0;
8049 -- anlee org role changes
8050     G_org_roles_tbl_count     := 0;
8051 
8052     G_project_out_rec       := G_project_out_null_rec;
8053     G_tasks_out_tbl.delete;
8054     --Project Connect 4.0
8055     G_struc_out_tbl.delete;
8056     --Project Connect 4.0
8057 
8058 -- <EA Extensible Attributes changes>
8059     G_ext_attr_in_tbl.delete;
8060     G_ext_attr_tbl_count     := 0;
8061 -- </EA Extensible Attributes changes>
8062 --Bug#3646465. Clear the Task assignment tables.
8063    PA_TASK_ASSIGNMENTS_PUB.init_task_assignments;
8064 END init_project;
8065 
8066 
8067 --------------------------------------------------------------------------------
8068 --Name:               load_project
8069 --Type:               Procedure
8070 --Description:        This procedure can be used to move the project related
8071 --          parameters from the client side to a record on the server side
8072 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8073 --
8074 --Called subprograms:
8075 --
8076 --
8077 --
8078 --History:
8079 --    19-AUG-1996        L. de Werker    Created
8080 
8081 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
8082 --    28-NOV-1996   L. de Werker   Added 11 parameters for descriptive flexfields
8083 --
8084 --
8085 
8086 PROCEDURE load_project
8087 ( p_api_version_number    IN  NUMBER
8088  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
8089  ,p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
8090  ,p_pa_project_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8091  ,p_pa_project_number    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8092  ,p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8093  ,p_project_name    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8094  ,p_long_name      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8095  ,p_created_from_project_id  IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8096  ,p_carrying_out_organization_id IN  NUMBER    :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8097  ,p_public_sector_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8098  ,p_project_status_code    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8099  ,p_description      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8100  ,p_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8101  ,p_completion_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8102  ,p_distribution_rule    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8103  ,p_customer_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8104  ,p_project_relationship_code  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8105  ,p_actual_start_date           IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8106  ,p_actual_finish_date          IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8107  ,p_early_start_date            IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8108  ,p_early_finish_date           IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8109  ,p_late_start_date             IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8110  ,p_late_finish_date            IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8111  ,p_scheduled_start_date        IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8112  ,p_scheduled_finish_date       IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8113  ,p_attribute_category    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8114  ,p_attribute1      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8115  ,p_attribute2      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8116  ,p_attribute3      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8117  ,p_attribute4      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8118  ,p_attribute5      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8119  ,p_attribute6      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8120  ,p_attribute7      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8121  ,p_attribute8      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8122  ,p_attribute9      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8123  ,p_attribute10      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8124  ,p_output_tax_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8125  ,p_retention_tax_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8126  ,p_project_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8127  ,p_allow_cross_charge_flag   IN VARCHAR2 :=
8128 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8129  ,p_project_rate_date  IN  DATE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8130  ,p_project_rate_type   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8131  ,p_cc_process_labor_flag   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8132  ,p_labor_tp_schedule_id    IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8133  ,p_labor_tp_fixed_date     IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8134  ,p_cc_process_nl_flag   IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8135  ,p_nl_tp_schedule_id    IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8136  ,p_nl_tp_fixed_date     IN DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8137  ,p_cc_tax_task_id       IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8138  ,p_role_list_id       IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8139  ,p_work_type_id       IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8140  ,p_calendar_id        IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8141  ,p_location_id        IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8142  ,p_probability_member_id   IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8143  ,p_project_value            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8144  ,p_expected_approval_date       IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8145  ,p_cost_job_group_id  IN NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8146  ,p_bill_job_group_id  IN NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8147  ,p_emp_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8148  ,p_job_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8149 --Sakthi MCB
8150  ,p_invproc_currency_type   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8151  ,p_revproc_currency_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8152  ,p_project_bil_rate_date_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8153  ,p_project_bil_rate_type        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8154  ,p_project_bil_rate_date        IN DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8155  ,p_project_bil_exchange_rate    IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8156  ,p_projfunc_currency_code      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8157  ,p_projfunc_bil_rate_date_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8158  ,p_projfunc_bil_rate_type       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8159  ,p_projfunc_bil_rate_date       IN DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8160  ,p_projfunc_bil_exchange_rate   IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8161  ,p_funding_rate_date_code  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8162  ,p_funding_rate_type       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8163  ,p_funding_rate_date       IN DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8164  ,p_funding_exchange_rate   IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8165  ,p_baseline_funding_flag        IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8166  ,p_multi_currency_billing_flag  IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8167  ,p_competence_match_wt          IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8168  ,p_availability_match_wt        IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8169  ,p_job_level_match_wt           IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8170  ,p_enable_automated_search      IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8171  ,p_search_min_availability      IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8172  ,p_search_org_hier_id           IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8173  ,p_search_starting_org_id       IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8174  ,p_search_country_id            IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8175  ,p_min_cand_score_reqd_for_nom  IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8176  ,p_max_num_of_sys_nom_cand      IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8177  ,p_non_lab_std_bill_rt_sch_id   IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8178  ,p_search_country_code          IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8179  ,p_inv_by_bill_trans_curr_flag  IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8180  ,p_projfunc_cost_rate_type      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8181  ,p_projfunc_cost_rate_date      IN DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8182 --Sakthi MCB
8183 --Sakthi Structure
8184  ,p_assign_precedes_task            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8185  ,p_split_cost_from_wokplan_flag   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8186  ,p_split_cost_from_bill_flag       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8187 --Sakthi Structure
8188 --Advertisement
8189  ,p_adv_action_set_id              IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8190  ,p_start_adv_action_set_flag      IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8191 --Advertisement
8192 --Project Setup
8193  ,p_priority_code                  IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8194 --Project Setup
8195 --Retention
8196  ,p_retn_billing_inv_format_id     IN NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8197  ,p_retn_accounting_flag           IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8198 --Retention
8199 -- anlee opportunity changes
8200  ,p_opp_value_currency_code        VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8201 -- anlee
8202 -- patchset K changes
8203  ,p_revaluate_funding_flag         VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8204  ,p_include_gains_losses_flag    VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8205 -- msundare
8206  ,p_security_level               IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8207  ,p_labor_disc_reason_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8208  ,p_non_labor_disc_reason_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8209 -- End of changes
8210 --PA L changes -- bug 2872708   --load_project
8211  ,p_asset_allocation_method       VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8212  ,p_capital_event_processing      VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8213  ,p_cint_rate_sch_id              NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8214  ,p_cint_eligible_flag            VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8215  ,p_cint_stop_date                DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8216 --end PA L changes -- bug 2872708
8217 -- car changes
8218  ,p_bill_To_Customer_id          NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug 3728734
8219  ,p_ship_To_Customer_id          NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug 3728734
8220 -- car changes
8221 -- PA L Changes 3010538
8222  ,p_process_mode                 VARCHAR2  :='ONLINE'
8223  -- FP M changes begin (venkat)
8224  ,p_sys_program_flag            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8225  , p_allow_multi_program_rollup	IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Bug # 5072032.
8226  ,p_enable_top_task_cust_flag        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8227  ,p_enable_top_task_inv_mth_flag    IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8228  ,p_projfunc_attr_for_ar_flag       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8229 -- FP M changes end (venkat)
8230  ,p_ar_rec_notify_flag              IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  -- 7508661 : EnC
8231  ,p_auto_release_pwp_inv            IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR  -- 7508661 : EnC
8232   ,p_bill_labor_accrual     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR   /* Added for 12.2Payroll billing ER 11899223 */
8233   --,p_adj_on_std_inv     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR   /* Added for 12.2Payroll billing ER 11899223 */
8234 )
8235 
8236 IS
8237 
8238    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_project';
8239 
8240 
8241 BEGIN
8242 
8243 --  Standard begin of API savepoint
8244 
8245     SAVEPOINT load_project_pub;
8246 
8247 --  Standard call to check for call compatibility.
8248 
8249     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
8250                                p_api_version_number  ,
8251                                l_api_name         ,
8252                                G_PKG_NAME         )
8253     THEN
8254 
8255   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8256 
8257     END IF;
8258 
8259 --  Initialize the message table if requested.
8260 
8261     IF FND_API.TO_BOOLEAN( p_init_msg_list )
8262     THEN
8263 
8264   FND_MSG_PUB.initialize;
8265 
8266     END IF;
8267 
8268 --  Set API return status to success
8269 
8270     p_return_status := FND_API.G_RET_STS_SUCCESS;
8271 
8272 -- assign incoming parameters to the fields of global project record
8273 
8274     G_project_in_rec.pa_project_id      := p_pa_project_id;
8275     G_project_in_rec.pa_project_number      := p_pa_project_number;
8276     --    G_project_in_rec.pm_project_reference     := p_pm_project_reference;
8277     G_project_in_rec.pm_project_reference     := substrb(p_pm_project_reference,1,25); -- modified for bug 4998328
8278     G_project_in_rec.project_name      := p_project_name;
8279     G_project_in_rec.long_name        := p_long_name;
8280     G_project_in_rec.created_from_project_id    := p_created_from_project_id;
8281     G_project_in_rec.carrying_out_organization_id   := p_carrying_out_organization_id;
8282     G_project_in_rec.public_sector_flag      := p_public_sector_flag;
8283     G_project_in_rec.project_status_code    := p_project_status_code;
8284     G_project_in_rec.description      := p_description;
8285     G_project_in_rec.start_date        := p_start_date;
8286     G_project_in_rec.completion_date      := p_completion_date;
8287     G_project_in_rec.distribution_rule      := p_distribution_rule;
8288     G_project_in_rec.customer_id      := p_customer_id;
8289     G_project_in_rec.project_relationship_code     := p_project_relationship_code;
8290     G_project_in_rec.actual_start_date                  := p_actual_start_date;
8291     G_project_in_rec.actual_finish_date                 := p_actual_finish_date;
8292     G_project_in_rec.early_start_date                   := p_early_start_date;
8293     G_project_in_rec.early_finish_date                  := p_early_finish_date;
8294     G_project_in_rec.late_start_date                    := p_late_start_date;
8295     G_project_in_rec.late_finish_date                   := p_late_finish_date;
8296     G_project_in_rec.scheduled_start_date               :=
8297                      p_scheduled_start_date;
8298     G_project_in_rec.scheduled_finish_date              :=
8299                    p_scheduled_finish_date;
8300     G_project_in_rec.attribute_category                 := p_attribute_category;
8301     G_project_in_rec.attribute1              := p_attribute1;
8302     G_project_in_rec.attribute2              := p_attribute2;
8303     G_project_in_rec.attribute3              := p_attribute3;
8304     G_project_in_rec.attribute4              := p_attribute4;
8305     G_project_in_rec.attribute5              := p_attribute5;
8306     G_project_in_rec.attribute6              := p_attribute6;
8307     G_project_in_rec.attribute7              := p_attribute7;
8308     G_project_in_rec.attribute8              := p_attribute8;
8309     G_project_in_rec.attribute9              := p_attribute9;
8310     G_project_in_rec.attribute10      := p_attribute10;
8311 
8312 -- Tax Code Changes starts ...
8313 
8314     G_project_in_rec.output_tax_code   := p_output_tax_code;
8315     G_project_in_rec.output_tax_code   := p_retention_tax_code;
8316 
8317 -- IC and Multi National Currency changes Starts ...
8318 
8319     G_project_in_rec.project_currency_code   := p_project_currency_code;
8320     G_project_in_rec.allow_cross_charge_flag := p_allow_cross_charge_flag;
8321     G_project_in_rec.project_rate_date := p_project_rate_date;
8322     G_project_in_rec.project_rate_type := p_project_rate_type;
8323 
8324     G_project_in_rec.cc_process_labor_flag := p_cc_process_labor_flag;
8325     G_project_in_rec.labor_tp_schedule_id := p_labor_tp_schedule_id;
8326     G_project_in_rec.labor_tp_fixed_date := p_labor_tp_fixed_date;
8327     G_project_in_rec.cc_process_nl_flag := p_cc_process_nl_flag;
8328     G_project_in_rec.nl_tp_schedule_id := p_nl_tp_schedule_id;
8329     G_project_in_rec.nl_tp_fixed_date := p_nl_tp_fixed_date;
8330     G_project_in_rec.cc_tax_task_id := p_cc_tax_task_id;
8331 
8332 -- IC and Multi National Currency changes Ends ...
8333 
8334 -- ORM Code change starts here ...
8335 
8336     G_project_in_rec.role_list_id   := p_role_list_id;
8337     G_project_in_rec.work_type_id   := p_work_type_id;
8338     G_project_in_rec.calendar_id    := p_calendar_id;
8339     G_project_in_rec.probability_member_id    := p_probability_member_id;
8340     G_project_in_rec.project_value            := p_project_value;
8341     G_project_in_rec.expected_approval_date   := p_expected_approval_date;
8342     G_project_in_rec.cost_job_group_id   := p_cost_job_group_id;
8343     G_project_in_rec.bill_job_group_id   := p_bill_job_group_id;
8344 
8345 -- ORM Code change ends here ...
8346 
8347     G_project_in_rec.emp_bill_rate_schedule_id   := p_emp_bill_rate_schedule_id;
8348     G_project_in_rec.job_bill_rate_schedule_id   := p_job_bill_rate_schedule_id;
8349 
8350 --Sakthi MCB
8351     G_project_in_rec.competence_match_wt   := p_competence_match_wt;
8352     G_project_in_rec.availability_match_wt   := p_availability_match_wt;
8353     G_project_in_rec.job_level_match_wt   := p_job_level_match_wt;
8354     G_project_in_rec.enable_automated_search   := p_enable_automated_search;
8355     G_project_in_rec.search_min_availability   := p_search_min_availability;
8356     G_project_in_rec.search_org_hier_id   := p_search_org_hier_id;
8357     G_project_in_rec.search_starting_org_id   := p_search_starting_org_id;
8358     G_project_in_rec.search_country_code   := p_search_country_code;
8359     G_project_in_rec.min_cand_score_reqd_for_nom   := p_min_cand_score_reqd_for_nom;
8360     G_project_in_rec.non_lab_std_bill_rt_sch_id   := p_non_lab_std_bill_rt_sch_id;
8361     G_project_in_rec.invproc_currency_type   := p_invproc_currency_type;
8362     G_project_in_rec.revproc_currency_code   := p_revproc_currency_code;
8363     G_project_in_rec.project_bil_rate_date_code   := p_project_bil_rate_date_code;
8364     G_project_in_rec.project_bil_rate_type   := p_project_bil_rate_type;
8365     G_project_in_rec.project_bil_rate_date   := p_project_bil_rate_date;
8366     G_project_in_rec.project_bil_exchange_rate   := p_project_bil_exchange_rate;
8367     G_project_in_rec.projfunc_currency_code   := p_projfunc_currency_code;
8368     G_project_in_rec.projfunc_bil_rate_date_code   := p_projfunc_bil_rate_date_code;
8369     G_project_in_rec.projfunc_bil_rate_type   := p_projfunc_bil_rate_type;
8370     G_project_in_rec.projfunc_bil_rate_date   := p_projfunc_bil_rate_date;
8371     G_project_in_rec.projfunc_bil_exchange_rate   := p_projfunc_bil_exchange_rate;
8372     G_project_in_rec.funding_rate_date_code   := p_funding_rate_date_code;
8373     G_project_in_rec.funding_rate_type   := p_funding_rate_type;
8374     G_project_in_rec.funding_rate_date   := p_funding_rate_date;
8375     G_project_in_rec.funding_exchange_rate   := p_funding_exchange_rate;
8376     G_project_in_rec.baseline_funding_flag   := p_baseline_funding_flag;
8377     G_project_in_rec.projfunc_cost_rate_type   := p_projfunc_cost_rate_type;
8378     G_project_in_rec.projfunc_cost_rate_date   := p_projfunc_cost_rate_date;
8379     G_project_in_rec.inv_by_bill_trans_curr_flag   := p_inv_by_bill_trans_curr_flag;
8380     G_project_in_rec.multi_currency_billing_flag   := p_multi_currency_billing_flag;
8381 --Sakthi MCB
8382 --Sakthi Structure
8383    G_project_in_rec.assign_precedes_task            := p_assign_precedes_task;
8384    G_project_in_rec.split_cost_from_workplan_flag   := p_split_cost_from_wokplan_flag;
8385    G_project_in_rec.split_cost_from_bill_flag       := p_split_cost_from_bill_flag;
8386 --Sakthi Structure
8387 --Advertisement
8388   G_project_in_rec.adv_action_set_id            := p_adv_action_set_id;
8389   G_project_in_rec.start_adv_action_set_flag    := p_start_adv_action_set_flag;
8390 --Advertisement
8391 --Project Setup
8392   G_project_in_rec.priority_code                := p_priority_code;
8393 --Project Setup
8394 --Retention
8395   G_project_in_rec.retn_billing_inv_format_id   := p_retn_billing_inv_format_id;
8396   G_project_in_rec.retn_accounting_flag         := p_retn_accounting_flag;
8397 --Retention
8398 
8399 -- anlee opportunity changes
8400   G_project_in_rec.opp_value_currency_code      := p_opp_value_currency_code;
8401 
8402 -- anlee
8403 -- patchset K changes
8404   G_project_in_rec.revaluate_funding_flag       := p_revaluate_funding_flag;
8405   G_project_in_rec.include_gains_losses_flag  := p_include_gains_losses_flag;
8406 -- msundare
8407   G_project_in_rec.security_level := p_security_level;
8408   G_project_in_rec.labor_disc_reason_code := p_labor_disc_reason_code;
8409   G_project_in_rec.non_labor_disc_reason_code := p_non_labor_disc_reason_code;
8410 -- End of changes
8411 
8412 --PA L Changes 2872708
8413   G_project_in_rec.asset_allocation_method := p_asset_allocation_method;
8414   G_project_in_rec.capital_event_processing := p_capital_event_processing;
8415   G_project_in_rec.cint_rate_sch_id := p_cint_rate_sch_id;
8416   G_project_in_rec.cint_eligible_flag := p_cint_eligible_flag;
8417   G_project_in_rec.cint_stop_date := p_cint_stop_date;
8418 --PA L Changes 2872708
8419 
8420 --CAR changes: bug 2943284
8421   G_project_in_rec.Bill_to_customer_id :=P_bill_to_customer_id;
8422   G_project_in_rec.Ship_to_customer_id :=P_Ship_To_customer_id;
8423 
8424 -- PA L Changes 3010538
8425 G_project_in_rec.process_mode :=p_process_mode ;
8426 
8427 -- FP_M changes begin (venkat)
8428   G_project_in_rec.sys_program_flag  := p_sys_program_flag;
8429   G_project_in_rec.allow_multi_program_rollup := p_allow_multi_program_rollup; -- Bug # 5072032.
8430 
8431 -- FP_M changes end (venkat)
8432      --Bug 3279981. FP_M Project setup changes
8433      G_project_in_rec.enable_top_task_customer_flag := p_enable_top_task_cust_flag ;
8434      G_project_in_rec.enable_top_task_inv_mth_flag  := p_enable_top_task_inv_mth_flag ;
8435      --Bug 3279981. FP_M Project setup changes
8436      G_project_in_rec.ar_rec_notify_flag    := p_ar_rec_notify_flag ;
8437      G_project_in_rec.auto_release_pwp_inv  := p_auto_release_pwp_inv ;
8438 
8439         G_project_in_rec.bill_labor_accrual  := p_bill_labor_accrual ;  /* Added for 12.2Payroll billing ER 11899223 */
8440         --   G_project_in_rec.adj_on_std_inv  := p_adj_on_std_inv ;  /* Added for 12.2Payroll billing ER 11899223 */
8441 
8442 
8443 EXCEPTION
8444 
8445   WHEN FND_API.G_EXC_ERROR
8446   THEN
8447   ROLLBACK TO load_project_pub;
8448 
8449   p_return_status := FND_API.G_RET_STS_ERROR;
8450 
8451 
8452   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8453   THEN
8454   ROLLBACK TO load_project_pub;
8455 
8456   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8457 
8458 
8459   WHEN OTHERS THEN
8460   ROLLBACK TO load_project_pub;
8461 
8462   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8463 
8464   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8465   THEN
8466     FND_MSG_PUB.add_exc_msg
8467         ( p_pkg_name    => G_PKG_NAME
8468         , p_procedure_name  => l_api_name  );
8469 
8470   END IF;
8471 
8472 
8473 END load_project;
8474 
8475 
8476 --------------------------------------------------------------------------------
8477 --Name:               load_key_member
8478 --Type:               Procedure
8479 --Description:        This procedure can be used to move a key member
8480 --           from the client side to a PL/SQL table on the server side
8481 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8482 --
8483 --Called subprograms:
8484 --
8485 --
8486 --
8487 --History:
8488 --    19-AUG-1996        L. de Werker    Created
8489 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
8490 --
8491 
8492 PROCEDURE load_key_member
8493 ( p_api_version_number    IN  NUMBER
8494  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
8495  ,p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
8496  ,p_person_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8497  ,p_project_role_type    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8498  ,p_project_role_meaning IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added for Bug 6408593
8499  ,p_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8500  ,p_end_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  )
8501 
8502 IS
8503 
8504    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_key_member';
8505    i            NUMBER;
8506 
8507 
8508 BEGIN
8509 
8510 --  Standard begin of API savepoint
8511 
8512     SAVEPOINT load_key_member_pub;
8513 
8514 --  Standard call to check for call compatibility.
8515 
8516     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
8517                                p_api_version_number  ,
8518                                l_api_name         ,
8519                                G_PKG_NAME       )
8520     THEN
8521 
8522   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8523 
8524     END IF;
8525 
8526 --  Initialize the message table if requested.
8527 
8528     IF FND_API.TO_BOOLEAN( p_init_msg_list )
8529     THEN
8530 
8531   FND_MSG_PUB.initialize;
8532 
8533     END IF;
8534 
8535 --  Set API return status to success
8536 
8537     p_return_status := FND_API.G_RET_STS_SUCCESS;
8538 
8539 -- Load the table only if a valid person id is passed
8540 
8541  IF (p_person_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8542       (p_person_id IS NOT NULL) THEN
8543 
8544 -- assign a value to the global counter for this table
8545     G_key_members_tbl_count  := G_key_members_tbl_count + 1;
8546 -- assign incoming parameters to the global table fields
8547     G_key_members_in_tbl(G_key_members_tbl_count).person_id  := p_person_id;
8548     G_key_members_in_tbl(G_key_members_tbl_count).project_role_type
8549              := p_project_role_type;
8550     G_key_members_in_tbl(G_key_members_tbl_count).project_role_meaning
8551              := p_project_role_meaning;   --Added for bug 6408593
8552     G_key_members_in_tbl(G_key_members_tbl_count).start_date  := p_start_date;
8553     G_key_members_in_tbl(G_key_members_tbl_count).end_date    := p_end_date;
8554 
8555 END IF;
8556 
8557 
8558 EXCEPTION
8559 
8560   WHEN FND_API.G_EXC_ERROR
8561   THEN
8562   ROLLBACK TO load_key_member_pub;
8563 
8564   p_return_status := FND_API.G_RET_STS_ERROR;
8565 
8566 
8567   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8568   THEN
8569   ROLLBACK TO load_key_member_pub;
8570 
8571   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8572 
8573 
8574   WHEN OTHERS THEN
8575   ROLLBACK TO load_key_member_pub;
8576 
8577   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8578 
8579   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8580   THEN
8581     FND_MSG_PUB.add_exc_msg
8582         ( p_pkg_name    => G_PKG_NAME
8583         , p_procedure_name  => l_api_name  );
8584 
8585   END IF;
8586 
8587 
8588 END load_key_member;
8589 
8590 
8591 -- anlee org role changes
8592 --------------------------------------------------------------------------------
8593 --Name:               load_org_role
8594 --Type:               Procedure
8595 --Description:        This procedure can be used to move an org role
8596 --           from the client side to a PL/SQL table on the server side
8597 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8598 --
8599 --Called subprograms:
8600 --
8601 --
8602 --
8603 --History:
8604 --    20-MAR-2002        anlee    Created
8605 
8606 PROCEDURE load_org_role
8607 ( p_api_version_number    IN  NUMBER
8608  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
8609  ,p_return_status    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8610  ,p_resource_source_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8611  ,p_project_role_type    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8612  ,p_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8613  ,p_end_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE  )
8614 
8615 IS
8616 
8617    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_org_role';
8618    i            NUMBER;
8619 
8620 
8621 BEGIN
8622 
8623 --  Standard begin of API savepoint
8624 
8625     SAVEPOINT load_org_role_pub;
8626 
8627 --  Standard call to check for call compatibility.
8628 
8629     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
8630                                p_api_version_number  ,
8631                                l_api_name         ,
8632                                G_PKG_NAME       )
8633     THEN
8634 
8635   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8636 
8637     END IF;
8638 
8639 --  Initialize the message table if requested.
8640 
8641     IF FND_API.TO_BOOLEAN( p_init_msg_list )
8642     THEN
8643 
8644   FND_MSG_PUB.initialize;
8645 
8646     END IF;
8647 
8648 --  Set API return status to success
8649 
8650     p_return_status := FND_API.G_RET_STS_SUCCESS;
8651 
8652 -- Load the table only if a valid resource source id is passed
8653 
8654  IF (p_resource_source_id <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8655       (p_resource_source_id IS NOT NULL) THEN
8656 
8657 -- assign a value to the global counter for this table
8658     G_org_roles_tbl_count  := G_org_roles_tbl_count + 1;
8659 -- assign incoming parameters to the global table fields
8660     G_org_roles_in_tbl(G_org_roles_tbl_count).person_id  := p_resource_source_id;
8661     G_org_roles_in_tbl(G_org_roles_tbl_count).project_role_type
8662              := p_project_role_type;
8663     G_org_roles_in_tbl(G_org_roles_tbl_count).start_date  := p_start_date;
8664     G_org_roles_in_tbl(G_org_roles_tbl_count).end_date    := p_end_date;
8665 
8666 END IF;
8667 
8668 
8669 EXCEPTION
8670 
8671   WHEN FND_API.G_EXC_ERROR
8672   THEN
8673   ROLLBACK TO load_org_role_pub;
8674 
8675   p_return_status := FND_API.G_RET_STS_ERROR;
8676 
8677 
8678   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8679   THEN
8680   ROLLBACK TO load_org_role_pub;
8681 
8682   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8683 
8684 
8685   WHEN OTHERS THEN
8686   ROLLBACK TO load_org_role_pub;
8687 
8688   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8689 
8690   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8691   THEN
8692     FND_MSG_PUB.add_exc_msg
8693         ( p_pkg_name    => G_PKG_NAME
8694         , p_procedure_name  => l_api_name  );
8695 
8696   END IF;
8697 
8698 
8699 END load_org_role;
8700 
8701 
8702 
8703 --------------------------------------------------------------------------------
8704 --Name:               load_class_category
8705 --Type:               Procedure
8706 --Description:        This procedure can be used to move a class category
8707 --           from the client side to a PL/SQL table on the server side
8708 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8709 --
8710 --Called subprograms:
8711 --
8712 --
8713 --
8714 --History:
8715 --    19-AUG-1996        L. de Werker    Created
8716 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
8717 --
8718 
8719 PROCEDURE load_class_category
8720 ( p_api_version_number    IN  NUMBER
8721  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
8722  ,p_return_status    OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8723  ,p_class_category    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8724  ,p_class_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8725  ,p_new_class_code  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR   -- Added for Bug 7028230
8726  ,p_code_percentage             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  )
8727 
8728 IS
8729 
8730    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_class_categories';
8731    i            NUMBER;
8732    l_code_percentage           NUMBER;
8733    l_new_class_code          VARCHAR2(30); -- Added for Bug 7028230
8734 
8735 BEGIN
8736 
8737 --  Standard begin of API savepoint
8738 
8739     SAVEPOINT load_class_category_pub;
8740 
8741 --  Standard call to check for call compatibility.
8742 
8743     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
8744                                p_api_version_number  ,
8745                                l_api_name         ,
8746                                G_PKG_NAME         )
8747     THEN
8748 
8749   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8750 
8751     END IF;
8752 
8753 --  Initialize the message table if requested.
8754 
8755     IF FND_API.TO_BOOLEAN( p_init_msg_list )
8756     THEN
8757 
8758   FND_MSG_PUB.initialize;
8759 
8760     END IF;
8761 
8762 --  Set API return status to success
8763 
8764     p_return_status := FND_API.G_RET_STS_SUCCESS;
8765 
8766 -- Load the table only if a valid class category id is passed
8767 
8768 IF (p_class_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
8769    (p_class_category IS NOT NULL )
8770 AND (p_class_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
8771     (p_class_code IS NOT NULL ) THEN
8772 
8773 --  assign a value to the global counter for this table
8774     G_class_categories_tbl_count  := G_class_categories_tbl_count + 1;
8775 
8776     if p_code_percentage = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
8777       l_code_percentage := NULL;
8778     else
8779       l_code_percentage := p_code_percentage;
8780     end if;
8781 
8782     /* Added for Bug 7028230 */
8783     if p_new_class_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
8784       l_code_percentage := NULL;
8785     else
8786       l_new_class_code := p_new_class_code;
8787     end if;
8788 
8789 --  assign incoming parameters to the global table fields
8790     G_class_categories_in_tbl(G_class_categories_tbl_count).class_category
8791     := p_class_category;
8792     G_class_categories_in_tbl(G_class_categories_tbl_count).class_code
8793     := p_class_code;
8794     G_class_categories_in_tbl(G_class_categories_tbl_count).code_percentage
8795     := l_code_percentage;
8796     /* Added for Bug 7028230 */
8797     G_class_categories_in_tbl(G_class_categories_tbl_count).new_class_code := l_new_class_code;
8798 
8799 END IF;
8800 
8801 
8802 EXCEPTION
8803 
8804   WHEN FND_API.G_EXC_ERROR
8805   THEN
8806   ROLLBACK TO load_class_category_pub;
8807 
8808   p_return_status := FND_API.G_RET_STS_ERROR;
8809 
8810 
8811   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8812   THEN
8813   ROLLBACK TO load_class_category_pub;
8814 
8815   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8816 
8817 
8818   WHEN OTHERS THEN
8819   ROLLBACK TO load_class_category_pub;
8820 
8821   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8822 
8823   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8824   THEN
8825     FND_MSG_PUB.add_exc_msg
8826         ( p_pkg_name    => G_PKG_NAME
8827         , p_procedure_name  => l_api_name  );
8828 
8829   END IF;
8830 
8831 END load_class_category;
8832 
8833 --------------------------------------------------------------------------------
8834 --Name:               load_task
8835 --Type:               Procedure
8836 --Description:        This procedure can be used to move a task
8837 --           from the client side to a PL/SQL table on the server side
8838 --                    , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8839 --
8840 --Called subprograms:
8841 --
8842 --
8843 --
8844 --History:
8845 --    19-AUG-1996        L. de Werker    Created
8846 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
8847 --    28-NOV-1996   L. de Werker   Added 11 parameters for descriptive flexfields
8848 --    10-DEC-1996   L. de Werker    Added parameter p_pa_parent_task_id
8849 --           Added parameter p_address_id
8850 --     15-JUL-2003  sramesh       Commented a code for bug 2982057
8851 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
8852 --                                        dependency_type and lag days to tasks and create dependencies.
8853 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
8854 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
8855 --    19-FEB-2004 Rakesh Raghavan      Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK.
8856 --    05-APR-2004 Rakesh Raghavan      Progress Management Changes. Bug # 3420093.
8857 
8858 PROCEDURE load_task
8859 (  p_api_version_number      IN  NUMBER
8860   ,p_init_msg_list      IN  VARCHAR2  := FND_API.G_FALSE
8861   ,p_return_status      OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
8862   ,p_pm_task_reference      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8863   ,p_pa_task_id                         IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8864   ,p_task_name        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8865   ,p_long_task_name      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8866   ,p_pa_task_number           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8867   ,p_task_description      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8868   ,p_task_start_date      IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8869   ,p_task_completion_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8870   ,p_pm_parent_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8871   ,p_pa_parent_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8872   ,p_address_id        IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8873   ,p_carrying_out_organization_id  IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8874   ,p_service_type_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8875   ,p_task_manager_person_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8876   ,p_billable_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8877   ,p_chargeable_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8878   ,p_ready_to_bill_flag      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8879   ,p_ready_to_distribute_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8880   ,p_limit_to_txn_controls_flag    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8881   ,p_labor_bill_rate_org_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8882   ,p_labor_std_bill_rate_schdl    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8883   ,p_labor_schedule_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8884   ,p_labor_schedule_discount    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8885   ,p_nl_bill_rate_org_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8886   ,p_nl_std_bill_rate_schdl    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8887   ,p_nl_schedule_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8888   ,p_nl_schedule_discount    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8889   ,p_labor_cost_multiplier_name    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8890   ,p_cost_ind_rate_sch_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8891   ,p_rev_ind_rate_sch_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8892   ,p_inv_ind_rate_sch_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8893   ,p_cost_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8894   ,p_rev_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8895   ,p_inv_ind_sch_fixed_date    IN  DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8896   ,p_labor_sch_type      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8897   ,p_nl_sch_type      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8898  , p_actual_start_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8899  , p_actual_finish_date                 IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8900  , p_early_start_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8901  , p_early_finish_date                  IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8902  , p_late_start_date                    IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8903  , p_late_finish_date                   IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8904  , p_scheduled_start_date               IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8905  , p_scheduled_finish_date              IN      DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8906   ,p_tasks_dff                    IN VARCHAR2    := 'N' --bug 6153503
8907   ,p_attribute_category      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8908   ,p_attribute1        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8909   ,p_attribute2        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8910   ,p_attribute3        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8911   ,p_attribute4        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8912   ,p_attribute5        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8913   ,p_attribute6        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8914   ,p_attribute7        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8915   ,p_attribute8        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8916   ,p_attribute9        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8917   ,p_attribute10      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8918   --bug 6153503
8919   ,p_attribute11             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8920   ,p_attribute12             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8921   ,p_attribute13             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8922   ,p_attribute14             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8923   ,p_attribute15             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8924   --end bug 6153503
8925   ,p_allow_cross_charge_flag        IN VARCHAR2 :=
8926 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8927   ,p_project_rate_date        IN DATE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8928   ,p_project_rate_type        IN VARCHAR2 :=
8929 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8930  ,p_cc_process_labor_flag   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8931  ,p_labor_tp_schedule_id    IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8932  ,p_labor_tp_fixed_date     IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8933  ,p_cc_process_nl_flag   IN VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8934  ,p_nl_tp_schedule_id    IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8935  ,p_nl_tp_fixed_date     IN DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8936  ,p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8937  ,p_work_type_id    IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8938  ,p_emp_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8939  ,p_job_bill_rate_schedule_id  IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8940 --Sakthi  MCB
8941  ,p_non_lab_std_bill_rt_sch_id  IN NUMBER      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8942  ,p_taskfunc_cost_rate_type     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8943  ,p_taskfunc_cost_rate_date     IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8944 --Sakthi  MCB
8945  ,p_display_sequence    IN NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8946   ,p_wbs_level            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8947 --Project Structure
8948  ,P_OBLIGATION_START_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8949  ,P_OBLIGATION_FINISH_DATE             IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8950  ,P_ESTIMATED_START_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8951  ,P_ESTIMATED_FINISH_DATE              IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8952  ,P_BASELINE_START_DATE                IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8953  ,P_BASELINE_FINISH_DATE               IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8954  ,P_CLOSED_DATE                        IN DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8955  ,P_WQ_UOM_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8956  ,P_WQ_ITEM_CODE                       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8957  ,P_STATUS_CODE                        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8958  ,P_WF_STATUS_CODE                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8959  ,P_PM_SOURCE_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8960  ,P_PRIORITY_CODE                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8961  ,P_MILESTONE_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8962  ,P_CRITICAL_FLAG                      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8963  ,P_INC_PROJ_PROGRESS_FLAG             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8964  ,P_LINK_TASK_FLAG                     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8965  ,P_CALENDAR_ID                        IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8966  ,P_PLANNED_EFFORT                     IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8967  ,P_DURATION                           IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8968  ,P_PLANNED_WORK_QUANTITY              IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8969  ,P_TASK_TYPE                          IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8970 --Project Structure
8971  ,p_labor_disc_reason_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8972  ,p_non_labor_disc_reason_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8973 --PA L changes -- bug 2872708
8974  ,p_retirement_cost_flag          VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8975  ,p_cint_eligible_flag            VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8976  ,p_cint_stop_date                DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8977 --end PA L changes -- bug 2872708
8978 -- FP-M Bug # 3301192
8979  ,p_pred_string                   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8980 -- ,p_pred_delimiter                     VARCHAR2    DEFAULT ','
8981  ,p_pred_delimiter                IN VARCHAR2   :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8982 -- FP M changes begin (venkat)
8983   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8984   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8985   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8986   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8987   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8988   ,p_total_slack            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8989   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8990   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8991   ,p_invoice_method         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8992   ,p_customer_id            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8993   ,p_gen_etc_source_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8994 -- FP M changes end (venkat)
8995 -- FP M changes start (Mapping )
8996   ,p_financial_task_flag        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8997   ,p_mapped_task_id             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8998   ,p_mapped_task_reference      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8999 -- FP M changes end (Mapping )
9000   ,p_deliverable                IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9001   ,p_deliverable_id             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM -- 3661788 Added IN parameter
9002 -- (begin venkat) new params for bug #3450684 --------------------------------------
9003   ,p_ext_act_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
9004   ,p_ext_remain_duration         IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
9005   ,p_ext_sch_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
9006 -- (end venkat) new params for bug #3450684 ----------------------------------------
9007 
9008 -- Progress Management Changes. Bug # 3420093.
9009   ,p_etc_effort                 IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9010   ,p_percent_complete           IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9011    ,p_adj_on_std_inv             IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR   /* Added for 12.2Payroll billing ER 11899223 */
9012 -- Progress Management Changes. Bug # 3420093.
9013 
9014 )
9015 IS
9016 
9017    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_task';
9018    i            NUMBER;
9019 
9020 
9021 BEGIN
9022 
9023 --  Standard begin of API savepoint
9024 
9025     SAVEPOINT load_task_pub;
9026 
9027 --  Standard call to check for call compatibility.
9028 
9029      IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
9030                                p_api_version_number  ,
9031                                l_api_name         ,
9032                                G_PKG_NAME         )
9033     THEN
9034 
9035   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9036 
9037     END IF;
9038 
9039 --  Initialize the message table if requested.
9040 
9041     IF FND_API.TO_BOOLEAN( p_init_msg_list )
9042     THEN
9043 
9044   FND_MSG_PUB.initialize;
9045 
9046     END IF;
9047 
9048 --  Set API return status to success
9049 
9050     p_return_status := FND_API.G_RET_STS_SUCCESS;
9051 
9052 
9053 --  assign a value to the global counter for this table
9054     G_tasks_tbl_count  := G_tasks_tbl_count + 1;
9055 
9056 
9057 --  assign incoming parameters to the global table fields
9058 --!!not needed G_tasks_in_tbl(G_tasks_tbl_count).pm_project_reference  :=  p_pm_project_reference;
9059     G_tasks_in_tbl(G_tasks_tbl_count).pm_task_reference      :=  p_pm_task_reference;
9060 --  Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK.
9061     G_tasks_in_tbl(G_tasks_tbl_count).task_name        :=  substrb(p_task_name,1,240); --Bug 6193314
9062 --bug 2874207
9063 /*  Commented the code for bug 2982057 and handling it in create_project and update_project
9064     IF p_long_task_name IS NULL OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9065     THEN
9066         G_tasks_in_tbl(G_tasks_tbl_count).long_task_name            := p_task_name;
9067     ELSE
9068 */
9069 --As part of bug 2982057, there were changes done in create_proejct, update project apis which
9070 --copies the long task name from this global variable. If user passes long_task_name
9071 --then we need the following line be uncommented.
9072 
9073     G_tasks_in_tbl(G_tasks_tbl_count).long_task_name            := p_long_task_name;
9074 
9075 --    END IF;
9076 --bug 2874207
9077 --  Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK
9078 
9079    G_tasks_in_tbl(G_tasks_tbl_count).pa_task_number      := substrb(p_pa_task_number,1,100); --Bug 6193314
9080 
9081 
9082 
9083     G_tasks_in_tbl(G_tasks_tbl_count).task_description      :=  substrb(p_task_description,1,250); -- Fix for Bug # 4513291.
9084     G_tasks_in_tbl(G_tasks_tbl_count).task_start_date      :=  p_task_start_date;
9085     G_tasks_in_tbl(G_tasks_tbl_count).task_completion_date    :=  p_task_completion_date;
9086     G_tasks_in_tbl(G_tasks_tbl_count).pm_parent_task_reference    :=  p_pm_parent_task_reference;
9087     G_tasks_in_tbl(G_tasks_tbl_count).pa_parent_task_id      :=   p_pa_parent_task_id;
9088     G_tasks_in_tbl(G_tasks_tbl_count).address_id      :=  p_address_id;
9089     G_tasks_in_tbl(G_tasks_tbl_count).carrying_out_organization_id  :=  p_carrying_out_organization_id;
9090     G_tasks_in_tbl(G_tasks_tbl_count).service_type_code      :=  p_service_type_code;
9091     G_tasks_in_tbl(G_tasks_tbl_count).task_manager_person_id    :=  p_task_manager_person_id;
9092     G_tasks_in_tbl(G_tasks_tbl_count).billable_flag      :=  p_billable_flag;
9093     G_tasks_in_tbl(G_tasks_tbl_count).chargeable_flag      :=  p_chargeable_flag;
9094     G_tasks_in_tbl(G_tasks_tbl_count).ready_to_bill_flag    :=  p_ready_to_bill_flag;
9095     G_tasks_in_tbl(G_tasks_tbl_count).ready_to_distribute_flag    :=  p_ready_to_distribute_flag;
9096     G_tasks_in_tbl(G_tasks_tbl_count).limit_to_txn_controls_flag  :=  p_limit_to_txn_controls_flag;
9097     G_tasks_in_tbl(G_tasks_tbl_count).labor_bill_rate_org_id    :=  p_labor_bill_rate_org_id;
9098     G_tasks_in_tbl(G_tasks_tbl_count).labor_std_bill_rate_schdl    :=  p_labor_std_bill_rate_schdl;
9099     G_tasks_in_tbl(G_tasks_tbl_count).labor_schedule_fixed_date    :=  p_labor_schedule_fixed_date;
9100     G_tasks_in_tbl(G_tasks_tbl_count).labor_schedule_discount    :=  p_labor_schedule_discount;
9101     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_bill_rate_org_id  :=  p_nl_bill_rate_org_id;
9102     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_std_bill_rate_schdl  :=  p_nl_std_bill_rate_schdl;
9103     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_schedule_fixed_date  :=  p_nl_schedule_fixed_date;
9104     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_schedule_discount  :=  p_nl_schedule_discount;
9105     G_tasks_in_tbl(G_tasks_tbl_count).labor_cost_multiplier_name  :=  p_labor_cost_multiplier_name;
9106     G_tasks_in_tbl(G_tasks_tbl_count).cost_ind_rate_sch_id    :=  p_cost_ind_rate_sch_id;
9107     G_tasks_in_tbl(G_tasks_tbl_count).rev_ind_rate_sch_id    :=  p_rev_ind_rate_sch_id;
9108     G_tasks_in_tbl(G_tasks_tbl_count).inv_ind_rate_sch_id    :=  p_inv_ind_rate_sch_id;
9109     G_tasks_in_tbl(G_tasks_tbl_count).cost_ind_sch_fixed_date    :=  p_cost_ind_sch_fixed_date;
9110     G_tasks_in_tbl(G_tasks_tbl_count).rev_ind_sch_fixed_date    :=  p_rev_ind_sch_fixed_date;
9111     G_tasks_in_tbl(G_tasks_tbl_count).inv_ind_sch_fixed_date    :=  p_inv_ind_sch_fixed_date;
9112     G_tasks_in_tbl(G_tasks_tbl_count).labor_sch_type      :=  p_labor_sch_type;
9113     G_tasks_in_tbl(G_tasks_tbl_count).non_labor_sch_type    :=  p_nl_sch_type;
9114     G_tasks_in_tbl(G_tasks_tbl_count).pa_task_id      :=      p_pa_task_id;
9115     G_tasks_in_tbl(G_tasks_tbl_count).actual_start_date                 :=
9116     p_actual_start_date;
9117     G_tasks_in_tbl(G_tasks_tbl_count).actual_finish_date                :=
9118     p_actual_finish_date;
9119     G_tasks_in_tbl(G_tasks_tbl_count).early_start_date                  :=
9120     p_early_start_date;
9121     G_tasks_in_tbl(G_tasks_tbl_count).early_finish_date                 :=
9122     p_early_finish_date;
9123     G_tasks_in_tbl(G_tasks_tbl_count).late_start_date                   :=
9124     p_late_start_date;
9125     G_tasks_in_tbl(G_tasks_tbl_count).late_finish_date                  :=
9126     p_late_finish_date;
9127     G_tasks_in_tbl(G_tasks_tbl_count).scheduled_start_date              :=
9128     p_scheduled_start_date;
9129     G_tasks_in_tbl(G_tasks_tbl_count).scheduled_finish_date             :=
9130     p_scheduled_finish_date;
9131     G_tasks_in_tbl(G_tasks_tbl_count).tasks_dff             :=p_tasks_dff; --bug 6153503
9132     G_tasks_in_tbl(G_tasks_tbl_count).attribute_category    :=
9133     p_attribute_category;
9134     G_tasks_in_tbl(G_tasks_tbl_count).attribute1            :=
9135     p_attribute1;
9136     G_tasks_in_tbl(G_tasks_tbl_count).attribute2            :=
9137     p_attribute2;
9138     G_tasks_in_tbl(G_tasks_tbl_count).attribute3            :=
9139     p_attribute3;
9140     G_tasks_in_tbl(G_tasks_tbl_count).attribute4            :=
9141     p_attribute4;
9142     G_tasks_in_tbl(G_tasks_tbl_count).attribute5            :=
9143     p_attribute5;
9144     G_tasks_in_tbl(G_tasks_tbl_count).attribute6            :=
9145     p_attribute6;
9146     G_tasks_in_tbl(G_tasks_tbl_count).attribute7            :=
9147     p_attribute7;
9148     G_tasks_in_tbl(G_tasks_tbl_count).attribute8            :=
9149     p_attribute8;
9150     G_tasks_in_tbl(G_tasks_tbl_count).attribute9            :=
9151     p_attribute9;
9152     G_tasks_in_tbl(G_tasks_tbl_count).attribute10            :=
9153     p_attribute10;
9154     --bug 6153503
9155     G_tasks_in_tbl(G_tasks_tbl_count).attribute11            :=
9156     p_attribute11;
9157     G_tasks_in_tbl(G_tasks_tbl_count).attribute12            :=
9158     p_attribute12;
9159     G_tasks_in_tbl(G_tasks_tbl_count).attribute13            :=
9160     p_attribute13;
9161     G_tasks_in_tbl(G_tasks_tbl_count).attribute14            :=
9162     p_attribute14;
9163     G_tasks_in_tbl(G_tasks_tbl_count).attribute15            :=
9164     p_attribute15;
9165     --end bug 6153503
9166 
9167 -- IC and Multi National Currency changes Starts ...
9168 
9169     G_tasks_in_tbl(G_tasks_tbl_count).allow_cross_charge_flag             :=
9170     p_allow_cross_charge_flag;
9171     G_tasks_in_tbl(G_tasks_tbl_count).project_rate_type  :=
9172     p_project_rate_type;
9173     G_tasks_in_tbl(G_tasks_tbl_count).project_rate_date  :=
9174     p_project_rate_date;
9175     G_tasks_in_tbl(G_tasks_tbl_count).cc_process_labor_flag  :=
9176     p_cc_process_labor_flag;
9177     G_tasks_in_tbl(G_tasks_tbl_count).labor_tp_schedule_id  :=
9178     p_labor_tp_schedule_id;
9179     G_tasks_in_tbl(G_tasks_tbl_count).labor_tp_fixed_date  :=
9180     p_labor_tp_fixed_date;
9181     G_tasks_in_tbl(G_tasks_tbl_count).cc_process_nl_flag  :=
9182     p_cc_process_nl_flag;
9183     G_tasks_in_tbl(G_tasks_tbl_count).nl_tp_schedule_id  :=
9184     p_nl_tp_schedule_id;
9185     G_tasks_in_tbl(G_tasks_tbl_count).nl_tp_fixed_date  :=
9186     p_nl_tp_fixed_date;
9187     G_tasks_in_tbl(G_tasks_tbl_count).receive_project_invoice_flag  :=
9188     p_receive_project_invoice_flag;
9189     G_tasks_in_tbl(G_tasks_tbl_count).work_type_id  :=
9190     p_work_type_id;
9191     G_tasks_in_tbl(G_tasks_tbl_count).emp_bill_rate_schedule_id  :=
9192     p_emp_bill_rate_schedule_id;
9193     G_tasks_in_tbl(G_tasks_tbl_count).job_bill_rate_schedule_id  :=
9194     p_job_bill_rate_schedule_id;
9195 
9196 -- IC and Multi National Currency changes Ends ...
9197 
9198 --Sakthi MCB
9199 
9200     G_tasks_in_tbl(G_tasks_tbl_count).non_lab_std_bill_rt_sch_id  :=
9201     p_non_lab_std_bill_rt_sch_id;
9202     G_tasks_in_tbl(G_tasks_tbl_count).taskfunc_cost_rate_type  :=
9203     p_taskfunc_cost_rate_type;
9204     G_tasks_in_tbl(G_tasks_tbl_count).taskfunc_cost_rate_date  :=
9205     p_taskfunc_cost_rate_date;
9206 
9207 --Sakthi MCB
9208     G_tasks_in_tbl(G_tasks_tbl_count).display_sequence    :=
9209     p_display_sequence;
9210     G_tasks_in_tbl(G_tasks_tbl_count).wbs_level    :=
9211     p_wbs_level;
9212 
9213 --Project Structures
9214     G_tasks_in_tbl(G_tasks_tbl_count).OBLIGATION_START_DATE       := P_OBLIGATION_START_DATE;
9215     G_tasks_in_tbl(G_tasks_tbl_count).OBLIGATION_FINISH_DATE      := P_OBLIGATION_FINISH_DATE;
9216     G_tasks_in_tbl(G_tasks_tbl_count).ESTIMATED_START_DATE        := P_ESTIMATED_START_DATE;
9217     G_tasks_in_tbl(G_tasks_tbl_count).ESTIMATED_FINISH_DATE       := P_ESTIMATED_FINISH_DATE;
9218     G_tasks_in_tbl(G_tasks_tbl_count).BASELINE_START_DATE         := P_BASELINE_START_DATE;
9219     G_tasks_in_tbl(G_tasks_tbl_count).BASELINE_FINISH_DATE        := P_BASELINE_FINISH_DATE;
9220     G_tasks_in_tbl(G_tasks_tbl_count).CLOSED_DATE                 := P_CLOSED_DATE;
9221     G_tasks_in_tbl(G_tasks_tbl_count).WQ_UOM_CODE                 := P_WQ_UOM_CODE;
9222     G_tasks_in_tbl(G_tasks_tbl_count).WQ_ITEM_CODE                := P_WQ_ITEM_CODE;
9223     G_tasks_in_tbl(G_tasks_tbl_count).STATUS_CODE                 := P_STATUS_CODE;
9224     G_tasks_in_tbl(G_tasks_tbl_count).WF_STATUS_CODE              := P_WF_STATUS_CODE;
9225     G_tasks_in_tbl(G_tasks_tbl_count).PM_SOURCE_CODE              := P_PM_SOURCE_CODE;
9226     G_tasks_in_tbl(G_tasks_tbl_count).PRIORITY_CODE               := P_PRIORITY_CODE;
9227     G_tasks_in_tbl(G_tasks_tbl_count).MILESTONE_FLAG              := P_MILESTONE_FLAG;
9228     G_tasks_in_tbl(G_tasks_tbl_count).CRITICAL_FLAG               := P_CRITICAL_FLAG;
9229     G_tasks_in_tbl(G_tasks_tbl_count).INC_PROJ_PROGRESS_FLAG      := P_INC_PROJ_PROGRESS_FLAG;
9230     G_tasks_in_tbl(G_tasks_tbl_count).LINK_TASK_FLAG              := P_LINK_TASK_FLAG;
9231     G_tasks_in_tbl(G_tasks_tbl_count).CALENDAR_ID                 := P_CALENDAR_ID;
9232     G_tasks_in_tbl(G_tasks_tbl_count).PLANNED_EFFORT              := P_PLANNED_EFFORT;
9233     G_tasks_in_tbl(G_tasks_tbl_count).DURATION                    := P_DURATION;
9234     G_tasks_in_tbl(G_tasks_tbl_count).PLANNED_WORK_QUANTITY       := P_PLANNED_WORK_QUANTITY;
9235     G_tasks_in_tbl(G_tasks_tbl_count).TASK_TYPE                   := P_TASK_TYPE;
9236 --Project Structures
9237      G_tasks_in_tbl(G_tasks_tbl_count).labor_disc_reason_code := p_labor_disc_reason_code;
9238      G_tasks_in_tbl(G_tasks_tbl_count).non_labor_disc_reason_code := p_non_labor_disc_reason_code;
9239 
9240 --PA L changes bug 2872708
9241      G_tasks_in_tbl(G_tasks_tbl_count).retirement_cost_flag := p_retirement_cost_flag;
9242      G_tasks_in_tbl(G_tasks_tbl_count).cint_eligible_flag := p_cint_eligible_flag;
9243      G_tasks_in_tbl(G_tasks_tbl_count).cint_stop_date := p_cint_stop_date;
9244 
9245 -- FP-M Bug # 3301192
9246       G_tasks_in_tbl(G_tasks_tbl_count).pred_string    := p_pred_string;
9247       G_tasks_in_tbl(G_tasks_tbl_count).pred_delimiter := p_pred_delimiter;
9248 --Bug 3279981 FP_M customer and invoice method at top task
9249       G_tasks_in_tbl(G_tasks_tbl_count).invoice_method := p_invoice_method;
9250       G_tasks_in_tbl(G_tasks_tbl_count).customer_id    := p_customer_id;
9251 --SMukka
9252       G_tasks_in_tbl(G_tasks_tbl_count).financial_task_flag  :=p_financial_task_flag;
9253       G_tasks_in_tbl(G_tasks_tbl_count).mapped_task_id       :=p_mapped_task_id;
9254       G_tasks_in_tbl(G_tasks_tbl_count).mapped_task_reference:=p_mapped_task_reference;
9255       G_tasks_in_tbl(G_tasks_tbl_count).deliverable          :=p_deliverable;
9256       -- 3661788 Assinging deliverable id
9257       G_tasks_in_tbl(G_tasks_tbl_count).deliverable_id       :=p_deliverable_id;
9258 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
9259       G_tasks_in_tbl(G_tasks_tbl_count).ext_act_duration := p_ext_act_duration;
9260       G_tasks_in_tbl(G_tasks_tbl_count).ext_remain_duration := p_ext_remain_duration;
9261       G_tasks_in_tbl(G_tasks_tbl_count).ext_sch_duration := p_ext_sch_duration;
9262 -- (end venkat) new params for bug #3450684 -------------------------------------------------
9263 
9264 -- set the new params - bug #3654243 ----------------------------------------------
9265       G_tasks_in_tbl(G_tasks_tbl_count).base_percent_comp_deriv_code := p_base_percent_comp_deriv_code;
9266       G_tasks_in_tbl(G_tasks_tbl_count).sch_tool_tsk_type_code       := p_sch_tool_tsk_type_code;
9267       G_tasks_in_tbl(G_tasks_tbl_count).constraint_type_code         := p_constraint_type_code;
9268       G_tasks_in_tbl(G_tasks_tbl_count).constraint_date              := p_constraint_date;
9269       G_tasks_in_tbl(G_tasks_tbl_count).free_slack                   := p_free_slack;
9270       G_tasks_in_tbl(G_tasks_tbl_count).total_slack                  := p_total_slack;
9271       G_tasks_in_tbl(G_tasks_tbl_count).effort_driven_flag           := p_effort_driven_flag;
9272       G_tasks_in_tbl(G_tasks_tbl_count).level_assignments_flag       := p_level_assignments_flag;
9273       G_tasks_in_tbl(G_tasks_tbl_count).invoice_method               := p_invoice_method;
9274       G_tasks_in_tbl(G_tasks_tbl_count).customer_id                  := p_customer_id;
9275       G_tasks_in_tbl(G_tasks_tbl_count).gen_etc_source_code          := p_gen_etc_source_code;
9276        G_tasks_in_tbl(G_tasks_tbl_count).adj_on_std_inv        := p_adj_on_std_inv;
9277 -- set the new params - bug #3654243 -------------------------------------------------
9278 
9279 pa_debug.write('load_tasks','p_etc_effort'||p_etc_effort,3);
9280 pa_debug.write('load_tasks','p_percent_complete'||p_percent_complete,3);
9281 
9282 -- Progress Management Changes. Bug # 3420093.
9283    G_tasks_in_tbl(G_tasks_tbl_count).etc_effort := p_etc_effort;
9284    G_tasks_in_tbl(G_tasks_tbl_count).percent_complete := p_percent_complete;
9285 -- Progress Management Changes. Bug # 3420093.
9286 
9287 EXCEPTION
9288 
9289   WHEN FND_API.G_EXC_ERROR
9290   THEN
9291   ROLLBACK TO load_task_pub;
9292 
9293   p_return_status := FND_API.G_RET_STS_ERROR;
9294 
9295 
9296   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9297   THEN
9298   ROLLBACK TO load_task_pub;
9299 
9300   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9301 
9302 
9303   WHEN OTHERS THEN
9304   ROLLBACK TO load_task_pub;
9305 
9306   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9307 
9308   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9309   THEN
9310     FND_MSG_PUB.add_exc_msg
9311         ( p_pkg_name    => G_PKG_NAME
9312         , p_procedure_name  => l_api_name  );
9313 
9314   END IF;
9315 
9316 END load_task;
9317 
9318 
9319 --------------------------------------------------------------------------------
9320 --Name:               execute_create_project
9321 --Type:               Procedure
9322 --Description:        This procedure can be used to create a project
9323 --                    using global PL/SQL tables.
9324 --
9325 --Called subprograms:
9326 --
9327 --
9328 --
9329 --History:
9330 --      19-AUG-1996        L. de Werker    Created
9331 --  22-DEC-97  jwhite    - Added OUT-parameter p_workflow_started
9332 --             for workflow.
9333 --
9334 
9335 PROCEDURE execute_create_project
9336 ( p_api_version_number      IN  NUMBER
9337  ,p_commit        IN  VARCHAR2  := FND_API.G_FALSE
9338  ,p_init_msg_list                    IN  VARCHAR2  := FND_API.G_FALSE
9339  ,p_msg_count        OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
9340  ,p_msg_data        OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9341  ,p_return_status                    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
9342  ,p_workflow_started                  OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9343  ,p_pm_product_code      IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9344  ,p_op_validate_flag     IN  VARCHAR2  := 'Y'--added by rtarway, 4218977
9345  ,p_pa_project_id      OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9346  ,p_pa_project_number      OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
9347       )
9348 
9349 IS
9350 
9351    l_api_name        CONSTANT  VARCHAR2(30)     := 'execute_create_project';
9352 
9353    i              NUMBER;
9354    l_return_status          VARCHAR2(1);
9355    l_err_stage            VARCHAR2(120);
9356 
9357 BEGIN
9358 
9359 --  Standard begin of API savepoint
9360 
9361     SAVEPOINT execute_create_project_pub;
9362 
9363 --  Standard call to check for call compatibility.
9364 
9365     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
9366                                p_api_version_number  ,
9367                                l_api_name         ,
9368                                G_PKG_NAME         )
9369     THEN
9370 
9371   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9372 
9373     END IF;
9374 
9375 --  Initialize the message table if requested.
9376 
9377     IF FND_API.TO_BOOLEAN( p_init_msg_list )
9378     THEN
9379 
9380   FND_MSG_PUB.initialize;
9381 
9382     END IF;
9383 
9384 
9385 --  Set API return status to success
9386 
9387     p_return_status := FND_API.G_RET_STS_SUCCESS;
9388 
9389     create_project( p_api_version_number                 => p_api_version_number
9390            ,p_commit      => FND_API.G_FALSE
9391            ,p_init_msg_list    => FND_API.G_FALSE
9392        ,p_msg_count      => p_msg_count
9393        ,p_msg_data      => p_msg_data
9394        ,p_return_status                  => l_return_status
9395        ,p_workflow_started    => p_workflow_started
9396        ,p_pm_product_code    => p_pm_product_code
9397        ,p_op_validate_flag   => p_op_validate_flag--added by rtarway 4218977
9398        ,p_project_in                  => g_project_in_rec
9399        ,p_project_out                  => g_project_out_rec
9400        ,p_key_members    => g_key_members_in_tbl
9401        ,p_class_categories    => g_class_categories_in_tbl
9402        ,p_tasks_in      => g_tasks_in_tbl
9403        ,p_tasks_out      => g_tasks_out_tbl
9404 -- anlee org role changes
9405                    ,p_org_roles                 => g_org_roles_in_tbl
9406                    ,p_structure_in              => G_structure_in_rec
9407       --bug 3096203
9408        ,p_ext_attr_tbl_in      => G_ext_attr_in_tbl
9409       --bug 3096203
9410 --FP M : deliverables
9411       ,p_deliverables_in          => G_deliverables_in_tbl
9412 --      ,p_deliverables_out         => G_deliverables_out_tbl
9413       ,p_deliverable_actions_in   => G_deliverable_actions_in_tbl
9414 --      ,p_deliverable_actions_out  => G_deliverable_actions_out_tbl
9415 --FP M : deliverables
9416     );
9417 
9418 
9419      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
9420       THEN
9421 
9422       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9423 
9424       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
9425       THEN
9426 
9427       RAISE FND_API.G_EXC_ERROR;
9428       END IF;
9429 
9430   --assign appropriate values to outgoing parameters
9431         IF g_project_out_rec.pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
9432      p_pa_project_id   := NULL;
9433         ELSE
9434      p_pa_project_id   := g_project_out_rec.pa_project_id;
9435         END IF;
9436         IF g_project_out_rec.pa_project_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9437      p_pa_project_number   := NULL;
9438         ELSE
9439      p_pa_project_number   := g_project_out_rec.pa_project_number;
9440         END IF;
9441 
9442   IF FND_API.to_boolean( p_commit )
9443   THEN
9444     COMMIT;
9445   END IF;
9446 
9447 
9448 EXCEPTION
9449 
9450   WHEN FND_API.G_EXC_ERROR
9451   THEN
9452   ROLLBACK TO execute_create_project_pub;
9453 
9454   p_return_status := FND_API.G_RET_STS_ERROR;
9455 
9456   -- 4537865
9457   p_workflow_started    := NULL ;
9458   p_pa_project_id    := NULL ;
9459   p_pa_project_number  := NULL ;
9460   -- 4537865
9461 
9462   FND_MSG_PUB.Count_And_Get
9463       (   p_count    =>  p_msg_count  ,
9464           p_data    =>  p_msg_data  );
9465 
9466   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9467   THEN
9468   ROLLBACK TO execute_create_project_pub;
9469 
9470   -- 4537865
9471   p_workflow_started    := NULL ;
9472   p_pa_project_id    := NULL ;
9473   p_pa_project_number  := NULL ;
9474   -- 4537865
9475 
9476   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9477 
9478   FND_MSG_PUB.Count_And_Get
9479       (   p_count    =>  p_msg_count  ,
9480           p_data    =>  p_msg_data  );
9481 
9482   WHEN OTHERS THEN
9483   ROLLBACK TO execute_create_project_pub;
9484 
9485   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9486 
9487   -- 4537865
9488   p_workflow_started    := NULL ;
9489   p_pa_project_id    := NULL ;
9490   p_pa_project_number  := NULL ;
9491   -- 4537865
9492 
9493   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9494   THEN
9495     FND_MSG_PUB.add_exc_msg
9496         ( p_pkg_name    => G_PKG_NAME
9497         , p_procedure_name  => l_api_name  );
9498 
9499   END IF;
9500 
9501   FND_MSG_PUB.Count_And_Get
9502       (   p_count    =>  p_msg_count  ,
9503           p_data    =>  p_msg_data  );
9504 
9505 END execute_create_project;
9506 
9507 --------------------------------------------------------------------------------
9508 --Name:               fetch_task
9509 --Type:               Procedure
9510 --Description:        This procedure can be used to get the task related output data
9511 --           to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
9512 --
9513 --Called subprograms:
9514 --
9515 --
9516 --
9517 --History:
9518 --    19-AUG-1996        L. de Werker    Created
9519 --    25-OCT-1996   L. de Werker   p_msg_count and p_msg_data removed from parameterlist
9520 --
9521 
9522 PROCEDURE fetch_task
9523 ( p_api_version_number    IN  NUMBER
9524  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
9525  ,p_return_status    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
9526  ,p_task_index      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9527  ,p_pa_task_id      OUT  NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
9528  ,p_pm_task_reference    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
9529  ,p_task_return_status    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
9530     )
9531 IS
9532 
9533    l_api_name      CONSTANT  VARCHAR2(30)     := 'fetch_task';
9534    l_index          NUMBER;
9535    i            NUMBER;
9536 
9537 BEGIN
9538 
9539 --  Standard begin of API savepoint
9540 
9541     SAVEPOINT fetch_task_pub;
9542 
9543 --  Standard call to check for call compatibility.
9544 
9545     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
9546                                p_api_version_number  ,
9547                                l_api_name         ,
9548                                G_PKG_NAME         )
9549     THEN
9550 
9551   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9552 
9553     END IF;
9554 
9555 --  Initialize the message table if requested.
9556 
9557     IF FND_API.TO_BOOLEAN( p_init_msg_list )
9558     THEN
9559 
9560   FND_MSG_PUB.initialize;
9561 
9562     END IF;
9563 
9564 --  Set API return status to success
9565 
9566     p_return_status := FND_API.G_RET_STS_SUCCESS;
9567 
9568 --  Check Task index value, when they don't provide an index we will error out
9569     IF p_task_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9570     OR p_task_index IS NULL
9571     THEN
9572   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9573   THEN
9574          pa_interface_utils_pub.map_new_amg_msg
9575            ( p_old_message_code => 'PA_INDEX_NOT_PROVIDED'
9576             ,p_msg_attribute    => 'CHANGE'
9577             ,p_resize_flag      => 'N'
9578             ,p_msg_context      => 'GENERAL'
9579             ,p_attribute1       => ''
9580             ,p_attribute2       => ''
9581             ,p_attribute3       => ''
9582             ,p_attribute4       => ''
9583             ,p_attribute5       => '');
9584   END IF;
9585 
9586   p_return_status := FND_API.G_RET_STS_ERROR;
9587   RAISE FND_API.G_EXC_ERROR;
9588     ELSE
9589   l_index := p_task_index;
9590     END IF;
9591   If G_Tasks_out_tbl.exists(l_index) THEN
9592 --  assign global table fields to the outgoing parameter
9593 --  we don't want to return the big number G_PA_MISS_NUM
9594 
9595     IF G_tasks_out_tbl(l_index).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9596   THEN
9597     p_pa_task_id := NULL;
9598   ELSE
9599 
9600        p_pa_task_id         := G_tasks_out_tbl(l_index).pa_task_id;
9601 
9602   END IF;
9603 
9604      p_pm_task_reference    := G_tasks_out_tbl(l_index).pm_task_reference;
9605      p_task_return_status    := G_tasks_out_tbl(l_index).return_status;
9606 
9607 END IF;
9608 
9609 EXCEPTION
9610 
9611   WHEN FND_API.G_EXC_ERROR
9612   THEN
9613   ROLLBACK TO fetch_task_pub;
9614 
9615   p_return_status := FND_API.G_RET_STS_ERROR;
9616 
9617   -- 4537865
9618   p_pa_task_id  := NULL ;
9619   p_pm_task_reference := NULL ;
9620   p_task_return_status := FND_API.G_RET_STS_ERROR ;
9621   -- 4537865
9622 
9623 
9624   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9625   THEN
9626   ROLLBACK TO fetch_task_pub;
9627 
9628   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9629 
9630   -- 4537865
9631   p_pa_task_id  := NULL ;
9632   p_pm_task_reference := NULL ;
9633   p_task_return_status := FND_API.G_RET_STS_ERROR ;
9634   -- 4537865
9635 
9636 
9637   WHEN OTHERS THEN
9638   ROLLBACK TO fetch_task_pub;
9639 
9640   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9641 
9642   -- 4537865
9643   p_pa_task_id  := NULL ;
9644   p_pm_task_reference := NULL ;
9645   p_task_return_status := FND_API.G_RET_STS_ERROR ;
9646   -- 4537865
9647 
9648   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9649   THEN
9650     FND_MSG_PUB.add_exc_msg
9651         ( p_pkg_name    => G_PKG_NAME
9652         , p_procedure_name  => l_api_name  );
9653 
9654   END IF;
9655 
9656 
9657 END fetch_task;
9658 
9659 --------------------------------------------------------------------------------
9660 --Name:               clear_project
9661 --Type:               Procedure
9662 --Description:        This procedure can be used to clear the global PL/SQL
9663 --          tables that are used by a LOAD/EXECUTE/FETCH cycle.
9664 --
9665 --
9666 --Called subprograms: init_project
9667 --
9668 --
9669 --
9670 --History:
9671 --    20-AUG-1996        L. de Werker    Created
9672 --    30-AUG-1996   L. de Werker   Parameterlist removed.
9673 --    10-JAN-1997   L. de Werker   Changed name from CLEAR_CREATE_PROJECT to CLEAR_PROJECT
9674 --
9675 PROCEDURE clear_project
9676 
9677 IS
9678 
9679    l_api_name      CONSTANT  VARCHAR2(30)     := 'clear_project';
9680 
9681 BEGIN
9682 
9683 
9684    init_project;
9685 
9686 
9687 END clear_project;
9688 
9689 --------------------------------------------------------------------------------
9690 --Name:               Update_Project
9691 --Type:                 Procedure
9692 --Description:   This procedure can be used to update a project
9693 --
9694 --
9695 --Called subprograms: PA_PROJECT_STUS_UTILS.Check_Wf_Enabled
9696 --
9697 --
9698 --
9699 --History:
9700 --    31-JUL-1996       R. Krishnamurthy      - Created
9701 --    03-DEC-1996  L. de Werker  - Debugged errors + added checking of NULL values.
9702 --    05-DEC-1996  L. de Werker  - Added WHO columns update in dynamic SQL string
9703 --    06-DEC-1996  L. de Werker  - Added locking mechanism
9704 --    30-SEP-97    jwhite    - Workflow had been added in XX-AUG-97. I made
9705 --            fixes as per unit testing.
9706 --    22-DEC-97    jwhite    - Added OUT-parameter p_workflow_started
9707 --             for workflow.
9708 --    03-MAY-2000       Rakesh Raghavan - Fixed Bug # 1289156.
9709 -- 12-JUL-2000 Mohnish
9710 --             added code for ROLE BASED SECURITY:
9711 --             added the call to PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY
9712 --  19-JUL-2000 Mohnish incorporated PA_PROJECT_PARTIES_PUB API changes
9713 --  23-MAY-2002 MAansari Added call to create_default_task_structure
9714 --  15-MAR-2003 SRAMESH   - Added an OR condition for the bug 2846478
9715 --                          in the before the update_project_party call in
9716 --                          the procedure CHECK_FOR_ONE_MANAGER_PVT.
9717 --  26-MAR-2003 SRAMESH  - Added calls for the the procedures Check_Schedule_type and Validate_Schedule_Values.
9718 --                         the procedure update_project
9719 --                       - Also added the update statements for the columns
9720 --                       LABOR_SCHEDULE_FIXED_DATE , LABOR_SCHEDULE_DISCOUNT, NON_LABOR_STD_BILL_RATE_SCHDL
9721 --                       NON_LABOR_BILL_RATE_ORG_ID, NON_LABOR_SCHEDULE_FIXED_DATE, NON_LABOR_SCHEDULE_DISCOUNT
9722 --                       REV_IND_RATE_SCH_ID, INV_IND_RATE_SCH_ID, REV_IND_SCH_FIXED_DATE, INV_IND_SCH_FIXED_DATE
9723 -- Default value for p_structure_type is financial
9724 --Logic used to derive the struture version id
9725 -- If p_structure_type is financial then
9726 --      If Split case then
9727 --           Get the version id of the published structure
9728 --           If no published structure Then
9729 --                Get the version id of the Working Structure
9730 --      IF Shared case and Versioning disabled then
9731 --           Get the version id of the published structure
9732 --           If no published structure Then
9733 --                Get the version id of the Working Structure
9734 --      IF Shared case and versioning enabled but no published version exists then
9735 --           Get the version id of the Working Structure
9736 --      IF Shared case and versioning enabled and published version exists then
9737 --           populate the l_structure_type as 'WORKPLAN'
9738 --Else IF p_structure_type is WORKPLAN then
9739 --     IF Shared case Then
9740 --           Throw an error PA_PS_WP_NOT_SEP_FN
9741 --     IF Split Case and Versioning disabled then
9742 --           Get the version id of the published structure
9743 --     IF Split Case and Versioning Enabled then
9744 --           IF No working versions then
9745 --                create a working version
9746 --           Else
9747 --                get the version id of the last updated working version
9748 --     IF Unable to get version Id
9749 --        Throw an error PA_PS_STRUC_VER_REQ
9750 --End if
9751 --      19-may-2003     sramesh         -Fixed the bug 2910972.Defaulting of the key member start
9752 --                                       date
9753 --      10-jun-2003     sramesh        -Fixed the bug 2891513.Added the conditions before the update statement
9754 --                                      of revaluate_funding_flag and include_gains_losses_flag in the
9755 --                                      update_project API.
9756 --    15-jul-2003      sramesh        -- Added the code for bug 2982057.
9757 --                                       Changed the logic to populate the long_task_name
9758 --                                       with task_name when the long_task_name is null.
9759 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
9760 --                                        dependency_type and lag days to tasks and create dependencies.
9761 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
9762 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
9763 --          17-Mar-2006 sunkalya        - Bug#5210872.Modified the update logic for
9764 --                                        the parameter 'probability_member_id'.Change tagged with Bug#5210872.
9765 --          18-May-2006  vkadimes       - Bug 5188246 Added validation for output_tax_code and retention_tax_code .
9766 --                                        Changes are tagged with Bug No.
9767 PROCEDURE Update_Project
9768 ( p_api_version_number    IN  NUMBER
9769  ,p_commit      IN  VARCHAR2  := FND_API.G_FALSE
9770  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
9771  ,p_msg_count      OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
9772  ,p_msg_data      OUT  NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
9773  ,p_return_status    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
9774  ,p_workflow_started    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
9775  ,p_pm_product_code    IN  VARCHAR2
9776  ,p_op_validate_flag   IN varchar2 := 'Y'
9777  ,p_project_in      IN  pa_project_pub.project_in_rec_type
9778  ,p_project_out      OUT NOCOPY  pa_project_pub.project_out_rec_type /*added the nocopy check for the 2674619*/
9779  /* Added for tracking bug - add customers */
9780  ,p_customers_in     IN  pa_project_pub.customer_tbl_type := G_customers_in_tbl
9781 /* Added Default Value for p_key_members and p_class_categories*/
9782  ,p_key_members      IN  pa_project_pub.project_role_tbl_type := G_key_members_in_tbl
9783  ,p_class_categories    IN  pa_project_pub.class_category_tbl_type := G_class_categories_in_tbl
9784  ,p_tasks_in      IN  pa_project_pub.task_in_tbl_type
9785  ,p_tasks_out      OUT NOCOPY  pa_project_pub.task_out_tbl_type /*added the nocopy check for the bug 2674619*/
9786 -- anlee org role changes
9787  ,p_org_roles                   IN      pa_project_pub.project_role_tbl_type := G_org_roles_in_tbl
9788 --project structures
9789  ,p_structure_in                IN      structure_in_rec_type := G_structure_in_rec
9790  ,p_ext_attr_tbl_in             IN   PA_EXT_ATTR_TABLE_TYPE := G_ext_attr_in_tbl
9791 -- ,p_structure_out               OUT     structure_out_rec_type
9792  ,p_pass_entire_structure       IN      VARCHAR2 := 'N'  -- Added for bug 3548473  : Bug 3627124
9793  -- If user passes entire strucutre in p_structure_in rec type, p_pass_entire_structure should be set to 'Y'.
9794 --project structures
9795 --FP M : deliverables
9796  ,p_deliverables_in           IN  deliverable_in_tbl_type := G_deliverables_in_tbl -- 3435905 passing default
9797 -- ,p_deliverables_out          OUT NOCOPY  deliverable_out_tbl_type -- 3435905 removed out parameter
9798  ,p_deliverable_actions_in    IN  action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
9799 -- ,p_deliverable_actions_out   OUT NOCOPY  action_out_tbl_type -- 3435905 removed out parameter
9800 --FP M : deliverables
9801  ,p_update_mode               IN VARCHAR2 := 'PA_UPD_WBS_ATTR' --rtarway, for DHI ER, BUG 4413568  --bug 4534919
9802 ) IS
9803 
9804  -- Added for bug 5222506
9805  CURSOR l_cur_calendar_id(l_calendar_id NUMBER) IS
9806  SELECT 'Y' FROM  jtf_calendars_vl  WHERE
9807  trunc(nvl(end_date_active, sysdate)) >= trunc(sysdate)
9808  AND calendar_id= l_calendar_id;
9809 
9810 -- Added for Bug 5225146
9811   CURSOR l_cur_project_rate_type (l_project_rate_type VARCHAR )IS
9812   SELECT 'Y' FROM  pa_conversion_types_v
9813   WHERE  conversion_type <> 'User' AND  user_conversion_type = l_project_rate_type;
9814 
9815   -- Added for Bug 5188246
9816    CURSOR l_cur_retention_tax_code (l_retention_tax_code VARCHAR ) IS
9817    SELECT 'Y' FROM pa_output_tax_code_setup_v
9818    WHERE tax_code = l_retention_tax_code;
9819    --needed to get default data of a project using it's ID
9820    CURSOR  l_project_csr
9821     (l_pa_project_id NUMBER)
9822    IS
9823    SELECT   *
9824    FROM    pa_projects p
9825    WHERE  p.project_id = l_pa_project_id;
9826 
9827 /**************************************
9828 **  The following cursor l_get_org_csr is not used anywhere in this
9829     package. So commenting this cursor for changes made for
9830     Non-mergable to Mergable View .      ***
9831 ***************************************
9832 
9833    CURSOR l_get_org_csr (l_org_id NUMBER )
9834 
9835    IS
9836    SELECT organization_id
9837    FROM   pa_organizations_project_v
9838    WHERE organization_id = l_org_id
9839    AND   active_flag = 'N';
9840 
9841 ****************************************/
9842 
9843    CURSOR l_get_dist_rule_csr (l_dist_rule VARCHAR2, l_project_type VARCHAR2)
9844    IS
9845    SELECT 'x'
9846    FROM   pa_project_type_distributions d
9847    WHERE d.project_type = l_project_type
9848    AND   d.distribution_rule = l_dist_rule;
9849 
9850    CURSOR l_min_task_start_date_csr (l_project_id NUMBER) IS
9851    SELECT MIN(start_date)
9852    FROM pa_tasks
9853    WHERE project_id = l_project_id
9854    AND   start_date IS NOT NULL;
9855 
9856    CURSOR l_max_task_end_date_csr (l_project_id NUMBER) IS
9857    SELECT MAX(completion_date)
9858    FROM pa_tasks
9859    WHERE  project_id = l_project_id
9860    AND    completion_date IS NOT NULL;
9861 
9862    --needed to get the project_type_class_code and service_type_code associated
9863    --with the project_type
9864 
9865    CURSOR       l_project_type_csr
9866                 (p_pa_project_id NUMBER)
9867    IS
9868    SELECT       pt.project_type_class_code
9869    ,            pt.service_type_code
9870    ,            pt.revaluate_funding_flag  /*Bug 2891513 : selecting the columns revaluate_funding_flag and include_gains_losses_flag*/
9871    ,            pt.include_gains_losses_flag
9872    FROM         pa_project_types pt
9873    ,            pa_projects p
9874    WHERE        p.project_type = pt.project_type
9875    AND          p.project_id = p_pa_project_id;
9876 
9877    --needed to check whether given project number is unique
9878    CURSOR   l_project_number_unique_csr( p_project_number VARCHAR2)
9879    IS
9880    SELECT   'x'
9881    FROM     pa_projects_all
9882    WHERE    segment1 = p_project_number;
9883 
9884    --needed to check whether given project name is unique
9885    CURSOR   l_project_name_unique_csr( p_project_name VARCHAR2)
9886    IS
9887    SELECT   'x'
9888    FROM     pa_projects_all
9889    WHERE    name = p_project_name;
9890 
9891    --needed to check whether given long name is unique
9892    CURSOR   l_long_name_unique_csr( p_long_name VARCHAR2)
9893    IS
9894    SELECT   'x'
9895    FROM     pa_projects_all
9896    WHERE    long_name = p_long_name;
9897 
9898    /* Modidified the cursor l_key_member_csr to add start_date_active as logical
9899      primary key */
9900    CURSOR l_key_member_csr (l_project_id NUMBER,l_person_id NUMBER,
9901                             l_role_type  VARCHAR2 ,
9902                 l_start_date_active DATE)
9903    IS
9904    SELECT  pa_project_players.*  --,rowid   /*rowid id commented for bug 1939295 */
9905    FROM    pa_project_players
9906    WHERE   project_id        = l_project_id
9907    AND     person_id         = l_person_id
9908    AND     project_role_type = l_role_type
9909    AND     start_date_active = l_start_date_active;
9910 
9911 /*Customer Account Relationships -CAR changes*/
9912 
9913   Cursor Cur_Customer(x_project_id NUMBER,l_customer_id in number) IS
9914   Select pa_project_customers.*
9915   From pa_project_customers
9916   where project_id=x_project_id
9917   and customer_id=l_customer_id;
9918 
9919 /*CAR changes end*/
9920 
9921 
9922    CURSOR l_class_categories_csr (l_project_id NUMBER,
9923                                   l_class_category VARCHAR2 )
9924    IS
9925    SELECT class_code
9926    FROM pa_project_classes
9927    WHERE project_id     = l_project_id
9928    AND   class_category = l_class_category;
9929 
9930    CURSOR l_get_task_csr (l_project_id NUMBER,l_pm_task_reference VARCHAR2) IS
9931    SELECT task_id FROM
9932    pa_tasks
9933    WHERE project_id  = l_project_id
9934    AND pm_task_reference = l_pm_task_reference;
9935 
9936    --needed to get the data of the project manager that might conflict with this new project manager
9937 
9938    CURSOR l_project_man_current_csr (p_project_id NUMBER, p_start_date DATE )
9939    IS
9940    SELECT person_id,
9941           start_date_active,
9942           end_date_active
9943    FROM   pa_project_players
9944    WHERE  project_id = p_project_id
9945    AND    project_role_type = 'PROJECT MANAGER'
9946    AND    nvl(end_date_active,p_start_date) >= p_start_date;
9947 
9948 
9949 /* bug 4541103
9950    CURSOR l_lock_rows_csr( p_project_id NUMBER)
9951    IS
9952    SELECT 'x'
9953    FROM    pa_projects p
9954    WHERE  p.project_id = p_project_id
9955    FOR UPDATE OF p.project_id NOWAIT;
9956 */
9957 
9958 -- anlee org role changes
9959 
9960 -- 3693229 start
9961 -- for peformance fix changed the below cursor definition
9962 -- earlier select was quering on view
9963 -- now, select is directly retrieving the data from the tables
9964 -- for more detail please refer bug
9965 /*
9966 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9967                             l_role_type  VARCHAR2 )
9968    IS
9969    SELECT  *
9970    FROM    pa_project_parties_v
9971    WHERE   project_id                 = l_project_id
9972    AND     resource_source_id         = l_resource_source_id
9973    AND     project_role_type          = l_role_type
9974    AND     party_type                 = 'ORGANIZATION';
9975 */
9976 
9977 -- 4656866 commented below cursor
9978 
9979 /*
9980 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9981                             l_role_type  VARCHAR2 )
9982    IS
9983    SELECT
9984      ppp.project_party_id PROJECT_PARTY_ID,
9985      ppp.object_id OBJECT_ID,
9986      ppp.object_type OBJECT_TYPE,
9987      ppp.project_id PROJECT_ID,
9988      ppp.resource_id RESOURCE_ID,
9989      ppp.resource_type_id RESOURCE_TYPE_ID,
9990      ppp.resource_source_id RESOURCE_SOURCE_ID,
9991      hzo.party_name RESOURCE_SOURCE_NAME,
9992      ppp.project_role_id PROJECT_ROLE_ID,
9993      pprt.project_role_type PROJECT_ROLE_TYPE,
9994      pprt.meaning PROJECT_ROLE_MEANING,
9995      pprt.role_party_class ROLE_PARTY_CLASS,
9996      ppp.start_date_active START_DATE_ACTIVE,
9997      ppp.end_date_active END_DATE_ACTIVE,
9998      ppp.scheduled_flag SCHEDULED_FLAG,
9999      ppp.record_version_number RECORD_VERSION_NUMBER,
10000      ppa.start_date PROJECT_START_DATE,
10001      ppa.completion_date PROJECT_END_DATE,
10002      ppp.grant_id GRANT_ID,
10003      -999 ASSIGNMENT_ID,
10004      -999 ASSIGN_RECORD_VERSION_NUMBER,
10005      'N' PENDING_APPROVAL,
10006      -999 ORGANIZATION_ID,
10007      NULL ORGANIZATION_NAME,
10008      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,
10009      hzo.email_address EMAIL_ADDRESS,
10010      NULL JOB_TITLE,
10011      'ORGANIZATION' PARTY_TYPE,
10012      PA_PROJECT_PARTIES_UTILS.ACTIVE_PARTY(PPP.START_DATE_ACTIVE,PPP.END_DATE_ACTIVE) ACTIVE,
10013      NULL USER_NAME,
10014      -999 USER_ID,
10015      ppp.resource_source_id RESOURCE_PARTY_ID
10016     FROM pa_project_parties ppp,
10017          pa_projects_all ppa,
10018          pa_project_role_types_vl pprt,
10019          hz_parties hzo,
10020          hz_contact_points hzcp
10021     WHERE ppp.resource_type_id = 112
10022      AND ppp.project_id = ppa.project_id
10023      AND ppp.project_role_id = pprt.project_role_id
10024      AND ppp.resource_source_id = hzo.party_id
10025      AND hzo.party_type = 'ORGANIZATION'
10026      AND hzcp.owner_table_name (+)= 'HZ_PARTIES'
10027      AND hzcp.owner_table_id (+)= hzo.party_id
10028      AND hzcp.contact_point_type (+)= 'PHONE'
10029      AND hzcp.phone_line_type (+)= 'GEN'
10030      AND hzcp.primary_flag (+)= 'Y'
10031      and PPA.project_id                = l_project_id
10032      AND PPP.resource_source_id        = l_resource_source_id
10033      AND PPRT.project_role_type        = l_role_type;
10034 */
10035 
10036 -- Added same cursor with changed select query , removed hz_contact_points references
10037 -- using hz_parties columns for primary phone number details
10038 -- ( like primary_phone_area_code , primary_phone_number , primary_phone_extension )
10039 -- for more refer bug description
10040 
10041 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
10042                             l_role_type  VARCHAR2 )
10043    IS
10044    SELECT
10045      ppp.project_party_id PROJECT_PARTY_ID,
10046      ppp.object_id OBJECT_ID,
10047      ppp.object_type OBJECT_TYPE,
10048      ppp.project_id PROJECT_ID,
10049      ppp.resource_id RESOURCE_ID,
10050      ppp.resource_type_id RESOURCE_TYPE_ID,
10051      ppp.resource_source_id RESOURCE_SOURCE_ID,
10052      hzo.party_name RESOURCE_SOURCE_NAME,
10053      ppp.project_role_id PROJECT_ROLE_ID,
10054      pprt.project_role_type PROJECT_ROLE_TYPE,
10055      pprt.meaning PROJECT_ROLE_MEANING,
10056      pprt.role_party_class ROLE_PARTY_CLASS,
10057      ppp.start_date_active START_DATE_ACTIVE,
10058      ppp.end_date_active END_DATE_ACTIVE,
10059      ppp.scheduled_flag SCHEDULED_FLAG,
10060      ppp.record_version_number RECORD_VERSION_NUMBER,
10061      ppa.start_date PROJECT_START_DATE,
10062      ppa.completion_date PROJECT_END_DATE,
10063      ppp.grant_id GRANT_ID,
10064      -999 ASSIGNMENT_ID,
10065      -999 ASSIGN_RECORD_VERSION_NUMBER,
10066      'N' PENDING_APPROVAL,
10067      -999 ORGANIZATION_ID,
10068      NULL ORGANIZATION_NAME,
10069      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) )
10070         || decode(hzo.primary_phone_extension,NULL,NULL,'+' || hzo.primary_phone_extension) PHONE_NUMBER,
10071      hzo.email_address EMAIL_ADDRESS,
10072      NULL JOB_TITLE,
10073      'ORGANIZATION' PARTY_TYPE,
10074      PA_PROJECT_PARTIES_UTILS.ACTIVE_PARTY(PPP.START_DATE_ACTIVE,PPP.END_DATE_ACTIVE) ACTIVE,
10075      NULL USER_NAME,
10076      -999 USER_ID,
10077      ppp.resource_source_id RESOURCE_PARTY_ID
10078     FROM pa_project_parties ppp,
10079          pa_projects_all ppa,
10080          pa_project_role_types_vl pprt,
10081          hz_parties hzo
10082     WHERE ppp.resource_type_id = 112
10083      AND ppp.project_id = ppa.project_id
10084      AND ppp.project_role_id = pprt.project_role_id
10085      AND ppp.resource_source_id = hzo.party_id
10086      AND hzo.party_type = 'ORGANIZATION'
10087      and PPA.project_id                = l_project_id
10088      AND PPP.resource_source_id        = l_resource_source_id
10089      AND PPRT.project_role_type        = l_role_type;
10090 
10091 -- 4656866 end
10092 
10093 -- 3693229 end
10094 
10095 --Cursor to get the current published version when structure type and project id is known
10096 CURSOR cur_struc_ver_fin(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
10097    IS
10098     SELECT c.element_version_id
10099        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
10100             ,pa_proj_elem_ver_structure d
10101       WHERE c.project_id = c_project_id
10102         AND a.structure_type_id = b.structure_type_id
10103         AND b.proj_element_id = c.proj_element_id
10104         AND a.structure_type = c_structure_type
10105      AND d.project_id = c.project_id
10106         AND d.element_version_id = c.element_version_id
10107         AND d.status_code = 'STRUCTURE_PUBLISHED'
10108         AND d.latest_eff_published_flag = 'Y';
10109 
10110 --Cursor to get the working version when structure type and project id is known
10111 CURSOR cur_struc_ver_wp(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
10112    IS
10113      SELECT c.element_version_id
10114        FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
10115             ,pa_proj_elem_ver_structure d
10116       WHERE c.project_id = c_project_id
10117         AND a.structure_type_id = b.structure_type_id
10118         AND b.proj_element_id = c.proj_element_id
10119         AND a.structure_type = c_structure_type
10120         AND d.project_id = c.project_id
10121         AND d.element_version_id = c.element_version_id
10122         AND d.status_code = 'STRUCTURE_WORKING';
10123 
10124 -- Cursor to get the Project's System Status Code Bug 3611598
10125  CURSOR c_project_sys_status_code IS
10126        SELECT project_system_status_code
10127        FROM PA_PROJECT_STATUSES sta,PA_PROJECTS_ALL pa
10128        WHERE pa.project_id = p_project_in.pa_project_id
10129          AND sta.project_status_code = pa.project_status_code;
10130 
10131             Cursor c_adj_on_std_inv (p_adj_on_std_inv IN VARCHAR2)
10132   Is
10133   Select 'X'
10134   from pa_lookups
10135   where lookup_type='PA_ADJ_ON_STD_INV'
10136   and lookup_code = p_adj_on_std_inv;
10137  proj_adj_on_std_inv varchar2(1) :='N';
10138  t_adj_on_std_inv varchar2(2);
10139 
10140 TYPE deferred_tasks_rec IS RECORD
10141 (task_index  NUMBER);
10142 
10143 TYPE deferred_tasks_tbl_typ IS TABLE OF deferred_tasks_rec
10144         INDEX BY BINARY_INTEGER;
10145 
10146 l_dummy_calendar_id   VARCHAR2(1) := 'N' ; -- Added for bug 5222506
10147 l_dummy_project_rate_type VARCHAR2(1) :='N'; -- Added For bug 5225146
10148 l_dummy_cur_retention_tax_code VARCHAR2(1) :='N';
10149 l_dummy_cur_output_tax_code VARCHAR2(1) :='N'; -- Added For Bug 5188246.
10150 l_status_code         PA_PROJECT_STATUSES.project_system_status_code%TYPE; -- Bug 3611598
10151 l_deferred_tasks_index_tbl  deferred_tasks_tbl_typ;
10152 
10153 l_project_rec          pa_projects%ROWTYPE;
10154 l_project_in_rec        pa_project_pub.project_in_rec_type;
10155 l_temp_org_id                       NUMBER;
10156 l_temp                              VARCHAR2(1);
10157 
10158 l_api_name              CONSTANT    VARCHAR2(30):=  'update_project';
10159 j            NUMBER;
10160 i            NUMBER;
10161 
10162 l_tasks_out          pa_project_pub.task_out_tbl_type;
10163 l_return_status                     VARCHAR2(1);
10164 
10165 l_err_code                          NUMBER := 0;
10166 l_err_stage                         VARCHAR2(2000);
10167 l_err_stack                         VARCHAR2(2000);
10168 l_dummy            VARCHAR2(1);
10169 
10170 l_project_id          NUMBER ;
10171 l_task_id          NUMBER ;
10172 l_cursor                            INTEGER;
10173 --l_statement                         VARCHAR2(2000);  --bug 2955326
10174 l_statement                         VARCHAR2(30000); --bug 2955326
10175 l_rows                              INTEGER;
10176 l_project_start_date                DATE;
10177 l_project_completion_date           DATE;
10178 l_max_task_date                     DATE;
10179 l_min_task_date          DATE;
10180 
10181 l_deferred_new_tasks_tbl            pa_project_pub.task_in_tbl_type;
10182 l_deferred_tasks_count              NUMBER := 0;
10183 l_added_task_tbl                    pa_project_pub.task_in_tbl_type;
10184 l_task_id_tbl                       pa_project_pub.task_out_tbl_type;
10185 l_count                             NUMBER;
10186 l_task_rec                          pa_project_pub.task_in_rec_type;
10187 l_project_type_class_code           pa_project_types.project_type_class_code%type;
10188 l_service_type_code                 pa_project_types.service_type_code%type;
10189 
10190 l_key_members_tbl              pa_project_pub.project_role_tbl_type;
10191 l_key_members_in_rec        pa_project_pub.project_role_rec_type;
10192 l_key_members_current_rec           l_key_member_csr%ROWTYPE;
10193 l_key_members_rec                   l_key_member_csr%ROWTYPE;
10194 l_project_man_current_rec      l_project_man_current_csr%ROWTYPE;
10195 
10196 /*Customer account relationships */
10197 
10198 Cur_Customer_rec                   Cur_Customer%ROWTYPE;
10199 l_bill_to_customer_id              Number;
10200 l_ship_to_customer_id              Number;
10201 l_bill_to_address_id                         NUMBER := NULL; --Initialized to NULL for Bug 3911782
10202 l_ship_to_address_id                         NUMBER := NULL; --Initialized to NULL for Bug 3911782
10203 l_bill_to_contact_id                         NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : BUg 4153629
10204 l_ship_to_contact_id                         NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : BUg 4153629
10205 /* Variables sadded for tracking bug */
10206 l_project_relationship_code           PA_PROJECT_CUSTOMERS.PROJECT_RELATIONSHIP_CODE%TYPE;
10207 l_customer_bill_split                 PA_PROJECT_CUSTOMERS.CUSTOMER_BILL_SPLIT%TYPE;
10208 l_customer_id        NUMBER;
10209  l_msg_index_out              NUMBER;
10210  tot_contribution     NUMBER;
10211  /* Variables sadded for tracking bug */
10212 /* Variables added for tracking bug 4153629*/
10213  l_bill_another_project_flag VARCHAR2(1);
10214  l_receiver_task_id NUMBER;
10215 /* Variables added for tracking bug 4153629*/
10216 /*CAR changes ends*/
10217 
10218 
10219 -- anlee org role changes
10220 l_org_roles_tbl                      pa_project_pub.project_role_tbl_type;
10221 l_org_roles_in_rec        pa_project_pub.project_role_rec_type;
10222 l_org_roles_current_rec             l_org_role_csr%ROWTYPE;
10223 l_org_roles_rec                     l_org_role_csr%ROWTYPE;
10224 
10225 l_class_categories_tbl              pa_project_pub.class_category_tbl_type ;
10226 l_temp_start_date                   DATE;
10227 l_temp_end_date                     DATE;
10228 l_update_yes_flag                   VARCHAR2(1) := 'N';
10229 l_out_pa_task_id                    NUMBER;
10230 l_out_pm_task_reference             VARCHAR2(30);
10231 l_update_start_date_flag      VARCHAR2(1);
10232 l_update_end_date_flag        VARCHAR2(1);
10233 l_class_code          VARCHAR2(30);
10234 l_msg_count          NUMBER ;
10235 l_msg_data          VARCHAR2(2000);
10236 l_function_allowed        VARCHAR2(1);
10237 l_resp_id          NUMBER := 0;
10238 l_user_id                NUMBER := 0;
10239 l_module_name                       VARCHAR2(80) := 'PA_PM_UPDATE_PROJECT';
10240 l_proceed_with_update_flag          VARCHAR2(1);
10241 l_array_index                       NUMBER := 0;
10242 l_temp_i          NUMBER := 0;
10243 l_orig_index          NUMBER := 0;
10244 l_text                  VARCHAR2(500);
10245 l_verify_ok_flag                    VARCHAR2(1);
10246 l_wf_enabled_flag                   VARCHAR2(1);
10247 l_err_msg_count                     NUMBER := 0;
10248 l_warnings_only_flag                VARCHAR2(1);
10249 l_project_status_changed            VARCHAR2(1) := 'N';
10250 l_status_changeable                 VARCHAR2(1);             --Bug 14100051
10251 l_closing_project                   VARCHAR2(1) := 'N';
10252 l_reopening_project                 VARCHAR2(1) := 'N';
10253 l_wf_status_code                    VARCHAR2(30) := 'IN_ROUTE';
10254 l_proj_num_numeric                  NUMBER;
10255 l_wf_type                           VARCHAR2(250);
10256 l_wf_item_type                           VARCHAR2(250);
10257 l_wf_process                             VARCHAR2(250);
10258 l_assignment_id                    NUMBER;
10259 l_task_id_out              NUMBER   := 0;
10260 l_amg_task_number       VARCHAR2(50);
10261 l_org_func_security     VARCHAR2(1);  /* Bug#1968394  */
10262 
10263 -- FP-M Bug # 3301192
10264 l_d_task_id NUMBER;
10265 l_d_task_ver_id NUMBER;
10266 l_d_struct_ver_id NUMBER;
10267 l_d_loop_count NUMBER;
10268 l_task_in_rec        task_in_rec_type;
10269 
10270 /*Variables added for bug 2802984*/
10271 
10272 l_out_labor_sch_type     VARCHAR2(1);
10273 l_out_nl_labor_sch_type   VARCHAR2(1);
10274 l_rev_rate_sch_type        VARCHAR2(1);
10275 l_inv_rate_sch_type       VARCHAR2(1);
10276 l_std_bill_rate_schedule   VARCHAR2(40);
10277 
10278 /*Bug# 2891513    : Added the local variables*/
10279 l_revaluate_funding  VARCHAR2(1);
10280 l_include_gains_and_losses VARCHAR2(1);
10281 /*Variables added for bug 2802984 ends*/
10282 
10283 --added  by rtarway FP.M Devlopment
10284 l_patask_record_version_number NUMBER;
10285 --added  by rtarway FP.M Devlopment
10286 --needed to get the field values associated to a AMG message
10287 
10288    CURSOR   l_amg_project_csr
10289       (p_pa_project_id pa_projects.project_id%type)
10290    IS
10291    SELECT   segment1
10292    FROM     pa_projects p
10293    WHERE p.project_id = p_pa_project_id;
10294 
10295    l_amg_segment1       VARCHAR2(25);
10296 
10297 p_multiple_task_msg        VARCHAR2(1) := 'T';
10298 x_return_status    VARCHAR2(255);
10299 x_msg_count        NUMBER;
10300 x_msg_data         VARCHAR2(2000);
10301 V_COMPLETION_DATE  DATE;
10302 v_null_char        VARCHAR2(1):=to_char(NULL);
10303 
10304 --Project Structures
10305 v_first_index      NUMBER;
10306 v_last_index       NUMBER;
10307 v_ref_task_id      NUMBER;
10308 v_parent_task_id      NUMBER;
10309 v_task_id             NUMBER;
10310 l_structure_version_id   NUMBER;
10311 l_structure_id   NUMBER;
10312 l_task_version_id        NUMBER;
10313 --Project Structures
10314 
10315 -- anlee
10316 -- Added for intermedia search
10317 l_ctx_proj_name VARCHAR2(30);
10318 l_ctx_proj_number VARCHAR2(25);
10319 l_ctx_long_name VARCHAR2(240);
10320 l_ctx_desc VARCHAR2(250);
10321 l_ctx_update_flag VARCHAR2(1);
10322 -- End of changes
10323 
10324 --bug 2738747
10325 l_structure_type          VARCHAR2(25);
10326 --bug 2738747
10327 
10328 --<Bug#2881768/>
10329 struct_ver_updatable    VARCHAR(1);
10330 
10331  --For Bug 2931183
10332 l_update_structure_version_id          pa_proj_element_versions.element_version_id%TYPE;
10333 l_debug_mode               varchar2(1);
10334 
10335  -- <EA>
10336  l_failed_row_id_list VARCHAR2(32767);
10337  l_errorcode      VARCHAR2(150);
10338  -- </EA>
10339 
10340 --bug 2955326
10341 l_b_segment1_flag            VARCHAR2(1) := 'N';
10342 l_b_proj_name_flag           VARCHAR2(1) := 'N';
10343 l_b_long_name_flag           VARCHAR2(1) := 'N';
10344 l_b_pm_proj_ref_flag         VARCHAR2(1) := 'N';
10345 l_b_co_org_id_flag           VARCHAR2(1) := 'N';
10346 l_b_pub_sec_flag             VARCHAR2(1) := 'N';
10347 l_b_dist_rule_flag           VARCHAR2(1) := 'N';
10348 l_b_desc_flag                VARCHAR2(1) := 'N';
10349 l_b_start_date_flag          VARCHAR2(1) := 'N';
10350 l_b_comp_date_flag           VARCHAR2(1) := 'N';
10351 l_b_early_sd_flag            VARCHAR2(1) := 'N';
10352 l_b_early_fd_flag            VARCHAR2(1) := 'N';
10353 l_b_late_sd_flag             VARCHAR2(1) := 'N';
10354 l_b_late_fd_flag             VARCHAR2(1) := 'N';
10355 l_b_sch_sd_flag              VARCHAR2(1) := 'N';
10356 l_b_sch_fd_flag              VARCHAR2(1) := 'N';
10357 l_b_attr_cat_flag            VARCHAR2(1) := 'N';
10358 l_b_attr1_flag               VARCHAR2(1) := 'N';
10359 l_b_attr2_flag               VARCHAR2(1) := 'N';
10360 l_b_attr3_flag               VARCHAR2(1) := 'N';
10361 l_b_attr4_flag               VARCHAR2(1) := 'N';
10362 l_b_attr5_flag               VARCHAR2(1) := 'N';
10363 l_b_attr6_flag               VARCHAR2(1) := 'N';
10364 l_b_attr7_flag               VARCHAR2(1) := 'N';
10365 l_b_attr8_flag               VARCHAR2(1) := 'N';
10366 l_b_attr9_flag               VARCHAR2(1) := 'N';
10367 l_b_attr10_flag              VARCHAR2(1) := 'N';
10368 l_b_output_tx_code_flag      VARCHAR2(1) := 'N';
10369 l_b_ret_tx_code_flag         VARCHAR2(1) := 'N';
10370 l_b_proj_cur_code_flag       VARCHAR2(1) := 'N';
10371 l_b_allow_x_chg_flag         VARCHAR2(1) := 'N';
10372 l_b_proj_rt_date_flag        VARCHAR2(1) := 'N';
10373 l_b_proj_rt_tp_flag          VARCHAR2(1) := 'N';
10374 l_cc_proc_lb_flag            VARCHAR2(1) := 'N';
10375 l_b_lb_tp_sch_id_flag        VARCHAR2(1) := 'N';
10376 l_b_lb_tp_fixed_dt_flag      VARCHAR2(1) := 'N';
10377 l_b_cc_proc_nl_flag          VARCHAR2(1) := 'N';
10378 l_b_nl_tp_sch_id_flag        VARCHAR2(1) := 'N';
10379 l_b_nl_tp_fx_dt_flag         VARCHAR2(1) := 'N';
10380 l_b_role_list_id_flag        VARCHAR2(1) := 'N';
10381 l_b_work_type_id_flag        VARCHAR2(1) := 'N';
10382 l_b_cal_id_flag              VARCHAR2(1) := 'N';
10383 l_b_loc_id_flag              VARCHAR2(1) := 'N';
10384 l_b_prob_memb_id_flag        VARCHAR2(1) := 'N';
10385 l_b_proj_value_flag          VARCHAR2(1) := 'N';
10386 l_b_exp_apprv_dt_flag        VARCHAR2(1) := 'N';
10387 l_b_cst_jb_gp_id_flag        VARCHAR2(1) := 'N';
10388 l_b_bill_jb_gp_id_flag       VARCHAR2(1) := 'N';
10389 l_b_emp_bill_rt_sch_id_flag  VARCHAR2(1) := 'N';
10390 l_b_jb_bill_rt_sch_id_flag   VARCHAR2(1) := 'N';
10391 l_b_comp_mtch_wt_flag        VARCHAR2(1) := 'N';
10392 l_b_avail_mtch_wt_flag       VARCHAR2(1) := 'N';
10393 l_b_jb_lvl_mt_wt_flag        VARCHAR2(1) := 'N';
10394 l_b_search_min_avail_flag    VARCHAR2(1) := 'N';
10395 l_b_srch_org_hier_id_flag    VARCHAR2(1) := 'N';
10396 l_b_srch_st_org_id_flag      VARCHAR2(1) := 'N';
10397 l_b_min_can_sc_req_for_nom   VARCHAR2(1) := 'N';
10398 /* l_b_nn_lb_std_bl_rt_sch_id_f VARCHAR2(1) := 'N'; Commented for bug #4630836 */
10399 l_b_proj_bil_xch_rt_flag     VARCHAR2(1) := 'N';
10400 l_b_pjfnc_bil_xch_rt_flag    VARCHAR2(1) := 'N';
10401 l_b_fnding_xch_rt_flag       VARCHAR2(1) := 'N';
10402 l_b_enable_auto_srch_flag    VARCHAR2(1) := 'N';
10403 l_b_srch_cntry_code_flag     VARCHAR2(1) := 'N';
10404 l_b_invproc_crncy_tp_flag    VARCHAR2(1) := 'N';
10405 l_b_revproc_crncy_cd_flag    VARCHAR2(1) := 'N';
10406 l_b_prj_bil_rt_dt_code_flag  VARCHAR2(1) := 'N';
10407 l_b_proj_bil_rt_tp_flag      VARCHAR2(1) := 'N';
10408 l_b_prjfnc_crncy_code_flag   VARCHAR2(1) := 'N';
10409 l_b_prjfnc_bil_rt_dt_cd_f    VARCHAR2(1) := 'N';
10410 l_b_prjfnc_bil_rt_tp_flag    VARCHAR2(1) := 'N';
10411 l_b_fndng_rt_dt_cd_flag      VARCHAR2(1) := 'N';
10412 l_b_fnding_rt_type_flag      VARCHAR2(1) := 'N';
10413 l_b_bsln_fnding_flag         VARCHAR2(1) := 'N';
10414 l_b_prjfnc_cst_rt_tp_flag    VARCHAR2(1) := 'N';
10415 l_b_inv_bill_txn_cur_flag    VARCHAR2(1) := 'N';
10416 l_b_multi_crncy_bil_flag     VARCHAR2(1) := 'N';
10417 l_b_prj_bil_rt_dt_flag       VARCHAR2(1) := 'N';
10418 l_b_prjfnc_bil_rt_dt_flag    VARCHAR2(1) := 'N';
10419 l_b_fnding_rt_dt_flag        VARCHAR2(1) := 'N';
10420 l_b_prjfnc_cst_rt_dt_flag    VARCHAR2(1) := 'N';
10421 l_b_asgn_prec_tsk_flag       VARCHAR2(1) := 'N';
10422 l_b_splt_cst_fm_wp_flag      VARCHAR2(1) := 'N';
10423 l_b_splt_cst_fm_bill_flag    VARCHAR2(1) := 'N';
10424 l_b_adv_act_set_id_flag      VARCHAR2(1) := 'N';
10425 l_b_st_adv_act_set_flag      VARCHAR2(1) := 'N';
10426 l_b_pri_code_flag            VARCHAR2(1) := 'N';
10427 l_b_retn_bil_inv_fmt_id_flg  VARCHAR2(1) := 'N';
10428 l_b_retn_acnt_flag           VARCHAR2(1) := 'N';
10429 l_b_reval_fndng_flag         VARCHAR2(1) := 'N';
10430 l_b_sec_lvl_flag             VARCHAR2(1) := 'N';
10431 l_b_lbr_disc_rsn_code_flg    VARCHAR2(1) := 'N';
10432 l_b_nn_lbr_disc_rsn_cd_flg   VARCHAR2(1) := 'N';
10433 l_b_inc_gn_los_flag          VARCHAR2(1) := 'N';
10434 
10435 l_b_lb_sch_tp_fg             VARCHAR2(1) := 'N';
10436 l_b_nn_lb_sch_tp_fg          VARCHAR2(1) := 'N';
10437 l_b_emp_bill_rt_sch_id_fg2   VARCHAR2(1) := 'N';
10438 l_b_jb_bill_rt_sch_id_fg2    VARCHAR2(1) := 'N';
10439 l_b_lb_sch_fx_dt_fg          VARCHAR2(1) := 'N';
10440 l_b_lb_sch_dsct_fg           VARCHAR2(1) := 'N';
10441 l_b_lb_disc_rn_cd_fg2        VARCHAR2(1) := 'N';
10442 l_b_rv_ind_rt_sch_id_fg      VARCHAR2(1) := 'N';
10443 l_b_inv_ind_rt_sch_id_fg     VARCHAR2(1) := 'N';
10444 l_b_ind_sch_fx_dt_fg         VARCHAR2(1) := 'N';
10445 l_b_inv_ind_sch_fx_dt_fg     VARCHAR2(1) := 'N';
10446 l_b_nn_lb_bill_rt_org_id_fg  VARCHAR2(1) := 'N';
10447 l_b_n_lb_st_bl_rt_sc_id_fg2  VARCHAR2(1) := 'N';
10448 l_b_nn_lb_sch_fx_dt_fg       VARCHAR2(1) := 'N';
10449 l_b_nn_lb_sch_dst_fg         VARCHAR2(1) := 'N';
10450 l_b_n_lb_disc_rsn_cd_fg2     VARCHAR2(1) := 'N';
10451 l_b_as_alloc_mth_fg          VARCHAR2(1) := 'N';
10452 l_b_cp_evt_proc_fg           VARCHAR2(1) := 'N';
10453 l_b_cint_rt_sch_id_fg        VARCHAR2(1) := 'N';
10454 l_b_cint_elg_fg              VARCHAR2(1) := 'N';
10455 l_b_cint_stp_dt_fg           VARCHAR2(1) := 'N';
10456 --end bug 2955326
10457 l_update_task_structure      VARCHAR2(1) := 'N'; -- Added for Bug 3548473 : 3627124
10458 l_ref_task_id       NUMBER := null; -- aditi added for Bug 3801314 : 3627124
10459 l_update_wbs_flag            VARCHAR2(1) := 'N'; -- Added for Bug #3931805
10460 -- Bug 3075609. In update project context it is possible
10461 -- that we can create a new structure version when already some
10462 -- working versions exist. This is true in split workplan context.
10463 -- This info will be passed to the process_task_structure_bulk api
10464 -- through this variable.
10465 l_create_task_versions_only  VARCHAR2(1) := 'N';
10466 -- Bug 6248841
10467 l_b_cc_tax_task_id          VARCHAR2(1) := 'N';
10468 l_cc_tax_task_numb          PA_TASKS.TASK_NUMBER%TYPE;
10469 
10470   /* Bug 3077676 */
10471    l_cust_acc_rel_code pa_implementations.cust_acc_rel_code%TYPE;
10472    CURSOR get_cust_acc_rel_code IS
10473    Select cust_acc_rel_code
10474    From pa_implementations;
10475 
10476    l_deliverable_id NUMBER; -- 3435905
10477    -- 3773373 removed below local variable usage
10478 --   i_dlvr           NUMBER := 0; -- 3435905
10479    i_actn           NUMBER := 0; -- 3435905
10480    l_dlvr_dml_action VARCHAR2(30) := null ; -- 3435905
10481    l_unique_flag     VARCHAR2(1) := null ; -- 3435905
10482    l_is_wp_seperate_from_fn     VARCHAR2(1) := 'N';  -- Added for Bug#3451073
10483 
10484 ---------------------- FP_M changes begin (venkat) 1 ---------------------------
10485 
10486 ----Comment ---- l_sys_program_flag VARCHAR2(1) := 'N'; --------------------
10487 l_b_sys_program_flag_fg		 VARCHAR2(1) := 'N'; -- Bug # 5072032.
10488 l_b_allow_multi_prog_rollup_fg	 VARCHAR2(1) := 'N'; -- Bug # 5072032.
10489 
10490 l_enable_top_task_cust_flag  VARCHAR2(1)    := 'N';
10491 l_enable_top_task_inv_mth_flag VARCHAR2(1)  := 'N';
10492 l_projfunc_attr_for_ar_flag  VARCHAR2(1)    :='N';
10493 
10494 --------------------- FP_M changes end (venkat) ---------------------------------
10495 
10496 /* Start of code for bug #2111806 */
10497 -- Start of Bug fix 4878696
10498 -- Commented this cursor for Performance Bug 4878696
10499 -- CURSOR c_prj(c_project_id IN NUMBER ) IS
10500 -- select project_system_status_code
10501 --      ,project_type_class_code
10502 -- from pa_projects_v
10503 -- where project_id = c_project_id;
10504 
10505 -- Added the following cursor instead of the commented one as above for Performance Bug 4878696
10506 CURSOR c_prj(c_project_id IN NUMBER ) IS
10507 select PROJECT_SYSTEM_STATUS_CODE , PROJECT_TYPE_CLASS_CODE
10508        from pa_projects_all ppa,pa_project_statuses pps,pa_project_types ppt
10509 where ppa.project_id = c_project_id
10510   and ppa.PROJECT_STATUS_CODE = pps.PROJECT_STATUS_CODE
10511   and ppa.PROJECT_TYPE = ppt.PROJECT_TYPE
10512   and pps.STATUS_TYPE = 'PROJECT'
10513   and ppt.ORG_ID= ppa.ORG_ID ;
10514 
10515 -- End of Bug fix 4878696
10516 
10517 CURSOR c_prj_count(c_project_id IN NUMBER ) IS
10518 select count(*)
10519   from pa_project_players
10520  where project_id = c_project_id
10521    and project_role_type='PROJECT MANAGER';
10522 
10523 l_proj_status       pa_projects_all.project_status_code%TYPE;
10524 l_proj_type_class       pa_project_types_all.project_type_class_code%TYPE;
10525 l_prj_mgr_count         NUMBER;
10526 /* End of code for bug #2111806. */
10527 
10528 l_old_cust_top_task_flag varchar2(1); -- 4188765 Added local variable
10529 l_old_date_eff_funds_flag varchar2(1); -- sunkalya federal Bug#5511353
10530 
10531 -- Start of Addition for bug 4191009.
10532    CURSOR l_code_percentage_csr (l_project_id NUMBER,
10533                                  l_class_category VARCHAR2,
10534                  l_class_code VARCHAR2 )
10535    IS
10536    SELECT code_percentage
10537    FROM pa_project_classes
10538    WHERE project_id     = l_project_id
10539    AND   class_category = l_class_category
10540    AND   class_code     = l_class_code;
10541 
10542    TYPE class_code_tbl_type IS TABLE OF pa_project_classes.class_code%type
10543     INDEX BY BINARY_INTEGER;
10544 
10545   class_code_tbl class_code_tbl_type;
10546   l_code_percentage pa_project_classes.code_percentage%type;
10547 
10548 -- END of Addition for bug 4191009.
10549 
10550 -- 5348726 :: Start of Addition for bug#5294891.
10551         CURSOR c_get_class_code_id(l_class_category VARCHAR2,
10552                                    l_class_code VARCHAR2 )
10553         IS
10554         SELECT class_code_id
10555         FROM PA_CLASS_CODES
10556         WHERE class_category = l_class_category
10557         AND class_code = l_class_code;
10558 
10559         l_old_class_code_id pa_class_codes.class_code_id%type;
10560         l_new_class_code_id pa_class_codes.class_code_id%type;
10561 -- END of Addition for bug# 5294891.
10562 
10563 -- for opportunity value changes
10564 -- adarora --Changes BEGIN for Bug 4473105
10565 l_expected_approval_date  DATE;
10566 l_projfunc_currency_code  VARCHAR2(15);
10567 l_project_currency_code   VARCHAR2(15);
10568 l_opportunity_value       NUMBER;
10569 l_opp_value_currency_code VARCHAR2(15);
10570 
10571 
10572 CURSOR l_get_details_for_opp_csr (c_project_id IN NUMBER) IS
10573 SELECT expected_approval_date, projfunc_currency_code, project_currency_code
10574 FROM   pa_projects
10575 WHERE  project_id = c_project_id;
10576 
10577 CURSOR l_get_details_for_opp_csr2 (c_project_id IN NUMBER) IS
10578 SELECT opportunity_value, opp_value_currency_code
10579 FROM   pa_project_opp_attrs
10580 WHERE  project_id = c_project_id;
10581 
10582 --Changes END for Bug 4473105
10583 
10584 -- Begin Bug # 4582750.
10585 
10586 l_x_return_status    VARCHAR2(255);
10587 l_x_msg_count        NUMBER;
10588 l_x_msg_data         VARCHAR2(2000);
10589 l_prev_locked_status VARCHAR2(1) := null;
10590 
10591 -- End Bug # 4582750.
10592 l_valid_proj_flag BOOLEAN := false; --tracking
10593 l_error_msg_code  VARCHAR2(200);
10594 
10595 -- Bug # 4329284.
10596 
10597 cursor cur_proj_name (c_project_id NUMBER) is
10598 select ppa.name
10599 from pa_projects_all ppa
10600 where ppa.project_id = c_project_id;
10601 
10602 cursor cur_prog_name (c_project_id NUMBER) is
10603 select ppa.name
10604 from pa_projects_all ppa, pa_object_relationships por
10605 where ppa.project_id = por.object_id_to2
10606 and por.object_id_to2 = c_project_id
10607 and por.relationship_type in ('LW','LF')
10608 union all
10609 select ppa.name
10610 from pa_projects_all ppa, pa_object_relationships por
10611 where ppa.project_id = por.object_id_from2
10612 and por.object_id_from2 = c_project_id
10613 and por.relationship_type in ('LW','LF');
10614 
10615 l_proj_name VARCHAR2(30);
10616 l_prog_name VARCHAR2(30);
10617 
10618 -- Bug # 4329284.
10619 
10620 --Bug#5131471. Added the following cursors and the local variables --Sunkalya
10621 
10622 CURSOR cur_customer_status(l_customer_id number)
10623 IS
10624         SELECT  Nvl(cust_acct.status,'A')
10625         FROM    hz_parties party,
10626                 hz_cust_accounts cust_acct
10627         WHERE
10628                 cust_acct.party_id              = party.party_id AND
10629                 cust_acct.cust_account_id       = l_customer_id;
10630 
10631 l_cust_status                   VARCHAR2(1) :=  null;
10632 --End of code change for Bug#5131471.
10633 
10634 -- 5191417 Added below cursor to validate priority_code
10635 
10636 l_valid_prio_code VARCHAR2(1) := 'N';
10637 
10638 CURSOR priority_code_csr(p_priority_code IN VARCHAR2) IS
10639 Select
10640         'Y'
10641 from
10642         pa_lookups
10643 where
10644         lookup_type = 'PA_PROJECT_PRIORITY_CODE'
10645    and  lookup_code = p_priority_code ;
10646 
10647 -- 5191417 end
10648 
10649 -- Bug#5191699. Added the cursor and the local variable below for validating
10650 --              project security level.This can be either 'Enterprise' or 'Secured'.
10651 
10652 l_check_sec_level       VARCHAR2(1) := 'N';
10653 
10654 CURSOR cur_check_sec_level(p_proj_sec_level IN VARCHAR2 ) IS
10655 SELECT 'Y'  FROM
10656 dual
10657 WHERE EXISTS
10658         (SELECT NULL FROM pa_lookups
10659          WHERE
10660                 lookup_type     =       'PA_PROJECT_ACCESS_LEVEL' AND
10661                 lookup_code     =       p_proj_sec_level
10662         );
10663 -- End of code changes for Bug#5191699 in declare section
10664 
10665 
10666 --Bug#5191521.  Added the cursor and the local variable below for validating
10667 --              probability member id.
10668 
10669 l_check_prob_id VARCHAR2(1) := 'N';
10670 
10671 CURSOR  cur_validate_prob_member( p_project_id IN NUMBER ,p_probability_member_id IN NUMBER )
10672 IS
10673 SELECT 'Y' FROM dual
10674 WHERE  EXISTS
10675         (
10676                 SELECT
10677                 NULL
10678                 FROM
10679                         pa_probability_members ppm,
10680                         pa_projects pp,
10681                         pa_project_types ppt
10682                 WHERE
10683                         pp.project_type                 =       ppt.project_type AND
10684                         pp.org_id                       =       ppt.org_id AND
10685                         ppt.probability_list_id         =       ppm.probability_list_id AND
10686                         pp.project_id                   =       p_project_id AND
10687                         ppm.probability_member_id       =       p_probability_member_id AND
10688                         trunc(sysdate) BETWEEN ppm.start_date_active AND nvl(ppm.end_date_active,trunc(sysdate))
10689         );
10690 --End of code changes for Bug#5191521 in declare section
10691 
10692 --Bug#5222248. The following cursor and local vairable are added for validating the work type id passed
10693 
10694 CURSOR cur_check_work_type(p_project_id IN NUMBER ,p_work_type_id IN NUMBER ) IS
10695 SELECT
10696 'Y'
10697 FROM
10698 pa_work_types_vl pwt,
10699 pa_projects      pp,
10700 pa_project_types  ppt
10701 WHERE
10702 trunc(sysdate) BETWEEN  pwt.start_date_active AND  nvl(pwt.end_date_active,trunc(SYSDATE)) AND
10703 pp.project_type                 =       ppt.project_type AND
10704 pp.org_id                       =       ppt.org_id AND
10705 pwt.billable_capitalizable_flag =       Decode(ppt.project_type_class_code,'INDIRECT', 'N', pwt.billable_capitalizable_flag) AND
10706 pp.project_id                   =       p_project_id AND
10707 pwt.work_type_id                =       p_work_type_id;
10708 
10709 l_check_work_type VARCHAR2(1) := 'N';
10710 
10711 --Bug#5222248.
10712 
10713 --Bug#5188931. Added the following cursors and local variables for validating project currency code
10714 
10715 CURSOR cur_check_cur_code(p_currency_code IN VARCHAR2 )
10716 IS
10717 SELECT
10718 'Y'
10719 FROM
10720 fnd_currencies_vl
10721 WHERE
10722         NVL(enabled_flag, 'Y')  =       'Y'                     AND
10723         SYSDATE  BETWEEN  NVL(start_date_active,SYSDATE)        AND
10724                           NVL(end_date_active,  SYSDATE)        AND
10725         currency_code           =       p_currency_code;
10726 
10727 CURSOR cur_check_prvdr_flag(p_project_id IN NUMBER )
10728 IS
10729 SELECT
10730 ppt.cc_prvdr_flag
10731 FROM
10732 pa_projects pp,
10733 pa_project_types ppt
10734 WHERE
10735 pp.project_type         =       ppt.project_type AND
10736 pp.org_id               =       ppt.org_id       AND --this condition is not mandatory
10737 pp.project_id           =       p_project_id;
10738 
10739 l_check_cur_code_flag VARCHAR2(1) :=    'N';
10740 l_allow_update_flag   VARCHAR2(1) :=    'Y';
10741 l_prvdr_flag          VARCHAR2(1);
10742 
10743 --Bug#5188931.
10744 
10745 --This cursor is introduced for Bug#5196996 to validate the role type passed thru key member record
10746 
10747 CURSOR l_project_role_types_csr (p_role_type IN VARCHAR2,p_project_id IN number)
10748    IS
10749 select 'x'
10750 from pa_project_role_types_v roles,
10751      pa_role_controls controls,
10752      pa_projects_all proj
10753  where proj.project_id=p_project_id
10754  and proj.ROLE_LIST_ID is null
10755  and roles.project_role_id=controls.project_role_id
10756  and roles.PROJECT_ROLE_TYPE=p_role_type
10757  and controls.role_control_code='ALLOW_AS_PROJ_MEMBER'
10758  and trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate)
10759  union all
10760 select 'x'
10761  from pa_project_role_types_v roles,
10762              pa_role_controls controls,
10763      pa_projects_all proj,
10764      pa_role_list_members prlm
10765  where proj.project_id=p_project_id
10766  and proj.ROLE_LIST_ID =prlm.role_list_id
10767  and prlm.project_role_id = roles.project_role_id
10768  and roles.project_role_id=controls.project_role_id
10769  and roles.PROJECT_ROLE_TYPE=p_role_type
10770  and controls.role_control_code='ALLOW_AS_PROJ_MEMBER'
10771  and trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate);
10772 
10773  --Bug#5196996
10774 
10775 l_cc_process_labor_flag  varchar2(1) ; /* Added for Bug 5395048 */
10776 l_cc_process_nl_flag  varchar2(1) ; /* Added for Bug 5395048 */
10777 
10778 --sunkalya federal bug#5511353
10779 
10780 CURSOR cur_enable_funds_flag(p_project_id IN VARCHAR2)
10781 IS
10782 SELECT 'Y'
10783 FROM
10784 pa_projects_all p,
10785 pa_project_types_all pt
10786 WHERE
10787 p.project_id			=	p_project_id	AND
10788 pt.project_type_class_code	=	'CONTRACT'	AND
10789 p.project_type			=	pt.project_type AND
10790 pt.CC_PRVDR_FLAG		=	'N'		AND
10791 pt.org_id			=	p.org_id;
10792 
10793 l_enable_funds_flag	VARCHAR2(1);
10794 l_date_eff_funds_flag   VARCHAR2(1) :=	NULL;
10795 
10796 l_ar_rec_notify_flag   VARCHAR2(1) :=   NULL;  -- 7508661 : EnC
10797 l_auto_release_pwp_inv VARCHAR2(1) :=   NULL;  -- 7508661 : EnC
10798 
10799   /* Added for 12.2Payroll billing ER 11899223 */
10800                          l_bill_labor_accrual varchar2(1) := null;
10801 l_adj_on_std_inv varchar2(2) := null;
10802 
10803   /* Added for 12.2Payroll billing ER 11899223 */
10804 CURSOR cur_rev_inv(p_project_id IN VARCHAR2)
10805 	IS
10806 	SELECT 'Y'
10807 	FROM dual
10808 	WHERE EXISTS
10809 		(SELECT  NULL
10810 		 FROM
10811 		 pa_draft_revenues r
10812 		 WHERE
10813 		 r.project_id		=	p_project_id
10814 		)
10815 	OR EXISTS
10816 		(SELECT  NULL
10817 		 FROM
10818 		 pa_draft_invoices i
10819 		 WHERE
10820 		 i.project_id		=	p_project_id
10821 		);
10822 	l_chk_rev_inv_flag	VARCHAR2(1) := NULL;
10823 
10824 
10825 CURSOR chk_task_level_funding(p_project_id IN VARCHAR2)
10826 	IS
10827 	SELECT 'Y'
10828 	FROM dual
10829 	WHERE exists
10830 		(	select 1
10831 			from  pa_summary_project_fundings
10832 			where project_id = p_project_id
10833 			and task_id is not null
10834 		);
10835 
10836 	l_chk_task_level_funding VARCHAR2(1) := NULL;
10837 
10838 	CURSOR count_cust(p_project_id IN VARCHAR2)
10839 	IS
10840 	SELECT count(*)
10841 	FROM pa_project_customers
10842 	WHERE project_id =  p_project_id;
10843 
10844 	l_count_cust	NUMBER := 0;  -- bug# 12972554, Changed datatype of l_count_cust from VARCHAR2(1) TO NUMBER.
10845 
10846 --sunkalya federal bug#5511353
10847 
10848 
10849 --bug#5554475
10850 
10851  CURSOR cur_pa_impl
10852  IS
10853       SELECT default_rate_type
10854       FROM pa_implementations;
10855 
10856 l_ALLOW_INV_USER_RATE_FLAG  VARCHAR2(1)  ;
10857 l_INV_RATE_DATE        DATE;
10858 l_INV_RATE_TYPE        VARCHAR2 (256) ;
10859 l_USER_INV_RATE_TYPE   VARCHAR2 (256) ;
10860 l_INV_CURRENCY_CODE    VARCHAR (15) ;
10861 l_INV_EXCHANGE_RATE    NUMBER ;
10862 l_mcb_flag             varchar2(1);
10863 l_cc_prvdr_flag        varchar2(1);
10864 
10865 --bug#5554475
10866 
10867 l_default_top_task_cust_flag varchar2(1); --bug 5554578
10868 
10869 --Bug#9110781
10870 l_rowid                 VARCHAR2(255);
10871 l_obj_status_change_id  NUMBER;
10872 l_old_sys_status        VARCHAR2(30);
10873 l_new_sys_status        VARCHAR2(30);
10874 
10875 CURSOR cur_get_system_status(c_status_code IN VARCHAR2) IS
10876 SELECT pps.project_system_status_code
10877 FROM   pa_project_statuses pps
10878 WHERE  pps.project_status_code = nvl(c_status_code,' ');
10879 
10880 /*Adding new cursor for bug 10043448 */
10881 CURSOR cur_inv_date(x_task_id pa_tasks.task_id%type) IS
10882    SELECT MAX(EXPENDITURE_ITEM_DATE)
10883      FROM ap_invoice_distributions_all aid
10884     WHERE project_id = p_project_in.pa_project_id AND
10885           aid.task_id IN (SELECT p.task_id
10886                             FROM pa_tasks p
10887                            START WITH p.task_id= x_task_id
10888                          CONNECT BY PRIOR p.task_id = p.parent_task_id) ;
10889 
10890 x_si_date ap_invoices_all.invoice_date%TYPE ;
10891 
10892 BEGIN
10893 
10894     SAVEPOINT   Update_project_pub;
10895 
10896     IF FND_API.TO_BOOLEAN( p_init_msg_list )
10897     THEN
10898        FND_MSG_PUB.Initialize;
10899     END IF;
10900 
10901     --4218977, rtarway
10902     --we need to set this parameter only when called in AMG/MSP and not in publish flow
10903     --dbms_output.put_line('p_project_in.project_relationship_code'||p_project_in.project_relationship_code);
10904     if (p_pm_product_code <> 'WORKPLAN') then
10905          G_OP_VALIDATE_FLAG := p_op_validate_flag ;
10906      G_TASK_STR_UPDATE_MODE      := p_update_mode ; -- DHI ER , rtarway BUG 4413568
10907     end if;
10908 
10909     --  Standard call to check for call compatibility.
10910     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
10911                                p_api_version_number  ,
10912                                l_api_name         ,
10913                                G_PKG_NAME         )
10914     THEN
10915        RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
10916     END IF;
10917 
10918     p_return_status :=  FND_API.G_RET_STS_SUCCESS;
10919 
10920     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
10921 
10922    -- <Bug#2881768>
10923    -- If structure_version_id has been provided
10924    -- check to see if this version is updatable
10925    -- if not, then throw error and return
10926 
10927    l_structure_version_id := p_structure_in.structure_version_id;
10928 
10929    --3703440, rtarway
10930     G_structure_in_rec.pa_project_id                  := p_structure_in.pa_project_id;
10931     G_structure_in_rec.structure_type                 := p_structure_in.structure_type;
10932     G_structure_in_rec.structure_version_name         := p_structure_in.structure_version_name;
10933     G_structure_in_rec.structure_version_id           := p_structure_in.structure_version_id;
10934     G_structure_in_rec.DESCRIPTION                    := p_structure_in.DESCRIPTION;
10935 
10936 
10937    --bug 4619824
10938    IF l_debug_mode = 'Y' THEN
10939         pa_debug.g_err_stage := 'Checking if the project is a program project';
10940         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10941     END IF;
10942 
10943     IF p_pm_product_code IS NOT NULL
10944        AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10945        AND p_pm_product_code <> 'WORKPLAN'   --bug 4621311
10946        AND PA_RELATIONSHIP_UTILS.Check_subproject_link_exists( p_project_in.pa_project_id ) = 'Y'
10947        AND p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added the condition for Bug 7248969
10948        AND p_tasks_in.count > 0 -- Added the condition for Bug 7248969
10949     THEN
10950         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10951                              p_msg_name => 'PA_PS_CANT_UPDATE_PROG_PRJ');
10952         RAISE FND_API.G_EXC_ERROR;
10953     END IF;
10954    --end bug 4619824
10955 
10956    IF l_debug_mode = 'Y' THEN
10957         pa_debug.g_err_stage := 'Calling PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable' || p_structure_in.structure_version_id;
10958         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10959     END IF;
10960 
10961    IF ( l_structure_version_id IS NOT NULL AND l_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
10962    THEN
10963 
10964       --bug 4538849
10965 
10966       -- Begin Bug # 4582750.
10967 
10968       l_prev_locked_status := PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,l_structure_version_id);
10969 
10970       if ( l_prev_locked_status = 'O' ) then
10971 
10972       -- End Bug # 4582750.
10973 
10974            --if yes, raise error.
10975            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10976            p_msg_name => 'PA_STR_LOCKED_BY_OTHER');
10977            RAISE FND_API.G_EXC_ERROR;
10978 
10979        -- Begin Bug # 4582750.
10980 
10981        elsif ( l_prev_locked_status = 'N' ) then
10982 
10983             if (p_update_mode = 'PA_UPD_WBS_ATTR') and (p_pm_product_code <> 'WORKPLAN') then -- Bug # 4758888.
10984 
10985                       IF l_debug_mode = 'Y' THEN
10986                           pa_debug.g_err_stage := 'Before calling pa_project_structure_utils.lock_unlock_wp_str_autonomous for LOCKING'||
10987                                 'p_project_in.pa_project_id='||p_project_in.pa_project_id||
10988                                 '-l_structure_version_id='||l_structure_version_id;
10989                                 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10990                       END IF;
10991 
10992                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
10993                 (p_project_id                   => p_project_in.pa_project_id
10994                 ,p_structure_version_id         => p_structure_in.structure_version_id
10995                 ,p_lock_status_code             => 'LOCKED'
10996                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
10997                 ,x_return_status                => l_x_return_status
10998                 ,x_msg_count                    => l_x_msg_count
10999                 ,x_msg_data                     => l_x_msg_data);
11000 
11001                         IF l_debug_mode = 'Y' THEN
11002                            pa_debug.g_err_stage := 'After  calling pa_project_structure_utils.lock_unlock_wp_str_autonomous  for LOCKING'||
11003                                 'l_x_return_status='||l_x_return_status;
11004                            pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11005                         END IF;
11006 
11007                        IF l_x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
11008                        THEN
11009                            p_project_out.return_status := l_x_return_status;
11010                            RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11011 
11012                        ELSIF l_x_return_status = FND_API.G_RET_STS_ERROR
11013                        THEN
11014                           p_project_out.return_status := l_x_return_status;
11015                           RAISE  FND_API.G_EXC_ERROR;
11016                        END IF;
11017 
11018         end if;
11019 
11020     -- End Bug # 4582750.
11021 
11022       end if;
11023       --end bug 4538849
11024 
11025        IF p_project_in.adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11026      THEN
11027        proj_adj_on_std_inv := NULL;
11028      ELSE
11029        proj_adj_on_std_inv := p_project_in.adj_on_std_inv;
11030    END IF;
11031 
11032 
11033       if proj_adj_on_std_inv is not null then
11034     OPEN c_adj_on_std_inv(proj_adj_on_std_inv);
11035         FETCH c_adj_on_std_inv into t_adj_on_std_inv;
11036         CLOSE c_adj_on_std_inv;
11037 
11038         if t_adj_on_std_inv <> 'X' then
11039 
11040           PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
11041                                 ,p_msg_name         => 'PA_INVALID_ADJ_ON_STD_INV');
11042 
11043             l_return_status := FND_API.G_RET_STS_ERROR;
11044 
11045             RAISE  FND_API.G_EXC_ERROR;
11046 
11047 
11048 
11049         END IF;
11050 
11051 end if;
11052 
11053       struct_ver_updatable := PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable(l_structure_version_id);
11054 
11055    IF l_debug_mode = 'Y' THEN
11056         pa_debug.g_err_stage := 'struct_ver_updatable='||struct_ver_updatable;
11057         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11058     END IF;
11059 
11060       IF (struct_ver_updatable IS NULL OR struct_ver_updatable = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11061          OR struct_ver_updatable = 'N')
11062       THEN
11063          -- add error message to stack and throw exception
11064          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11065          THEN
11066             pa_interface_utils_pub.map_new_amg_msg
11067             ( p_old_message_code => 'PA_STRUCT_VER_NO_UPDATE'
11068                ,p_msg_attribute    => 'CHANGE'
11069                ,p_resize_flag      => 'N'
11070                ,p_msg_context      => 'GENERAL'
11071                ,p_attribute1       => ''
11072                ,p_attribute2       => ''
11073                ,p_attribute3       => ''
11074                ,p_attribute4       => ''
11075                ,p_attribute5       => '');
11076          END IF;
11077          p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11078          RAISE FND_API.G_EXC_ERROR;
11079       /*  bug 4538849
11080       --bug 4413568, DHI ER, rtarway
11081       ELSIF (struct_ver_updatable = 'Y') THEN
11082           -- structure version is locked by another user check must be done in both update modes. bug 4519809
11083           --IF (p_update_mode = 'PA_UPD_TASK_ATTR') THEN  --bug 4534919
11084               --Check if str version is locked by another user
11085                if ( PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,l_structure_version_id) = 'O' ) then
11086                --if yes, raise error.
11087                PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11088                p_msg_name => 'PA_STR_LOCKED_BY_OTHER');
11089                RAISE FND_API.G_EXC_ERROR;
11090            end if;
11091           --END IF;
11092        */
11093       END IF;
11094    END IF;
11095    l_structure_version_id := null;
11096    -- </Bug#2881768>
11097 
11098 --Organization Forecasting.
11099 --Do not allow updating an org project
11100         IF PA_FP_ORG_FCST_UTILS.check_org_project(
11101               p_project_id        => p_project_in.pa_project_id
11102              ,x_return_status     => l_return_status
11103              ,x_err_code          => l_err_code
11104             ) = 'Y'
11105         THEN
11106            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11107            THEN
11108                pa_interface_utils_pub.map_new_amg_msg
11109                ( p_old_message_code => 'PA_CANT_UPD_ORG_PRJ'
11110                   ,p_msg_attribute    => 'CHANGE'
11111                   ,p_resize_flag      => 'N'
11112                   ,p_msg_context      => 'GENERAL'
11113                   ,p_attribute1       => ''
11114                   ,p_attribute2       => ''
11115                   ,p_attribute3       => ''
11116                   ,p_attribute4       => ''
11117                   ,p_attribute5       => '');
11118            END IF;
11119 
11120 --           PA_UTILS.ADD_MESSAGE('PA', 'PA_ORG_FC_CANT_UPD_ORG_PRJ');
11121            p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11122            RAISE FND_API.G_EXC_ERROR;
11123         END IF;
11124 --Organization Forecasting.
11125 --Do not allow updating an org project
11126 
11127 -- 22-DEC-97, jwhite:
11128 --  Initialize New OUT-parameter to indicate workflow status
11129 
11130 -- Set Worflow Started Status -------------------------------------------------
11131 
11132     p_workflow_started    := 'N';
11133 -- ------------------------------------------------------------------------------------
11134 
11135 
11136 --  pm_product_code is mandatory
11137 
11138 --bug 2841158
11139 --    IF ( p_pm_product_code IS NULL
11140 --    OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
11141     IF ( p_pm_product_code IS NOT NULL
11142     AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
11143 --bug 284115
11144        AND p_pm_product_code <> 'WORKPLAN'    --bug 2665656
11145     THEN
11146 
11147   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11148   THEN
11149          pa_interface_utils_pub.map_new_amg_msg
11150            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
11151             ,p_msg_attribute    => 'CHANGE'
11152             ,p_resize_flag      => 'N'
11153             ,p_msg_context      => 'GENERAL'
11154             ,p_attribute1       => ''
11155             ,p_attribute2       => ''
11156             ,p_attribute3       => ''
11157             ,p_attribute4       => ''
11158             ,p_attribute5       => '');
11159   END IF;
11160   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11161   RAISE FND_API.G_EXC_ERROR;
11162     END IF;
11163 
11164 --bug 2841158
11165     IF p_pm_product_code <> 'WORKPLAN'
11166        AND p_pm_product_code IS NOT NULL
11167        AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11168     THEN
11169 --bug 2841158
11170 
11171           /*added for bug no :2413400*/
11172         OPEN p_product_code_csr (p_pm_product_code);
11173         FETCH p_product_code_csr INTO l_pm_product_code;
11174         CLOSE p_product_code_csr;
11175 
11176         IF l_pm_product_code <> 'X'
11177            AND p_pm_product_code <> 'WORKPLAN'    --bug 2665656
11178         THEN
11179 
11180         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11181         THEN
11182          pa_interface_utils_pub.map_new_amg_msg
11183            ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
11184             ,p_msg_attribute    => 'CHANGE'
11185             ,p_resize_flag      => 'N'
11186             ,p_msg_context      => 'GENERAL'
11187             ,p_attribute1       => ''
11188             ,p_attribute2       => ''
11189             ,p_attribute3       => ''
11190             ,p_attribute4       => ''
11191             ,p_attribute5       => '');
11192         END IF;
11193         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11194         p_return_status             := FND_API.G_RET_STS_ERROR;
11195         RAISE FND_API.G_EXC_ERROR;
11196         END IF;
11197    END IF;   --bug 2841158
11198 
11199     l_resp_id := FND_GLOBAL.Resp_id;
11200     l_user_id := FND_GLOBAL.User_id;
11201     --l_module_name := p_pm_product_code||'.'||'PA_PM_UPDATE_PROJECT';
11202     l_module_name := 'PA_PM_UPDATE_PROJECT';
11203 
11204     --bug 2665656
11205     IF NVL( p_pm_product_code, 'WORKPLAN' ) = 'WORKPLAN'
11206     THEN
11207        l_pm_product_code := null;
11208     END IF;
11209     --bug 2665656
11210 
11211 
11212 --Moved this code here before calling security check to get project id in l_project_i d
11213 --bug 2471668
11214  -- convert pm_project_reference to id
11215 
11216    IF l_debug_mode = 'Y' THEN
11217         pa_debug.g_err_stage := 'Performing ref to id conversion...';
11218         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11219     END IF;
11220 
11221 
11222     Pa_project_pvt.Convert_pm_projref_to_id (
11223          p_pm_project_reference  => p_project_in.pm_project_reference,
11224          p_pa_project_id         => p_project_in.pa_project_id,
11225          p_out_project_id        => l_project_id,
11226          p_return_status         => l_return_status );
11227 
11228 
11229       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
11230       THEN
11231          p_project_out.return_status := l_return_status;
11232          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11233 
11234       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11235       THEN
11236          p_project_out.return_status := l_return_status;
11237          RAISE  FND_API.G_EXC_ERROR;
11238       END IF;
11239 --bug 2471668
11240 
11241 
11242    IF l_debug_mode = 'Y' THEN
11243         pa_debug.g_err_stage := 'Performing security check...';
11244         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11245     END IF;
11246 
11247     -- As part of enforcing project security, which would determine
11248     -- whether the user has the necessary privileges to update the project
11249     -- need to call the pa_security package
11250 
11251     pa_security.initialize (X_user_id        => l_user_id,
11252                             X_calling_module => l_module_name);
11253 
11254     -- Actions performed using the APIs would be subject to
11255     -- function security. If the responsibility does not allow
11256     -- such functions to be executed, the API should not proceed further
11257     -- since the user does not have access to such functions
11258 
11259     PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id;  --bug 2471668 ( in the project context )
11260 
11261     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
11262       (p_api_version_number => p_api_version_number,
11263        p_responsibility_id  => l_resp_id,
11264        p_function_name      => 'PA_PM_UPDATE_PROJECT',
11265        p_msg_count      => l_msg_count,
11266        p_msg_data           => l_msg_data,
11267        p_return_status      => l_return_status,
11268        p_function_allowed   => l_function_allowed );
11269 
11270 
11271      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
11272       THEN
11273       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11274 
11275       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11276       THEN
11277       RAISE FND_API.G_EXC_ERROR;
11278       END IF;
11279         IF l_function_allowed = 'N' THEN
11280          pa_interface_utils_pub.map_new_amg_msg
11281            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
11282             ,p_msg_attribute    => 'CHANGE'
11283             ,p_resize_flag      => 'Y'
11284             ,p_msg_context      => 'GENERAL'
11285             ,p_attribute1       => ''
11286             ,p_attribute2       => ''
11287             ,p_attribute3       => ''
11288             ,p_attribute4       => ''
11289             ,p_attribute5       => '');
11290      p_return_status := FND_API.G_RET_STS_ERROR;
11291      RAISE FND_API.G_EXC_ERROR;
11292         END IF;
11293 
11294 
11295 /* Moving this code before doing security check for bug 2471668
11296  -- convert pm_project_reference to id
11297 
11298     Pa_project_pvt.Convert_pm_projref_to_id (
11299          p_pm_project_reference  => p_project_in.pm_project_reference,
11300          p_pa_project_id         => p_project_in.pa_project_id,
11301          p_out_project_id        => l_project_id,
11302          p_return_status         => l_return_status );
11303 
11304 
11305       IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
11306       THEN
11307          p_project_out.return_status := l_return_status;
11308          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11309 
11310       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11311       THEN
11312          p_project_out.return_status := l_return_status;
11313          RAISE  FND_API.G_EXC_ERROR;
11314       END IF;
11315 */ --bug 2471668
11316 
11317 -- Get segment1 for AMG messages
11318 
11319    OPEN l_amg_project_csr( l_project_id );
11320    FETCH l_amg_project_csr INTO l_amg_segment1;
11321    CLOSE l_amg_project_csr;
11322 
11323 
11324       -- Now verify whether project security allows the user to update
11325       -- project
11326 
11327       IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
11328 
11329          -- The user does not have query privileges on this project
11330          -- Hence, cannot update the project.Raise error
11331          pa_interface_utils_pub.map_new_amg_msg
11332            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
11333             ,p_msg_attribute    => 'CHANGE'
11334             ,p_resize_flag      => 'Y'
11335             ,p_msg_context      => 'GENERAL'
11336             ,p_attribute1       => ''
11337             ,p_attribute2       => ''
11338             ,p_attribute3       => ''
11339             ,p_attribute4       => ''
11340             ,p_attribute5       => '');
11341      p_return_status := FND_API.G_RET_STS_ERROR;
11342      RAISE FND_API.G_EXC_ERROR;
11343       ELSE
11344             -- If the user has query privileges, then check whether
11345             -- update privileges are also available
11346          IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
11347 
11348             -- The user does not have update privileges on this project
11349             -- Hence , raise error
11350          pa_interface_utils_pub.map_new_amg_msg
11351            ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
11352             ,p_msg_attribute    => 'CHANGE'
11353             ,p_resize_flag      => 'Y'
11354             ,p_msg_context      => 'GENERAL'
11355             ,p_attribute1       => ''
11356             ,p_attribute2       => ''
11357             ,p_attribute3       => ''
11358             ,p_attribute4       => ''
11359             ,p_attribute5       => '');
11360      p_return_status := FND_API.G_RET_STS_ERROR;
11361      RAISE FND_API.G_EXC_ERROR;
11362         END IF;
11363      END IF;
11364 
11365 -- Lock this project and it's tasks for update
11366 --  bug 4541103  OPEN l_lock_rows_csr( l_project_id );
11367 
11368 -- Need to get the current project data
11369 
11370     OPEN l_project_csr (l_project_id);
11371     FETCH l_project_csr INTO l_project_rec;
11372     CLOSE l_project_csr;
11373 
11374     -- 4188765 , setting customer top task flag db value in local variable
11375     l_old_cust_top_task_flag := l_project_rec.enable_top_task_customer_flag;
11376     l_old_date_eff_funds_flag := l_project_rec.date_eff_funds_consumption; --sunkalya federal Bug#5511353
11377 
11378    -- anlee
11379    -- Added for intermedia search
11380    l_ctx_proj_name := l_project_rec.name;
11381    l_ctx_proj_number := l_project_rec.segment1;
11382    l_ctx_long_name := l_project_rec.long_name;
11383    l_ctx_desc := l_project_rec.description;
11384    l_ctx_update_flag := 'N';
11385    -- End of changes
11386 
11387    --bug 2738747      --update project
11388    G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
11389    G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
11390    G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
11391    --bug 2738747
11392    G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
11393 
11394    IF l_debug_mode = 'Y' THEN
11395         pa_debug.g_err_stage := 'G_Published_version_exists='||G_Published_version_exists;
11396         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11397         pa_debug.g_err_stage := 'G_IS_WP_SEPARATE_FROM_FN='||G_IS_WP_SEPARATE_FROM_FN;
11398         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11399         pa_debug.g_err_stage := 'G_IS_WP_VERSIONING_ENABLED='||G_IS_WP_VERSIONING_ENABLED;
11400         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11401         pa_debug.g_err_stage := 'G_WP_STR_EXISTS='||G_WP_STR_EXISTS;
11402         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11403     END IF;
11404 
11405 
11406 --bug 2876703   --update_project
11407    IF G_IS_WP_SEPARATE_FROM_FN = 'N' AND
11408       p_structure_in.structure_type = 'WORKPLAN'
11409    THEN
11410         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11411         THEN
11412             pa_interface_utils_pub.map_new_amg_msg
11413               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
11414                   ,p_msg_attribute    => 'CHANGE'
11415                   ,p_resize_flag      => 'N'
11416                   ,p_msg_context      => 'GENERAL'
11417                   ,p_attribute1       => ''
11418                   ,p_attribute2       => ''
11419                   ,p_attribute3       => ''
11420                   ,p_attribute4       => ''
11421                   ,p_attribute5       => '');
11422         END IF;
11423         RAISE FND_API.G_EXC_ERROR;
11424    END IF;
11425 --bug 2876703
11426 
11427    -- "Change Project Currency" changes By avaithia for Bug 3912783
11428    --  << Start >>
11429    --  Functionality :-
11430    --  If Project Currency is changed ,then we should check whether this Project has any subprojects
11431    --  (or) whether this Project is a subproject of some other project
11432    --  If any of the above two is true ,then the Project Currency Change should not be allowed .
11433 
11434    --  Note : In the following "IF" statement ,it may look like "the case where project_currency_code is passed as NULL
11435    --         is not taken care of" . But existing code already takes care of this scenario (l_b_proj_cur_code value logic)
11436 
11437    --  This flag is set as 'Y' Only if the passed value is not null
11438    --  And dbms bind will happen for this project currency code ,Only if the l_b_proj_cur_code value is 'Y'
11439 
11440        IF ( p_project_in.project_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11441           AND ( p_project_in.project_currency_code IS NOT NULL)
11442        THEN
11443              IF nvl(p_project_in.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11444                       <>  nvl(l_project_rec.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11445          THEN
11446            IF  PA_RELATIONSHIP_UTILS.Check_link_exists(l_project_id) = 'Y'
11447                    THEN
11448             -- Throw Error Message
11449                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11450                         THEN
11451 
11452                 -- Bug # 4329284.
11453 
11454                 /*
11455                 pa_interface_utils_pub.map_new_amg_msg
11456                 (p_old_message_code => 'PA_PS_PRJ_CURR_LNK_ERR'
11457                 ,p_msg_attribute    => 'CHANGE'
11458                 ,p_resize_flag      => 'N'
11459                 ,p_msg_context      => 'GENERAL'
11460                                 ,p_attribute1       => ''
11461                 ,p_attribute2       => ''
11462                 ,p_attribute3       => ''
11463                         ,p_attribute4       => ''
11464                     ,p_attribute5       => '');
11465                 */
11466 
11467                 open cur_proj_name(l_project_id);
11468                 fetch cur_proj_name into l_proj_name;
11469                 close cur_proj_name;
11470 
11471                 open cur_prog_name(l_project_id);
11472                 fetch cur_prog_name into l_prog_name;
11473                 close cur_prog_name;
11474 
11475                 PA_UTILS.ADD_MESSAGE('PA','PA_PS_PRJ_CURR_LNK_ERR','PROJ',l_proj_name,'PROG',l_prog_name); -- Bug # 4329284.
11476 
11477                 -- Bug # 4329284.
11478 
11479             END IF ;
11480                         p_return_status :=  FND_API.G_RET_STS_ERROR;
11481             RAISE FND_API.G_EXC_ERROR;
11482                    END IF ;
11483              END IF ;
11484        END IF ;
11485    --  << End >>
11486    --  "Change Project Currency" changes By avaithia
11487 
11488    --bug 2738747
11489   ----dbms_output.put_line('PA_PROJECT_PUB.G_Published_version_exists'||PA_PROJECT_PUB.G_Published_version_exists);
11490    ----dbms_output.put_line('PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN'||PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN);
11491    ----dbms_output.put_line('PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED'||PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED);
11492    ----dbms_output.put_line('p_structure_in.structure_type'||p_structure_in.structure_type);
11493    ----dbms_output.put_line('p_pm_product_code'||p_pm_product_code);
11494    IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
11495       AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
11496       AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
11497       AND p_structure_in.structure_type = 'FINANCIAL'
11498       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'
11499    THEN
11500        --Change the flow to WORKPLAN
11501        l_structure_type := 'WORKPLAN';
11502 
11503 
11504    ELSE
11505        l_structure_type := p_structure_in.structure_type;
11506    END IF;
11507    --bug 2738747
11508 
11509    IF l_debug_mode = 'Y' THEN
11510         pa_debug.g_err_stage := 'l_structure_type='||l_structure_type;
11511         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11512     END IF;
11513 
11514 
11515 -- Need to fetch information from pa_project_types
11516 
11517 /* Bug# 2891513- Added the variables for l_revaluate_funding and l_include_gains_and_losses */
11518 
11519     OPEN  l_project_type_csr(l_project_id);
11520     FETCH l_project_type_csr INTO  l_project_type_class_code,
11521                    l_service_type_code, l_revaluate_funding,l_include_gains_and_losses;
11522     CLOSE l_project_type_csr;
11523 
11524    IF l_debug_mode = 'Y' THEN
11525         pa_debug.g_err_stage := 'Preparing to update project level data...';
11526         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11527     END IF;
11528 
11529 
11530 
11531      l_update_yes_flag := 'N';
11532      l_statement := 'UPDATE PA_PROJECTS SET ';
11533 
11534 --PROJECT NUMBER
11535 -- Check for implementation defined Project number generation mode
11536 -- If project number generation is automatic then ignore the input
11537 -- project number ,since it cannot be modified.Hence,the following
11538 -- checks will be done only if the mode was 'MANUAL'
11539 
11540   IF G_PROJECT_NUMBER_GEN_MODE = 'MANUAL' THEN
11541      IF p_project_in.pa_project_number  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11542      AND p_project_in.pa_project_number IS NOT NULL
11543      THEN
11544         IF  p_project_in.pa_project_number <> l_project_rec.segment1
11545         THEN
11546             pa_project_utils.change_proj_num_ok
11547                 (l_project_id,
11548                  l_err_code,
11549                  l_err_stage,
11550                  l_err_stack );
11551             IF l_err_code > 0
11552             THEN
11553 
11554     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11555     THEN
11556                    IF NOT pa_project_pvt.check_valid_message (l_err_stage)
11557                    THEN
11558                         pa_interface_utils_pub.map_new_amg_msg
11559                           ( p_old_message_code => 'PA_CANT_CHANGE_PROJ_NUM'
11560                            ,p_msg_attribute    => 'CHANGE'
11561                            ,p_resize_flag      => 'N'
11562                            ,p_msg_context      => 'PROJ'
11563                            ,p_attribute1       => l_project_rec.segment1
11564                            ,p_attribute2       => ''
11565                            ,p_attribute3       => ''
11566                            ,p_attribute4       => ''
11567                            ,p_attribute5       => '');
11568                      ELSE
11569                         pa_interface_utils_pub.map_new_amg_msg
11570                           ( p_old_message_code => l_err_stage
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                    END IF;
11580                  END IF;
11581 
11582            p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11583 
11584                  RAISE  FND_API.G_EXC_ERROR;
11585 
11586             ELSIF l_err_code < 0
11587             THEN
11588 
11589     p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11590 
11591                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11592             END IF;
11593      -- BEGIN MSP interface patch
11594 
11595             -- Check for project number being numeric if project number type is
11596             -- defined as numeric
11597 
11598                BEGIN
11599                 IF G_PROJECT_NUMBER_TYPE = 'NUMERIC' THEN
11600                    l_proj_num_numeric  :=
11601                      TO_NUMBER(p_project_in.pa_project_number);
11602                 END IF;
11603                EXCEPTION
11604                  WHEN VALUE_ERROR THEN
11605                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11606                     THEN
11607                         pa_interface_utils_pub.map_new_amg_msg
11608                           ( p_old_message_code => 'PA_PR_NUMERIC_NUM_REQ'
11609                            ,p_msg_attribute    => 'CHANGE'
11610                            ,p_resize_flag      => 'N'
11611                            ,p_msg_context      => 'PROJ'
11612                            ,p_attribute1       => l_project_rec.segment1
11613                            ,p_attribute2       => ''
11614                            ,p_attribute3       => ''
11615                            ,p_attribute4       => ''
11616                            ,p_attribute5       => '');
11617                   END IF;
11618                   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11619                   p_return_status             := FND_API.G_RET_STS_ERROR;
11620                   RAISE FND_API.G_EXC_ERROR;
11621                END ;
11622 
11623         -- END MSP interface patch -- Ensure that l_proj_num_numeric is defined
11624 
11625             OPEN l_project_number_unique_csr( p_project_in.pa_project_number );
11626             FETCH l_project_number_unique_csr INTO l_DUMMY;
11627 
11628             IF l_project_number_unique_csr%FOUND
11629             THEN
11630                 CLOSE l_project_number_unique_csr;
11631 
11632     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11633     THEN
11634          pa_interface_utils_pub.map_new_amg_msg
11635            ( p_old_message_code => 'PA_PR_EPR_PROJ_NUM_NOT_UNIQUE'
11636             ,p_msg_attribute    => 'CHANGE'
11637             ,p_resize_flag      => 'Y'
11638             ,p_msg_context      => 'MODP'
11639             ,p_attribute1       => l_project_rec.segment1
11640             ,p_attribute2       => ''
11641             ,p_attribute3       => ''
11642             ,p_attribute4       => ''
11643             ,p_attribute5       => '');
11644        END IF;
11645 
11646            p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11647 
11648                  RAISE  FND_API.G_EXC_ERROR;
11649             END IF;
11650 
11651             CLOSE l_project_number_unique_csr;
11652 
11653 --bug 2955326
11654 /*
11655             l_statement := l_statement ||
11656                      ' SEGMENT1 = '||''''||
11657                            RTRIM(p_project_in.pa_project_number)||''''||',';
11658 */
11659             l_statement := l_statement ||
11660                        ' SEGMENT1 = :segment1,';
11661             l_b_segment1_flag := 'Y';
11662 --end bug 2955326
11663             l_update_yes_flag := 'Y';
11664 
11665             -- anlee
11666             -- added for intermedia search
11667             l_ctx_proj_number := RTRIM(p_project_in.pa_project_number);
11668             l_ctx_update_flag := 'Y';
11669             -- End of changes
11670 
11671          END IF;
11672      END IF;
11673  END IF;
11674 
11675 --PROJECT NAME
11676 
11677      IF p_project_in.project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11678      AND p_project_in.project_name IS NOT NULL
11679      THEN
11680           IF p_project_in.project_name <> l_project_rec.name
11681           THEN
11682 
11683     OPEN l_project_name_unique_csr( p_project_in.project_name );
11684     FETCH l_project_name_unique_csr INTO l_dummy;
11685 
11686     IF l_project_name_unique_csr%FOUND
11687     THEN
11688       CLOSE l_project_name_unique_csr;
11689 
11690       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11691       THEN
11692             pa_interface_utils_pub.map_new_amg_msg
11693               ( p_old_message_code => 'PA_PR_EPR_PROJ_NAME_NOT_UNIQUE'
11694                ,p_msg_attribute    => 'CHANGE'
11695                ,p_resize_flag      => 'Y'
11696                ,p_msg_context      => 'MODP'
11697                ,p_attribute1       => l_project_rec.segment1
11698                ,p_attribute2       => ''
11699                ,p_attribute3       => ''
11700                ,p_attribute4       => ''
11701                ,p_attribute5       => '');
11702          END IF;
11703 
11704              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11705 
11706                    RAISE  FND_API.G_EXC_ERROR;
11707               END IF;
11708 
11709               CLOSE l_project_name_unique_csr;
11710 
11711 --bug 2955326
11712 /*
11713                l_statement := l_statement ||
11714                           ' NAME = '||''''||
11715                                RTRIM(p_project_in.project_name)||''''||',' ;
11716 */
11717                l_statement := l_statement ||
11718                            ' NAME = :project_name, ';
11719                l_b_proj_name_flag := 'Y';
11720 --end bug 2955326
11721                l_update_yes_flag := 'Y';
11722 
11723                 -- anlee
11724                 -- Added for intermedia search
11725                 l_ctx_proj_name := RTRIM(p_project_in.project_name);
11726                 l_ctx_update_flag := 'Y';
11727                 -- End of changes
11728           END IF;
11729      END IF;
11730 
11731 --LONG NAME
11732 
11733      IF p_project_in.long_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11734      AND p_project_in.long_name IS NOT NULL
11735      THEN
11736           IF p_project_in.long_name <> l_project_rec.long_name
11737           THEN
11738 
11739     OPEN l_long_name_unique_csr( p_project_in.long_name );
11740     FETCH l_long_name_unique_csr INTO l_dummy;
11741 
11742     IF l_long_name_unique_csr%FOUND
11743     THEN
11744       CLOSE l_long_name_unique_csr;
11745 
11746       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11747       THEN
11748             pa_interface_utils_pub.map_new_amg_msg
11749               ( p_old_message_code => 'PA_PR_EPR_LONG_NAME_NOT_UNIQUE'
11750                ,p_msg_attribute    => 'CHANGE'
11751                ,p_resize_flag      => 'Y'
11752                ,p_msg_context      => 'MODP'
11753                ,p_attribute1       => l_project_rec.segment1
11754                ,p_attribute2       => ''
11755                ,p_attribute3       => ''
11756                ,p_attribute4       => ''
11757                ,p_attribute5       => '');
11758          END IF;
11759 
11760              p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11761 
11762                    RAISE  FND_API.G_EXC_ERROR;
11763               END IF;
11764 
11765               CLOSE l_long_name_unique_csr;
11766 
11767 --bug 2955326
11768 /*
11769                l_statement := l_statement ||
11770                           ' LONG_NAME = '||''''||
11771                                RTRIM(p_project_in.long_name)||''''||',' ;
11772 */
11773                 l_statement := l_statement ||
11774                            ' LONG_NAME = :long_name,';
11775                 l_b_long_name_flag := 'Y';
11776 --end bug 2955326
11777                l_update_yes_flag := 'Y';
11778 
11779                 -- anlee
11780                 -- Added for intermedia search
11781                 l_ctx_long_name := RTRIM(p_project_in.long_name);
11782                 l_ctx_update_flag := 'Y';
11783                 -- End of changes
11784           END IF;
11785      END IF;
11786 
11787 
11788    IF p_project_in.pm_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11789        AND nvl(p_project_in.pm_project_reference,
11790                PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11791        <>  nvl(l_project_rec.pm_project_reference,
11792                PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
11793        AND p_project_in.pm_project_reference IS NOT NULL THEN
11794 --bug 2955326
11795 /*
11796             l_statement := l_statement ||
11797                           ' PM_PROJECT_REFERENCE = '||''''||
11798                          RTRIM(p_project_in.pm_project_reference)||''''||',';
11799 */
11800             l_statement := l_statement ||
11801                           ' PM_PROJECT_REFERENCE = :pm_project_reference ,';
11802             l_b_pm_proj_ref_flag := 'Y';
11803 --end bug 2955326
11804             l_update_yes_flag := 'Y';
11805 
11806    END IF;
11807 
11808 --CARRYING_OUT_ORGANIZATION_ID
11809    IF p_project_in.carrying_out_organization_id
11810       <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11811    AND p_project_in.carrying_out_organization_id IS NOT NULL THEN
11812        IF p_project_in.carrying_out_organization_id <>
11813              l_project_rec.carrying_out_organization_id THEN
11814           -- check whether this is a valid organization
11815              IF pa_project_pvt.check_valid_org
11816                 (p_project_in.carrying_out_organization_id) = 'N' THEN
11817     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11818     THEN
11819          pa_interface_utils_pub.map_new_amg_msg
11820            ( p_old_message_code => 'PA_INVALID_ORG'
11821             ,p_msg_attribute    => 'CHANGE'
11822             ,p_resize_flag      => 'N'
11823             ,p_msg_context      => 'PROJ'
11824             ,p_attribute1       => l_project_rec.segment1
11825             ,p_attribute2       => ''
11826             ,p_attribute3       => ''
11827             ,p_attribute4       => ''
11828             ,p_attribute5       => '');
11829     END IF;
11830     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11831                 RAISE  FND_API.G_EXC_ERROR;
11832              END IF;
11833 
11834         --  Code Added for the bug#1968394
11835         -- Test the function security for Org changes
11836         --
11837            IF (fnd_function.test('PA_PAXPREPR_UPDATE_ORG') = TRUE) THEN
11838              l_org_func_security := 'Y';
11839            ELSE
11840              l_org_func_security := 'N';
11841            END IF;
11842 
11843 
11844            pa_project_utils2.validate_attribute_change(
11845            X_Context                => 'ORGANIZATION_VALIDATION'
11846           ,X_insert_update_mode     => NULL
11847           ,X_calling_module         => 'UPDATE_PROJECT'
11848           ,X_project_id             => l_project_id
11849           ,X_task_id                => NULL
11850           ,X_old_value              =>
11851                     To_char(l_project_rec.carrying_out_organization_id)
11852           ,X_new_value              =>
11853                     To_char(p_project_in.carrying_out_organization_id)
11854           ,X_project_type           => l_project_rec.project_type
11855           ,X_project_start_date     => l_project_rec.start_date
11856           ,X_project_end_date       => l_project_rec.completion_date
11857           ,X_public_sector_flag     => l_project_rec.public_sector_flag
11858           ,X_task_manager_person_id => NULL
11859           ,X_Service_type           => NULL
11860           ,X_task_start_date        => NULL
11861           ,X_task_end_date          => NULL
11862           ,X_entered_by_user_id     => FND_GLOBAL.USER_ID
11863           ,X_attribute_category     => l_project_rec.attribute_category
11864           ,X_attribute1             => l_project_rec.attribute1
11865           ,X_attribute2             => l_project_rec.attribute2
11866           ,X_attribute3             => l_project_rec.attribute3
11867           ,X_attribute4             => l_project_rec.attribute4
11868           ,X_attribute5             => l_project_rec.attribute5
11869           ,X_attribute6             => l_project_rec.attribute6
11870           ,X_attribute7             => l_project_rec.attribute7
11871           ,X_attribute8             => l_project_rec.attribute8
11872           ,X_attribute9             => l_project_rec.attribute9
11873           ,X_attribute10            => l_project_rec.attribute10
11874           ,X_pm_product_code        => l_project_rec.pm_product_code
11875           ,X_pm_project_reference   => l_project_rec.pm_project_reference
11876           ,X_pm_task_reference      => NULL
11877 --          ,X_functional_security_flag => NULL /*bug#1968394  */
11878           ,X_functional_security_flag => l_org_func_security /*bug#1968394  */
11879           ,x_warnings_only_flag     => l_warnings_only_flag --bug3134205
11880           ,X_err_code               => l_err_code
11881           ,X_err_stage              => l_err_stage
11882           ,X_err_stack              => l_err_stack );
11883 
11884            IF l_err_code > 0 THEN
11885          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
11886                    IF NOT pa_project_pvt.check_valid_message (l_err_stage) THEN
11887                      pa_interface_utils_pub.map_new_amg_msg
11888                      ( p_old_message_code => 'PA_PR_CANT_CHG_PROJ_TYPE'
11889                       ,p_msg_attribute    => 'CHANGE'
11890                       ,p_resize_flag      => 'N'
11891                       ,p_msg_context      => 'PROJ'
11892                       ,p_attribute1       => l_project_rec.segment1
11893                       ,p_attribute2       => ''
11894                       ,p_attribute3       => ''
11895                       ,p_attribute4       => ''
11896                       ,p_attribute5       => '');
11897                   ELSE
11898                      pa_interface_utils_pub.map_new_amg_msg
11899                      ( p_old_message_code => l_err_stage
11900                       ,p_msg_attribute    => 'CHANGE'
11901                       ,p_resize_flag      => 'N'
11902                       ,p_msg_context      => 'PROJ'
11903                       ,p_attribute1       => l_project_rec.segment1
11904                       ,p_attribute2       => ''
11905                       ,p_attribute3       => ''
11906                       ,p_attribute4       => ''
11907                       ,p_attribute5       => '');
11908                    END IF;
11909                END IF;
11910                p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11911                RAISE  FND_API.G_EXC_ERROR;
11912            ELSIF l_err_code < 0 THEN
11913     p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11914                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
11915            END IF;
11916 
11917 --bug 2955326
11918 /*
11919            l_statement := l_statement || ' CARRYING_OUT_ORGANIZATION_ID = ' ||
11920                  TO_CHAR(p_project_in.carrying_out_organization_id)||',';
11921 */
11922            l_statement := l_statement || ' CARRYING_OUT_ORGANIZATION_ID = :carrying_out_org_id ,';
11923            l_b_co_org_id_flag := 'Y';
11924 --end bug 2955326
11925            l_update_yes_flag := 'Y';
11926 
11927         END IF; -- IF p_project_in.carrying_out_organization_id <>
11928                 -- PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11929      END IF; -- IF p_project_in.carrying_out_organization_id <>
11930              -- l_project_rec.carrying_out_organization_id
11931 
11932 --PUBLIC_SECTOR_FLAG
11933 
11934        IF p_project_in.public_sector_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11935        AND p_project_in.public_sector_flag IS NOT NULL      --NULL will be ignored
11936        THEN
11937           IF  p_project_in.public_sector_flag <>   l_project_rec.public_sector_flag
11938           THEN
11939 
11940         IF p_project_in.public_sector_flag NOT IN ('Y','N')
11941         THEN
11942           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11943       THEN
11944             pa_interface_utils_pub.map_new_amg_msg
11945              ( p_old_message_code => 'PA_PUBLIC_SECTOR_INVALID'
11946               ,p_msg_attribute    => 'CHANGE'
11947               ,p_resize_flag      => 'N'
11948               ,p_msg_context      => 'PROJ'
11949               ,p_attribute1       => l_project_rec.segment1
11950               ,p_attribute2       => ''
11951               ,p_attribute3       => ''
11952               ,p_attribute4       => ''
11953               ,p_attribute5       => '');
11954           END IF;
11955 
11956               p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11957                   RAISE  FND_API.G_EXC_ERROR;
11958                 END IF;
11959 
11960 --bug 2955326
11961 /*
11962                 l_statement :=    l_statement ||
11963                       ' PUBLIC_SECTOR_FLAG = '||''''||
11964                       p_project_in.public_sector_flag||''''||',';
11965 
11966 */
11967                 l_statement :=      l_statement ||
11968                             ' PUBLIC_SECTOR_FLAG = :public_sector_flag ,';
11969                 l_b_pub_sec_flag := 'Y';
11970 --end bug 2955326
11971                 l_update_yes_flag := 'Y';
11972           END IF;
11973        END IF;
11974 
11975 --DISTRIBUTION_RULE
11976 
11977        IF p_project_in.distribution_rule <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11978        OR p_project_in.distribution_rule IS NULL
11979        THEN
11980 
11981           IF p_project_in.distribution_rule IS NULL
11982           AND l_project_type_class_code = 'CONTRACT'
11983           THEN
11984 
11985     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11986     THEN
11987             pa_interface_utils_pub.map_new_amg_msg
11988              ( p_old_message_code => 'PA_CONTRACT_DIST_RULE_NULL'
11989               ,p_msg_attribute    => 'CHANGE'
11990               ,p_resize_flag      => 'N'
11991               ,p_msg_context      => 'PROJ'
11992               ,p_attribute1       => l_project_rec.segment1
11993               ,p_attribute2       => ''
11994               ,p_attribute3       => ''
11995               ,p_attribute4       => ''
11996               ,p_attribute5       => '');
11997       END IF;
11998 
11999                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12000                 RAISE  FND_API.G_EXC_ERROR;
12001     ELSE
12002 
12003             IF  nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12004               <> nvl(l_project_rec.distribution_rule, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12005 
12006             THEN
12007 
12008                -- Verify whether the dist rule is a valid one
12009                IF pa_project_pvt.check_valid_dist_rule
12010                    (l_project_rec.project_type,
12011                   p_project_in.distribution_rule,
12012                   p_project_in.enable_top_task_inv_mth_flag ) = 'N'  --Bug 3279981
12013                THEN
12014       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12015       THEN
12016             pa_interface_utils_pub.map_new_amg_msg
12017              ( p_old_message_code => 'PA_INVALID_DIST_RULE'
12018               ,p_msg_attribute    => 'CHANGE'
12019               ,p_resize_flag      => 'N'
12020               ,p_msg_context      => 'PROJ'
12021               ,p_attribute1       => l_project_rec.segment1
12022               ,p_attribute2       => ''
12023               ,p_attribute3       => ''
12024               ,p_attribute4       => ''
12025               ,p_attribute5       => '');
12026         END IF;
12027 
12028                   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12029                   RAISE  FND_API.G_EXC_ERROR;
12030                END IF;
12031 
12032                pa_project_utils.check_dist_rule_chg_ok (  l_project_id,
12033                            l_project_rec.distribution_rule,
12034                            p_project_in.distribution_rule,
12035                            l_err_code,
12036                            l_err_stage,
12037                            l_err_stack );
12038 
12039                IF l_err_code > 0
12040                THEN
12041 
12042       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12043       THEN
12044                     IF NOT pa_project_pvt.check_valid_message (l_err_stage)
12045                     THEN
12046                         pa_interface_utils_pub.map_new_amg_msg
12047                         ( p_old_message_code => 'PA_CANT_CHANGE_DIST_RULE'
12048                         ,p_msg_attribute    => 'CHANGE'
12049                         ,p_resize_flag      => 'N'
12050                         ,p_msg_context      => 'PROJ'
12051                         ,p_attribute1       => l_project_rec.segment1
12052                         ,p_attribute2       => ''
12053                         ,p_attribute3       => ''
12054                         ,p_attribute4       => ''
12055                         ,p_attribute5       => '');
12056                      ELSE
12057                         pa_interface_utils_pub.map_new_amg_msg
12058                         ( p_old_message_code => l_err_stage
12059                         ,p_msg_attribute    => 'CHANGE'
12060                         ,p_resize_flag      => 'N'
12061                         ,p_msg_context      => 'PROJ'
12062                         ,p_attribute1       => l_project_rec.segment1
12063                         ,p_attribute2       => ''
12064                         ,p_attribute3       => ''
12065                         ,p_attribute4       => ''
12066                         ,p_attribute5       => '');
12067                     END IF;
12068                   END IF;
12069 
12070                   p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12071                   RAISE  FND_API.G_EXC_ERROR;
12072 
12073                ELSIF l_err_code < 0
12074                THEN
12075 
12076       p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12077                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
12078                END IF;
12079 
12080 --bug 2955326
12081 /*
12082                l_statement :=   l_statement ||
12083                      ' DISTRIBUTION_RULE = '||''''||
12084                      p_project_in.distribution_rule||''''||',';
12085 */
12086                 l_statement :=  l_statement ||
12087                         ' DISTRIBUTION_RULE = :dist_rule ,';
12088                --Bug 3279981 Review
12089                l_statement := l_statement ||' REVENUE_ACCRUAL_METHOD = :rev_acc_mth ,';
12090                l_statement := l_statement ||' INVOICE_METHOD = :inv_mth ,';
12091 
12092                 l_b_dist_rule_flag := 'Y';
12093 --end bug 2955326
12094                l_update_yes_flag := 'Y';
12095             END IF;
12096           END IF;
12097        END IF;
12098 
12099 --DESCRIPTION
12100 
12101        IF p_project_in.description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12102        OR p_project_in.description IS NULL
12103        THEN
12104           IF nvl(p_project_in.description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12105        <> nvl(l_project_rec.description, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12106            THEN
12107 --bug 2955326
12108 /*
12109              l_statement :=    l_statement ||
12110                   ' DESCRIPTION =  '||''''||
12111                     RTRIM(p_project_in.description)||''''||',';
12112 */
12113              l_statement :=    l_statement ||
12114                         ' DESCRIPTION = :descrp ,';
12115              l_b_desc_flag := 'Y';
12116 --end bug 2955326
12117              l_update_yes_flag := 'Y';
12118 
12119              -- anlee
12120              -- Added for intermedia search
12121              l_ctx_desc := RTRIM(p_project_in.description);
12122              l_ctx_update_flag := 'Y';
12123              -- End of changes
12124           END IF;
12125        END IF;
12126 
12127 --PROJECT_STATUS_CODE
12128 
12129        IF p_project_in.project_status_code <>
12130           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12131        AND p_project_in.project_status_code IS NOT NULL  --NULL will be ignored
12132        THEN
12133           IF p_project_in.project_status_code <>
12134              l_project_rec.project_status_code THEN
12135        IF pa_project_pvt.check_valid_project_status
12136         (p_project_status => p_project_in.project_status_code ) = 'N'
12137     THEN
12138     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12139             pa_interface_utils_pub.map_new_amg_msg
12140              ( p_old_message_code => 'PA_PROJECT_STATUS_INVALID'
12141               ,p_msg_attribute    => 'CHANGE'
12142               ,p_resize_flag      => 'N'
12143               ,p_msg_context      => 'PROJ'
12144               ,p_attribute1       => l_project_rec.segment1
12145               ,p_attribute2       => ''
12146               ,p_attribute3       => ''
12147               ,p_attribute4       => ''
12148               ,p_attribute5       => '');
12149       END IF;
12150     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12151                 RAISE  FND_API.G_EXC_ERROR;
12152        END IF;
12153 
12154             -- special case for update to and from 'CLOSED'
12155             IF  Pa_project_stus_utils.is_project_status_closed
12156                 (p_project_in.project_status_code) = 'Y' THEN
12157                  l_closing_project := 'Y';
12158                  l_project_status_changed := 'Y';
12159             ELSIF  Pa_project_stus_utils.is_project_status_closed
12160                  (l_project_rec.project_status_code) = 'Y' THEN
12161                  l_reopening_project := 'Y';
12162                  l_project_status_changed := 'Y';
12163             ELSE
12164                 l_project_status_changed := 'Y';
12165             END IF;
12166           END IF;
12167        END IF;
12168 
12169 --PROJECT_START_DATE and PROJECT_COMPLETION_DATE
12170 
12171        l_project_start_date      := p_project_in.start_date;
12172        l_project_completion_date := p_project_in.completion_date;
12173 
12174       -- Bug 7520570: Do not update project dates when the flow is from MSP for the workplan structure
12175       --IF p_pm_product_code = 'MSPROJECT' AND p_structure_in.structure_type = 'WORKPLAN' THEN
12176       -- bug 10071456 : Do not update project dates when the flow is from MSP
12177        IF p_pm_product_code = 'MSPROJECT' THEN
12178          l_project_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
12179          l_project_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
12180        END IF;
12181 
12182  -- Bug 503976 Project Completion is set to default g_miss_date ... Starts
12183 
12184    IF l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12185    THEN l_project_in_rec.completion_date := NULL;
12186    END IF;
12187 
12188  -- Bug 503976 Project Completion is set to default g_miss_date ... Ends
12189 
12190 pa_project_pvt.check_start_end_date
12191 (p_old_start_date    => l_project_rec.start_date
12192 ,p_new_start_date    => l_project_start_date
12193 ,p_old_end_date      => l_project_rec.completion_date
12194 ,p_new_end_date      => l_project_completion_date
12195 ,p_update_start_date_flag  => l_update_start_date_flag
12196 ,p_update_end_date_flag    => l_update_end_date_flag
12197 ,p_return_status    => l_return_status );
12198 
12199 /*--Bug 6511907 PJR Date Validation Enhancement ----- Start--*/
12200 /*-- Validating Project Start and Completion Date against
12201   Resource Request/Assignments Min Start and Max End dates --*/
12202 
12203 Declare
12204   l_validate           VARCHAR2(10);
12205   l_start_date_status  VARCHAR2(10);
12206   l_end_date_status    VARCHAR2(10);
12207 Begin
12208  If l_project_start_date is not null or l_project_completion_date is not null then
12209 
12210    PA_PROJECT_DATES_UTILS.Validate_Project_Dates
12211                (l_project_id, l_project_start_date, l_project_completion_date,
12212                            l_validate, l_start_date_status, l_end_date_status);
12213 
12214    If l_validate = 'Y' and l_start_date_status = 'I' Then
12215 
12216       pa_utils.add_message
12217 	   ( p_app_short_name  => 'PA'
12218 	    ,p_msg_name	    => 'PA_PROJ_DATE_START_ERROR'
12219 	    ,p_token1          => ''
12220 	    ,p_value1          => ''
12221 	    ,p_token2          => ''
12222 	    ,p_value2          => ''
12223 	    ,p_token3          => ''
12224 	    ,p_value3          => ''
12225 	   );
12226 
12227       RAISE  FND_API.G_EXC_ERROR;
12228    End If;
12229 
12230    If l_validate = 'Y' and l_end_date_status = 'I' Then
12231 
12232       pa_utils.add_message
12233 	   ( p_app_short_name  => 'PA'
12234 	    ,p_msg_name	    => 'PA_PROJ_DATE_FINISH_ERROR'
12235 	    ,p_token1          => ''
12236 	    ,p_value1          => ''
12237 	    ,p_token2          => ''
12238 	    ,p_value2          => ''
12239 	    ,p_token3          => ''
12240 	    ,p_value3          => ''
12241 	   );
12242 
12243       RAISE  FND_API.G_EXC_ERROR;
12244    End If;
12245  End If;
12246 End;
12247 
12248 /*--Bug 6511907 PJR Date Validation Enhancement ----- End--*/
12249      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12250          p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12251      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12252       ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
12253          p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12254      RAISE FND_API.G_EXC_ERROR;
12255       END IF;
12256 
12257 -- Checking of valid project start and end date is done after adding and updating the tasks,
12258 -- since dates of tasks might change to be within the project begin and end date.
12259 
12260 
12261        IF l_update_start_date_flag = 'Y'
12262        THEN
12263 --bug 2955326
12264 /*
12265              l_statement :=   l_statement ||
12266                      ' START_DATE = to_date('''||
12267                           to_char(l_project_start_date,'YYYY/MM/DD')||
12268                              ''', ''YYYY/MM/DD''),';
12269 */
12270              l_statement :=   l_statement ||
12271                      ' START_DATE = :start_date ,';
12272              l_b_start_date_flag := 'Y';
12273 --end bug 2955326
12274              l_update_yes_flag := 'Y';
12275        END IF;
12276 
12277        IF l_update_end_date_flag = 'Y'
12278        THEN
12279 --bug 2955326
12280 /*
12281              l_statement :=   l_statement ||
12282                      ' COMPLETION_DATE = to_date('''||
12283                           to_char(l_project_completion_date,'YYYY/MM/DD')||
12284                              ''', ''YYYY/MM/DD''),';
12285 */
12286              l_statement :=   l_statement ||
12287                      ' COMPLETION_DATE = :comp_date ,';
12288              l_b_comp_date_flag := 'Y';
12289 --end bug 2955326
12290              l_update_yes_flag := 'Y';
12291        END IF;
12292 
12293 -- Update other date fields which are maintained only  in the external system
12294 
12295 -- update Actual start date and actual finish date
12296 
12297 /*  Task progress changes  : Actual start date should be updated from task progress and ignored from AMG
12298        IF (p_project_in.actual_start_date IS NOT NULL AND
12299            p_project_in.actual_start_date <>
12300            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12301            NVL(l_project_rec.actual_start_date,
12302                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12303                p_project_in.actual_start_date THEN
12304 
12305              l_statement :=   l_statement ||
12306                      ' ACTUAL_START_DATE = to_date('''||
12307                           to_char(p_project_in.actual_start_date,'YYYY/MM/DD')||
12308                              ''', ''YYYY/MM/DD''),';
12309 
12310 
12311              l_update_yes_flag := 'Y';
12312        END IF;
12313 
12314 
12315        IF (p_project_in.actual_finish_date IS NOT NULL AND
12316            p_project_in.actual_finish_date <>
12317            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12318            NVL(l_project_rec.actual_finish_date,
12319                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12320                p_project_in.actual_finish_date THEN
12321 
12322              l_statement :=   l_statement ||
12323                      ' ACTUAL_FINISH_DATE = to_date('''||
12324                          to_char(p_project_in.actual_finish_date,'YYYY/MM/DD')||
12325                              ''', ''YYYY/MM/DD''),';
12326           l_update_yes_flag := 'Y';
12327        END IF;
12328 */
12329 
12330 -- update early start date and early finish date
12331        IF (p_project_in.early_start_date IS NOT NULL AND
12332            p_project_in.early_start_date <>
12333            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12334            NVL(l_project_rec.early_start_date,
12335                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12336                p_project_in.early_start_date THEN
12337 --bug 2955326
12338 /*
12339              l_statement :=   l_statement ||
12340                      ' EARLY_START_DATE = to_date('''||
12341                           to_char(p_project_in.early_start_date,'YYYY/MM/DD')||
12342                              ''', ''YYYY/MM/DD''),';
12343 */
12344              l_statement :=   l_statement ||
12345                      ' EARLY_START_DATE = :early_start_date ,';
12346              l_b_early_sd_flag := 'Y';
12347 --end bug 2955326
12348              l_update_yes_flag := 'Y';
12349        END IF;
12350 
12351        IF (p_project_in.early_finish_date IS NOT NULL AND
12352            p_project_in.early_finish_date <>
12353            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12354            NVL(l_project_rec.early_finish_date,
12355                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12356                p_project_in.early_finish_date THEN
12357 --bug 2955326
12358 /*
12359              l_statement :=   l_statement ||
12360                      ' EARLY_FINISH_DATE = to_date('''||
12361                           to_char(p_project_in.early_finish_date,'YYYY/MM/DD')||
12362                              ''', ''YYYY/MM/DD''),';
12363 */
12364                 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
12365                 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
12366 
12367                            IF  p_project_in.early_finish_date < p_project_in.early_start_date THEN
12368 
12369                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12370 
12371                                          pa_utils.add_message
12372                                          (
12373                                            p_app_short_name   => 'PA'
12374                                           ,p_msg_name         => 'PA_SU_INVALID_DATES'
12375                                          );
12376 
12377                                 END IF;
12378 
12379                                 RAISE  FND_API.G_EXC_ERROR;
12380                            END IF;
12381                            l_statement :=   l_statement ||
12382                            ' EARLY_FINISH_DATE = :early_finish_date ,';
12383                            l_b_early_fd_flag := 'Y';
12384                            l_update_yes_flag := 'Y';
12385 
12386                 ELSIF  l_project_rec.early_start_date  IS NOT NULL THEN
12387 
12388                           IF p_project_in.early_finish_date < l_project_rec.early_start_date  THEN
12389 
12390                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12391 
12392                                          pa_utils.add_message
12393                                          (
12394                                            p_app_short_name   => 'PA'
12395                                           ,p_msg_name         => 'PA_SU_INVALID_DATES'
12396                                          );
12397 
12398                                 END IF;
12399 
12400                                 RAISE  FND_API.G_EXC_ERROR;
12401                           END IF;
12402                           l_statement :=   l_statement ||
12403                           ' EARLY_FINISH_DATE = :early_finish_date ,';
12404                           l_b_early_fd_flag := 'Y';
12405                           l_update_yes_flag := 'Y';
12406                 ELSE
12407 
12408                          l_statement :=   l_statement ||
12409                          ' EARLY_FINISH_DATE = :early_finish_date ,';
12410                          l_b_early_fd_flag := 'Y';
12411                          --end bug 2955326
12412                          l_update_yes_flag := 'Y';
12413 
12414                 END IF; --End of Logic added for Bug#5185673
12415        END IF;
12416 
12417 -- update Late start date and Late finish date
12418 
12419        IF (p_project_in.late_start_date IS NOT NULL AND
12420            p_project_in.late_start_date <>
12421            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12422            NVL(l_project_rec.late_start_date,
12423                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12424                p_project_in.late_start_date THEN
12425 --bug 2955326
12426 /*
12427              l_statement :=   l_statement ||
12428                      ' LATE_START_DATE = to_date('''||
12429                           to_char(p_project_in.late_start_date,'YYYY/MM/DD')||
12430                              ''', ''YYYY/MM/DD''),';
12431 */
12432 
12433              l_statement :=   l_statement ||
12434                      ' LATE_START_DATE = :late_start_date ,';
12435              l_b_late_sd_flag := 'Y';
12436 --end bug 2955326
12437              l_update_yes_flag := 'Y';
12438        END IF;
12439 
12440 
12441        IF (p_project_in.late_finish_date IS NOT NULL AND
12442            p_project_in.late_finish_date <>
12443            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12444            NVL(l_project_rec.late_finish_date,
12445                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12446                p_project_in.late_finish_date THEN
12447 --bug 2955326
12448 /*
12449              l_statement :=   l_statement ||
12450                      ' LATE_FINISH_DATE = to_date('''||
12451                           to_char(p_project_in.late_finish_date,'YYYY/MM/DD')||
12452                              ''', ''YYYY/MM/DD''),';
12453 */
12454                 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
12455                 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
12456 
12457                            IF  p_project_in.late_finish_date < p_project_in.late_start_date THEN
12458 
12459                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12460 
12461                                          pa_utils.add_message
12462                                          (
12463                                            p_app_short_name   => 'PA'
12464                                           ,p_msg_name         => 'PA_SU_INVALID_DATES'
12465                                          );
12466 
12467                                 END IF;
12468 
12469                                 RAISE  FND_API.G_EXC_ERROR;
12470                            END IF;
12471                           l_statement :=   l_statement ||
12472                           ' LATE_FINISH_DATE = :late_finish_date ,';
12473                           l_b_late_fd_flag := 'Y';
12474                           l_update_yes_flag := 'Y';
12475                 ELSIF  l_project_rec.late_start_date  IS NOT NULL THEN
12476                           IF p_project_in.late_finish_date < l_project_rec.late_start_date  THEN
12477 
12478                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12479 
12480                                          pa_utils.add_message
12481                                          (
12482                                            p_app_short_name   => 'PA'
12483                                           ,p_msg_name         => 'PA_SU_INVALID_DATES'
12484                                          );
12485 
12486                                 END IF;
12487 
12488                                 RAISE  FND_API.G_EXC_ERROR;
12489                           END IF;
12490                           l_statement :=   l_statement ||
12491                           ' LATE_FINISH_DATE = :late_finish_date ,';
12492                           l_b_late_fd_flag := 'Y';
12493                           l_update_yes_flag := 'Y';
12494                 ELSE
12495                           l_statement :=   l_statement ||
12496                           ' LATE_FINISH_DATE = :late_finish_date ,';
12497                           l_b_late_fd_flag := 'Y';
12498                           --end bug 2955326
12499                           l_update_yes_flag := 'Y';
12500 
12501                 END IF; --End of Logic added for Bug#5185673.
12502         END IF;
12503 
12504 
12505 -- update scheduled start date and scheduled finish date
12506 
12507        IF (p_project_in.scheduled_start_date IS NOT NULL AND
12508            p_project_in.scheduled_start_date <>
12509            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12510            NVL(l_project_rec.scheduled_start_date,
12511                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12512                p_project_in.scheduled_start_date THEN
12513 --bug 2955326
12514 /*
12515              l_statement :=   l_statement ||
12516                      ' SCHEDULED_START_DATE = to_date('''||
12517                       to_char(p_project_in.scheduled_start_date,'YYYY/MM/DD')||
12518                              ''', ''YYYY/MM/DD''),';
12519 
12520 */
12521              l_statement :=   l_statement ||
12522                      ' SCHEDULED_START_DATE = :sch_start_date ,';
12523              l_b_sch_sd_flag := 'Y';
12524 --end bug 2955326
12525              l_update_yes_flag := 'Y';
12526        END IF;
12527 
12528 
12529        IF (p_project_in.scheduled_finish_date IS NOT NULL AND
12530            p_project_in.scheduled_finish_date <>
12531            PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12532            NVL(l_project_rec.scheduled_finish_date,
12533                PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12534                p_project_in.scheduled_finish_date THEN
12535 --bug 2955326
12536 /*
12537              l_statement :=   l_statement ||
12538                      ' SCHEDULED_FINISH_DATE = to_date('''||
12539                      to_char(p_project_in.scheduled_finish_date,'YYYY/MM/DD')||
12540                              ''', ''YYYY/MM/DD''),';
12541 */
12542              l_statement :=   l_statement ||
12543                      ' SCHEDULED_FINISH_DATE = :sch_finish_date ,';
12544              l_b_sch_fd_flag := 'Y';
12545 --end bug 2955326
12546              l_update_yes_flag := 'Y';
12547        END IF;
12548 
12549   -- Check if any of the df columns have changed (attribute1 to attribute10)
12550   -- 04/11/97
12551   -- Bug 7277032
12552 
12553        IF p_project_in.attribute_category  <>
12554           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12555           OR p_project_in.attribute_category IS NULL  THEN
12556           IF NVL(p_project_in.attribute_category,
12557                  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12558            <> NVL(l_project_rec.attribute_category,
12559                  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
12560 --bug 2955326
12561 /*
12562              l_statement  := l_statement ||
12563                      ' ATTRIBUTE_CATEGORY =  '||''''||
12564                        RTRIM(p_project_in.attribute_category)||''''||',';
12565 */
12566              l_statement  := l_statement ||
12567                          ' ATTRIBUTE_CATEGORY = :attr_cat ,';
12568              l_b_attr_cat_flag := 'Y';
12569 --end bug 2955326
12570              l_update_yes_flag := 'Y';
12571           END IF;
12572        END IF;
12573 
12574   -- Bug 7277032
12575        IF p_project_in.attribute1  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12576           OR p_project_in.attribute1 IS NULL  THEN
12577           IF NVL(p_project_in.attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12578            <> NVL(l_project_rec.attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12579               THEN
12580 --bug 2955326
12581 /*
12582              l_statement  := l_statement ||
12583                 ' ATTRIBUTE1 =  '||''''||
12584                   RTRIM(p_project_in.attribute1)||''''||',';
12585 */
12586              l_statement  := l_statement ||
12587                     ' ATTRIBUTE1 = :attr1 ,';
12588              l_b_attr1_flag := 'Y';
12589 --end bug 2955326
12590              l_update_yes_flag := 'Y';
12591           END IF;
12592        END IF;
12593 
12594   -- Bug 7277032
12595        IF p_project_in.attribute2  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12596           OR p_project_in.attribute2 IS NULL  THEN
12597           IF NVL(p_project_in.attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12598            <> NVL(l_project_rec.attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12599               THEN
12600 --bug 2955326
12601 /*
12602              l_statement  := l_statement ||
12603                      ' ATTRIBUTE2 =  '||''''||
12604                        RTRIM(p_project_in.attribute2)||''''||',';
12605 */
12606              l_statement  := l_statement ||
12607                     ' ATTRIBUTE2 = :attr2 ,';
12608              l_b_attr2_flag := 'Y';
12609 --end bug 2955326
12610              l_update_yes_flag := 'Y';
12611           END IF;
12612        END IF;
12613 
12614   -- Bug 7277032
12615        IF p_project_in.attribute3  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12616           OR p_project_in.attribute3 IS NULL  THEN
12617           IF NVL(p_project_in.attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12618            <> NVL(l_project_rec.attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12619               THEN
12620 --bug 2955326
12621 /*
12622              l_statement  := l_statement ||
12623                      ' ATTRIBUTE3 =  '||''''||
12624                        RTRIM(p_project_in.attribute3)||''''||',';
12625 */
12626              l_statement  := l_statement ||
12627                     ' ATTRIBUTE3 = :attr3 ,';
12628              l_b_attr3_flag := 'Y';
12629 --end bug 2955326
12630              l_update_yes_flag := 'Y';
12631           END IF;
12632        END IF;
12633 
12634   -- Bug 7277032
12635        IF p_project_in.attribute4  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12636           OR p_project_in.attribute4 IS NULL  THEN
12637           IF NVL(p_project_in.attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12638            <> NVL(l_project_rec.attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12639               THEN
12640 --bug 2955326
12641 /*
12642              l_statement  := l_statement ||
12643                 ' ATTRIBUTE4 =  '||''''||
12644                   RTRIM(p_project_in.attribute4)||''''||',';
12645 */
12646              l_statement  := l_statement ||
12647                     ' ATTRIBUTE4 = :attr4 ,';
12648              l_b_attr4_flag := 'Y';
12649 --end bug 2955326
12650              l_update_yes_flag := 'Y';
12651           END IF;
12652        END IF;
12653 
12654   -- Bug 7277032
12655        IF p_project_in.attribute5  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12656           OR p_project_in.attribute5 IS NULL  THEN
12657           IF NVL(p_project_in.attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12658            <> NVL(l_project_rec.attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12659               THEN
12660 --bug 2955326
12661 /*
12662              l_statement  := l_statement ||
12663                      ' ATTRIBUTE5 =  '||''''||
12664                        RTRIM(p_project_in.attribute5)||''''||',';
12665 */
12666              l_statement  := l_statement ||
12667                     ' ATTRIBUTE5 = :attr5 ,';
12668              l_b_attr5_flag := 'Y';
12669 --end bug 2955326
12670              l_update_yes_flag := 'Y';
12671           END IF;
12672        END IF;
12673 
12674   -- Bug 7277032
12675        IF p_project_in.attribute6  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12676           OR p_project_in.attribute6 IS NULL  THEN
12677           IF NVL(p_project_in.attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12678            <> NVL(l_project_rec.attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12679               THEN
12680 --bug 2955326
12681 /*
12682              l_statement  := l_statement ||
12683                      ' ATTRIBUTE6 =  '||''''||
12684                        RTRIM(p_project_in.attribute6)||''''||',';
12685 */
12686              l_statement  := l_statement ||
12687                     ' ATTRIBUTE6 = :attr6 ,';
12688              l_b_attr6_flag := 'Y';
12689 --end bug 2955326
12690              l_update_yes_flag := 'Y';
12691           END IF;
12692        END IF;
12693 
12694   -- Bug 7277032
12695        IF p_project_in.attribute7  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12696           OR p_project_in.attribute7 IS NULL  THEN
12697           IF NVL(p_project_in.attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12698            <> NVL(l_project_rec.attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12699               THEN
12700 --bug 2955326
12701 /*
12702              l_statement  := l_statement ||
12703                      ' ATTRIBUTE7 =  '||''''||
12704                        RTRIM(p_project_in.attribute7)||''''||',';
12705 */
12706              l_statement  := l_statement ||
12707                     ' ATTRIBUTE7 = :attr7 ,';
12708              l_b_attr7_flag := 'Y';
12709 --end bug 2955326
12710              l_update_yes_flag := 'Y';
12711           END IF;
12712        END IF;
12713 
12714   -- Bug 7277032
12715        IF p_project_in.attribute8  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12716           OR p_project_in.attribute8 IS NULL  THEN
12717           IF NVL(p_project_in.attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12718            <> NVL(l_project_rec.attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12719               THEN
12720 --bug 2955326
12721 /*
12722              l_statement  := l_statement ||
12723                      ' ATTRIBUTE8 =  '||''''||
12724                        RTRIM(p_project_in.attribute8)||''''||',';
12725 */
12726              l_statement  := l_statement ||
12727                     ' ATTRIBUTE8 = :attr8 ,';
12728              l_b_attr8_flag := 'Y';
12729 --end bug 2955326
12730              l_update_yes_flag := 'Y';
12731           END IF;
12732        END IF;
12733 
12734   -- Bug 7277032
12735        IF p_project_in.attribute9  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12736           OR p_project_in.attribute9 IS NULL  THEN
12737           IF NVL(p_project_in.attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12738            <> NVL(l_project_rec.attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12739               THEN
12740 --bug 2955326
12741 /*
12742              l_statement  := l_statement ||
12743                      ' ATTRIBUTE9 =  '||''''||
12744                        RTRIM(p_project_in.attribute9)||''''||',';
12745 */
12746              l_statement  := l_statement ||
12747                     ' ATTRIBUTE9 = :attr9 ,';
12748              l_b_attr9_flag := 'Y';
12749 --end bug 2955326
12750              l_update_yes_flag := 'Y';
12751           END IF;
12752        END IF;
12753 
12754   -- Bug 7277032
12755        IF p_project_in.attribute10  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12756           OR p_project_in.attribute10 IS NULL  THEN
12757           IF NVL(p_project_in.attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12758            <> NVL(l_project_rec.attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12759               THEN
12760 --bug 2955326
12761 /*
12762              l_statement  := l_statement ||
12763                      ' ATTRIBUTE10 =  '||''''||
12764                        RTRIM(p_project_in.attribute10)||''''||',';
12765 */
12766              l_statement  := l_statement ||
12767                     ' ATTRIBUTE10 = :attr10 ,';
12768              l_b_attr10_flag := 'Y';
12769 --end bug 2955326
12770              l_update_yes_flag := 'Y';
12771           END IF;
12772        END IF;
12773 
12774 -- Tax Code Changes Starts here ...
12775 
12776 --Bug 4606925: Modified below condition so that output_tax_code can be updated to null
12777 IF ((p_project_in.output_tax_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12778      AND p_project_in.output_tax_code IS NOT NULL) OR (p_project_in.output_tax_code IS NULL))  THEN
12779      IF NVL(p_project_in.output_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12780            <> NVL(l_project_rec.output_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12781               THEN
12782 --bug 2955326
12783 /*
12784              l_statement  := l_statement ||
12785                        ' OUTPUT_TAX_CODE =  '||''''||
12786                        RTRIM(p_project_in.output_tax_code)||''''||',';
12787 */              -- Added for 5188246
12788                 IF p_project_in.output_tax_code IS NOT NULL THEN
12789 
12790                    OPEN l_cur_retention_tax_code(p_project_in.output_tax_code);
12791                    FETCH l_cur_retention_tax_code INTO l_dummy_cur_output_tax_code;
12792                    CLOSE l_cur_retention_tax_code;
12793 
12794                    IF  l_dummy_cur_output_tax_code <> 'Y' THEN
12795                         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12796                                                p_msg_name       => 'PA_INVLD_OUTPUT_TAX_CODE');
12797 
12798                         p_return_status :=  FND_API.G_RET_STS_ERROR;
12799                         RAISE FND_API.G_EXC_ERROR;
12800 
12801                    END IF;
12802 
12803 
12804                 END IF ;
12805                 -- End of 5188246
12806              l_statement  := l_statement ||
12807                        ' OUTPUT_TAX_CODE = :output_tx_code ,';
12808              l_b_output_tx_code_flag := 'Y';
12809 --end bug 2955326
12810              l_update_yes_flag := 'Y';
12811           END IF;
12812        END IF;
12813 
12814 --Bug 4606925: Modified below condition so that retention_tax_code can be updated to null
12815 IF ((p_project_in.retention_tax_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12816      AND p_project_in.retention_tax_code IS NOT NULL) OR (p_project_in.retention_tax_code IS NULL))  THEN
12817      IF NVL(p_project_in.retention_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12818            <> NVL(l_project_rec.retention_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12819               THEN
12820 --bug 2955326
12821 /*
12822              l_statement  := l_statement ||
12823                        ' RETENTION_TAX_CODE =  '||''''||
12824                        RTRIM(p_project_in.retention_tax_code)||''''||',';
12825 */              -- Added for Bug 5188246
12826                 IF p_project_in.retention_tax_code IS NOT NULL THEN
12827 
12828                    OPEN l_cur_retention_tax_code(p_project_in.retention_tax_code);
12829                    FETCH l_cur_retention_tax_code INTO l_dummy_cur_retention_tax_code;
12830                     CLOSE l_cur_retention_tax_code;
12831 
12832                    IF  l_dummy_cur_retention_tax_code <> 'Y'  THEN
12833                         PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12834                                                p_msg_name       => 'PA_INVLD_RETENTION_TAX_CODE');
12835 
12836                         p_return_status :=  FND_API.G_RET_STS_ERROR;
12837                         RAISE FND_API.G_EXC_ERROR;
12838 
12839                    END IF;
12840 
12841 
12842                 END IF ;
12843                 -- End of Bug 5188246.
12844              l_statement  := l_statement ||
12845                        ' RETENTION_TAX_CODE = :ret_tx_code ,';
12846              l_b_ret_tx_code_flag := 'Y';
12847 --end bug 2955326
12848              l_update_yes_flag := 'Y';
12849           END IF;
12850        END IF;
12851 
12852 --  IC and Multi National Currency changes Starts ...
12853 --  Bug#5188931
12854 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
12855 
12856    IF     NVL(p_project_in.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.project_currency_code,
12857           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
12858 
12859           -- Added the following Logic here to validate passed currency code.Bug#5188931
12860           -- Checking whether passed currency code is a valid value and not a junk value
12861           OPEN  cur_check_cur_code( p_project_in.project_currency_code );
12862           FETCH cur_check_cur_code INTO l_check_cur_code_flag;
12863           CLOSE cur_check_cur_code;
12864 
12865           IF (l_check_cur_code_flag = 'Y') THEN
12866 
12867                 --This means the currency code passed is not null and valid. Hence validate whether update is allowed.
12868 
12869                 --1. Check whether bill intercompany invoices flag is checked at the project type level
12870                 OPEN  cur_check_prvdr_flag(p_project_in.pa_project_id);
12871                 FETCH cur_check_prvdr_flag INTO l_prvdr_flag;
12872                 CLOSE cur_check_prvdr_flag;
12873 
12874                 IF l_prvdr_flag ='Y' THEN
12875                         l_allow_update_flag :=  'N';
12876 
12877 
12878                 --2. Check whether project value ,funding ,event,expenditure item, budget transaction exist
12879                 --If any one of these exist, then the update should not be allowed. The check for existence of
12880                 --sub projects is not done here as this has been already done above thru Bug#3912783.
12881 
12882                 ELSIF (    NVL( pa_multi_currency_billing.check_mcb_trans_exist ( p_project_in.pa_project_id ), 'N' ) = 'Y' OR
12883                            l_project_rec.project_value IS NOT NULL                                                          OR
12884                            PA_IMPL_OPTIONS_PUB.check_budget_trans_exists( p_project_in.pa_project_id )                = 'Y'
12885                    ) THEN
12886 
12887                         l_allow_update_flag :=  'N';
12888                 END IF;
12889 
12890                 IF l_allow_update_flag = 'N' THEN
12891 
12892                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12893 
12894                                          pa_utils.add_message
12895                                          (
12896                                            p_app_short_name   => 'PA'
12897                                           ,p_msg_name         => 'PA_CURR_CODE_NOT_UPDATBL'
12898                                          );
12899 
12900                         END IF;
12901 
12902                         RAISE  FND_API.G_EXC_ERROR;
12903                 ELSE
12904 
12905                                 --bug 2955326
12906                                 /*
12907                                              l_statement  := l_statement ||
12908                                                        ' PROJECT_CURRENCY_CODE =  '||''''||
12909                                                        RTRIM(p_project_in.project_currency_code)||''''||',';
12910                                 */
12911                                              l_statement  := l_statement ||
12912                                              ' PROJECT_CURRENCY_CODE = :proj_cur_code ,';
12913                                              l_b_proj_cur_code_flag := 'Y';
12914                                 --end bud 2955326
12915                                              l_update_yes_flag := 'Y';
12916                 END IF;
12917 
12918           ELSE
12919 
12920                 --invalid currency code has been passed hence throw error
12921                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12922 
12923                                          pa_utils.add_message
12924                                          (
12925                                            p_app_short_name   => 'PA'
12926                                           ,p_msg_name         => 'PA_INVALID_PROJ_CURR_CODE'
12927                                          );
12928 
12929                 END IF;
12930 
12931                 RAISE  FND_API.G_EXC_ERROR;
12932           END IF;
12933 
12934    END IF;
12935 
12936 END IF; --End of changes Bug#5188931
12937 
12938        IF p_project_in.allow_cross_charge_flag  <>
12939 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12940           AND p_project_in.allow_cross_charge_flag IS NOT NULL  THEN
12941           IF NVL(p_project_in.allow_cross_charge_flag,
12942 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12943            <> NVL(l_project_rec.allow_cross_charge_flag,
12944 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12945               THEN
12946 --bug 2955326
12947 /*
12948              l_statement  := l_statement ||
12949                        ' ALLOW_CROSS_CHARGE_FLAG =  '||''''||
12950                      RTRIM(p_project_in.allow_cross_charge_flag)||''''||',';
12951 */
12952              l_statement  := l_statement ||
12953                        ' ALLOW_CROSS_CHARGE_FLAG = :allow_x_chg_flag ,';
12954              l_b_allow_x_chg_flag := 'Y';
12955 --end bug 2955326
12956              l_update_yes_flag := 'Y';
12957           END IF;
12958        END IF;
12959 
12960        IF p_project_in.project_rate_date  <>
12961 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12962           AND p_project_in.project_rate_date IS NOT NULL  THEN
12963           IF NVL(p_project_in.project_rate_date,
12964 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12965            <> NVL(l_project_rec.project_rate_date,
12966 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12967               THEN
12968 --bug 2955326
12969 /*
12970              l_statement  := l_statement ||
12971                        ' PROJECT_RATE_DATE =  to_date('''||
12972                      to_char(p_project_in.project_rate_date,'YYYY/MM/DD')||
12973                              ''', ''YYYY/MM/DD''),';
12974 */
12975              l_statement  := l_statement ||
12976                        ' PROJECT_RATE_DATE = :proj_rt_date ,';
12977              l_b_proj_rt_date_flag := 'Y';
12978 --end bug 2955326
12979              l_update_yes_flag := 'Y';
12980           END IF;
12981        END IF;
12982 
12983 --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);
12984        IF ((p_project_in.project_rate_type  <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12985        AND p_project_in.project_rate_type IS NOT NULL )
12986        OR p_project_in.project_rate_type IS NULL  ) THEN-- changed this if condition for bug no 5225146
12987 
12988           IF NVL(p_project_in.project_rate_type,
12989 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12990            <> NVL(l_project_rec.project_rate_type,
12991 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12992               THEN
12993 --bug 2955326
12994 /*
12995              l_statement  := l_statement ||
12996                        ' PROJECT_RATE_TYPE =  '||''''||
12997              RTRIM(p_project_in.project_rate_type)||''''||',';
12998 */
12999                 -- Added for bug 5225146
13000                 IF p_project_in.project_rate_type IS NOT NULL THEN
13001 
13002                      OPEN l_cur_project_rate_type(p_project_in.project_rate_type);
13003                      FETCH l_cur_project_rate_type INTO l_dummy_project_rate_type;
13004                      CLOSE l_cur_project_rate_type;
13005 
13006                      IF l_dummy_project_rate_type <> 'Y' THEN
13007 
13008                              PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
13009                                                   p_msg_name       => 'PA_INVLD_PROJ_RATE_TYPE');
13010                              p_return_status :=  FND_API.G_RET_STS_ERROR;
13011                              RAISE FND_API.G_EXC_ERROR;
13012                      END IF ;
13013                  END IF ;
13014 
13015              l_statement  := l_statement ||
13016                        ' PROJECT_RATE_TYPE = :proj_rt_tp ,';
13017              l_b_proj_rt_tp_flag := 'Y';
13018 --bug 2955326
13019              l_update_yes_flag := 'Y';
13020           END IF;
13021        END IF;
13022 
13023        IF p_project_in.cc_process_labor_flag  <>
13024 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13025           AND p_project_in.cc_process_labor_flag IS NOT NULL  THEN
13026           IF NVL(p_project_in.cc_process_labor_flag,
13027 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13028            <> NVL(l_project_rec.cc_process_labor_flag,
13029 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13030               THEN
13031 --bug 2955326
13032 /*
13033              l_statement  := l_statement ||
13034                        ' CC_PROCESS_LABOR_FLAG =  '||''''||
13035              RTRIM(p_project_in.cc_process_labor_flag)||''''||',';
13036 */
13037              l_statement  := l_statement ||
13038                        ' CC_PROCESS_LABOR_FLAG = :cc_proc_lb_flag ,';
13039              l_cc_proc_lb_flag := 'Y';
13040 --end bug 2955326
13041              l_update_yes_flag := 'Y';
13042           END IF;
13043        END IF;
13044 
13045  -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
13046  IF ( (p_project_in.labor_tp_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13047         AND p_project_in.labor_tp_schedule_id IS NOT NULL) OR
13048       (p_project_in.labor_tp_schedule_id IS NULL) )
13049    THEN
13050      -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
13051      IF ( (p_project_in.labor_tp_schedule_id <> NVL(l_project_rec.labor_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
13052           OR (p_project_in.labor_tp_schedule_id IS NULL) )
13053           THEN
13054 --bug 2955326
13055 /*
13056              l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = ' ||
13057                   TO_CHAR(p_project_in.labor_tp_schedule_id)||',';
13058 */
13059 
13060              l_cc_process_labor_flag  := p_project_in.cc_process_labor_flag; /* Added for Bug 5395048 */
13061              l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = :lb_tp_sch_id ,';
13062              l_b_lb_tp_sch_id_flag := 'Y'; -- added for Bug 5395048
13063              l_update_yes_flag := 'Y';
13064 
13065              -- 5402979 :: Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
13066              -- we need to set the project cross charge process labor flag to 'N'
13067              IF p_project_in.labor_tp_schedule_id IS NULL THEN
13068                  l_cc_process_labor_flag := 'N';
13069 
13070                  IF l_cc_proc_lb_flag = 'N' THEN
13071                       l_statement  := l_statement ||
13072                            ' CC_PROCESS_LABOR_FLAG = :cc_proc_lb_flag ,';
13073                  END IF;
13074 
13075                  l_cc_proc_lb_flag := 'Y';
13076                  l_update_yes_flag := 'Y';
13077              END IF;
13078              -- code changes end for Bug 5395048
13079 
13080           END IF;
13081        END IF;
13082 
13083        IF p_project_in.labor_tp_fixed_date  <>
13084 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13085           AND p_project_in.labor_tp_fixed_date IS NOT NULL  THEN
13086           IF NVL(p_project_in.labor_tp_fixed_date,
13087 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13088            <> NVL(l_project_rec.labor_tp_fixed_date,
13089 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13090               THEN
13091 --bug 2955326
13092 /*
13093              l_statement  := l_statement ||
13094                        ' LABOR_TP_FIXED_DATE =  to_date('''||
13095                      to_char(p_project_in.labor_tp_fixed_date,'YYYY/MM/DD')||
13096                              ''', ''YYYY/MM/DD''),';
13097 */
13098              l_statement  := l_statement ||
13099                        ' LABOR_TP_FIXED_DATE = :lb_tp_fixed_dt ,';
13100              l_b_lb_tp_fixed_dt_flag := 'Y';
13101 --end bug 2955326
13102              l_update_yes_flag := 'Y';
13103           END IF;
13104        END IF;
13105 
13106        IF p_project_in.cc_process_nl_flag  <>
13107 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13108           AND p_project_in.cc_process_nl_flag IS NOT NULL  THEN
13109           IF NVL(p_project_in.cc_process_nl_flag,
13110 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13111            <> NVL(l_project_rec.cc_process_nl_flag,
13112 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13113               THEN
13114 --bug 2955326
13115 /*
13116              l_statement  := l_statement ||
13117                        ' CC_PROCESS_NL_FLAG =  '||''''||
13118              RTRIM(p_project_in.cc_process_nl_flag)||''''||',';
13119 */
13120              l_statement  := l_statement ||
13121                        ' CC_PROCESS_NL_FLAG = :cc_proc_nl_flag ,';
13122              l_b_cc_proc_nl_flag := 'Y';
13123 --end bug 2955326
13124              l_update_yes_flag := 'Y';
13125           END IF;
13126        END IF;
13127 
13128  IF ( (p_project_in.nl_tp_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13129         AND p_project_in.nl_tp_schedule_id IS NOT NULL)
13130      OR (p_project_in.nl_tp_schedule_id IS NULL) )
13131    THEN
13132      IF ((p_project_in.nl_tp_schedule_id <> NVL(l_project_rec.nl_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
13133       OR (p_project_in.nl_tp_schedule_id IS NULL))
13134           THEN
13135 --bug 2955326
13136 /*
13137              l_statement := l_statement || ' NL_TP_SCHEDULE_ID = ' ||
13138                   TO_CHAR(p_project_in.nl_tp_schedule_id)||',';
13139 */
13140              l_cc_process_nl_flag  := p_project_in.cc_process_nl_flag; /* Added for Bug 5395048 */
13141              l_statement := l_statement || ' NL_TP_SCHEDULE_ID = :nl_tp_sch_id ,';
13142              l_b_nl_tp_sch_id_flag := 'Y';
13143 --bug 2955326
13144              l_update_yes_flag := 'Y';
13145 
13146              -- Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
13147              -- we need to set the project cross charge process labor flag to 'N'
13148              IF p_project_in.nl_tp_schedule_id IS NULL THEN
13149                  l_cc_process_nl_flag := 'N';
13150 
13151                  IF l_b_cc_proc_nl_flag = 'N' THEN
13152                       l_statement  := l_statement ||
13153                            ' CC_PROCESS_NL_FLAG = :cc_proc_nl_flag ,';
13154                  END IF;
13155 
13156                  l_b_cc_proc_nl_flag := 'Y';
13157                  l_update_yes_flag := 'Y';
13158              END IF;
13159              -- Code changes end for Bug 5395048
13160           END IF;
13161        END IF;
13162 
13163        IF p_project_in.nl_tp_fixed_date  <>
13164 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13165           AND p_project_in.nl_tp_fixed_date IS NOT NULL  THEN
13166           IF NVL(p_project_in.nl_tp_fixed_date,
13167 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13168            <> NVL(l_project_rec.nl_tp_fixed_date,
13169 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13170               THEN
13171 --bug 2955326
13172 /*
13173              l_statement  := l_statement ||
13174                        ' NL_TP_FIXED_DATE =  to_date('''||
13175                      to_char(p_project_in.nl_tp_fixed_date,'YYYY/MM/DD')||
13176                              ''', ''YYYY/MM/DD''),';
13177 */
13178              l_statement  := l_statement ||
13179                        ' NL_TP_FIXED_DATE = :nl_tp_fx_dt ,';
13180              l_b_nl_tp_fx_dt_flag := 'Y';
13181 --end bug 2955326
13182              l_update_yes_flag := 'Y';
13183           END IF;
13184        END IF;
13185 
13186 -- IC and Multi National Currency changes Ends ...
13187 
13188 -- ORM Code change starts here ...
13189 
13190        IF p_project_in.role_list_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13191           AND p_project_in.role_list_id IS NOT NULL  THEN
13192           IF p_project_in.role_list_id <> l_project_rec.role_list_id
13193               THEN
13194 --bug 2955326
13195 /*
13196              l_statement := l_statement || ' ROLE_LIST_ID = ' ||
13197                   TO_CHAR(p_project_in.role_list_id)||',';
13198 */
13199              l_statement := l_statement || ' ROLE_LIST_ID = :role_list_id ,';
13200              l_b_role_list_id_flag := 'Y';
13201 --end bug 2955326
13202              l_update_yes_flag := 'Y';
13203           END IF;
13204        END IF;
13205 
13206 --Added for bug 5745545
13207 IF nvl(p_project_in.work_type_id,-999) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13208 
13209 	IF (nvl(fnd_profile.value('PA_EN_NEW_WORK_TYPE_PROCESS'),'N') = 'Y') OR (nvl(pa_install.is_prm_licensed(),'N') = 'Y' ) THEN
13210 
13211 		IF p_project_in.work_type_id IS NULL AND (NOT (PA_GMS_API.vert_install)) THEN
13212 
13213 			IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13214 				    pa_interface_utils_pub.map_new_amg_msg
13215 				      ( p_old_message_code => 'PA_PR_WORK_TYPE_MANDATORY'
13216 				       ,p_msg_attribute    => 'CHANGE'
13217 				       ,p_resize_flag      => 'Y'
13218 				       ,p_msg_context      => 'PROJ'
13219 				       ,p_attribute1       => l_project_rec.segment1
13220 				       ,p_attribute2       => ''
13221 				       ,p_attribute3       => ''
13222 				       ,p_attribute4       => ''
13223 				       ,p_attribute5       => '');
13224 			END IF;
13225 			p_project_out.return_status := FND_API.G_RET_STS_ERROR;
13226 		        RAISE  FND_API.G_EXC_ERROR;
13227 		ELSE
13228 			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
13229 
13230 				--Added the following logic to update the work type id.Bug#5222248
13231 				OPEN  cur_check_work_type(p_project_in.pa_project_id,p_project_in.work_type_id);
13232 				FETCH cur_check_work_type INTO l_check_work_type;
13233 				CLOSE cur_check_work_type;
13234 
13235 				IF  l_check_work_type = 'Y' THEN
13236 
13237 					l_statement := l_statement || ' WORK_TYPE_ID = :work_type_id ,';
13238 					l_b_work_type_id_flag := 'Y';
13239 					l_update_yes_flag := 'Y';
13240 				END IF;
13241 				--End of code change for Bug#5222248.
13242 			END IF;
13243 		END IF;
13244 
13245 	ELSE -- Null work_type_id is allowed
13246 		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
13247 
13248 			l_statement := l_statement || ' WORK_TYPE_ID = :work_type_id ,';
13249 			l_b_work_type_id_flag := 'Y';
13250 			l_update_yes_flag := 'Y';
13251 		END IF;
13252 	END IF;
13253 END IF;
13254 --End of addition for bug 5745545
13255 
13256        IF p_project_in.calendar_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13257           AND p_project_in.calendar_id IS NOT NULL  THEN
13258           /* IF p_project_in.calendar_id <> l_project_rec.calendar_id Commented for bug 5620624*/
13259 	  IF p_project_in.calendar_id <> nvl(l_project_rec.calendar_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --Bug#5620624
13260               THEN
13261 --bug 2955326
13262 /*
13263              l_statement := l_statement || ' CALENDAR_ID = ' ||
13264                   TO_CHAR(p_project_in.calendar_id)||',';
13265 */
13266              OPEN l_cur_calendar_id(p_project_in.calendar_id);
13267              FETCH l_cur_calendar_id INTO l_dummy_calendar_id;
13268              CLOSE l_cur_calendar_id ;
13269              -- Added this if condition for 5222506
13270              IF l_dummy_calendar_id =  'Y' THEN
13271                      l_statement := l_statement || ' CALENDAR_ID = :cal_id ,';
13272                      l_b_cal_id_flag := 'Y';
13273                      --end bug 2955326
13274                      l_update_yes_flag := 'Y';
13275             END IF ;
13276             -- End of bug 5222506
13277           END IF;
13278        END IF;
13279 
13280        IF p_project_in.location_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13281           AND p_project_in.location_id IS NOT NULL  THEN
13282           IF p_project_in.location_id <> l_project_rec.location_id
13283               THEN
13284 --bug 2955326
13285 /*
13286              l_statement := l_statement || ' LOCATION_ID = ' ||
13287                   TO_CHAR(p_project_in.location_id)||',';
13288 */
13289              l_statement := l_statement || ' LOCATION_ID = :loc_id ,';
13290              l_b_loc_id_flag := 'Y';
13291 --end bug 2955326
13292              l_update_yes_flag := 'Y';
13293           END IF;
13294        END IF;
13295 
13296        IF p_project_in.probability_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13297           AND p_project_in.probability_member_id IS NOT NULL  THEN
13298           --Modified the if condition below for Bug#5210872.
13299 
13300           IF (p_project_in.probability_member_id <> nvl(l_project_rec.probability_member_id,-99)) THEN
13301 
13302           --End of code change for Bug#5210872.
13303                 --bug 2955326
13304                 /*
13305                              l_statement := l_statement || ' PROBABILITY_MEMBER_ID = ' ||
13306                                   TO_CHAR(p_project_in.probability_member_id)||',';
13307                 */
13308 
13309                 --Bug#5191521.Included validation for probability_member_id below.
13310 
13311                         OPEN  cur_validate_prob_member( p_project_in.pa_project_id,p_project_in.probability_member_id);
13312                         FETCH cur_validate_prob_member INTO l_check_prob_id;
13313                         CLOSE cur_validate_prob_member;
13314 
13315                         IF l_check_prob_id ='Y' THEN  --only if a valid probability id is passed
13316                                                       --update will be done.Otherwise old value will remain.
13317 
13318                                 l_statement := l_statement || ' PROBABILITY_MEMBER_ID = :prob_memb_id ,';
13319                                 l_b_prob_memb_id_flag := 'Y';
13320                                 l_update_yes_flag := 'Y';
13321                         ELSE
13322 
13323                                 l_b_prob_memb_id_flag :='N';
13324                         END IF;
13325                 --End of code change for Bug#5191521.
13326 
13327                 --end bug 2955326
13328 
13329 
13330 
13331           END IF;
13332        END IF;
13333 
13334        IF ((p_project_in.project_value <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13335           AND p_project_in.project_value IS NOT NULL ) OR p_project_in.project_value IS NULL) THEN
13336           IF p_project_in.project_value <> l_project_rec.project_value
13337               THEN
13338 --bug 2955326
13339 /*
13340              l_statement := l_statement || ' PROJECT_VALUE = ' ||
13341                   TO_CHAR(p_project_in.project_value)||',';
13342 */--Added for bug 5214431
13343             -- changed from l_project_in_rec.project_value to p_project_in.project_value
13344             IF p_project_in.project_value IS NOT NULL AND p_project_in.project_value < 0 THEN
13345                 PA_UTILS.ADD_MESSAGE
13346                  ( p_app_short_name   => 'PA'
13347                   ,p_msg_name         => 'PA_INVLD_OPPORTUNITY_VALUE');
13348                    RAISE FND_API.G_EXC_ERROR;
13349             END IF;
13350             -- end of bug 5214431.
13351              l_statement := l_statement || ' PROJECT_VALUE = :proj_value ,';
13352              l_b_proj_value_flag := 'Y';
13353 --end bug 2955326
13354              l_update_yes_flag := 'Y';
13355           END IF;
13356        END IF;
13357 
13358        IF p_project_in.expected_approval_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13359           AND p_project_in.expected_approval_date IS NOT NULL  THEN
13360           IF NVL(p_project_in.expected_approval_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13361            <> NVL(l_project_rec.expected_approval_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13362               THEN
13363 --bug 2955326
13364 /*
13365              l_statement  := l_statement || ' EXPECTED_APPROVAL_DATE =  to_date('''||
13366                      to_char(p_project_in.expected_approval_date,'YYYY/MM/DD')||
13367                              ''', ''YYYY/MM/DD''),';
13368 */
13369              l_statement  := l_statement || ' EXPECTED_APPROVAL_DATE = :exp_apprv_date ,';
13370              l_b_exp_apprv_dt_flag := 'Y';
13371 --end bug 2955326
13372              l_update_yes_flag := 'Y';
13373           END IF;
13374        END IF;
13375 
13376        IF p_project_in.cost_job_group_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13377           AND p_project_in.cost_job_group_id IS NOT NULL  THEN
13378           IF p_project_in.cost_job_group_id <> l_project_rec.cost_job_group_id
13379               THEN
13380 --bug 2955326
13381 /*
13382              l_statement := l_statement || ' COST_JOB_BILL_ID = ' ||
13383                   TO_CHAR(p_project_in.cost_job_group_id)||',';
13384 */
13385             l_statement := l_statement || ' COST_JOB_GROUP_ID = :cst_jb_gp_id ,';  -- Bug 8831203  : Changed COST_JOB_BILL_ID to COST_JOB_GROUP_ID
13386              l_b_cst_jb_gp_id_flag := 'Y';
13387 --end bug 2955326
13388              l_update_yes_flag := 'Y';
13389           END IF;
13390        END IF;
13391 
13392        IF p_project_in.bill_job_group_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13393           AND p_project_in.bill_job_group_id IS NOT NULL  THEN
13394           IF p_project_in.bill_job_group_id <> l_project_rec.bill_job_group_id
13395               THEN
13396 --bug 2955326
13397 /*
13398              l_statement := l_statement || ' BILL_JOB_BILL_ID = ' ||
13399                   TO_CHAR(p_project_in.bill_job_group_id)||',';
13400 */
13401              l_statement := l_statement || ' BILL_JOB_GROUP_ID = :bill_jb_gp_id ,';  --Bug 5739298 Changed BILL_JOB_BILL_ID to BILL_JOB_GROUP_ID
13402              l_b_bill_jb_gp_id_flag := 'Y';
13403 --end bug 2955326
13404              l_update_yes_flag := 'Y';
13405           END IF;
13406        END IF;
13407 
13408 -- ORM Code change ends here ...
13409 /*Commented the below code for bug 2802984*/
13410        /*IF p_project_in.emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13411           AND p_project_in.emp_bill_rate_schedule_id IS NOT NULL  THEN
13412           IF p_project_in.emp_bill_rate_schedule_id <> l_project_rec.emp_bill_rate_schedule_id
13413               THEN
13414              l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = ' ||
13415                   TO_CHAR(p_project_in.emp_bill_rate_schedule_id)||',';
13416              l_update_yes_flag := 'Y';
13417           END IF;
13418        END IF;
13419 
13420        IF p_project_in.job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13421           AND p_project_in.job_bill_rate_schedule_id IS NOT NULL  THEN
13422           IF p_project_in.job_bill_rate_schedule_id <> l_project_rec.job_bill_rate_schedule_id
13423               THEN
13424              l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = ' ||
13425                   TO_CHAR(p_project_in.job_bill_rate_schedule_id)||',';
13426              l_update_yes_flag := 'Y';
13427           END IF;
13428        END IF;*/
13429 /*Commenting till here for bug 2802984 */
13430 
13431   /* Code for the bug 2802984 starts*/
13432 
13433        pa_project_pvt.Check_Schedule_type
13434      (p_pa_task_id              => '',
13435       p_pa_project_id          => l_project_id,
13436       p_in_labor_sch_type      => p_project_in.labor_sch_type,
13437       p_in_nl_sch_type         => p_project_in.non_labor_sch_type,
13438       p_task_name              => '',
13439       p_pm_task_reference      => '',
13440       p_out_labor_sch_type     => l_out_labor_sch_type,
13441       p_out_nl_labor_sch_type  => l_out_nl_labor_sch_type,
13442       p_return_status          => l_return_status
13443       );
13444 
13445         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13446       THEN
13447       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13448 
13449       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13450       THEN
13451       RAISE FND_API.G_EXC_ERROR;
13452       END IF;
13453 
13454 
13455 pa_project_pvt.validate_schedule_values
13456    (p_pa_project_id                  => l_project_id,
13457     p_pa_task_id                     => '',
13458     p_task_name                      => '',
13459     p_pm_task_reference              => '',
13460     p_lab_db_sch_type                => l_project_rec.labor_sch_type,
13461     p_nl_db_sch_type                 => l_project_rec.non_labor_sch_type,
13462     p_labor_sch_type                 => l_out_labor_sch_type,
13463     p_nl_sch_type               => l_out_nl_labor_sch_type,
13464     p_emp_bill_rate_schedule_id      => p_project_in.EMP_BILL_RATE_SCHEDULE_ID,
13465     p_job_bill_rate_schedule_id      => p_project_in.JOB_BILL_RATE_SCHEDULE_ID,
13466     p_labor_schedule_fixed_date      =>  p_project_in.LABOR_SCHEDULE_FIXED_DATE,
13467     p_labor_schedule_discount        =>  p_project_in.LABOR_SCHEDULE_DISCOUNT,
13468     p_labor_disc_reason_code         => p_project_in.LABOR_DISC_REASON_CODE,
13469     p_nl_bill_rate_org_id            =>  p_project_in.NON_LABOR_BILL_RATE_ORG_ID,
13470     p_non_lab_std_bill_rt_sch_id     => p_project_in.NON_LAB_STD_BILL_RT_SCH_ID,
13471     p_nl_schedule_fixed_date         =>  p_project_in.NON_LABOR_SCHEDULE_FIXED_DATE,
13472     p_nl_schedule_discount           =>  p_project_in.NON_LABOR_SCHEDULE_DISCOUNT,
13473     p_non_labor_disc_reason_code     => p_project_in.NON_LABOR_DISC_REASON_CODE,
13474     p_rev_ind_rate_sch_id            =>  p_project_in.REV_IND_RATE_SCH_ID,
13475     p_inv_ind_rate_sch_id            =>  p_project_in.INV_IND_RATE_SCH_ID,
13476     p_rev_ind_sch_fixed_date         =>  p_project_in.REV_IND_SCH_FIXED_DATE,
13477     p_inv_ind_sch_fixed_date         =>  p_project_in.INV_IND_SCH_FIXED_DATE,
13478     p_return_status                  => l_return_status
13479     );
13480 
13481 
13482        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13483       THEN
13484 
13485       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13486 
13487       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13488       THEN
13489 
13490       RAISE FND_API.G_EXC_ERROR;
13491       END IF;
13492 
13493  IF p_project_in.labor_sch_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13494           AND p_project_in.labor_sch_type IS NOT NULL
13495   THEN
13496           IF p_project_in.labor_sch_type <> NVL(l_task_rec.LABOR_SCH_TYPE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13497               THEN
13498 --bug 2955326
13499 /*
13500        l_statement  := l_statement ||' LABOR_SCH_TYPE =  '||''''||
13501              RTRIM(p_project_in.labor_sch_type)||''''||',';
13502 */
13503        l_statement  := l_statement ||' LABOR_SCH_TYPE = :lb_sch_type ,';
13504        l_b_lb_sch_tp_fg := 'Y';
13505 --end bug 2955326
13506              l_update_yes_flag := 'Y';
13507           END IF;
13508        END IF;
13509 
13510   IF p_project_in.non_labor_sch_type  <>
13511 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13512           AND p_project_in.non_labor_sch_type IS NOT NULL
13513   THEN
13514    IF p_project_in.non_labor_sch_type
13515            <> NVL(l_task_rec.NON_LABOR_SCH_TYPE,
13516 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13517               THEN
13518 --bug 2955326
13519 /*
13520        l_statement  := l_statement ||
13521                        ' NON_LABOR_SCH_TYPE =  '||''''||
13522              RTRIM(p_project_in.non_labor_sch_type)||''''||',';
13523 */
13524        l_statement  := l_statement ||
13525                        ' NON_LABOR_SCH_TYPE = :nn_lb_sch_tp ,';
13526        l_b_nn_lb_sch_tp_fg := 'Y';
13527 --end bug 2955326
13528              l_update_yes_flag := 'Y';
13529           END IF;
13530        END IF;
13531 
13532    IF l_out_labor_sch_type = 'B' THEN
13533 
13534    /* Should be able to update null since this is not mandatory*/
13535 
13536  IF ((p_project_in.emp_bill_rate_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13537 AND p_project_in.emp_bill_rate_schedule_id IS NOT NULL) OR (p_project_in.emp_bill_rate_schedule_id IS NULL))
13538    THEN
13539      IF ((p_project_in.emp_bill_rate_schedule_id <>
13540         NVL(l_project_rec.emp_bill_rate_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
13541       OR (p_project_in.emp_bill_rate_schedule_id IS NULL))
13542           THEN
13543 --bug 2955326
13544 /*
13545              l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = ' ||
13546                   TO_CHAR(p_project_in.emp_bill_rate_schedule_id)||',';
13547 */
13548              l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = :emp_bill_rt_sch_id2 ,';
13549              l_b_emp_bill_rt_sch_id_fg2 := 'Y';
13550 --end bug 2955326
13551              l_update_yes_flag := 'Y';
13552           END IF;
13553        END IF;
13554 
13555        /*
13556        1)Should be able to update null when prm is not licensed.
13557        2) When prm is licensed then it is mandatory.
13558        */
13559 
13560 IF ((p_project_in.job_bill_rate_schedule_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13561  AND p_project_in.job_bill_rate_schedule_id IS NOT NULL)
13562  OR (p_project_in.job_bill_rate_schedule_id is NULL and pa_install.is_prm_licensed = 'N'))
13563   THEN
13564   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)
13565   OR (p_project_in.job_bill_rate_schedule_id IS NULL))
13566               THEN
13567 --bug 2955326
13568 /*
13569        l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = ' ||
13570                   TO_CHAR(p_project_in.job_bill_rate_schedule_id)||',';
13571 */
13572        l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = :jb_bill_rt_sch_id2,';
13573        l_b_jb_bill_rt_sch_id_fg2 := 'Y';
13574 --end bug 2955326
13575              l_update_yes_flag := 'Y';
13576           END IF;
13577        END IF;
13578 
13579        /* Should be able to update null*/
13580 
13581  IF ((p_project_in.labor_schedule_fixed_date  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13582  AND p_project_in.labor_schedule_fixed_date IS NOT NULL) OR (p_project_in.labor_schedule_fixed_date IS NULL))
13583    THEN
13584     IF (p_project_in.labor_schedule_fixed_date <>
13585     NVL(l_project_rec.labor_schedule_fixed_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13586      OR (l_project_rec.labor_schedule_fixed_date IS NULL))
13587               THEN
13588 --bug 2955326
13589 /*
13590              l_statement  := l_statement ||
13591                        ' LABOR_SCHEDULE_FIXED_DATE =  to_date('''||
13592                           to_char(p_project_in.labor_schedule_fixed_date,'YYYY/MM/DD')||
13593                              ''', ''YYYY/MM/DD''),';
13594 */
13595              l_statement  := l_statement ||
13596                        ' LABOR_SCHEDULE_FIXED_DATE = :lb_sch_fx_dt ,';
13597              l_b_lb_sch_fx_dt_fg := 'Y';
13598 --end bug 2955326
13599              l_update_yes_flag := 'Y';
13600           END IF;
13601        END IF;
13602 
13603  /* Should be able to update null*/
13604   IF ((p_project_in.labor_schedule_discount <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13605    AND p_project_in.labor_schedule_discount IS NOT NULL)
13606       OR (p_project_in.labor_schedule_discount IS NULL)) THEN
13607           IF ((p_project_in.labor_schedule_discount
13608            <> NVL(l_project_rec.labor_schedule_discount,
13609 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) OR (p_project_in.labor_schedule_discount IS NULL))
13610               THEN
13611 --bug 2955326
13612 /*
13613              l_statement  := l_statement ||
13614                        ' LABOR_SCHEDULE_DISCOUNT =  '||''''||
13615              TO_NUMBER(p_project_in.labor_schedule_discount)||''''||',';
13616 */
13617              l_statement := l_statement ||
13618                        ' LABOR_SCHEDULE_DISCOUNT = :lb_sch_dsct ,';
13619              l_b_lb_sch_dsct_fg := 'Y';
13620 --end bug 2955326
13621              l_update_yes_flag := 'Y';
13622           END IF;
13623        END IF;
13624 
13625  IF  p_project_in.labor_schedule_discount IS NULL THEN
13626    l_statement  := l_statement ||
13627                        ' LABOR_DISC_REASON_CODE =  '''''||',';
13628    l_update_yes_flag := 'Y';
13629 ELSE
13630  IF p_project_in.labor_disc_reason_code  <>
13631 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13632           AND p_project_in.labor_disc_reason_code IS NOT NULL
13633       THEN
13634           IF (p_project_in.labor_disc_reason_code
13635            <> NVL(l_project_rec.labor_disc_reason_code,
13636 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
13637               THEN
13638 --bug 2955326
13639 /*
13640              l_statement  := l_statement ||
13641                        ' LABOR_DISC_REASON_CODE =  '||''''||
13642              RTRIM(p_project_in.labor_disc_reason_code)||''''||',';
13643 */
13644              l_statement  := l_statement ||
13645                        ' LABOR_DISC_REASON_CODE = :lb_disc_rn_cd ,';
13646              l_b_lb_disc_rn_cd_fg2 := 'Y';
13647 --end bug 2955326
13648              l_update_yes_flag := 'Y';
13649           END IF;
13650        END IF;
13651   END IF;
13652 
13653   ELSE
13654 
13655    l_statement  := l_statement ||
13656                        ' LABOR_SCHEDULE_FIXED_DATE =  '''''||',';
13657 
13658       l_statement  := l_statement ||
13659                        ' LABOR_SCHEDULE_DISCOUNT =  '''''||',';
13660 
13661       l_statement  := l_statement ||
13662                        ' LABOR_DISC_REASON_CODE =  '''''||',';
13663 
13664       l_statement  := l_statement ||
13665                        ' EMP_BILL_RATE_SCHEDULE_ID =  '''''||',';
13666 
13667       l_statement  := l_statement ||
13668                        ' JOB_BILL_RATE_SCHEDULE_ID =  '''''||',';
13669 
13670 
13671      l_update_yes_flag := 'Y';
13672 END IF;
13673 
13674  IF l_out_labor_sch_type = 'I' OR l_out_nl_labor_sch_type = 'I' THEN
13675 
13676       IF p_project_in.REV_IND_RATE_SCH_ID  <>
13677 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13678           AND p_project_in.REV_IND_RATE_SCH_ID IS NOT NULL  THEN
13679           IF NVL(p_project_in.REV_IND_RATE_SCH_ID,
13680 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13681            <> NVL(l_project_rec.REV_IND_RATE_SCH_ID,
13682 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13683               THEN
13684 --bug 2955326
13685 /*
13686              l_statement  := l_statement ||
13687                        ' REV_IND_RATE_SCH_ID =  '||''''||
13688              TO_CHAR(p_project_in.REV_IND_RATE_SCH_ID)||''''||',';
13689 */
13690              l_statement  := l_statement ||
13691                        ' REV_IND_RATE_SCH_ID = :rv_ind_rt_sch_id ,';
13692              l_b_rv_ind_rt_sch_id_fg := 'Y';
13693 --end bug 2955326
13694              l_update_yes_flag := 'Y';
13695           END IF;
13696        END IF;
13697 
13698 
13699         IF p_project_in.INV_IND_RATE_SCH_ID  <>
13700 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13701           AND p_project_in.INV_IND_RATE_SCH_ID IS NOT NULL  THEN
13702           IF NVL(p_project_in.INV_IND_RATE_SCH_ID,
13703 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13704            <> NVL(l_project_rec.INV_IND_RATE_SCH_ID,
13705 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13706               THEN
13707 --bug 2955326
13708 /*
13709              l_statement  := l_statement ||
13710                        ' INV_IND_RATE_SCH_ID =  '||''''||
13711              TO_CHAR(p_project_in.INV_IND_RATE_SCH_ID)||''''||',';
13712 */
13713              l_statement  := l_statement ||
13714                        ' INV_IND_RATE_SCH_ID = :inv_ind_rt_sch_id,';
13715              l_b_inv_ind_rt_sch_id_fg := 'Y';
13716 --end bug 2955326
13717              l_update_yes_flag := 'Y';
13718           END IF;
13719        END IF;
13720 
13721 IF p_project_in.REV_IND_RATE_SCH_ID  <>
13722 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13723           AND p_project_in.REV_IND_RATE_SCH_ID IS NOT NULL  THEN
13724 
13725 BEGIN
13726 
13727 SELECT       ind_rate_schedule_type INTO l_rev_rate_sch_type
13728 FROM         pa_ind_rate_schedules
13729 WHERE        ind_rate_sch_id = p_project_in.REV_IND_RATE_SCH_ID
13730 AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
13731 
13732 
13733 EXCEPTION
13734     WHEN NO_DATA_FOUND THEN
13735   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13736                 THEN
13737                      pa_interface_utils_pub.map_new_amg_msg
13738                      ( p_old_message_code => 'PA_INVALID_REV_SCH_ID'
13739                       ,p_msg_attribute    => 'CHANGE'
13740                       ,p_resize_flag      => 'Y'
13741                       ,p_msg_context      => 'PROJ'
13742                       ,p_attribute1       => l_project_rec.segment1
13743                       ,p_attribute2       => ''
13744                       ,p_attribute3       => ''
13745                       ,p_attribute4       => ''
13746                       ,p_attribute5       => '');
13747                 END IF;
13748                 RAISE  FND_API.G_EXC_ERROR;
13749   END;
13750 
13751 ELSE
13752 
13753 IF l_project_rec.REV_IND_RATE_SCH_ID IS NOT NULL
13754 THEN
13755 
13756 SELECT       ind_rate_schedule_type INTO l_rev_rate_sch_type
13757 FROM         pa_ind_rate_schedules
13758 WHERE        ind_rate_sch_id = l_project_rec.REV_IND_RATE_SCH_ID;
13759 -- Bug 3657709
13760 /* AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
13761 
13762 END IF;
13763 
13764 END IF;
13765 
13766 IF p_project_in.INV_IND_RATE_SCH_ID  <>
13767 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13768           AND p_project_in.INV_IND_RATE_SCH_ID IS NOT NULL  THEN
13769 
13770 BEGIN
13771 
13772 SELECT       ind_rate_schedule_type INTO l_inv_rate_sch_type
13773 FROM         pa_ind_rate_schedules
13774 WHERE        ind_rate_sch_id = p_project_in.INV_IND_RATE_SCH_ID
13775 AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
13776 
13777 
13778 EXCEPTION
13779     WHEN NO_DATA_FOUND THEN
13780   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13781                 THEN
13782                      pa_interface_utils_pub.map_new_amg_msg
13783                      ( p_old_message_code => 'PA_INVALID_INV_SCH_ID'
13784                       ,p_msg_attribute    => 'CHANGE'
13785                       ,p_resize_flag      => 'Y'
13786                       ,p_msg_context      => 'PROJ'
13787                       ,p_attribute1       => l_project_rec.segment1
13788                       ,p_attribute2       => ''
13789                       ,p_attribute3       => ''
13790                       ,p_attribute4       => ''
13791                       ,p_attribute5       => '');
13792                 END IF;
13793                 RAISE  FND_API.G_EXC_ERROR;
13794   END;
13795 
13796 ELSE
13797 IF l_project_rec.INV_IND_RATE_SCH_ID IS NOT NULL
13798 THEN
13799 
13800 SELECT       ind_rate_schedule_type INTO l_inv_rate_sch_type
13801 FROM         pa_ind_rate_schedules
13802 WHERE        ind_rate_sch_id = l_project_rec.INV_IND_RATE_SCH_ID;
13803 -- Bug 3657709
13804 /* AND          trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
13805 
13806 END IF;
13807 
13808 END IF;
13809 
13810 
13811 IF l_rev_rate_sch_type = 'P' AND l_project_rec.REV_IND_SCH_FIXED_DATE IS NOT NULL THEN
13812      l_statement  := l_statement ||
13813                        ' REV_IND_SCH_FIXED_DATE =  '''''||',';
13814      l_update_yes_flag := 'Y';
13815 ELSE
13816   IF ((p_project_in.rev_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13817    AND p_project_in.rev_ind_sch_fixed_date IS NOT NULL) OR (p_project_in.rev_ind_sch_fixed_date IS NULL))
13818      THEN
13819         IF (p_project_in.rev_ind_sch_fixed_date
13820          <> NVL(l_project_rec.rev_ind_sch_fixed_date,
13821 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (l_project_rec.rev_ind_sch_fixed_date IS NULL))
13822         THEN
13823 --bug 2955326
13824 /*
13825              l_statement  := l_statement ||
13826                        ' rev_ind_sch_fixed_date =  to_date('''||
13827                           to_char(p_project_in.rev_ind_sch_fixed_date,'YYYY/MM/DD')||
13828                              ''', ''YYYY/MM/DD''),';
13829 */
13830              l_statement  := l_statement ||
13831                        ' rev_ind_sch_fixed_date = :rev_ind_sch_fx_dt ,';
13832              l_b_ind_sch_fx_dt_fg := 'Y';
13833 --end bug 2955326
13834              l_update_yes_flag := 'Y';
13835           END IF;
13836        END IF;
13837  END IF;
13838 
13839  IF l_inv_rate_sch_type = 'P'  AND l_project_rec.INV_IND_SCH_FIXED_DATE IS NOT NULL
13840   THEN
13841     l_statement  := l_statement ||
13842                        ' INV_IND_SCH_FIXED_DATE =  '''''||',';
13843     l_update_yes_flag := 'Y';
13844 ELSE
13845   IF ((p_project_in.inv_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13846    AND p_project_in.inv_ind_sch_fixed_date IS NOT NULL) OR (p_project_in.inv_ind_sch_fixed_date IS NULL))
13847    THEN
13848           IF (p_project_in.inv_ind_sch_fixed_date
13849     <> NVL(l_project_rec.inv_ind_sch_fixed_date,
13850 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (p_project_in.inv_ind_sch_fixed_date IS NULL))
13851        THEN
13852 --bug 2955326
13853 /*
13854              l_statement  := l_statement ||
13855                        ' inv_ind_sch_fixed_date =  to_date('''||
13856                           to_char(p_project_in.inv_ind_sch_fixed_date,'YYYY/MM/DD')||
13857                              ''', ''YYYY/MM/DD''),';
13858 */
13859              l_statement  := l_statement ||
13860                        ' inv_ind_sch_fixed_date = :inv_ind_sch_fx_dt,';
13861              l_b_inv_ind_sch_fx_dt_fg := 'Y';
13862 --end bug 2955326
13863              l_update_yes_flag := 'Y';
13864           END IF;
13865        END IF;
13866   END IF;
13867 
13868    ELSE
13869       l_statement  := l_statement ||
13870                        ' REV_IND_RATE_SCH_ID =  '''''||',';
13871 
13872 
13873      l_statement  := l_statement ||
13874                        ' INV_IND_RATE_SCH_ID =  '''''||',';
13875 
13876 
13877      l_statement  := l_statement ||
13878                        ' REV_IND_SCH_FIXED_DATE =  '''''||',';
13879 
13880      l_statement  := l_statement ||
13881                        ' INV_IND_SCH_FIXED_DATE =  '''''||',';
13882      l_update_yes_flag := 'Y';
13883 END IF;
13884 
13885     IF l_out_nl_labor_sch_type = 'B' THEN
13886 
13887     IF (p_project_in.non_labor_bill_rate_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13888       AND p_project_in.non_labor_bill_rate_org_id IS NOT NULL)
13889         THEN
13890           IF p_project_in.non_labor_bill_rate_org_id <>
13891         NVL(l_project_rec.non_labor_bill_rate_org_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13892               THEN
13893 --bug 2955326
13894 /*
13895              l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ' ||
13896                   TO_CHAR(p_project_in.non_labor_bill_rate_org_id)||',';
13897 */
13898              l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = :nn_lb_bill_rt_org_id,';
13899              l_b_nn_lb_bill_rt_org_id_fg := 'Y';
13900 --bug 2955326
13901              l_update_yes_flag := 'Y';
13902           END IF;
13903        END IF;
13904 
13905   IF (p_project_in.non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13906   AND p_project_in.non_lab_std_bill_rt_sch_id IS NOT NULL)
13907      THEN
13908     IF NVL(p_project_in.non_lab_std_bill_rt_sch_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13909       <> NVL(l_project_rec.non_lab_std_bill_rt_sch_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13910        THEN
13911 
13912 
13913 BEGIN
13914          SELECT std_bill_rate_schedule INTO l_std_bill_rate_schedule
13915    FROM pa_std_bill_rate_schedules_all
13916    WHERE bill_rate_sch_id = p_project_in.non_lab_std_bill_rt_sch_id;
13917 
13918 --bug 2955326
13919 /*
13920              l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||''''||
13921                   TO_CHAR(p_project_in.non_lab_std_bill_rt_sch_id)||''''||',';
13922 */
13923 /*
13924              l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ' ||''''||
13925                   RTRIM(l_std_bill_rate_schedule)||''''||',';
13926 */
13927              l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = :nn_lab_std_bill_rt_sch_id,';
13928              l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = :nn_lb_std_bill_rt_sch,';
13929              l_b_n_lb_st_bl_rt_sc_id_fg2 := 'Y';
13930 --end bug 2955326
13931              l_update_yes_flag := 'Y';
13932 EXCEPTION
13933    WHEN NO_DATA_FOUND THEN
13934      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13935                 THEN
13936                      pa_interface_utils_pub.map_new_amg_msg
13937                      ( p_old_message_code => 'PA_PRJ_NL_SCHEDULE_ID'
13938                       ,p_msg_attribute    => 'CHANGE'
13939                       ,p_resize_flag      => 'Y'
13940                       ,p_msg_context      => 'TASK'
13941                       ,p_attribute1       => l_amg_segment1
13942                       ,p_attribute2       => l_amg_task_number
13943                       ,p_attribute3       => ''
13944                       ,p_attribute4       => ''
13945                       ,p_attribute5       => '');
13946                 END IF;
13947                 RAISE  FND_API.G_EXC_ERROR;
13948      END;
13949 
13950   END IF;
13951  END IF;
13952 
13953  /* Should be able to update null*/
13954 IF ((p_project_in.non_labor_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13955  AND p_project_in.non_labor_schedule_fixed_date IS NOT NULL) OR (p_project_in.non_labor_schedule_fixed_date IS NULL))
13956    THEN
13957      IF ((p_project_in.non_labor_schedule_fixed_date
13958        <> NVL(l_project_rec.non_labor_schedule_fixed_date,
13959 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)) OR (p_project_in.non_labor_schedule_fixed_date IS NULL))
13960               THEN
13961 --bug 2955326
13962 /*
13963              l_statement  := l_statement ||
13964                        ' NON_LABOR_SCHEDULE_FIXED_DATE =  to_date('''||
13965                           to_char(p_project_in.non_labor_schedule_fixed_date,'YYYY/MM/DD')||
13966                              ''', ''YYYY/MM/DD''),';
13967 */
13968              l_statement  := l_statement ||
13969                        ' NON_LABOR_SCHEDULE_FIXED_DATE = :nn_lb_sch_fx_dt,';
13970              l_b_nn_lb_sch_fx_dt_fg := 'Y';
13971 --end bug 2955326
13972              l_update_yes_flag := 'Y';
13973           END IF;
13974        END IF;
13975 
13976 /* Should be able to update null*/
13977 IF ((p_project_in.non_labor_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13978  AND p_project_in.non_labor_schedule_discount IS NOT NULL) OR (p_project_in.non_labor_schedule_discount IS NULL))
13979    THEN
13980    -- bug 8975097
13981        IF (p_project_in.non_labor_schedule_discount <> NVL(l_project_rec.non_labor_schedule_discount,
13982 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR (p_project_in.non_labor_schedule_discount IS NULL))
13983               THEN
13984 --bug 2955326
13985 /*
13986              l_statement  := l_statement ||
13987                        '  NON_LABOR_SCHEDULE_DISCOUNT   =  '||''''||
13988              TO_CHAR(p_project_in.non_labor_schedule_discount)||''''||',';
13989 */
13990              l_statement  := l_statement ||
13991                        '  NON_LABOR_SCHEDULE_DISCOUNT = :nn_lb_sch_dst ,';
13992              l_b_nn_lb_sch_dst_fg := 'Y';
13993 --end bug 2955326
13994              l_update_yes_flag := 'Y';
13995           END IF;
13996        END IF;
13997 
13998 IF p_project_in.non_labor_schedule_discount IS NULL
13999  THEN
14000    l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
14001    l_update_yes_flag := 'Y';
14002 ELSE
14003     IF (p_project_in.non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14004       AND p_project_in.non_labor_disc_reason_code IS NOT NULL)
14005       THEN
14006           IF NVL(p_project_in.non_labor_disc_reason_code,
14007 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14008            <> NVL(l_project_rec.non_labor_disc_reason_code,
14009 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14010               THEN
14011 --bug 2955326
14012 /*
14013              l_statement  := l_statement ||
14014                        ' NON_LABOR_DISC_REASON_CODE =  '||''''||
14015              RTRIM(p_project_in.non_labor_disc_reason_code)||''''||',';
14016 */
14017              l_statement  := l_statement ||
14018                        ' NON_LABOR_DISC_REASON_CODE =  :n_lb_dis_rn_cd,';
14019              l_b_n_lb_disc_rsn_cd_fg2 := 'Y';
14020 --end bug 2955326
14021              l_update_yes_flag := 'Y';
14022           END IF;
14023        END IF;
14024   END IF;
14025 
14026   ELSE
14027 
14028     l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = '''''||',';
14029 
14030       l_statement := l_statement || ' NON_LABOR_SCHEDULE_FIXED_DATE = ''''' ||',';
14031 
14032       l_statement := l_statement || ' NON_LABOR_SCHEDULE_DISCOUNT = '''''||',';
14033 
14034       l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
14035 
14036       l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ''''' ||',';
14037 
14038       l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ''''' ||',';
14039      l_update_yes_flag := 'Y';
14040 END IF;
14041 
14042  /* Code for the bug 2802984 ends*/
14043 
14044 --Sakthi MCB
14045 
14046        IF p_project_in.competence_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14047           AND p_project_in.competence_match_wt IS NOT NULL  THEN
14048           IF p_project_in.competence_match_wt <> l_project_rec.competence_match_wt
14049               THEN
14050 --bug 2955326
14051 /*
14052              l_statement := l_statement || ' COMPETENCE_MATCH_WT = ' ||
14053                   TO_CHAR(p_project_in.competence_match_wt)||',';
14054 */
14055              l_statement := l_statement || ' COMPETENCE_MATCH_WT = :comp_match_wt ,';
14056              l_b_comp_mtch_wt_flag := 'Y';
14057 --end bug 2955326
14058              l_update_yes_flag := 'Y';
14059           END IF;
14060        END IF;
14061 
14062        IF p_project_in.availability_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14063           AND p_project_in.availability_match_wt IS NOT NULL  THEN
14064           IF p_project_in.availability_match_wt <> l_project_rec.availability_match_wt
14065               THEN
14066 --bug 2955326
14067 /*
14068              l_statement := l_statement || ' AVAILABILITY_MATCH_WT = ' ||
14069                   TO_CHAR(p_project_in.availability_match_wt)||',';
14070 */
14071              l_statement := l_statement || ' AVAILABILITY_MATCH_WT = :avail_mtch_wt ,';
14072              l_b_avail_mtch_wt_flag := 'Y';
14073 --end bug 2955326
14074              l_update_yes_flag := 'Y';
14075           END IF;
14076        END IF;
14077 
14078        IF p_project_in.job_level_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14079           AND p_project_in.job_level_match_wt IS NOT NULL  THEN
14080           IF p_project_in.job_level_match_wt <> l_project_rec.job_level_match_wt
14081               THEN
14082 --bug 2955326
14083 /*
14084              l_statement := l_statement || ' JOB_LEVEL_MATCH_WT = ' ||
14085                   TO_CHAR(p_project_in.job_level_match_wt)||',';
14086 */
14087              l_statement := l_statement || ' JOB_LEVEL_MATCH_WT = :jb_lvl_mt_wt ,';
14088              l_b_jb_lvl_mt_wt_flag := 'Y';
14089 --end bug 2955326
14090              l_update_yes_flag := 'Y';
14091           END IF;
14092        END IF;
14093 
14094        IF p_project_in.search_min_availability <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14095           AND p_project_in.search_min_availability IS NOT NULL  THEN
14096           IF p_project_in.search_min_availability <> l_project_rec.search_min_availability
14097               THEN
14098 --bug 2955326
14099 /*
14100              l_statement := l_statement || ' SEARCH_MIN_AVAILABILITY = ' ||
14101                   TO_CHAR(p_project_in.search_min_availability)||',';
14102 */
14103              l_statement := l_statement || ' SEARCH_MIN_AVAILABILITY = :srch_min_avail ,';
14104              l_b_search_min_avail_flag := 'Y';
14105 --end bug 2955326
14106              l_update_yes_flag := 'Y';
14107           END IF;
14108        END IF;
14109 
14110        IF p_project_in.search_org_hier_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14111           AND p_project_in.search_org_hier_id IS NOT NULL  THEN
14112           IF p_project_in.search_org_hier_id <> l_project_rec.search_org_hier_id
14113               THEN
14114 --bug 2955326
14115 /*
14116              l_statement := l_statement || ' SEARCH_ORG_HIER_ID = ' ||
14117                   TO_CHAR(p_project_in.search_org_hier_id)||',';
14118 */
14119              l_statement := l_statement || ' SEARCH_ORG_HIER_ID = :srch_org_hier_id ,';
14120              l_b_srch_org_hier_id_flag := 'Y';
14121 --end bug 2955326
14122              l_update_yes_flag := 'Y';
14123           END IF;
14124        END IF;
14125 
14126        IF p_project_in.search_starting_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14127           AND p_project_in.search_starting_org_id IS NOT NULL  THEN
14128           IF p_project_in.search_starting_org_id <> l_project_rec.search_starting_org_id
14129               THEN
14130 --bug 2955326
14131 /*
14132              l_statement := l_statement || ' SEARCH_ORG_HIER_ID = ' ||
14133                   TO_CHAR(p_project_in.search_starting_org_id)||',';
14134 */
14135              l_statement := l_statement || ' SEARCH_ORG_HIER_ID = :srch_org_hier_id ,';
14136              l_b_srch_st_org_id_flag := 'Y';
14137 --end bug 2955326
14138              l_update_yes_flag := 'Y';
14139           END IF;
14140        END IF;
14141 
14142        IF p_project_in.min_cand_score_reqd_for_nom <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14143           AND p_project_in.min_cand_score_reqd_for_nom IS NOT NULL  THEN
14144           IF p_project_in.min_cand_score_reqd_for_nom <> l_project_rec.min_cand_score_reqd_for_nom
14145               THEN
14146 --bug 2955326
14147 /*
14148              l_statement := l_statement || ' MIN_CAND_SCORE_REQD_FOR_NOM = ' ||
14149                   TO_CHAR(p_project_in.min_cand_score_reqd_for_nom)||',';
14150 */
14151              l_statement := l_statement || ' MIN_CAND_SCORE_REQD_FOR_NOM = :min_can_sc_req_for_nom ,';
14152              l_b_min_can_sc_req_for_nom := 'Y';
14153 --end bug 2955326
14154              l_update_yes_flag := 'Y';
14155           END IF;
14156        END IF;
14157 
14158 -- Bug 6144566: Changes start
14159 -- Bug 6144566: Introduced MCB related validations
14160 
14161        IF p_project_in.multi_currency_billing_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14162           AND p_project_in.multi_currency_billing_flag IS NOT NULL  THEN
14163           IF NVL(p_project_in.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14164            <> NVL(l_project_rec.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14165             -- if attempting to change MCB flag; check if it can be allowed
14166             IF NVL(pa_multi_currency_billing.check_mcb_trans_exist(p_project_in.pa_project_id),'N') = 'Y'
14167                OR NVL(pa_multi_currency_billing.check_mcb_setup_exists(p_project_in.pa_project_id),'N') = 'Y' THEN
14168                IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14169 	          FND_MESSAGE.SET_NAME('PA','PA_MCB_ALLOW_NO_CHG_AMG');  -- Cannot change MCB flag
14170 	          FND_MSG_PUB.ADD;
14171 	          RAISE  FND_API.G_EXC_ERROR;
14172                END IF;
14173 
14174             END IF;
14175 
14176             l_statement  := l_statement || ' MULTI_CURRENCY_BILLING_FLAG = :multi_crncy_bil_flag ,';
14177             l_b_multi_crncy_bil_flag := 'Y';
14178             l_update_yes_flag := 'Y';
14179 
14180           END IF;
14181 
14182           -- do MCB related validations, if MCB flag is 'Y'
14183                IF p_project_in.multi_currency_billing_flag = 'Y' THEN -- do MCB related validations
14184 
14185                   -- Project Currency related attributes
14186                   IF p_project_in.PROJECT_BIL_RATE_TYPE is NULL
14187                      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
14188                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14189 	                FND_MESSAGE.SET_NAME('PA','PA_PROJ_RATE_TYPE_INV_AMG');
14190 	                FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
14191 	                FND_MSG_PUB.ADD;
14192 	                RAISE  FND_API.G_EXC_ERROR;
14193                      END IF;
14194                   ELSE
14195                      IF p_project_in.PROJECT_BIL_RATE_TYPE = 'User' THEN
14196                         IF p_project_in.PROJECT_BIL_EXCHANGE_RATE is NULL
14197                            OR p_project_in.PROJECT_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14198                            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.
14199 	                      FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PC_AMG');
14200 	                      FND_MSG_PUB.ADD;
14201 	                      RAISE  FND_API.G_EXC_ERROR;
14202                            END IF;
14203                         END IF;
14204 
14205                         l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14206 	        	l_b_proj_bil_xch_rt_flag := 'Y';
14207                         l_update_yes_flag := 'Y';
14208 
14209                      ELSE  -- non-User type
14210                         IF p_project_in.PROJECT_BIL_RATE_DATE_CODE is NULL
14211                            OR p_project_in.PROJECT_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14212 
14213                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14214                               FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
14215                               FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
14216                               FND_MSG_PUB.ADD;
14217                               RAISE  FND_API.G_EXC_ERROR;
14218                            END IF;
14219                         ELSE
14220                            IF p_project_in.PROJECT_BIL_RATE_DATE_CODE = 'FIXED_DATE' THEN  --Modified for bug 6332591
14221                               IF p_project_in.PROJECT_BIL_RATE_DATE is NULL
14222                                  OR p_project_in.PROJECT_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
14223                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14224 	        	            FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
14225                                     FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
14226 	        	            FND_MSG_PUB.ADD;
14227 	        	            RAISE  FND_API.G_EXC_ERROR;
14228                                  END IF;
14229                               END IF;
14230                            END IF;
14231                            l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14232 	        	   l_b_prj_bil_rt_dt_flag := 'Y';
14233                            l_update_yes_flag := 'Y';
14234                         END IF;
14235 
14236                         l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14237 	        	l_b_prj_bil_rt_dt_code_flag := 'Y';
14238                         l_update_yes_flag := 'Y';
14239 
14240                      END IF;
14241 
14242                      l_statement  := l_statement || ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14243                      l_b_proj_bil_rt_tp_flag := 'Y';
14244                      l_update_yes_flag := 'Y';
14245 
14246                   END IF;
14247 
14248 
14249                   -- Project Functional Currency related attributes
14250                   IF p_project_in.PROJFUNC_BIL_RATE_TYPE is NULL
14251                      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
14252                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14253         	        FND_MESSAGE.SET_NAME('PA','PA_PFC_RATE_TYPE_INV_AMG');
14254         	        FND_MSG_PUB.ADD;
14255         	        RAISE  FND_API.G_EXC_ERROR;
14256                      END IF;
14257                   ELSE
14258                      IF p_project_in.PROJFUNC_BIL_RATE_TYPE = 'User' THEN
14259                         IF p_project_in.PROJFUNC_BIL_EXCHANGE_RATE is NULL
14260                            OR p_project_in.PROJFUNC_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14261                            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.
14262         	              FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PF_AMG');
14263         	              FND_MSG_PUB.ADD;
14264         	              RAISE  FND_API.G_EXC_ERROR;
14265                            END IF;
14266                         END IF;
14267 
14268                         l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14269         		l_b_pjfnc_bil_xch_rt_flag := 'Y';
14270                         l_update_yes_flag := 'Y';
14271 
14272                      ELSE  -- non-User type
14273                         IF p_project_in.PROJFUNC_BIL_RATE_DATE_CODE is NULL
14274                            OR p_project_in.PROJFUNC_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14275 
14276                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14277                               FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
14278                               FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
14279                               FND_MSG_PUB.ADD;
14280                               RAISE  FND_API.G_EXC_ERROR;
14281                            END IF;
14282                         ELSE
14283                            IF p_project_in.PROJFUNC_BIL_RATE_DATE_CODE = 'FIXED_DATE' THEN  --Modified for bug 6332591
14284                               IF p_project_in.PROJFUNC_BIL_RATE_DATE is NULL
14285                                  OR p_project_in.PROJFUNC_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
14286                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14287 	        	            FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
14288                                     FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
14289         		            FND_MSG_PUB.ADD;
14290         		            RAISE  FND_API.G_EXC_ERROR;
14291                                  END IF;
14292                               END IF;
14293                            END IF;
14294                            l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14295         		   l_b_prjfnc_bil_rt_dt_flag := 'Y';
14296                            l_update_yes_flag := 'Y';
14297                         END IF;
14298                         l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14299         		l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14300                         l_update_yes_flag := 'Y';
14301                      END IF;
14302 
14303                      l_statement  := l_statement || ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14304         	     l_b_prjfnc_bil_rt_tp_flag := 'Y';
14305                      l_update_yes_flag := 'Y';
14306 
14307                   END IF;
14308 
14309 
14310                   -- Funding Currency related attributes
14311                   IF p_project_in.FUNDING_RATE_TYPE is NULL
14312                      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
14313                      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14314         	        FND_MESSAGE.SET_NAME('PA','PA_FUND_RATE_TYPE_INV_AMG');
14315         	        FND_MSG_PUB.ADD;
14316         	        RAISE  FND_API.G_EXC_ERROR;
14317                      END IF;
14318                   ELSE
14319                      IF p_project_in.FUNDING_RATE_TYPE = 'User' THEN
14320                         IF p_project_in.FUNDING_EXCHANGE_RATE is NULL
14321                            OR p_project_in.FUNDING_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14322                            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.
14323         	              FND_MESSAGE.SET_NAME('PA','PA_EXCHANGE_RATE_NULL');
14324         	              FND_MSG_PUB.ADD;
14325         	              RAISE  FND_API.G_EXC_ERROR;
14326                            END IF;
14327                         END IF;
14328                         l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14329         		l_b_fnding_xch_rt_flag := 'Y';
14330                         l_update_yes_flag := 'Y';
14331 
14332                      ELSE  -- non-User type
14333                         IF p_project_in.FUNDING_RATE_DATE_CODE is NULL
14334                            OR p_project_in.FUNDING_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14335 
14336                            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14337                               FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
14338                               FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
14339                               FND_MSG_PUB.ADD;
14340                               RAISE  FND_API.G_EXC_ERROR;
14341                            END IF;
14342                         ELSE
14343                            IF p_project_in.FUNDING_RATE_DATE_CODE = 'FIXED_DATE' THEN  --Modified for bug 6332591
14344                               IF p_project_in.FUNDING_RATE_DATE is NULL
14345                                  OR p_project_in.FUNDING_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
14346                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14347 	        	            FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
14348                                     FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
14349         		            FND_MSG_PUB.ADD;
14350         		            RAISE  FND_API.G_EXC_ERROR;
14351                                  END IF;
14352                               END IF;
14353                            END IF;
14354                            l_statement  := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14355         		   l_b_fnding_rt_dt_flag := 'Y';
14356                            l_update_yes_flag := 'Y';
14357                         END IF;
14358                         l_statement  := l_statement || ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14359         		l_b_fndng_rt_dt_cd_flag := 'Y';
14360                         l_update_yes_flag := 'Y';
14361                      END IF;
14362 
14363                      l_statement  := l_statement || ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14364         	     l_b_fnding_rt_type_flag := 'Y';
14365                      l_update_yes_flag := 'Y';
14366 
14367                   END IF;
14368 
14369                ELSE  -- do no MCB related validations
14370 
14371                  IF ((p_project_in.project_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14372 	            AND p_project_in.project_bil_exchange_rate IS NOT NULL)
14373 	            OR  p_project_in.project_bil_exchange_rate IS NULL) THEN
14374 	            IF NVL(p_project_in.project_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14375 	            <> NVL(l_project_rec.project_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14376 	         	l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14377 	        	l_b_proj_bil_xch_rt_flag := 'Y';
14378 	        	l_update_yes_flag := 'Y';
14379 	            END IF;
14380 	         END IF;
14381 
14382                  IF ((p_project_in.project_bil_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14383 		    AND p_project_in.project_bil_rate_date_code IS NOT NULL)
14384 		    OR p_project_in.project_bil_rate_date_code IS NULL) THEN
14385 		    IF NVL(p_project_in.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14386 		       <> NVL(l_project_rec.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14387 		       l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14388 		       l_b_prj_bil_rt_dt_code_flag := 'Y';
14389 		       l_update_yes_flag := 'Y';
14390 		    END IF;
14391 		 END IF;
14392 
14393 		 IF ((p_project_in.project_bil_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14394 		    AND p_project_in.project_bil_rate_type IS NOT NULL)
14395 		    OR p_project_in.project_bil_rate_type IS NULL) THEN
14396 		    IF NVL(p_project_in.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14397 		       <> NVL(l_project_rec.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14398 		       l_statement  := l_statement || ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14399 		       l_b_proj_bil_rt_tp_flag := 'Y';
14400 		       l_update_yes_flag := 'Y';
14401 		    END IF;
14402 		 END IF;
14403 
14404 		 IF ((p_project_in.project_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14405 		    AND p_project_in.project_bil_rate_date IS NOT NULL)
14406 		    OR p_project_in.project_bil_rate_date IS NULL) THEN
14407 		    IF NVL(p_project_in.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14408 		       <> NVL(l_project_rec.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14409 		       l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14410 		       l_b_prj_bil_rt_dt_flag := 'Y';
14411 		       l_update_yes_flag := 'Y';
14412 		    END IF;
14413 		 END IF;
14414 
14415 	         IF ((p_project_in.projfunc_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14416 	            AND p_project_in.projfunc_bil_exchange_rate IS NOT NULL)
14417 	            OR  p_project_in.projfunc_bil_exchange_rate IS NULL) THEN
14418 	            IF NVL(p_project_in.projfunc_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14419 	            <> NVL(l_project_rec.projfunc_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14420 	        	l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14421 	        	l_b_pjfnc_bil_xch_rt_flag := 'Y';
14422 	        	l_update_yes_flag := 'Y';
14423 	            END IF;
14424 	         END IF;
14425 
14426 		 IF ((p_project_in.projfunc_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14427 		    AND p_project_in.projfunc_bil_rate_date IS NOT NULL)
14428 		    OR p_project_in.projfunc_bil_rate_date IS NULL) THEN
14429 		    IF NVL(p_project_in.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14430 		       <> NVL(l_project_rec.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14431 		       l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14432 		       l_b_prjfnc_bil_rt_dt_flag := 'Y';
14433 		       l_update_yes_flag := 'Y';
14434 		    END IF;
14435 		 END IF;
14436 
14437                  IF ((p_project_in.projfunc_bil_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14438 		    AND p_project_in.projfunc_bil_rate_date_code IS NOT NULL)
14439 		    OR p_project_in.projfunc_bil_rate_date_code IS NULL) THEN
14440 		    IF NVL(p_project_in.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14441 		       <> NVL(l_project_rec.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14442 		       l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14443 		       l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14444 		       l_update_yes_flag := 'Y';
14445 		    END IF;
14446 		 END IF;
14447 
14448 		 IF ((p_project_in.projfunc_bil_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14449 		    AND p_project_in.projfunc_bil_rate_type IS NOT NULL)
14450 		    OR p_project_in.projfunc_bil_rate_type IS NULL) THEN
14451 		    IF NVL(p_project_in.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14452 		       <> NVL(l_project_rec.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14453 		       l_statement  := l_statement || ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14454 		       l_b_prjfnc_bil_rt_tp_flag := 'Y';
14455 		       l_update_yes_flag := 'Y';
14456 		    END IF;
14457 		 END IF;
14458 
14459 	         IF ((p_project_in.funding_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14460 	            AND p_project_in.funding_exchange_rate IS NOT NULL)
14461 	            OR  p_project_in.funding_exchange_rate IS NULL) THEN
14462 	            IF NVL(p_project_in.funding_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <>
14463 	        	NVL(l_project_rec.funding_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14464 	        	l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14465 	        	l_b_fnding_xch_rt_flag := 'Y';
14466 	        	l_update_yes_flag := 'Y';
14467 	            END IF;
14468                  END IF;
14469 
14470 		 IF ((p_project_in.funding_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14471 		    AND p_project_in.funding_rate_date IS NOT NULL)
14472 		    OR p_project_in.funding_rate_date IS NULL) THEN
14473 		    IF NVL(p_project_in.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14474 		       <> NVL(l_project_rec.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14475 		       l_statement  := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14476 		       l_b_fnding_rt_dt_flag := 'Y';
14477 		       l_update_yes_flag := 'Y';
14478 		    END IF;
14479                  END IF;
14480 
14481 		 IF ((p_project_in.funding_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14482 		    AND p_project_in.funding_rate_date_code IS NOT NULL)
14483 		    OR p_project_in.funding_rate_date_code IS NULL) THEN
14484 		    IF NVL(p_project_in.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14485 		       <> NVL(l_project_rec.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14486 		       l_statement  := l_statement || ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14487 		       l_b_fndng_rt_dt_cd_flag := 'Y';
14488 		       l_update_yes_flag := 'Y';
14489 		    END IF;
14490 		 END IF;
14491 
14492 		 IF ((p_project_in.funding_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14493 		    AND p_project_in.funding_rate_type IS NOT NULL)
14494 		    OR p_project_in.funding_rate_type IS NULL) THEN
14495 		    IF NVL(p_project_in.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14496 		       <> NVL(l_project_rec.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14497 		       l_statement  := l_statement || ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14498 		       l_b_fnding_rt_type_flag := 'Y';
14499 		       l_update_yes_flag := 'Y';
14500 		    END IF;
14501                  END IF;
14502 
14503                END IF;
14504 
14505        END IF;
14506 
14507 -- Bug 6144566: Changes end
14508 
14509 /* Commenting the below code for bug #4630836 as the 'non_lab_std_bill_rt_sch_id' column
14510    is getting updated in the code added as part of the fix for the bug 2802984 and the below
14511    code is causing duplicate column updation error.
14512 
14513        IF p_project_in.non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14514           AND p_project_in.non_lab_std_bill_rt_sch_id IS NOT NULL  THEN
14515           IF p_project_in.non_lab_std_bill_rt_sch_id <> l_project_rec.non_lab_std_bill_rt_sch_id
14516               THEN
14517 --bug 2955326
14518 --
14519 --             l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||
14520 --                  TO_CHAR(p_project_in.non_lab_std_bill_rt_sch_id)||',';
14521 --
14522              l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = :n_lb_std_bill_rt_sch_id ,';
14523              l_b_nn_lb_std_bl_rt_sch_id_f := 'Y';
14524 --end bug 2955326
14525              l_update_yes_flag := 'Y';
14526           END IF;
14527        END IF; */
14528 
14529 -- Bug 6144566: Changes start
14530 /*
14531        IF p_project_in.project_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14532           AND p_project_in.project_bil_exchange_rate IS NOT NULL  THEN
14533           IF p_project_in.project_bil_exchange_rate <> l_project_rec.project_bil_exchange_rate
14534               THEN
14535 --bug 2955326
14536 
14537              l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = ' ||
14538                   TO_CHAR(p_project_in.project_bil_exchange_rate)||',';
14539 
14540              l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14541              l_b_proj_bil_xch_rt_flag := 'Y';
14542 --end bug 2955326
14543              l_update_yes_flag := 'Y';
14544           END IF;
14545        END IF;
14546 
14547        IF p_project_in.projfunc_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14548           AND p_project_in.projfunc_bil_exchange_rate IS NOT NULL  THEN
14549           IF p_project_in.projfunc_bil_exchange_rate <> l_project_rec.projfunc_bil_exchange_rate
14550               THEN
14551 --bug 2955326
14552 
14553              l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = ' ||
14554                   TO_CHAR(p_project_in.projfunc_bil_exchange_rate)||',';
14555 
14556              l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14557              l_b_pjfnc_bil_xch_rt_flag := 'Y';
14558 --end bug 2955326
14559              l_update_yes_flag := 'Y';
14560           END IF;
14561        END IF;
14562 
14563        IF p_project_in.funding_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14564           AND p_project_in.funding_exchange_rate IS NOT NULL  THEN
14565           IF p_project_in.funding_exchange_rate <> l_project_rec.funding_exchange_rate
14566               THEN
14567 --bug 2955326
14568 
14569              l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = ' ||
14570                   TO_CHAR(p_project_in.funding_exchange_rate)||',';
14571 
14572              l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14573              l_b_fnding_xch_rt_flag := 'Y';
14574 --end bug 2955326
14575              l_update_yes_flag := 'Y';
14576           END IF;
14577        END IF;
14578 */
14579 -- Bug 6144566: Changes end
14580 
14581        IF p_project_in.enable_automated_search  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14582           AND p_project_in.enable_automated_search IS NOT NULL  THEN
14583           IF NVL(p_project_in.enable_automated_search, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14584            <> NVL(l_project_rec.enable_automated_search, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14585               THEN
14586 --bug 2955326
14587 /*
14588              l_statement  := l_statement ||
14589                        ' ENABLE_AUTOMATED_SEARCH =  '||''''||
14590              RTRIM(p_project_in.enable_automated_search)||''''||',';
14591 */
14592              l_statement  := l_statement ||
14593                        ' ENABLE_AUTOMATED_SEARCH = :enable_auto_srch ,';
14594              l_b_enable_auto_srch_flag := 'Y';
14595 --end bug 2955326
14596              l_update_yes_flag := 'Y';
14597           END IF;
14598        END IF;
14599 
14600        IF p_project_in.search_country_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14601           AND p_project_in.search_country_code IS NOT NULL  THEN
14602           IF NVL(p_project_in.search_country_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14603            <> NVL(l_project_rec.search_country_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14604               THEN
14605 --bug 2955326
14606 /*
14607              l_statement  := l_statement ||
14608                        ' SEARCH_COUNTRY_CODE =  '||''''||
14609              RTRIM(p_project_in.search_country_code)||''''||',';
14610 */
14611              l_statement  := l_statement ||
14612                        ' SEARCH_COUNTRY_CODE = :srch_cntry_code ,';
14613              l_b_srch_cntry_code_flag := 'Y';
14614 --end bug 2955326
14615              l_update_yes_flag := 'Y';
14616           END IF;
14617        END IF;
14618 
14619        IF p_project_in.invproc_currency_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14620           AND p_project_in.invproc_currency_type IS NOT NULL  THEN
14621           IF NVL(p_project_in.invproc_currency_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14622            <> NVL(l_project_rec.invproc_currency_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14623               THEN
14624 --bug 2955326
14625 /*
14626              l_statement  := l_statement ||
14627                        ' INVPROC_CURRENCY_TYPE =  '||''''||
14628              RTRIM(p_project_in.invproc_currency_type)||''''||',';
14629 */
14630              l_statement  := l_statement ||
14631                        ' INVPROC_CURRENCY_TYPE = :invproc_currency_type ,';
14632              l_b_invproc_crncy_tp_flag := 'Y';
14633 --end bug 2955326
14634              l_update_yes_flag := 'Y';
14635           END IF;
14636        END IF;
14637 
14638        IF p_project_in.revproc_currency_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14639           AND p_project_in.revproc_currency_code IS NOT NULL  THEN
14640           IF NVL(p_project_in.revproc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14641            <> NVL(l_project_rec.revproc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14642               THEN
14643 --bug 2955326
14644 /*
14645              l_statement  := l_statement ||
14646                        ' REVPROC_CURRENCY_CODE =  '||''''||
14647              RTRIM(p_project_in.revproc_currency_code)||''''||',';
14648 */
14649              l_statement  := l_statement ||
14650                        ' REVPROC_CURRENCY_CODE = :revproc_currency_code ,';
14651              l_b_revproc_crncy_cd_flag := 'Y';
14652 --end bug 2955326
14653              l_update_yes_flag := 'Y';
14654           END IF;
14655        END IF;
14656 
14657 -- Bug 6144566: Changes start
14658 /*
14659        IF p_project_in.project_bil_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14660           AND p_project_in.project_bil_rate_date_code IS NOT NULL  THEN
14661           IF NVL(p_project_in.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14662            <> NVL(l_project_rec.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14663               THEN
14664 --bug 2955326
14665 
14666              l_statement  := l_statement ||
14667                        ' PROJECT_BIL_RATE_DATE_CODE =  '||''''||
14668              RTRIM(p_project_in.project_bil_rate_date_code)||''''||',';
14669 
14670              l_statement  := l_statement ||
14671                        ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14672              l_b_prj_bil_rt_dt_code_flag := 'Y';
14673 --end bug 2955326
14674              l_update_yes_flag := 'Y';
14675           END IF;
14676        END IF;
14677 
14678        IF p_project_in.project_bil_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14679           AND p_project_in.project_bil_rate_type IS NOT NULL  THEN
14680           IF NVL(p_project_in.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14681            <> NVL(l_project_rec.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14682               THEN
14683 --bug 2955326
14684 
14685              l_statement  := l_statement ||
14686                        ' PROJECT_BIL_RATE_TYPE =  '||''''||
14687              RTRIM(p_project_in.project_bil_rate_type)||''''||',';
14688 
14689              l_statement  := l_statement ||
14690                        ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14691              l_b_proj_bil_rt_tp_flag := 'Y';
14692 --end bug 2955326
14693              l_update_yes_flag := 'Y';
14694           END IF;
14695        END IF;
14696 */
14697 -- Bug 6144566: Changes end
14698 
14699        IF p_project_in.projfunc_currency_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14700           AND p_project_in.projfunc_currency_code IS NOT NULL  THEN
14701           IF NVL(p_project_in.projfunc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14702            <> NVL(l_project_rec.projfunc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14703               THEN
14704 --bug 2955326
14705 /*
14706              l_statement  := l_statement ||
14707                        ' PROJFUNC_CURRENCY_CODE =  '||''''||
14708              RTRIM(p_project_in.projfunc_currency_code)||''''||',';
14709 */
14710              l_statement  := l_statement ||
14711                        ' PROJFUNC_CURRENCY_CODE = :prjfnc_currency_code ,';
14712              l_b_prjfnc_crncy_code_flag := 'Y';
14713 --end bug 2955326
14714              l_update_yes_flag := 'Y';
14715           END IF;
14716        END IF;
14717 
14718 -- Bug 6144566: Changes start
14719 /*
14720        IF p_project_in.projfunc_bil_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14721           AND p_project_in.projfunc_bil_rate_date_code IS NOT NULL  THEN
14722           IF NVL(p_project_in.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14723            <> NVL(l_project_rec.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14724               THEN
14725 --bug 2955326
14726 
14727              l_statement  := l_statement ||
14728                        ' PROJFUNC_BIL_RATE_DATE_CODE =  '||''''||
14729              RTRIM(p_project_in.projfunc_bil_rate_date_code)||''''||',';
14730 
14731              l_statement  := l_statement ||
14732                        ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14733              l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14734 --end bug 2955326
14735              l_update_yes_flag := 'Y';
14736           END IF;
14737        END IF;
14738 
14739        IF p_project_in.projfunc_bil_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14740           AND p_project_in.projfunc_bil_rate_type IS NOT NULL  THEN
14741           IF NVL(p_project_in.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14742            <> NVL(l_project_rec.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14743               THEN
14744 --bug 2955326
14745 
14746              l_statement  := l_statement ||
14747                        ' PROJFUNC_BIL_RATE_TYPE =  '||''''||
14748              RTRIM(p_project_in.projfunc_bil_rate_type)||''''||',';
14749 
14750              l_statement  := l_statement ||
14751                        ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14752              l_b_prjfnc_bil_rt_tp_flag := 'Y';
14753 --end bug 2955326
14754              l_update_yes_flag := 'Y';
14755           END IF;
14756        END IF;
14757 
14758        IF p_project_in.funding_rate_date_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14759           AND p_project_in.funding_rate_date_code IS NOT NULL  THEN
14760           IF NVL(p_project_in.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14761            <> NVL(l_project_rec.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14762               THEN
14763 --bug 2955326
14764 
14765              l_statement  := l_statement ||
14766                        ' FUNDING_RATE_DATE_CODE =  '||''''||
14767              RTRIM(p_project_in.funding_rate_date_code)||''''||',';
14768 
14769              l_statement  := l_statement ||
14770                        ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14771              l_b_fndng_rt_dt_cd_flag := 'Y';
14772 --end bug 2955326
14773              l_update_yes_flag := 'Y';
14774           END IF;
14775        END IF;
14776 
14777        IF p_project_in.funding_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14778           AND p_project_in.funding_rate_type IS NOT NULL  THEN
14779           IF NVL(p_project_in.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14780            <> NVL(l_project_rec.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14781               THEN
14782 --bug 2955326
14783 
14784              l_statement  := l_statement ||
14785                        ' FUNDING_RATE_TYPE =  '||''''||
14786              RTRIM(p_project_in.funding_rate_type)||''''||',';
14787 
14788              l_statement  := l_statement ||
14789                        ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14790              l_b_fnding_rt_type_flag := 'Y';
14791 --end bug 2955326
14792              l_update_yes_flag := 'Y';
14793           END IF;
14794        END IF;
14795 */
14796 -- Bug 6144566: Changes end
14797 
14798        IF p_project_in.baseline_funding_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14799           AND p_project_in.baseline_funding_flag IS NOT NULL  THEN
14800           IF NVL(p_project_in.baseline_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14801            <> NVL(l_project_rec.baseline_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14802               THEN
14803 --bug 2955326
14804 /*
14805              l_statement  := l_statement ||
14806                        ' BASELINE_FUNDING_FLAG =  '||''''||
14807              RTRIM(p_project_in.baseline_funding_flag)||''''||',';
14808 */
14809              l_statement  := l_statement ||
14810                        ' BASELINE_FUNDING_FLAG = :bsln_fnding_flag ,';
14811              l_b_bsln_fnding_flag := 'Y';
14812 --end bug 2955326
14813              l_update_yes_flag := 'Y';
14814           END IF;
14815        END IF;
14816 
14817        IF p_project_in.projfunc_cost_rate_type  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14818           AND p_project_in.projfunc_cost_rate_type IS NOT NULL  THEN
14819           IF NVL(p_project_in.projfunc_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14820            <> NVL(l_project_rec.projfunc_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14821               THEN
14822 --bug 2955326
14823 /*
14824              l_statement  := l_statement ||
14825                        ' PROJFUNC_COST_RATE_TYPE =  '||''''||
14826              RTRIM(p_project_in.projfunc_cost_rate_type)||''''||',';
14827 */
14828              l_statement  := l_statement ||
14829                        ' PROJFUNC_COST_RATE_TYPE = :projfnc_cost_rate_type ,';
14830              l_b_prjfnc_cst_rt_tp_flag := 'Y';
14831 --end bug 2955326
14832              l_update_yes_flag := 'Y';
14833           END IF;
14834        END IF;
14835 
14836        IF p_project_in.inv_by_bill_trans_curr_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14837           AND p_project_in.inv_by_bill_trans_curr_flag IS NOT NULL  THEN
14838           IF NVL(p_project_in.inv_by_bill_trans_curr_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14839            <> NVL(l_project_rec.inv_by_bill_trans_curr_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14840               THEN
14841 --bug 2955326
14842 /*
14843              l_statement  := l_statement ||
14844                        ' INV_BY_BILL_TRANS_CURR_FLAG =  '||''''||
14845              RTRIM(p_project_in.inv_by_bill_trans_curr_flag)||''''||',';
14846 */
14847              l_statement  := l_statement ||
14848                        ' INV_BY_BILL_TRANS_CURR_FLAG = :inv_by_bil_txn_cur_flag ,';
14849              l_b_inv_bill_txn_cur_flag := 'Y';
14850 --end bug 2955326
14851              l_update_yes_flag := 'Y';
14852           END IF;
14853        END IF;
14854 
14855 -- Bug 6144566: Changes start
14856 /*
14857        IF p_project_in.multi_currency_billing_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14858           AND p_project_in.multi_currency_billing_flag IS NOT NULL  THEN
14859           IF NVL(p_project_in.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14860            <> NVL(l_project_rec.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14861               THEN
14862 --bug 2955326
14863 
14864              l_statement  := l_statement ||
14865                        ' MULTI_CURRENCY_BILLING_FLAG =  '||''''||
14866              RTRIM(p_project_in.multi_currency_billing_flag)||''''||',';
14867 
14868              l_statement  := l_statement ||
14869                        ' MULTI_CURRENCY_BILLING_FLAG = :multi_crncy_bil_flag ,';
14870              l_b_multi_crncy_bil_flag := 'Y';
14871 --end bug 2955326
14872              l_update_yes_flag := 'Y';
14873           END IF;
14874        END IF;
14875 
14876        IF p_project_in.project_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14877           AND p_project_in.project_bil_rate_date IS NOT NULL  THEN
14878           IF NVL(p_project_in.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14879            <> NVL(l_project_rec.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14880               THEN
14881 --bug 2955326
14882 
14883              l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE =  to_date('''||
14884                      to_char(p_project_in.project_bil_rate_date,'YYYY/MM/DD')||
14885                              ''', ''YYYY/MM/DD''),';
14886 
14887              l_statement  := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14888              l_b_prj_bil_rt_dt_flag := 'Y';
14889 --end bug 2955326
14890              l_update_yes_flag := 'Y';
14891           END IF;
14892        END IF;
14893 
14894        IF p_project_in.projfunc_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14895           AND p_project_in.projfunc_bil_rate_date IS NOT NULL  THEN
14896           IF NVL(p_project_in.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14897            <> NVL(l_project_rec.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14898               THEN
14899 --bug 2955326
14900 
14901              l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE =  to_date('''||
14902                      to_char(p_project_in.projfunc_bil_rate_date,'YYYY/MM/DD')||
14903                              ''', ''YYYY/MM/DD''),';
14904 
14905              l_statement  := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14906              l_b_prjfnc_bil_rt_dt_flag := 'Y';
14907 --end bug 2955326
14908              l_update_yes_flag := 'Y';
14909           END IF;
14910        END IF;
14911 
14912        IF p_project_in.funding_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14913           AND p_project_in.funding_rate_date IS NOT NULL  THEN
14914           IF NVL(p_project_in.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14915            <> NVL(l_project_rec.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14916               THEN
14917 --bug 2955326
14918 
14919              l_statement  := l_statement || ' FUNDING_RATE_DATE =  to_date('''||
14920                      to_char(p_project_in.funding_rate_date,'YYYY/MM/DD')||
14921                              ''', ''YYYY/MM/DD''),';
14922 
14923              l_statement  := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14924              l_b_fnding_rt_dt_flag := 'Y';
14925 --end bug 2955326
14926              l_update_yes_flag := 'Y';
14927           END IF;
14928        END IF;
14929 */
14930 -- Bug 6144566: Changes end
14931 
14932        IF p_project_in.projfunc_cost_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14933           AND p_project_in.projfunc_cost_rate_date IS NOT NULL  THEN
14934           IF NVL(p_project_in.projfunc_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14935            <> NVL(l_project_rec.projfunc_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14936               THEN
14937 --bug 2955326
14938 /*
14939              l_statement  := l_statement || ' PROJFUNC_COST_RATE_DATE =  to_date('''||
14940                      to_char(p_project_in.projfunc_cost_rate_date,'YYYY/MM/DD')||
14941                              ''', ''YYYY/MM/DD''),';
14942 */
14943              l_statement  := l_statement || ' PROJFUNC_COST_RATE_DATE = :prjfnc_cst_rt_date ,';
14944              l_b_prjfnc_cst_rt_dt_flag := 'Y';
14945 --end bug 2955326
14946              l_update_yes_flag := 'Y';
14947           END IF;
14948        END IF;
14949 
14950 --Sakthi MCB
14951 --Sakthi Structure
14952        IF p_project_in.assign_precedes_task  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14953           AND p_project_in.assign_precedes_task IS NOT NULL  THEN
14954           IF NVL(p_project_in.assign_precedes_task, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14955            <> NVL(l_project_rec.assign_precedes_task, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14956               THEN
14957 --bug 2955326
14958 /*
14959              l_statement  := l_statement ||
14960                        ' ASSIGN_PRECEDES_TASK =  '||''''||
14961              RTRIM(p_project_in.assign_precedes_task)||''''||',';
14962 */
14963              l_statement  := l_statement ||
14964                        ' ASSIGN_PRECEDES_TASK = :asgn_prec_tsk_flg ,';
14965              l_b_asgn_prec_tsk_flag := 'Y';
14966 --end bug 2955326
14967              l_update_yes_flag := 'Y';
14968           END IF;
14969        END IF;
14970 
14971        IF p_project_in.split_cost_from_workplan_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14972           AND p_project_in.split_cost_from_workplan_flag IS NOT NULL  THEN
14973           IF NVL(p_project_in.split_cost_from_workplan_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14974            <> NVL(l_project_rec.split_cost_from_workplan_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14975               THEN
14976 --bug 2955326
14977 /*
14978              l_statement  := l_statement ||
14979                        ' SPLIT_COST_FROM_WORKPLAN_FLAG =  '||''''||
14980              RTRIM(p_project_in.split_cost_from_workplan_flag)||''''||',';
14981 */
14982              l_statement  := l_statement ||
14983                        ' SPLIT_COST_FROM_WORKPLAN_FLAG = :splt_cst_fm_wp_flag ,';
14984              l_b_splt_cst_fm_wp_flag := 'Y';
14985 --end bug 2955326
14986              l_update_yes_flag := 'Y';
14987           END IF;
14988        END IF;
14989 
14990        IF p_project_in.split_cost_from_bill_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14991           AND p_project_in.split_cost_from_bill_flag IS NOT NULL  THEN
14992           IF NVL(p_project_in.split_cost_from_bill_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14993            <> NVL(l_project_rec.split_cost_from_bill_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14994               THEN
14995 --bug 2955326
14996 /*
14997              l_statement  := l_statement ||
14998                        ' SPLIT_COST_FROM_BILL_FLAG =  '||''''||
14999              RTRIM(p_project_in.split_cost_from_bill_flag)||''''||',';
15000 */
15001              l_statement  := l_statement ||
15002                        ' SPLIT_COST_FROM_BILL_FLAG = :splt_cst_fm_bill_flag ,';
15003              l_b_splt_cst_fm_bill_flag := 'Y';
15004 --end bug 2955326
15005              l_update_yes_flag := 'Y';
15006           END IF;
15007        END IF;
15008 
15009 --Sakthi Structure
15010 --Advertisement
15011 
15012        IF p_project_in.adv_action_set_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15013           AND p_project_in.adv_action_set_id IS NOT NULL  THEN
15014           IF NVL(p_project_in.adv_action_set_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15015            <> NVL(l_project_rec.adv_action_set_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15016               THEN
15017 --bug 2955326
15018 /*
15019              l_statement  := l_statement || ' ADV_ACTION_SET_ID =  '||
15020                   TO_CHAR(p_project_in.adv_action_set_id)||',';
15021 */
15022              l_statement  := l_statement || ' ADV_ACTION_SET_ID = :adv_act_set_id ,';
15023              l_b_adv_act_set_id_flag := 'Y';
15024 --end bug 2955326
15025              l_update_yes_flag := 'Y';
15026           END IF;
15027        END IF;
15028 
15029        IF p_project_in.start_adv_action_set_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15030           AND p_project_in.start_adv_action_set_flag IS NOT NULL  THEN
15031           IF NVL(p_project_in.start_adv_action_set_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15032            <> NVL(l_project_rec.start_adv_action_set_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15033               THEN
15034 --bug 2955326
15035 /*
15036              l_statement  := l_statement ||
15037                        ' START_ADV_ACTION_SET_FLAG =  '||''''||
15038              RTRIM(p_project_in.start_adv_action_set_flag)||''''||',';
15039 */
15040              l_statement  := l_statement ||
15041                        ' START_ADV_ACTION_SET_FLAG = :st_adv_act_set_flag ,';
15042              l_b_st_adv_act_set_flag := 'Y';
15043 --end bug 2955326
15044              l_update_yes_flag := 'Y';
15045           END IF;
15046        END IF;
15047 
15048 --Advertisement
15049 
15050 --Project Setup
15051 
15052          IF p_project_in.priority_code  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15053           AND p_project_in.priority_code IS NOT NULL  THEN
15054           IF NVL(p_project_in.priority_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15055            <> NVL(l_project_rec.priority_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15056               THEN
15057 --bug 2955326
15058 /*
15059              l_statement  := l_statement ||
15060                        ' PRIORITY_CODE =  '||''''||
15061              RTRIM(p_project_in.priority_code)||''''||',';
15062 */
15063 
15064              -- 5191417 validate passed priority_code value
15065 
15066              OPEN priority_code_csr(p_project_in.priority_code);
15067              FETCH priority_code_csr into l_valid_prio_code;
15068              CLOSE priority_code_csr;
15069 
15070              -- if not valid, throw error message
15071 
15072              IF l_valid_prio_code = 'N' THEN
15073 
15074                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15075 
15076                   PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
15077                         ,p_msg_name         => 'PA_INVALID_PRIORITY_CODE');
15078 
15079                   l_return_status := FND_API.G_RET_STS_ERROR;
15080 
15081                   RAISE  FND_API.G_EXC_ERROR;
15082 
15083                 END IF;
15084 
15085              END IF;
15086 
15087              -- 5191417 end
15088 
15089              l_statement  := l_statement ||
15090                        ' PRIORITY_CODE = :pri_code ,';
15091              l_b_pri_code_flag := 'Y';
15092 --end bug 2955326
15093              l_update_yes_flag := 'Y';
15094           END IF;
15095        END IF;
15096 
15097 --Project Setup
15098 
15099 --Retention
15100        IF p_project_in.retn_billing_inv_format_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15101           AND p_project_in.retn_billing_inv_format_id IS NOT NULL  THEN
15102           IF NVL(p_project_in.retn_billing_inv_format_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15103            <> NVL(l_project_rec.retn_billing_inv_format_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15104               THEN
15105 --bug 2955326
15106 /*
15107              l_statement  := l_statement || ' RETN_BILLING_INV_FORMAT_ID =  '||
15108                   TO_CHAR(p_project_in.retn_billing_inv_format_id)||',';
15109 */
15110              l_statement  := l_statement || ' RETN_BILLING_INV_FORMAT_ID = :retn_bil_inv_fmt_id ,';
15111              l_b_retn_bil_inv_fmt_id_flg := 'Y';
15112 --end bug 2955326
15113              l_update_yes_flag := 'Y';
15114           END IF;
15115        END IF;
15116 
15117        IF p_project_in.retn_accounting_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15118           AND p_project_in.retn_accounting_flag IS NOT NULL  THEN
15119           IF NVL(p_project_in.retn_accounting_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15120            <> NVL(l_project_rec.retn_accounting_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15121               THEN
15122 --bug 2955326
15123 /*
15124              l_statement  := l_statement ||
15125                        ' RETN_ACCOUNTING_FLAG =  '||''''||
15126              RTRIM(p_project_in.retn_accounting_flag)||''''||',';
15127 */
15128              l_statement  := l_statement ||
15129                        ' RETN_ACCOUNTING_FLAG = :retn_acnt_flag ,';
15130              l_b_retn_acnt_flag := 'Y';
15131 --end bug 2955326
15132              l_update_yes_flag := 'Y';
15133           END IF;
15134        END IF;
15135 --Retention
15136 
15137 -- anlee
15138 -- patchset K changes
15139          IF p_project_in.revaluate_funding_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15140           AND p_project_in.revaluate_funding_flag IS NOT NULL  THEN
15141           IF NVL(p_project_in.revaluate_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15142            <> NVL(l_project_rec.revaluate_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15143               THEN
15144             /*Bug #2891513 Added the below code for bug 2891513*/
15145         IF p_project_in.include_gains_losses_flag = 'N'
15146         THEN
15147 --bug 2955326
15148 /*
15149              l_statement  := l_statement ||
15150                        ' revaluate_funding_flag =  '||''''||
15151              RTRIM(p_project_in.revaluate_funding_flag)||''''||',';
15152 */
15153              l_statement  := l_statement ||
15154                        ' revaluate_funding_flag = :reval_fndng_flg ,';
15155              l_b_reval_fndng_flag := 'Y';
15156 --end bug 2955326
15157              l_update_yes_flag := 'Y';
15158         ELSE
15159 
15160           IF ((p_project_in.include_gains_losses_flag = 'Y' OR l_project_rec.include_gains_losses_flag ='Y')
15161             AND  (p_project_in.revaluate_funding_flag = 'N'))
15162           THEN
15163                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15164                    THEN
15165                         pa_interface_utils_pub.map_new_amg_msg
15166                         ( p_old_message_code => 'PA_CANT_UPDATE_REV_FUN'
15167                          ,p_msg_attribute    => 'CHANGE'
15168                          ,p_resize_flag      => 'Y'
15169                          ,p_msg_context      => 'PROJ'
15170                          ,p_attribute1       => l_project_rec.segment1
15171                          ,p_attribute2       => ''
15172                          ,p_attribute3       => ''
15173                          ,p_attribute4       => ''
15174                          ,p_attribute5       => '');
15175                   END IF;
15176                   RAISE  FND_API.G_EXC_ERROR;
15177               /*bug 2891513 -Code ends*/
15178            ELSE
15179              l_statement  := l_statement ||
15180                        ' revaluate_funding_flag = :reval_fndng_flg ,';
15181              l_b_reval_fndng_flag := 'Y';
15182              l_update_yes_flag := 'Y';
15183           END IF;
15184          END IF;
15185         END IF;
15186        END IF;
15187 
15188 -- msundare
15189     IF p_project_in.security_level <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15190           AND p_project_in.security_level IS NOT NULL  THEN
15191           IF NVL(p_project_in.security_level, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15192            <> NVL(l_project_rec.security_level, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15193                 THEN
15194                         --bug 2955326
15195                         /*
15196                                      l_statement  := l_statement ||
15197                                                ' security_level =  '||''''||
15198                                      RTRIM(p_project_in.security_level)||''''||',';
15199                          */
15200 
15201                              --Included logic here to validate the Project Security Level
15202                              --For Bug#5191699.
15203                              --If the user passes an invalid value ,we need to handle that as,
15204                              --security level can take values only
15205                              --from the lookup.Hence we dont update and the existing value will remain.
15206 
15207                                 OPEN  cur_check_sec_level(p_project_in.security_level);
15208                                 FETCH cur_check_sec_level INTO l_check_sec_level;
15209                                 CLOSE cur_check_sec_level;
15210 
15211                                 IF l_check_sec_level = 'Y' THEN
15212                                         -- A Valid value has been passed hecne update
15213 
15214                                         l_statement  := l_statement ||
15215                                                ' security_level = :sec_lvl ,';
15216                                         l_b_sec_lvl_flag := 'Y';
15217                         --end bug 2955326
15218                                         l_update_yes_flag := 'Y';
15219                                 ELSE
15220                                         l_b_sec_lvl_flag  := 'N';
15221                                 END IF; -- End of changes Bug#5191699.
15222                 END IF;
15223      END IF;
15224 
15225     /* Bug 8840472 : Commenting out the below code as the labor_disc_reason_code and
15226        non_labor_disc_reason_code should be populated only for 'Bill Rate' schedule type
15227     */
15228 
15229     /* -- Bug 8840472 .. start
15230     IF p_project_in.labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15231           AND p_project_in.labor_disc_reason_code IS NOT NULL  THEN
15232           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)
15233               THEN
15234 --bug 2955326
15235 
15236              l_statement  := l_statement ||
15237                        ' labor_disc_reason_code =  '||''''||
15238              RTRIM(p_project_in.labor_disc_reason_code)||''''||',';
15239 
15240              l_statement  := l_statement ||
15241                        ' labor_disc_reason_code = :lbr_disc_rsn_code ,';
15242              l_b_lbr_disc_rsn_code_flg := 'Y';
15243 --end bug 2955326
15244              l_update_yes_flag := 'Y';
15245           END IF;
15246        END IF;
15247 
15248     IF p_project_in.non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15249           AND p_project_in.labor_disc_reason_code IS NOT NULL  THEN
15250           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)
15251               THEN
15252 --bug 2955326
15253 
15254              l_statement  := l_statement ||
15255                        ' non_labor_disc_reason_code =  '||''''||
15256              RTRIM(p_project_in.non_labor_disc_reason_code)||''''||',';
15257 
15258              l_statement  := l_statement ||
15259                        ' non_labor_disc_reason_code = :nn_lbr_disc_rsn_cd ,';
15260              l_b_nn_lbr_disc_rsn_cd_flg := 'Y';
15261 --end bug 2955326
15262              l_update_yes_flag := 'Y';
15263           END IF;
15264        END IF;
15265 */ -- Bug 8840472 End.
15266 -- End msundare
15267 
15268          IF p_project_in.include_gains_losses_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15269           AND p_project_in.include_gains_losses_flag IS NOT NULL  THEN
15270           IF NVL(p_project_in.include_gains_losses_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15271            <> NVL(l_project_rec.include_gains_losses_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15272               THEN
15273         /*Added the below condition for bug 2891513*/
15274         IF (l_include_gains_and_losses = 'Y'  AND
15275            (p_project_in.revaluate_funding_flag = 'Y' OR l_project_rec.revaluate_funding_flag ='Y'))
15276           THEN
15277 --bug 2955326
15278 /*
15279              l_statement  := l_statement ||
15280                        ' include_gains_losses_flag =  '||''''||
15281              RTRIM(p_project_in.include_gains_losses_flag)||''''||',';
15282 */
15283              l_statement  := l_statement ||
15284                        ' include_gains_losses_flag = :inc_gn_los_flg ,';
15285              l_b_inc_gn_los_flag := 'Y';
15286 --end bug 2955326
15287              l_update_yes_flag := 'Y';
15288          /*Added the else part of the code for bug 2891513*/
15289          ELSE
15290             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15291                THEN
15292                      pa_interface_utils_pub.map_new_amg_msg
15293                      ( p_old_message_code => 'PA_CANT_UPDATE_GAIN_LOSSES'
15294                       ,p_msg_attribute    => 'CHANGE'
15295                       ,p_resize_flag      => 'Y'
15296                       ,p_msg_context      => 'PROJ'
15297                       ,p_attribute1       => l_project_rec.segment1
15298                       ,p_attribute2       => ''
15299                       ,p_attribute3       => ''
15300                       ,p_attribute4       => ''
15301                       ,p_attribute5       => '');
15302              END IF;
15303                RAISE  FND_API.G_EXC_ERROR;
15304           END IF;
15305          END IF;
15306        END IF;
15307 
15308 -- End of changes
15309 
15310 --PA L Changes bug 2872708
15311          IF p_project_in.asset_allocation_method  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15312           AND p_project_in.asset_allocation_method IS NOT NULL  THEN
15313           IF NVL(p_project_in.asset_allocation_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15314            <> NVL(l_project_rec.asset_allocation_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15315               THEN
15316 --bug 2955326
15317 /*
15318              l_statement  := l_statement ||
15319                        ' asset_allocation_method =  '||''''||
15320              RTRIM(p_project_in.asset_allocation_method)||''''||',';
15321 */
15322 
15323              --From patchset L we need to perform vlaidation for all new columns added in AMG also.
15324              --Call validation API here
15325              PA_IMPL_OPTIONS_PUB.check_asset_alloc_method(
15326                             p_asset_allocation_method  => RTRIM(p_project_in.asset_allocation_method)
15327                            ,p_amg_segment1             => l_amg_segment1
15328                            ,x_msg_count                => l_msg_count
15329                            ,x_msg_data                 => l_msg_data
15330                            ,x_return_status            => l_return_status
15331                           );
15332              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15333              THEN
15334                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15335 
15336              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15337              THEN
15338                  p_multiple_task_msg := 'F';
15339                  RAISE FND_API.G_EXC_ERROR;
15340              END IF;
15341 
15342              l_statement  := l_statement ||
15343                        ' asset_allocation_method = :as_alloc_mth ,';
15344              l_b_as_alloc_mth_fg := 'Y';
15345 --end bug 2955326
15346              l_update_yes_flag := 'Y';
15347           END IF;
15348        END IF;
15349 
15350          IF p_project_in.capital_event_processing  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15351           AND p_project_in.capital_event_processing IS NOT NULL  THEN
15352           IF NVL(p_project_in.capital_event_processing, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15353            <> NVL(l_project_rec.capital_event_processing, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15354               THEN
15355 --bug 2955326
15356 /*
15357              l_statement  := l_statement ||
15358                        ' capital_event_processing =  '||''''||
15359              RTRIM(p_project_in.capital_event_processing)||''''||',';
15360 */
15361              --Call validation API here
15362              PA_IMPL_OPTIONS_PUB.check_cap_event_method(
15363                             p_capital_event_processing  => RTRIM(p_project_in.capital_event_processing)
15364                            ,p_amg_segment1             => l_amg_segment1
15365                            ,x_msg_count                => l_msg_count
15366                            ,x_msg_data                 => l_msg_data
15367                            ,x_return_status            => l_return_status
15368                           );
15369              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15370              THEN
15371                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15372 
15373              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15374              THEN
15375                  p_multiple_task_msg := 'F';
15376                  RAISE FND_API.G_EXC_ERROR;
15377              END IF;
15378 
15379              l_statement  := l_statement ||
15380                        ' capital_event_processing =  :cp_evt_proc,';
15381              l_b_cp_evt_proc_fg := 'Y';
15382 --end bug 2955326
15383              l_update_yes_flag := 'Y';
15384           END IF;
15385        END IF;
15386 
15387          IF p_project_in.cint_rate_sch_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15388           AND p_project_in.cint_rate_sch_id IS NOT NULL  THEN
15389           IF NVL(p_project_in.cint_rate_sch_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15390            <> NVL(l_project_rec.cint_rate_sch_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15391               THEN
15392 --bug 2955326
15393 /*
15394              l_statement  := l_statement ||
15395                        ' cint_rate_sch_id =  '||''''||
15396              RTRIM(p_project_in.cint_rate_sch_id)||''''||',';
15397 */
15398              --Call validation API here
15399              PA_IMPL_OPTIONS_PUB.check_cint_schedule(
15400                             p_cint_rate_sch_id         => p_project_in.cint_rate_sch_id
15401                            ,p_amg_segment1             => l_amg_segment1
15402                            ,x_msg_count                => l_msg_count
15403                            ,x_msg_data                 => l_msg_data
15404                            ,x_return_status            => l_return_status
15405                           );
15406              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15407              THEN
15408                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15409 
15410              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15411              THEN
15412                  p_multiple_task_msg := 'F';
15413                  RAISE FND_API.G_EXC_ERROR;
15414              END IF;
15415 
15416              l_statement  := l_statement ||
15417                        ' cint_rate_sch_id = :cint_rt_sch ,';
15418              l_b_cint_rt_sch_id_fg := 'Y';
15419 --end bug 2955326
15420              l_update_yes_flag := 'Y';
15421           END IF;
15422        END IF;
15423 
15424          IF p_project_in.cint_eligible_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15425           AND p_project_in.cint_eligible_flag IS NOT NULL  THEN
15426           IF NVL(p_project_in.cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15427            <> NVL(l_project_rec.cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15428               THEN
15429 --bug 2955326
15430 /*
15431              l_statement  := l_statement ||
15432                        ' cint_eligible_flag =  '||''''||
15433              RTRIM(p_project_in.cint_eligible_flag)||''''||',';
15434 */
15435              l_statement  := l_statement ||
15436                        ' cint_eligible_flag = :cint_elg_fg ,';
15437              l_b_cint_elg_fg := 'Y';
15438 --end bug 2955326
15439              l_update_yes_flag := 'Y';
15440           END IF;
15441        END IF;
15442 
15443          IF p_project_in.cint_stop_date  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
15444           AND p_project_in.cint_stop_date IS NOT NULL  THEN
15445           IF NVL(p_project_in.cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
15446            <> NVL(l_project_rec.cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
15447               THEN
15448 --bug 2955326
15449 /*
15450              l_statement  := l_statement ||
15451                        ' cint_stop_date =  '||''''||
15452              RTRIM(p_project_in.cint_stop_date)||''''||',';
15453 */
15454              l_statement  := l_statement ||
15455                        ' cint_stop_date = :cint_stp_dt ,';
15456              l_b_cint_stp_dt_fg := 'Y';
15457 --end bug 2955326
15458              l_update_yes_flag := 'Y';
15459           END IF;
15460        END IF;
15461 --End PA L changes
15462 
15463 ------------------- FP_M changes begin (venkat) 2 -----------------------------------------------
15464 
15465 /* ------ Begin Commented for now as the column sys_program_flag not exist in the pa_projects -----
15466 
15467     IF (p_project_in.sys_program_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15468        (p_project_in.sys_program_flag IS NOT NULL)
15469     THEN
15470         IF NVL(p_project_in.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15471            NVL(l_project_rec.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15472         THEN
15473             l_statement  := l_statement || ' sys_program_flag = :sys_program_flg ,';
15474             l_sys_program_flag := 'Y';
15475             l_update_yes_flag := 'Y';
15476         END IF;
15477     END IF;
15478 ---------------------------------End Comment----------------------------------------------------- */
15479 
15480 -- Bug # 5072032.
15481 
15482     IF (p_project_in.sys_program_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15483        (p_project_in.sys_program_flag IS NOT NULL)
15484     THEN
15485         IF NVL(p_project_in.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15486            NVL(l_project_rec.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15487         THEN
15488             l_statement  := l_statement || ' sys_program_flag = :sys_program_flag ,';
15489             l_b_sys_program_flag_fg := 'Y';
15490             l_update_yes_flag := 'Y';
15491         END IF;
15492     END IF;
15493 
15494     IF (p_project_in.allow_multi_program_rollup <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15495        (p_project_in.allow_multi_program_rollup IS NOT NULL)
15496     THEN
15497         IF NVL(p_project_in.allow_multi_program_rollup, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15498            NVL(l_project_rec.allow_multi_program_rollup, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15499         THEN
15500             l_statement  := l_statement || ' allow_multi_program_rollup = :allow_multi_program_rollup ,';
15501             l_b_allow_multi_prog_rollup_fg := 'Y';
15502             l_update_yes_flag := 'Y';
15503         END IF;
15504     END IF;
15505 
15506    IF l_debug_mode = 'Y' THEN
15507         pa_debug.write(l_module_name,'l_b_sys_program_flag_fg=' || l_b_sys_program_flag_fg,3);
15508         pa_debug.write(l_module_name,'l_b_allow_multi_prog_rollup_fg='||l_b_allow_multi_prog_rollup_fg,3);
15509     END IF;
15510 
15511     IF l_b_sys_program_flag_fg = 'Y' OR
15512        l_b_allow_multi_prog_rollup_fg = 'Y'
15513     THEN
15514 
15515         IF l_debug_mode = 'Y' THEN
15516               pa_debug.write(l_module_name,'Before Calling SETUP_PROJECT_AS_PROGRAM in Update_Project flow' ,3);
15517               pa_debug.write(l_module_name,'l_project_id='||l_project_id,3);
15518               pa_debug.write(l_module_name,'p_project_in.sys_program_flag='||p_project_in.sys_program_flag,3);
15519               pa_debug.write(l_module_name,'p_project_in.allow_multi_program_rollup='||p_project_in.allow_multi_program_rollup,3);
15520         END IF;
15521 
15522         PA_PROJECT_PUB.SETUP_PROJECT_AS_PROGRAM(
15523              p_api_version                      => p_api_version_number
15524            , p_init_msg_list            => p_init_msg_list
15525            , p_commit                       => p_commit
15526            , p_max_msg_count            => p_msg_count
15527            , p_project_id                       => l_project_id   -- Project Id is already derived/converted therfore no need to pass project reference to this API.
15528            , p_sys_program_flag         => p_project_in.sys_program_flag
15529            , p_allow_multi_program_rollup       => p_project_in.allow_multi_program_rollup
15530            , x_msg_count                => l_msg_count
15531            , x_msg_data                 => l_msg_data
15532            , x_return_status            => l_return_status
15533                            );
15534 
15535         IF l_debug_mode = 'Y' THEN
15536               pa_debug.write(l_module_name,'After Calling SETUP_PROJECT_AS_PROGRAM in Update_Project flow' ,3);
15537               pa_debug.write(l_module_name,'l_project_id='||l_project_id,3);
15538               pa_debug.write(l_module_name,'l_return_status='||l_return_status,3);
15539         END IF;
15540 
15541         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15542         THEN
15543             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15544         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15545         THEN
15546             p_multiple_task_msg := 'F';
15547             RAISE FND_API.G_EXC_ERROR;
15548         END IF;
15549 
15550     END IF;
15551 
15552 -- End of Bug # 5072032.
15553 
15554     IF (p_project_in.enable_top_task_customer_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15555        (p_project_in.enable_top_task_customer_flag IS NOT NULL)
15556     THEN
15557         IF NVL(p_project_in.enable_top_task_customer_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15558            NVL(l_project_rec.enable_top_task_customer_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15559         THEN
15560                --Bug 3279981 Review
15561                IF p_project_in.enable_top_task_customer_flag IN ('Y','N') THEN
15562                     -- Function Security Check
15563                     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
15564                     ( p_api_version_number => p_api_version_number,
15565                       p_responsibility_id  => l_resp_id,
15566                       p_function_name      => 'PA_PAXPREPR_CUST_TOP_TASK',
15567                       p_msg_count          => l_msg_count,
15568                       p_msg_data           => l_msg_data,
15569                       p_return_status      => l_return_status,
15570                       p_function_allowed   => l_function_allowed);
15571                     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15572                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15573                     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
15574                          RAISE FND_API.G_EXC_ERROR;
15575                     END IF;
15576 
15577                     IF l_function_allowed = 'N' THEN
15578                          pa_interface_utils_pub.map_new_amg_msg
15579                           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
15580                            ,p_msg_attribute    => 'CHANGE'
15581                            ,p_resize_flag      => 'Y'
15582                            ,p_msg_context      => 'GENERAL'
15583                            ,p_attribute1       => ''
15584                            ,p_attribute2       => ''
15585                            ,p_attribute3       => ''
15586                            ,p_attribute4       => ''
15587                            ,p_attribute5       => '');
15588                          p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15589                          RAISE FND_API.G_EXC_ERROR;
15590                     END IF;
15591                ELSE
15592                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15593                          pa_interface_utils_pub.map_new_amg_msg
15594                          ( p_old_message_code => 'PA_TOP_TASK_CUST_FLAG_INVALID'
15595                           ,p_msg_attribute    => 'NOCHANGE'--Changed to NOCHANGE for Bug- 4762153
15596                           ,p_resize_flag      => 'N'
15597                           ,p_msg_context      => 'PROJ'
15598                           ,p_attribute1       => l_project_rec.segment1
15599                           ,p_attribute2       => ''
15600                           ,p_attribute3       => ''
15601                           ,p_attribute4       => ''
15602                           ,p_attribute5       => '');
15603                     END IF;
15604                     RAISE  FND_API.G_EXC_ERROR;
15605                END IF;
15606 
15607                IF ( PA_BILLING_CORE.Update_Top_Task_Cust_Flag( l_project_id ) = 'Y' ) THEN
15608                     l_statement  := l_statement || ' enable_top_task_customer_flag = :enable_top_task_cust_flg ,';
15609                     l_enable_top_task_cust_flag := 'Y';
15610                     l_update_yes_flag := 'Y';
15611                ELSE--Added by rtarway for BUG 4168069
15612                --Add the error message in the pl/sql stack and raise exception
15613                       PA_UTILS.ADD_MESSAGE(
15614                       p_app_short_name => 'PA',
15615                       p_msg_name       =>'PA_NO_TOP_TASK_CUST_ALLOWED'
15616                       );
15617                     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15618                     RAISE FND_API.G_EXC_ERROR;
15619                END IF;
15620                --Bug 3279981 Review
15621         END IF;
15622     END IF;
15623 
15624     IF (p_project_in.enable_top_task_inv_mth_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15625        (p_project_in.enable_top_task_inv_mth_flag IS NOT NULL)
15626     THEN
15627         IF NVL(p_project_in.enable_top_task_inv_mth_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15628            NVL(l_project_rec.enable_top_task_inv_mth_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15629         THEN
15630                --Bug 3279981 Review
15631                IF p_project_in.enable_top_task_inv_mth_flag IN ('Y','N') THEN
15632                     -- Function Security Check
15633                     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
15634                     ( p_api_version_number => p_api_version_number,
15635                       p_responsibility_id  => l_resp_id,
15636                       p_function_name      => 'PA_PAXPREPR_INV_MTH_TOP_TASK',
15637                       p_msg_count          => l_msg_count,
15638                       p_msg_data           => l_msg_data,
15639                       p_return_status      => l_return_status,
15640                       p_function_allowed   => l_function_allowed);
15641                     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15642                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15643                     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
15644                          RAISE FND_API.G_EXC_ERROR;
15645                     END IF;
15646 
15647                     IF l_function_allowed = 'N' THEN
15648                          pa_interface_utils_pub.map_new_amg_msg
15649                           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
15650                            ,p_msg_attribute    => 'CHANGE'
15651                            ,p_resize_flag      => 'Y'
15652                            ,p_msg_context      => 'GENERAL'
15653                            ,p_attribute1       => ''
15654                            ,p_attribute2       => ''
15655                            ,p_attribute3       => ''
15656                            ,p_attribute4       => ''
15657                            ,p_attribute5       => '');
15658                          p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15659                          RAISE FND_API.G_EXC_ERROR;
15660                     END IF;
15661                ELSE
15662                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15663                          pa_interface_utils_pub.map_new_amg_msg
15664                          ( p_old_message_code => 'PA_TT_INV_MTH_FLAG_INVALID'
15665                           ,p_msg_attribute    => 'CHANGE'
15666                           ,p_resize_flag      => 'N'
15667                           ,p_msg_context      => 'PROJ'
15668                           ,p_attribute1       => l_project_rec.segment1
15669                           ,p_attribute2       => ''
15670                           ,p_attribute3       => ''
15671                           ,p_attribute4       => ''
15672                           ,p_attribute5       => '');
15673                     END IF;
15674                     RAISE  FND_API.G_EXC_ERROR;
15675                END IF;
15676 
15677                IF ( PA_BILLING_CORE.Update_Top_Task_Inv_Mthd_Flag( l_project_id ) = 'Y'
15678                AND  l_project_rec.invoice_method <> 'COST' ) THEN
15679                     l_statement  := l_statement || ' enable_top_task_inv_mth_flag = :enable_top_task_inv_mth_flg ,';
15680                     l_enable_top_task_inv_mth_flag := 'Y';
15681                     l_update_yes_flag := 'Y';
15682                ELSE --Added for Bug 4193730
15683                       PA_UTILS.ADD_MESSAGE(
15684                       p_app_short_name => 'PA',
15685                       p_msg_name       => 'PA_INV_MTH_TT_NOT_SET'
15686                       );
15687                     p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15688                     RAISE FND_API.G_EXC_ERROR;
15689                END IF;
15690                --Bug 3279981 Review
15691         END IF;
15692     END IF;
15693 
15694     IF (p_project_in.projfunc_attr_for_ar_flag  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15695        (p_project_in.projfunc_attr_for_ar_flag IS NOT NULL)
15696     THEN
15697         IF NVL(p_project_in.projfunc_attr_for_ar_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15698            NVL(l_project_rec.projfunc_attr_for_ar_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15699         THEN
15700             l_statement  := l_statement || ' projfunc_attr_for_ar_flag = :projfunc_attr_for_ar_flg ,';
15701             l_projfunc_attr_for_ar_flag := 'Y';
15702             l_update_yes_flag := 'Y';
15703         END IF;
15704     END IF;
15705 
15706 /* Added the following code for Bug 6248841 to update the cc_tax_task_id */
15707 
15708     IF (p_project_in.cc_tax_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15709        AND p_project_in.cc_tax_task_id IS NOT NULL)
15710     THEN
15711 
15712       BEGIN
15713         SELECT task_number INTO l_cc_tax_task_numb
15714           FROM pa_tasks
15715          WHERE project_id = l_project_id
15716            AND task_id = p_project_in.cc_tax_task_id;
15717 
15718              l_statement := l_statement || ' CC_TAX_TASK_ID = :prj_cc_tax_task_id,';
15719              l_b_cc_tax_task_id := 'Y';
15720              l_update_yes_flag := 'Y';
15721       EXCEPTION
15722          WHEN NO_DATA_FOUND THEN
15723               IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15724                  THEN
15725                       pa_interface_utils_pub.map_new_amg_msg
15726                       ( p_old_message_code => 'PA_INVALID_TAX_TASK_ID'
15727                        ,p_msg_attribute    => 'CHANGE'
15728                        ,p_resize_flag      => 'Y'
15729                        ,p_msg_context      => 'PROJ'
15730                        ,p_attribute1       => l_project_rec.segment1
15731                        ,p_attribute2       => ''
15732                        ,p_attribute3       => ''
15733                        ,p_attribute4       => ''
15734                        ,p_attribute5       => '');
15735                END IF;
15736                RAISE  FND_API.G_EXC_ERROR;
15737       END;
15738 
15739     END IF;
15740 
15741 -------------------- FP_M changes end (venkat) ----------------------------------------------
15742 
15743 --Sunkalya federal changes bug#5511353
15744 
15745 
15746 IF (p_project_in.date_eff_funds_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15747    (p_project_in.date_eff_funds_flag IS NOT NULL)
15748 THEN
15749         IF NVL(p_project_in.date_eff_funds_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15750            NVL(l_project_rec.date_eff_funds_consumption, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15751         THEN
15752 
15753 			OPEN  cur_enable_funds_flag(l_project_id);
15754 			FETCH cur_enable_funds_flag INTO l_enable_funds_flag;
15755 			CLOSE cur_enable_funds_flag;
15756 
15757 			OPEN  cur_rev_inv(l_project_id);
15758 			FETCH cur_rev_inv INTO l_chk_rev_inv_flag;
15759 			CLOSE cur_rev_inv;
15760 
15761 			IF nvl(l_enable_funds_flag,'N')='N' AND p_project_in.date_eff_funds_flag ='Y' THEN
15762 
15763 				PA_UTILS.ADD_MESSAGE(
15764 							p_app_short_name => 'PA',
15765 							p_msg_name       => 'PA_FUNDS_FLAG_CANT_ENABLED'
15766 						    );
15767 				p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15768 				RAISE FND_API.G_EXC_ERROR;
15769 			END IF;
15770 
15771 			IF nvl(l_chk_rev_inv_flag,'N')= 'Y' THEN
15772 
15773 				PA_UTILS.ADD_MESSAGE(
15774 							p_app_short_name => 'PA',
15775 							p_msg_name       => 'PA_FUNDS_FLAG_NOT_UPDATBL'
15776 						    );
15777 				p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15778 				RAISE FND_API.G_EXC_ERROR;
15779 			END IF;
15780 
15781 			l_statement  := l_statement || ' date_eff_funds_consumption = :date_eff_funds_consumption ,';
15782 			l_date_eff_funds_flag := 'Y';
15783 			l_update_yes_flag := 'Y';
15784 	END IF;
15785 END IF;
15786 
15787 --Sunkalya federal changes bug#5511353
15788 
15789 /* 7508661 : EnC : Start */
15790 
15791 IF (p_project_in.ar_rec_notify_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15792    (p_project_in.ar_rec_notify_flag IS NOT NULL)
15793 THEN
15794     l_statement  := l_statement || ' ar_rec_notify_flag = :ar_rec_notify_flag ,';
15795     l_ar_rec_notify_flag := 'Y';
15796 End If;
15797 
15798 IF (p_project_in.auto_release_pwp_inv <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15799    (p_project_in.auto_release_pwp_inv IS NOT NULL)
15800 THEN
15801     l_statement  := l_statement || ' auto_release_pwp_inv = :auto_release_pwp_inv ,';
15802     l_auto_release_pwp_inv := 'Y';
15803 End If;
15804 
15805 /* 7508661 : EnC : End */
15806   /* Added for 12.2Payroll billing ER 11899223 */
15807 IF (p_project_in.bill_labor_accrual <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15808    (p_project_in.bill_labor_accrual IS NOT NULL)
15809 THEN
15810     l_statement  := l_statement || ' bill_labor_accrual = :bill_labor_accrual ,';
15811     l_bill_labor_accrual := 'Y';
15812 End If;
15813 
15814 
15815 
15816 IF (p_project_in.adj_on_std_inv <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15817    (p_project_in.adj_on_std_inv IS NOT NULL)
15818 THEN
15819     l_statement  := l_statement || ' adj_on_std_inv = :adj_on_std_inv ,';
15820     l_adj_on_std_inv := 'Y';
15821 End If;
15822                    /* Added for 12.2Payroll billing ER 11899223 */
15823        IF l_update_yes_flag = 'Y'
15824        THEN
15825 /* Code commented and added for the bug#1752494, starts here */
15826 /*
15827                 l_statement :=  l_statement ||
15828                                 ' LAST_UPDATE_DATE = '||''''||
15829                                 SYSDATE||''''||',';
15830 */
15831                 l_statement := l_statement ||
15832                                ' LAST_UPDATE_DATE = SYSDATE'||',';
15833 
15834 /* Code commented and added for the bug#1752494, ends here */
15835               l_statement :=   l_statement ||
15836 --                             ' LAST_UPDATED_BY = '||G_USER_ID||','; --bug 2955326
15837                                ' LAST_UPDATED_BY = :g_usr_id ,';  --bug 2955326
15838 
15839               l_statement :=   l_statement ||
15840 --                               ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID; --2955326
15841                                ' LAST_UPDATE_LOGIN = :g_login_id'; --bug 2955326
15842 
15843             l_statement :=   l_statement ||
15844 --                      ' WHERE PROJECT_ID = '|| TO_CHAR(l_project_id);
15845                         ' WHERE PROJECT_ID = :prj_id'; --bug 2955326
15846          IF NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' THEN
15847             l_cursor := dbms_sql.open_cursor;
15848             dbms_sql.parse(l_cursor, l_statement, dbms_sql.native);
15849 
15850 --bug 2955326
15851                 IF l_b_segment1_flag = 'Y' THEN
15852                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':segment1', RTRIM(p_project_in.pa_project_number));
15853                 END IF;
15854 
15855                 IF l_b_proj_name_flag = 'Y' THEN
15856                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':project_name', RTRIM(p_project_in.project_name));
15857                 END IF;
15858 
15859                 IF l_b_long_name_flag = 'Y' THEN
15860                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':long_name', RTRIM(p_project_in.long_name));
15861                 END IF;
15862 
15863                 IF l_b_pm_proj_ref_flag = 'Y' THEN
15864                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':pm_project_reference', RTRIM(p_project_in.pm_project_reference));
15865                 END IF;
15866 
15867                 IF l_b_co_org_id_flag = 'Y' THEN
15868                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':carrying_out_org_id', TO_CHAR(p_project_in.carrying_out_organization_id));
15869                 END IF;
15870 
15871                 IF l_b_pub_sec_flag = 'Y' THEN
15872                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':public_sector_flag', p_project_in.public_sector_flag);
15873                 END IF;
15874 
15875                 IF l_b_dist_rule_flag = 'Y' THEN
15876                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':dist_rule', p_project_in.distribution_rule);
15877                 --Bug 3279981 Review. Added two bind variables below
15878                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rev_acc_mth',
15879                                          substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1)  );
15880                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_mth',
15881                                          substr(p_project_in.distribution_rule, instr(p_project_in.distribution_rule,'/')+1)  );
15882                 END IF;
15883 
15884                 IF l_b_desc_flag = 'Y' THEN
15885                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':descrp', RTRIM(p_project_in.description));
15886                 END IF;
15887 
15888                 IF l_b_start_date_flag = 'Y' THEN
15889                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':start_date', l_project_start_date);
15890                 END IF;
15891 
15892                 IF l_b_comp_date_flag = 'Y' THEN
15893                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':comp_date', l_project_completion_date);
15894                 END IF;
15895 
15896                 IF l_b_early_sd_flag = 'Y' THEN
15897                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':early_start_date', p_project_in.early_start_date);
15898                 END IF;
15899 
15900                 IF l_b_early_fd_flag = 'Y' THEN
15901                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':early_finish_date', p_project_in.early_finish_date);
15902                 END IF;
15903 
15904                 IF l_b_late_sd_flag = 'Y' THEN
15905                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_start_date', p_project_in.late_start_date);
15906                 END IF;
15907 
15908                 IF l_b_late_sd_flag = 'Y' THEN
15909                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_start_date', p_project_in.late_start_date);
15910                 END IF;
15911 
15912                 IF l_b_late_fd_flag = 'Y' THEN
15913                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_finish_date', p_project_in.late_finish_date);
15914                 END IF;
15915 
15916                 IF l_b_sch_sd_flag = 'Y' THEN
15917                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_start_date', p_project_in.scheduled_start_date);
15918                 END IF;
15919 
15920                 IF l_b_sch_fd_flag = 'Y' THEN
15921                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_finish_date', p_project_in.scheduled_finish_date);
15922                 END IF;
15923 
15924                 IF l_b_attr_cat_flag = 'Y' THEN
15925                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr_cat', RTRIM(p_project_in.attribute_category));
15926                 END IF;
15927 
15928                 IF l_b_attr1_flag = 'Y' THEN
15929                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr1', RTRIM(p_project_in.attribute1));
15930                 END IF;
15931 
15932                 IF l_b_attr2_flag = 'Y' THEN
15933                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr2', RTRIM(p_project_in.attribute2));
15934                 END IF;
15935 
15936                 IF l_b_attr3_flag = 'Y' THEN
15937                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr3', RTRIM(p_project_in.attribute3));
15938                 END IF;
15939 
15940                 IF l_b_attr4_flag = 'Y' THEN
15941                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr4', RTRIM(p_project_in.attribute4));
15942                 END IF;
15943 
15944                 IF l_b_attr5_flag = 'Y' THEN
15945                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr5', RTRIM(p_project_in.attribute5));
15946                 END IF;
15947 
15948                 IF l_b_attr6_flag = 'Y' THEN
15949                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr6', RTRIM(p_project_in.attribute6));
15950                 END IF;
15951 
15952                 IF l_b_attr7_flag = 'Y' THEN
15953                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr7', RTRIM(p_project_in.attribute7));
15954                 END IF;
15955 
15956                 IF l_b_attr8_flag = 'Y' THEN
15957                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr8', RTRIM(p_project_in.attribute8));
15958                 END IF;
15959 
15960                 IF l_b_attr9_flag = 'Y' THEN
15961                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr9', RTRIM(p_project_in.attribute9));
15962                 END IF;
15963 
15964                 IF l_b_attr10_flag = 'Y' THEN
15965                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr10', RTRIM(p_project_in.attribute10));
15966                 END IF;
15967 
15968                 IF l_b_output_tx_code_flag = 'Y' THEN
15969                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':output_tx_code', RTRIM(p_project_in.output_tax_code));
15970                 END IF;
15971 
15972                 IF l_b_ret_tx_code_flag = 'Y' THEN
15973                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':ret_tx_code', RTRIM(p_project_in.retention_tax_code));
15974                 END IF;
15975 
15976                 IF l_b_proj_cur_code_flag = 'Y' THEN
15977                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_cur_code', RTRIM(p_project_in.project_currency_code));
15978                 END IF;
15979 
15980                 IF l_b_allow_x_chg_flag = 'Y' THEN
15981                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':allow_x_chg_flag', RTRIM(p_project_in.allow_cross_charge_flag));
15982                 END IF;
15983 
15984                 IF l_b_proj_rt_date_flag = 'Y' THEN
15985                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_rt_date', p_project_in.project_rate_date);
15986                 END IF;
15987 
15988                 IF l_b_proj_rt_tp_flag = 'Y' THEN
15989                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_rt_tp', RTRIM(p_project_in.project_rate_type));
15990                 END IF;
15991 
15992                 IF l_cc_proc_lb_flag = 'Y' THEN
15993                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_lb_flag', RTRIM(l_cc_process_labor_flag)); -- Changed to local variable for Bug 5395048
15994                 END IF;
15995 
15996                 IF l_b_lb_tp_sch_id_flag = 'Y' THEN
15997                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_tp_sch_id', p_project_in.labor_tp_schedule_id );
15998                 END IF;
15999 
16000                 IF l_b_lb_tp_fixed_dt_flag = 'Y' THEN
16001                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_tp_fixed_dt', p_project_in.labor_tp_fixed_date);
16002                 END IF;
16003 
16004                 IF l_b_cc_proc_nl_flag = 'Y' THEN
16005                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_nl_flag', RTRIM(l_cc_process_nl_flag)); -- Changed to local variable for Bug 5395048
16006                 END IF;
16007 
16008                 IF l_b_nl_tp_sch_id_flag = 'Y' THEN
16009                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_sch_id', p_project_in.nl_tp_schedule_id);
16010                 END IF;
16011 
16012                 IF l_b_nl_tp_fx_dt_flag = 'Y' THEN
16013                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_fx_dt', p_project_in.nl_tp_fixed_date);
16014                 END IF;
16015 
16016                 IF l_b_role_list_id_flag = 'Y' THEN
16017                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':role_list_id', p_project_in.role_list_id);
16018                 END IF;
16019 
16020                 IF l_b_work_type_id_flag = 'Y' THEN
16021                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':work_type_id', p_project_in.work_type_id);
16022                 END IF;
16023 
16024                 IF l_b_cal_id_flag = 'Y' THEN
16025                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cal_id', p_project_in.calendar_id);
16026                 END IF;
16027 
16028                 IF l_b_loc_id_flag = 'Y' THEN
16029                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':loc_id', p_project_in.location_id);
16030                 END IF;
16031 
16032                 IF l_b_prob_memb_id_flag = 'Y' THEN
16033                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prob_memb_id', p_project_in.probability_member_id);
16034                 END IF;
16035 
16036                 IF l_b_proj_value_flag = 'Y' THEN
16037                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_value', p_project_in.project_value);
16038                 END IF;
16039 
16040                 IF l_b_exp_apprv_dt_flag = 'Y' THEN
16041                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':exp_apprv_date', p_project_in.expected_approval_date);
16042                 END IF;
16043 
16044                 IF l_b_cst_jb_gp_id_flag = 'Y' THEN
16045                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cst_jb_gp_id', p_project_in.cost_job_group_id);
16046                 END IF;
16047 
16048                 IF l_b_bill_jb_gp_id_flag = 'Y' THEN
16049                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':bill_jb_gp_id', p_project_in.bill_job_group_id);
16050                 END IF;
16051 
16052                 IF l_b_emp_bill_rt_sch_id_flag = 'Y' THEN
16053                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id', p_project_in.emp_bill_rate_schedule_id);
16054                 END IF;
16055 
16056                 IF l_b_jb_bill_rt_sch_id_flag = 'Y' THEN
16057                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id', p_project_in.job_bill_rate_schedule_id);
16058                 END IF;
16059 
16060                 IF l_b_comp_mtch_wt_flag = 'Y' THEN
16061                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':comp_match_wt', p_project_in.competence_match_wt);
16062                 END IF;
16063 
16064                 IF l_b_avail_mtch_wt_flag = 'Y' THEN
16065                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':avail_mtch_wt', p_project_in.availability_match_wt);
16066                 END IF;
16067 
16068                 IF l_b_jb_lvl_mt_wt_flag = 'Y' THEN
16069                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_lvl_mt_wt', p_project_in.job_level_match_wt);
16070                 END IF;
16071 
16072                 IF l_b_search_min_avail_flag = 'Y' THEN
16073                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_min_avail', p_project_in.search_min_availability);
16074                 END IF;
16075 
16076                 IF l_b_srch_org_hier_id_flag = 'Y' THEN
16077                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_org_hier_id', p_project_in.search_org_hier_id);
16078                 END IF;
16079 
16080                 IF l_b_srch_st_org_id_flag = 'Y' THEN
16081                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_org_hier_id', p_project_in.search_starting_org_id);
16082                 END IF;
16083 
16084                 IF l_b_min_can_sc_req_for_nom = 'Y' THEN
16085                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':min_can_sc_req_for_nom', p_project_in.min_cand_score_reqd_for_nom);
16086                 END IF;
16087 
16088 /* Commented the code for bug 4630836:
16089                 IF l_b_nn_lb_std_bl_rt_sch_id_f = 'Y' THEN
16090                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':n_lb_std_bill_rt_sch_id', p_project_in.non_lab_std_bill_rt_sch_id);
16091                 END IF; */
16092 
16093                 IF l_b_proj_bil_xch_rt_flag = 'Y' THEN
16094                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_xch_rt', p_project_in.project_bil_exchange_rate);
16095                 END IF;
16096 
16097                 IF l_b_pjfnc_bil_xch_rt_flag = 'Y' THEN
16098                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':pjfnc_bil_xch_rt', p_project_in.projfunc_bil_exchange_rate);
16099                 END IF;
16100 
16101                 IF l_b_fnding_xch_rt_flag = 'Y' THEN
16102                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_xch_rt', p_project_in.funding_exchange_rate);
16103                 END IF;
16104 
16105                 IF l_b_enable_auto_srch_flag = 'Y' THEN
16106                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_auto_srch', p_project_in.enable_automated_search);
16107                 END IF;
16108 
16109                 IF l_b_srch_cntry_code_flag = 'Y' THEN
16110                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_cntry_code', RTRIM(p_project_in.search_country_code));
16111                 END IF;
16112 
16113                 IF l_b_invproc_crncy_tp_flag = 'Y' THEN
16114                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':invproc_currency_type', RTRIM(p_project_in.invproc_currency_type));
16115                 END IF;
16116 
16117                 IF l_b_revproc_crncy_cd_flag = 'Y' THEN
16118                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':revproc_currency_code', RTRIM(p_project_in.revproc_currency_code));
16119                 END IF;
16120 
16121                 IF l_b_prj_bil_rt_dt_code_flag = 'Y' THEN
16122                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_rate_date_code', RTRIM(p_project_in.project_bil_rate_date_code));
16123                 END IF;
16124 
16125                 IF l_b_proj_bil_rt_tp_flag = 'Y' THEN
16126                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_rt_type', RTRIM(p_project_in.project_bil_rate_type));
16127                 END IF;
16128 
16129                 IF l_b_prjfnc_crncy_code_flag = 'Y' THEN
16130                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_currency_code', RTRIM(p_project_in.projfunc_currency_code));
16131                 END IF;
16132 
16133                 IF l_b_prjfnc_bil_rt_dt_cd_f = 'Y' THEN
16134                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rt_dt_code', RTRIM(p_project_in.projfunc_bil_rate_date_code));
16135                 END IF;
16136 
16137                 IF l_b_prjfnc_bil_rt_tp_flag = 'Y' THEN
16138                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rate_type', RTRIM(p_project_in.projfunc_bil_rate_type));
16139                 END IF;
16140 
16141                 IF l_b_fndng_rt_dt_cd_flag = 'Y' THEN
16142                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rate_date_code', RTRIM(p_project_in.funding_rate_date_code));
16143                 END IF;
16144 
16145                 IF l_b_fnding_rt_type_flag = 'Y' THEN
16146                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rate_type', RTRIM(p_project_in.funding_rate_type));
16147                 END IF;
16148 
16149                 IF l_b_bsln_fnding_flag = 'Y' THEN
16150                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':bsln_fnding_flag', RTRIM(p_project_in.baseline_funding_flag));
16151                 END IF;
16152 
16153                 IF l_b_prjfnc_cst_rt_tp_flag = 'Y' THEN
16154                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':projfnc_cost_rate_type', RTRIM(p_project_in.projfunc_cost_rate_type));
16155                 END IF;
16156 
16157                 IF l_b_inv_bill_txn_cur_flag = 'Y' THEN
16158                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_by_bil_txn_cur_flag', RTRIM(p_project_in.inv_by_bill_trans_curr_flag));
16159                 END IF;
16160 
16161                 IF l_b_multi_crncy_bil_flag = 'Y' THEN
16162                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':multi_crncy_bil_flag', RTRIM(p_project_in.multi_currency_billing_flag));
16163                 END IF;
16164 
16165                 IF l_b_prj_bil_rt_dt_flag = 'Y' THEN
16166                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_bil_rt_date', p_project_in.project_bil_rate_date);
16167                 END IF;
16168 
16169                 IF l_b_prjfnc_bil_rt_dt_flag = 'Y' THEN
16170                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rt_date', p_project_in.projfunc_bil_rate_date);
16171                 END IF;
16172 
16173                 IF l_b_fnding_rt_dt_flag = 'Y' THEN
16174                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rt_date', p_project_in.funding_rate_date);
16175                 END IF;
16176 
16177                 IF l_b_prjfnc_cst_rt_dt_flag = 'Y' THEN
16178                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_cst_rt_date', p_project_in.projfunc_cost_rate_date);
16179                 END IF;
16180 
16181                 IF l_b_asgn_prec_tsk_flag = 'Y' THEN
16182                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':asgn_prec_tsk_flg', RTRIM(p_project_in.assign_precedes_task));
16183                 END IF;
16184 
16185                 IF l_b_splt_cst_fm_wp_flag = 'Y' THEN
16186                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':splt_cst_fm_wp_flag', RTRIM(p_project_in.split_cost_from_workplan_flag));
16187                 END IF;
16188 
16189                 IF l_b_splt_cst_fm_bill_flag = 'Y' THEN
16190                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':splt_cst_fm_bill_flag', RTRIM(p_project_in.split_cost_from_bill_flag));
16191                 END IF;
16192 
16193                 IF l_b_adv_act_set_id_flag = 'Y' THEN
16194                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':adv_act_set_id', p_project_in.adv_action_set_id);
16195                 END IF;
16196 
16197                 IF l_b_st_adv_act_set_flag = 'Y' THEN
16198                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':st_adv_act_set_flag', RTRIM(p_project_in.start_adv_action_set_flag));
16199                 END IF;
16200 
16201                 IF l_b_pri_code_flag = 'Y' THEN
16202                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':pri_code', RTRIM(p_project_in.priority_code));
16203                 END IF;
16204 
16205                 IF l_b_retn_bil_inv_fmt_id_flg = 'Y' THEN
16206                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':retn_bil_inv_fmt_id', TO_CHAR(p_project_in.retn_billing_inv_format_id));
16207                 END IF;
16208 
16209                 IF l_b_retn_acnt_flag = 'Y' THEN
16210                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':retn_acnt_flag', RTRIM(p_project_in.retn_accounting_flag));
16211                 END IF;
16212 
16213                 IF l_b_reval_fndng_flag = 'Y' THEN
16214                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':reval_fndng_flg', RTRIM(p_project_in.revaluate_funding_flag));
16215                 END IF;
16216 
16217                 IF l_b_sec_lvl_flag = 'Y' THEN
16218                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':sec_lvl', RTRIM(p_project_in.security_level));
16219                 END IF;
16220 
16221                 IF l_b_lbr_disc_rsn_code_flg = 'Y' THEN
16222                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_disc_rsn_code', RTRIM(p_project_in.labor_disc_reason_code));
16223                 END IF;
16224 
16225                 IF l_b_nn_lbr_disc_rsn_cd_flg = 'Y' THEN
16226                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lbr_disc_rsn_cd', RTRIM(p_project_in.non_labor_disc_reason_code));
16227                 END IF;
16228 
16229                 IF l_b_inc_gn_los_flag = 'Y' THEN
16230                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inc_gn_los_flg', RTRIM(p_project_in.include_gains_losses_flag));
16231                 END IF;
16232 
16233 
16234                 IF l_b_lb_sch_tp_fg = 'Y' THEN
16235                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_type', RTRIM(p_project_in.labor_sch_type));
16236                 END IF;
16237 
16238                 IF l_b_nn_lb_sch_tp_fg = 'Y' THEN
16239                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_tp', RTRIM(p_project_in.non_labor_sch_type));
16240                 END IF;
16241 
16242                 IF l_b_emp_bill_rt_sch_id_fg2 = 'Y' THEN
16243                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id2', p_project_in.emp_bill_rate_schedule_id);
16244                 END IF;
16245 
16246                 IF l_b_jb_bill_rt_sch_id_fg2 = 'Y' THEN
16247                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id2', p_project_in.job_bill_rate_schedule_id);
16248                 END IF;
16249 
16250                 IF l_b_lb_sch_fx_dt_fg = 'Y' THEN
16251                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_fx_dt', p_project_in.labor_schedule_fixed_date);
16252                 END IF;
16253 
16254                 IF l_b_lb_sch_dsct_fg = 'Y' THEN
16255                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_dsct', p_project_in.labor_schedule_discount);
16256                 END IF;
16257 
16258                 IF l_b_lb_disc_rn_cd_fg2 = 'Y' THEN
16259                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_disc_rn_cd', RTRIM(p_project_in.labor_disc_reason_code));
16260                 END IF;
16261 
16262                 IF l_b_rv_ind_rt_sch_id_fg = 'Y' THEN
16263                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rv_ind_rt_sch_id', p_project_in.REV_IND_RATE_SCH_ID);
16264                 END IF;
16265 
16266                 IF l_b_inv_ind_rt_sch_id_fg = 'Y' THEN
16267                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_ind_rt_sch_id', p_project_in.INV_IND_RATE_SCH_ID);
16268                 END IF;
16269 
16270                 IF l_b_ind_sch_fx_dt_fg = 'Y' THEN
16271                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':rev_ind_sch_fx_dt', p_project_in.rev_ind_sch_fixed_date);
16272                 END IF;
16273 
16274                 IF l_b_inv_ind_sch_fx_dt_fg = 'Y' THEN
16275                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_ind_sch_fx_dt', p_project_in.inv_ind_sch_fixed_date);
16276                 END IF;
16277 
16278                 IF l_b_nn_lb_bill_rt_org_id_fg = 'Y' THEN
16279                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_bill_rt_org_id', p_project_in.non_labor_bill_rate_org_id);
16280                 END IF;
16281 
16282                 IF l_b_n_lb_st_bl_rt_sc_id_fg2 = 'Y' THEN
16283                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lab_std_bill_rt_sch_id', p_project_in.non_lab_std_bill_rt_sch_id);
16284                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_std_bill_rt_sch', RTRIM(l_std_bill_rate_schedule));
16285                 END IF;
16286 
16287                 IF l_b_nn_lb_sch_fx_dt_fg = 'Y' THEN
16288                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_fx_dt', p_project_in.non_labor_schedule_fixed_date);
16289                 END IF;
16290 
16291                 IF l_b_nn_lb_sch_dst_fg = 'Y' THEN
16292                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_dst', p_project_in.non_labor_schedule_discount);
16293                 END IF;
16294 
16295                 IF l_b_n_lb_disc_rsn_cd_fg2  = 'Y' THEN
16296                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':n_lb_dis_rn_cd', RTRIM(p_project_in.non_labor_disc_reason_code));
16297                 END IF;
16298 
16299                 IF l_b_as_alloc_mth_fg = 'Y' THEN
16300                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':as_alloc_mth', RTRIM(p_project_in.asset_allocation_method));
16301                 END IF;
16302 
16303                 IF l_b_cp_evt_proc_fg = 'Y' THEN
16304                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cp_evt_proc', RTRIM(p_project_in.capital_event_processing));
16305                 END IF;
16306 
16307                 IF l_b_cint_rt_sch_id_fg = 'Y' THEN
16308                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_rt_sch', p_project_in.cint_rate_sch_id);
16309                 END IF;
16310 
16311                 IF l_b_cint_elg_fg = 'Y' THEN
16312                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_elg_fg', RTRIM(p_project_in.cint_eligible_flag));
16313                 END IF;
16314 
16315                 IF l_b_cint_stp_dt_fg = 'Y' THEN
16316                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_stp_dt', p_project_in.cint_stop_date);
16317                 END IF;
16318 
16319                 /* Added for bug 6248841 */
16320                 IF l_b_cc_tax_task_id  = 'Y' THEN
16321                   DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_cc_tax_task_id', p_project_in.cc_tax_task_id);
16322                 END IF;
16323 
16324                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_usr_id', G_USER_ID);
16325                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_login_id', G_LOGIN_ID);
16326                 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_id', l_project_id);
16327 
16328 --end bug 2955326
16329 
16330 -- FP_M changes begin (venkat) 3
16331 
16332 -- COMMENT BEGIN --
16333 -------------- Begin Comment : Diable for now as the col sys_program_flag not in pa_projects -------
16334 --                IF l_sys_program_flag = 'Y' THEN
16335 --                  DBMS_SQL.BIND_VARIABLE(l_cursor, ':sys_program_flg', RTRIM(p_project_in.sys_program_flag));
16336 --                END IF;
16337 -------------- end Comment : Diable for now as the col sys_program_flag not in pa_projects ---------
16338 -- COMMENT END --
16339 
16340 	-- Bug # 5072032.
16341 
16342         IF l_b_sys_program_flag_fg = 'Y' THEN
16343         	DBMS_SQL.BIND_VARIABLE(l_cursor, ':sys_program_flag', RTRIM(p_project_in.sys_program_flag));
16344         END IF;
16345 
16346         IF l_b_allow_multi_prog_rollup_fg = 'Y' THEN
16347         	DBMS_SQL.BIND_VARIABLE(l_cursor, ':allow_multi_program_rollup', RTRIM(p_project_in.allow_multi_program_rollup));
16348         END IF;
16349 
16350 	-- End of Bug # 5072032.
16351 
16352 
16353         IF l_enable_top_task_cust_flag = 'Y' THEN
16354           DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_top_task_cust_flg', RTRIM(p_project_in.enable_top_task_customer_flag));
16355         END IF;
16356 
16357         IF l_enable_top_task_inv_mth_flag = 'Y' THEN
16358           DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_top_task_inv_mth_flg', RTRIM(p_project_in.enable_top_task_inv_mth_flag));
16359         END IF;
16360 
16361         IF l_projfunc_attr_for_ar_flag = 'Y' THEN
16362           DBMS_SQL.BIND_VARIABLE(l_cursor, ':projfunc_attr_for_ar_flg', RTRIM(p_project_in.projfunc_attr_for_ar_flag));
16363         END IF;
16364 
16365 -- FP_M changes end (venkat)
16366 
16367 --sunkalya federal bug#5511353
16368 	IF l_date_eff_funds_flag = 'Y' THEN
16369           DBMS_SQL.BIND_VARIABLE(l_cursor, ':date_eff_funds_consumption', RTRIM(p_project_in.date_eff_funds_flag));
16370         END IF;
16371 
16372 --sunkalya federal bug#5511353
16373 
16374     /* 7508661 : EnC : Start */
16375     IF l_ar_rec_notify_flag = 'Y' THEN
16376           DBMS_SQL.BIND_VARIABLE(l_cursor, ':ar_rec_notify_flag', RTRIM(p_project_in.ar_rec_notify_flag));
16377     END IF;
16378 
16379     IF l_auto_release_pwp_inv = 'Y' THEN
16380           DBMS_SQL.BIND_VARIABLE(l_cursor, ':auto_release_pwp_inv', RTRIM(p_project_in.auto_release_pwp_inv));
16381     END IF;
16382     /* 7508661 : EnC : End */
16383                             /* Added for 12.2Payroll billing ER 11899223 */
16384      IF l_bill_labor_accrual = 'Y' THEN
16385           DBMS_SQL.BIND_VARIABLE(l_cursor, ':bill_labor_accrual', RTRIM(p_project_in.bill_labor_accrual));
16386     END IF;
16387 
16388     IF l_adj_on_std_inv = 'Y' THEN
16389           DBMS_SQL.BIND_VARIABLE(l_cursor, ':adj_on_std_inv', RTRIM(p_project_in.adj_on_std_inv));
16390     END IF;
16391                     /* Added for 12.2Payroll billing ER 11899223 */
16392 
16393             l_rows   := dbms_sql.execute(l_cursor);
16394 
16395             IF dbms_sql.is_open (l_cursor)
16396             THEN
16397                  dbms_sql.close_cursor (l_cursor);
16398             END IF;
16399 	END IF;-- Skip below update to avoid locking issue when called from Bulk_Update_Task_Lite
16400    IF l_debug_mode = 'Y' THEN
16401         pa_debug.g_err_stage := 'Done with updating project level data...';
16402         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16403     END IF;
16404 
16405                 -- anlee
16406                 -- Added for intermedia search
16407                 if l_ctx_update_flag = 'Y' then
16408                   PA_PROJECT_CTX_SEARCH_PVT.UPDATE_ROW (
16409                    p_project_id           => l_project_id
16410                   ,p_template_flag        => l_project_rec.template_flag
16411                   ,p_project_name         => l_ctx_proj_name
16412                   ,p_project_number       => l_ctx_proj_number
16413                   ,p_project_long_name    => l_ctx_long_name
16414                   ,p_project_description  => l_ctx_desc
16415                   ,x_return_status        => l_return_status );
16416 
16417    IF l_debug_mode = 'Y' THEN
16418         pa_debug.g_err_stage := 'After calling PA_PROJECT_CTX_SEARCH_PVT.UPDATE_ROW l_return_status='||l_return_status;
16419         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16420     END IF;
16421 
16422 
16423                   IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16424                   THEN
16425                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16426 
16427                   ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16428                   THEN
16429                     RAISE FND_API.G_EXC_ERROR;
16430                   END IF;
16431 
16432                 end if;
16433                 -- End of changes
16434        END IF;
16435 -- Modify opportunity value attributes with values entered in quick entry
16436 --Added By Aditi For Bug 4473105
16437 
16438    OPEN l_get_details_for_opp_csr(l_project_id);
16439    FETCH l_get_details_for_opp_csr INTO l_expected_approval_date, l_projfunc_currency_code, l_project_currency_code;
16440    CLOSE l_get_details_for_opp_csr;
16441 
16442    OPEN l_get_details_for_opp_csr2(l_project_id);
16443    FETCH l_get_details_for_opp_csr2 INTO l_opportunity_value, l_opp_value_currency_code;
16444    CLOSE l_get_details_for_opp_csr2;
16445 
16446 If (p_project_in.project_value IS NOT NULL) AND (p_project_in.project_value <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
16447 Then
16448 l_opportunity_value := p_project_in.project_value;
16449 End if;
16450 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)
16451 Then
16452 l_opp_value_currency_code := p_project_in.opp_value_currency_code;
16453 End if;
16454 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)
16455 Then
16456 l_expected_approval_date := p_project_in.expected_approval_date;
16457 End if;
16458 
16459 -- Skip below update to avoid locking issue when called from Bulk_Update_Task_Lite
16460 IF NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' THEN
16461   PA_OPPORTUNITY_MGT_PVT.MODIFY_PROJECT_ATTRIBUTES
16462      ( p_project_id              => l_project_id
16463       ,p_opportunity_value       => l_opportunity_value
16464       ,p_opp_value_currency_code => l_opp_value_currency_code
16465       ,p_expected_approval_date  => l_expected_approval_date
16466       ,x_return_status           => l_return_status
16467       ,x_msg_count               => l_msg_count
16468       ,x_msg_data                => l_msg_data);
16469 
16470    IF l_debug_mode = 'Y' THEN
16471         pa_debug.g_err_stage := 'After calling PA_OPPORTUNITY_MGT_PVT.MODIFY_PROJECT_ATTRIBUTES l_return_status='||l_return_status;
16472         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16473     END IF;
16474 
16475 
16476      if l_return_status <> 'S' then
16477           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
16478                                 p_msg_name => 'PA_ERR_MOD_PROJ_OPP_ATTR');
16479            RAISE FND_API.G_EXC_ERROR;
16480      end if;
16481 END IF;
16482 -- End of code changes for bug  4473105
16483 
16484 
16485 --Bug 3279981 Review :
16486 --Perform the various updates for change of revenue accrual method, invoice method, top task invoice method flag
16487 --and also for populating distribution rule's invoice method as 'WORK' internally when top task invoice method flag
16488 --is enabled
16489 DECLARE
16490      --The foll. three variables will hold the valid values for revenue accrual method , invoice method
16491      --and invoice method at top task flag of the project. They will be refreshed with the new values in
16492      --case new values have been passed
16493      l_proj_rev_acc_method        VARCHAR2(30) := l_project_rec.revenue_accrual_method;
16494      l_proj_invoice_method        VARCHAR2(30) := l_project_rec.invoice_method;
16495      l_proj_top_task_inv_mth_flag VARCHAR2(1)  := l_project_rec.enable_top_task_inv_mth_flag;
16496      l_return_status              VARCHAR2(10);
16497      l_msg_count                  NUMBER := 0;
16498      l_msg_data                   VARCHAR2(2000);
16499 BEGIN
16500      IF  p_project_in.enable_top_task_inv_mth_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16501      AND p_project_in.enable_top_task_inv_mth_flag IS NOT NULL
16502      AND p_project_in.enable_top_task_inv_mth_flag <> l_project_rec.enable_top_task_inv_mth_flag THEN
16503           l_proj_top_task_inv_mth_flag := p_project_in.enable_top_task_inv_mth_flag;
16504      END IF;
16505 
16506      --The revenue accrual method for the project has changed. Therefore, call the api to default the new revenue accrual
16507      --method to the tasks
16508      IF  nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16509      AND upper( substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) )
16510       <> upper( l_project_rec.revenue_accrual_method ) THEN
16511 
16512           l_proj_rev_acc_method := upper( substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) );
16513           pa_top_task_cust_invoice_pvt.Set_Rev_Acc_At_Top_Task( P_API_VERSION            => 1.0
16514                                                               , P_INIT_MSG_LIST          => 'T'
16515                                                               , P_COMMIT                 => 'F'
16516                                                               , P_VALIDATE_ONLY          => 'F'
16517                                                               , P_VALIDATION_LEVEL       => 100
16518                                                               , P_DEBUG_MODE             => 'N'
16519                                                               , p_calling_module         => 'AMG'
16520                                                               , p_project_id             => l_project_id
16521                                                               , p_rev_acc                => l_proj_rev_acc_method
16522                                                               , x_return_status          => l_return_status
16523                                                               , x_msg_count              => l_msg_count
16524                                                               , x_msg_data               => l_msg_data );
16525      END IF;
16526 
16527      --The invoice method for the project has changed. Call the api to update the invoice method for the tasks only if
16528      --invoice method at top task is unchecked
16529      IF  nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16530      AND upper( substr(p_project_in.distribution_rule,instr(p_project_in.distribution_rule,'/')+1) )
16531       <> upper( l_project_rec.invoice_method ) THEN
16532 
16533           l_proj_invoice_method := upper( substr(p_project_in.distribution_rule,instr(p_project_in.distribution_rule,'/')+1) );
16534           IF 'N' = l_proj_top_task_inv_mth_flag THEN
16535                pa_top_task_cust_invoice_pvt.Set_Inv_Mth_At_Top_Task( P_API_VERSION            => 1.0
16536                                                                    , P_INIT_MSG_LIST          => 'T'
16537                                                                    , P_COMMIT                 => 'F'
16538                                                                    , P_VALIDATE_ONLY          => 'F'
16539                                                                    , P_VALIDATION_LEVEL       => 100
16540                                                                    , P_DEBUG_MODE             => 'N'
16541                                                                    , p_calling_module         => 'AMG'
16542                                                                    , p_project_id             => l_project_id
16543                                                                    , p_inv_mth                => l_proj_invoice_method
16544                                                                    , x_return_status          => l_return_status
16545                                                                    , x_msg_count              => l_msg_count
16546                                                                    , x_msg_data               => l_msg_data );
16547           END IF;
16548 
16549      END IF;
16550 
16551      --IF the invoice method at top task flag has changed from 'Y' to 'N' :
16552      --Update the distribution rule with the correct invoice method, if no distribution rule has been passed
16553      --Call the api to default the invoice method to the tasks
16554      IF 'Y' = l_enable_top_task_inv_mth_flag AND 'N' = p_project_in.enable_top_task_inv_mth_flag THEN
16555           IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
16556                UPDATE pa_projects_all
16557                SET    distribution_rule =
16558                substr(distribution_rule,1,instr(distribution_rule,'/')-1)||'/'||l_proj_invoice_method
16559                WHERE  project_id = l_project_id;
16560           END IF;
16561           pa_top_task_cust_invoice_pvt.Set_Inv_Mth_At_Top_Task( P_API_VERSION            => 1.0
16562                                                               , P_INIT_MSG_LIST          => 'T'
16563                                                               , P_COMMIT                 => 'F'
16564                                                               , P_VALIDATE_ONLY          => 'F'
16565                                                               , P_VALIDATION_LEVEL       => 100
16566                                                               , P_DEBUG_MODE             => 'N'
16567                                                               , p_calling_module         => 'AMG'
16568                                                               , p_project_id             => l_project_id
16569                                                               , p_inv_mth                => l_proj_invoice_method
16570                                                               , x_return_status          => l_return_status
16571                                                               , x_msg_count              => l_msg_count
16572                                                               , x_msg_data               => l_msg_data );
16573      --IF the invoice method at top task flag has changed from 'N' to 'Y' :
16574      --Call the api to set the top task funding level
16575      ELSIF 'Y' = l_enable_top_task_inv_mth_flag AND 'Y' = p_project_in.enable_top_task_inv_mth_flag THEN
16576           pa_top_task_cust_invoice_pvt.set_top_task_funding_level(  P_API_VERSION            => 1.0
16577                                                                   , P_INIT_MSG_LIST          => 'T'
16578                                                                   , P_COMMIT                 => 'F'
16579                                                                   , P_VALIDATE_ONLY          => 'F'
16580                                                                   , P_VALIDATION_LEVEL       => 100
16581                                                                   , P_DEBUG_MODE             => 'N'
16582                                                                   , p_calling_module         => 'AMG'
16583                                                                   , p_project_id             => l_project_id
16584                                                                   , x_return_status          => l_return_status
16585                                                                   , x_msg_count              => l_msg_count
16586                                                                   , x_msg_data               => l_msg_data );
16587 
16588      END IF;
16589 
16590      --IF the invoice method at top task flag is checked,
16591      --invoice method of the distribution rule must internally be populated as WORK
16592      IF 'Y' = l_proj_top_task_inv_mth_flag THEN
16593           UPDATE pa_projects_all
16594           SET    distribution_rule =
16595           substr(distribution_rule,1,instr(distribution_rule,'/')-1)||'/'||'WORK'
16596           WHERE  project_id = l_project_id;
16597      END IF;
16598 END;
16599 --Bug 3279981 Review
16600 
16601 --Project Structures
16602 --dbms_output.put_line ('After executing dynamic sql for updating project ');
16603 --Project Structures
16604 -- Bug 3548473 : 3627124 If the parameter p_pass_entire_structure = 'N' and
16605 -- structure_type = 'WORKPLAN' throw an error. For workplan structure, user
16606 -- needs to pass the all tasks in the structure in proper order.
16607 -- Same holds true for SHARED structure also.
16608 
16609 --dbms_output.put_line ('p_pass_entire_structure : ' || p_pass_entire_structure);
16610 --dbms_output.put_line ('l_structure_type : ' || l_structure_type);
16611 --dbms_output.put_line ('G_IS_WP_SEPARATE_FROM_FN : ' || G_IS_WP_SEPARATE_FROM_FN);
16612 
16613 -- Bug # 5077599.
16614 
16615 if (p_update_mode = 'PA_UPD_TASK_ATTR'
16616     and p_pass_entire_structure = 'N'
16617     and (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' )
16618           OR ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND  p_structure_in.structure_type = 'WORKPLAN' ))) then
16619 
16620 	i:= p_tasks_in.first;
16621 
16622 	while i is not null
16623 	loop
16624 
16625 	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
16626 
16627         	IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16628         	THEN
16629             		pa_interface_utils_pub.map_new_amg_msg
16630             		(p_old_message_code => 'PA_TASK_ID_IS_MISS'-- new message for bug 3548473: 3627124
16631             		,p_msg_attribute    => 'CHANGE'
16632             		,p_resize_flag      => 'N'
16633             		,p_msg_context      => 'PROJ'
16634             		,p_attribute1       => l_project_rec.segment1
16635             		,p_attribute2       => ''
16636             		,p_attribute3       => ''
16637             		,p_attribute4       => ''
16638             		,p_attribute5       => '');
16639         	END IF;
16640 
16641 		p_multiple_task_msg := 'F';
16642         	RAISE FND_API.G_EXC_ERROR;
16643     	end if;
16644 
16645 	i := p_tasks_in.next(i);
16646 	end loop;
16647 
16648 end if;
16649 
16650 -- End of Bug # 5077599.
16651 
16652 -- 3858251 Added code to check, whether tasks are passed or not
16653 
16654 i:= p_tasks_in.first;
16655 
16656 IF p_tasks_in.exists(i) THEN
16657     -- 3858251 if tasks are passed to update_project api , then and then only below
16658     -- validation should get called
16659     -- Bug # 5077599.
16660     /*
16661     IF  (p_pass_entire_structure = 'N' AND l_structure_type = 'WORKPLAN') OR  -- bhaskar
16662         (p_pass_entire_structure = 'N' AND G_IS_WP_SEPARATE_FROM_FN = 'N') THEN
16663     */
16664 
16665     IF  -- Bug # 5077599.
16666 	(p_pass_entire_structure = 'N' AND l_structure_type = 'WORKPLAN' and p_update_mode <> 'PA_UPD_TASK_ATTR') OR  -- bhaskar
16667         (p_pass_entire_structure = 'N' AND G_IS_WP_SEPARATE_FROM_FN = 'N' and p_update_mode <> 'PA_UPD_TASK_ATTR') THEN
16668 	-- Bug # 5077599.
16669         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16670         THEN
16671             pa_interface_utils_pub.map_new_amg_msg
16672             ( p_old_message_code => 'PA_TASK_STRUCT_NOT_ORDRD'-- new message for bug 3548473: 3627124
16673             ,p_msg_attribute    => 'CHANGE'
16674             ,p_resize_flag      => 'N'
16675             ,p_msg_context      => 'PROJ'
16676             ,p_attribute1       => l_project_rec.segment1
16677             ,p_attribute2       => ''
16678             ,p_attribute3       => ''
16679             ,p_attribute4       => ''
16680             ,p_attribute5       => '');
16681         END IF;
16682 
16683         p_multiple_task_msg := 'F';
16684         RAISE FND_API.G_EXC_ERROR;
16685     END IF; -- bug 3548473 : 3627124
16686 END IF;
16687 
16688 -- 3858251 end
16689 
16690 IF p_pass_entire_structure = 'N' THEN
16691   l_update_task_structure := 'Y';
16692 ELSE
16693   l_update_task_structure := 'N';
16694 END IF; -- bug 3548473 : 3627124
16695 
16696 --dbms_output.put_line ('l_update_task_structure : ' || l_update_task_structure);
16697 --dbms_output.put_line ('before calling  PA_PROJ_TASK_STRUC_PUB.create_structure ');
16698 --Creating a WORKPLAN structure
16699   IF p_structure_in.structure_type = 'WORKPLAN'      --This should only be done for a WORKPLAN structure
16700   THEN
16701      PA_PROJ_TASK_STRUC_PUB.create_structure(
16702            p_project_id             => l_project_id
16703           ,p_structure_type         =>l_structure_type --BUg 3548473 3627124 aditi
16704           ,p_structure_version_name => p_structure_in.structure_version_name
16705           ,p_description            => p_structure_in.description
16706           ,x_structure_id           => l_structure_id
16707           ,x_structure_version_id   => l_structure_version_id
16708           ,x_msg_count              => l_msg_count
16709           ,x_msg_data               => l_msg_data
16710           ,x_return_status          => l_return_status
16711         );
16712 
16713    IF l_debug_mode = 'Y' THEN
16714         pa_debug.g_err_stage := 'After calling PA_PROJ_TASK_STRUC_PUB.create_structure l_return_status='||l_return_status;
16715         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16716     END IF;
16717 
16718 
16719         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16720         THEN
16721            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16722 
16723         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16724         THEN
16725           RAISE FND_API.G_EXC_ERROR;
16726         END IF;
16727 
16728   END IF; -- p_structure_in.structure_type = 'WORKPLAN'
16729 
16730   IF ( ( ( p_structure_in.structure_version_name IS NOT NULL AND
16731            p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) OR
16732          ( p_structure_in.description IS NOT NULL AND
16733            p_structure_in.description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) AND
16734        ( p_structure_in.structure_version_id IS NOT NULL AND
16735          p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) ) OR
16736              --updating structure version
16737      ( ( p_structure_in.structure_version_name IS NOT NULL AND
16738          p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
16739        ( p_structure_in.structure_version_id IS NULL OR
16740          p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) )
16741              --creating structure version
16742   THEN
16743       IF l_structure_version_id IS NULL
16744          AND NVL( l_project_rec.template_flag,'N') = 'N'
16745          AND NVL( PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(l_project_id), 'N' ) = 'Y'
16746          AND p_pm_product_code <> 'WORKPLAN'          -- Bug 2871353
16747       THEN
16748           PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
16749              p_project_id             => l_project_id
16750             ,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.
16751             ,p_structure_version_name => p_structure_in.structure_version_name
16752             ,p_structure_version_id   => p_structure_in.structure_version_id
16753             ,p_description            => p_structure_in.description
16754             ,x_structure_version_id   => l_structure_version_id
16755             ,x_msg_count              => l_msg_count
16756             ,x_msg_data               => l_msg_data
16757             ,x_return_status          => l_return_status
16758           );
16759 
16760    IF l_debug_mode = 'Y' THEN
16761         pa_debug.g_err_stage := 'After calling  PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver l_return_status='||l_return_status;
16762         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16763     END IF;
16764 
16765 
16766         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16767         THEN
16768            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16769 
16770         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16771         THEN
16772           RAISE FND_API.G_EXC_ERROR;
16773         END IF;
16774        END IF; --<<structure_version_id is null >>
16775 
16776    END IF;
16777    --Project Connect 4.0
16778    IF l_structure_version_id IS NOT NULL
16779    AND p_pm_product_code <> 'WORKPLAN'       -- Bug 2871353
16780    THEN
16781    g_struc_out_tbl(1).structure_type := p_structure_in.structure_type; --<Bug#2862350>
16782        --g_struc_out_tbl(1).structure_type := 'WORKPLAN';
16783        g_struc_out_tbl(1).structure_version_id := l_structure_version_id;
16784 
16785        -- Bug 3075609.
16786        l_create_task_versions_only := 'Y';
16787 
16788        --Call create_tasks_versions_only api to create new task versions for the
16789        --existing tasks and add them to the new structure version.
16790        PA_PROJ_TASK_STRUC_PUB.create_tasks_versions_only(
16791               p_calling_module       => 'AMG'
16792              --,p_structure_type       => p_structure_in.structure_type   --bug 2738747
16793              ,p_structure_type       => l_structure_type     --bug 2738747
16794              ,p_project_id           => l_project_id
16795              ,p_structure_version_id => l_structure_version_id
16796              ,p_pm_product_code      => l_pm_product_code
16797              ,p_tasks_in       => p_tasks_in
16798              ,x_msg_count            => l_msg_count
16799              ,x_msg_data             => l_msg_data
16800              ,x_return_status        => l_return_status );
16801 
16802   IF l_debug_mode = 'Y' THEN
16803         pa_debug.g_err_stage := 'After calling  PA_PROJ_TASK_STRUC_PUB.create_tasks_versions_only l_return_status='||l_return_status;
16804         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16805     END IF;
16806 
16807 
16808         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16809         THEN
16810            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16811 
16812         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16813         THEN
16814           RAISE FND_API.G_EXC_ERROR;
16815         END IF;
16816    END IF;
16817    --Project Connect 4.0
16818 
16819 
16820    -- For bug2931183 Adding to keep a track of structure version id to be updated
16821   IF l_debug_mode = 'Y' THEN
16822              pa_debug.g_err_stage := ' the value of l_structure_type' || l_structure_type;
16823              pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16824    END IF;
16825 
16826    IF l_structure_version_id IS NULL
16827    THEN
16828         IF (p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16829                   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)
16830          THEN
16831               IF l_structure_type = 'FINANCIAL'
16832               THEN
16833                       OPEN cur_struc_ver_fin(l_project_id,'FINANCIAL');
16834                       FETCH cur_struc_ver_fin INTO l_update_structure_version_id;
16835                       IF cur_struc_ver_fin%NOTFOUND
16836                        THEN
16837                             OPEN cur_struc_ver_wp(l_project_id,'FINANCIAL');
16838                             FETCH cur_struc_ver_wp INTO l_update_structure_version_id;
16839                             CLOSE cur_struc_ver_wp;
16840                       END IF;
16841                       CLOSE cur_struc_ver_fin;
16842               END IF;
16843 
16844         ELSE
16845              l_update_structure_version_id := p_structure_in.structure_version_id;
16846         END IF;
16847    ELSE
16848         l_update_structure_version_id := l_structure_version_id;
16849    END IF;
16850 
16851   IF l_debug_mode = 'Y' THEN
16852              pa_debug.g_err_stage := ' the value of l_update_structure_version_id' || l_update_structure_version_id;
16853              pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16854   END IF;
16855 
16856 
16857 --Project Structures
16858 
16859 -- Since we maybe adding new tasks, need to pass the project record to
16860 -- the Add_task_round_one api. Project may have been updated in the previous lines.
16861 -- Hence need to fetch the updated record once again
16862 
16863     OPEN l_project_csr (l_project_id);
16864     FETCH l_project_csr INTO l_project_rec;
16865     CLOSE l_project_csr;
16866 
16867 
16868 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
16869 pa_project_check_pvt.G_index_counter                := 0;
16870 l_deferred_new_tasks_tbl.delete;
16871 l_deferred_tasks_count := 0;
16872 i := p_tasks_in.first;
16873 
16874 G_ParChildTsk_chks_deferred := 'Y'; -- Bug 10127973
16875 
16876    --project structure
16877 --IF  p_structure_in.structure_type = 'FINANCIAL'   --bug 2738747
16878 IF  l_structure_type = 'FINANCIAL'                  --bug 2738747
16879    --project structure
16880 THEN
16881 
16882 IF p_tasks_in.exists(i)
16883 THEN
16884 --   G_ParChildTsk_chks_deferred := 'Y'; -- Bug 10127973
16885  -- initialize the special global tables and counter set up
16886  -- to handle task number changes
16887 
16888      l_is_wp_seperate_from_fn := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Added for Bug#3451073
16889      WHILE i IS NOT NULL LOOP
16890 
16891         l_task_id := NULL;
16892 
16893         l_tasks_out(i).return_status    := FND_API.G_RET_STS_SUCCESS;
16894 
16895         IF (p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16896              OR  p_tasks_in(i).pa_task_id IS NULL )
16897         THEN
16898             IF  p_tasks_in(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16899                OR p_tasks_in(i).pm_task_reference IS NULL
16900             THEN
16901                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16902                  THEN
16903                     pa_interface_utils_pub.map_new_amg_msg
16904                       ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
16905                        ,p_msg_attribute    => 'CHANGE'
16906                        ,p_resize_flag      => 'N'
16907                        ,p_msg_context      => 'PROJ'
16908                        ,p_attribute1       => l_project_rec.segment1
16909                        ,p_attribute2       => ''
16910                        ,p_attribute3       => ''
16911                        ,p_attribute4       => ''
16912                        ,p_attribute5       => '');
16913                 END IF;
16914 
16915                 l_tasks_out(i).return_status :=  FND_API.G_RET_STS_ERROR ;
16916                 p_multiple_task_msg := 'F';
16917 --              RAISE FND_API.G_EXC_ERROR;
16918            ELSE
16919                OPEN l_get_task_csr
16920                     (l_project_id,p_tasks_in(i).pm_task_reference);
16921                FETCH l_get_task_csr INTO l_task_id;
16922                CLOSE l_get_task_csr;
16923             END IF;
16924 
16925         ELSE  --if task_id is given, check it's validity
16926                 --pambu1('Check Task ID validity');
16927                 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
16928                 -- pa_project_pvt.convert_pm_taskref_to_id_all
16929               pa_project_pvt.convert_pm_taskref_to_id_all
16930             (p_pa_project_id   => l_project_id
16931           ,p_structure_type => l_structure_type
16932           ,p_pa_task_id    => p_tasks_in(i).pa_task_id
16933           ,p_pm_task_reference  => NULL
16934           ,p_out_task_id    => l_task_id
16935           ,p_return_status  => l_return_status );
16936        IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16937         THEN
16938           l_tasks_out(i).return_status    := l_return_status;
16939       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16940 
16941         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16942         THEN
16943           l_tasks_out(i).return_status    := l_return_status;
16944             p_multiple_task_msg := 'F';
16945 --          RAISE FND_API.G_EXC_ERROR;
16946         END IF;
16947         END IF;
16948 
16949    l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
16950     (p_task_number=> p_tasks_in(i).task_name
16951     ,p_task_reference => p_tasks_in(i).pm_task_reference
16952     ,p_task_id => l_task_id);
16953         IF l_task_id IS NULL
16954         THEN
16955 
16956     -- Actions performed using the APIs would be subject to
16957     -- function security. If the responsibility does not allow
16958     -- such functions to be executed, the API should not proceed further
16959     -- since the user does not have access to such functions
16960 
16961     -- Function security procedure check whether user have the
16962     -- privilege to add task or not
16963 
16964         --Bug 2471668: we do not need to assign project id to the global variable as it is already done
16965         --above before checking for update_project function.
16966 
16967     --BUG 4413568 DHI ER , rtarway, if p_update_mode is PA_UPD_TASK_ATTR, WBS/FBS hierarchy can not be changed.
16968        --if l_task_id is null, means this is a new task, so we should be raising an error at this point itself
16969         IF ( p_update_mode = 'PA_UPD_TASK_ATTR') THEN
16970           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16971                                p_msg_name => 'PA_WBS_CANT_CHANGE');
16972           RAISE FND_API.G_EXC_ERROR;
16973         END IF;
16974 
16975         PA_PM_FUNCTION_SECURITY_PUB.check_function_security
16976         (p_api_version_number => p_api_version_number,
16977          p_responsibility_id  => l_resp_id,
16978          p_function_name      => 'PA_PM_ADD_TASK',
16979          p_msg_count          => l_msg_count,
16980          p_msg_data           => l_msg_data,
16981          p_return_status      => l_return_status,
16982          p_function_allowed   => l_function_allowed);
16983 
16984          IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16985          THEN
16986             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16987 
16988          ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16989          THEN
16990             p_multiple_task_msg := 'F';
16991 --          RAISE FND_API.G_EXC_ERROR;
16992          END IF;
16993 
16994          IF l_function_allowed = 'N' THEN
16995            pa_interface_utils_pub.map_new_amg_msg
16996            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
16997             ,p_msg_attribute    => 'CHANGE'
16998             ,p_resize_flag      => 'Y'
16999             ,p_msg_context      => 'GENERAL'
17000             ,p_attribute1       => ''
17001             ,p_attribute2       => ''
17002             ,p_attribute3       => ''
17003             ,p_attribute4       => ''
17004             ,p_attribute5       => '');
17005             p_return_status := FND_API.G_RET_STS_ERROR;
17006             p_multiple_task_msg := 'F';
17007 --          RAISE FND_API.G_EXC_ERROR;
17008          END IF;
17009 
17010          -- check whether the input task number is unique
17011           IF pa_task_utils.check_unique_task_number
17012               (l_project_id, p_tasks_in(i).pa_task_number,NULL) = 0 THEN
17013          -- this means that the task number will not be unique
17014          -- however,the existing task with that task number may get
17015          -- changed during the update process. Hence,we need to process this
17016          -- task only after all tasks have been processed
17017               l_deferred_tasks_count := l_deferred_tasks_count +1;
17018               l_deferred_new_tasks_tbl(l_deferred_tasks_count) := p_tasks_in(i);
17019               l_deferred_tasks_index_tbl(l_deferred_tasks_count).task_index
17020                        := i;
17021 --              l_deferred_tasks_index_tbl(l_deferred_tasks_count).task_index );
17022           ELSE
17023               --l_count := i;
17024               IF l_added_task_tbl.exists(1) THEN
17025                  l_count := l_added_task_tbl.COUNT + 1;
17026               ELSE
17027                  l_count := 1;
17028               END IF;
17029               l_added_task_tbl(l_count) := p_tasks_in(i);
17030               l_task_rec     := l_added_task_tbl(l_count);
17031 
17032         --    Check whether the Parent_Task_Reference is not null
17033         --    Following checking will allow you to create only sub_tasks
17034         --    under parent task.
17035   --     *O
17036   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
17037         (p_tasks_in(i).pm_parent_task_reference IS NOT NULL
17038         AND p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
17039         THEN
17040                 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
17041                 -- pa_project_pvt.convert_pm_taskref_to_id_all
17042               PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
17043               ( p_pa_project_id => l_project_id
17044               , p_structure_type => l_structure_type
17045               , p_pa_task_id    => p_tasks_in(i).pa_parent_task_id
17046               , p_pm_task_reference  => p_tasks_in(i).pm_parent_task_reference
17047               , p_out_task_id      => l_task_id_out
17048               , p_return_status => l_return_status    );
17049                 l_ref_task_id :=  l_task_id_out; --aditi Added for Bug 3801314 : Bug 3627124
17050               IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
17051               THEN
17052 
17053                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17054 
17055               ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR)
17056               THEN
17057                   p_multiple_task_msg := 'F';
17058 --               RAISE FND_API.G_EXC_ERROR;
17059               END IF;
17060 
17061               PA_TASK_UTILS.Check_Create_Subtask_Ok
17062               ( x_task_id => l_task_id_out
17063 --bug 3010538               , x_validation_mode    => 'R'     --bug 2947492
17064               , x_err_code   => l_err_code
17065               , x_err_stage  => l_err_stage
17066               , x_err_stack  => l_err_stack );
17067 
17068               IF l_err_code <> 0
17069               THEN
17070                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
17071                   IF NOT pa_project_pvt.check_valid_message(l_err_stage)
17072                   THEN
17073                      pa_interface_utils_pub.map_new_amg_msg
17074                       ( p_old_message_code => 'PA_CHECK_ADD_SUBTASK_FAILED'
17075                        ,p_msg_attribute    => 'CHANGE'
17076                        ,p_resize_flag      => 'Y'
17077                        ,p_msg_context      => 'ADDT'
17078                        ,p_attribute1       => l_project_rec.segment1
17079                        ,p_attribute2       => l_amg_task_number
17080                        ,p_attribute3       => ''
17081                        ,p_attribute4       => ''
17082                        ,p_attribute5       => '');
17083                   ELSE
17084                      pa_interface_utils_pub.map_new_amg_msg
17085                       ( p_old_message_code => l_err_stage
17086                        ,p_msg_attribute    => 'SPLIT'
17087                        ,p_resize_flag      => 'Y'
17088                        ,p_msg_context      => 'ADDST'
17089                        ,p_attribute1       => l_project_rec.segment1
17090                        ,p_attribute2       => l_amg_task_number
17091                        ,p_attribute3       => ''
17092                        ,p_attribute4       => ''
17093                        ,p_attribute5       => '');
17094                   END IF;
17095                 END IF;
17096                   l_tasks_out(i).return_status    := FND_API.G_RET_STS_ERROR;
17097                   p_multiple_task_msg := 'F';
17098 --                RAISE FND_API.G_EXC_ERROR;
17099 
17100               END IF;
17101            END IF;
17102 
17103           /* Code addition for bug 2982057 starts */
17104        IF l_task_rec.long_task_name IS NULL OR l_task_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17105        then
17106          l_task_rec.long_task_name := l_task_rec.task_name;
17107            else
17108          l_task_rec.long_task_name :=l_task_rec.long_task_name;
17109            end if;
17110            /* Code addition for bug 2982057 ends */
17111               PA_PROJECT_PVT.add_task_round_one
17112                       (p_return_status            => l_return_status,
17113                        p_project_rec              => l_project_rec,
17114                        p_task_rec                 => l_task_rec,
17115                        p_project_type_class_code  => l_project_type_class_code,
17116                        p_service_type_code        => l_service_type_code,
17117                        p_task_id                  => l_task_id);
17118               IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
17119               THEN
17120 
17121                  l_tasks_out(i).return_status    := l_return_status;
17122                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17123 
17124               ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17125               THEN
17126                     l_tasks_out(i).return_status    := l_return_status;
17127                     p_multiple_task_msg := 'F';
17128 --                  RAISE FND_API.G_EXC_ERROR;
17129 
17130               END IF;
17131               l_tasks_out(i).pa_task_id         := l_task_id;
17132 
17133         --used to pass task_id to add_task_round_two API
17134               l_task_id_tbl(l_count).pa_task_id := l_task_id;
17135           END IF;
17136 
17137         ELSE   -- (if l_task_id is not null, that means this is an
17138                       --  existing task. so need to update the task )
17139 -- ---------------------------------------------------------------------------
17140 
17141   --  * SPECIAL HANDLING FOR TASK NUMBER CHANGES. THIS IS TO TAKE CARE
17142   --  * OF TASK NUMBER INTERCHANGES . Eg: Task 2.1 being updated to
17143   --  * 2.3 and Task 2.3 being updated to 2.1
17144 
17145   -- 1. Get the existing task number  -
17146   -- 2. compare existing task number and the incoming task number
17147   --    required inputs task id and task number from the input array
17148   -- 3. If same, proceed with update_task
17149   --  else
17150   --    check whether the new number would be unique
17151   --  If yes, then proceed with the update
17152   --  else, get the task_id and pm_task reference of the
17153   --  original task - the one whose task number is = to the
17154   --  current task's new task number
17155   --  scan the input array to check whether this task's number
17156   --  is also being changed   - required input - task array
17157   --  If no, then raise error,since cannot change the number
17158   --  of the current task
17159   --  If yes, then store the index of the current task
17160   --  in a different array and increment a counter  - global array
17161   --  Let us call this array Task_Number_Updated_Array
17162   --  Update the task number of the current task as G_PA_MISS_CHAR || counter
17163   --  in the database
17164   --  process the next task in the array
17165 
17166 --------------------------------------------------------------------------------
17167         l_proceed_with_update_flag := 'Y';
17168         ----dbms_output.put_line('calling pa_project_pvt.handle_task_number_changes l_task_id'||l_task_id);
17169         ----dbms_output.put_line('value of p_tasks_in(i).pa_task_number'||p_tasks_in(i).pa_task_number);
17170 
17171         pa_project_pvt.handle_task_number_change
17172           (p_project_id                    => l_project_id,
17173            p_task_id                       => l_task_id,
17174            p_array_cell_number             => i,
17175            p_in_task_number                => p_tasks_in(i).pa_task_number,
17176            p_in_task_tbl                   => p_tasks_in,
17177            p_proceed_with_update_flag      => l_proceed_with_update_flag,
17178            p_return_status                 => l_return_status);
17179 
17180         IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
17181            RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17182         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17183            p_multiple_task_msg := 'F';
17184 --         RAISE FND_API.G_EXC_ERROR;
17185         END IF;
17186     ----dbms_output.put_line('value of l_proceed_with_update_flag'||l_proceed_with_update_flag);
17187         IF l_proceed_with_update_flag = 'Y' THEN
17188 
17189 --Project Structures
17190           /** COMMENTED FOR BUG 3841742 :3832333 : This code was assuming that the tasks will
17191           be passed in the correct heirarchy and that the reference task id of the new task being
17192           created was set to the task_id of the most recently created task. This was leading to
17193           the error while updating tasks if the new task had a different top task than the one just
17194           created */
17195              /**   v_first_index := p_tasks_in.first;
17196               v_last_index := p_tasks_in.last;
17197 
17198               IF i > v_first_index AND
17199                  l_tasks_out(i-1).pa_task_id IS NOT NULL AND
17200                  l_tasks_out(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17201               THEN
17202                  v_ref_task_id := l_tasks_out(i-1).pa_task_id;
17203               ELSIF i > v_first_index AND
17204                  p_tasks_in(i-1).pa_task_id IS NOT NULL AND
17205                  p_tasks_in(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17206               THEN
17207                  v_ref_task_id := p_tasks_in(i-1).pa_task_id;
17208               ELSE
17209                  v_ref_task_id := null;
17210               END IF;        END OF COMMENTED PART FOR BUG 3841742 :3832333**/
17211           /** ADDED FOR BUG 3841742 : 3832333 :This code will assign parent_task_id to v_ref_task_id
17212           , if parent is not null.Else v_ref_task_id wil be set to null for top tasks.**/
17213        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)
17214           OR
17215               (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))
17216           AND  p_structure_in.structure_type = 'FINANCIAL'
17217 
17218              THEN
17219 
17220                 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
17221                 -- pa_project_pvt.convert_pm_taskref_to_id_all
17222               PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
17223               ( p_pa_project_id => l_project_id
17224               , p_structure_type => l_structure_type
17225               , p_pa_task_id    => p_tasks_in(i).pa_parent_task_id
17226               , p_pm_task_reference  => p_tasks_in(i).pm_parent_task_reference
17227               , p_out_task_id      => l_task_id_out
17228               , p_return_status => l_return_status    );
17229                v_ref_task_id :=  l_task_id_out; --aditi Added for Bug 3798429: Bug 3801314
17230               IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
17231               THEN
17232 
17233                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17234 
17235               ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR)
17236               THEN
17237                   p_multiple_task_msg := 'F';
17238 --               RAISE FND_API.G_EXC_ERROR;
17239               END IF;
17240           ELSE
17241           v_ref_task_id := null;
17242           END IF;
17243       /*** CHANGES END FOR BUG 3841742 : 3832333 **/
17244 --      --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);
17245   --    --dbms_output.put_line('task etc Effort :'||p_tasks_in(i).etc_effort);
17246     --  --dbms_output.put_line('% complete'||p_tasks_in(i).percent_complete);
17247 --Project Structures
17248 /* Start changes for bug 10043448*/
17249    OPEN cur_inv_date(l_task_id);
17250    FETCH cur_inv_date INTO x_si_date ;
17251    IF cur_inv_date%NOTFOUND THEN
17252      CLOSE cur_inv_date ;
17253    ELSE
17254        IF (x_si_date IS NOT NULL AND
17255            p_tasks_in(i).task_completion_date IS NOT NULL AND
17256            p_tasks_in(i).task_completion_date < x_si_date ) THEN
17257                close cur_inv_date;
17258 
17259              PA_UTILS.ADD_MESSAGE(
17260                      p_app_short_name => 'PA'
17261                      , p_msg_name       => 'PA_SI_INVALID_FINISH_DATE'
17262                      , p_token1         => 'SIFINISHDATE'
17263                      , p_value1         => x_si_date);
17264 
17265                   RAISE FND_API.G_EXC_ERROR;
17266 
17267       ELSE
17268         close cur_inv_date;
17269       END IF ;
17270    END IF ;
17271 /* End changes for bug 10043448*/
17272 
17273           IF l_debug_mode = 'Y' THEN
17274                pa_debug.write(l_module_name,'Calling update Task',3);
17275                pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(i).etc_effort,3);
17276                pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(i).percent_complete,3);
17277           END IF;
17278       ----dbms_output.put_line('value of p_tasks_in(i).pa_task_number before calling update_task'||p_tasks_in(i).pa_task_number);
17279 
17280                   Update_Task (
17281                   p_api_version_number            => p_api_version_number,
17282                   p_commit        => FND_API.G_FALSE,
17283                   p_msg_count                     => p_msg_count,
17284                   p_msg_data                      => p_msg_data,
17285                   p_return_status      => l_return_status,
17286                   p_pm_product_code            => p_pm_product_code,
17287                   p_pa_project_id                 => l_project_id,
17288                   p_pa_task_id                    => l_task_id,
17289 --Project Structures
17290                   p_ref_task_id                   => v_ref_task_id,
17291 --Project Structures
17292                   p_pm_task_reference             => p_tasks_in(i).pm_task_reference,
17293                   p_task_number                   => p_tasks_in(i).pa_task_number,
17294                   p_task_name                     => p_tasks_in(i).task_name,
17295                   p_long_task_name                => p_tasks_in(i).long_task_name,
17296                   p_task_description              => p_tasks_in(i).task_description,
17297                   p_task_start_date               => p_tasks_in(i).task_start_date,
17298                   p_task_completion_date          => p_tasks_in(i).task_completion_date,
17299 -- Start Fix for Bug # 1289156
17300                   p_early_start_date              => p_tasks_in(i).early_start_date,
17301                   p_early_finish_date             => p_tasks_in(i).early_finish_date,
17302                   p_late_start_date               => p_tasks_in(i).late_start_date,
17303                   p_late_finish_date              => p_tasks_in(i).late_finish_date,
17304                   p_actual_start_date             => p_tasks_in(i).actual_start_date,
17305                   p_actual_finish_date            => p_tasks_in(i).actual_finish_date,
17306 -- End Fix for Bug # 1289156
17307                   p_pm_parent_task_reference      => p_tasks_in(i).pm_parent_task_reference,
17308                   p_pa_parent_task_id      => p_tasks_in(i).pa_parent_task_id,
17309                   p_address_id        => p_tasks_in(i).address_id,
17310                   p_carrying_out_organization_id  => p_tasks_in(i).carrying_out_organization_id,
17311                   p_service_type_code             => p_tasks_in(i).service_type_code,
17312                   p_task_manager_person_id        => p_tasks_in(i).task_manager_person_id,
17313                   p_billable_flag                 => p_tasks_in(i).billable_flag,
17314                   p_chargeable_flag               => p_tasks_in(i).chargeable_flag,
17315                   p_ready_to_bill_flag            => p_tasks_in(i).ready_to_bill_flag,
17316                   p_ready_to_distribute_flag      => p_tasks_in(i).ready_to_distribute_flag,
17317                   p_limit_to_txn_controls_flag    => p_tasks_in(i).limit_to_txn_controls_flag,
17318                   p_labor_bill_rate_org_id        => p_tasks_in(i).labor_bill_rate_org_id,
17319                   p_labor_std_bill_rate_schdl     => p_tasks_in(i).labor_std_bill_rate_schdl,
17320                   p_labor_schedule_fixed_date     => p_tasks_in(i).labor_schedule_fixed_date,
17321                   p_labor_schedule_discount       => p_tasks_in(i).labor_schedule_discount,
17322                   p_nl_bill_rate_org_id           => p_tasks_in(i).non_labor_bill_rate_org_id,
17323                   p_nl_std_bill_rate_schdl       =>  p_tasks_in(i).non_labor_std_bill_rate_schdl,
17324                   p_nl_schedule_fixed_date       =>  p_tasks_in(i).non_labor_schedule_fixed_date,
17325                   p_nl_schedule_discount         =>  p_tasks_in(i).non_labor_schedule_discount,
17326                   p_labor_cost_multiplier_name   =>  p_tasks_in(i).labor_cost_multiplier_name,
17327                   p_cost_ind_rate_sch_id          => p_tasks_in(i).cost_ind_rate_sch_id,
17328                   p_rev_ind_rate_sch_id           => p_tasks_in(i).rev_ind_rate_sch_id,
17329                   p_inv_ind_rate_sch_id           => p_tasks_in(i).inv_ind_rate_sch_id,
17330                   p_cost_ind_sch_fixed_date       => p_tasks_in(i).cost_ind_sch_fixed_date,
17331                   p_rev_ind_sch_fixed_date        => p_tasks_in(i).rev_ind_sch_fixed_date,
17332                   p_inv_ind_sch_fixed_date        => p_tasks_in(i).inv_ind_sch_fixed_date,
17333                   p_labor_sch_type                => p_tasks_in(i).labor_sch_type,
17334                   p_nl_sch_type                   => p_tasks_in(i).non_labor_sch_type,
17335                   p_tasks_dff                     => p_tasks_in(i).tasks_dff, --bug 6153503
17336                   p_attribute_category            => p_tasks_in(i).attribute_category,
17337                   p_attribute1                   => p_tasks_in(i).attribute1,
17338                   p_attribute2                   => p_tasks_in(i).attribute2,
17339                   p_attribute3                   => p_tasks_in(i).attribute3,
17340                   p_attribute4                   => p_tasks_in(i).attribute4,
17341                   p_attribute5                   => p_tasks_in(i).attribute5,
17342                   p_attribute6                   => p_tasks_in(i).attribute6,
17343                   p_attribute7                   => p_tasks_in(i).attribute7,
17344                   p_attribute8                   => p_tasks_in(i).attribute8,
17345                   p_attribute9                   => p_tasks_in(i).attribute9,
17346                   p_attribute10                  => p_tasks_in(i).attribute10,
17347                   --bug 6153503
17348                   p_attribute11                   => p_tasks_in(i).attribute11,
17349                   p_attribute12                   => p_tasks_in(i).attribute12,
17350                   p_attribute13                   => p_tasks_in(i).attribute13,
17351                   p_attribute14                   => p_tasks_in(i).attribute14,
17352                   p_attribute15                   => p_tasks_in(i).attribute15,
17353                   p_allow_cross_charge_flag      =>
17354 p_tasks_in(i).allow_cross_charge_flag,
17355                   p_project_rate_type  => p_tasks_in(i).project_rate_type,
17356                   p_project_rate_date  => p_tasks_in(i).project_rate_date,
17357                   p_cc_process_labor_flag  => p_tasks_in(i).cc_process_labor_flag,
17358                   p_labor_tp_schedule_id  => p_tasks_in(i).labor_tp_schedule_id,
17359                   p_labor_tp_fixed_date  => p_tasks_in(i).labor_tp_fixed_date,
17360                   p_cc_process_nl_flag  => p_tasks_in(i).cc_process_nl_flag,
17361                   p_nl_tp_schedule_id  => p_tasks_in(i).nl_tp_schedule_id,
17362                   p_nl_tp_fixed_date  => p_tasks_in(i).nl_tp_fixed_date,
17363                   p_receive_project_invoice_flag  =>
17364 p_tasks_in(i).receive_project_invoice_flag,
17365                   p_work_type_id  => p_tasks_in(i).work_type_id,
17366                   p_emp_bill_rate_schedule_id  => p_tasks_in(i).emp_bill_rate_schedule_id,
17367                   p_job_bill_rate_schedule_id  => p_tasks_in(i).job_bill_rate_schedule_id,
17368 --Sakthi MCB
17369                   p_non_lab_std_bill_rt_sch_id  => p_tasks_in(i).non_lab_std_bill_rt_sch_id,
17370                   p_taskfunc_cost_rate_type  => p_tasks_in(i).taskfunc_cost_rate_type,
17371                   p_taskfunc_cost_rate_date  => p_tasks_in(i).taskfunc_cost_rate_date,
17372 --Sakthi MCB
17373                   p_labor_disc_reason_code  => p_tasks_in(i).labor_disc_reason_code,
17374                   p_non_labor_disc_reason_code  => p_tasks_in(i).non_labor_disc_reason_code,
17375 --project structures
17376 --bug 2744729, 2740565
17377                   p_structure_type                     => l_structure_type,
17378                   p_structure_version_id               => p_structure_in.structure_version_id,
17379                   P_OBLIGATION_START_DATE              => p_tasks_in(i).OBLIGATION_START_DATE,
17380                   P_OBLIGATION_FINISH_DATE             => p_tasks_in(i).OBLIGATION_FINISH_DATE,
17381                   P_ESTIMATED_START_DATE               => p_tasks_in(i).ESTIMATED_START_DATE,
17382                   P_ESTIMATED_FINISH_DATE              => p_tasks_in(i).ESTIMATED_FINISH_DATE,
17383                   P_BASELINE_START_DATE                => p_tasks_in(i).BASELINE_START_DATE,
17384                   P_BASELINE_FINISH_DATE               => p_tasks_in(i).BASELINE_FINISH_DATE,
17385                   P_CLOSED_DATE                        => p_tasks_in(i).CLOSED_DATE,
17386                   P_WQ_UOM_CODE                        => p_tasks_in(i).WQ_UOM_CODE,
17387                   P_WQ_ITEM_CODE                       => p_tasks_in(i).WQ_ITEM_CODE,
17388                   P_STATUS_CODE                        => p_tasks_in(i).STATUS_CODE,
17389                   P_WF_STATUS_CODE                     => p_tasks_in(i).WF_STATUS_CODE,
17390                   P_PM_SOURCE_CODE                     => p_tasks_in(i).PM_SOURCE_CODE,
17391                   P_PRIORITY_CODE                      => p_tasks_in(i).PRIORITY_CODE,
17392                   P_MILESTONE_FLAG                     => p_tasks_in(i).MILESTONE_FLAG,
17393                   P_CRITICAL_FLAG                      => p_tasks_in(i).CRITICAL_FLAG,
17394                   P_INC_PROJ_PROGRESS_FLAG             => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG,
17395                   P_LINK_TASK_FLAG                     => p_tasks_in(i).LINK_TASK_FLAG,
17396                   P_CALENDAR_ID                        => p_tasks_in(i).CALENDAR_ID,
17397                   P_PLANNED_EFFORT                     => p_tasks_in(i).PLANNED_EFFORT,
17398                   P_DURATION                           => p_tasks_in(i).DURATION,
17399                   P_PLANNED_WORK_QUANTITY              => p_tasks_in(i).PLANNED_WORK_QUANTITY,
17400                   P_TASK_TYPE                          => p_tasks_in(i).TASK_TYPE,
17401 --bug 2856033
17402                   p_scheduled_start_date               => p_tasks_in(i).scheduled_start_date,
17403                   p_scheduled_finish_date               => p_tasks_in(i).scheduled_finish_date,
17404 --bug 2744729, 2740565
17405 --Project Structures
17406 --PA L Changes 2872708
17407                   p_retirement_cost_flag               => p_tasks_in(i).retirement_cost_flag,
17408                   p_cint_eligible_flag                 => p_tasks_in(i).cint_eligible_flag,
17409                   p_cint_stop_date                     => p_tasks_in(i).cint_stop_date,
17410 --End PA L changes 2872708
17411                   p_out_pa_task_id                => l_out_pa_task_id,
17412                   p_out_pm_task_reference         => l_out_pm_task_reference,
17413                   p_update_task_structure         => l_update_task_structure  -- for bug 2931183 to indicate bulk structure processing
17414           -- modified p_update_task_structure value for bug 3548473 : Bug 3627124
17415 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
17416                   ,p_ext_act_duration              => p_tasks_in(i).ext_act_duration
17417                   ,p_ext_remain_duration           => p_tasks_in(i).ext_remain_duration
17418                   ,p_ext_sch_duration              => p_tasks_in(i).ext_sch_duration
17419 -- (End venkat) new params for bug #3450684 -------------------------------------------------
17420 
17421 -- set the new params - bug #3654243 ----------------------------------------------
17422         ,p_base_percent_comp_deriv_code => p_tasks_in(i).base_percent_comp_deriv_code
17423         ,p_sch_tool_tsk_type_code       => p_tasks_in(i).sch_tool_tsk_type_code
17424         ,p_constraint_type_code         => p_tasks_in(i).constraint_type_code
17425         ,p_constraint_date              => p_tasks_in(i).constraint_date
17426         ,p_free_slack                   => p_tasks_in(i).free_slack
17427         ,p_total_slack                  => p_tasks_in(i).total_slack
17428         ,p_effort_driven_flag           => p_tasks_in(i).effort_driven_flag
17429         ,p_level_assignments_flag       => p_tasks_in(i).level_assignments_flag
17430         ,p_gen_etc_source_code          => p_tasks_in(i).gen_etc_source_code
17431 -- set the new params - bug #3654243 -------------------------------------------------
17432 
17433 
17434 -- For bug 3279981 Review
17435                   ,p_invoice_method            => p_tasks_in(i).invoice_method
17436                   ,p_customer_id                    => p_tasks_in(i).customer_id
17437           ,p_is_wp_seperate_from_fn        => l_is_wp_seperate_from_fn  -- Added for bug#3451073
17438           --Added by rtarway, for BUG 3919800
17439                  , p_etc_effort                    => p_tasks_in(i).etc_effort
17440                  , p_percent_complete              => p_tasks_in(i).percent_complete
17441                   --Added by rtarway, for BUG 3919800
17442                  ,p_calling_api      => 'UPDATE_PROJECT'  --Bug # 4199694
17443                     ,p_adj_on_std_inv =>p_tasks_in(i).adj_on_std_inv         /* Added for 12.2Payroll billing ER 11899223 */
17444                   );
17445 
17446     IF l_debug_mode = 'Y' THEN
17447         pa_debug.g_err_stage := 'After update_task first call...l_return_status=||l_return_status';
17448         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17449     END IF;
17450 
17451 
17452               ----dbms_output.put_line('Value of return status of update_task'    ||l_return_status);
17453 
17454                   IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
17455                   THEN
17456 
17457                        l_tasks_out(i).return_status := l_return_status;
17458                        RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17459 
17460                   ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17461                   THEN
17462                         l_tasks_out(i).return_status := l_return_status;
17463                         p_multiple_task_msg := 'F';
17464 --                      RAISE FND_API.G_EXC_ERROR;
17465 
17466                   END IF;
17467 
17468                   l_tasks_out(i).pa_task_id       := l_task_id;
17469            l_tasks_out(i).pm_task_reference       := l_out_pm_task_reference;
17470             END IF;  -- If l_proceed_with_update_flag = 'Y'
17471         END IF;  -- If l_task_id IS NULL
17472 
17473         i := p_tasks_in.next(i);
17474 
17475      END LOOP;
17476 
17477 END IF;
17478  --   Scan the Task_Number_Updated_Array
17479  --   If there are any records in this array,
17480  --   get the index that is already stored and
17481  --   call update_task for that task
17482  --   For eg: If the 8th and 14th task records had been
17483  --   marked for this special Task number update
17484  --   then call Update_task API for these two task records
17485 
17486 --Project Structures
17487       v_first_index := p_tasks_in.first;
17488       v_last_index := p_tasks_in.last;
17489 --Project Structures
17490 
17491   IF pa_project_check_pvt.G_index_counter > 0 THEN
17492      IF pa_project_check_pvt.G_task_num_updated_index_tbl.EXISTS (1) THEN
17493         FOR i in 1..pa_project_check_pvt.G_task_num_updated_index_tbl.COUNT LOOP
17494         l_array_index :=
17495         pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_index;
17496 
17497 --Project Structures
17498         for j in v_first_index..v_last_index loop
17499             IF pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_id = p_tasks_in(j).pa_task_id AND
17500                j > v_first_index
17501             THEN
17502                 v_ref_task_id := p_tasks_in(j-1).pa_task_id;
17503             ELSE
17504                 v_ref_task_id := null;
17505             END IF;
17506         end loop;
17507 --Project Structures
17508 
17509 IF l_debug_mode = 'Y' THEN
17510      pa_debug.write(l_module_name,'Calling update Task',3);
17511      pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(l_array_index).etc_effort,3);
17512      pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(l_array_index).percent_complete,3);
17513 END IF;
17514         Update_Task (
17515          p_api_version_number            => p_api_version_number,
17516          p_commit        => FND_API.G_FALSE,
17517          p_msg_count                      => p_msg_count,
17518          p_msg_data                       => p_msg_data,
17519          p_return_status      => l_return_status,
17520          p_pm_product_code            => p_pm_product_code,
17521          p_pa_project_id                  => l_project_id,
17522          p_pa_task_id                     =>
17523            pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_id,
17524 --Project Structures
17525          p_ref_task_id                    => v_ref_task_id,
17526 --Project STRUCTUres
17527          p_pm_task_reference              =>
17528          p_tasks_in(l_array_index).pm_task_reference,
17529          p_task_number                   =>
17530            p_tasks_in(l_array_index).pa_task_number,
17531          p_task_name                     =>
17532            p_tasks_in(l_array_index).task_name,
17533          p_long_task_name                =>
17534            p_tasks_in(l_array_index).long_task_name,
17535          p_task_description              =>
17536            p_tasks_in(l_array_index).task_description,
17537          p_task_start_date               =>
17538            p_tasks_in(l_array_index).task_start_date,
17539          p_task_completion_date          =>
17540            p_tasks_in(l_array_index).task_completion_date,
17541 -- Start Fix for Bug # 1289156
17542          p_early_start_date              =>
17543            p_tasks_in(l_array_index).early_start_date,
17544          p_early_finish_date             =>
17545            p_tasks_in(l_array_index).early_finish_date,
17546          p_late_start_date               =>
17547            p_tasks_in(l_array_index).late_start_date,
17548          p_late_finish_date              =>
17549            p_tasks_in(l_array_index).late_finish_date,
17550          p_actual_start_date             =>
17551            p_tasks_in(l_array_index).actual_start_date,
17552          p_actual_finish_date            =>
17553            p_tasks_in(l_array_index).actual_finish_date,
17554 -- End Fix for Bug # 1289156
17555          p_pm_parent_task_reference      =>
17556            p_tasks_in(l_array_index).pm_parent_task_reference,
17557          p_pa_parent_task_id      =>
17558            p_tasks_in(l_array_index).pa_parent_task_id,
17559          p_address_id        =>
17560            p_tasks_in(l_array_index).address_id,
17561          p_carrying_out_organization_id  =>
17562            p_tasks_in(l_array_index).carrying_out_organization_id,
17563          p_service_type_code             =>
17564            p_tasks_in(l_array_index).service_type_code,
17565          p_task_manager_person_id        =>
17566            p_tasks_in(l_array_index).task_manager_person_id,
17567          p_billable_flag                 =>
17568            p_tasks_in(l_array_index).billable_flag,
17569          p_chargeable_flag               =>
17570            p_tasks_in(l_array_index).chargeable_flag,
17571          p_ready_to_bill_flag            =>
17572            p_tasks_in(l_array_index).ready_to_bill_flag,
17573          p_ready_to_distribute_flag      =>
17574            p_tasks_in(l_array_index).ready_to_distribute_flag,
17575          p_limit_to_txn_controls_flag    =>
17576            p_tasks_in(l_array_index).limit_to_txn_controls_flag,
17577          p_labor_bill_rate_org_id        =>
17578            p_tasks_in(l_array_index).labor_bill_rate_org_id,
17579          p_labor_std_bill_rate_schdl     =>
17580            p_tasks_in(l_array_index).labor_std_bill_rate_schdl,
17581          p_labor_schedule_fixed_date     =>
17582            p_tasks_in(l_array_index).labor_schedule_fixed_date,
17583          p_labor_schedule_discount       =>
17584            p_tasks_in(l_array_index).labor_schedule_discount,
17585          p_nl_bill_rate_org_id           =>
17586            p_tasks_in(l_array_index).non_labor_bill_rate_org_id,
17587          p_nl_std_bill_rate_schdl       =>
17588            p_tasks_in(l_array_index).non_labor_std_bill_rate_schdl,
17589          p_nl_schedule_fixed_date       =>
17590            p_tasks_in(l_array_index).non_labor_schedule_fixed_date,
17591          p_nl_schedule_discount         =>
17592            p_tasks_in(l_array_index).non_labor_schedule_discount,
17593          p_labor_cost_multiplier_name   =>
17594            p_tasks_in(l_array_index).labor_cost_multiplier_name,
17595          p_cost_ind_rate_sch_id          =>
17596            p_tasks_in(l_array_index).cost_ind_rate_sch_id,
17597          p_rev_ind_rate_sch_id           =>
17598            p_tasks_in(l_array_index).rev_ind_rate_sch_id,
17599          p_inv_ind_rate_sch_id           =>
17600            p_tasks_in(l_array_index).inv_ind_rate_sch_id,
17601          p_cost_ind_sch_fixed_date       =>
17602            p_tasks_in(l_array_index).cost_ind_sch_fixed_date,
17603          p_rev_ind_sch_fixed_date        =>
17604            p_tasks_in(l_array_index).rev_ind_sch_fixed_date,
17605          p_inv_ind_sch_fixed_date        =>
17606            p_tasks_in(l_array_index).inv_ind_sch_fixed_date,
17607          p_labor_sch_type                =>
17608            p_tasks_in(l_array_index).labor_sch_type,
17609          p_nl_sch_type                   =>
17610            p_tasks_in(l_array_index).non_labor_sch_type,
17611          p_tasks_dff                     => p_tasks_in(l_array_index).tasks_dff, --bug 6153503
17612          p_attribute_category            =>
17613            p_tasks_in(l_array_index).attribute_category,
17614          p_attribute1                   => p_tasks_in(l_array_index).attribute1,
17615          p_attribute2                   => p_tasks_in(l_array_index).attribute2,
17616          p_attribute3                   => p_tasks_in(l_array_index).attribute3,
17617          p_attribute4                   => p_tasks_in(l_array_index).attribute4,
17618          p_attribute5                   => p_tasks_in(l_array_index).attribute5,
17619          p_attribute6                   => p_tasks_in(l_array_index).attribute6,
17620          p_attribute7                   => p_tasks_in(l_array_index).attribute7,
17621          p_attribute8                   => p_tasks_in(l_array_index).attribute8,
17622          p_attribute9                   => p_tasks_in(l_array_index).attribute9,
17623          p_attribute10                  => p_tasks_in(l_array_index).attribute10,
17624          --bug 6153503
17625          p_attribute11                   => p_tasks_in(l_array_index).attribute11,
17626          p_attribute12                   => p_tasks_in(l_array_index).attribute12,
17627          p_attribute13                   => p_tasks_in(l_array_index).attribute13,
17628          p_attribute14                   => p_tasks_in(l_array_index).attribute14,
17629          p_attribute15                   => p_tasks_in(l_array_index).attribute15,
17630          --Chnaged the index from i to l_array_index for BUG 4016583, rtarway
17631          p_allow_cross_charge_flag      => p_tasks_in(l_array_index).allow_cross_charge_flag,
17632          p_project_rate_type            => p_tasks_in(l_array_index).project_rate_type,
17633          p_project_rate_date            => p_tasks_in(l_array_index).project_rate_date,
17634          p_cc_process_labor_flag        => p_tasks_in(l_array_index).cc_process_labor_flag,
17635          p_labor_tp_schedule_id         => p_tasks_in(l_array_index).labor_tp_schedule_id,
17636          p_labor_tp_fixed_date          => p_tasks_in(l_array_index).labor_tp_fixed_date,
17637          p_cc_process_nl_flag           => p_tasks_in(l_array_index).cc_process_labor_flag,
17638          p_nl_tp_schedule_id            => p_tasks_in(l_array_index).nl_tp_schedule_id,
17639          p_nl_tp_fixed_date             => p_tasks_in(l_array_index).nl_tp_fixed_date,
17640          p_receive_project_invoice_flag => p_tasks_in(l_array_index).receive_project_invoice_flag,
17641          p_work_type_id                 => p_tasks_in(l_array_index).work_type_id,
17642          p_emp_bill_rate_schedule_id    => p_tasks_in(l_array_index).emp_bill_rate_schedule_id,
17643 /* Bug#2802918 - Changed the passing parameter from emp_bill_rate_schedule_id to
17644 job_bill_rate_schedule_id below */
17645          p_job_bill_rate_schedule_id    => p_tasks_in(l_array_index).job_bill_rate_schedule_id,
17646 --Sakthi MCB
17647          p_non_lab_std_bill_rt_sch_id   => p_tasks_in(l_array_index).non_lab_std_bill_rt_sch_id,
17648          p_taskfunc_cost_rate_type      => p_tasks_in(l_array_index).taskfunc_cost_rate_type,
17649          p_taskfunc_cost_rate_date      => p_tasks_in(l_array_index).taskfunc_cost_rate_date,
17650         --End Changes for BUG 4016583, rtarway
17651 --Sakthi MCB
17652          p_labor_disc_reason_code       => p_tasks_in(l_array_index).labor_disc_reason_code,
17653          p_non_labor_disc_reason_code   => p_tasks_in(l_array_index).non_labor_disc_reason_code,
17654 --project structures
17655 --bug 2744729, 2740565
17656                   p_structure_type                     => l_structure_type,
17657                   p_structure_version_id               => p_structure_in.structure_version_id,
17658                   P_OBLIGATION_START_DATE              => p_tasks_in(l_array_index).OBLIGATION_START_DATE,
17659                   P_OBLIGATION_FINISH_DATE             => p_tasks_in(l_array_index).OBLIGATION_FINISH_DATE,
17660                   P_ESTIMATED_START_DATE               => p_tasks_in(l_array_index).ESTIMATED_START_DATE,
17661 
17662                   P_ESTIMATED_FINISH_DATE              => p_tasks_in(l_array_index).ESTIMATED_FINISH_DATE,
17663                   P_BASELINE_START_DATE                => p_tasks_in(l_array_index).BASELINE_START_DATE,
17664                   P_BASELINE_FINISH_DATE               => p_tasks_in(l_array_index).BASELINE_FINISH_DATE,
17665                   P_CLOSED_DATE                        => p_tasks_in(l_array_index).CLOSED_DATE,
17666                   P_WQ_UOM_CODE                        => p_tasks_in(l_array_index).WQ_UOM_CODE,
17667                   P_WQ_ITEM_CODE                       => p_tasks_in(l_array_index).WQ_ITEM_CODE,
17668                   P_STATUS_CODE                        => p_tasks_in(l_array_index).STATUS_CODE,
17669                   P_WF_STATUS_CODE                     => p_tasks_in(l_array_index).WF_STATUS_CODE,
17670                   P_PM_SOURCE_CODE                     => p_tasks_in(l_array_index).PM_SOURCE_CODE,
17671                   P_PRIORITY_CODE                      => p_tasks_in(l_array_index).PRIORITY_CODE,
17672                   P_MILESTONE_FLAG                     => p_tasks_in(l_array_index).MILESTONE_FLAG,
17673                   P_CRITICAL_FLAG                      => p_tasks_in(l_array_index).CRITICAL_FLAG,
17674                   P_INC_PROJ_PROGRESS_FLAG             => p_tasks_in(l_array_index).INC_PROJ_PROGRESS_FLAG,
17675                   P_LINK_TASK_FLAG                     => p_tasks_in(l_array_index).LINK_TASK_FLAG,
17676                   P_CALENDAR_ID                        => p_tasks_in(l_array_index).CALENDAR_ID,
17677                   P_PLANNED_EFFORT                     => p_tasks_in(l_array_index).PLANNED_EFFORT,
17678                   P_DURATION                           => p_tasks_in(l_array_index).DURATION,
17679                   P_PLANNED_WORK_QUANTITY              => p_tasks_in(l_array_index).PLANNED_WORK_QUANTITY,
17680                   P_TASK_TYPE                          => p_tasks_in(l_array_index).TASK_TYPE,
17681 --bug 2856033
17682                   p_scheduled_start_date               => p_tasks_in(l_array_index).scheduled_start_date,
17683                   p_scheduled_finish_date               => p_tasks_in(l_array_index).scheduled_finish_date,
17684 --bug 2744729, 2740565
17685 --project structures
17686 --Bug 3018061
17687 --PA L Changes 2872708
17688                   p_retirement_cost_flag               => p_tasks_in(l_array_index).retirement_cost_flag,
17689                   p_cint_eligible_flag                 => p_tasks_in(l_array_index).cint_eligible_flag,
17690                   p_cint_stop_date                     => p_tasks_in(l_array_index).cint_stop_date,
17691 --End PA L changes 2872708
17692 --end Bug 3018061
17693 
17694 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
17695                   p_ext_act_duration     => p_tasks_in(l_array_index).ext_act_duration,
17696                   p_ext_remain_duration  => p_tasks_in(l_array_index).ext_remain_duration,
17697                   p_ext_sch_duration     => p_tasks_in(l_array_index).ext_sch_duration,
17698 -- (End venkat) new params for bug #3450684 -------------------------------------------------
17699 
17700 -- set the new params - bug #3654243 ----------------------------------------------
17701          p_base_percent_comp_deriv_code => p_tasks_in(l_array_index).base_percent_comp_deriv_code
17702         ,p_sch_tool_tsk_type_code       => p_tasks_in(l_array_index).sch_tool_tsk_type_code
17703         ,p_constraint_type_code         => p_tasks_in(l_array_index).constraint_type_code
17704         ,p_constraint_date              => p_tasks_in(l_array_index).constraint_date
17705         ,p_free_slack                   => p_tasks_in(l_array_index).free_slack
17706         ,p_total_slack                  => p_tasks_in(l_array_index).total_slack
17707         ,p_effort_driven_flag           => p_tasks_in(l_array_index).effort_driven_flag
17708         ,p_level_assignments_flag       => p_tasks_in(l_array_index).level_assignments_flag
17709         ,p_gen_etc_source_code          => p_tasks_in(l_array_index).gen_etc_source_code
17710         ,p_invoice_method       => p_tasks_in(l_array_index).invoice_method
17711                 ,p_customer_id                  => p_tasks_in(l_array_index).customer_id,
17712 -- set the new params - bug #3654243 -------------------------------------------------
17713 
17714 
17715                   p_out_pa_task_id                => l_out_pa_task_id,
17716                   p_out_pm_task_reference         => l_out_pm_task_reference,
17717                   p_update_task_structure         => l_update_task_structure,   -- for bug 2931183 to indicate bulk structure processing
17718                   --Added by rtarway, for BUG 3919800
17719                   p_etc_effort                    => p_tasks_in(l_array_index).etc_effort,
17720                   p_percent_complete              => p_tasks_in(l_array_index).percent_complete
17721                   --Added by rtarway, for BUG 3919800
17722                   ,p_calling_api      => 'UPDATE_PROJECT'  --Bug # 4199694
17723                      ,p_adj_on_std_inv => p_tasks_in(l_array_index).adj_on_std_inv     /* Added for 12.2Payroll billing ER 11899223 */
17724 
17725                   ); -- modified p_update_task_structure value for bug 3548473 : Bug 3627124
17726 
17727     IF l_debug_mode = 'Y' THEN
17728         pa_debug.g_err_stage := 'After update_task second call...l_return_status=||l_return_status';
17729         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17730     END IF;
17731 
17732 
17733          IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
17734             l_tasks_out(l_array_index).return_status := l_return_status;
17735             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17736          ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17737             l_tasks_out(l_array_index).return_status := l_return_status;
17738             p_multiple_task_msg := 'F';
17739 --          RAISE FND_API.G_EXC_ERROR;
17740          END IF;
17741          l_tasks_out(l_array_index).pa_task_id       := l_out_pa_task_id;
17742      l_tasks_out(l_array_index).pm_task_reference  := l_out_pm_task_reference;
17743        END LOOP;
17744      END IF; -- IF pa_project_check_pvt.G_task_num_updated_index_tbl.EXISTS (1)
17745    END IF;  -- IF pa_project_check_pvt.G_index_counter > 0
17746 
17747 /** Code change begin by aditi for Bug  4120380 **/
17748 /** The code below will update the task_numbers of the tasks passed via update_project script
17749 back to their original value viz. it'll crop the '-' added to aviod the constraint check in
17750 PA_TASKS and PA_PROJ_ELEMENTS. **/
17751 
17752 /* bug #5243018: Reverting the fix in bug 4120380.
17753 i := 1;
17754 IF p_tasks_in.exists(i)
17755 THEN
17756 WHILE i IS NOT NULL LOOP
17757 UPDATE pa_tasks
17758 SET task_number = p_tasks_in(i).pa_task_number
17759 WHERE task_number = '-'||p_tasks_in(i).pa_task_number
17760 AND project_id = l_project_id; -- BUG 4174041, rtarway
17761 ----dbms_output.put_line('value of sql%rowcount'||sql%rowcount);
17762 UPDATE pa_proj_elements
17763 SET element_number = p_tasks_in(i).pa_task_number
17764 WHERE element_number = '-'||p_tasks_in(i).pa_task_number
17765 AND project_id = l_project_id; -- BUG 4174041, rtarway
17766 ----dbms_output.put_line('value of recod updates in pa_proj_elements'||sql%rowcount);
17767 i := p_tasks_in.next(i);
17768 END LOOP;
17769 End if;
17770 Revert end bug #5243018 */
17771 
17772 /* Code change end by aditi for Bug 4120380 **/
17773 
17774 -- Now process the deferred new tasks, since all tasks have been processed
17775 
17776    IF l_deferred_tasks_count > 0 THEN
17777       FOR i in 1..l_deferred_new_tasks_tbl.COUNT LOOP
17778           IF l_added_task_tbl.exists(1) THEN
17779              l_count := l_added_task_tbl.COUNT + 1;
17780           ELSE
17781              l_count := 1;
17782           END IF;
17783           l_added_task_tbl(l_count):= l_deferred_new_tasks_tbl(i);
17784           l_task_rec        := l_deferred_new_tasks_tbl(i);
17785           l_orig_index             := l_deferred_tasks_index_tbl(i).task_index;
17786 
17787     -- Actions performed using the APIs would be subject to
17788     -- function security. If the responsibility does not allow
17789     -- such functions to be executed, the API should not proceed further
17790     -- since the user does not have access to such functions
17791 
17792     -- Function security procedure check whether user have the
17793     -- privilege to add task or not
17794 
17795         --Bug 2471668: we do not need to assign project id to the global variable as it is already done
17796         --above before checking for update_project function.
17797 
17798     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
17799       (p_api_version_number => p_api_version_number,
17800        p_responsibility_id  => l_resp_id,
17801        p_function_name      => 'PA_PM_ADD_TASK',
17802        p_msg_count       => l_msg_count,
17803        p_msg_data           => l_msg_data,
17804        p_return_status      => l_return_status,
17805        p_function_allowed   => l_function_allowed);
17806 
17807         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17808         THEN
17809          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17810 
17811         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17812         THEN
17813             p_multiple_task_msg := 'F';
17814 --          RAISE FND_API.G_EXC_ERROR;
17815         END IF;
17816 
17817         IF l_function_allowed = 'N' THEN
17818          pa_interface_utils_pub.map_new_amg_msg
17819            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
17820             ,p_msg_attribute    => 'CHANGE'
17821             ,p_resize_flag      => 'Y'
17822             ,p_msg_context      => 'GENERAL'
17823             ,p_attribute1       => ''
17824             ,p_attribute2       => ''
17825             ,p_attribute3       => ''
17826             ,p_attribute4       => ''
17827             ,p_attribute5       => '');
17828            p_return_status := FND_API.G_RET_STS_ERROR;
17829              p_multiple_task_msg := 'F';
17830 --           RAISE FND_API.G_EXC_ERROR;
17831         END IF;
17832 
17833      /* Code addition for bug 2982057 starts */
17834        IF l_task_rec.long_task_name IS NULL OR l_task_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17835        then
17836          l_task_rec.long_task_name := l_task_rec.task_name;
17837            else
17838          l_task_rec.long_task_name :=l_task_rec.long_task_name;
17839            end if;
17840            /* Code addition for bug 2982057 ends */
17841           --DHI ER, bug 4413568
17842       IF ( p_update_mode = 'PA_UPD_TASK_ATTR' ) THEN   --bug 4534919
17843            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
17844                                     p_msg_name => 'PA_WBS_CANT_CHANGE');
17845               RAISE FND_API.G_EXC_ERROR;
17846       END IF;
17847            PA_PROJECT_PVT.add_task_round_one
17848                     (p_return_status            => l_return_status,
17849                      p_project_rec              => l_project_rec,
17850                      p_task_rec                 => l_task_rec,
17851                      p_project_type_class_code  => l_project_type_class_code,
17852                      p_service_type_code        => l_service_type_code,
17853                      p_task_id                  => l_task_id);
17854 
17855     IF l_debug_mode = 'Y' THEN
17856         pa_debug.g_err_stage := 'After PA_PROJECT_PVT.add_task_round_one...l_return_status=||l_return_status';
17857         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17858     END IF;
17859 
17860 
17861            IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
17862 
17863                  l_tasks_out(l_orig_index).return_status  := l_return_status;
17864                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17865 
17866            ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17867                     l_tasks_out(l_orig_index).return_status := l_return_status;
17868                     p_multiple_task_msg := 'F';
17869 --                  RAISE FND_API.G_EXC_ERROR;
17870            END IF;
17871            l_tasks_out(l_orig_index).pa_task_id         := l_task_id;
17872         --used to pass task_id to add_task_round_two API
17873            l_task_id_tbl(l_count).pa_task_id   := l_task_id;
17874       END LOOP;
17875 
17876    END IF;
17877 
17878 -- For all the tasks which were inserted by calling add_task_round_one,
17879 -- need to call add_task_round_two,which would update the parent task
17880 -- information. such tasks are stored in the l_added_task_tbl
17881 
17882    i:= l_added_task_tbl.first;
17883 
17884    IF l_added_task_tbl.exists(i)
17885    THEN
17886 
17887        WHILE i IS NOT NULL LOOP
17888 
17889             l_task_rec := l_added_task_tbl(i);
17890 
17891 -- Change required here for bug 3548473 : 3627124 (modifying the changes done for bug 2931183) :
17892 /*
17893 1. Check if the user wants to pass the entire struct or single tasks.
17894 2. If pass_entire_struct param is 'Y', let the prog flow be as it is now.
17895 3. If the pass_entire_struct param is 'N', then call PA_PROJECT_PVT.add_task_round_two with
17896    p_create_task_structure => 'Y' parameter.
17897 */
17898 /* The code below was added for Bug 3841742 : 3857419 .This is to ensure that add_task_round_two is called
17899    for all the tasks that have inserted through add_task_round_one for updating wbs_level, top_task_id and
17900     parent_task_id. The code below will default l_ref_task_id to parent_task_id, if the latter is not null
17901     .Else l_ref_task_id will be null*/
17902  /* CHANGES start FOR Bug 3841742 : 3857419  ADITI*/
17903     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
17904         (l_task_rec.pm_parent_task_reference IS NOT NULL
17905         AND l_task_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
17906         THEN
17907                 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
17908                 -- pa_project_pvt.convert_pm_taskref_to_id_all
17909               PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
17910               ( p_pa_project_id => l_project_id
17911               , p_structure_type => l_structure_type
17912               , p_pa_task_id    => l_task_rec.pa_parent_task_id
17913               , p_pm_task_reference  => l_task_rec.pm_parent_task_reference
17914               , p_out_task_id      => l_task_id_out
17915               , p_return_status => l_return_status    );
17916        --  --dbms_output.put_line('Value of out task'||l_task_id_out);
17917           l_ref_task_id :=  l_task_id_out; --aditi Added for Bug 3548473
17918 
17919           IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
17920               THEN
17921 
17922                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17923 
17924               ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR)
17925               THEN
17926                   p_multiple_task_msg := 'F';
17927 --               RAISE FND_API.G_EXC_ERROR;
17928               END IF;
17929        ELSE
17930           l_ref_task_id := null;
17931 
17932           END IF;
17933 /* CHANGES end FOR Bug 3841742 : 3857419  ADITI */
17934 
17935           -- Bug 7277840 : Update PM_PROJECT_CODE
17936 	  IF p_pm_product_code <> 'WORKPLAN' AND p_pm_product_code IS NOT NULL
17937 	     AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17938 	  THEN
17939 	      UPDATE pa_tasks
17940 	      SET    pm_product_code = p_pm_product_code
17941 	      WHERE  task_id = l_task_id_tbl(i).pa_task_id;
17942 	  END IF;
17943 
17944 
17945             PA_PROJECT_PVT.add_task_round_two
17946                 (p_return_status    => l_return_status,
17947                   p_project_rec      => l_project_rec,
17948                   p_task_id          => l_task_id_tbl(i).pa_task_id,
17949                   p_task_rec         => l_task_rec,
17950                          --project structure
17951                          p_ref_task_id      => l_ref_task_id,-- aditi changed from null to l_ref_task_id for bug 3801314 : Bug 3627124
17952                          p_tasks_in         => p_tasks_in,
17953                          p_tasks_out        => l_tasks_out,
17954                          p_task_version_id  => l_task_version_id,
17955                          p_create_task_structure => l_update_task_structure  -- Bug 2931183 distinguishes bulk calling context
17956                          --project structure
17957                          ); -- modified p_update_task_structure value for bug 3548473 : 3627124
17958 
17959     IF l_debug_mode = 'Y' THEN
17960         pa_debug.g_err_stage := 'After calling PA_PROJECT_PVT.add_task_round_two l_return_status='||l_return_status;
17961         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17962     END IF;
17963 
17964 
17965             IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
17966             THEN
17967 
17968     l_tasks_out(i).return_status := l_return_status;
17969                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
17970 
17971             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17972             THEN
17973 
17974     l_tasks_out(i).return_status := l_return_status;
17975     l_tasks_out(i).task_version_id := l_task_version_id;
17976                p_multiple_task_msg := 'F';
17977 --             RAISE FND_API.G_EXC_ERROR;
17978 
17979 
17980             END IF;
17981 
17982   i := l_added_task_tbl.next(i);
17983 
17984        END LOOP;
17985 --Commenting the complete code and moving it below to resolve bug 6016529
17986 -- PROCESS_WBS_UPDATES should get called after all the updation related to task and project is done.
17987 -- so it is moved after call for PROCESS_TASK_STRUCTURE_BULK is done.
17988 /* Bug 6163090
17989 
17990 -- Changes start for Bug# 3931805
17991 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
17992 THEN                                                  -- publishing flow.
17993    PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
17994    PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
17995    PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
17996 
17997 IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
17998        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
17999          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
18000          PA_PROJECT_PUB.G_Published_version_exists = 'N')
18001 THEN
18002    l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
18003    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
18004                                          ,p_structure_version_id => l_structure_version_id ) ;
18005      IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
18006           IF p_project_in.process_mode = 'ONLINE' THEN
18007              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
18008                                                        ,p_project_id           => l_project_id
18009                                                        ,p_structure_version_id => l_structure_version_id
18010                                                        ,x_return_status        => l_return_status
18011                                                        ,x_msg_count            => l_msg_count
18012                                                        ,x_msg_data             => l_msg_data ) ;
18013              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18014                   THEN
18015                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18016              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18017                   THEN
18018                     RAISE FND_API.G_EXC_ERROR;
18019              END IF;
18020           ELSIF p_project_in.process_mode = 'CONCURRENT' THEN
18021 
18022              PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context      => 'CONC_UPDATE'
18023                                                                  ,p_project_id           => l_project_id
18024                                                                  ,p_structure_version_id => l_structure_version_id
18025                                                                  ,x_return_status        => l_return_status
18026                                                                  ,x_msg_count            => l_msg_count
18027                                                                  ,x_msg_data             => l_msg_data ) ;
18028              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18029                   THEN
18030                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18031              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18032                   THEN
18033                     RAISE FND_API.G_EXC_ERROR;
18034              END IF;
18035           END IF ;
18036      END IF ;
18037    END IF ;
18038 END IF;
18039 -- Changes end for Bug# 3931805
18040 */--Bug 6163090
18041 
18042        --bug 3010538 and 3035902
18043        --The following code should be executed when a new task is added
18044        --to a working version( with already existing a published ver ) and
18045        --then its published.
18046        --In other words the code is executed while publishing to sync up with
18047        --pa_tasks. In regular flow for adding new tasks we call this api
18048        --from the wrapper process_task_structure_bulk api.
18049        --
18050        IF l_structure_type = 'FINANCIAL' AND
18051           p_pm_product_code = 'WORKPLAN'
18052        THEN
18053           pa_fp_refresh_elements_pub.set_process_flag_proj(
18054               p_project_id               => l_project_id
18055              ,p_request_id               => null
18056              ,p_process_code             => null
18057              ,p_refresh_required_flag    => 'Y'
18058              ,x_return_status            => l_return_status
18059              ,x_msg_count                => l_msg_count
18060              ,x_msg_data                 => l_msg_data );
18061 
18062           if l_return_status <> FND_API.G_RET_STS_SUCCESS then
18063              RAISE FND_API.G_EXC_ERROR;
18064           end if;
18065        END IF;
18066        --bug 3010538 and 3035902
18067 
18068    END IF;   --tasks table not empty
18069 
18070 --project structure
18071 ELSIF p_tasks_in.exists(i)
18072       --AND p_structure_in.structure_type = 'WORKPLAN'  --bug 2738747
18073       AND l_structure_type = 'WORKPLAN'                 --bug 2738747
18074 THEN
18075 
18076     IF G_WP_STR_EXISTS = 'N'
18077     THEN
18078         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18079         THEN
18080             pa_interface_utils_pub.map_new_amg_msg
18081               ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
18082                   ,p_msg_attribute    => 'CHANGE'
18083                   ,p_resize_flag      => 'N'
18084                   ,p_msg_context      => 'GENERAL'
18085                   ,p_attribute1       => ''
18086                   ,p_attribute2       => ''
18087                   ,p_attribute3       => ''
18088                   ,p_attribute4       => ''
18089                   ,p_attribute5       => '');
18090         END IF;
18091         RAISE FND_API.G_EXC_ERROR;
18092     END IF;
18093 
18094        v_first_index := i;
18095 
18096        IF ( p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
18097             p_structure_in.structure_version_id IS NULL  ) AND l_structure_version_id IS NULL
18098        THEN
18099             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18100             THEN
18101                pa_interface_utils_pub.map_new_amg_msg
18102                     ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
18103                      ,p_msg_attribute    => 'CHANGE'
18104                      ,p_resize_flag      => 'N'
18105                      ,p_msg_context      => 'GENERAL'
18106                      ,p_attribute1       => ''
18107                      ,p_attribute2       => ''
18108                      ,p_attribute3       => ''
18109                      ,p_attribute4       => ''
18110                      ,p_attribute5       => '');
18111             END IF;
18112             RAISE FND_API.G_EXC_ERROR;
18113             l_tasks_out(i).return_status    := FND_API.G_RET_STS_SUCCESS;
18114        ELSIF ( p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
18115             p_structure_in.structure_version_id IS NOT NULL  )
18116        THEN
18117           l_structure_version_id := p_structure_in.structure_version_id;
18118        END IF;
18119 
18120 --Commented The below loop for bug 2931183 so to do the below done processing in bulk
18121 
18122 /*       WHILE i IS NOT NULL LOOP
18123 
18124            l_task_id := NULL;
18125 
18126            l_tasks_out(i).return_status    := FND_API.G_RET_STS_SUCCESS;
18127 
18128            --get the previous task
18129            IF i = v_first_index
18130            THEN
18131                v_ref_task_id := null;
18132            ELSIF (l_tasks_out(i-1).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
18133                l_tasks_out(i-1).pa_task_id IS NULL )
18134            THEN
18135                v_ref_task_id := p_tasks_in(i-1).pa_task_id;
18136            ELSE
18137                v_ref_task_id := l_tasks_out(i-1).pa_task_id;
18138            END IF;
18139 
18140            IF (p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18141                OR  p_tasks_in(i).pa_task_id IS NULL )
18142            THEN
18143                IF  p_tasks_in(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18144                    OR p_tasks_in(i).pm_task_reference IS NULL
18145                THEN
18146                    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18147              THEN
18148                           pa_interface_utils_pub.map_new_amg_msg
18149                              ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
18150                               ,p_msg_attribute    => 'CHANGE'
18151                               ,p_resize_flag      => 'N'
18152                               ,p_msg_context      => 'PROJ'
18153                               ,p_attribute1       => l_project_rec.segment1
18154                               ,p_attribute2       => ''
18155                               ,p_attribute3       => ''
18156                               ,p_attribute4       => ''
18157                              ,p_attribute5       => '');
18158                    END IF;
18159                    l_tasks_out(i).return_status :=  FND_API.G_RET_STS_ERROR ;
18160                    RAISE FND_API.G_EXC_ERROR;
18161                ELSE
18162                    --If pm_task_reference is provided and task id is null then its a create
18163                    --create task
18164 /*                   --get the previous task
18165                    IF i = v_first_index
18166                    THEN
18167                        v_ref_task_id := null;
18168                    ELSIF (l_tasks_out(i-1).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
18169                        l_tasks_out(i-1).pa_task_id IS NULL )
18170                    THEN
18171                        v_ref_task_id := p_tasks_in(i-1).pa_task_id;
18172                    ELSE
18173                        v_ref_task_id := l_tasks_out(i-1).pa_task_id;
18174                    END IF;
18175 
18176 */
18177 
18178                    -- Actions performed using the APIs would be subject to
18179                    -- function security. If the responsibility does not allow
18180                    -- such functions to be executed, the API should not proceed further
18181                    -- since the user does not have access to such functions
18182 
18183                    -- Function security procedure check whether user have the
18184                    -- privilege to add task or not
18185 
18186                    --Bug 2471668: we do not need to assign project id to the global variable as it is already done
18187                    --above before checking for update_project function.
18188 
18189 /*                   PA_PM_FUNCTION_SECURITY_PUB.check_function_security
18190                       (p_api_version_number => p_api_version_number,
18191                        p_responsibility_id  => l_resp_id,
18192                        p_function_name      => 'PA_PM_ADD_TASK',
18193                        p_msg_count       => l_msg_count,
18194                        p_msg_data           => l_msg_data,
18195                        p_return_status      => l_return_status,
18196                        p_function_allowed   => l_function_allowed);
18197 
18198                    IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18199                    THEN
18200                        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18201                    ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18202                    THEN
18203                        p_multiple_task_msg := 'F';
18204                        --          RAISE FND_API.G_EXC_ERROR;
18205                    END IF;
18206 
18207                    IF l_function_allowed = 'N' THEN
18208                       pa_interface_utils_pub.map_new_amg_msg
18209                        ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
18210                         ,p_msg_attribute    => 'CHANGE'
18211                         ,p_resize_flag      => 'Y'
18212                         ,p_msg_context      => 'GENERAL'
18213                         ,p_attribute1       => ''
18214                         ,p_attribute2       => ''
18215                         ,p_attribute3       => ''
18216                         ,p_attribute4       => ''
18217                         ,p_attribute5       => '');
18218                        p_return_status := FND_API.G_RET_STS_ERROR;
18219                        p_multiple_task_msg := 'F';
18220                        --           RAISE FND_API.G_EXC_ERROR;
18221                   END IF;
18222 
18223                    IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL
18224                        AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
18225                    THEN
18226                        v_parent_task_id := p_tasks_in(i).pa_parent_task_id;
18227                    ELSIF (p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18228                           AND p_tasks_in(i).pm_parent_task_reference IS NOT NULL)
18229                    THEN
18230                    --convert pm_parent_task_reference to parent_task_id.
18231                    --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
18232                    PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
18233                        p_pm_parent_task_reference      =>  p_tasks_in(i).pm_parent_task_reference
18234                       ,p_project_id                    =>  l_project_id
18235                       ,x_parent_task_id                =>  v_parent_task_id
18236                       ,x_return_status                 =>  l_return_status
18237                     );
18238 
18239                     IF l_return_status <> FND_API.G_RET_STS_SUCCESS
18240                     THEN
18241                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18242                         THEN
18243                             pa_interface_utils_pub.map_new_amg_msg
18244                                ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
18245                                    ,p_msg_attribute    => 'CHANGE'
18246                                    ,p_resize_flag      => 'N'
18247                                    ,p_msg_context      => 'TASK'
18248                                    ,p_attribute1       => l_amg_segment1
18249                                    ,p_attribute2       => l_amg_task_number
18250                                    ,p_attribute3       => ''
18251                                    ,p_attribute4       => ''
18252                                    ,p_attribute5       => '');
18253                        END IF;
18254                        RAISE  FND_API.G_EXC_ERROR;
18255                    END IF;
18256 
18257                    ELSE
18258                        v_parent_task_id := null;
18259                    END IF;
18260 
18261                    PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
18262                          p_project_id                   => l_project_id
18263                         ,p_task_id                      => p_tasks_in(i).pa_task_id
18264                         ,p_parent_task_id               => v_parent_task_id
18265                         ,p_ref_task_id                  => v_ref_task_id
18266                         ,p_task_number                  => p_tasks_in(i).pa_task_number
18267                         ,p_task_name                    => p_tasks_in(i).long_task_name     --bug 2833194
18268                         ,p_task_description             => p_tasks_in(i).task_description
18269                         ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
18270                         ,p_calling_module               => 'AMG'
18271                         --,p_structure_type               => p_structure_in.structure_type  --bug 2738747
18272                         ,p_structure_type               => l_structure_type    --bug 2738747
18273                         ,p_OBLIGATION_START_DATE        => p_tasks_in(i).OBLIGATION_START_DATE
18274                         ,p_OBLIGATION_FINISH_DATE       => p_tasks_in(i).OBLIGATION_FINISH_DATE
18275                         ,p_ESTIMATED_START_DATE         => p_tasks_in(i).ESTIMATED_START_DATE
18276                         ,p_ESTIMATED_FINISH_DATE        => p_tasks_in(i).ESTIMATED_FINISH_DATE
18277                         ,p_BASELINE_START_DATE          => p_tasks_in(i).BASELINE_START_DATE
18278                         ,p_BASELINE_FINISH_DATE         => p_tasks_in(i).BASELINE_FINISH_DATE
18279                         ,p_CLOSED_DATE                  => p_tasks_in(i).CLOSED_DATE
18280                         ,p_WQ_UOM_CODE                  => p_tasks_in(i).WQ_UOM_CODE
18281                         ,p_WQ_ITEM_CODE                 => p_tasks_in(i).WQ_ITEM_CODE
18282                         ,p_STATUS_CODE                  => p_tasks_in(i).STATUS_CODE
18283                         ,p_WF_STATUS_CODE               => p_tasks_in(i).WF_STATUS_CODE
18284                         ,p_PM_SOURCE_CODE               => l_pm_product_code        --bug 2665656
18285                         ,p_PRIORITY_CODE                => p_tasks_in(i).PRIORITY_CODE
18286                         ,p_MILESTONE_FLAG               => p_tasks_in(i).MILESTONE_FLAG
18287                         ,p_CRITICAL_FLAG                => p_tasks_in(i).CRITICAL_FLAG
18288                         ,p_INC_PROJ_PROGRESS_FLAG       => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
18289                         ,p_LINK_TASK_FLAG               => p_tasks_in(i).LINK_TASK_FLAG
18290                         ,p_CALENDAR_ID                  => p_tasks_in(i).CALENDAR_ID
18291                         ,p_PLANNED_EFFORT               => p_tasks_in(i).PLANNED_EFFORT
18292                         ,p_DURATION                     => p_tasks_in(i).DURATION
18293                         ,p_PLANNED_WORK_QUANTITY        => p_tasks_in(i).PLANNED_WORK_QUANTITY
18294                         ,p_TASK_TYPE                    => p_tasks_in(i).TASK_TYPE
18295                         ,p_actual_start_date                  => p_tasks_in(i).actual_start_date
18296                         ,p_actual_finish_date                 => p_tasks_in(i).actual_finish_date
18297                         ,p_early_start_date                   => p_tasks_in(i).early_start_date
18298                         ,p_early_finish_date                  => p_tasks_in(i).early_finish_date
18299                         ,p_late_start_date                    => p_tasks_in(i).late_start_date
18300                         ,p_late_finish_date                   => p_tasks_in(i).late_finish_date
18301                         ,p_scheduled_start_date               => p_tasks_in(i).scheduled_start_date
18302                         ,p_scheduled_finish_date              => p_tasks_in(i).scheduled_finish_date
18303                         ,P_PM_SOURCE_reference                => p_tasks_in(i).pm_task_reference
18304                         ,p_location_id                        => p_tasks_in(i).address_id
18305                         ,p_manager_person_id                  => p_tasks_in(i).task_manager_person_id
18306                         ,p_structure_version_id               => l_structure_version_id
18307                         ,x_task_version_id                    => l_task_version_id
18308                         ,x_task_id                            => v_task_id
18309                         ,x_msg_count                    => l_msg_count
18310                         ,x_msg_data                     => l_msg_data
18311                         ,x_return_status                => l_return_status
18312                      );
18313 
18314                      -- assign the appropriate values to the task out record
18315                      l_tasks_out(i).return_status     := l_return_status;
18316                      l_tasks_out(i).pa_task_id        := v_task_id;
18317                      l_tasks_out(i).task_version_id   := l_task_version_id;
18318                      l_tasks_out(i).pm_task_reference := p_tasks_in(i).pm_task_reference;
18319 
18320                      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18321                      THEN
18322                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18323 
18324                      ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18325                      THEN
18326                          p_multiple_task_msg := 'F';
18327                          RAISE FND_API.G_EXC_ERROR;
18328                      END IF;
18329 
18330                      i := p_tasks_in.next(i);
18331 
18332                END IF; --<<p_tasks_in(i).pm_task_reference>>
18333            ELSE
18334                --For update, task_id should be provided. See TRM for AMG
18335                --update task
18336 
18337     -- Actions performed using the APIs would be subject to
18338     -- function security. If the responsibility does not allow
18339     -- such functions to be executed, the API should not proceed further
18340     -- since the user does not have access to such functions
18341 
18342 
18343     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
18344       (p_api_version_number => p_api_version_number,
18345        p_responsibility_id  => l_resp_id,
18346        p_function_name      => 'PA_PM_UPDATE_TASK',
18347        p_msg_count          => l_msg_count,
18348        p_msg_data           => l_msg_data,
18349        p_return_status      => l_return_status,
18350        p_function_allowed   => l_function_allowed );
18351 
18352         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18353         THEN
18354                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18355 
18356         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18357         THEN
18358                         RAISE FND_API.G_EXC_ERROR;
18359         END IF;
18360         IF l_function_allowed = 'N' THEN
18361           pa_interface_utils_pub.map_new_amg_msg
18362           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
18363            ,p_msg_attribute    => 'CHANGE'
18364            ,p_resize_flag      => 'Y'
18365            ,p_msg_context      => 'GENERAL'
18366            ,p_attribute1       => ''
18367            ,p_attribute2       => ''
18368            ,p_attribute3       => ''
18369            ,p_attribute4       => ''
18370            ,p_attribute5       => '');
18371            p_return_status := FND_API.G_RET_STS_ERROR;
18372            RAISE FND_API.G_EXC_ERROR;
18373         END IF;
18374 
18375                  PA_PROJ_TASK_STRUC_PUB.UPDATE_TASK_STRUCTURE(
18376                          p_project_id                   => l_project_id
18377                         ,p_task_id                      => p_tasks_in(i).pa_task_id
18378                         ,p_ref_task_id                  => v_ref_task_id
18379                         ,p_task_number                  => p_tasks_in(i).pa_task_number
18380                         ,p_task_name                    => p_tasks_in(i).long_task_name     --bug 2833194
18381                         ,p_task_description             => p_tasks_in(i).task_description
18382                         ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
18383                         ,p_calling_module               => 'AMG'
18384                         --,p_structure_type               => p_structure_in.structure_type     --bug 2738747
18385                         ,p_structure_type               => l_structure_type                    --bug 2738747
18386                         ,p_pm_product_code              => p_tasks_in(i).PM_SOURCE_CODE
18387                         ,p_pm_task_reference            => p_tasks_in(i).pm_task_reference
18388                         ,p_OBLIGATION_START_DATE        => p_tasks_in(i).OBLIGATION_START_DATE
18389                         ,p_OBLIGATION_FINISH_DATE       => p_tasks_in(i).OBLIGATION_FINISH_DATE
18390                         ,p_ESTIMATED_START_DATE         => p_tasks_in(i).ESTIMATED_START_DATE
18391                         ,p_ESTIMATED_FINISH_DATE        => p_tasks_in(i).ESTIMATED_FINISH_DATE
18392                         ,p_BASELINE_START_DATE          => p_tasks_in(i).BASELINE_START_DATE
18393                         ,p_BASELINE_FINISH_DATE         => p_tasks_in(i).BASELINE_FINISH_DATE
18394                         ,p_CLOSED_DATE                  => p_tasks_in(i).CLOSED_DATE
18395                         ,p_WQ_UOM_CODE                  => p_tasks_in(i).WQ_UOM_CODE
18396                         ,p_WQ_ITEM_CODE                 => p_tasks_in(i).WQ_ITEM_CODE
18397                         ,p_STATUS_CODE                  => p_tasks_in(i).STATUS_CODE
18398                         ,p_WF_STATUS_CODE               => p_tasks_in(i).WF_STATUS_CODE
18399                         ,p_PRIORITY_CODE                => p_tasks_in(i).PRIORITY_CODE
18400                         ,p_MILESTONE_FLAG               => p_tasks_in(i).MILESTONE_FLAG
18401                         ,p_CRITICAL_FLAG                => p_tasks_in(i).CRITICAL_FLAG
18402                         ,p_INC_PROJ_PROGRESS_FLAG       => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
18403                         ,p_LINK_TASK_FLAG               => p_tasks_in(i).LINK_TASK_FLAG
18404                         ,p_CALENDAR_ID                  => p_tasks_in(i).CALENDAR_ID
18405                         ,p_PLANNED_EFFORT               => p_tasks_in(i).PLANNED_EFFORT
18406                         ,p_DURATION                     => p_tasks_in(i).DURATION
18407                         ,p_PLANNED_WORK_QUANTITY        => p_tasks_in(i).PLANNED_WORK_QUANTITY
18408                         ,p_TASK_TYPE                    => p_tasks_in(i).TASK_TYPE
18409                         ,p_actual_start_date                  => p_tasks_in(i).actual_start_date
18410                         ,p_actual_finish_date                 => p_tasks_in(i).actual_finish_date
18411                         ,p_early_start_date                   => p_tasks_in(i).early_start_date
18412                         ,p_early_finish_date                  => p_tasks_in(i).early_finish_date
18413                         ,p_late_start_date                    => p_tasks_in(i).late_start_date
18414                         ,p_late_finish_date                   => p_tasks_in(i).late_finish_date
18415                         ,p_scheduled_start_date               => p_tasks_in(i).scheduled_start_date
18416                         ,p_scheduled_finish_date              => p_tasks_in(i).scheduled_finish_date
18417                         ,p_location_id                        => p_tasks_in(i).address_id
18418                         ,p_task_manager_id                  => p_tasks_in(i).task_manager_person_id
18419                         ,p_structure_version_id               => l_structure_version_id
18420 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
18421                         ,p_ext_act_duration => p_tasks_in(i).ext_act_duration
18422                         ,p_ext_remain_duration  => p_tasks_in(i).ext_remain_duration
18423                         ,p_ext_sch_duration => p_tasks_in(i).ext_sch_duration
18424 -- (end venkat) new params for bug #3450684 -------------------------------------------------
18425                         ,x_msg_count                    => l_msg_count
18426                         ,x_msg_data                     => l_msg_data
18427                         ,x_return_status                => l_return_status
18428                      );
18429                      -- assign the appropriate values to the task out record
18430                      l_tasks_out(i).return_status     := l_return_status;
18431                      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18432                      THEN
18433                          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18434 
18435                      ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18436                      THEN
18437                          p_multiple_task_msg := 'F';
18438                          RAISE FND_API.G_EXC_ERROR;
18439                      END IF;
18440                      l_tasks_out(i).pa_task_id        := p_tasks_in(i).pa_task_id;
18441                      l_tasks_out(i).pm_task_reference := p_tasks_in(i).pm_task_reference;
18442                      i := p_tasks_in.next(i);
18443 
18444            END IF;
18445 
18446         END LOOP; --<< end WHILE >>
18447         */
18448 END IF;
18449    --project structure
18450 
18451 IF p_multiple_task_msg = 'F'
18452 THEN
18453     RAISE FND_API.G_EXC_ERROR;
18454 END IF;
18455 
18456 --Added for bug 2931183
18457 IF nvl(p_pm_product_code,'WORKPLAN') <> 'WORKPLAN' AND p_pass_entire_structure = 'Y'  -- bug 3548473 : 3627124
18458 THEN
18459     IF l_debug_mode = 'Y' THEN
18460         pa_debug.g_err_stage := 'Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
18461         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18462     END IF;
18463 
18464     PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK(
18465             p_api_version_number              => p_api_version_number
18466             ,p_commit                          => FND_API.G_FALSE--bug 3766967
18467             ,p_project_id                      => l_project_id
18468             ,p_source_project_id               => l_project_in_rec.created_from_project_id --ADUT. Included this new param.
18469             ,p_pm_product_code                 => p_pm_product_code
18470             ,p_structure_type                  => l_structure_type  --for bug 3005458
18471             ,p_tasks_in_tbl                    => p_tasks_in
18472             ,p_wp_str_exists                   => G_WP_STR_EXISTS
18473             ,p_is_wp_separate_from_fn          => G_IS_WP_SEPARATE_FROM_FN
18474             ,p_is_wp_versioning_enabled        => G_IS_WP_VERSIONING_ENABLED
18475             ,p_structure_version_id            => l_update_structure_version_id
18476             ,p_process_mode                    => p_project_in.process_mode -- PA L Changes 3010538
18477             ,p_create_task_versions_only       => l_create_task_versions_only -- Bug 3075609
18478             ,px_tasks_out_tbl                  => l_tasks_out
18479             ,x_return_status                   => p_return_status
18480             ,x_msg_count                       => p_msg_count
18481             ,x_msg_data                        => p_msg_data
18482             );
18483 
18484    IF l_debug_mode = 'Y' THEN
18485         pa_debug.g_err_stage := 'After PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK...p_return_status=||p_return_status';
18486         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18487     END IF;
18488 
18489 
18490     IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18491          IF l_debug_mode = 'Y' THEN
18492             pa_debug.g_err_stage := 'Errors in PROCESS_TASK_STRUCTURE_BULK ' ;
18493             pa_debug.write(l_module_name,pa_debug.g_err_stage,4);
18494         END IF;
18495         p_multiple_task_msg := 'F';
18496         RAISE FND_API.G_EXC_ERROR;
18497     END IF;
18498 
18499     IF l_debug_mode = 'Y' THEN
18500         pa_debug.g_err_stage := 'Returned from PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
18501         pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18502     END IF;
18503 END IF; --for p_pm_product_code is not workplan
18504 
18505 -- Bug 6163090 Moved the code here from above
18506 IF  l_structure_type = 'FINANCIAL'
18507 THEN
18508   IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
18509   THEN                                                  -- publishing flow.
18510     PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
18511     PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
18512     PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
18513      IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' /*added IF condition for bug#13923366*/
18514     THEN
18515     IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
18516     ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
18517     PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
18518     PA_PROJECT_PUB.G_Published_version_exists = 'N')
18519     THEN
18520       l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
18521       l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
18522                                  ,p_structure_version_id => l_structure_version_id ) ;
18523       IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
18524         IF p_project_in.process_mode = 'ONLINE' THEN
18525           PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
18526                                                    ,p_project_id           => l_project_id
18527                                                    ,p_structure_version_id => l_structure_version_id
18528                                                    ,x_return_status        => l_return_status
18529                                                    ,x_msg_count            => l_msg_count
18530                                                    ,x_msg_data             => l_msg_data ) ;
18531             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18532             THEN
18533                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18534             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18535             THEN
18536                   RAISE FND_API.G_EXC_ERROR;
18537             END IF;
18538           ELSIF p_project_in.process_mode = 'CONCURRENT' THEN
18539 
18540             PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context      => 'CONC_UPDATE'
18541                                                                ,p_project_id           => l_project_id
18542                                                                ,p_structure_version_id => l_structure_version_id
18543                                                                ,x_return_status        => l_return_status
18544                                                                ,x_msg_count            => l_msg_count
18545                                                                ,x_msg_data             => l_msg_data ) ;
18546             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18547             THEN
18548                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18549             ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18550             THEN
18551                   RAISE FND_API.G_EXC_ERROR;
18552             END IF;
18553         END IF ;
18554       END IF ;
18555     END IF ;
18556    END IF;
18557   END IF;
18558 END IF;--l_structure_type
18559 --Bug 6163090
18560 
18561 
18562 
18563 ----Commented The below code for bug 2931183 as the processing will be done in PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK
18564 
18565 -- Bug # 5077599.
18566 
18567 -- Uncommented the code below.
18568 
18569 if (p_update_mode = 'PA_UPD_TASK_ATTR' and p_pass_entire_structure = 'N') then
18570 --bug 2732895   --update_project
18571 IF (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
18572    ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND  p_structure_in.structure_type = 'WORKPLAN' ))
18573    AND (p_pm_product_code <> 'WORKPLAN')
18574  --bug 2871308: added condition to by-pass when calling from publish api
18575 --should not call if new task is added to FINANCIAL structure version
18576 THEN
18577 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
18578   IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N'
18579   then
18580   PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
18581              p_tasks_in             => l_tasks_out
18582             ,p_task_version_id      => null
18583             ,x_msg_count            => l_msg_count
18584             ,x_msg_data             => l_msg_data
18585             ,x_return_status        => l_return_status
18586        );
18587 
18588         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18589         THEN
18590            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18591 
18592         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18593         THEN
18594           p_multiple_task_msg := 'F';
18595           RAISE FND_API.G_EXC_ERROR;
18596         END IF;
18597   END IF;
18598   --bug 2856033
18599 
18600   IF l_structure_version_id IS NULL OR l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18601   THEN
18602 
18603       PA_PROJECT_PVT.get_structure_version(
18604                p_project_id             => l_project_id
18605               ,p_structure_versions_out => g_struc_out_tbl
18606             );
18607 
18608       fetch_structure_version(
18609           p_return_status                 => l_return_status
18610          ,p_api_version_number            => p_api_version_number
18611          ,p_structure_type                => p_structure_in.structure_type
18612          ,p_pa_structure_version_id       => l_structure_version_id
18613          ,p_struc_return_status           => l_return_status
18614        );
18615   END IF;
18616   -- added if condition for bug 13923366 by skkoppul
18617   -- Skip rolling up dates, weightages and ETC amounts
18618 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
18619   IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' THEN
18620   IF NVL(PA_PROJECT_PUB.G_BULK_UPDATE_MODE,' ') <> 'NO_DATES'  THEN
18621 
18622   PA_PROJ_TASK_STRUC_PUB.rollup_dates(
18623              p_tasks_in             => l_tasks_out           --null if called for one task
18624             ,p_task_version_id      => null
18625             ,p_project_id           => l_project_id
18626             ,P_structure_version_id => l_structure_version_id
18627             ,x_msg_count            => l_msg_count
18628             ,x_msg_data             => l_msg_data
18629             ,x_return_status        => l_return_status
18630        );
18631 
18632         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18633         THEN
18634            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18635 
18636         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18637         THEN
18638           p_multiple_task_msg := 'F';
18639           RAISE FND_API.G_EXC_ERROR;
18640         END IF;
18641   END IF; -- 13923366 changes end
18642   END IF; -- -- Added for Huawei DJ::
18643   --bug 2856033
18644 
18645 END IF;
18646 
18647 --bug 2732895
18648 end if;
18649 
18650 -- End of Bug # 5077599.
18651 
18652 
18653    IF p_multiple_task_msg = 'F'
18654    THEN
18655       RAISE FND_API.G_EXC_ERROR;
18656    END IF;
18657 
18658      p_tasks_out := l_tasks_out;
18659 
18660 
18661       -- new project start date should be < min(task_start_date)
18662 
18663   IF l_update_start_date_flag = 'Y'
18664            --AND p_structure_in.structure_type = 'FINANCIAL'    --bug 2729851   --bug 2738747
18665            AND l_structure_type = 'FINANCIAL'    --bug 2729851                  --bug 2738747
18666   THEN
18667 
18668            OPEN l_min_task_start_date_csr (l_project_id);
18669            FETCH l_min_task_start_date_csr INTO l_min_task_date;
18670 
18671            IF l_min_task_start_date_csr%FOUND
18672            THEN
18673 
18674                IF l_project_start_date IS NOT NULL
18675                AND l_min_task_date IS NOT NULL
18676                THEN
18677 
18678         IF l_min_task_date < l_project_start_date
18679         THEN
18680 
18681                        CLOSE l_min_task_start_date_csr;
18682 
18683       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18684       THEN
18685             pa_interface_utils_pub.map_new_amg_msg
18686               ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
18687                ,p_msg_attribute    => 'CHANGE'
18688                ,p_resize_flag      => 'N'
18689                ,p_msg_context      => 'PROJ'
18690                ,p_attribute1       => l_project_rec.segment1
18691                ,p_attribute2       => ''
18692                ,p_attribute3       => ''
18693                ,p_attribute4       => ''
18694                ,p_attribute5       => '');
18695                   END IF;
18696                   RAISE  FND_API.G_EXC_ERROR;
18697 
18698                     END IF;
18699                END IF;
18700      END IF;
18701 
18702            CLOSE l_min_task_start_date_csr;
18703 
18704         END IF;
18705 
18706       -- new project completion date should be > max(task_start_date)
18707 
18708        IF l_update_end_date_flag = 'Y'
18709           --AND p_structure_in.structure_type = 'FINANCIAL'    --bug 2729851    --bug 2738747
18710           AND l_structure_type = 'FINANCIAL'    --bug 2729851                   --bug 2738747
18711        THEN
18712 
18713           OPEN l_max_task_end_date_csr (l_project_id);
18714           FETCH l_max_task_end_date_csr INTO l_max_task_date;
18715 
18716           IF l_max_task_end_date_csr%FOUND
18717           THEN
18718 
18719                IF l_project_completion_date IS NOT NULL
18720                AND l_max_task_date IS NOT NULL
18721                THEN
18722 
18723                    IF l_max_task_date > l_project_completion_date
18724                    THEN
18725 
18726                   CLOSE l_max_task_end_date_csr;
18727       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
18728 
18729                   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18730       THEN
18731 /*  The FND_AS_UNEXPECTED_ERROR message is being reported from UPDATE_PROJECT API and modified
18732     the following. Replaced the message name from PA_PR_INVALID_COMPLETION_DATE with
18733     PA_PR_INVALID_COMP_DATE (this is limited to 30 characters after appended with '_AMG') and
18734     p_resize flag from 'Y' in the procedure call pa_interface_utils_pub.map_new_amg_msg to 'N'.
18735     Bug#1916735.
18736 */
18737             pa_interface_utils_pub.map_new_amg_msg
18738               ( p_old_message_code => 'PA_PR_INVALID_COMP_DATE'
18739                ,p_msg_attribute    => 'CHANGE'
18740                ,p_resize_flag      => 'N'
18741                ,p_msg_context      => 'PROJ'
18742                ,p_attribute1       => l_project_rec.segment1
18743                ,p_attribute2       => ''
18744                ,p_attribute3       => ''
18745                ,p_attribute4       => ''
18746                ,p_attribute5       => '');
18747                   END IF;
18748                   RAISE  FND_API.G_EXC_ERROR;
18749 
18750                     END IF;
18751                END IF;
18752     END IF;
18753 
18754           CLOSE l_max_task_end_date_csr;
18755 
18756        END IF;
18757 
18758 -- Call the api to check the task dates
18759 --9839807 - added clause to skip check for MSP since MSP already validates dates
18760 If G_ParChildTsk_chks_deferred = 'Y' and p_pm_product_code <> 'MSPROJECT' THEN
18761     Pa_project_pvt.check_parent_child_task_dates
18762           (p_project_id        => l_project_id,
18763            p_return_status    =>  l_return_status );
18764 
18765         IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
18766            RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18767         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
18768            RAISE  FND_API.G_EXC_ERROR;
18769         END IF;
18770     G_ParchildTsk_chks_deferred := 'N';
18771 END IF;
18772 
18773 --UPDATE key_members
18774 
18775      l_count := 0;
18776  j := p_key_members.first;
18777  IF p_key_members.exists(j) THEN
18778 
18779      FOR i in 1..p_key_members.COUNT LOOP
18780 
18781       /* Code below is added for Bug 3326468. Start_date of key members is now a mandatory field to
18782          Update_project */
18783            IF p_key_members(i).start_date IS NULL OR
18784         p_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
18785           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18786               THEN
18787                pa_utils.add_message
18788                 ( p_app_short_name   => 'PA'-- new message for bug 3326468
18789                  ,p_msg_name    => 'PA_KEYMBR_NO_START_DATE'
18790                  ,p_token1           => 'PROJECT_NAME'
18791                  ,p_value1           => l_project_rec.segment1
18792                  ,p_token2           => 'PERSON_ID'
18793                  ,p_value2           => p_key_members(i).person_id
18794                  ,p_token3           => 'ROLE_TYPE'
18795                  ,p_value3           => p_key_members(i).project_role_type
18796                 );
18797              END IF;
18798              p_multiple_task_msg := 'F';
18799              RAISE FND_API.G_EXC_ERROR;
18800            END IF;
18801      -- validate the role type introduced for Bug#5196996
18802      OPEN l_project_role_types_csr (p_key_members(i).project_role_type,l_project_id);
18803      FETCH l_project_role_types_csr INTO l_dummy;
18804 
18805      IF l_project_role_types_csr%NOTFOUND THEN
18806 
18807             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18808             THEN
18809                  pa_interface_utils_pub.map_new_amg_msg
18810                    ( p_old_message_code => 'PA_INVALID_ROLE_TYPE'
18811                     ,p_msg_attribute    => 'CHANGE'
18812                     ,p_resize_flag      => 'N'
18813                     ,p_msg_context      => 'PROJ'
18814                     ,p_attribute1       => l_amg_segment1
18815                     ,p_attribute2       => ''
18816                     ,p_attribute3       => ''
18817                     ,p_attribute4       => ''
18818                     ,p_attribute5       => '');
18819             END IF;
18820         CLOSE l_project_role_types_csr;
18821         RAISE  FND_API.G_EXC_ERROR;
18822      ELSE
18823         CLOSE l_project_role_types_csr;
18824      END IF;
18825      -- end of changes for Bug#5196996
18826 
18827 
18828 
18829        /* End of Code changes for Bug 3326468 */
18830           OPEN l_key_member_csr(l_project_id,p_key_members(i).person_id,
18831                                 p_key_members(i).project_role_type ,
18832                 p_key_members(i).start_date); --Added for Bug 3326468
18833           FETCH l_key_member_csr INTO l_key_members_rec;
18834           IF l_key_member_csr%NOTFOUND THEN
18835              CLOSE l_key_member_csr;
18836              -- This means this is a new key member
18837              -- add this to the temp table which will be passed
18838              -- to add_key_members
18839             IF p_key_members(i).project_role_type = 'PROJECT MANAGER' THEN
18840               IF (p_key_members(i).end_date <>
18841                   PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18842                    p_key_members(i).start_date <>
18843                   PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) THEN
18844                  IF p_key_members(i).start_date >
18845                     p_key_members(i).end_date THEN
18846                     IF FND_MSG_PUB.Check_Msg_Level
18847                       (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18848                       pa_interface_utils_pub.map_new_amg_msg
18849                        ( p_old_message_code => 'PA_PR_INVALID_KM_DATES'
18850                         ,p_msg_attribute    => 'CHANGE'
18851                         ,p_resize_flag      => 'N'
18852                         ,p_msg_context      => 'PROJ'
18853                         ,p_attribute1       => l_project_rec.segment1
18854                         ,p_attribute2       => ''
18855                         ,p_attribute3       => ''
18856                         ,p_attribute4       => ''
18857                         ,p_attribute5       => '');
18858                          p_multiple_task_msg   := 'F';
18859 --                       RAISE  FND_API.G_EXC_ERROR;
18860                     END IF;
18861                  END IF;
18862               END IF;
18863 
18864               pa_project_pvt.check_for_one_manager
18865                    (l_project_id,
18866                     p_key_members(i).person_id,
18867                     p_key_members,
18868                     p_key_members(i).start_date,
18869                     p_key_members(i).end_date,
18870                     l_return_status );
18871 
18872                 IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR  THEN
18873                    p_return_status             := l_return_status;
18874                    p_project_out.return_status := l_return_status;
18875                    RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
18876                 END IF;
18877              END IF;
18878              IF l_key_members_tbl.EXISTS(1) THEN
18879                 l_count := l_key_members_tbl.COUNT + 1;
18880              ELSE
18881                 l_count := 1;
18882              END IF;
18883              l_key_members_tbl(l_count) := p_key_members(i);
18884 
18885              /*Commented the below code for the bug 2910972 since the null
18886              value for the start date is handled in the pa_project_parties_pub.create_project_party*/
18887 
18888              /*IF l_key_members_tbl(l_count).start_date =
18889                 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
18890                 l_key_members_tbl(l_count).start_date IS NULL THEN
18891                 l_key_members_tbl(l_count).start_date := TRUNC(SYSDATE);
18892              END IF;*/
18893 
18894              /*Bug#2910972-Adding the below code*/
18895 
18896               IF l_key_members_tbl(l_count).start_date =
18897                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18898                    l_key_members_tbl(l_count).start_date := NULL;
18899                 END IF;
18900 
18901              /*Bug#2910972-End of addition*/
18902 
18903              IF l_key_members_tbl(l_count).end_date =
18904                 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18905                 l_key_members_tbl(l_count).end_date := NULL;
18906              END IF;
18907           ELSE
18908                CLOSE l_key_member_csr;
18909                 IF p_key_members(i).start_date <>
18910                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18911                    p_key_members(i).start_date IS NOT NULL THEN
18912                    IF p_key_members(i).start_date <>
18913                       NVL(l_key_members_rec.start_date_active,
18914                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18915                       l_temp_start_date := p_key_members(i).start_date;
18916                    ELSE
18917                       l_temp_start_date := l_key_members_rec.start_date_active;
18918                    END IF;
18919                 ELSE
18920                    l_temp_start_date := l_key_members_rec.start_date_active;
18921                 END IF;
18922                 IF p_key_members(i).end_date <>
18923                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18924                    p_key_members(i).end_date IS NOT NULL THEN
18925                    IF p_key_members(i).end_date <>
18926                       NVL(l_key_members_rec.end_date_active,
18927                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18928                       l_temp_end_date := p_key_members(i).end_date;
18929                    ELSE
18930                       l_temp_end_date := l_key_members_rec.end_date_active;
18931                    END IF;
18932                 ELSE
18933            /* Below if condition Added for bug 3234496 */
18934                    IF p_key_members(i).project_role_type = 'PROJECT MANAGER' THEN
18935                        l_temp_end_date := l_key_members_rec.end_date_active;
18936            ELSE
18937            /* Added code to null out the end date if not proj manager : for bug 3234496 */
18938                If p_key_members(i).end_date is null then
18939               l_temp_end_date := null;
18940                else
18941                   l_temp_end_date := l_key_members_rec.end_date_active;
18942                end if;
18943            END IF;
18944                 END IF;
18945                 IF l_temp_end_date < l_temp_start_date THEN
18946                    p_return_status := FND_API.G_RET_STS_ERROR;
18947                    IF FND_MSG_PUB.Check_Msg_Level
18948                      (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18949                       pa_interface_utils_pub.map_new_amg_msg
18950                        ( p_old_message_code => 'PA_PR_INVALID_KM_DATES'
18951                         ,p_msg_attribute    => 'CHANGE'
18952                         ,p_resize_flag      => 'N'
18953                         ,p_msg_context      => 'PROJ'
18954                         ,p_attribute1       => l_project_rec.segment1
18955                         ,p_attribute2       => ''
18956                         ,p_attribute3       => ''
18957                         ,p_attribute4       => ''
18958                         ,p_attribute5       => '');
18959                          p_multiple_task_msg   := 'F';
18960                   END IF;
18961                 END IF;
18962                 IF (l_temp_start_date <>
18963                           NVL(l_key_members_rec.start_date_active,
18964                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18965                       OR
18966                    (l_temp_end_date <>
18967                           NVL(l_key_members_rec.end_date_active,
18968                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18969                      /* Added the below OR condition for bug 3234496 */
18970               OR
18971             (l_temp_end_date IS NULL AND l_key_members_rec.end_date_active IS NOT NULL)
18972           THEN
18973                    if p_multiple_task_msg <> 'F' then
18974 /*
18975 -- begin OLD code before changes for ROLE BASED SECURITY
18976                    UPDATE PA_PROJECT_PLAYERS SET
18977                           START_DATE_ACTIVE = l_temp_start_date,
18978                           END_DATE_ACTIVE   = l_temp_end_date
18979                    WHERE  ROWID             = l_key_members_rec.rowid;
18980 -- end OLD code before changes for ROLE BASED SECURITY
18981 */
18982 -- begin NEW code for ROLE BASED SECURITY
18983 -- updating START_DATE_ACTIVE and END_DATE_ACTIVE of
18984 -- PA_PROJECT_PLAYERS for the rowid in the cursor
18985    SELECT   COMPLETION_DATE
18986    INTO     v_completion_date
18987    FROM     pa_projects p
18988    WHERE    p.project_id = l_key_members_rec.project_id;
18989    /*Added the OR condition in the below statement for the bug 2846478*/
18990    if l_key_members_rec.scheduled_flag = 'N' OR l_key_members_rec.scheduled_flag IS NULL
18991    then
18992        PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY(
18993           p_api_version => 1.0                  -- p_api_version
18994           , p_init_msg_list => FND_API.G_TRUE   -- p_init_msg_list
18995           , p_commit => FND_API.G_FALSE          -- p_commit
18996           , p_validate_only => FND_API.G_FALSE  -- p_validate_only
18997           , p_validation_level => FND_API.G_VALID_LEVEL_FULL   -- p_validation_level
18998           , p_debug_mode => 'N'                 -- p_debug_mode
18999           , p_object_id => l_key_members_rec.project_id  -- p_object_id
19000           , p_OBJECT_TYPE => 'PA_PROJECTS'         -- p_OBJECT_TYPE
19001           , p_project_role_id => NULL  -------Bug 2100142l_key_members_rec.project_id   -- p_project_role_id
19002           , p_project_role_type => l_key_members_rec.project_role_type -- p_project_role_type
19003           , p_resource_type_id => l_key_members_rec.resource_type_id   -- p_resource_type_id
19004           , p_resource_source_id => l_key_members_rec.person_id   -- p_resource_source_id
19005           , p_resource_name => v_null_char      -- p_resource_name
19006           , p_start_date_active => l_temp_start_date   -- p_start_date_active
19007           , p_scheduled_flag => 'N'             -- p_scheduled_flag
19008           , p_record_version_number => l_key_members_rec.record_version_number --  p_record_version_number
19009           , p_calling_module => 'FORM'          -- p_calling_module
19010           , p_project_id => l_key_members_rec.project_id   -- p_project_id
19011           , p_project_end_date => v_completion_date   -- p_project_end_date
19012           , p_project_party_id => l_key_members_rec.project_party_id  -- p_project_party_id
19013           , p_end_date_active => l_temp_end_date      -- p_end_date_active
19014           , x_wf_type         => l_wf_type
19015           , x_wf_item_type    => l_wf_item_type
19016           , x_wf_process      => l_wf_process
19017           , x_assignment_id   => l_assignment_id
19018           , x_return_status => x_return_status  -- x_return_status
19019           , x_msg_count => x_msg_count          -- x_msg_count
19020           , x_msg_data => x_msg_data            -- x_msg_data
19021           );
19022       IF    (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
19023         p_return_status := x_return_status;
19024         p_msg_count     := x_msg_count;
19025         p_msg_data      := SUBSTR(p_msg_data||x_msg_data,1,2000);
19026                 if    (x_return_status = FND_API.G_RET_STS_ERROR) then
19027                       raise  FND_API.G_EXC_UNEXPECTED_ERROR;
19028                 else  -- (x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR) then
19029                       raise  FND_API.G_EXC_ERROR;
19030                 end if;
19031          END IF;
19032       end if;
19033 -- end NEW code for ROLE BASED SECURITY
19034 
19035                    end if;
19036                 END IF;
19037           END IF;
19038         END LOOP;
19039 
19040       IF p_multiple_task_msg = 'F'
19041       THEN
19042          RAISE  FND_API.G_EXC_ERROR;
19043       END IF;
19044 
19045        IF l_key_members_tbl.COUNT > 0 THEN
19046            PA_PROJECT_PVT.add_key_members (
19047               p_return_status         =>l_return_status,
19048               p_pa_source_template_id =>l_project_rec.created_from_project_id,
19049               p_project_id            =>l_project_id,
19050               p_key_members           =>l_key_members_tbl );
19051               IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR  THEN
19052                  p_return_status             := l_return_status;
19053                  p_project_out.return_status := l_return_status;
19054                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
19055               ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
19056                  p_return_status             := l_return_status;
19057                  p_project_out.return_status := l_return_status;
19058                 RAISE  FND_API.G_EXC_ERROR;
19059               END IF;
19060        END IF;
19061 
19062       /* Start of code for bug #2111806
19063          Call the check_manager_date_range to check if the Project
19064      Manager exists for the complete duration of the Project. */
19065       pa_project_check_pvt.check_manager_date_range(p_project_id    =>  l_project_id
19066                                ,p_return_status =>  l_return_status);
19067 
19068       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
19069       THEN
19070         p_project_out.return_status := l_return_status;
19071     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19072 
19073       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
19074       THEN
19075 
19076     p_project_out.return_status := l_return_status;
19077         RAISE FND_API.G_EXC_ERROR;
19078       END IF;
19079       /* End of code for bug #2111806 */
19080 
19081  END IF;
19082 
19083  /* Start of code for bug #2111806
19084     Throw an error if there are no Project Managers assigned.
19085     This has to be thrown irrespective of whether there are any Key Member records
19086     being passed or not. So, it cannot be done in the above IF condition. */
19087  IF l_project_id IS NOT NULL THEN
19088  OPEN  c_prj(l_project_id);
19089  FETCH c_prj INTO l_proj_status, l_proj_type_class;
19090  CLOSE c_prj;
19091  END IF;
19092 
19093  /* The check has to be done only for an Approved Contract Type project. */
19094  IF (nvl(l_proj_type_class,'NONE') = 'CONTRACT' AND
19095      nvl(l_proj_status,'UNAPPROVED') = 'APPROVED') THEN
19096     OPEN c_prj_count(l_project_id);
19097     FETCH c_prj_count INTO l_prj_mgr_count;
19098     CLOSE c_prj_count;
19099     IF l_prj_mgr_count = 0 THEN
19100        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19101           pa_utils.add_message
19102         ( p_app_short_name   => 'PA'
19103          ,p_msg_name         => 'PA_PR_INSUF_PROJ_MGR'
19104         );
19105           RAISE FND_API.G_EXC_ERROR;
19106        END IF;
19107     END IF;
19108  END IF;
19109 /* End of code for bug #2111806 */
19110 
19111 --   ----------------------------------------
19112 
19113 -- anlee org role changes
19114 -- UPDATE org roles
19115 
19116    l_count := 0;
19117    j := p_org_roles.first;
19118    IF p_org_roles.exists(j) THEN
19119 
19120      FOR i in 1..p_org_roles.COUNT LOOP
19121           OPEN l_org_role_csr(l_project_id, p_org_roles(i).person_id,
19122                                 p_org_roles(i).project_role_type );
19123           FETCH l_org_role_csr INTO l_org_roles_rec;
19124           IF l_org_role_csr%NOTFOUND THEN
19125              CLOSE l_org_role_csr;
19126              -- This means this is a new org role
19127              -- add this to the temp table which will be passed
19128              -- to add_org_roles
19129 
19130              IF l_org_roles_tbl.EXISTS(1) THEN
19131                 l_count := l_org_roles_tbl.COUNT + 1;
19132              ELSE
19133                 l_count := 1;
19134              END IF;
19135              l_org_roles_tbl(l_count) := p_org_roles(i);
19136              IF l_org_roles_tbl(l_count).start_date =
19137                 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
19138                 l_org_roles_tbl(l_count).start_date IS NULL THEN
19139                 l_org_roles_tbl(l_count).start_date := TRUNC(SYSDATE);
19140              END IF;
19141              IF l_org_roles_tbl(l_count).end_date =
19142                 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
19143                 l_org_roles_tbl(l_count).end_date := NULL;
19144              END IF;
19145           ELSE
19146                CLOSE l_org_role_csr;
19147                 IF p_org_roles(i).start_date <>
19148                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
19149                    p_org_roles(i).start_date IS NOT NULL THEN
19150                    IF p_org_roles(i).start_date <>
19151                       NVL(l_org_roles_rec.start_date_active,
19152                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
19153                       l_temp_start_date := p_org_roles(i).start_date;
19154                    ELSE
19155 
19156                       l_temp_start_date := l_org_roles_rec.start_date_active;
19157                    END IF;
19158                 ELSE
19159                    l_temp_start_date := l_org_roles_rec.start_date_active;
19160                 END IF;
19161                 IF p_org_roles(i).end_date <>
19162                    PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
19163                    p_org_roles(i).end_date IS NOT NULL THEN
19164                    IF p_org_roles(i).end_date <>
19165                       NVL(l_org_roles_rec.end_date_active,
19166                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
19167                       l_temp_end_date := p_org_roles(i).end_date;
19168                    ELSE
19169                       l_temp_end_date := l_org_roles_rec.end_date_active;
19170                    END IF;
19171                 ELSE
19172                    l_temp_end_date := l_org_roles_rec.end_date_active;
19173                 END IF;
19174                 IF l_temp_end_date < l_temp_start_date THEN
19175                    p_return_status := FND_API.G_RET_STS_ERROR;
19176                    IF FND_MSG_PUB.Check_Msg_Level
19177                      (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
19178                       pa_interface_utils_pub.map_new_amg_msg
19179                        ( p_old_message_code => 'PA_PR_INVALID_OR_DATES'
19180                         ,p_msg_attribute    => 'CHANGE'
19181                         ,p_resize_flag      => 'N'
19182                         ,p_msg_context      => 'PROJ'
19183                         ,p_attribute1       => l_project_rec.segment1
19184                         ,p_attribute2       => ''
19185                         ,p_attribute3       => ''
19186                         ,p_attribute4       => ''
19187                         ,p_attribute5       => '');
19188                          p_multiple_task_msg   := 'F';
19189                   END IF;
19190                 END IF;
19191                 IF (l_temp_start_date <>
19192                           NVL(l_org_roles_rec.start_date_active,
19193                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
19194                       OR
19195                    (l_temp_end_date <>
19196                           NVL(l_org_roles_rec.end_date_active,
19197                           PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)) THEN
19198                    if p_multiple_task_msg <> 'F' then
19199 
19200 
19201    SELECT   COMPLETION_DATE
19202    INTO     v_completion_date
19203    FROM     pa_projects p
19204    WHERE    p.project_id = l_org_roles_rec.project_id;
19205    if l_org_roles_rec.scheduled_flag = 'N'
19206    then
19207        PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY(
19208           p_api_version => 1.0                  -- p_api_version
19209           , p_init_msg_list => FND_API.G_TRUE   -- p_init_msg_list
19210           , p_commit => FND_API.G_FALSE          -- p_commit
19211           , p_validate_only => FND_API.G_FALSE  -- p_validate_only
19212           , p_validation_level => FND_API.G_VALID_LEVEL_FULL   -- p_validation_level
19213           , p_debug_mode => 'N'                 -- p_debug_mode
19214           , p_object_id => l_org_roles_rec.project_id  -- p_object_id
19215           , p_OBJECT_TYPE => 'PA_PROJECTS'         -- p_OBJECT_TYPE
19216           , p_project_role_id => NULL  -------Bug 2100142l_key_members_rec.project_id   -- p_project_role_id
19217           , p_project_role_type => l_org_roles_rec.project_role_type -- p_project_role_type
19218           , p_resource_type_id => l_org_roles_rec.resource_type_id   -- p_resource_type_id
19219           , p_resource_source_id => l_org_roles_rec.resource_source_id   -- p_resource_source_id
19220           , p_resource_name => v_null_char      -- p_resource_name
19221           , p_start_date_active => l_temp_start_date   -- p_start_date_active
19222           , p_scheduled_flag => 'N'             -- p_scheduled_flag
19223           , p_record_version_number => l_org_roles_rec.record_version_number --  p_record_version_number
19224           , p_calling_module => 'FORM'          -- p_calling_module
19225           , p_project_id => l_org_roles_rec.project_id   -- p_project_id
19226           , p_project_end_date => v_completion_date   -- p_project_end_date
19227           , p_project_party_id => l_org_roles_rec.project_party_id  -- p_project_party_id
19228           , p_end_date_active => l_temp_end_date      -- p_end_date_active
19229           , x_wf_type         => l_wf_type
19230           , x_wf_item_type    => l_wf_item_type
19231           , x_wf_process      => l_wf_process
19232           , x_assignment_id   => l_assignment_id
19233           , x_return_status => x_return_status  -- x_return_status
19234           , x_msg_count => x_msg_count          -- x_msg_count
19235           , x_msg_data => x_msg_data            -- x_msg_data
19236           );
19237       IF    (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
19238         p_return_status := x_return_status;
19239         p_msg_count     := x_msg_count;
19240         p_msg_data      := SUBSTR(p_msg_data||x_msg_data,1,2000);
19241                 if    (x_return_status = FND_API.G_RET_STS_ERROR) then
19242                       raise  FND_API.G_EXC_UNEXPECTED_ERROR;
19243                 else  -- (x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR) then
19244                       raise  FND_API.G_EXC_ERROR;
19245                 end if;
19246          END IF;
19247       end if;
19248 
19249                    end if;
19250                 END IF;
19251           END IF;
19252         END LOOP;
19253 
19254       IF p_multiple_task_msg = 'F'
19255       THEN
19256          RAISE  FND_API.G_EXC_ERROR;
19257       END IF;
19258 
19259        IF l_org_roles_tbl.COUNT > 0 THEN
19260            PA_PROJECT_PVT.add_org_roles (
19261               p_return_status         =>l_return_status,
19262               p_pa_source_template_id =>l_project_rec.created_from_project_id,
19263               p_project_id            =>l_project_id,
19264               p_org_roles           =>l_org_roles_tbl );
19265               IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR  THEN
19266                  p_return_status             := l_return_status;
19267                  p_project_out.return_status := l_return_status;
19268                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
19269               ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
19270                  p_return_status             := l_return_status;
19271                  p_project_out.return_status := l_return_status;
19272                 RAISE  FND_API.G_EXC_ERROR;
19273               END IF;
19274        END IF;
19275 
19276  END IF;
19277 
19278 
19279 --UPDATE class_categories
19280 
19281   i := p_class_categories.first;
19282 
19283   IF p_class_categories.exists(i) THEN
19284 
19285      WHILE i IS NOT NULL LOOP
19286 
19287        IF (p_class_categories(i).class_category <>
19288           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
19289           (p_class_categories(i).class_category IS NOT NULL )
19290        AND (p_class_categories(i).class_code <>
19291           PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
19292           (p_class_categories(i).class_code IS NOT NULL ) THEN
19293 
19294            -- Start of Addition for bug 4191009
19295            class_code_tbl.delete();
19296            l_class_code := NULL;
19297            l_code_percentage := NULL;
19298            OPEN l_class_categories_csr (l_project_id,
19299                                         p_class_categories(i).class_category);
19300            FETCH l_class_categories_csr BULK COLLECT INTO class_code_tbl;
19301 
19302            If class_code_tbl.count<1 Then
19303                 l_class_categories_tbl(i) := p_class_categories(i);
19304            Else
19305                 for j in class_code_tbl.first..class_code_tbl.last Loop
19306                 If class_code_tbl.exists(j) then
19307                       if class_code_tbl(j) = p_class_categories(i).class_code then
19308                          if (p_class_categories(i).new_class_code <>
19309                            PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
19310                            (p_class_categories(i).new_class_code IS NOT NULL ) THEN -- 5348726 Added for bug#5294891
19311                              --remove the old class_code
19312                              DELETE FROM pa_project_classes
19313                               WHERE project_id   = l_project_id
19314                               AND   class_category   = p_class_categories(i).class_category
19315                               AND   class_code  = p_class_categories(i).class_code;
19316 
19317                              OPEN c_get_class_code_id(p_class_categories(i).class_category,
19318                                                      p_class_categories(i).class_code);
19319                              fetch c_get_class_code_id into l_old_class_code_id;
19320                              close c_get_class_code_id;
19321 
19322                              OPEN c_get_class_code_id(p_class_categories(i).class_category,
19323                                                      p_class_categories(i).new_class_code);
19324                              fetch c_get_class_code_id into l_new_class_code_id;
19325                              if c_get_class_code_id%notfound then
19326                                  IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19327                                  THEN
19328                                           pa_interface_utils_pub.map_new_amg_msg
19329                                            ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
19330                                            ,p_msg_attribute    => 'CHANGE'
19331                                            ,p_resize_flag      => 'N'
19332                                            ,p_msg_context      => 'PROJ'
19333                                            ,p_attribute1       => l_project_rec.segment1
19334                                            ,p_attribute2       => ''
19335                                            ,p_attribute3       => ''
19336                                            ,p_attribute4       => ''
19337                                            ,p_attribute5       => '');
19338                                  END IF;
19339                                  close c_get_class_code_id;
19340                                  RAISE FND_API.G_EXC_ERROR;
19341                              end if;
19342                              close c_get_class_code_id;
19343 
19344                              PA_USER_ATTR_PUB.DELETE_USER_ATTRS_DATA (
19345                                     p_validate_only             => FND_API.G_FALSE
19346                                     ,p_project_id                => l_project_id
19347                                     ,p_old_classification_id     => l_old_class_code_id
19348                                     ,p_new_classification_id     => l_new_class_code_id
19349                                     ,p_classification_type       => 'CLASS_CODE'
19350                                     ,x_return_status             => l_return_status
19351                                     ,x_msg_count                 => l_msg_count
19352                                     ,x_msg_data                  => l_msg_data );
19353                              l_msg_count := FND_MSG_PUB.count_msg;
19354                              IF l_msg_count > 0 THEN
19355                                  x_msg_count := l_msg_count;
19356                                  x_return_status := 'E';
19357                                  RAISE  FND_API.G_EXC_ERROR;
19358                              END IF;
19359                               --Add the new class code values to the temp table
19360                              l_class_categories_tbl(i) := p_class_categories(i);
19361                              l_class_categories_tbl(i).class_code := p_class_categories(i).new_class_code;
19362                          else -- 5348726 Added for bug#5294891
19363                             OPEN l_code_percentage_csr (l_project_id,
19364                                                 p_class_categories(i).class_category,
19365                                                 p_class_categories(i).class_code);
19366                             fetch l_code_percentage_csr into l_code_percentage;
19367                             If l_code_percentage = p_class_categories(i).code_percentage then
19368                               Null;
19369                             Else
19370                                 --remove the old class_code
19371                                  DELETE FROM pa_project_classes
19372                                       WHERE project_id   = l_project_id
19373                                       AND   class_category   = p_class_categories(i).class_category
19374                                       AND   class_code  = p_class_categories(i).class_code;
19375                                     --and add the new values  to the temp table
19376                                      l_class_categories_tbl(i) := p_class_categories(i);
19377                             End if;
19378                             CLOSE l_code_percentage_csr;
19379                          end if;  -- 5348726 Added for bug#5294891
19380                          l_class_code := class_code_tbl(j);
19381                          exit;
19382                  end if;
19383         end if;
19384         end loop;
19385         if l_class_code is null then
19386             l_class_categories_tbl(i) := p_class_categories(i);
19387         end if;
19388       end if;
19389       CLOSE l_class_categories_csr;
19390     -- End of addition for bug 4191009
19391 
19392     /* Commented and altered as above for bug 4191009
19393        OPEN l_class_categories_csr (l_project_id,
19394                                         p_class_categories(i).class_category);
19395            FETCH l_class_categories_csr INTO l_class_code;
19396 
19397            IF l_class_categories_csr%NOTFOUND THEN
19398               l_class_categories_tbl(i) := p_class_categories(i);
19399            ELSE
19400                 IF l_class_code = p_class_categories(i).class_code THEN
19401                 --if new value for class_code is same as old do nothing
19402         NULL;
19403     ELSE
19404        --remove the old class_code
19405       DELETE FROM pa_project_classes
19406       WHERE project_id   = l_project_id
19407       AND   class_category   = p_class_categories(i).class_category
19408       AND   class_code  = l_class_code;
19409     --and add the new value for class_code to the temp table
19410     l_class_categories_tbl(i) := p_class_categories(i);
19411                END IF;
19412            END IF;
19413 
19414         CLOSE l_class_categories_csr;
19415 
19416   l_class_code := NULL;    Commented till here and altered as above for bug 4191009    */
19417 
19418      END IF;  --  IF (p_class_categories(i).class_category <>
19419                  --  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19420      i := p_class_categories.next(i);
19421 
19422   END LOOP;
19423 
19424  END IF; --  IF p_class_categories.exists(i)
19425 
19426    i := l_class_categories_tbl.first;
19427 
19428          IF l_class_categories_tbl.exists(i)
19429          THEN
19430 
19431             PA_PROJECT_PVT.add_class_categories ( p_return_status         =>l_return_status
19432                       , p_pa_source_template_id =>l_project_rec.created_from_project_id
19433                       , p_project_id            =>l_project_id
19434                       , p_class_categories      =>l_class_categories_tbl );
19435 
19436               IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
19437               THEN
19438 
19439                  p_project_out.return_status := l_return_status;
19440                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
19441 
19442               ELSIF l_return_status = FND_API.G_RET_STS_ERROR
19443               THEN
19444 
19445                  p_project_out.return_status := l_return_status;
19446                  RAISE  FND_API.G_EXC_ERROR;
19447 
19448               END IF;
19449           END IF;
19450 
19451 -- bug 4541103        CLOSE l_lock_rows_csr;  --FYI: doesn't remove locks
19452 /*Customer Account Relationship Changes update bill to and Ship to customer ID*/
19453 
19454 --bug 3716805
19455 ----dbms_output.put_line('Value OF p_project_in.bill_to_customer_id'||p_project_in.bill_to_customer_id);
19456 ----dbms_output.put_line('Value OF p_project_in.ship_to_customer_id'||p_project_in.ship_to_customer_id);
19457 ----dbms_output.put_line('Value OF p_project_in.customer_id'||p_project_in.customer_id);
19458 ----dbms_output.put_line('Value OF p_project_in.bill_to_address_id'||p_project_in.bill_to_address_id);
19459 ----dbms_output.put_line('Value OF p_project_in.ship_to_address_id'||p_project_in.ship_to_address_id);
19460 ------dbms_output.put_line('Value OF p_project_in.bill_to_customer_id'||p_project_in.bill_to_customer_id);
19461 
19462 -- Added the following logic for updating the Project Relationship code. Bug#5131471
19463 --Opened the following cursor because thru project record we can update only the attributes of an exsiting customer. We cannot add a new customer
19464 --or over write the existing customer with a totally new customer.
19465 
19466 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
19467    Open Cur_Customer(l_project_id,p_project_in.customer_id);
19468    Fetch Cur_Customer into Cur_Customer_rec;
19469 
19470    IF (Cur_Customer%FOUND) THEN
19471 
19472         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
19473 
19474                 --dbms_output.put_line('three'||l_check_relationship_flag);
19475                 OPEN  cur_customer_status(p_project_in.customer_id);
19476                 FETCH cur_customer_status INTO l_cust_status;
19477 
19478                         IF (  cur_customer_status%NOTFOUND ) THEN
19479                                 --dbms_output.put_line('five'||l_check_relationship_flag);
19480                                 --passed customer does not exist
19481                                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19482                                             --Changed the error message from PA_CUSTOMER_NOT_EXIST to PA_CUSTOMER_ID_INVALID for Bug#5183150
19483                                             pa_utils.add_message
19484                                                         ( p_app_short_name   => 'PA'
19485                                                          ,p_msg_name         => 'PA_CUSTOMER_ID_INVALID'
19486                                                         );
19487                                 END IF;
19488                                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19489                                 p_return_status             := FND_API.G_RET_STS_ERROR;
19490                                 RAISE FND_API.G_EXC_ERROR;
19491 
19492                         ELSIF ( cur_customer_status%FOUND ) THEN
19493                                 --dbms_output.put_line('four'||l_check_relationship_flag);
19494                                 IF ( l_cust_status = 'I' ) THEN
19495                                         --customer is not active
19496                                         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19497                                            pa_utils.add_message
19498                                                         ( p_app_short_name   => 'PA'
19499                                                          ,p_msg_name         => 'PA_CUSTOMER_NOT_ACTIVE'
19500                                                          ,p_token1           => 'PROJECT_NAME'
19501                                                          ,p_value1           => l_project_rec.segment1
19502                                                          ,p_token2           => 'CUSTOMER_ID'
19503                                                          ,p_value2           => p_project_in.customer_id
19504                                                         );
19505                                         END IF;
19506                                         p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19507                                         p_return_status             := FND_API.G_RET_STS_ERROR;
19508                                         RAISE FND_API.G_EXC_ERROR;
19509 
19510                                 ELSE  --customer id is not null and it is valid
19511 
19512 
19513                                                 UPDATE pa_project_customers
19514                                                 SET
19515                                                 project_relationship_code = p_project_in.project_relationship_code
19516                                                 WHERE
19517                                                 customer_id     =       p_project_in.customer_id        AND
19518                                                 project_id      =       l_project_id;
19519 
19520                                 END IF;
19521                         END IF; -- if cur_customer_status%NOTFOUND
19522                 CLOSE cur_customer_status;
19523 
19524         END IF; --Project relationship code is not null and not mis num
19525 
19526    END IF; --Cur_Customer%FOUND
19527    Close Cur_Customer;
19528 
19529 END IF; --customer id is not passed as null or mis num
19530 
19531 -- End of logic added for Bug#5131471 for updating the Project Relationship code.
19532 
19533     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)
19534        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)
19535 --bug 3716805
19536     THEN
19537      If p_project_in.customer_id IS NULL OR p_project_in.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19538        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19539             THEN
19540             pa_interface_utils_pub.map_new_amg_msg
19541             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
19542              ,p_msg_attribute    => 'CHANGE'
19543              ,p_resize_flag      => 'N'
19544              ,p_msg_context      => 'PROJ'
19545              ,p_attribute1       => l_project_in_rec.pm_project_reference
19546              ,p_attribute2       => ''
19547              ,p_attribute3       => ''
19548              ,p_attribute4       => ''
19549              ,p_attribute5       => '');
19550             END IF;
19551             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19552             p_return_status             := FND_API.G_RET_STS_ERROR;
19553             RAISE FND_API.G_EXC_ERROR;
19554     end if;
19555 
19556      Open Cur_Customer(l_project_id,p_project_in.customer_id);
19557      Fetch Cur_Customer into Cur_Customer_rec;
19558      Close Cur_Customer;
19559 
19560    l_bill_to_customer_id:=p_project_in.bill_to_customer_id;
19561    l_ship_to_customer_id:=p_project_in.ship_to_customer_id;
19562  --added for bug 3911782
19563    l_bill_to_address_id :=p_project_in.bill_to_address_id;
19564    l_ship_to_address_id :=p_project_in.ship_to_address_id;
19565    --changes end for Bug 3911782
19566 
19567 /* Bug 3077676 Begin */
19568 
19569  -- Not adding this error message in get_customer_info as that is called from lot of other places too
19570  -- and it would be a risk changing that.
19571 
19572    OPEN get_cust_acc_rel_code;
19573    FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
19574    CLOSE get_cust_acc_rel_code;
19575 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done below before
19576    calling get_customer_info api.
19577    IF NVL(l_cust_acc_rel_code,'N') ='N'
19578            AND p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19579        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
19580        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
19581        AND p_project_in.customer_id <> p_project_in.bill_to_customer_id
19582        AND p_project_in.customer_id <> p_project_in.ship_to_customer_id
19583    THEN
19584             pa_interface_utils_pub.map_new_amg_msg
19585               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19586                ,p_msg_attribute    => 'CHANGE'
19587                ,p_resize_flag      => 'Y'
19588                ,p_msg_context      => 'PROJ'
19589                ,p_attribute1       => p_project_in.pm_project_reference
19590                ,p_attribute2       => ''
19591                ,p_attribute3       => ''
19592                ,p_attribute4       => ''
19593                ,p_attribute5       => '');
19594            RAISE FND_API.G_EXC_ERROR;
19595    END IF;
19596    */
19597 /* Bug 3077676 End */
19598 
19599 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
19600    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)
19601       and  Cur_Customer_rec.bill_to_customer_id is not null  Then
19602        l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
19603         --changes for bug 3911782
19604       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)
19605           and  Cur_Customer_rec.bill_to_address_id is not null  Then
19606           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19607       End if;
19608     Else
19609       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)
19610           and  Cur_Customer_rec.bill_to_address_id is not null  Then
19611           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19612        End if;
19613       --changes end for bug 3911782
19614    end if;
19615 
19616     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)
19617       and  Cur_Customer_rec.ship_to_customer_id is not null  Then
19618        l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
19619         --changes for bug 3911782
19620       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)
19621           and  Cur_Customer_rec.ship_to_address_id is not null  Then
19622           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19623       End if;
19624      Else
19625       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)
19626           and  Cur_Customer_rec.ship_to_address_id is not null  Then
19627           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19628       End if;
19629        --changes end for bug 3911782
19630    end if;
19631 
19632  -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
19633    -- relations ship code is N.
19634 ----dbms_output.put_line('Value OF p_project_in.bill_to_address_id'||p_project_in.bill_to_address_id);
19635 ----dbms_output.put_line('Value OF p_project_in.ship_to_address_id'||p_project_in.ship_to_address_id);
19636 
19637     IF(NVL(l_cust_acc_rel_code,'N') ='N' and
19638       p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
19639     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19640       p_project_in.customer_id <> l_bill_to_customer_id
19641      ) or
19642      (
19643       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19644       p_project_in.customer_id <> l_ship_to_customer_id
19645     ))
19646    THEN
19647             pa_interface_utils_pub.map_new_amg_msg
19648               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19649                ,p_msg_attribute    => 'CHANGE'
19650                ,p_resize_flag      => 'Y'
19651                ,p_msg_context      => 'PROJ'
19652                ,p_attribute1       => l_project_in_rec.pm_project_reference
19653                ,p_attribute2       => ''
19654                ,p_attribute3       => ''
19655                ,p_attribute4       => ''
19656                ,p_attribute5       => '');
19657            RAISE FND_API.G_EXC_ERROR;
19658    END IF;
19659 
19660      pa_customer_info.get_customer_info( X_project_ID                   => l_project_id,
19661                                          X_Customer_Id                  => p_project_in.customer_id
19662                                         ,X_Bill_To_Customer_Id          => l_bill_to_customer_id
19663                                         ,X_Ship_To_Customer_Id          => l_ship_to_customer_id
19664                                         ,X_Bill_To_Address_Id           => l_bill_to_address_id
19665                                         ,X_Ship_To_Address_Id           => l_ship_to_address_id
19666                                         ,X_Bill_To_Contact_Id           => l_bill_to_contact_id
19667                                         ,X_Ship_To_Contact_Id           => l_ship_to_contact_id
19668                                         ,X_Err_Code                     => l_err_code
19669                                         ,X_Err_Stage                    => l_err_stage
19670                                         ,X_Err_Stack                    => l_err_stack
19671                                         ,p_calling_module               => 'AMG' --added for bug#4770535
19672                                        );
19673 
19674 --dbms_output.put_line('Value OF l_bill_to_customer_id'||l_bill_to_customer_id);
19675 --dbms_output.put_line('Value OF l_ship_to_customer_id'||l_ship_to_customer_id);
19676 --dbms_output.put_line('Value OF l_bill_to_address_id'||l_bill_to_address_id);
19677 --dbms_output.put_line('Value OF l_ship_to_address_id'||l_ship_to_address_id);
19678 --dbms_output.put_line('Value OF l_bill_to_contact_id'||l_bill_to_contact_id);
19679 --dbms_output.put_line('Value OF l_ship_to_contact_id'||l_ship_to_contact_id);
19680     -- For this API,error code 10 is a warning.Anything above 10 is an error
19681         IF l_err_code > 10
19682         THEN
19683 
19684                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19685                 THEN
19686 
19687                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
19688                         THEN
19689             pa_interface_utils_pub.map_new_amg_msg
19690               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19691                ,p_msg_attribute    => 'CHANGE'
19692                ,p_resize_flag      => 'Y'
19693                ,p_msg_context      => 'PROJ'
19694                ,p_attribute1       => l_project_in_rec.pm_project_reference
19695                ,p_attribute2       => ''
19696                ,p_attribute3       => ''
19697                ,p_attribute4       => ''
19698                ,p_attribute5       => '');
19699          ELSE
19700             pa_interface_utils_pub.map_new_amg_msg
19701               ( p_old_message_code => l_err_stage
19702                ,p_msg_attribute    => 'CHANGE'
19703                ,p_resize_flag      => 'Y'
19704                ,p_msg_context      => 'PROJ'
19705                ,p_attribute1       => l_project_in_rec.pm_project_reference
19706                ,p_attribute2       => ''
19707                ,p_attribute3       => ''
19708                ,p_attribute4       => ''
19709                ,p_attribute5       => '');
19710                         END IF;
19711 
19712                 END IF;
19713 
19714                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19715                 RAISE FND_API.G_EXC_ERROR;
19716 
19717           ELSIF l_err_code < 0
19718         THEN
19719 
19720                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
19721                 THEN
19722             pa_interface_utils_pub.map_new_amg_msg
19723               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19724                ,p_msg_attribute    => 'CHANGE'
19725                ,p_resize_flag      => 'Y'
19726                ,p_msg_context      => 'PROJ'
19727                ,p_attribute1       => l_project_in_rec.pm_project_reference
19728                ,p_attribute2       => ''
19729                ,p_attribute3       => ''
19730                ,p_attribute4       => ''
19731                ,p_attribute5       => '');
19732                 END IF;
19733 
19734                 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19735                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19736         END IF;
19737 
19738 /* Update the project customer information */
19739 ----dbms_output.put_line('before update ');
19740              Update Pa_project_customers
19741              Set bill_to_customer_id=l_bill_to_customer_id,
19742                  ship_to_customer_id=l_ship_to_customer_id,
19743                  Bill_To_Address_Id =l_bill_to_address_id,
19744                  Ship_to_address_id =l_ship_to_address_id
19745              where project_id=l_project_id
19746              and customer_id=p_project_in.customer_id;
19747 
19748  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
19749         Delete pa_project_contacts
19750         where Project_Id=l_project_id
19751         and customer_id=p_project_in.customer_id
19752         and Project_Contact_Type_Code='BILLING';
19753 
19754 end if;
19755 
19756 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
19757         Delete pa_project_contacts
19758         where Project_Id=l_project_id
19759         and customer_id=p_project_in.customer_id
19760         and Project_Contact_Type_Code='SHIPPING';
19761 
19762   end if;
19763 
19764 
19765  end if;
19766 
19767 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value
19768 -- using the local variable instead of cursor variable
19769 
19770 /** Below code added for bug 3279981. Customer at Top Task in FP_M  */
19771 --IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 commented
19772 IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_old_cust_top_task_flag THEN -- 4188765 added
19773 --Enabling the customer at top task flag. Thus, we need to set the default top task customer
19774      DECLARE
19775           hghst_ctr_cust_id NUMBER;
19776           hghst_ctr_cust_name hz_parties.party_name%TYPE;   --VARCHAR2(50); Bug 5622539
19777           hghst_ctr_cust_num  hz_parties.party_number%TYPE; --VARCHAR2(30); Bug 5622539
19778 
19779           l_return_status VARCHAR2(10);
19780           l_msg_count     NUMBER := 0;
19781           l_msg_data      VARCHAR2(2000);
19782           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
19783      BEGIN
19784           -- l_exclude_cust_id_tbl(1) := 0; Bug 5622539
19785           --Retrieve the customer to be set as the default top task customer
19786           pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
19787                                            P_API_VERSION            => 1.0
19788                                          , P_INIT_MSG_LIST          => 'T'
19789                                          , P_COMMIT                 => 'F'
19790                                          , P_VALIDATE_ONLY          => 'F'
19791                                          , P_VALIDATION_LEVEL       => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19792                                          , P_DEBUG_MODE             => 'N'
19793                                          , p_calling_module         => 'AMG'
19794                                          , p_project_id             => l_project_id
19795                                          , p_exclude_cust_id_tbl    => l_exclude_cust_id_tbl
19796                                          , x_highst_contr_cust_id   => hghst_ctr_cust_id
19797                                          , x_highst_contr_cust_name => hghst_ctr_cust_name
19798                                          , x_highst_contr_cust_num  => hghst_ctr_cust_num
19799                                          , x_return_status          => l_return_status
19800                                          , x_msg_count              => l_msg_count
19801                                          , x_msg_data               => l_msg_data );
19802 
19803 	  -- Bug 5622539
19804           if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19805             l_msg_count := FND_MSG_PUB.count_msg;
19806             if l_msg_count = 1 then
19807                 PA_INTERFACE_UTILS_PUB.get_messages
19808                   (p_encoded        => FND_API.G_FALSE,
19809                    p_msg_index      => 1,
19810                    p_msg_count      => l_msg_count,
19811                    p_msg_data       => l_msg_data,
19812                    p_data           => l_msg_data,
19813                    p_msg_index_out  => l_msg_index_out);
19814 
19815             end if;
19816             If l_return_status = FND_API.G_RET_STS_ERROR THEN
19817                    p_project_out.return_status := l_return_status;
19818                    RAISE FND_API.G_EXC_ERROR;
19819             else
19820                    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19821                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19822             END if;
19823           end if;
19824          -- Bug 5622539
19825 
19826           IF hghst_ctr_cust_id IS NOT null THEN
19827                 --This API call will update pa_project_customers and pa_tasks
19828                  pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
19829                                                       P_API_VERSION            => 1.0
19830                                                     , P_INIT_MSG_LIST          => 'T'
19831                                                     , P_COMMIT                 => 'F'
19832                                                     , P_VALIDATE_ONLY          => 'F'
19833                                                     , P_VALIDATION_LEVEL       => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19834                                                     , P_DEBUG_MODE             => 'N'
19835                                                     , p_calling_module         => 'AMG'
19836                                                     , p_mode                   => 'ENABLE'
19837                                                     , p_project_id             => l_project_id
19838                                                     , p_def_top_task_cust      => hghst_ctr_cust_id
19839                                                     , p_contr_update_cust      => null
19840                                                     , x_return_status          => l_return_status
19841                                                     , x_msg_count              => l_msg_count
19842                                                     , x_msg_data               => l_msg_data );
19843 
19844 		-- Bug 5622539
19845                 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19846                     l_msg_count := FND_MSG_PUB.count_msg;
19847                     if l_msg_count = 1 then
19848                         PA_INTERFACE_UTILS_PUB.get_messages
19849                         (p_encoded        => FND_API.G_FALSE,
19850                         p_msg_index      => 1,
19851                         p_msg_count      => l_msg_count,
19852                         p_msg_data       => l_msg_data,
19853                         p_data           => l_msg_data,
19854                         p_msg_index_out  => l_msg_index_out);
19855 
19856                     end if;
19857                     If l_return_status = FND_API.G_RET_STS_ERROR THEN
19858                         p_project_out.return_status := l_return_status;
19859                         RAISE FND_API.G_EXC_ERROR;
19860                     else
19861                         p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19862                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19863                     END if;
19864                 end if;
19865                 -- Bug 5622539
19866 
19867           END IF;
19868      END ;
19869 END IF;
19870 
19871 --IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 Commented
19872 IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_old_cust_top_task_flag THEN -- 4188765 Added
19873 --Disabling the customer at top task flag. Thus, we need to set the customer bill split for the project customers
19874      DECLARE
19875           cust_id                PA_PROJECT_CUSTOMERS.customer_id%TYPE;
19876           hghst_ctr_cust_id      NUMBER;
19877            hghst_ctr_cust_name hz_parties.party_name%TYPE;  --VARCHAR2(50); Bug 5622539
19878           hghst_ctr_cust_num  hz_parties.party_number%TYPE; --VARCHAR2(30); Bug 5622539
19879          -- num_customers          NUMBER := 0; bug 5622539
19880           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
19881 
19882           l_return_status VARCHAR2(10);
19883           l_msg_count     NUMBER := 0;
19884           l_msg_data      VARCHAR2(2000);
19885           CURSOR cur_get_def_top_task_cust IS
19886           SELECT customer_id
19887           FROM   pa_project_customers
19888           WHERE  project_id = l_project_id
19889           AND    default_top_task_cust_flag = 'Y' ;
19890      BEGIN
19891         -- l_exclude_cust_id_tbl(1) := 0; Bug 5622539
19892          --Retrieve the customer to be updated with 100% contribution
19893          pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
19894                                            P_API_VERSION            => 1.0
19895                                          , P_INIT_MSG_LIST          => 'T'
19896                                          , P_COMMIT                 => 'F'
19897                                          , P_VALIDATE_ONLY          => 'F'
19898                                          , P_VALIDATION_LEVEL       => FND_API.G_VALID_LEVEL_FULL --100 bug 5622539
19899                                          , P_DEBUG_MODE             => 'N'
19900                                          , p_calling_module         => 'AMG'
19901                                          , p_project_id             => l_project_id
19902                                          , p_exclude_cust_id_tbl    => l_exclude_cust_id_tbl
19903                                          , x_highst_contr_cust_id   => hghst_ctr_cust_id
19904                                          , x_highst_contr_cust_name => hghst_ctr_cust_name
19905                                          , x_highst_contr_cust_num  => hghst_ctr_cust_num
19906                                          , x_return_status          => l_return_status
19907                                          , x_msg_count              => l_msg_count
19908                                          , x_msg_data               => l_msg_data );
19909 
19910           -- Bug 5622539
19911             if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19912                 l_msg_count := FND_MSG_PUB.count_msg;
19913                 if l_msg_count = 1 then
19914                     PA_INTERFACE_UTILS_PUB.get_messages
19915                     (p_encoded        => FND_API.G_FALSE,
19916                     p_msg_index      => 1,
19917                     p_msg_count      => l_msg_count,
19918                     p_msg_data       => l_msg_data,
19919                     p_data           => l_msg_data,
19920                     p_msg_index_out  => l_msg_index_out);
19921 
19922                 end if;
19923                 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19924                     p_project_out.return_status := l_return_status;
19925                     RAISE FND_API.G_EXC_ERROR;
19926                 else
19927                     p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19928                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19929                 END if;
19930             end if;
19931           -- Bug 5622539
19932           OPEN  cur_get_def_top_task_cust;
19933           FETCH cur_get_def_top_task_cust INTO cust_id;
19934           CLOSE cur_get_def_top_task_cust;
19935 
19936           IF hghst_ctr_cust_id IS NOT NULL THEN
19937                 --This API call will update pa_project_customers and pa_tasks
19938                  pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
19939                                                       P_API_VERSION            => 1.0
19940                                                     , P_INIT_MSG_LIST          => 'T'
19941                                                     , P_COMMIT                 => 'F'
19942                                                     , P_VALIDATE_ONLY          => 'F'
19943                                                     , P_VALIDATION_LEVEL       => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19944                                                     , P_DEBUG_MODE             => 'N'
19945                                                     , p_calling_module         => 'AMG'
19946                                                     , p_mode                   => 'DISABLE'
19947                                                     , p_project_id             => l_project_id
19948                                                     , p_def_top_task_cust      => cust_id
19949                                                     , p_contr_update_cust      => hghst_ctr_cust_id
19950                                                     , x_return_status          => l_return_status
19951                                                     , x_msg_count              => l_msg_count
19952                                                     , x_msg_data               => l_msg_data );
19953 
19954                       -- Bug 5622539
19955                  if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19956                     l_msg_count := FND_MSG_PUB.count_msg;
19957                     if l_msg_count = 1 then
19958                         PA_INTERFACE_UTILS_PUB.get_messages
19959                         (p_encoded        => FND_API.G_FALSE,
19960                         p_msg_index      => 1,
19961                         p_msg_count      => l_msg_count,
19962                         p_msg_data       => l_msg_data,
19963                         p_data           => l_msg_data,
19964                         p_msg_index_out  => l_msg_index_out);
19965 
19966                     end if;
19967                     If l_return_status = FND_API.G_RET_STS_ERROR THEN
19968                         p_project_out.return_status := l_return_status;
19969                         RAISE FND_API.G_EXC_ERROR;
19970                     else
19971                         p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19972                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19973                     END if;
19974                  end if;
19975               -- Bug 5622539
19976           END IF;
19977      END;
19978 END IF;
19979 
19980 ------------------------------------------------------------------------------------------------------------
19981 /* This code is newly added.It has few checks that were present in the initial code for p_project_in_rec_type.
19982 customer_id and few new validation of code.  The above code is left untouched as it would have caused regression otherwise.
19983 We continue to support updation of single customer record via p_project_in_rec_type.customer_id. */
19984 -----------------------------------------------------------------------------------------------------------
19985 ----dbms_output.put_line('The control comes till this point');
19986 /* Tracking bug ..customer code added in a loop */
19987 i := p_customers_in.first;
19988 IF p_customers_in.exists(i) THEN
19989    WHILE i IS NOT NULL LOOP
19990       --dbms_output.put_line('if CUSTOMER ARE PASSED TO UPDATE_PROJECT ');
19991       --dbms_output.put_line('p_customers_in(i).PROJECT_RELATIONSHIP_CODE'||p_customers_in(i).PROJECT_RELATIONSHIP_CODE);
19992 -- All this should be done in a loop **/ ADITI_START
19993 
19994 /*Customer Account Relationship Changes update bill to and Ship to customer ID*/
19995 
19996 --bug 3716805
19997    /* Commented for tracking Bug
19998    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)
19999        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)
20000 --bug 3716805
20001     THEN
20002      If p_project_in.customer_id IS NULL OR p_project_in.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
20003        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20004             THEN
20005             pa_interface_utils_pub.map_new_amg_msg
20006             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
20007              ,p_msg_attribute    => 'CHANGE'
20008              ,p_resize_flag      => 'N'
20009              ,p_msg_context      => 'PROJ'
20010              ,p_attribute1       => l_project_in_rec.pm_project_reference
20011              ,p_attribute2       => ''
20012              ,p_attribute3       => ''
20013              ,p_attribute4       => ''
20014              ,p_attribute5       => '');
20015             END IF;
20016             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20017             p_return_status             := FND_API.G_RET_STS_ERROR;
20018             RAISE FND_API.G_EXC_ERROR;
20019     end if;*/
20020 
20021  /** changed FROM p_project_in.customer_id to p_customers_in(i).custmer_id in all places **/
20022     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)
20023        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)
20024         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
20025 --bug 3716805
20026     THEN
20027      --dbms_output.put_line('comes into karthiks 0th else');
20028       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
20029        IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20030             THEN
20031             pa_interface_utils_pub.map_new_amg_msg
20032             ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
20033              ,p_msg_attribute    => 'CHANGE'
20034              ,p_resize_flag      => 'N'
20035              ,p_msg_context      => 'PROJ'
20036              ,p_attribute1       => l_project_in_rec.pm_project_reference
20037              ,p_attribute2       => ''
20038              ,p_attribute3       => ''
20039              ,p_attribute4       => ''
20040              ,p_attribute5       => '');
20041             END IF;
20042             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20043             p_return_status             := FND_API.G_RET_STS_ERROR;
20044             RAISE FND_API.G_EXC_ERROR;
20045     end if;
20046 --dbms_output.put_line('comes into karthiks 0th end if');
20047 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
20048 
20049    /* Bug 3077676 Begin */
20050 
20051  -- Not adding this error message in get_customer_info as that is called from lot of other places too
20052  -- and it would be a risk changing that.
20053    OPEN get_cust_acc_rel_code;
20054    FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
20055    CLOSE get_cust_acc_rel_code;
20056 
20057    /* Moved cursor get_cust_acc_rel_code from below to above for tracking bug */
20058 
20059 
20060 
20061    --Open Cur_Customer(l_project_id,p_project_in.customer_id); --Commented for tracking bug
20062      Open Cur_Customer(l_project_id,p_customers_in(i).customer_id); --Added for tracking Bug
20063      Fetch Cur_Customer into Cur_Customer_rec;
20064      If Cur_Customer%NOTFOUND THEN --added for tracking
20065      Close Cur_Customer;
20066    -- This means this is a new customer
20067      -- add this to the temp table which will be
20068 --dbms_output.put_line('comes into free portion');
20069 --dbms_output.put_line('p_customers_in(i).customer_id'||p_customers_in(i).customer_id);
20070 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
20071     --dbms_output.put_line('comes into karthiks 1st else');
20072        IF p_customers_in(i).project_relationship_code IS NULL OR
20073         p_customers_in(i).project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
20074                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20075                 THEN
20076                        pa_utils.add_message
20077                         ( p_app_short_name   => 'PA'-- using existing message for AA TRACKING
20078                          ,p_msg_name    => 'PA_RELATIONSHIP_CODE_REQD'
20079                          ,p_token1           => 'PROJECT_NAME'
20080                          ,p_value1           => l_project_rec.segment1
20081                          ,p_token2           => 'CUSTOMER_ID'
20082                          ,p_value2           => p_customers_in(i).customer_id
20083                         );
20084                 END IF;
20085                 p_multiple_task_msg := 'F';
20086                 RAISE FND_API.G_EXC_ERROR;
20087        END IF;
20088 
20089       -- below if condition is added Bug 5622539
20090       IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20091             (l_enable_top_task_cust_flag='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y'))
20092            and (NVL(p_project_in.date_eff_funds_flag, 'N') <> 'Y'
20093                or NVL(l_project_rec.DATE_EFF_FUNDS_CONSUMPTION, 'N') <> 'Y') /* Added the condition for Bug 10416869*/
20094       then
20095       IF p_customers_in(i).CUSTOMER_BILL_SPLIT IS NULL OR
20096         p_customers_in(i).CUSTOMER_BILL_SPLIT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
20097           IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20098               THEN
20099                pa_utils.add_message
20100                 ( p_app_short_name   => 'PA'-- new message for AA TRACKING
20101                  ,p_msg_name    => 'PA_CUST_BILL_SPLIT_REQD'
20102                  ,p_token1           => 'PROJECT_NAME'
20103                  ,p_value1           => l_project_rec.segment1
20104                  ,p_token2           => 'CUSTOMER_ID'
20105                  ,p_value2           => p_customers_in(i).customer_id
20106                 );
20107              END IF;
20108              p_multiple_task_msg := 'F';
20109              RAISE FND_API.G_EXC_ERROR;
20110        ELSE
20111         PA_CUSTOMERS_CONTACTS_UTILS.CHECK_CONTRIBUTION_PERCENTAGE
20112          ( p_customer_bill_split => p_customers_in(i).CUSTOMER_BILL_SPLIT
20113           ,x_return_status       => l_return_status
20114           ,x_error_msg_code      => l_error_msg_code);
20115           If l_return_status <> FND_API.G_RET_STS_SUCCESS then
20116            pa_utils.add_message
20117                 ( p_app_short_name   => 'PA' --TRACKING
20118                  ,p_msg_name    => 'PA_CUST_BILL_SPLIT_INVALID'
20119                  ,p_token1           => 'PROJECT_NAME'
20120                  ,p_value1           => l_project_rec.segment1
20121                  ,p_token2           => 'CUSTOMER_ID'
20122                  ,p_value2           => p_customers_in(i).customer_id
20123                 );
20124              /* Fix for bug 4604087 */
20125              p_multiple_task_msg := 'F';
20126              RAISE FND_API.G_EXC_ERROR;
20127            END IF;
20128 
20129       END IF;
20130 END IF;
20131     -- added by aditi for tracking bug -- FOR CUSTOMER ISSUE
20132     ----dbms_output.put_line('Value of p_project_in.customer_id'||p_customers_in(i).customer_id);
20133     /* OLD code be4 tracking again */
20134 /* Coomented the code below and added new code for tracking bug
20135    l_bill_to_customer_id:=p_project_in.bill_to_customer_id;
20136    l_ship_to_customer_id:=p_project_in.ship_to_customer_id;
20137  --added for bug 3911782
20138    l_bill_to_address_id :=p_project_in.bill_to_address_id;
20139    l_ship_to_address_id :=p_project_in.ship_to_address_id;
20140    --changes end for Bug 3911782*/
20141     l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
20142    l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
20143  --added for bug 3911782
20144    l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
20145    l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
20146    l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
20147    l_customer_bill_split := p_customers_in(i).Customer_Bill_Split;
20148    -- Added for Bug 5622539
20149    If (l_customer_bill_split is null or
20150         l_customer_bill_split = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20151    then
20152         l_customer_bill_split:=0;
20153    end if;
20154 
20155    ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
20156    ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
20157    ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
20158    ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
20159 
20160 
20161 
20162 
20163 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done below before
20164    calling get_customer_info api.
20165    IF NVL(l_cust_acc_rel_code,'N') ='N'
20166            AND p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
20167        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
20168        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
20169        AND p_project_in.customer_id <> p_project_in.bill_to_customer_id
20170        AND p_project_in.customer_id <> p_project_in.ship_to_customer_id
20171    THEN
20172             pa_interface_utils_pub.map_new_amg_msg
20173               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
20174                ,p_msg_attribute    => 'CHANGE'
20175                ,p_resize_flag      => 'Y'
20176                ,p_msg_context      => 'PROJ'
20177                ,p_attribute1       => p_project_in.pm_project_reference
20178                ,p_attribute2       => ''
20179                ,p_attribute3       => ''
20180                ,p_attribute4       => ''
20181                ,p_attribute5       => '');
20182            RAISE FND_API.G_EXC_ERROR;
20183    END IF;
20184    */
20185 /* Bug 3077676 End */
20186 
20187 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
20188 /* For a New RECORD this code IS redundant by aditi for tracking
20189    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)
20190       and  Cur_Customer_rec.bill_to_customer_id is not null  Then
20191        l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
20192         --changes for bug 3911782
20193       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)
20194           and  Cur_Customer_rec.bill_to_address_id is not null  Then
20195           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20196       End if;
20197     Else
20198       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)
20199           and  Cur_Customer_rec.bill_to_address_id is not null  Then
20200           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20201        End if;
20202       --changes end for bug 3911782
20203    end if;
20204 
20205     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)
20206       and  Cur_Customer_rec.ship_to_customer_id is not null  Then
20207        l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
20208         --changes for bug 3911782
20209       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)
20210           and  Cur_Customer_rec.ship_to_address_id is not null  Then
20211           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20212       End if;
20213      Else
20214       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)
20215           and  Cur_Customer_rec.ship_to_address_id is not null  Then
20216           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20217       End if;
20218        --changes end for bug 3911782
20219    end if;
20220 /* THIS WHOLE CODE IS COMMENTED FOR TRACKING BUG */
20221  -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
20222    -- relations ship code is N.
20223 ----dbms_output.put_line('Value of p_customers_in(i).customer_id'||p_customers_in(i).customer_id);
20224 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
20225 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
20226 
20227    /* IF(NVL(l_cust_acc_rel_code,'N') ='N' and
20228       p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
20229     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20230       p_project_in.customer_id <> l_bill_to_customer_id
20231      ) or
20232      (
20233       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20234       p_project_in.customer_id <> l_ship_to_customer_id
20235     )) This coce is commented as the code is being called in loop for tracking issue*/
20236 
20237     IF(NVL(l_cust_acc_rel_code,'N') ='N' and
20238       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
20239     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20240       p_customers_in(i).customer_id <> l_bill_to_customer_id
20241      ) or
20242      (
20243       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20244       p_customers_in(i).customer_id <> l_ship_to_customer_id
20245     ))
20246 
20247    THEN
20248             pa_interface_utils_pub.map_new_amg_msg
20249               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
20250                ,p_msg_attribute    => 'CHANGE'
20251                ,p_resize_flag      => 'Y'
20252                ,p_msg_context      => 'PROJ'
20253                ,p_attribute1       => l_project_in_rec.pm_project_reference
20254                ,p_attribute2       => ''
20255                ,p_attribute3       => ''
20256                ,p_attribute4       => ''
20257                ,p_attribute5       => '');
20258            RAISE FND_API.G_EXC_ERROR;
20259    END IF;
20260   /** changes begin for tracking bug by aditi **/
20261 
20262    ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
20263    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)
20264       then
20265 
20266 
20267          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
20268            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20269               THEN
20270                pa_utils.add_message
20271               ( p_app_short_name   => 'PA'-- existing message for tracking bug
20272                  ,p_msg_name    => 'PA_CONTACT_TYPE_REQD'
20273                  ,p_token1           => 'PROJECT_NAME'
20274                  ,p_value1           => l_project_in_rec.pm_project_reference
20275                  ,p_token2           => 'CUSTOMER_ID'
20276                  ,p_value2           => p_customers_in(i).customer_id
20277                  ,p_token3           => 'CONTACT_ID'
20278                  ,p_value3           => p_customers_in(i).CONTACT_ID
20279               );
20280            END IF;
20281             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20282             p_return_status             := FND_API.G_RET_STS_ERROR;
20283             RAISE FND_API.G_EXC_ERROR;
20284          END IF;
20285      end if;
20286       If  p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
20287         l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
20288 	l_ship_to_contact_id := NULL; -- Bug 5622539
20289       ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
20290         l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
20291 	l_bill_to_contact_id := NULL; -- Bug 5622539
20292       Else
20293         l_bill_to_contact_id := NULL;
20294         l_ship_to_contact_id := NULL;
20295       End If;
20296       /** end of chnages for tracking bug by aditi **/
20297 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
20298 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
20299 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
20300 
20301 /* Start of changes for bug 5482997 */
20302 
20303       IF l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
20304          l_bill_to_customer_id := NULL;
20305       END IF;
20306 
20307       IF l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
20308          l_ship_to_customer_id := NULL;
20309       END IF;
20310 
20311 /* End of changes for bug 5482997 */
20312 
20313 
20314      pa_customer_info.get_customer_info( X_project_ID           => l_project_id,
20315                                          X_Customer_Id          => p_customers_in(i).customer_id -- p_project_in.customer_id tracking
20316                                         ,X_Bill_To_Customer_Id  => l_bill_to_customer_id
20317                                         ,X_Ship_To_Customer_Id  => l_ship_to_customer_id
20318                                         ,X_Bill_To_Address_Id   => l_bill_to_address_id
20319                                         ,X_Ship_To_Address_Id   => l_ship_to_address_id
20320                                         ,X_Bill_To_Contact_Id   => l_bill_to_contact_id
20321                                         ,X_Ship_To_Contact_Id   => l_ship_to_contact_id
20322                                         ,X_Err_Code             => l_err_code
20323                                         ,X_Err_Stage            => l_err_stage
20324                                         ,X_Err_Stack            => l_err_stack
20325                                         ,p_calling_module       => 'AMG' --Added for Bug#4770535
20326                                        );
20327 
20328 ----dbms_output.put_line('After calling pa_customer_info.get_customer_info'||l_err_code);
20329 --dbms_output.put_line('Value of l_bill_to_address_id '||l_bill_to_address_id);
20330 --dbms_output.put_line('Value of l_ship_to_address_id '||l_ship_to_address_id);
20331 
20332     -- For this API,error code 10 is a warning.Anything above 10 is an error
20333         IF l_err_code > 10
20334         THEN
20335 
20336                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20337                 THEN
20338 
20339                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20340                         THEN
20341             pa_interface_utils_pub.map_new_amg_msg
20342               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20343                ,p_msg_attribute    => 'CHANGE'
20344                ,p_resize_flag      => 'Y'
20345                ,p_msg_context      => 'PROJ'
20346                ,p_attribute1       => l_project_in_rec.pm_project_reference
20347                ,p_attribute2       => ''
20348                ,p_attribute3       => ''
20349                ,p_attribute4       => ''
20350                ,p_attribute5       => '');
20351          ELSE
20352             pa_interface_utils_pub.map_new_amg_msg
20353               ( p_old_message_code => l_err_stage
20354                ,p_msg_attribute    => 'CHANGE'
20355                ,p_resize_flag      => 'Y'
20356                ,p_msg_context      => 'PROJ'
20357                ,p_attribute1       => l_project_in_rec.pm_project_reference
20358                ,p_attribute2       => ''
20359                ,p_attribute3       => ''
20360                ,p_attribute4       => ''
20361                ,p_attribute5       => '');
20362                         END IF;
20363 
20364                 END IF;
20365 
20366                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20367                 RAISE FND_API.G_EXC_ERROR;
20368 
20369           ELSIF l_err_code < 0
20370         THEN
20371 
20372                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20373                 THEN
20374             pa_interface_utils_pub.map_new_amg_msg
20375               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20376                ,p_msg_attribute    => 'CHANGE'
20377                ,p_resize_flag      => 'Y'
20378                ,p_msg_context      => 'PROJ'
20379                ,p_attribute1       => l_project_in_rec.pm_project_reference
20380                ,p_attribute2       => ''
20381                ,p_attribute3       => ''
20382                ,p_attribute4       => ''
20383                ,p_attribute5       => '');
20384                 END IF;
20385 
20386                 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20387                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20388         END IF;
20389 
20390 /* Update the project customer information */
20391 /* The code below is also redundant for a new customer
20392              Update Pa_project_customers
20393              Set bill_to_customer_id=l_bill_to_customer_id,
20394                  ship_to_customer_id=l_ship_to_customer_id,
20395                  Bill_To_Address_Id =l_bill_to_address_id,
20396                  Ship_to_address_id =l_ship_to_address_id
20397              where project_id=l_project_id
20398              and customer_id=p_project_in.customer_id;
20399 
20400  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
20401         Delete pa_project_contacts
20402         where Project_Id=l_project_id
20403         and customer_id=p_project_in.customer_id
20404         and Project_Contact_Type_Code='BILLING';
20405 
20406 end if;
20407 
20408 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
20409         Delete pa_project_contacts
20410         where Project_Id=l_project_id
20411         and customer_id=p_project_in.customer_id
20412         and Project_Contact_Type_Code='SHIPPING';
20413 
20414   end if; END of COmmented Code for tracking */
20415 /* Added the call to PA_CUSTOMERS_CONTACTS_PUB.CREATE_PROJECT_CUSTOMER so that
20416 the validations done at form level are also done when customer is created via AMG API */
20417 ----dbms_output.put_line('Before calling CREATE_PROJECT_CUSTOMER');
20418 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
20419 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
20420 
20421 
20422 
20423 -- bug 5554475
20424 
20425    l_ALLOW_INV_USER_RATE_FLAG   := p_customers_in(i).ALLOW_INV_USER_RATE_TYPE_FLAG  ;
20426    l_INV_RATE_DATE		:= p_customers_in(i).INV_RATE_DATE   ;
20427    l_INV_RATE_TYPE		:= p_customers_in(i).INV_RATE_TYPE;
20428    l_INV_CURRENCY_CODE		:= p_customers_in(i).INV_CURRENCY_CODE ;
20429    l_INV_EXCHANGE_RATE		:= p_customers_in(i).INV_EXCHANGE_RATE ;
20430 
20431 
20432 
20433    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
20434            l_ALLOW_INV_USER_RATE_FLAG := 'N';
20435    end if;
20436 
20437 
20438 
20439    if l_INV_RATE_TYPE is not null and l_INV_RATE_TYPE <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20440 
20441            begin
20442            l_USER_INV_RATE_TYPE:=l_INV_RATE_TYPE;
20443            select conversion_type into l_INV_RATE_TYPE
20444            from pa_conversion_types_v
20445            where user_conversion_type=l_USER_INV_RATE_TYPE;
20446            exception when no_data_found then
20447                    l_INV_RATE_TYPE :=null;
20448            end;
20449    end if;
20450 
20451    Select pt.CC_PRVDR_FLAG,pa.multi_currency_billing_flag
20452    into l_cc_prvdr_flag,l_mcb_flag
20453    From pa_project_types pt, pa_projects pa
20454    where pa.project_type=pt.project_type AND
20455          pt.org_id = pa.org_id and
20456 	 pa.project_id=l_project_id;
20457 
20458    If l_INV_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20459        if l_mcb_flag = 'Y' or l_cc_prvdr_flag ='Y' then
20460                OPEN cur_pa_impl;
20461                FETCH cur_pa_impl INTO l_inv_rate_type;
20462                CLOSE cur_pa_impl;
20463        end if;
20464    END if;
20465 
20466    if l_mcb_flag = 'N' and l_cc_prvdr_flag ='N' then
20467         l_inv_rate_type := null;
20468         l_ALLOW_INV_USER_RATE_FLAG := 'N';
20469         l_INV_EXCHANGE_RATE :=null;
20470         l_INV_RATE_DATE :=null;
20471    end if;
20472 
20473    If l_INV_CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20474            l_INV_CURRENCY_CODE :=l_project_rec.PROJECT_CURRENCY_CODE;
20475    END if;
20476 
20477 
20478    If l_INV_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
20479            l_INV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
20480    END if;
20481 
20482    If l_INV_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
20483            l_INV_RATE_DATE := FND_API.G_MISS_DATE;
20484    END if;
20485 
20486 --bug#5554475
20487 
20488 -- Bug 5622539
20489    l_default_top_task_cust_flag := p_customers_in(i).enable_top_task_cust_flag;
20490 
20491 /*
20492    If l_default_top_task_cust_flag is null or
20493       l_default_top_task_cust_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20494       l_default_top_task_cust_flag := 'N';
20495    end if;
20496 */
20497    -- Bug 5622539
20498    If l_default_top_task_cust_flag <> 'Y' then
20499       l_default_top_task_cust_flag := 'N';
20500    end if;
20501 
20502    IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20503        (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
20504             l_default_top_task_cust_flag:='N';
20505    else
20506             l_CUSTOMER_BILL_SPLIT:=null;
20507    end if;
20508 -- Bug 5622539
20509 
20510  PA_CUSTOMERS_CONTACTS_PUB.CREATE_PROJECT_CUSTOMER(
20511   P_API_VERSION              => 1.0
20512 , P_INIT_MSG_LIST            => 'T'
20513 , P_COMMIT                   => 'F'
20514 , P_VALIDATE_ONLY            => 'F'
20515 , P_VALIDATION_LEVEL         => 100
20516 , P_CALLING_MODULE           => 'AMG'
20517 , P_DEBUG_MODE               => 'N'
20518 , P_MAX_MSG_COUNT            => 100
20519 , P_PROJECT_ID               => l_project_id
20520 , P_CUSTOMER_ID              => p_customers_in(i).customer_id
20521 , P_CUSTOMER_NAME            => NULL
20522 , P_CUSTOMER_NUMBER          => NULL
20523 , P_PROJECT_RELATIONSHIP_CODE=> p_customers_in(i).PROJECT_RELATIONSHIP_CODE
20524 , P_CUSTOMER_BILL_SPLIT      => l_CUSTOMER_BILL_SPLIT -- p_customers_in(i).CUSTOMER_BILL_SPLIT: Bug 5622539
20525 , P_BILL_TO_CUSTOMER_ID      => l_bill_to_customer_id
20526 , P_SHIP_TO_CUSTOMER_ID      => l_ship_to_customer_id
20527 , P_BILL_TO_ADDRESS_ID       => l_bill_to_address_id
20528 , P_SHIP_TO_ADDRESS_ID       => l_ship_to_address_id
20529 ,p_bill_to_customer_name => null
20530 ,p_bill_to_customer_number => null
20531 ,p_ship_to_customer_name => null
20532 ,p_ship_to_customer_number  => null
20533 , P_BILL_SITE_NAME           => NULL
20534 , P_WORK_SITE_NAME           => NULL
20535 , P_INV_CURRENCY_CODE        => l_INV_CURRENCY_CODE		--bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE
20536 , P_INV_RATE_TYPE            => l_INV_RATE_TYPE			--bug 5554475
20537 , P_INV_RATE_DATE            => l_INV_RATE_DATE			--bug 5554475
20538 , P_INV_EXCHANGE_RATE        => l_INV_EXCHANGE_RATE		--bug 5554475
20539 , P_ALLOW_USER_RATE_TYPE_FLAG=> l_ALLOW_INV_USER_RATE_FLAG	--bug 5554475
20540 , P_RECEIVER_TASK_ID         => null
20541 , X_CUSTOMER_ID             => l_customer_id
20542 , X_RETURN_STATUS          => x_return_status
20543 , X_MSG_COUNT              => x_msg_count
20544 , X_MSG_DATA               => x_msg_data
20545 --Added for FP.M changes to project billing setup. Tracking bug 3279981
20546 , p_default_top_task_cust_flag => l_default_top_task_cust_flag
20547 --, p_en_top_task_cust_flag      => 'N'   This flag is mandatory only if calling context id forms
20548 );
20549 
20550 --uncommented and modified the below for Bug#5554475
20551 
20552 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
20553       x_msg_count := FND_MSG_PUB.count_msg;
20554       if x_msg_count = 1 then
20555          PA_INTERFACE_UTILS_PUB.get_messages
20556                (p_encoded        => FND_API.G_FALSE,
20557                 p_msg_index      => 1,
20558                 p_msg_count      => x_msg_count,
20559                 p_msg_data       => x_msg_data,
20560                 p_data           => x_msg_data,
20561                 p_msg_index_out  => l_msg_index_out);
20562 
20563       end if;
20564      If x_return_status = FND_API.G_RET_STS_ERROR THEN
20565 	p_project_out.return_status := x_return_status;
20566         RAISE FND_API.G_EXC_ERROR;
20567      ELSE
20568 	p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20569         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20570      END if;
20571 
20572 end if;
20573 
20574 --Bug#5554475
20575 
20576 ----dbms_output.put_line('After calling CREATE_PROJECT_CUSTOMER x_return_status X_MSG_DATA'||x_return_status||'e'||X_MSG_DATA);
20577 
20578   /* call to create_customer_contacts added for tracking bug  by aditi */
20579 pa_customer_info.Create_Customer_Contacts
20580                        ( X_Project_Id                  => l_project_id,
20581                          X_Customer_Id                 => p_customers_in(i).customer_id,
20582                          X_Project_Relation_Code       => p_customers_in(i).project_relationship_code,
20583                          X_Customer_Bill_Split         => p_customers_in(i).customer_bill_split,
20584                          X_Bill_To_Customer_Id         => l_bill_to_customer_id,
20585                          X_Ship_To_Customer_Id         => l_ship_to_customer_id,
20586                          X_Bill_To_Address_Id          => l_bill_to_address_id,
20587                          X_Ship_To_Address_Id          => l_ship_to_address_id,
20588                          X_Bill_To_Contact_Id          => l_bill_to_contact_id,
20589                          X_Ship_To_Contact_Id          => l_ship_to_contact_id,
20590                          X_Inv_Currency_Code           => l_INV_CURRENCY_CODE,  --bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE,
20591                          X_Inv_Rate_Type               => l_INV_RATE_TYPE,	--bug 5554475
20592                          X_Inv_Rate_Date               => l_INV_RATE_DATE,	--bug 5554475
20593                          X_Inv_Exchange_Rate           => l_INV_EXCHANGE_RATE,	--bug 5554475
20594                          X_Allow_Inv_Rate_Type_Fg      => l_ALLOW_INV_USER_RATE_FLAG,	--bug 5554475
20595                          X_Bill_Another_Project_Fg     => l_bill_another_project_flag, -- Added for 4153629
20596                          X_Receiver_Task_Id            => l_receiver_task_id , -- Added for 4153629
20597                          X_User                        => FND_GLOBAL.USER_ID,
20598                          X_Login                       => FND_GLOBAL.LOGIN_ID,
20599                          X_Err_Code                    => l_err_code,
20600                          X_Err_Stage                   => l_err_stage,
20601                          X_Err_Stack                   => l_err_stack
20602                        );
20603 ----dbms_output.put_line('value of l_err_code'||l_err_code);
20604   /* call to create_customer_contacts added for tracking bug  by aditi */
20605 IF l_err_code > 0
20606    THEN
20607 
20608       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20609       THEN
20610 
20611         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20612         THEN
20613                                     pa_interface_utils_pub.map_new_amg_msg
20614                                        ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20615                                         ,p_msg_attribute    => 'CHANGE'
20616                                         ,p_resize_flag      => 'N'
20617                                         ,p_msg_context      => 'PROJ'
20618                                         ,p_attribute1       => l_project_in_rec.pm_project_reference
20619                                         ,p_attribute2       => ''
20620                                         ,p_attribute3       => ''
20621                                         ,p_attribute4       => ''
20622                                         ,p_attribute5       => '');
20623                                 ELSE
20624                                      pa_interface_utils_pub.map_new_amg_msg
20625                                         ( p_old_message_code => l_err_stage
20626                                          ,p_msg_attribute    => 'CHANGE'
20627                                          ,p_resize_flag      => 'N'
20628                                          ,p_msg_context      => 'PROJ'
20629                                          ,p_attribute1       => l_project_in_rec.pm_project_reference
20630                                          ,p_attribute2       => ''
20631                                          ,p_attribute3       => ''
20632                                          ,p_attribute4       => ''
20633                                          ,p_attribute5       => '');
20634         END IF;
20635 
20636       END IF;
20637 
20638       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20639       RAISE FND_API.G_EXC_ERROR;
20640 
20641         ELSIF l_err_code < 0
20642         THEN
20643 
20644       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20645       THEN
20646                             pa_interface_utils_pub.map_new_amg_msg
20647                              ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20648                               ,p_msg_attribute    => 'CHANGE'
20649                               ,p_resize_flag      => 'N'
20650                               ,p_msg_context      => 'PROJ'
20651                               ,p_attribute1       => l_project_in_rec.pm_project_reference
20652                               ,p_attribute2       => ''
20653                               ,p_attribute3       => ''
20654                               ,p_attribute4       => ''
20655                               ,p_attribute5       => '');
20656       END IF;
20657 
20658       p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20659       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20660         END IF;
20661 
20662  END IF ; --IF p_customers_in(i).customer_id IS NOT NULL
20663 Else --If Cur_Customer%NOTFOUND
20664   /* Its its an existing customer */
20665                  CLOSE Cur_Customer;
20666                  /* Code copied and pasted below */
20667 
20668 --dbms_output.put_line('Customer is existing in the databse ');
20669    l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
20670    l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
20671  --added for bug 3911782
20672    l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
20673    l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
20674    /* added these two assignments */
20675    l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
20676    l_customer_bill_split := p_customers_in(i).Customer_Bill_Split;
20677    l_bill_another_project_flag := p_customers_in(i).bill_another_project_flag;
20678    l_receiver_task_id := p_customers_in(i).receiver_task_id;
20679  /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
20680    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)
20681       and  Cur_Customer_rec.bill_to_customer_id is not null  Then
20682        l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
20683         --changes for bug 3911782
20684       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)
20685           and  Cur_Customer_rec.bill_to_address_id is not null  Then
20686           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20687       End if;
20688     Else
20689       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)
20690           and  Cur_Customer_rec.bill_to_address_id is not null  Then
20691           l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20692        End if;
20693       --changes end for bug 3911782
20694    end if;
20695 
20696     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)
20697       and  Cur_Customer_rec.ship_to_customer_id is not null  Then
20698        l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
20699         --changes for bug 3911782
20700       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)
20701           and  Cur_Customer_rec.ship_to_address_id is not null  Then
20702           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20703       End if;
20704      Else
20705       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)
20706           and  Cur_Customer_rec.ship_to_address_id is not null  Then
20707           l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20708       End if;
20709        --changes end for bug 3911782
20710    end if;
20711    /* New code added FOR tracking bug */
20712    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)
20713       and  Cur_Customer_rec.PROJECT_RELATIONSHIP_CODE is not null  Then
20714        l_project_relationship_code := Cur_Customer_rec.PROJECT_RELATIONSHIP_CODE;
20715   end if;
20716 
20717     -- Bug 7255015
20718     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
20719       IF Cur_Customer_rec.Customer_Bill_Split is not null  THEN
20720        l_customer_bill_split := Cur_Customer_rec.Customer_Bill_Split;
20721       END IF;
20722    Else
20723     If (pa_customer_info.revenue_accrued_or_billed(l_project_id)) then
20724         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20725               THEN
20726                pa_utils.add_message
20727                 ( p_app_short_name   => 'PA'-- new message for bug 3326468
20728                  ,p_msg_name    => 'PA_UPD_CUST_NOT_ALLOWED'
20729                  ,p_token1           => 'PROJECT_NAME'
20730                  ,p_value1           => l_project_id
20731                  ,p_token2           => 'CUSTOMER_ID'
20732                  ,p_value2           => p_customers_in(i).customer_id
20733                );
20734              END IF;
20735             RAISE FND_API.G_EXC_ERROR;
20736    END IF;
20737   end if;
20738   --dbms_output..put_line('Value of p_customers_in(i).bill_another_project_flag'||p_customers_in(i).bill_another_project_flag);
20739   --dbms_output..put_line('Value of p_customers_in(i).receiver_task_id'||p_customers_in(i).receiver_task_id);
20740 /* Code added for tracking bug 4153629*/
20741   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)
20742       and  Cur_Customer_rec.bill_another_project_flag is not null  Then
20743        l_bill_another_project_flag := Cur_Customer_rec.bill_another_project_flag;
20744     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
20745       --Bug#5554578
20746           IF Cur_Customer_rec.receiver_task_id is not null  Then
20747 
20748 		 l_receiver_task_id := Cur_Customer_rec.receiver_task_id;
20749 	  END IF;
20750     Else /* Some value of passed for receiver_task_id */
20751       If l_bill_another_project_flag = 'N' Then
20752          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20753               THEN
20754                pa_utils.add_message
20755                 ( p_app_short_name   => 'PA'-- new message for bug 4153629
20756                  ,p_msg_name    => 'PA_UPD_RCVR_TSK_NOT_ALLOWED'
20757                  ,p_token1           => 'PROJECT_NAME'
20758                  ,p_value1           => l_project_id
20759                  ,p_token2           => 'CUSTOMER_ID'
20760                  ,p_value2           => p_customers_in(i).customer_id
20761                );
20762            END IF;
20763             RAISE FND_API.G_EXC_ERROR;
20764        ELSE /* l_bill_another_project_flag = 'Y' */
20765            l_receiver_task_id := p_customers_in(i).receiver_task_id;
20766         PA_CUSTOMER_INFO.CHECK_RECEIVER_PROJ_ENTERABLE
20767          (p_project_id         => l_project_id
20768          ,p_customer_id        => p_customers_in(i).customer_id
20769          ,p_receiver_task_id     => l_receiver_task_id
20770          ,x_bill_another_project_flag   => l_bill_another_project_flag
20771          ,x_return_status              => x_return_status
20772          ,x_error_msg_code            => l_error_msg_code
20773          );
20774          --dbms_output..put_line('value of l_bill_another_project_flag'||l_bill_another_project_flag);
20775         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
20776          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20777                               p_msg_name       => l_error_msg_code
20778                               ,p_token1           => 'PROJECT_NAME'
20779                               ,p_value1           => l_project_id
20780                              ,p_token2           => 'CUSTOMER_ID'
20781                              ,p_value2           => p_customers_in(i).customer_id
20782                  );
20783          RAISE FND_API.G_EXC_ERROR;
20784          END if; -- <l_return_status <> FND_API.G_RET_STS_SUCCESS>
20785       end if; -- l_bill_another_project_flag = 'N'
20786      End If; --p_customers_in(i).receiver_task_id is null
20787   Else /* Some value is passed for p_customers_in(i).bill_another_project_flag*/
20788     /* This means that the status is being flipped */
20789      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
20790       --Bug#5554578
20791           IF Cur_Customer_rec.receiver_task_id is not null  Then
20792 
20793 		 l_receiver_task_id := Cur_Customer_rec.receiver_task_id;
20794 	  END IF;
20795      Else /* Some value of passed for receiver_task_id */
20796        If l_bill_another_project_flag = 'N' Then
20797             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20798               THEN
20799                pa_utils.add_message
20800                 ( p_app_short_name   => 'PA'-- new message for bug 4153629
20801                  ,p_msg_name    => 'PA_UPD_RCVR_TSK_NOT_ALLOWED'
20802                  ,p_token1           => 'PROJECT_NAME'
20803                  ,p_value1           => l_project_id
20804                  ,p_token2           => 'CUSTOMER_ID'
20805                  ,p_value2           => p_customers_in(i).customer_id
20806                );
20807              END IF;
20808             RAISE FND_API.G_EXC_ERROR;
20809        ELSE /* l_bill_another_project_flag = 'Y' */
20810            l_receiver_task_id := p_customers_in(i).receiver_task_id;
20811        PA_CUSTOMER_INFO.CHECK_RECEIVER_PROJ_ENTERABLE
20812          (p_project_id         => l_project_id
20813          ,p_customer_id        => p_customers_in(i).customer_id
20814          ,p_receiver_task_id     => l_receiver_task_id
20815          ,x_bill_another_project_flag   => l_bill_another_project_flag
20816          ,x_return_status              => x_return_status
20817          ,x_error_msg_code            => l_error_msg_code
20818          );
20819          --dbms_output..put_line('value of l_bill_another_project_flag'||l_bill_another_project_flag);
20820 
20821         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
20822          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20823                               p_msg_name       => l_error_msg_code
20824                               ,p_token1           => 'PROJECT_NAME'
20825                               ,p_value1           => l_project_id
20826                              ,p_token2           => 'CUSTOMER_ID'
20827                              ,p_value2           => p_customers_in(i).customer_id
20828                  );
20829          RAISE FND_API.G_EXC_ERROR;
20830          END if; -- <l_return_status <> FND_API.G_RET_STS_SUCCESS>
20831      END IF;/* l_bill_another_project_flag = 'N' */
20832    End If;
20833    End if;
20834 
20835  /* Changed end for tracking bug by aditi */
20836   /* End of Code changesfor tracking bug 4153629*/
20837 
20838   IF(NVL(l_cust_acc_rel_code,'N') ='N' and
20839       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
20840     ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id   <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20841       p_customers_in(i).customer_id <> l_bill_to_customer_id
20842      ) or
20843      (
20844       l_ship_to_customer_id  IS NOT NULL AND l_ship_to_customer_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20845       p_customers_in(i).customer_id <> l_ship_to_customer_id
20846     ))
20847    THEN
20848             pa_interface_utils_pub.map_new_amg_msg
20849               ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
20850                ,p_msg_attribute    => 'CHANGE'
20851                ,p_resize_flag      => 'Y'
20852                ,p_msg_context      => 'PROJ'
20853                ,p_attribute1       => l_project_in_rec.pm_project_reference
20854                ,p_attribute2       => ''
20855                ,p_attribute3       => ''
20856                ,p_attribute4       => ''
20857                ,p_attribute5       => '');
20858            RAISE FND_API.G_EXC_ERROR;
20859    END IF;
20860 /** changes begin for tracking bug by aditi **/
20861 
20862    ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
20863    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)
20864       then
20865 
20866 
20867          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
20868            IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20869               THEN
20870                pa_utils.add_message
20871               ( p_app_short_name   => 'PA'-- existing message for tracking bug
20872                  ,p_msg_name    => 'PA_CONTACT_TYPE_REQD'
20873                  ,p_token1           => 'PROJECT_NAME'
20874                  ,p_value1           => l_project_in_rec.pm_project_reference
20875                  ,p_token2           => 'CUSTOMER_ID'
20876                  ,p_value2           => p_customers_in(i).customer_id
20877                  ,p_token3           => 'CONTACT_ID'
20878                  ,p_value3           => p_customers_in(i).CONTACT_ID
20879               );
20880            END IF;
20881             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20882             p_return_status             := FND_API.G_RET_STS_ERROR;
20883             RAISE FND_API.G_EXC_ERROR;
20884          END IF;
20885      end if;
20886 
20887       If  p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
20888         l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
20889 	l_ship_to_contact_id := NULL; -- Bug 5622539
20890       ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
20891         l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
20892 	l_bill_to_contact_id := NULL; -- Bug 5622539
20893       Else
20894       --null;
20895        l_bill_to_contact_id := NULL;
20896        l_ship_to_contact_id := NULL;
20897       End If;
20898 
20899       /** end of chnages for tracking bug by aditi **/
20900 
20901 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
20902 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
20903 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
20904 
20905      pa_customer_info.get_customer_info( X_project_ID           => l_project_id
20906                                         ,X_Customer_Id          => p_customers_in(i).customer_id
20907                                         ,X_Bill_To_Customer_Id  => l_bill_to_customer_id
20908                                         ,X_Ship_To_Customer_Id  => l_ship_to_customer_id
20909                                         ,X_Bill_To_Address_Id   => l_bill_to_address_id
20910                                         ,X_Ship_To_Address_Id   => l_ship_to_address_id
20911                                         ,X_Bill_To_Contact_Id   => l_bill_to_contact_id
20912                                         ,X_Ship_To_Contact_Id   => l_ship_to_contact_id
20913                                         ,X_Err_Code             => l_err_code
20914                                         ,X_Err_Stage            => l_err_stage
20915                                         ,X_Err_Stack            => l_err_stack
20916                                         ,p_calling_module       => 'AMG' --added for bug#4770535
20917                                        );
20918 
20919 ----dbms_output.put_line('After calling pa_customer_info.get_customer_info'||l_err_code);
20920 
20921 
20922     -- For this API,error code 10 is a warning.Anything above 10 is an error
20923         IF l_err_code > 10
20924         THEN
20925 
20926                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20927                 THEN
20928 
20929                         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20930                         THEN
20931             pa_interface_utils_pub.map_new_amg_msg
20932               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20933                ,p_msg_attribute    => 'CHANGE'
20934                ,p_resize_flag      => 'Y'
20935                ,p_msg_context      => 'PROJ'
20936                ,p_attribute1       => l_project_in_rec.pm_project_reference
20937                ,p_attribute2       => ''
20938                ,p_attribute3       => ''
20939                ,p_attribute4       => ''
20940                ,p_attribute5       => '');
20941          ELSE
20942             pa_interface_utils_pub.map_new_amg_msg
20943               ( p_old_message_code => l_err_stage
20944                ,p_msg_attribute    => 'CHANGE'
20945                ,p_resize_flag      => 'Y'
20946                ,p_msg_context      => 'PROJ'
20947                ,p_attribute1       => l_project_in_rec.pm_project_reference
20948                ,p_attribute2       => ''
20949                ,p_attribute3       => ''
20950                ,p_attribute4       => ''
20951                ,p_attribute5       => '');
20952                         END IF;
20953 
20954                 END IF;
20955 
20956                 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20957                 RAISE FND_API.G_EXC_ERROR;
20958 
20959           ELSIF l_err_code < 0
20960         THEN
20961 
20962                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20963                 THEN
20964             pa_interface_utils_pub.map_new_amg_msg
20965               ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20966                ,p_msg_attribute    => 'CHANGE'
20967                ,p_resize_flag      => 'Y'
20968                ,p_msg_context      => 'PROJ'
20969                ,p_attribute1       => l_project_in_rec.pm_project_reference
20970                ,p_attribute2       => ''
20971                ,p_attribute3       => ''
20972                ,p_attribute4       => ''
20973                ,p_attribute5       => '');
20974                 END IF;
20975 
20976                 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20977                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20978         END IF;
20979 
20980 /* Update the project customer information */
20981 
20982              Update Pa_project_customers
20983              Set bill_to_customer_id=l_bill_to_customer_id,
20984                  ship_to_customer_id=l_ship_to_customer_id,
20985                  Bill_To_Address_Id =l_bill_to_address_id,
20986                  Ship_to_address_id =l_ship_to_address_id
20987              where project_id=l_project_id
20988              and customer_id=p_customers_in(i).customer_id;
20989 
20990 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
20991         Delete pa_project_contacts
20992         where Project_Id=l_project_id
20993         and customer_id=p_customers_in(i).customer_id
20994         and Project_Contact_Type_Code='BILLING';
20995 
20996 end if;
20997 
20998 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
20999         Delete pa_project_contacts
21000         where Project_Id=l_project_id
21001         and customer_id=p_customers_in(i).customer_id
21002         and Project_Contact_Type_Code='SHIPPING';
21003 
21004 end if;
21005 ----dbms_output.put_line('before calling UPDATE_PROJECT_CUSTOMER');
21006 ----dbms_output.put_line('Value of p_customers_in(i).PROJECT_RELATIONSHIP_CODE'||p_customers_in(i).PROJECT_RELATIONSHIP_CODE);
21007  ----dbms_output.put_line('Value of l_bill_to_customer_id after '||l_bill_to_customer_id);
21008 ----dbms_output.put_line('Value of l_bill_to_address_id after '||l_bill_to_address_id);
21009  ----dbms_output.put_line('Value of l_ship_to_address_id after '||l_ship_to_address_id);
21010 ----dbms_output.put_line('Value of l_ship_to_customer_id after '||l_ship_to_customer_id);
21011 
21012 
21013 
21014 -- Start of addition for bug 5554475
21015    l_ALLOW_INV_USER_RATE_FLAG	:= p_customers_in(i).ALLOW_INV_USER_RATE_TYPE_FLAG  ;
21016    l_INV_RATE_DATE		:= p_customers_in(i).INV_RATE_DATE   ;
21017    l_INV_RATE_TYPE		:= p_customers_in(i).INV_RATE_TYPE;
21018    l_INV_CURRENCY_CODE		:= p_customers_in(i).INV_CURRENCY_CODE ;
21019    l_INV_EXCHANGE_RATE		:= p_customers_in(i).INV_EXCHANGE_RATE ;
21020 
21021    If l_ALLOW_INV_USER_RATE_FLAG = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
21022 
21023               l_ALLOW_INV_USER_RATE_FLAG := cur_customer_rec.ALLOW_INV_USER_RATE_TYPE_FLAG;
21024    END if;
21025 
21026    If l_ALLOW_INV_USER_RATE_FLAG IS NULL then
21027            l_ALLOW_INV_USER_RATE_FLAG := 'N';
21028    end if;
21029 
21030     if l_INV_RATE_TYPE is not null and l_INV_RATE_TYPE <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
21031            begin
21032            l_USER_INV_RATE_TYPE:=l_INV_RATE_TYPE;
21033            select conversion_type into l_INV_RATE_TYPE
21034            from pa_conversion_types_v
21035            where user_conversion_type=l_USER_INV_RATE_TYPE;
21036            exception when no_data_found then
21037                    l_INV_RATE_TYPE:=null;
21038            end;
21039    end if;
21040 
21041    If l_INV_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
21042            l_INV_RATE_TYPE := cur_customer_rec.INV_RATE_TYPE;
21043    END if;
21044 
21045    Select pt.CC_PRVDR_FLAG,pa.multi_currency_billing_flag
21046    into l_cc_prvdr_flag,l_mcb_flag
21047    From pa_project_types pt, pa_projects pa
21048    where pa.project_type=pt.project_type
21049    AND pa.org_id = pt.org_id
21050    and pa.project_id=l_project_id;
21051 
21052    if l_mcb_flag = 'N' and l_cc_prvdr_flag ='N' then
21053         l_inv_rate_type := null;
21054         l_ALLOW_INV_USER_RATE_FLAG := 'N';
21055         l_INV_EXCHANGE_RATE :=null;
21056         l_INV_RATE_DATE :=null;
21057    end if;
21058 
21059    If l_INV_CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
21060            l_INV_CURRENCY_CODE := cur_customer_rec.INV_CURRENCY_CODE;
21061    END if;
21062 
21063    If l_INV_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
21064            l_INV_EXCHANGE_RATE := cur_customer_rec.INV_EXCHANGE_RATE;
21065    END if;
21066 
21067    If l_INV_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
21068            l_INV_RATE_DATE := cur_customer_rec.INV_RATE_DATE;
21069    END if;
21070  -- End of addition for bug 5554475
21071 
21072 
21073    --bug 5554578
21074 
21075       l_default_top_task_cust_flag := cur_customer_rec.default_top_task_cust_flag;
21076 
21077    --bug 5554578
21078 
21079    --bug# 5554475
21080    IF l_bill_another_project_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_bill_another_project_flag IS NULL  THEN
21081 	l_bill_another_project_flag := cur_customer_rec.bill_another_project_flag;
21082    END IF;
21083 
21084    IF l_receiver_task_id= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR l_receiver_task_id IS NULL THEN
21085 	l_receiver_task_id := cur_customer_rec.receiver_task_id;
21086    END IF;
21087 
21088    --bug# 5554475
21089 
21090    -- Bug 5622539
21091    If l_default_top_task_cust_flag <> 'Y' then
21092       l_default_top_task_cust_flag := 'N';
21093    end if;
21094 
21095    -- Bug 5622539
21096    IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
21097        (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
21098             l_default_top_task_cust_flag:='N';
21099    else
21100             l_CUSTOMER_BILL_SPLIT:=null;
21101    end if;
21102    -- Bug 5622539
21103 
21104 
21105 /* adding call to PA_CUSTOMERS_CONTACTS_PUB.UPDATE_PROJECT_CUSTOMER */
21106 PA_CUSTOMERS_CONTACTS_PUB.UPDATE_PROJECT_CUSTOMER(
21107 P_API_VERSION              => 1.0
21108 , P_INIT_MSG_LIST            => 'T'
21109 , P_COMMIT                   => 'F'
21110 , P_VALIDATE_ONLY            => 'F'
21111 , P_VALIDATION_LEVEL         => 100
21112 , P_CALLING_MODULE           => 'AMG'
21113 , P_DEBUG_MODE               => 'N'
21114 , P_MAX_MSG_COUNT            => 100
21115 , P_PROJECT_ID               => l_project_id
21116  , P_CUSTOMER_ID              => p_customers_in(i).customer_id
21117 /* , P_PROJECT_RELATIONSHIP_CODE=> p_customers_in(i).PROJECT_RELATIONSHIP_CODE
21118 , P_CUSTOMER_BILL_SPLIT      => p_customers_in(i).CUSTOMER_BILL_SPLIT */
21119 , P_PROJECT_RELATIONSHIP_CODE => l_PROJECT_RELATIONSHIP_CODE
21120  , P_CUSTOMER_BILL_SPLIT         => l_CUSTOMER_BILL_SPLIT
21121 , P_BILL_TO_CUSTOMER_ID      => l_bill_to_customer_id
21122 , P_SHIP_TO_CUSTOMER_ID      => l_ship_to_customer_id
21123 , P_BILL_TO_ADDRESS_ID       => l_bill_to_address_id
21124 , P_SHIP_TO_ADDRESS_ID       => l_ship_to_address_id
21125 ,p_bill_to_customer_name => NULL
21126 ,p_bill_to_customer_number => NULL
21127 ,p_ship_to_customer_name => NULL
21128 ,p_ship_to_customer_number  => NULL
21129 , P_BILL_SITE_NAME           => NULL
21130 , P_WORK_SITE_NAME           => NULL
21131 , P_INV_CURRENCY_CODE        => l_INV_CURRENCY_CODE		--bug  5554475 l_project_rec.PROJECT_CURRENCY_CODE
21132 , P_INV_RATE_TYPE            => l_INV_RATE_TYPE			--bug  5554475
21133 , P_INV_RATE_DATE            => l_INV_RATE_DATE			--bug  5554475
21134 , P_INV_EXCHANGE_RATE        => l_INV_EXCHANGE_RATE		--bug  5554475
21135 , P_ALLOW_USER_RATE_TYPE_FLAG=> l_ALLOW_INV_USER_RATE_FLAG      --bug  5554475
21136 , P_RECEIVER_TASK_ID          => l_receiver_task_id  -- Added for 4153629
21137 , P_BILL_ANOTHER_PROJECT_FLAG  => l_bill_another_project_flag -- Added for 4153629
21138 , P_RECORD_VERSION_NUMBER    => Cur_Customer_rec.RECORD_VERSION_NUMBER
21139 , X_RETURN_STATUS          => x_return_status
21140 , X_MSG_COUNT              => x_msg_count
21141 , X_MSG_DATA               => x_msg_data
21142 --Added for FP.M changes to project billing setup. Tracking bug 3279981
21143 , p_default_top_task_cust_flag => l_default_top_task_cust_flag --'N' bug 5554578
21144 --, p_en_top_task_cust_flag      => 'N'  This flag is mandatory only if calling context id forms
21145 );
21146 
21147 
21148 -- Start of addition for bug  5554475
21149 
21150    if x_return_status <> FND_API.G_RET_STS_SUCCESS then
21151          x_msg_count := FND_MSG_PUB.count_msg;
21152          if x_msg_count = 1 then
21153             PA_INTERFACE_UTILS_PUB.get_messages
21154                   (p_encoded        => FND_API.G_FALSE,
21155                    p_msg_index      => 1,
21156                    p_msg_count      => x_msg_count,
21157                    p_msg_data       => x_msg_data,
21158                    p_data           => x_msg_data,
21159                    p_msg_index_out  => l_msg_index_out);
21160 
21161          end if;
21162          If x_return_status = FND_API.G_RET_STS_ERROR THEN
21163                    p_project_out.return_status := x_return_status;
21164                    RAISE FND_API.G_EXC_ERROR;
21165          else
21166                    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21167                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21168          END if;
21169    end if;
21170 
21171 -- End of addition for bug 5554475
21172 
21173 /* Added Call to pa_customer_info.Create_Customer_Contacts. We only will be adding new contacts.
21174  There are no attrbutes that can be updated in a contact. Hence, the call below will suffice.
21175  It will check if the customer already exists, then Insert into pa_project_customers will
21176  be skipped and data will only be inserted into pa_project_contacts */
21177 
21178   pa_customer_info.Create_Customer_Contacts
21179                        ( X_Project_Id                  => l_project_id,
21180                          X_Customer_Id                 => p_customers_in(i).customer_id,
21181                          X_Project_Relation_Code       => p_customers_in(i).project_relationship_code,
21182                          X_Customer_Bill_Split         => p_customers_in(i).customer_bill_split,
21183                          X_Bill_To_Customer_Id         => l_bill_to_customer_id,
21184                          X_Ship_To_Customer_Id         => l_ship_to_customer_id,
21185                          X_Bill_To_Address_Id          => l_bill_to_address_id,
21186                          X_Ship_To_Address_Id          => l_ship_to_address_id,
21187                          X_Bill_To_Contact_Id          => l_bill_to_contact_id,
21188                          X_Ship_To_Contact_Id          => l_ship_to_contact_id,
21189                          X_Inv_Currency_Code           => l_INV_CURRENCY_CODE,	-- l_project_rec.PROJECT_CURRENCY_CODE bug 5554475
21190                          X_Inv_Rate_Type               => l_INV_RATE_TYPE,	--bug 5554475
21191                          X_Inv_Rate_Date               => l_INV_RATE_DATE,	--bug 5554475
21192                          X_Inv_Exchange_Rate           => l_INV_EXCHANGE_RATE,	--bug 5554475
21193                          X_Allow_Inv_Rate_Type_Fg      => l_ALLOW_INV_USER_RATE_FLAG, --bug 5554475
21194                          X_Bill_Another_Project_Fg     => l_bill_another_project_flag ,-- Added for 4153629,
21195                          X_Receiver_Task_Id            => l_receiver_task_id, --Added for 4153629
21196                          X_User                        => FND_GLOBAL.USER_ID,
21197                          X_Login                       => FND_GLOBAL.LOGIN_ID,
21198                          X_Err_Code                    => l_err_code,
21199                          X_Err_Stage                   => l_err_stage,
21200                          X_Err_Stack                   => l_err_stack
21201                        );
21202 IF l_err_code > 0
21203    THEN
21204 
21205       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
21206       THEN
21207 
21208         IF NOT pa_project_pvt.check_valid_message(l_err_stage)
21209         THEN
21210                                     pa_interface_utils_pub.map_new_amg_msg
21211                                        ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
21212                                         ,p_msg_attribute    => 'CHANGE'
21213                                         ,p_resize_flag      => 'N'
21214                                         ,p_msg_context      => 'PROJ'
21215                                         ,p_attribute1       => l_project_in_rec.pm_project_reference
21216                                         ,p_attribute2       => ''
21217                                         ,p_attribute3       => ''
21218                                         ,p_attribute4       => ''
21219                                         ,p_attribute5       => '');
21220                                 ELSE
21221                                      pa_interface_utils_pub.map_new_amg_msg
21222                                         ( p_old_message_code => l_err_stage
21223                                          ,p_msg_attribute    => 'CHANGE'
21224                                          ,p_resize_flag      => 'N'
21225                                          ,p_msg_context      => 'PROJ'
21226                                          ,p_attribute1       => l_project_in_rec.pm_project_reference
21227                                          ,p_attribute2       => ''
21228                                          ,p_attribute3       => ''
21229                                          ,p_attribute4       => ''
21230                                          ,p_attribute5       => '');
21231         END IF;
21232 
21233       END IF;
21234 
21235       p_project_out.return_status := FND_API.G_RET_STS_ERROR;
21236       RAISE FND_API.G_EXC_ERROR;
21237 
21238         ELSIF l_err_code < 0
21239         THEN
21240 
21241       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
21242       THEN
21243                             pa_interface_utils_pub.map_new_amg_msg
21244                              ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
21245                               ,p_msg_attribute    => 'CHANGE'
21246                               ,p_resize_flag      => 'N'
21247                               ,p_msg_context      => 'PROJ'
21248                               ,p_attribute1       => l_project_in_rec.pm_project_reference
21249                               ,p_attribute2       => ''
21250                               ,p_attribute3       => ''
21251                               ,p_attribute4       => ''
21252                               ,p_attribute5       => '');
21253       END IF;
21254 
21255       p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21256       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21257         END IF;
21258 
21259 END if;  /* is cur_customer%notfound */
21260 i := p_customers_in.next(i);
21261 ----dbms_output.put_line('After processing the customer first record');
21262 END LOOP;
21263 END IF; --  IF p_customers_in.exists(i)
21264 ----dbms_output.put_line('After processing the customer first record OUT OF THE LOOP');
21265 
21266 -- Bug 5622539
21267 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
21268        (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
21269  i := p_customers_in.first;
21270 
21271 IF p_customers_in.exists(i)
21272          THEN
21273         tot_contribution := pa_customer_info.check_proj_tot_contribution(l_project_id,l_valid_proj_flag);
21274         IF l_valid_proj_flag THEN
21275         ----dbms_output.put_line('Value of tot_contribution'||tot_contribution);
21276         IF (tot_contribution <> 0  AND  tot_contribution <> 100) OR
21277         /*(tot_contribution <> 100) OR   Commented the condition for Bug 10416869 */
21278         (tot_contribution > 100 )
21279         theN
21280            /* pa_interface_utils_pub.map_new_amg_msg
21281              ( p_old_message_code => 'PA_TOT_CUST_BILL_SPLIT_INVLD'
21282              ,p_msg_attribute    => 'CHANGE'
21283              ,p_resize_flag      => 'N'
21284              ,p_msg_context      => 'PROJ'
21285              ,p_attribute1       => ''
21286              ,p_attribute2       => ''
21287              ,p_attribute3       => ''
21288              ,p_attribute4       => ''
21289              ,p_attribute5       => ''); */
21290             PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
21291                                ,p_msg_name       => 'PA_TOT_CUST_BILL_SPLIT_INVLD');
21292             p_project_out.return_status := FND_API.G_RET_STS_ERROR;
21293             p_return_status             := FND_API.G_RET_STS_ERROR;
21294             RAISE FND_API.G_EXC_ERROR;
21295          END IF;
21296         END IF;
21297 END IF;
21298 END IF;
21299 
21300 -- Bug 5622539
21301    pa_project_pvt.validate_data(
21302         p_calling_context  => 'UPDATE_PROJECT',
21303         p_project_id       => l_project_id,
21304         x_msg_count        => x_msg_count,
21305         x_msg_data         => x_msg_data,
21306         x_return_status    => x_return_status
21307    );
21308 
21309    if x_return_status <> FND_API.G_RET_STS_SUCCESS then
21310          x_msg_count := FND_MSG_PUB.count_msg;
21311          if x_msg_count = 1 then
21312             PA_INTERFACE_UTILS_PUB.get_messages
21313                   (p_encoded        => FND_API.G_FALSE,
21314                    p_msg_index      => 1,
21315                    p_msg_count      => x_msg_count,
21316                    p_msg_data       => x_msg_data,
21317                    p_data           => x_msg_data,
21318                    p_msg_index_out  => l_msg_index_out);
21319 
21320          end if;
21321          If x_return_status = FND_API.G_RET_STS_ERROR THEN
21322                    p_project_out.return_status := x_return_status;
21323                    RAISE FND_API.G_EXC_ERROR;
21324          else
21325                    p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21326                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21327          END if;
21328    end if;
21329 
21330  /* End of changes by aditi for tracking */
21331 
21332 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value
21333 -- using the local variable instead of cursor variable
21334 
21335 /** Commented out for bug 5116772
21336 Below code added for bug 3279981. Customer at Top Task in FP_M
21337 /*
21338 --IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 commented
21339 IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_old_cust_top_task_flag THEN -- 4188765 added
21340 --Enabling the customer at top task flag. Thus, we need to set the default top task customer
21341      DECLARE
21342           hghst_ctr_cust_id NUMBER;
21343           hghst_ctr_cust_name VARCHAR2(50);
21344           hghst_ctr_cust_num  VARCHAR2(30);
21345 
21346           l_return_status VARCHAR2(10);
21347           l_msg_count     NUMBER := 0;
21348           l_msg_data      VARCHAR2(2000);
21349           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
21350      BEGIN
21351           l_exclude_cust_id_tbl(1) := 0;
21352           --Retrieve the customer to be set as the default top task customer
21353           pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
21354                                            P_API_VERSION            => 1.0
21355                                          , P_INIT_MSG_LIST          => 'T'
21356                                          , P_COMMIT                 => 'F'
21357                                          , P_VALIDATE_ONLY          => 'F'
21358                                          , P_VALIDATION_LEVEL       => 100
21359                                          , P_DEBUG_MODE             => 'N'
21360                                          , p_calling_module         => 'AMG'
21361                                          , p_project_id             => l_project_id
21362                                          , p_exclude_cust_id_tbl    => l_exclude_cust_id_tbl
21363                                          , x_highst_contr_cust_id   => hghst_ctr_cust_id
21364                                          , x_highst_contr_cust_name => hghst_ctr_cust_name
21365                                          , x_highst_contr_cust_num  => hghst_ctr_cust_num
21366                                          , x_return_status          => l_return_status
21367                                          , x_msg_count              => l_msg_count
21368                                          , x_msg_data               => l_msg_data );
21369 
21370           IF hghst_ctr_cust_id IS NOT null THEN
21371                 --This API call will update pa_project_customers and pa_tasks
21372                  pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
21373                                                       P_API_VERSION            => 1.0
21374                                                     , P_INIT_MSG_LIST          => 'T'
21375                                                     , P_COMMIT                 => 'F'
21376                                                     , P_VALIDATE_ONLY          => 'F'
21377                                                     , P_VALIDATION_LEVEL       => 100
21378                                                     , P_DEBUG_MODE             => 'N'
21379                                                     , p_calling_module         => 'AMG'
21380                                                     , p_mode                   => 'ENABLE'
21381                                                     , p_project_id             => l_project_id
21382                                                     , p_def_top_task_cust      => hghst_ctr_cust_id
21383                                                     , p_contr_update_cust      => null
21384                                                     , x_return_status          => l_return_status
21385                                                     , x_msg_count              => l_msg_count
21386                                                     , x_msg_data               => l_msg_data );
21387           END IF;
21388      END ;
21389 END IF;
21390 End Commented out for bug 5116772 **/
21391 
21392 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value in the above code
21393 -- using the local variable instead of cursor variable
21394 
21395 --IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 Commented
21396 /* Commented the Below code for Bug 5622539
21397 IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_old_cust_top_task_flag THEN -- 4188765 Added
21398 --Disabling the customer at top task flag. Thus, we need to set the customer bill split for the project customers
21399      DECLARE
21400           cust_id                PA_PROJECT_CUSTOMERS.customer_id%TYPE;
21401           hghst_ctr_cust_id      NUMBER;
21402           hghst_ctr_cust_name    VARCHAR2(50);
21403           hghst_ctr_cust_num     VARCHAR2(30);
21404           num_customers          NUMBER := 0;
21405           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
21406 
21407           l_return_status VARCHAR2(10);
21408           l_msg_count     NUMBER := 0;
21409           l_msg_data      VARCHAR2(2000);
21410           CURSOR cur_get_def_top_task_cust IS
21411           SELECT customer_id
21412           FROM   pa_project_customers
21413           WHERE  project_id = l_project_id
21414           AND    default_top_task_cust_flag = 'Y' ;
21415      BEGIN
21416          l_exclude_cust_id_tbl(1) := 0;
21417          --Retrieve the customer to be updated with 100% contribution
21418          pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
21419                                            P_API_VERSION            => 1.0
21420                                          , P_INIT_MSG_LIST          => 'T'
21421                                          , P_COMMIT                 => 'F'
21422                                          , P_VALIDATE_ONLY          => 'F'
21423                                          , P_VALIDATION_LEVEL       => 100
21424                                          , P_DEBUG_MODE             => 'N'
21425                                          , p_calling_module         => 'AMG'
21426                                          , p_project_id             => l_project_id
21427                                          , p_exclude_cust_id_tbl    => l_exclude_cust_id_tbl
21428                                          , x_highst_contr_cust_id   => hghst_ctr_cust_id
21429                                          , x_highst_contr_cust_name => hghst_ctr_cust_name
21430                                          , x_highst_contr_cust_num  => hghst_ctr_cust_num
21431                                          , x_return_status          => l_return_status
21432                                          , x_msg_count              => l_msg_count
21433                                          , x_msg_data               => l_msg_data );
21434           OPEN  cur_get_def_top_task_cust;
21435           FETCH cur_get_def_top_task_cust INTO cust_id;
21436           CLOSE cur_get_def_top_task_cust;
21437 
21438           IF hghst_ctr_cust_id IS NOT NULL THEN
21439                 --This API call will update pa_project_customers and pa_tasks
21440                  pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
21441                                                       P_API_VERSION            => 1.0
21442                                                     , P_INIT_MSG_LIST          => 'T'
21443                                                     , P_COMMIT                 => 'F'
21444                                                     , P_VALIDATE_ONLY          => 'F'
21445                                                     , P_VALIDATION_LEVEL       => 100
21446                                                     , P_DEBUG_MODE             => 'N'
21447                                                     , p_calling_module         => 'AMG'
21448                                                     , p_mode                   => 'DISABLE'
21449                                                     , p_project_id             => l_project_id
21450                                                     , p_def_top_task_cust      => cust_id
21451                                                     , p_contr_update_cust      => hghst_ctr_cust_id
21452                                                     , x_return_status          => l_return_status
21453                                                     , x_msg_count              => l_msg_count
21454                                                     , x_msg_data               => l_msg_data );
21455           END IF;
21456      END;
21457 END IF;
21458 --Changes end for Bug 3279981
21459 Changes end for Customer Account Relationships
21460 End of commented code for Bug 5622539 */
21461 
21462 
21463 --Added the following logic for the date effectve funds consumption flag. This is done for federal changes.
21464 --sunkalya:federal changes bug#5511353
21465 
21466 DECLARE
21467 	  hghst_ctr_cust_id      NUMBER;
21468           l_exclude_cust_id_tbl   PA_PLSQL_DATATYPES.NumTabTyp;
21469 	  l_return_status VARCHAR2(10);
21470           l_msg_count     NUMBER := 0;
21471           l_msg_data      VARCHAR2(2000);
21472 
21473 BEGIN
21474 
21475 
21476 
21477 IF (p_project_in.date_eff_funds_flag  ='Y' AND nvl(l_old_date_eff_funds_flag,'N') = 'N') OR
21478    (p_project_in.date_eff_funds_flag  ='N' AND nvl(l_old_date_eff_funds_flag,'N') = 'Y')
21479 
21480 THEN
21481 
21482 	IF p_project_in.date_eff_funds_flag = 'N' THEN  --disabling the federal flag
21483 
21484 		        IF ( 'N' = p_project_in.enable_top_task_customer_flag )  OR
21485 			   ( '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)
21486 			THEN
21487 
21488 				--This api will determine which customer to be made as 100% contributor.
21489 
21490 				PA_CUSTOMERS_CONTACTS_UTILS.Get_Highest_Contr_Fed_Cust(
21491 						   P_API_VERSION            => 1.0
21492 						 , P_INIT_MSG_LIST          => 'T'
21493 						 , P_COMMIT                 => 'F'
21494 						 , P_VALIDATE_ONLY          => 'F'
21495 						 , P_VALIDATION_LEVEL       => 100
21496 						 , P_DEBUG_MODE             => 'N'
21497 						 , p_calling_module         => 'AMG'
21498 						 , p_project_id             => l_project_id
21499 						 , x_highst_contr_cust_id   => hghst_ctr_cust_id
21500 						 , x_return_status          => l_return_status
21501 						 , x_msg_count              => l_msg_count
21502 						 , x_msg_data               => l_msg_data );
21503 
21504 
21505 				IF hghst_ctr_cust_id IS NOT NULL THEN
21506 
21507 					UPDATE pa_project_customers SET customer_bill_split = 100
21508 					WHERE customer_id = hghst_ctr_cust_id AND project_id = l_project_id;
21509 
21510 					UPDATE pa_project_customers SET customer_bill_split = 0
21511 					WHERE customer_id <> hghst_ctr_cust_id AND project_id = l_project_id;
21512 				END IF;
21513 			END IF;
21514 
21515 
21516 	ELSE --enabling the federal flag
21517 
21518 		UPDATE pa_project_customers SET customer_bill_split = null
21519 		WHERE project_id = l_project_id;
21520 
21521 
21522 	END IF;
21523 
21524 END IF;
21525 --End sunkalya:federal changes bug#5511353
21526 END;
21527 
21528 --Sunkalya federal: bug#5511353. This piece of code is added to take care of cases not
21529 --handled by the logic above for bill split manipulations.
21530 --The following will simply null out the bill split if either of the two flags are null.
21531 
21532 IF p_project_in.date_eff_funds_flag ='Y' OR p_project_in.enable_top_task_customer_flag = 'Y' THEN
21533 
21534 		UPDATE pa_project_customers SET customer_bill_split = null
21535 		WHERE project_id = l_project_id;
21536 END IF;
21537 --Sunkalya federal: bug#5511353.
21538 
21539 --Sunkalya federal. Bug#5511353
21540     OPEN  count_cust(l_project_id);
21541     FETCH count_cust INTO l_count_cust;
21542     CLOSE count_cust;
21543 
21544     OPEN  chk_task_level_funding(l_project_id);
21545     FETCH chk_task_level_funding INTO l_chk_task_level_funding;
21546     CLOSE chk_task_level_funding;
21547 
21548 
21549     IF l_count_cust > 1										AND
21550        l_chk_task_level_funding = 'Y'								AND
21551        p_project_in.date_eff_funds_flag = 'N'							AND
21552        l_old_date_eff_funds_flag= 'Y'								AND
21553        (
21554 		p_project_in.enable_top_task_customer_flag = 'N' OR
21555 			(
21556 				nvl(p_project_in.enable_top_task_customer_flag,
21557 				PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
21558 				l_old_cust_top_task_flag = 'N'
21559 			)
21560        )
21561 THEN
21562 		PA_UTILS.ADD_MESSAGE(	 p_app_short_name  =>  'PA'
21563 					,p_msg_name         => 'PA_TASK_FUNDING_EXIST'
21564 				    );
21565 		p_project_out.return_status := FND_API.G_RET_STS_ERROR;
21566 		RAISE  FND_API.G_EXC_ERROR;
21567 
21568 END IF;
21569 --Sunkalya federal. Bug#5511353
21570 
21571 
21572 -- Reset the global variable
21573 
21574    G_ParChildTsk_chks_deferred := 'N';
21575 
21576 -- Need to handle project status changes in a special way
21577 -- We would have updated the project with all the other required
21578 -- information and new check whether it is ok to change to the
21579 -- new status. If not ok, we will rollback all the other changes
21580 -- The reason we are doing all the other updates is because
21581 -- the Handle_project_status_change API and all the other
21582 -- APIs that it uses,fetch the information about the project
21583 -- from the database. Some of the information it would be looking for
21584 -- may well be an input to this API itself (Update_project)
21585 -- Hence,it would be prudent to first insert/update the project/task/
21586 -- key members/class categories and then do the checking for status
21587 -- change. If there is a failure in the status change APIs
21588 -- then we will rollback all the changes
21589 
21590    IF l_project_status_changed = 'Y' THEN
21591 
21592    --Bug 14100051
21593    l_status_changeable := PA_Project_Stus_Utils.allow_status_change(l_project_rec.project_status_code,p_project_in.project_status_code);
21594 
21595    IF  (l_status_changeable='N')  THEN
21596       FND_MESSAGE.SET_NAME('PA', 'PA_STATUS_CANT_CHANGE');
21597       FND_MSG_PUB.ADD;
21598       RAISE  FND_API.G_EXC_ERROR;
21599    END IF;
21600 
21601              Pa_project_stus_utils.Handle_Project_Status_Change
21602                 (x_calling_module          => 'UPDATE_PROJECT'
21603                  ,X_project_id             => l_project_rec.project_id
21604                  ,X_old_proj_status_code   => l_project_rec.project_status_code
21605                  ,X_new_proj_status_code   => p_project_in.project_status_code
21606                  ,X_project_type           => l_project_rec.project_type
21607                  ,X_project_start_date     => l_project_rec.start_date
21608                  ,X_project_end_date       => l_project_rec.completion_date
21609                  ,X_public_sector_flag     => l_project_rec.public_sector_flag
21610                  ,X_attribute_category     => l_project_rec.attribute_category
21611                  ,X_attribute1             => l_project_rec.attribute1
21612                  ,X_attribute2             => l_project_rec.attribute2
21613                  ,X_attribute3             => l_project_rec.attribute3
21614                  ,X_attribute4             => l_project_rec.attribute4
21615                  ,X_attribute5             => l_project_rec.attribute5
21616                  ,X_attribute6             => l_project_rec.attribute6
21617                  ,X_attribute7             => l_project_rec.attribute7
21618                  ,X_attribute8             => l_project_rec.attribute8
21619                  ,X_attribute9             => l_project_rec.attribute9
21620                  ,X_attribute10            => l_project_rec.attribute10
21621                  ,X_pm_product_code        => l_project_rec.pm_product_code
21622                  ,x_init_msg               => 'N'
21623                  ,x_verify_ok_flag         => l_verify_ok_flag
21624                  ,x_wf_enabled_flag        => l_wf_enabled_flag
21625                  ,X_err_stage              => l_err_stage
21626                  ,X_err_stack              => l_err_stack
21627                  ,x_err_msg_count          => l_err_msg_count
21628                  ,x_warnings_only_flag     => l_warnings_only_flag );
21629 
21630           -- If verify not ok then raise error
21631              IF  l_verify_ok_flag = 'N' THEN
21632                  p_project_out.return_status := l_return_status;
21633                  RAISE  FND_API.G_EXC_ERROR;
21634              --Fix for bug#9110781 Starts
21635              ELSIF l_verify_ok_flag = 'Y' THEN
21636              SELECT pa_obj_status_changes_s.NEXTVAL INTO l_obj_status_change_id FROM dual;
21637 
21638                IF (l_debug_mode = 'Y') THEN
21639                     pa_debug.debug('Calling PA_OBJ_STATUS_CHANGES_PKG.INSERT_ROW');
21640                     pa_debug.debug('Project_id '|| l_project_rec.project_id);
21641                     pa_debug.debug('Old project_status_code '|| l_project_rec.project_status_code);
21642                     pa_debug.debug('New project_status_code'|| p_project_in.project_status_code);
21643                END IF;
21644 
21645                OPEN  cur_get_system_status(l_project_rec.project_status_code);
21646                FETCH cur_get_system_status INTO l_old_sys_status;
21647                CLOSE cur_get_system_status;
21648 
21649                OPEN  cur_get_system_status(p_project_in.project_status_code);
21650                FETCH cur_get_system_status INTO l_new_sys_status;
21651                CLOSE cur_get_system_status;
21652 
21653                IF (l_debug_mode = 'Y') THEN
21654                      pa_debug.debug('Old project_sys_status_code '|| l_old_sys_status);
21655                      pa_debug.debug('New project_sys_status_code '|| l_new_sys_status);
21656                END IF;
21657 
21658                 --For inserting status change comment into the status history table
21659                 PA_OBJ_STATUS_CHANGES_PKG.INSERT_ROW
21660                 ( X_ROWID                        => l_rowid,
21661                   X_OBJ_STATUS_CHANGE_ID         => l_obj_status_change_id,
21662                   X_OBJECT_TYPE                  => 'PA_PROJECTS',
21663                   X_OBJECT_ID                    => l_project_rec.project_id,
21664                   X_STATUS_TYPE                  => 'PROJECT',
21665                   X_NEW_PROJECT_STATUS_CODE      => p_project_in.project_status_code,
21666                   X_NEW_PROJECT_SYSTEM_STATUS_CO => l_new_sys_status,
21667                   X_OLD_PROJECT_STATUS_CODE      => l_project_rec.project_status_code,
21668                   X_OLD_PROJECT_SYSTEM_STATUS_CO => l_old_sys_status,
21669                   X_CHANGE_COMMENT               => p_project_in.status_change_comment,
21670                   X_LAST_UPDATED_BY              => fnd_global.user_id,
21671                   X_CREATED_BY                   => fnd_global.user_id,
21672                   X_CREATION_DATE                => sysdate,
21673                   X_LAST_UPDATE_DATE             => sysdate,
21674                   X_LAST_UPDATE_LOGIN            => fnd_global.user_id );
21675 
21676                   IF (l_debug_mode = 'Y') THEN
21677                      pa_debug.debug(' Updated PA_PROJECTS_ALL for status history');
21678                   END IF;
21679 
21680                   --Fix for bug#9110781 Ends
21681 
21682              END IF;
21683              l_statement := 'UPDATE PA_PROJECTS SET ';
21684                 -- special case for update to and from 'CLOSED'
21685              IF l_closing_project = 'Y' THEN
21686                  l_statement := l_statement ||
21687                  ' PROJECT_STATUS_CODE = ' ||
21688                   ''''||p_project_in.project_status_code||''''||','||
21689                  ' CLOSED_DATE = SYSDATE,';
21690              ELSIF  l_reopening_project = 'Y' THEN
21691                  l_statement := l_statement ||
21692        ' PROJECT_STATUS_CODE = ' ||
21693                  ''''||p_project_in.project_status_code||''''||','||
21694                ' CLOSED_DATE = NULL,';
21695              ELSE
21696     l_statement :=   l_statement ||
21697           ' PROJECT_STATUS_CODE = ' ||
21698        ''''||p_project_in.project_status_code||''''||',';
21699              END IF;
21700              IF l_wf_enabled_flag = 'Y' THEN
21701                 l_statement := l_statement ||
21702                 ' WF_STATUS_CODE = '||
21703                 ''''||l_wf_status_code||''''||',';
21704              END IF;
21705 /* Code commented and added for bug#1752494 starts here */
21706 /*
21707              l_statement :=     l_statement ||
21708                                 ' LAST_UPDATE_DATE = '||''''||
21709                                 SYSDATE||''''||',';
21710 */
21711              l_statement :=     l_statement ||
21712                                 ' LAST_UPDATE_DATE = SYSDATE'||',';
21713 /* Code commented and added for bug#1752494 ends here */
21714              l_statement :=   l_statement ||
21715                              ' LAST_UPDATED_BY = '||G_USER_ID||',';
21716 
21717              l_statement :=   l_statement ||
21718                              ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID;
21719 
21720              l_statement :=   l_statement ||
21721                   ' WHERE PROJECT_ID = '|| TO_CHAR(l_project_id);
21722 
21723              l_cursor := dbms_sql.open_cursor;
21724              dbms_sql.parse(l_cursor, l_statement, dbms_sql.native);
21725              l_rows   := dbms_sql.execute(l_cursor);
21726              IF dbms_sql.is_open (l_cursor) THEN
21727                dbms_sql.close_cursor (l_cursor);
21728              END IF;
21729 
21730              /*Stubbed Out Auto Initiate Demand on Project Approval functionality
21731                Bug 3819086
21732 
21733              -- Bug 3611598 If Workflow is not enabled then call the wrapper API
21734              -- which in turn will invoke the concurrent program to Initiate Demand
21735              --If the Project Status is Approved
21736              OPEN c_project_sys_status_code ;
21737              FETCH c_project_sys_status_code INTO l_status_code ;
21738          CLOSE c_project_sys_status_code;
21739 
21740              IF nvl(l_status_code,'-99') = 'APPROVED' THEN
21741 
21742              IF nvl(l_wf_enabled_flag,'N') <> 'Y' THEN
21743                  PA_Actions_Pub.RUN_ACTION_CONC_PROCESS_WRP
21744                     (
21745                        p_project_id => l_project_id
21746                        ,p_project_number => p_project_in.pa_project_number -- 3671408 Added IN Parameter and passing project_number
21747                        ,x_msg_count => l_msg_count
21748                        ,x_msg_data  => l_msg_data
21749                        ,x_return_status  => l_return_status
21750                     );
21751                  IF (l_return_status <>  FND_API.G_RET_STS_SUCCESS) THEN
21752                       RAISE   FND_API.G_EXC_ERROR;
21753                  END IF;
21754              END IF;
21755 
21756              END IF;
21757 
21758              End of Commenting for Bug 3819086*/
21759 
21760              IF l_wf_enabled_flag = 'Y' THEN   -- start the project workflow
21761                 Pa_project_wf.Start_Project_Wf
21762                            (p_project_id    => l_project_id,
21763                             p_err_stack     => l_err_stack,
21764                             p_err_stage     => l_err_stage,
21765                             p_err_code      => l_err_code
21766      );
21767                 IF l_err_code <> 0 THEN
21768        p_project_out.return_status := l_return_status;
21769                    RAISE  FND_API.G_EXC_ERROR;
21770                 END IF;
21771              END IF;
21772        END IF;
21773 
21774 
21775 -- FP-M Bug # 3301192  --update project
21776    --maansari5/18 Delete all the dependency before creating new ones.
21777    --CAUTION: THIS WILL DELETE ALL THE INTRA-DEPENDENCIES IN THE PROJECT EVEN IF THE USER DOES NOT INTEND TO DELETE.
21778         --This has been discussed today may 18 with Sakthi and Hubert. The reason is performance.
21779 IF nvl(p_pm_product_code,'WORKPLAN') <> 'WORKPLAN'    --Should not run in publishing flow.
21780 THEN
21781 --bug 3845240: use l_project_id instead of p_project_out.pa_project_id
21782     IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') AND
21783        l_update_structure_version_id IS NOT NULL AND
21784        l_update_structure_version_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21785        AND NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' -- For performance improvement 14556729
21786     THEN
21787         pa_proj_task_struc_pub.delete_intra_dependency(
21788                   p_element_version_id    => l_update_structure_version_id
21789                   ,x_return_status         => l_return_status );
21790 
21791            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21792            THEN
21793                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21794            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21795            THEN
21796                RAISE FND_API.G_EXC_ERROR;
21797            END IF;
21798     END IF;
21799 
21800    l_d_loop_count := p_tasks_in.first;
21801    WHILE l_d_loop_count IS NOT NULL LOOP
21802       l_task_in_rec := p_tasks_in(l_d_loop_count);
21803 
21804       --Commented by rtarway during FP.M Developement Mapping and Set Financial Changes.
21805       --Since the task Id is available, this function is not needed. This call fails in case of Spilt_mapping structure
21806       --Added by rtarway during FP.M Developement Mapping and Set Financial Changes.
21807       l_d_task_id :=  p_tasks_out(l_d_loop_count).pa_task_id;
21808 
21809 --bug 3845240: use l_project_id instead of p_project_out.pa_project_id
21810       IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
21811 
21812 --maansari5/18 replaced api call CONVERT_PM_TASKREF_TO_ID to CONVERT_PM_TASKREF_TO_ID_all
21813         IF l_d_task_id IS NULL AND l_task_in_rec.pm_task_reference IS NOT NULL AND
21814            l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21815         THEN
21816            PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id
21817                                               ,p_pm_task_reference => l_task_in_rec.pm_task_reference
21818                                               ,p_structure_type => l_structure_type
21819                                               ,p_out_task_id => l_d_task_id
21820                                               ,p_return_status => l_return_status);
21821 
21822            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21823            THEN
21824                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21825            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21826            THEN
21827                RAISE FND_API.G_EXC_ERROR;
21828            END IF;
21829         END IF;
21830 --maansari5/18
21831 
21832       l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_update_structure_version_id
21833                                           ,p_task_id => l_d_task_id);
21834 
21835       pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
21836                                                      ,p_delimeter => l_task_in_rec.pred_delimiter
21837                                                      ,p_task_version_Id => l_d_task_ver_id
21838                                                      ,x_return_status => l_return_status
21839                                                      ,x_msg_count => l_msg_count
21840                                                      ,x_msg_data  => l_msg_data);
21841 
21842           --maansari5/18
21843            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21844            THEN
21845                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21846            ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21847            THEN
21848                RAISE FND_API.G_EXC_ERROR;
21849            END IF;
21850           --maansari5/18
21851 
21852           l_d_task_id := null;
21853     END IF;
21854    l_d_loop_count := p_tasks_in.next(l_d_loop_count);
21855   END LOOP;
21856 END IF; --should not run in publishing flow.
21857 -- 22-DEC-97, jwhite ----------------------------------------------------------
21858 -- Added new OUT-paramter p_workflow_started
21859 
21860 IF (l_wf_enabled_flag = 'Y' )
21861  THEN
21862   p_workflow_started    := 'Y';
21863 END IF;
21864 -- -----------------------------------------------------------------------------------
21865 
21866 
21867 -- ZAKHAN Extensible Attribute Changes
21868 --<Add Project/Task level Extensible Attributes>
21869 
21870     i := p_ext_attr_tbl_in.first;
21871 
21872     IF p_ext_attr_tbl_in.exists(i)
21873     THEN
21874 
21875       -- get the correct structure type
21876       l_structure_type := p_structure_in.structure_type;
21877       IF (l_structure_type IS NULL or l_structure_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
21878         l_structure_type := 'FINANCIAL';
21879       END IF;
21880 
21881       PA_USER_ATTR_PUB.Process_User_Attrs_Data(
21882          p_ext_attr_data_table   => p_ext_attr_tbl_in,
21883          p_project_id            => l_project_id,
21884          p_structure_type        => l_structure_type,
21885          x_failed_row_id_list    => l_failed_row_id_list,
21886          x_errorcode             => l_errorcode,
21887          x_msg_count             => l_msg_count,
21888          x_msg_data              => l_msg_data,
21889          x_return_status         => l_return_status      );
21890 
21891       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21892       THEN
21893          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21894       ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21895       THEN
21896          RAISE FND_API.G_EXC_ERROR;
21897       END IF;
21898    END IF;
21899 --</Add Project/Task level Extensible Attributes>
21900 
21901 --Begin Add by rtarway FP.M changes for Mapping
21902 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
21903 IF (G_PROJECT_SHARING_TYPE = 'SPLIT_MAPPING' AND p_structure_in.structure_type = 'WORKPLAN')
21904 THEN
21905      l_d_loop_count := p_tasks_in.first;
21906      WHILE l_d_loop_count IS NOT NULL LOOP
21907           l_task_in_rec := p_tasks_in(l_d_loop_count);
21908           --No Function Security Check required
21909           IF (
21910                (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 )
21911                OR
21912                (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 )
21913              )
21914           THEN
21915                pa_project_pub.update_mapping
21916                (
21917                    p_api_version            => p_api_version_number
21918                  , p_init_msg_list          => FND_API.G_FALSE
21919                  , p_commit                 => FND_API.G_FALSE--bug 3766967
21920                  , p_debug_mode             => FND_API.G_TRUE
21921                  , p_project_id             => l_project_id
21922                  , p_proj_source_reference  => null
21923                  , p_wkp_structure_version_id => l_structure_version_id --bug#9456024
21924                  --, p_wkp_task_id            => l_tasks_out(i).pa_task_id--Since the tasks are already created , this will have task Ids
21925                  , p_wkp_task_reference     => l_task_in_rec.pm_task_reference
21926                  , px_mapped_task_id        => l_task_in_rec.mapped_task_id------------|One of theses two should be passed
21927                  , p_mapped_task_reference  => l_task_in_rec.mapped_task_reference ----|
21928                  , x_return_status          => l_return_status
21929                  , x_msg_count              => l_msg_count
21930                  , x_msg_data               => l_msg_data
21931                );
21932                IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
21933                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21934                ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
21935                      RAISE FND_API.G_EXC_ERROR;
21936                END IF;
21937           END IF;
21938           l_d_loop_count := p_tasks_in.next(l_d_loop_count);
21939      END LOOP;
21940 END IF;
21941 --Set Financial Task Flag --FP.M Changes
21942 IF (G_PROJECT_SHARING_TYPE='SHARE_PARTIAL' AND p_structure_in.structure_type = 'FINANCIAL' )
21943 THEN
21944      i := p_tasks_in.first();
21945      WHILE i IS NOT NULL LOOP
21946           --Initialize the return status to success
21947           p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
21948           l_task_in_rec := p_tasks_in(i);
21949           --No Function Security Check required
21950           --Get record version number from pa_tasks table
21951           OPEN  c_get_pa_record_version_number ( p_tasks_out(i).task_version_id  , l_project_id);
21952           FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
21953           CLOSE c_get_pa_record_version_number;
21954 
21955           IF
21956           (
21957             l_task_in_rec.financial_task_flag IS NOT NULL
21958             AND
21959             l_task_in_rec.financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21960           )
21961           THEN
21962                PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
21963                (
21964                       p_api_version               => p_api_version_number
21965                     , p_init_msg_list             => FND_API.G_FALSE
21966                     , p_commit                    => FND_API.G_FALSE--bug 3766967
21967                     , p_calling_module            => 'AMG'
21968                     , p_debug_mode                => FND_API.G_TRUE
21969                     , p_task_version_id           => p_tasks_out(i).task_version_id
21970                     , p_checked_flag              => l_task_in_rec.financial_task_flag
21971                     , p_record_version_number     => l_patask_record_version_number
21972                     , p_project_id                => l_project_id -- 4969319 p_project_out.pa_project_id
21973                     , p_published_version_exists  => G_Published_version_exists
21974                     , x_return_status             => l_return_status
21975                     , x_msg_count                 => l_msg_count
21976                     , x_msg_data                  => l_msg_data
21977                );
21978                -- Populating the appropriate values in task out records
21979                p_tasks_out(i).return_status    := l_return_status;
21980 
21981                IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
21982                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21983                ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
21984                      RAISE FND_API.G_EXC_ERROR;
21985                END IF;
21986           END IF;
21987           i := p_tasks_in.next(i);
21988      END LOOP;
21989 END IF;
21990 --End Add by rtarway  FP.M chages for Mapping and Set Financial task
21991 ------ 3435905 : FP M : Deliverables Changes For AMG Start-----------
21992 
21993     -- While updating a project, user can create new deliverables or
21994     -- update existing deliverables. If deliverable_reference exists
21995     -- then update_deliverable will be called else create_deliverables
21996     -- will be called.
21997     -- For actions there is same api for both create and update. Thus
21998     -- same wrapper api will be called for actions in both the cases
21999 
22000     -- 3773373 commented below code, here deliveable security check is done
22001     -- unconditionally, also, local variable usage is wrong
22002     -- if i is not null, assign first deliverable's return status as success
22003     -- and call create_deliverable or update_deliverable api
22004     -- here, create_deliverable and update_deliverable apis are doing deliverable security check
22005     -- so no need to it here .
22006 
22007     /*
22008 
22009        --initialize return status to success
22010        i:=1;
22011       -- 3435905 changed from p_deliverable_out to G_deliverables_out_tbl
22012 
22013        G_deliverables_out_tbl(i).return_status   := FND_API.G_RET_STS_SUCCESS;
22014 
22015        -- Function Security Check
22016        PA_PM_FUNCTION_SECURITY_PUB.check_function_security
22017        (p_api_version_number => p_api_version_number,
22018         p_responsibility_id  => l_resp_id,
22019         p_function_name      => 'PA_DELIVERABLE_EDIT',
22020         p_msg_count          => l_msg_count,
22021         p_msg_data           => l_msg_data,
22022         p_return_status      => l_return_status,
22023         p_function_allowed   => l_function_allowed);
22024 
22025 
22026         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
22027         THEN
22028             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22029         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
22030         THEN
22031             RAISE FND_API.G_EXC_ERROR;
22032         END IF;
22033 
22034         IF l_function_allowed = 'N' THEN
22035            pa_interface_utils_pub.map_new_amg_msg
22036            ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
22037             ,p_msg_attribute    => 'CHANGE'
22038             ,p_resize_flag      => 'Y'
22039             ,p_msg_context      => 'GENERAL'
22040             ,p_attribute1       => ''
22041             ,p_attribute2       => ''
22042             ,p_attribute3       => ''
22043             ,p_attribute4       => ''
22044             ,p_attribute5       => '');
22045 
22046         p_return_status := FND_API.G_RET_STS_ERROR;
22047             RAISE FND_API.G_EXC_ERROR;
22048       END IF;
22049     */
22050     -- 3773373 changed local variable usage from i_dlvr to i
22051     -- if i is not null, set return status to success
22052     i := p_deliverables_in.first();
22053 
22054     IF i IS NOT NULL THEN
22055        -- 3435905 changed from p_deliverable_out to G_deliverables_out_tbl
22056        G_deliverables_out_tbl(i).return_status   := FND_API.G_RET_STS_SUCCESS;
22057     END IF;
22058 
22059     WHILE i IS NOT NULL LOOP
22060 
22061      -- Validate Deliverable reference / id- not null, unique
22062      -- 3858251 Added if condition to check, if user had passed dlvr ref and id ,
22063      --         then call below api to validate reference and id
22064 
22065       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
22066 
22067           Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
22068             ( p_deliverable_reference => p_deliverables_in(i).pm_deliverable_reference
22069             , p_deliverable_id        => p_deliverables_in(i).deliverable_id
22070             , p_project_id            => l_project_id
22071             , p_out_deliverable_id    => l_deliverable_id
22072             , p_return_status         => x_return_status
22073           );
22074 
22075         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR    THEN
22076            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22077         ELSIF x_return_status = FND_API.G_RET_STS_ERROR       THEN
22078                 RAISE FND_API.G_EXC_ERROR;
22079         END IF;
22080 
22081       END IF;
22082 
22083       -- 3858251 end
22084 
22085   --  Call Update_Deliverable in following cases
22086   --      1. If deliverable_id is passed.
22087   --      2. If deliverable_id is not passed and deliverable_reference  is not unique
22088   --  Otherwise call Create_Deliverables
22089 
22090 
22091       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
22092         -- call Update_deliverables
22093            l_dlvr_dml_action := G_UPDATE_MODE;
22094       ELSE
22095          -- Bug 3651538 Moved the call of api from outside IF condition to inside else part
22096          -- as need to check for reference uniqueness only if ID is not passed.
22097          pa_deliverable_utils.is_dlvr_reference_unique (
22098             p_deliverable_reference  =>  p_deliverables_in(i).pm_deliverable_reference
22099           , p_project_id             =>  l_project_id
22100           , x_unique_flag            =>  l_unique_flag
22101           , x_return_status          =>  x_return_status );
22102 
22103          IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR    THEN
22104             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22105          ELSIF x_return_status = FND_API.G_RET_STS_ERROR       THEN
22106             RAISE FND_API.G_EXC_ERROR;
22107          END IF;
22108 
22109           IF ( l_unique_flag = 'N' )THEN
22110        -- call Update_deliverables
22111               l_dlvr_dml_action := G_UPDATE_MODE;
22112           ELSE
22113        -- call Create_Deliverables
22114               l_dlvr_dml_action := G_CREATE_MODE;
22115           END IF; -- deliverable_reference is unique
22116 
22117       END IF; -- non null deliverable_id is passed
22118 
22119       IF (l_dlvr_dml_action = G_CREATE_MODE) THEN
22120 
22121       -- Invoking the Create Deliverable API
22122             Pa_Project_Pub.create_deliverable
22123                 (
22124                     p_api_version            => p_api_version_number
22125                   , p_init_msg_list          => p_init_msg_list
22126                   -- 3735792, passing p_commit as false to next level api calls
22127                   , p_commit                 => FND_API.G_FALSE
22128                   , p_debug_mode             => FND_API.G_TRUE
22129                   , x_return_status          => l_return_status
22130                   , p_deliverable_name       => p_deliverables_in(i).deliverable_name
22131                   , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
22132                   , p_deliverable_type_id    => p_deliverables_in(i).deliverable_type_id
22133                   , p_deliverable_owner_id   => p_deliverables_in(i).deliverable_owner_id
22134                   , p_description            => p_deliverables_in(i).description
22135                   , p_status_code            => p_deliverables_in(i).status_code
22136                   , p_due_date               => p_deliverables_in(i).due_date
22137                   , p_completion_date        => p_deliverables_in(i).completion_date
22138                   , p_progress_weight        => p_deliverables_in(i).progress_weight
22139                   , px_deliverable_id        => l_deliverable_id
22140                   , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
22141                   -- for bug# 3729250
22142                   --  , p_carrying_out_org_id    => p_deliverables_in(i).carrying_out_org_id
22143                   , p_task_id                => p_deliverables_in(i).task_id
22144                   , p_task_source_reference  => p_deliverables_in(i).task_source_reference
22145                   , p_project_id             => l_project_id
22146                   , p_proj_source_reference  => null
22147                   , p_action_in_tbl          => p_deliverable_actions_in
22148                   -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
22149                   , x_action_out_tbl         => G_deliverable_actions_out_tbl
22150               --  , x_action_out_tbl         => p_deliverable_actions_out
22151                   , p_item_id                => p_deliverables_in(i).item_id            -- 3630378 added parameter
22152                   , p_inventory_org_id       => p_deliverables_in(i).inventory_org_id
22153                   , p_quantity               => p_deliverables_in(i).quantity
22154                   , p_uom_code               => p_deliverables_in(i).uom_code
22155                   -- for bug# 3729250
22156                   --  , p_item_description       => p_deliverables_in(i).item_description
22157                   , p_unit_price         => p_deliverables_in(i).unit_price
22158                   , p_unit_number        => p_deliverables_in(i).unit_number
22159                   , p_currency_code      => p_deliverables_in(i).currency_code
22160                   , p_pm_source_code         =>  p_pm_product_code                       /* Bug no. 3651113 */
22161                   , x_msg_count              => l_msg_count
22162                   , x_msg_data               => l_msg_data
22163               );
22164 
22165       ELSE  --  l_dlvr_dml_action = G_UPDATE_MODE
22166 
22167       update_deliverable
22168       (
22169             p_api_version            => p_api_version_number
22170           , p_init_msg_list          => p_init_msg_list
22171           -- 3735792, passing p_commit as false to next level api calls
22172           , p_commit                 => FND_API.G_FALSE
22173           , p_debug_mode             => FND_API.G_TRUE
22174           , x_return_status          => l_return_status
22175           , p_deliverable_name       => p_deliverables_in(i).deliverable_name
22176           , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
22177           , p_deliverable_type_id    => p_deliverables_in(i).deliverable_type_id
22178           , p_deliverable_owner_id   => p_deliverables_in(i).deliverable_owner_id
22179           , p_description            => p_deliverables_in(i).description
22180           , p_status_code            => p_deliverables_in(i).status_code
22181           , p_due_date               => p_deliverables_in(i).due_date
22182           , p_completion_date        => p_deliverables_in(i).completion_date
22183           , p_progress_weight        => p_deliverables_in(i).progress_weight
22184           , px_deliverable_id        => l_deliverable_id
22185           , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
22186           -- for bug# 3729250
22187           --  , p_carrying_out_org_id    => p_deliverables_in(i).carrying_out_org_id
22188           , p_task_id                => p_deliverables_in(i).task_id
22189           , p_task_source_reference  => p_deliverables_in(i).task_source_reference
22190           , p_project_id             => l_project_id
22191           , p_proj_source_reference  => null
22192          -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
22193           , p_action_in_tbl          => p_deliverable_actions_in
22194       --  , x_action_out_tbl         => p_deliverable_actions_out
22195           , x_action_out_tbl         => G_deliverable_actions_out_tbl
22196           , p_item_id                => p_deliverables_in(i).item_id                -- 3630378 added parameter
22197           , p_inventory_org_id       => p_deliverables_in(i).inventory_org_id
22198           , p_quantity               => p_deliverables_in(i).quantity
22199           , p_uom_code               => p_deliverables_in(i).uom_code
22200           -- for bug# 3729250
22201           --  , p_item_description       => p_deliverables_in(i).item_description
22202           , p_unit_price             => p_deliverables_in(i).unit_price
22203           , p_unit_number            => p_deliverables_in(i).unit_number
22204           , p_currency_code          => p_deliverables_in(i).currency_code
22205           , p_pm_source_code         =>  p_pm_product_code                       /* Bug no. 3651113 */
22206           , x_msg_count              => l_msg_count
22207           , x_msg_data               => l_msg_data
22208       );
22209       END IF;
22210 
22211    -- Populating the appropriate values in deliverables out records
22212 
22213       -- 3435905 return status and deliverable id is directly assigned to
22214       -- global deliverable table
22215       -- removed the p_deliverables_out parameter and added global table
22216 
22217 --      p_deliverables_out(i).return_status    := l_return_status;
22218 --      p_deliverables_out(i).deliverable_id   := l_deliverable_id;
22219 
22220       G_deliverables_out_tbl(i).return_status := l_return_status;
22221       G_deliverables_out_tbl(i).deliverable_id := l_deliverable_id;
22222 
22223       IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
22224             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22225       ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
22226             RAISE FND_API.G_EXC_ERROR;
22227       END IF;
22228 
22229       -- 3773373 changed local variable usage from i_dlvr to i
22230       i := p_deliverables_in.next(i);
22231 
22232     END LOOP;
22233 
22234    ------ 3435905 : FP M : Deliverables Changes For AMG END-----------
22235 
22236 
22237         -- Bug # 4582750.
22238 --Note that API  pa_project_structure_utils.lock_unlock_wp_str IS NOT autonomosu transaction.
22239 
22240     IF p_update_mode = 'PA_UPD_WBS_ATTR' AND l_prev_locked_status IS NOT NULL AND l_prev_locked_status = 'N'
22241        and (p_pm_product_code <> 'WORKPLAN') -- Bug # 4758888.
22242        AND p_structure_in.structure_version_id IS NOT NULL
22243        AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22244     THEN
22245 
22246           IF l_debug_mode = 'Y' THEN
22247              pa_debug.g_err_stage := 'Before calling pa_project_structure_utils.lock_unlock_wp_str for UNLOCKING'||
22248              'p_project_in.pa_project_id='||p_project_in.pa_project_id||
22249               '-l_structure_version_id='||l_structure_version_id;
22250               pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
22251           END IF;
22252 
22253           pa_project_structure_utils.lock_unlock_wp_str
22254                   (p_project_id                   => p_project_in.pa_project_id
22255                   ,p_structure_version_id         => p_structure_in.structure_version_id
22256                   ,p_lock_status_code             => 'UNLOCKED'
22257                   ,p_calling_module               => 'PA_UPD_WBS_ATTR'
22258                   ,x_return_status                => l_x_return_status
22259                   ,x_msg_count                    => l_x_msg_count
22260                  ,x_msg_data                     => l_x_msg_data);
22261 
22262          IF l_debug_mode = 'Y' THEN
22263               pa_debug.g_err_stage := 'After  calling pa_project_structure_utils.lock_unlock_wp_str for UNLOCKING'||
22264              'l_x_return_status='||l_x_return_status;
22265               pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
22266          END IF;
22267 
22268          IF l_x_return_status =  FND_API.G_RET_STS_UNEXP_ERROR
22269          THEN
22270              p_project_out.return_status := l_x_return_status;
22271              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
22272 
22273          ELSIF l_x_return_status = FND_API.G_RET_STS_ERROR
22274          THEN
22275              p_project_out.return_status := l_x_return_status;
22276            RAISE  FND_API.G_EXC_ERROR;
22277          END IF;
22278 
22279     END IF;
22280 
22281     -- End Bug # 4582750.
22282 
22283 
22284 
22285    IF (FND_API.to_boolean( p_commit )) OR
22286            l_wf_enabled_flag = 'Y'
22287    THEN
22288       COMMIT WORK;
22289    END IF;
22290    --4218977, rtarway, unset this global variable
22291    if (p_pm_product_code <> 'WORKPLAN') then
22292          G_OP_VALIDATE_FLAG := null;
22293      G_TASK_STR_UPDATE_MODE := null;
22294    end if;
22295 
22296 EXCEPTION
22297 
22298     WHEN FND_API.G_EXC_ERROR THEN
22299 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22300         pa_project_check_pvt.G_index_counter                := 0;
22301 
22302         p_return_status := FND_API.G_RET_STS_ERROR ;
22303         G_ParChildTsk_chks_deferred := 'N';
22304 
22305         ROLLBACK TO Update_project_pub;
22306 
22307         -- Begin Bug # 4582750.
22308 
22309         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22310            AND p_structure_in.structure_version_id IS NOT NULL
22311            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22312         then
22313 
22314                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22315                 (p_project_id                   => p_project_in.pa_project_id
22316                 , p_structure_version_id        => p_structure_in.structure_version_id
22317                 , p_lock_status_code            => 'UNLOCKED'
22318                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22319                 ,x_return_status                => l_x_return_status
22320                 ,x_msg_count                    => l_x_msg_count
22321                 ,x_msg_data                     => l_x_msg_data);
22322 
22323             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22324                     raise;
22325             end if;
22326 
22327         end if;
22328 
22329         -- End Bug # 4582750.
22330 
22331        --4218977, rtarway, unset this global variable
22332        if (p_pm_product_code <> 'WORKPLAN') then
22333          G_OP_VALIDATE_FLAG := null;
22334      G_TASK_STR_UPDATE_MODE := null;
22335        end if;
22336 
22337          -- 4537865
22338          p_workflow_started := NULL ;
22339 
22340         FND_MSG_PUB.Count_And_Get
22341       (   p_count    =>  p_msg_count  ,
22342           p_data    =>  p_msg_data  );
22343 
22344 
22345     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
22346   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
22347         pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22348         pa_project_check_pvt.G_index_counter                := 0;
22349         G_ParChildTsk_chks_deferred := 'N';
22350         ROLLBACK TO Update_project_pub;
22351 
22352     -- Begin Bug # 4582750.
22353         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22354            AND p_structure_in.structure_version_id IS NOT NULL
22355            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22356         then
22357 
22358 
22359             pa_project_structure_utils.lock_unlock_wp_str_autonomous
22360             (p_project_id                   => p_project_in.pa_project_id
22361             , p_structure_version_id        => p_structure_in.structure_version_id
22362             , p_lock_status_code            => 'UNLOCKED'
22363                 ,p_calling_module               => 'PA_UPD_WBS_ATTR'
22364             ,x_return_status                => l_x_return_status
22365             ,x_msg_count                    => l_x_msg_count
22366             ,x_msg_data                     => l_x_msg_data);
22367 
22368             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22369                     raise;
22370             end if;
22371 
22372     end if;
22373 
22374     -- End Bug # 4582750.
22375 
22376        --4218977, rtarway, unset this global variable
22377        if (p_pm_product_code <> 'WORKPLAN') then
22378          G_OP_VALIDATE_FLAG := null;
22379      G_TASK_STR_UPDATE_MODE := null;
22380        end if;
22381 
22382         -- 4537865
22383         p_workflow_started := NULL ;
22384 
22385         FND_MSG_PUB.Count_And_Get
22386       (   p_count    =>  p_msg_count  ,
22387           p_data    =>  p_msg_data  );
22388 
22389      WHEN NO_DATA_FOUND THEN
22390       -- code fix for bug 3579257 : Bug 3627124 starts
22391          --dbms_output.put_line ('in no data found');
22392      p_return_status := FND_API.G_RET_STS_ERROR;
22393      ROLLBACK TO update_project_pub;
22394 
22395 
22396         -- Begin Bug # 4582750.
22397 
22398         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22399            AND p_structure_in.structure_version_id IS NOT NULL
22400            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22401         then
22402 
22403 
22404                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22405                 (p_project_id                   => p_project_in.pa_project_id
22406                 , p_structure_version_id        => p_structure_in.structure_version_id
22407                 , p_lock_status_code            => 'UNLOCKED'
22408                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22409                 ,x_return_status                => l_x_return_status
22410                 ,x_msg_count                    => l_x_msg_count
22411                 ,x_msg_data                     => l_x_msg_data);
22412 
22413             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22414                     raise;
22415             end if;
22416 
22417         end if;
22418 
22419         -- End Bug # 4582750.
22420 
22421          pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22422          pa_project_check_pvt.G_index_counter                := 0;
22423          G_ParChildTsk_chks_deferred := 'N';
22424        --4218977, rtarway, unset this global variable
22425        if (p_pm_product_code <> 'WORKPLAN') then
22426          G_OP_VALIDATE_FLAG := null;
22427      G_TASK_STR_UPDATE_MODE := null;
22428        end if;
22429 
22430         -- 4537865
22431         p_workflow_started := NULL ;
22432 
22433          -- code fix for bug 3579257 : Bug 3627124 ends
22434          pa_interface_utils_pub.map_new_amg_msg
22435            ( p_old_message_code => 'PA_NO_DATA_FOUND'
22436             ,p_msg_attribute    => 'CHANGE'
22437             ,p_resize_flag      => 'N'
22438             ,p_msg_context      => 'GENERAL'
22439             ,p_attribute1       => ''
22440             ,p_attribute2       => ''
22441             ,p_attribute3       => ''
22442             ,p_attribute4       => ''
22443             ,p_attribute5       => '');
22444 
22445     WHEN ROW_ALREADY_LOCKED THEN
22446   ROLLBACK TO update_project_pub;
22447 
22448         -- Begin Bug # 4582750.
22449 
22450         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22451            AND p_structure_in.structure_version_id IS NOT NULL
22452            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22453         then
22454 
22455 
22456                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22457                 (p_project_id                   => p_project_in.pa_project_id
22458                 , p_structure_version_id        => p_structure_in.structure_version_id
22459                 , p_lock_status_code            => 'UNLOCKED'
22460                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22461                 ,x_return_status                => l_x_return_status
22462                 ,x_msg_count                    => l_x_msg_count
22463                 ,x_msg_data                     => l_x_msg_data);
22464 
22465             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22466                     raise;
22467             end if;
22468 
22469         end if;
22470 
22471         -- End Bug # 4582750.
22472 
22473         pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22474         pa_project_check_pvt.G_index_counter                := 0;
22475         G_ParChildTsk_chks_deferred := 'N';
22476 
22477         -- 4537865
22478         p_workflow_started := NULL ;
22479 
22480   p_return_status := FND_API.G_RET_STS_ERROR;
22481       --4218977, rtarway, unset this global variable
22482        if (p_pm_product_code <> 'WORKPLAN') then
22483          G_OP_VALIDATE_FLAG := null;
22484      G_TASK_STR_UPDATE_MODE := null;
22485        end if;
22486   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
22487   THEN
22488       FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_P_AMG');
22489       FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
22490       FND_MESSAGE.SET_TOKEN('ENTITY', G_PROJECT_CODE);
22491       FND_MSG_PUB.ADD;
22492   END IF;
22493 
22494   FND_MSG_PUB.Count_And_Get
22495       (   p_count    =>  p_msg_count  ,
22496           p_data    =>  p_msg_data  );
22497 
22498 
22499     WHEN OTHERS THEN
22500 
22501         ROLLBACK TO Update_project_pub;
22502 
22503         -- Begin Bug # 4582750.
22504 
22505         if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN'))  -- Bug # 4758888.
22506            AND p_structure_in.structure_version_id IS NOT NULL
22507            AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22508         then
22509 
22510 
22511                 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22512                 (p_project_id                   => p_project_in.pa_project_id
22513                 , p_structure_version_id        => p_structure_in.structure_version_id
22514                 , p_lock_status_code            => 'UNLOCKED'
22515                 ,p_calling_module               => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22516                 ,x_return_status                => l_x_return_status
22517                 ,x_msg_count                    => l_x_msg_count
22518                 ,x_msg_data                     => l_x_msg_data);
22519 
22520             if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22521                     raise;
22522             end if;
22523 
22524         end if;
22525 
22526         -- End Bug # 4582750.
22527 
22528         G_ParChildTsk_chks_deferred := 'N';
22529         pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22530         pa_project_check_pvt.G_index_counter                := 0;
22531         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
22532        --4218977, rtarway, unset this global variable
22533        if (p_pm_product_code <> 'WORKPLAN') then
22534          G_OP_VALIDATE_FLAG := null;
22535        end if;
22536         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
22537             FND_MSG_PUB.add_exc_msg
22538         ( p_pkg_name    => G_PKG_NAME
22539         , p_procedure_name  => l_api_name  );
22540         END IF;
22541 
22542         -- 4537865
22543         p_workflow_started := NULL ;
22544 
22545         FND_MSG_PUB.Count_And_Get
22546       (   p_count    =>  p_msg_count  ,
22547           p_data    =>  p_msg_data  );
22548 
22549 
22550 END Update_project;
22551 
22552 --------------------------------------------------------------------------------
22553 --Name:               update_task
22554 --Type:               Procedure
22555 --Description:        This procedure can be used to update a task
22556 --
22557 --
22558 --Called subprograms:
22559 --
22560 --
22561 --
22562 --History:
22563 --    31-JUL-1996        R. Krishnamurthy      Created
22564 --    28-NOV-1996   L. de Werker     Added 11 parameters for descriptive flexfields
22565 --    04-DEC-1996   L. de Werker    Debugged errors + added checking of NULL values.
22566 --    05-DEC-1996   L. de Werker    Added validation of service_type_code
22567 --            Fixed error that occurred when a parent was changed,
22568 --            added change of WBS_level, if appropriate.
22569 --            Added checking for task_completion_date
22570 --            Added WHO columns update in dynamic SQL string
22571 --    06-DEC-1996  L. de Werker    Added locking mechanism
22572 --    10-DEC-1996  L. de Werker    Added parameter p_pa_parent_task_id
22573 --            Added parameter p_address_id
22574 --    03-MAY-2000       Rakesh Raghavan         Fixed Bug # 1289156.
22575 --    15-jul-2003      sramesh        -- Added the code for bug 2982057.
22576 --                                       Changed the logic to populate the long_task_name
22577 --                                       with task_name when the long_task_name is null.
22578 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
22579 --                                        dependency_type and lag days to tasks and create dependencies.
22580 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
22581 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
22582 --          05-APR-2004 Rakesh Raghavan      Progress Management Changes. Bug # 3420093.
22583 --          29-Dec-2005 vkadimes     Bug Number 4689326 and 4689888 Changes are tagged with Bug Numbers.
22584 --          27-jun-11 Rodrigo Bruno  Bug 12660639 - fixed regression, changes
22585 --                                   are tagged with bug number
22586 PROCEDURE update_task
22587 ( p_api_version_number               IN  NUMBER,
22588   p_commit                           IN  VARCHAR2  := FND_API.G_FALSE,
22589   p_init_msg_list                    IN  VARCHAR2  := FND_API.G_FALSE,
22590   p_msg_count                        OUT NOCOPY NUMBER,  /*Added the nocopy check for 4537865 */
22591   p_msg_data                         OUT NOCOPY VARCHAR2,  /*Added the nocopy check for 4537865 */
22592   p_return_status                    OUT NOCOPY VARCHAR2,  /*Added the nocopy check for 4537865 */
22593 --Project Structures
22594   p_ref_task_id                      IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22595 --Project Structures
22596   p_pm_product_code                  IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22597   p_pm_project_reference             IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22598   p_pa_project_id                    IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22599   p_pm_task_reference                IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22600   p_task_number                      IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22601   p_pa_task_id                       IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22602   p_task_name                        IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22603   p_long_task_name                   IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22604   p_task_description                 IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22605   p_task_start_date                  IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22606   p_task_completion_date             IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22607   p_pm_parent_task_reference         IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22608   p_pa_parent_task_id                IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22609   p_address_id                       IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22610   p_carrying_out_organization_id     IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22611   p_service_type_code                IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22612   p_task_manager_person_id           IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22613   p_billable_flag                    IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22614   p_chargeable_flag                  IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22615   p_ready_to_bill_flag               IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22616   p_ready_to_distribute_flag         IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22617   p_limit_to_txn_controls_flag       IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22618   p_labor_bill_rate_org_id           IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22619   p_labor_std_bill_rate_schdl        IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22620   p_labor_schedule_fixed_date        IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22621   p_labor_schedule_discount          IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22622   p_nl_bill_rate_org_id              IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22623   p_nl_std_bill_rate_schdl           IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22624   p_nl_schedule_fixed_date           IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22625   p_nl_schedule_discount             IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22626   p_labor_cost_multiplier_name       IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22627   p_cost_ind_rate_sch_id             IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22628   p_rev_ind_rate_sch_id              IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22629   p_inv_ind_rate_sch_id              IN  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22630   p_cost_ind_sch_fixed_date          IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22631   p_rev_ind_sch_fixed_date           IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22632   p_inv_ind_sch_fixed_date           IN  DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22633   p_labor_sch_type                   IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22634   p_nl_sch_type                      IN  VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22635   p_actual_start_date                IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22636   p_actual_finish_date               IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22637   p_early_start_date                 IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22638   p_early_finish_date                IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22639   p_late_start_date                  IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22640   p_late_finish_date                 IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22641   p_scheduled_start_date             IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22642   p_scheduled_finish_date            IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22643   p_tasks_dff                        IN  VARCHAR2    := 'N', --bug 6153503
22644   p_attribute_category               IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22645   p_attribute1                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22646   p_attribute2                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22647   p_attribute3                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22648   p_attribute4                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22649   p_attribute5                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22650   p_attribute6                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22651   p_attribute7                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22652   p_attribute8                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22653   p_attribute9                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22654   p_attribute10                      IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22655   --bug 6153503
22656   p_attribute11                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22657   p_attribute12                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22658   p_attribute13                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22659   p_attribute14                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22660   p_attribute15                       IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22661   p_allow_cross_charge_flag          IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22662   p_project_rate_date                IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22663   p_project_rate_type                IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22664   p_cc_process_labor_flag            IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22665   p_labor_tp_schedule_id             IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22666   p_labor_tp_fixed_date              IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22667   p_cc_process_nl_flag               IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22668   p_nl_tp_schedule_id                IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22669   p_nl_tp_fixed_date                 IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22670   p_receive_project_invoice_flag     IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22671   p_work_type_id                     IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22672   p_emp_bill_rate_schedule_id        IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22673   p_job_bill_rate_schedule_id        IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22674 --Sakthi  MCB
22675   p_non_lab_std_bill_rt_sch_id       IN  NUMBER       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22676   p_taskfunc_cost_rate_type          IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22677   p_taskfunc_cost_rate_date          IN  DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22678 --Sakthi  MCB
22679 --Project Structures
22680  p_structure_type                    IN VARCHAR2      := 'FINANCIAL',
22681  p_structure_version_id              IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22682  P_OBLIGATION_START_DATE             IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22683  P_OBLIGATION_FINISH_DATE            IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22684  P_ESTIMATED_START_DATE              IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22685  P_ESTIMATED_FINISH_DATE             IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22686  P_BASELINE_START_DATE               IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22687  P_BASELINE_FINISH_DATE              IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22688  P_CLOSED_DATE                       IN DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22689  P_WQ_UOM_CODE                       IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22690  P_WQ_ITEM_CODE                      IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22691  P_STATUS_CODE                       IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22692  P_WF_STATUS_CODE                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22693  P_PM_SOURCE_CODE                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22694  P_PRIORITY_CODE                     IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22695  P_MILESTONE_FLAG                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22696  P_CRITICAL_FLAG                     IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22697  P_INC_PROJ_PROGRESS_FLAG            IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22698  P_LINK_TASK_FLAG                    IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22699  P_CALENDAR_ID                       IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22700  P_PLANNED_EFFORT                    IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22701  P_DURATION                          IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22702  P_PLANNED_WORK_QUANTITY             IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22703  P_TASK_TYPE                         IN NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22704 --Project Structures
22705  p_labor_disc_reason_code            IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22706  p_non_labor_disc_reason_code        IN VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22707 --PA L changes -- bug 2872708  --update_task
22708  p_retirement_cost_flag              VARCHAR2         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22709  p_cint_eligible_flag                VARCHAR2         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22710  p_cint_stop_date                    DATE             := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22711 --end PA L changes -- bug 2872708
22712   p_out_pa_task_id                   OUT NOCOPY NUMBER,  /*Added the nocopy check for 4537865 */
22713  p_out_pm_task_reference              OUT NOCOPY  VARCHAR2,  /*Added the nocopy check for 4537865 */
22714  p_update_task_structure             IN   VARCHAR2,
22715 -- PA L Changes 3010538
22716  p_process_mode                      IN   VARCHAR2 := 'ONLINE'
22717 -- FP-M Bug # 3301192
22718  ,p_pred_string                   VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22719 -- ,p_pred_delimiter                     VARCHAR2    DEFAULT ','
22720  ,p_pred_delimiter               VARCHAR2   :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22721 -- FP M changes begin (venkat)
22722   ,p_base_percent_comp_deriv_code   IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22723   ,p_sch_tool_tsk_type_code     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22724   ,p_constraint_type_code       IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22725   ,p_constraint_date            IN DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
22726   ,p_free_slack             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22727   ,p_total_slack            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22728   ,p_effort_driven_flag         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22729   ,p_level_assignments_flag     IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22730   ,p_invoice_method         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22731   ,p_customer_id            IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22732   ,p_gen_etc_source_code        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22733 -- FP M changes end (venkat)
22734 -- FP M changes start (Mapping )
22735   ,p_financial_task_flag           IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22736   ,p_mapped_task_id                IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22737   ,p_mapped_task_reference         IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22738 -- FP M changes end (Mapping )
22739  ,p_deliverable                 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22740 -- (Begin venkat) Bug #3450684 --------------------------------------------------------------------
22741  ,p_ext_act_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22742  ,p_ext_remain_duration         IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22743  ,p_ext_sch_duration            IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22744 -- (End venkat) Bug #3450684 --------------------------------------------------------------------
22745 
22746 -- Progress Management Changes. Bug # 3420093.
22747   ,p_etc_effort                 IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22748   ,p_percent_complete           IN NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22749 -- Progress Management Changes. Bug # 3420093.
22750   ,p_is_wp_seperate_from_fn     IN   VARCHAR2 := 'X'  -- Added for bug#3451073
22751   ,p_calling_api      IN VARCHAR2 := 'UPDATE_TASK'   -- Added for Bug # 4199694
22752   ,p_op_validate_flag  IN VARCHAR2 := 'Y'
22753   ,p_adj_on_std_inv             IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR     /* Added for 12.2Payroll billing ER 11899223 */
22754 )
22755 
22756 IS
22757 
22758 l_return_status         VARCHAR2(1);
22759 l_msg_count             NUMBER;
22760 l_msg_data              VARCHAR2(2000);
22761 l_out_pa_task_id        NUMBER;
22762 l_out_pm_task_reference VARCHAR2(25);
22763 
22764 l_api_name              CONSTANT      VARCHAR2(30):=  'update_task';
22765 
22766 l_project_id            NUMBER;   --bug 2471668
22767 
22768 --project structures
22769 l_function_allowed      VARCHAR2(1);
22770 l_resp_id               NUMBER := 0;
22771 --project structures
22772 
22773 --Bug 2665656
22774 --l_pm_product_code                      VARCHAR2(30);
22775 --Bug 2665656
22776 
22777 l_update_wbs_flag      VARCHAR2(1);
22778 l_long_task_name    VARCHAR2(240);  /*Added for bug 2982057 */
22779 
22780 --Bug 3106457
22781 --l_structure_version_id   pa_proj_element_versions.element_version_id%TYPE;
22782 --Changed by rtarway for BUG 3919800, the type gives error when assigned a value containg miss num
22783 l_structure_version_id     NUMBER;
22784 
22785 -- FP-M Bug # 3301192
22786    l_d_task_id NUMBER;
22787    l_d_task_ver_id NUMBER;
22788    l_d_struct_ver_id NUMBER;
22789    l_ref_task_id       NUMBER; -- Bug 3705333
22790 l_amg_task_number       VARCHAR2(50);  --bug 3705333
22791  l_amg_segment1       VARCHAR2(25);  --bug 3705333
22792 
22793 --Added by rtarway in FP.M Development
22794 l_task_version_id NUMBER;
22795 l_patask_record_version_number NUMBER;
22796 --Added by rtarway in FP.M Development
22797 
22798 
22799 task_adj_on_std_inv varchar2(1) :='N';
22800 t_adj_on_std_inv  varchar2(2);
22801 
22802 --Bug 3279981. Fetch project information
22803 CURSOR cur_get_proj_billing_info(c_project_id IN NUMBER) IS
22804 SELECT enable_top_task_customer_flag, enable_top_task_inv_mth_flag,
22805        revenue_accrual_method, invoice_method, project_type
22806 FROM   pa_projects_all
22807 WHERE  project_id = c_project_id;
22808 
22809 CURSOR cur_check_proj_cust_exist (c_project_id IN NUMBER , c_customer_id IN NUMBER ) IS
22810 SELECT 'Y'
22811 FROM  pa_project_customers
22812 WHERE project_id = c_project_id
22813 AND   customer_id = c_customer_id ;
22814 
22815 CURSOR cur_get_def_top_task_cust(c_project_id IN NUMBER) IS
22816 SELECT customer_id
22817 FROM  pa_project_customers
22818 WHERE project_id = c_project_id
22819 AND   default_top_task_cust_flag = 'Y';
22820 -- Added This cursor for Bug No 4689326
22821 CURSOR l_cur_customer_name(l_customer_id NUMBER)
22822  IS
22823   SELECT customer_name from PA_CUSTOMERS_V
22824   WHERE customer_id = l_customer_id;
22825 -- Added for bug 5242015
22826 CURSOR cur_top_task_customer_id (l_task_id NUMBER ) IS
22827 SELECT customer_id FROM pa_tasks
22828 WHERE task_id=l_task_id;
22829 
22830  Cursor c_adj_on_std_inv (p_adj_on_std_inv IN VARCHAR2)
22831   Is
22832   Select 'X'
22833   from pa_lookups
22834   where lookup_type='PA_ADJ_ON_STD_INV'
22835   and lookup_code = p_adj_on_std_inv;
22836 
22837 l_proj_top_task_customer_flag VARCHAR2(1);
22838 l_proj_top_task_inv_mth_flag  VARCHAR2(1);
22839 l_proj_revenue_acc_method     VARCHAR2(30);
22840 l_proj_invoice_method         VARCHAR2(30);
22841 l_proj_type                   VARCHAR2(20);
22842 l_invoice_method              VARCHAR2(30) := p_invoice_method;
22843 l_customer_id                 NUMBER       := p_customer_id;
22844 l_dummy                       VARCHAR2(1);
22845 l_published_version_exists    VARCHAR2(1);
22846 l_is_wp_separate_from_fn      VARCHAR2(1);
22847 l_is_wp_versioning_enabled    VARCHAR2(1);
22848 l_structure_type              VARCHAR2(30) ;
22849 l_customer_name		      VARCHAR2(360); -- Added for bug 4689888  -- Modified to VARCHAR2(360) for bug 5856469
22850 l_top_task_customer_id       NUMBER; -- Added for Bug 5242015
22851 /* Added for bug 3705333 */
22852  CURSOR   l_amg_project_csr
22853       (p_pa_project_id pa_projects.project_id%type)
22854    IS
22855    SELECT   segment1
22856    FROM     pa_projects p
22857    WHERE p.project_id = l_project_id ;  --Bug#3747312 p_pa_project_id;
22858    /* changes end  for bug 3705333 */
22859 --Bug 3279981
22860 --rtarway, BUG 3908013
22861 l_attribute_category  VARCHAR2(150);
22862 l_attribute1         VARCHAR2(150);
22863 l_attribute2         VARCHAR2(150);
22864 l_attribute3         VARCHAR2(150);
22865 l_attribute4         VARCHAR2(150);
22866 l_attribute5         VARCHAR2(150);
22867 l_attribute6         VARCHAR2(150);
22868 l_attribute7         VARCHAR2(150);
22869 l_attribute8         VARCHAR2(150);
22870 l_attribute9         VARCHAR2(150);
22871 l_attribute10        VARCHAR2(150);
22872 --rtarway, BUG 3908013
22873 --Added by rtarway for BUG 3919800
22874 
22875 --bug 6153503
22876 l_wp_attribute_category  VARCHAR2(150);
22877 l_wp_attribute1          VARCHAR2(150);
22878 l_wp_attribute2          VARCHAR2(150);
22879 l_wp_attribute3          VARCHAR2(150);
22880 l_wp_attribute4          VARCHAR2(150);
22881 l_wp_attribute5          VARCHAR2(150);
22882 l_wp_attribute6          VARCHAR2(150);
22883 l_wp_attribute7          VARCHAR2(150);
22884 l_wp_attribute8          VARCHAR2(150);
22885 l_wp_attribute9          VARCHAR2(150);
22886 l_wp_attribute10         VARCHAR2(150);
22887 l_wp_attribute11         VARCHAR2(150);
22888 l_wp_attribute12         VARCHAR2(150);
22889 l_wp_attribute13         VARCHAR2(150);
22890 l_wp_attribute14         VARCHAR2(150);
22891 l_wp_attribute15         VARCHAR2(150);
22892 
22893 l_project_sharing_type VARCHAR2(250);
22894 l_pa_task_id           NUMBER;
22895 l_fin_task_flag        VARCHAR2(1);
22896 l_adj_on_std_inv         VARCHAR2(2);
22897 l_parent_task_id varchar2(15);
22898 l_top_task_id varchar2(15);
22899 
22900 --Used to get current_working_version in case of VE case
22901  CURSOR cur_get_working_struc_ver (l_project_id NUMBER,l_structure_type VARCHAR2)
22902    IS
22903      SELECT c.element_version_id
22904        FROM  pa_proj_element_versions c
22905            , pa_structure_types a
22906            , pa_proj_structure_types b
22907            , pa_proj_elem_ver_structure d
22908       WHERE c.project_id = l_project_id
22909         AND a.structure_type_id = b.structure_type_id
22910         AND b.proj_element_id = c.proj_element_id
22911         AND a.structure_type = l_structure_type
22912         AND d.project_id = c.project_id
22913         AND d.element_version_id = c.element_version_id
22914         AND d.status_code = 'STRUCTURE_WORKING';
22915 
22916 --Used to get structure version in VD case
22917  CURSOR cursor_get_struc_ver (l_project_id NUMBER,l_structure_type VARCHAR2)
22918    IS
22919      SELECT c.element_version_id
22920        FROM  pa_proj_element_versions c
22921            , pa_structure_types a
22922            , pa_proj_structure_types b
22923            , pa_proj_elem_ver_structure d
22924       WHERE c.project_id = l_project_id
22925         AND a.structure_type_id = b.structure_type_id
22926         AND b.proj_element_id = c.proj_element_id
22927         AND a.structure_type = l_structure_type
22928         AND d.project_id = c.project_id
22929         AND d.element_version_id = c.element_version_id;
22930 
22931 
22932 CURSOR CUR_GET_FINANCIAL_FLAG (l_project_id NUMBER, l_proj_element_id NUMBER , l_parent_str_ver_id NUMBER)
22933 IS
22934 SELECT FINANCIAL_TASK_FLAG
22935 from pa_proj_element_versions
22936 where project_id = l_project_id
22937 and   proj_element_id = l_proj_element_id
22938 and   parent_structure_version_id = l_parent_str_ver_id;
22939 
22940 --BUG 4106154, rtarway
22941 l_update_pa_tasks VARCHAR2(1);
22942 
22943 l_tasks_out          pa_project_pub.task_out_tbl_type;  --bug 4199694
22944 
22945 --BUG 4081329, rtarway
22946      cursor cur_get_child_task_dates (l_project_id NUMBER, l_task_id NUMBER)
22947      IS   select task_id, start_date, completion_date, parent_task_id from pa_tasks  --Fix for 7427388
22948           where project_id = l_project_id
22949           and   completion_date is null
22950                start with parent_task_id = l_task_id
22951                connect by parent_task_id = prior task_id
22952                and  project_id = l_project_id;
22953 
22954     --Bug#7015228
22955      cursor cur_get_child_task_start_dates (l_project_id NUMBER, l_task_id NUMBER)
22956      IS   select task_id, start_date, completion_date from pa_tasks
22957           where project_id = l_project_id
22958           and   start_date is null
22959                start with parent_task_id = l_task_id
22960                connect by parent_task_id = prior task_id
22961                and  project_id = l_project_id;
22962 
22963      type l_task_id_tbl_type is table of pa_tasks.task_id%type index by binary_integer;
22964      type l_start_date_tbl_type is table of pa_tasks.start_date%type index by binary_integer;
22965      type l_completion_date_tbl_type is table of pa_tasks.completion_date%type index by binary_integer;
22966 
22967      l_task_id_tbl             l_task_id_tbl_type;
22968      l_start_date_tbl          l_start_date_tbl_type;
22969      l_completion_date_tbl     l_completion_date_tbl_type;
22970 
22971      -- Fix for 7427388
22972      type l_parent_task_id_tbl_type is table of pa_tasks.parent_task_id%type index by binary_integer;
22973      l_parent_task_id_tbl      l_parent_task_id_tbl_type;
22974      l_parent_task_date        DATE;
22975 
22976 --BUG 4081329, rtarway
22977      i                         NUMBER; -- added for Huawei bug 13923366
22978 
22979 BEGIN
22980    ----dbms_output.put_line('value of p_task_number in update_task'||p_task_number);
22981 
22982   SAVEPOINT update_task_pub;
22983     -- Begin Bug # 4630058.
22984     -- Initialize the message table if requested.
22985     if FND_API.TO_BOOLEAN(p_init_msg_list) then
22986         FND_MSG_PUB.initialize;
22987     end if;
22988     -- End Bug # 4630058.
22989 
22990   -- 4537865 : Initialize return status to success
22991   p_return_status    := FND_API.G_RET_STS_SUCCESS;
22992 
22993   --BUG 4218977, we need to initialize this variable,
22994   --keeping in mind that it might be set by update_project
22995   --we can use the parameter p_calling_api,
22996   --set this parameter only if p_calling_api is 'UPDATE_TASK'
22997   --this will be passed as UPDATE_PROJECT from update_project API
22998   if p_calling_api <> 'UPDATE_PROJECT' then
22999      G_OP_VALIDATE_FLAG := p_op_validate_flag;
23000   end if;
23001 
23002   IF p_adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
23003      THEN
23004        t_adj_on_std_inv := NULL;
23005      ELSE
23006        t_adj_on_std_inv := p_adj_on_std_inv;
23007    END IF;
23008 
23009    if t_adj_on_std_inv is not null then
23010     OPEN c_adj_on_std_inv(t_adj_on_std_inv);
23011         FETCH c_adj_on_std_inv into task_adj_on_std_inv;
23012         CLOSE c_adj_on_std_inv;
23013 
23014 
23015         if task_adj_on_std_inv <> 'X' then
23016 
23017           PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
23018                                 ,p_msg_name         => 'PA_INVALID_ADJ_ON_STD_INV');
23019 
23020             l_return_status := FND_API.G_RET_STS_ERROR;
23021 
23022             RAISE  FND_API.G_EXC_ERROR;
23023 
23024 
23025 
23026         END IF;
23027 
23028 end if;
23029 
23030  -- rbruno bug 12660639 start
23031 
23032       l_fin_task_flag := NULL;
23033 
23034       OPEN  CUR_GET_FINANCIAL_FLAG (p_pa_project_id, p_pa_task_id,p_structure_version_id);
23035       FETCH CUR_GET_FINANCIAL_FLAG into l_fin_task_flag;
23036       CLOSE CUR_GET_FINANCIAL_FLAG;
23037 
23038    IF l_fin_task_flag = 'Y' THEN
23039 
23040 /* Added for 12.2Payroll billing ER 11899223 */
23041                 l_adj_on_std_inv :=p_adj_on_std_inv;
23042 
23043      if (p_pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
23044    (p_pa_task_id IS NOT NULL) then
23045 
23046    select parent_task_id,top_task_id into l_parent_task_id,l_top_task_id from pa_tasks where task_id = p_pa_task_id and project_id = p_pa_project_id;
23047 
23048    else
23049    select parent_task_id ,top_task_id into l_parent_task_id,l_top_task_id from pa_tasks where task_number = p_task_number and project_id = p_pa_project_id;
23050 
23051   end if;
23052 
23053 
23054 
23055 if l_parent_task_id is not null then
23056 
23057 l_adj_on_std_inv := null;
23058 else
23059 l_adj_on_std_inv := p_adj_on_std_inv;
23060 end if;
23061 
23062 If l_adj_on_std_inv is not null then
23063 
23064 update pa_tasks set adj_on_std_inv =p_adj_on_std_inv where task_id =p_pa_task_id;
23065 end if;
23066 if  p_pa_task_Id = l_top_task_id
23067 then
23068 
23069 update pa_tasks set adj_on_std_inv = p_adj_on_std_inv where top_task_id = p_pa_task_Id;
23070 end if;
23071 
23072 
23073   /* Added for 12.2Payroll billing ER 11899223 */
23074 
23075 END IF;
23076 -- rbruno bug 12660639 end
23077   --bug 3880482
23078       PA_PROJECT_PVT.Convert_pm_projref_to_id
23079         (        p_pm_project_reference =>      p_pm_project_reference
23080                  ,  p_pa_project_id     =>      p_pa_project_id
23081                  ,  p_out_project_id    =>      l_project_id
23082                  ,  p_return_status     =>      l_return_status
23083         );
23084 
23085 
23086       IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
23087 
23088               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
23089       ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
23090               RAISE  FND_API.G_EXC_ERROR;
23091       END IF;
23092 
23093      PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id;  --bug 2471668 ( in the project context )
23094   --end bug 3880482
23095      --Added by rtarway for BUG 3919800
23096      l_structure_type := p_structure_type;
23097      --Get task id
23098      --Added by rtarway, for BUG 3919800, this is done as we require to do validation in share_partial case beforehand
23099      -- storing p_pa_task_id in local variable will make it consistent for other structures also.
23100       if (p_pa_task_id is not null and p_pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
23101          then l_pa_task_id := p_pa_task_id;
23102       end if;
23103       --Also Validate task id
23104       PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
23105       (
23106            p_pa_project_id        => l_project_id    ,
23107            p_structure_type       => l_structure_type,
23108            p_pa_task_id           => p_pa_task_id ,
23109            p_pm_task_reference    => p_pm_task_reference ,
23110            p_out_task_id          => l_pa_task_id,
23111            p_return_status        => l_return_status
23112       );
23113       IF l_return_status <> 'S'
23114       THEN
23115           RAISE FND_API.G_EXC_ERROR;
23116       END IF;
23117 
23118        --bug 2471668.
23119        --We need to call this API here toget the corrct project id. This is also
23120        --called from the private API. But I discussed with Sakthi and he is ok to call this
23121        --twice once here and second time in private API. The idea is to make the advanced security changes
23122        --only in public APIs.
23123 
23124  -- Initialize local variables
23125  -- Bug#3747312
23126  l_published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
23127  l_is_wp_separate_from_fn   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
23128  l_is_wp_versioning_enabled := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
23129 
23130   -- In case of shared structure p_structure_type should be passed as
23131   -- FINANCIAL and this should be the first validation.
23132   IF (p_structure_type is null OR p_structure_type = 'WORKPLAN') THEN
23133        IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
23134             NVL( l_is_wp_separate_from_fn,'N') = 'N'  --bug 2876703 update_task
23135        THEN
23136              IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
23137              THEN
23138                  pa_interface_utils_pub.map_new_amg_msg
23139                    ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
23140                        ,p_msg_attribute    => 'CHANGE'
23141                        ,p_resize_flag      => 'N'
23142                        ,p_msg_context      => 'GENERAL'
23143                        ,p_attribute1       => ''
23144                        ,p_attribute2       => ''
23145                        ,p_attribute3       => ''
23146                        ,p_attribute4       => ''
23147                        ,p_attribute5       => '');
23148              END IF;
23149              RAISE FND_API.G_EXC_ERROR;
23150        END IF;
23151   END IF ;
23152    -- Bug#3747312
23153 
23154      --end of bug 2471668
23155 
23156 /*    --bug 2665656
23157     IF NVL( p_pm_product_code, 'WORKPLAN' ) = 'WORKPLAN'
23158     THEN
23159        l_pm_product_code := null;
23160     END IF;
23161     --bug 2665656
23162 */
23163 
23164   -- Bug#3747312
23165   -- Derive the structure type based on whether its shared case
23166   -- and WP versioning is enabled or not and whether published
23167   -- version exists.
23168 
23169   -- BUG 3919800, rtarway, Assign l_structure_version_id value of p_structure_version_id
23170      l_structure_version_id := p_structure_version_id;
23171 
23172 
23173   IF nvl(l_published_version_exists,'N') = 'Y'
23174       AND nvl(l_is_wp_separate_from_fn,'N') = 'N'
23175       AND nvl(l_is_wp_versioning_enabled,'N') = 'Y'
23176       AND p_structure_type = 'FINANCIAL'
23177       AND p_pm_product_code <> 'WORKPLAN'
23178    THEN
23179        --Change the flow to WORKPLAN
23180        l_structure_type := 'WORKPLAN';
23181        l_update_pa_tasks := 'Y'; --BUG 4106154, rtarway
23182 
23183       --BUG 3919800, in case of workplan, we must derive structure version id and pass it further.
23184       OPEN  cur_get_working_struc_ver(l_project_id, l_structure_type);
23185       FETCH cur_get_working_struc_ver into l_structure_version_id;
23186       CLOSE cur_get_working_struc_ver ;
23187    ELSE
23188        l_structure_type := p_structure_type;
23189    END IF;
23190    -- Bug#3747312
23191 
23192  --Added by rtarway for BUG 3919800
23193  --Validate for task and change the structure type, if structure type is shared partial and workplan task is being updated.
23194   --1. get the structure sharing code
23195   l_project_sharing_type := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
23196   IF (l_project_sharing_type='SHARE_PARTIAL' )
23197   THEN
23198           --3. get the structure version id
23199                IF (l_structure_version_id is null or l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
23200                THEN
23201                    --1.VE case, there will be only one working workplan version, get the structure version id for that version
23202                      IF l_is_wp_versioning_enabled = 'Y'
23203                      THEN
23204                          OPEN  cur_get_working_struc_ver(l_project_id, l_structure_type);
23205                          FETCH cur_get_working_struc_ver into l_structure_version_id;
23206                          CLOSE cur_get_working_struc_ver ;
23207 
23208                    --2.VD case, there will be only one version, get that version
23209                      ELSE
23210                          OPEN  cursor_get_struc_ver(l_project_id, l_structure_type);
23211                          FETCH cursor_get_struc_ver into l_structure_version_id;
23212                          CLOSE cursor_get_struc_ver;
23213                      END IF;
23214                END IF;
23215           --4. Get the existing financial_task_flag
23216           OPEN  CUR_GET_FINANCIAL_FLAG (l_project_id, l_pa_task_id,l_structure_version_id);
23217           FETCH CUR_GET_FINANCIAL_FLAG into l_fin_task_flag;
23218           CLOSE CUR_GET_FINANCIAL_FLAG;
23219           --5. if existing financial task flag is 'N', change the structure type to 'WORKPLAN'
23220           IF l_fin_task_flag = 'N'
23221           THEN
23222                l_structure_type := 'WORKPLAN';
23223           END IF;
23224   END IF;
23225 --End Added by rtarway for BUG 3919800
23226 
23227 /* Code added for the bug 2982057 starts */
23228  IF p_long_task_name IS NULL OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
23229    l_long_task_name := p_task_name;
23230  ELSE
23231    l_long_task_name := p_long_task_name;
23232  END IF;
23233 
23234  /* Code addition for bug 2982057 ends */
23235  /* CHANGES START FOR BUG 3705333*/
23236 
23237  OPEN l_amg_project_csr(l_project_id ); --Bug#3747312
23238  FETCH l_amg_project_csr INTO l_amg_segment1;
23239  CLOSE l_amg_project_csr;
23240 
23241  --Project Structures
23242      IF p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
23243      THEN
23244         l_ref_task_id :=  null;
23245      ELSE
23246         l_ref_task_id :=  p_ref_task_id;
23247      END IF;
23248   --Project Structures
23249 
23250  IF l_ref_task_id is null THEN
23251 
23252           IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
23253 
23254           l_ref_task_id :=  p_pa_parent_task_id;
23255     --  --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
23256 
23257           ELSIF (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
23258 
23259             --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
23260             --OPEN l_task_ref_to_id_csr(l_project_id,p_pm_parent_task_reference);
23261             --FETCH l_task_ref_to_id_csr INTO l_ref_task_id;
23262             PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
23263             (
23264                 p_pa_project_id        => l_project_id    ,
23265                 p_structure_type       => l_structure_type, --Bug#3747312 p_structure_type,
23266                 p_pm_task_reference    => p_pm_parent_task_reference ,
23267                 p_out_task_id          => l_ref_task_id,
23268                 p_return_status        => l_return_status
23269             );
23270 
23271             --changed by rtarway for BUG 3661788
23272             --IF l_task_ref_to_id_csr%NOTFOUND
23273             IF (l_return_status <> 'S')
23274             THEN
23275                 --rtarway , 3661788, comment close command
23276                 --CLOSE l_task_ref_to_id_csr;
23277                 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
23278                 THEN
23279                  l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
23280                                           (p_task_number => p_task_name
23281                                           ,p_task_reference => p_pm_task_reference
23282                                           ,p_task_id => '');
23283 
23284                          pa_interface_utils_pub.map_new_amg_msg
23285                           ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
23286                            ,p_msg_attribute    => 'CHANGE'
23287                            ,p_resize_flag      => 'N'
23288                            ,p_msg_context      => 'TASK'
23289                            ,p_attribute1       => l_amg_segment1
23290                            ,p_attribute2       => l_amg_task_number
23291                            ,p_attribute3       => ''
23292                            ,p_attribute4       => ''
23293                            ,p_attribute5       => '');
23294                 END IF;
23295                 RAISE  FND_API.G_EXC_ERROR;
23296              END IF;
23297             --rtarway , 3661788, comment close command
23298             --CLOSE l_task_ref_to_id_csr;
23299            END IF;
23300        END IF;
23301  -- -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
23302 /* END OF CHANGES FOR BUG 3705333 */
23303 --Bug 3279981 Review : Shifted this code before the update_one_task call
23304 OPEN  cur_get_proj_billing_info(l_project_id);
23305 FETCH cur_get_proj_billing_info INTO l_proj_top_task_customer_flag, l_proj_top_task_inv_mth_flag,
23306                                      l_proj_revenue_acc_method, l_proj_invoice_method, l_proj_type;
23307 CLOSE cur_get_proj_billing_info;
23308 
23309 IF 'Y' = l_proj_top_task_inv_mth_flag THEN
23310      IF ( p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
23311      --changed p_pa_task_id to l_pa_task_id, 3919800, rtarway
23312      AND  PA_BILLING_CORE.Update_Top_Task_Invoice_Method( l_project_id, l_pa_task_id ) = 'Y' THEN
23313           IF pa_project_pvt.check_valid_dist_rule
23314                   ( l_proj_type,
23315                     l_proj_revenue_acc_method||'/'||p_invoice_method,
23316                     l_proj_top_task_inv_mth_flag ) = 'N'   THEN
23317                     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
23318                         pa_interface_utils_pub.map_new_amg_msg
23319                           ( p_old_message_code => 'PA_INV_TASK_INVOICE_METHOD' -- for bug# 4156036
23320                            ,p_msg_attribute    => 'CHANGE'
23321                            ,p_resize_flag      => 'N'
23322                            ,p_msg_context      => 'TASK'
23323                            ,p_attribute1       => p_invoice_method
23324                            ,p_attribute2       => ''
23325                            ,p_attribute3       => ''
23326                            ,p_attribute4       => ''
23327                            ,p_attribute5       => '');
23328                     END IF;
23329                     RAISE  FND_API.G_EXC_ERROR;
23330           END IF;
23331 
23332           -- Function Security Check
23333           PA_PM_FUNCTION_SECURITY_PUB.check_function_security
23334           ( p_api_version_number => p_api_version_number,
23335             p_responsibility_id  => l_resp_id,
23336             p_function_name      => 'PA_PAXPREPR_TASK_INV_MTH',
23337             p_msg_count          => l_msg_count,
23338             p_msg_data           => l_msg_data,
23339             p_return_status      => l_return_status,
23340             p_function_allowed   => l_function_allowed);
23341           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23342                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23343           ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23344                RAISE FND_API.G_EXC_ERROR;
23345           END IF;
23346 
23347           IF l_function_allowed = 'N' THEN
23348                pa_interface_utils_pub.map_new_amg_msg
23349                 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
23350                  ,p_msg_attribute    => 'CHANGE'
23351                  ,p_resize_flag      => 'Y'
23352                  ,p_msg_context      => 'GENERAL'
23353                  ,p_attribute1       => ''
23354                  ,p_attribute2       => ''
23355                  ,p_attribute3       => ''
23356                  ,p_attribute4       => ''
23357                  ,p_attribute5       => '');
23358                RAISE FND_API.G_EXC_ERROR;
23359           END IF;
23360 
23361           l_invoice_method := p_invoice_method;
23362      ELSE
23363           --IF p_invoice_method IS NULL
23364 
23365            --l_invoice_method := l_proj_invoice_method  commented for bug#5583147 ;
23366 
23367 	   /* Start of Addition for bug#5583147 */
23368            --If p_invoice_method passed is null then
23369            --Check if the task has already an invoice method if so keep the same
23370            --Else get it from project invoice method.
23371            BEGIN
23372                      SELECT invoice_method
23373                      INTO   l_invoice_method
23374                      FROM   pa_tasks
23375                      WHERE project_id = l_project_id
23376                      and task_id = l_pa_task_id
23377                      and l_invoice_method is not null;
23378 
23379           EXCEPTION WHEN NO_DATA_FOUND THEN
23380 		l_invoice_method := l_proj_invoice_method;
23381           END;
23382          /* End of Addition for bug#5583147 */
23383 
23384      END IF;
23385 ELSE
23386      --IF 'N' = l_proj_top_task_inv_mth_flag
23387      l_invoice_method := NULL;
23388 END IF;
23389 
23390 -- Added for bug 5242015
23391 OPEN cur_top_task_customer_id(l_pa_task_id);
23392 FETCH cur_top_task_customer_id INTO l_top_task_customer_id;
23393 CLOSE cur_top_task_customer_id;
23394 
23395 IF 'Y' = l_proj_top_task_customer_flag THEN
23396   IF (p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
23397       l_top_task_customer_id <> p_customer_id THEN -- Added for bug 5242015
23398           -- Changes are Done for Bug 4689888
23399           --changed p_pa_task_id to l_pa_task_id, 3919800, rtarway
23400     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
23401           OPEN  cur_check_proj_cust_exist(l_project_id,p_customer_id);
23402           FETCH cur_check_proj_cust_exist INTO l_dummy;
23403       IF cur_check_proj_cust_exist%NOTFOUND THEN
23404         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
23405           /* Commented  This code For Bug 4689326
23406               pa_interface_utils_pub.map_new_amg_msg
23407                      ( p_old_message_code => 'PA_INVALID_TASK_CUSTOMER'
23408                       ,p_msg_attribute    => 'CHANGE'
23409                       ,p_resize_flag      => 'N'
23410                       ,p_msg_context      => 'TASK'
23411                       ,p_attribute1       => p_customer_id
23412                       ,p_attribute2       => ''
23413                       ,p_attribute3       => ''
23414                       ,p_attribute4       => ''
23415                       ,p_attribute5       => '');*/
23416         -- Added this code For Bug no 4689326
23417           OPEN l_cur_customer_name(p_customer_id);
23418           FETCH l_cur_customer_name INTO l_customer_name;
23419           CLOSE l_cur_customer_name;
23420           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
23421                   pa_interface_utils_pub.map_new_amg_msg
23422                      ( p_old_message_code => 'PA_CUSTOMER_NOT_EXIST'
23423                       ,p_msg_attribute    => 'CHANGE'
23424                       ,p_resize_flag      => 'N'
23425                       ,p_msg_context      => 'GENERAL'
23426                       ,p_attribute1       => ''
23427                       ,p_attribute2       => ''
23428                       ,p_attribute3       => ''
23429                       ,p_attribute4       => ''
23430                       ,p_attribute5       => '');
23431           ELSE
23432                         PA_UTILS.ADD_MESSAGE
23433                               (p_app_short_name => 'PA',
23434                                 p_msg_name       => 'PA_INVALID_PROJECT_CUSTOMER',
23435                                 p_token1         => 'CUSTOMER_NAME',
23436                                 p_value1         =>  l_customer_name
23437                                 );
23438           END IF;
23439         -- End of Bug 4689326
23440         END IF;
23441                CLOSE cur_check_proj_cust_exist;
23442                RAISE  FND_API.G_EXC_ERROR;
23443       ELSE
23444                CLOSE cur_check_proj_cust_exist;
23445 
23446                -- Function Security Check
23447                PA_PM_FUNCTION_SECURITY_PUB.check_function_security
23448                ( p_api_version_number => p_api_version_number,
23449                  p_responsibility_id  => l_resp_id,
23450                  p_function_name      => 'PA_PAXPREPR_TASK_CUST',
23451                  p_msg_count          => l_msg_count,
23452                  p_msg_data           => l_msg_data,
23453                  p_return_status      => l_return_status,
23454                  p_function_allowed   => l_function_allowed);
23455                IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23456                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23457                ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23458                     RAISE FND_API.G_EXC_ERROR;
23459                END IF;
23460 
23461                IF l_function_allowed = 'N' THEN
23462                     pa_interface_utils_pub.map_new_amg_msg
23463                      ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
23464                       ,p_msg_attribute    => 'CHANGE'
23465                       ,p_resize_flag      => 'Y'
23466                       ,p_msg_context      => 'GENERAL'
23467                       ,p_attribute1       => ''
23468                       ,p_attribute2       => ''
23469                       ,p_attribute3       => ''
23470                       ,p_attribute4       => ''
23471                       ,p_attribute5       => '');
23472                     RAISE FND_API.G_EXC_ERROR;
23473                END IF;
23474 
23475                l_customer_id := p_customer_id;
23476       END IF; --IF cur_check_proj_cust_exist%NOTFOUND
23477     ELSE
23478          pa_interface_utils_pub.map_new_amg_msg
23479                      ( p_old_message_code => 'PA_NO_CHNG_CUST_ALLOWED'
23480                       ,p_msg_attribute    => 'CHANGE'
23481                       ,p_resize_flag      => 'Y'
23482                       ,p_msg_context      => 'GENERAL'
23483                       ,p_attribute1       => ''
23484                       ,p_attribute2       => ''
23485                       ,p_attribute3       => ''
23486                       ,p_attribute4       => ''
23487                       ,p_attribute5       => '');
23488                     RAISE FND_API.G_EXC_ERROR;
23489     END IF;-- If condition to check Funding exits for task or not --End of Bug 4689888
23490   ELSE          --IF p_customer_id IS NULL
23491      IF p_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
23492      l_customer_id:=NULL; -- NULL is passed for customer_id so that in Update_one_task it will not be Defaulted.
23493      ELSIF  l_top_task_customer_id = p_customer_id THEN -- added for Bug 5242015
23494             l_customer_id:= p_customer_id;
23495      ELSE
23496      pa_interface_utils_pub.map_new_amg_msg
23497                      ( p_old_message_code => 'PA_INVALID_CUST'
23498                       ,p_msg_attribute    => 'CHANGE'
23499                       ,p_resize_flag      => 'N'
23500                       ,p_msg_context      => 'GENERAL'
23501                       ,p_attribute1       => ''
23502                       ,p_attribute2       => ''
23503                       ,p_attribute3       => ''
23504                       ,p_attribute4       => ''
23505                       ,p_attribute5       => '');
23506                     RAISE FND_API.G_EXC_ERROR;
23507      END IF;
23508   END IF;
23509 ELSE
23510      --IF 'N' = l_proj_top_task_customer_flag
23511      l_customer_id := NULL;
23512 END IF;
23513 
23514 /*UPDATE PA_TASKS
23515 SET  invoice_method = l_invoice_method
23516     ,customer_id    = l_customer_id
23517 WHERE project_id = l_project_id
23518 AND   task_id = p_pa_task_id;*/
23519 --Bug 3279981 Review
23520 
23521 
23522 -- rtarway, BUG 3908013, replace dff attributes
23523 /*
23524 Bug 6153503
23525 There is no need to do delow validation here it will be done in update_one_task
23526 if (p_attribute_category is null or p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23527 then
23528      l_attribute_category :=  null;
23529 else
23530       l_attribute_category :=  p_attribute_category;
23531 end if;
23532 
23533 
23534 
23535 if (p_attribute1 is null or p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23536 then
23537      l_attribute1  :=  null;
23538 else
23539      l_attribute1  :=  p_attribute1;
23540 end if;
23541 
23542 
23543 
23544 if (p_attribute2 is null or p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23545 then
23546      l_attribute2  :=  null;
23547 else
23548      l_attribute2  :=  p_attribute2;
23549 end if;
23550 
23551 
23552 if (p_attribute3 is null or p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23553 then
23554      l_attribute3 :=  null;
23555 else
23556       l_attribute3 :=  p_attribute3;
23557 end if;
23558 
23559 if (p_attribute4 is null or p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23560 then
23561      l_attribute4 :=  null;
23562 else
23563       l_attribute4 :=  p_attribute4;
23564 end if;
23565 
23566 if (p_attribute5 is null or p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23567 then
23568      l_attribute5 :=  null;
23569 else
23570       l_attribute5 :=  p_attribute5;
23571 end if;
23572 
23573 if (p_attribute6 is null or p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23574 then
23575      l_attribute6 :=  null;
23576 else
23577       l_attribute6 :=  p_attribute6;
23578 end if;
23579 
23580 if (p_attribute7 is null or p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23581 then
23582      l_attribute7 :=  null;
23583 else
23584       l_attribute7 :=  p_attribute7;
23585 end if;
23586 
23587 if (p_attribute8 is null or p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23588 then
23589      l_attribute8 :=  null;
23590 else
23591       l_attribute8  :=  p_attribute8;
23592 end if;
23593 
23594 if (p_attribute9 is null or p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23595 then
23596      l_attribute9 :=  null;
23597 else
23598      l_attribute9 :=  p_attribute9;
23599 end if;
23600 
23601 if (p_attribute10 is null or p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23602 then
23603      l_attribute10 :=  null;
23604 else
23605       l_attribute10 :=  p_attribute10;
23606 end if;
23607 End Bug 6153503
23608 */
23609 --project structures
23610 -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
23611 -- --dbms_output.put_line('BEFORE CALLING UPDATE_ONE_TASK');
23612 
23613 --Bug 6153503 start
23614 IF p_tasks_dff = 'Y' THEN
23615 
23616     l_attribute_category := p_attribute_category;
23617 
23618     l_attribute1  :=  p_attribute1;
23619     l_attribute2  :=  p_attribute2;
23620     l_attribute3  :=  p_attribute3;
23621     l_attribute4  :=  p_attribute4;
23622     l_attribute5  :=  p_attribute5;
23623 
23624     l_attribute6  :=  p_attribute6;
23625     l_attribute7  :=  p_attribute7;
23626     l_attribute8  :=  p_attribute8;
23627     l_attribute9  :=  p_attribute9;
23628     l_attribute10 :=  p_attribute10;
23629 
23630     l_wp_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23631 
23632     l_wp_attribute1  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23633     l_wp_attribute2  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23634     l_wp_attribute3  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23635     l_wp_attribute4  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23636     l_wp_attribute5  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23637 
23638     l_wp_attribute6  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23639     l_wp_attribute7  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23640     l_wp_attribute8  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23641     l_wp_attribute9  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23642     l_wp_attribute10 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23643 
23644     l_wp_attribute11  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23645     l_wp_attribute12  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23646     l_wp_attribute13  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23647     l_wp_attribute14  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23648     l_wp_attribute15  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23649 
23650 ELSIF p_tasks_dff = 'N' THEN
23651 
23652     l_wp_attribute_category := p_attribute_category;
23653 
23654     l_wp_attribute1  :=  p_attribute1;
23655     l_wp_attribute2  :=  p_attribute2;
23656     l_wp_attribute3  :=  p_attribute3;
23657     l_wp_attribute4  :=  p_attribute4;
23658     l_wp_attribute5  :=  p_attribute5;
23659 
23660     l_wp_attribute6  :=  p_attribute6;
23661     l_wp_attribute7  :=  p_attribute7;
23662     l_wp_attribute8  :=  p_attribute8;
23663     l_wp_attribute9  :=  p_attribute9;
23664     l_wp_attribute10 :=  p_attribute10;
23665 
23666     l_wp_attribute11  :=  p_attribute11;
23667     l_wp_attribute12  :=  p_attribute12;
23668     l_wp_attribute13  :=  p_attribute13;
23669     l_wp_attribute14  :=  p_attribute14;
23670     l_wp_attribute15  :=  p_attribute15;
23671 
23672     -- added following code to update both fin and worklan tasks dff for Huawei enhancement bug 13923366
23673     IF PA_PROJECT_PUB.G_MASS_UPDATE_TASKS = 'Y' AND PA_PROJECT_PUB.G_FP_DFF_TBL.COUNT > 0 THEN
23674        i := PA_PROJECT_PUB.G_FP_DFF_TBL.FIRST;
23675        WHILE i IS NOT NULL LOOP
23676            IF ((PA_PROJECT_PUB.G_FP_DFF_TBL(i).pa_task_id = p_pa_task_id) OR
23677                (PA_PROJECT_PUB.G_FP_DFF_TBL(i).pa_task_name = p_task_name AND
23678                  PA_PROJECT_PUB.G_FP_DFF_TBL(i).pm_task_reference = p_pm_task_reference)) THEN
23679                EXIT;
23680            ELSE
23681                i := PA_PROJECT_PUB.G_FP_DFF_TBL.NEXT(i);
23682            END IF;
23683        END LOOP;
23684        l_attribute_category := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute_category;
23685 
23686        l_attribute1  :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute1;
23687        l_attribute2  :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute2;
23688        l_attribute3  :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute3;
23689        l_attribute4  :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute4;
23690        l_attribute5  :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute5;
23691        l_attribute6  :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute6;
23692        l_attribute7  :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute7;
23693        l_attribute8  :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute8;
23694        l_attribute9  :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute9;
23695        l_attribute10 :=  PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute10;
23696 
23697    ELSE
23698 
23699     l_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23700 
23701     l_attribute1  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23702     l_attribute2  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23703     l_attribute3  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23704     l_attribute4  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23705     l_attribute5  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23706 
23707     l_attribute6  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23708     l_attribute7  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23709     l_attribute8  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23710     l_attribute9  :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23711     l_attribute10 :=  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23712 
23713    END IF; -- End of IF condition added for bug 13923366
23714 END IF;
23715 
23716 --Bug 6153503 end
23717 
23718 IF l_structure_type = 'FINANCIAL' --p_structure_type
23719 THEN
23720 
23721 -- BUG 3908013, rtarway
23722 --In case of shared structure , null the values of dff fields. dff will be updated in elem_ver_schedule table only.
23723      /* Bug 6153503 start
23724      if nvl(l_is_wp_separate_from_fn,'N') = 'N'
23725      then
23726           l_attribute_category            := null;
23727           l_attribute1                    := null;
23728           l_attribute2                    := null;
23729           l_attribute3                    := null;
23730           l_attribute4                    := null;
23731           l_attribute5                    := null;
23732           l_attribute6                    := null;
23733           l_attribute7                    := null;
23734           l_attribute8                    := null;
23735           l_attribute9                    := null;
23736           l_attribute10                   := null;
23737      end if;
23738      Bug 6153503 end
23739      */
23740 
23741 --project structures
23742 ----dbms_output.put_line('value OF p_task_number BEFORE UPDATE_ONE_TASK'||p_task_number);
23743 
23744      PA_PROJECT_PVT.Update_One_Task (
23745      p_api_version_number            => p_api_version_number,
23746      p_commit                        => FND_API.G_FALSE,
23747      p_msg_count                     => p_msg_count,
23748      p_msg_data                      => p_msg_data,
23749      p_return_status                 => l_return_status,
23750      p_pm_product_code               => p_pm_product_code,
23751      p_pa_project_id                 => l_project_id, --Bug#3747312
23752      p_pa_task_id                    => l_pa_task_id, --BUG 3919800, p_pa_task_id to l_pa_task_id
23753      p_pm_task_reference             => p_pm_task_reference,
23754      p_task_number                   => p_task_number,
23755      p_task_name                     => p_task_name,
23756      p_long_task_name                => l_long_task_name, /*Commented the p_long_task_name for bug 2982057*/
23757      p_task_description              => p_task_description,
23758      p_task_start_date               => p_task_start_date,
23759      p_task_completion_date          => p_task_completion_date,
23760 -- Start Fix for Bug # 1289156
23761      p_early_start_date              => p_early_start_date,
23762      p_early_finish_date             => p_early_finish_date,
23763      p_late_start_date               => p_late_start_date,
23764      p_late_finish_date              => p_late_finish_date,
23765 --   p_actual_start_date             => p_actual_start_date,    --commented out for task progress
23766 --   p_actual_finish_date            => p_actual_finish_date,
23767      p_scheduled_start_date          => p_scheduled_start_date, -- 7245488
23768      p_scheduled_finish_date         => p_scheduled_finish_date, /* bug 7245488 */
23769 -- End Fix for Bug # 1289156
23770      p_pm_parent_task_reference      => p_pm_parent_task_reference,
23771      p_pa_parent_task_id             => p_pa_parent_task_id,
23772      p_address_id                    => p_address_id,
23773      p_carrying_out_organization_id  => p_carrying_out_organization_id,
23774      p_service_type_code             => p_service_type_code,
23775      p_task_manager_person_id        => p_task_manager_person_id,
23776      p_billable_flag                 => p_billable_flag,
23777      p_chargeable_flag               => p_chargeable_flag,
23778      p_ready_to_bill_flag            => p_ready_to_bill_flag,
23779      p_ready_to_distribute_flag      => p_ready_to_distribute_flag,
23780      p_limit_to_txn_controls_flag    => p_limit_to_txn_controls_flag,
23781      p_labor_bill_rate_org_id        => p_labor_bill_rate_org_id,
23782      p_labor_std_bill_rate_schdl     => p_labor_std_bill_rate_schdl,
23783      p_labor_schedule_fixed_date     => p_labor_schedule_fixed_date,
23784      p_labor_schedule_discount       => p_labor_schedule_discount,
23785      p_nl_bill_rate_org_id           => p_nl_bill_rate_org_id,
23786      p_nl_std_bill_rate_schdl        => p_nl_std_bill_rate_schdl,
23787      p_nl_schedule_fixed_date        => p_nl_schedule_fixed_date,
23788      p_nl_schedule_discount          => p_nl_schedule_discount,
23789      p_labor_cost_multiplier_name    => p_labor_cost_multiplier_name,
23790      p_cost_ind_rate_sch_id          => p_cost_ind_rate_sch_id,
23791      p_rev_ind_rate_sch_id           => p_rev_ind_rate_sch_id,
23792      p_inv_ind_rate_sch_id           => p_inv_ind_rate_sch_id,
23793      p_cost_ind_sch_fixed_date       => p_cost_ind_sch_fixed_date,
23794      p_rev_ind_sch_fixed_date        => p_rev_ind_sch_fixed_date,
23795      p_inv_ind_sch_fixed_date        => p_inv_ind_sch_fixed_date,
23796      p_labor_sch_type                => p_labor_sch_type,
23797      p_nl_sch_type                   => p_nl_sch_type,
23798      p_tasks_dff                     => p_tasks_dff, -- bug 13680655
23799      p_attribute_category            => l_attribute_category,
23800      p_attribute1                    => l_attribute1,
23801      p_attribute2                    => l_attribute2,
23802      p_attribute3                    => l_attribute3,
23803      p_attribute4                    => l_attribute4,
23804      p_attribute5                    => l_attribute5,
23805      p_attribute6                    => l_attribute6,
23806      p_attribute7                    => l_attribute7,
23807      p_attribute8                    => l_attribute8,
23808      p_attribute9                    => l_attribute9,
23809      p_attribute10                   => l_attribute10,
23810      p_allow_cross_charge_flag       => p_allow_cross_charge_flag,
23811      p_project_rate_type             => p_project_rate_type,
23812      p_project_rate_date             => p_project_rate_date,
23813      p_cc_process_labor_flag         => p_cc_process_labor_flag,
23814      p_labor_tp_schedule_id          => p_labor_tp_schedule_id,
23815      p_labor_tp_fixed_date           => p_labor_tp_fixed_date,
23816      p_cc_process_nl_flag            => p_cc_process_nl_flag,
23817      p_nl_tp_schedule_id             => p_nl_tp_schedule_id,
23818      p_nl_tp_fixed_date              => p_nl_tp_fixed_date,
23819      p_receive_project_invoice_flag  => p_receive_project_invoice_flag,
23820      p_work_type_id                  => p_work_type_id,
23821      p_emp_bill_rate_schedule_id     => p_emp_bill_rate_schedule_id,
23822      p_job_bill_rate_schedule_id     => p_job_bill_rate_schedule_id,
23823 
23824 --Sakthi MCB
23825      p_non_lab_std_bill_rt_sch_id    => p_non_lab_std_bill_rt_sch_id,
23826      p_taskfunc_cost_rate_type       => p_taskfunc_cost_rate_type,
23827      p_taskfunc_cost_rate_date       => p_taskfunc_cost_rate_date,
23828 
23829 --Sakthi MCB
23830      p_labor_disc_reason_code        => p_labor_disc_reason_code,
23831      p_non_labor_disc_reason_code    => p_non_labor_disc_reason_code,
23832 
23833 --PA L Changes 2872708
23834      p_retirement_cost_flag          => p_retirement_cost_flag,
23835      p_cint_eligible_flag            => p_cint_eligible_flag,
23836      p_cint_stop_date                => p_cint_stop_date,
23837 --End PA L Changes 2872708
23838      --Added by rtarway for BUG 4106154
23839      p_gen_etc_source_code          =>  p_gen_etc_source_code,
23840 
23841 --Bug 3279981 Review
23842      p_invoice_method                => l_invoice_method,
23843      p_customer_id                   => l_customer_id,
23844 --Bug 3279981 Review
23845      p_out_pa_task_id                => l_out_pa_task_id,
23846      p_out_pm_task_reference         => l_out_pm_task_reference );
23847  -- --dbms_output.put_line('after CALLING UPDATE_ONE_TASK');
23848      p_return_status := l_return_status;
23849 -- --dbms_output.put_line('p_return_status'||p_return_status);
23850      IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
23851         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
23852      ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23853         RAISE  FND_API.G_EXC_ERROR;
23854      END IF;
23855 
23856      p_out_pa_task_id  := l_out_pa_task_id;
23857      p_out_pm_task_reference := l_out_pm_task_reference;
23858 
23859 --BUG 4081329, rtarway, update all child tasks which have null completion date, if completion date is getting updated
23860 --Fix for 7427388
23861 /*if (p_task_completion_date is not null and p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) then
23862        open  cur_get_child_task_dates (l_project_id,l_pa_task_id);
23863        fetch cur_get_child_task_dates bulk collect into      l_task_id_tbl,
23864                                                              l_start_date_tbl,
23865                                                              l_completion_date_tbl;
23866        close cur_get_child_task_dates;
23867        if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23868           FORALL i in l_task_id_tbl.first..l_task_id_tbl.last
23869           update pa_tasks set completion_date = p_task_completion_date where task_id = l_task_id_tbl(i)
23870           and project_id = l_project_id;
23871        end if;
23872 end if;*/
23873 -- Added one more condition to check rollup flag to defer the date updates 14556729
23874 if ( NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N') = 'N' AND p_task_completion_date is not null and  p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) then
23875        open  cur_get_child_task_dates (l_project_id,l_pa_task_id);
23876        fetch cur_get_child_task_dates bulk collect into      l_task_id_tbl,
23877                                                              l_start_date_tbl,
23878                                                              l_completion_date_tbl,
23879 							     l_parent_task_id_tbl;
23880        close cur_get_child_task_dates;
23881        if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23882 	  FOR i in l_task_id_tbl.first..l_task_id_tbl.last LOOP
23883             IF l_parent_task_id_tbl(i) IS NOT NULL AND l_start_date_tbl(i) is NULL THEN
23884 	      SELECT start_date
23885  	      INTO l_parent_task_date
23886  	      FROM pa_tasks
23887  	      WHERE task_id = l_parent_task_id_tbl(i);
23888 
23889  	      UPDATE pa_tasks
23890  	      SET completion_date = p_task_completion_date,
23891  	          start_date = l_parent_task_date
23892  	      WHERE task_id = l_task_id_tbl(i);
23893 
23894  	    ELSE
23895  	      UPDATE pa_tasks
23896  	      SET completion_date = p_task_completion_date
23897  	      WHERE task_id = l_task_id_tbl(i);
23898  	    END IF;
23899  	  END LOOP;
23900        end if;
23901     end if;
23902 --End of fix for 7427388
23903 
23904 --BUG#7015228, Deleting data from previous cursor
23905 l_task_id_tbl.delete;
23906 l_start_date_tbl.delete;
23907 l_completion_date_tbl.delete;
23908 
23909 --BUG#7015228, update all child tasks which have null start date, if start date is getting updated
23910 -- Added one more condition to check rollup flag to defer the date updates 14556729
23911 if (NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N') = 'N' AND p_task_start_date is not null and p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) then
23912        open  cur_get_child_task_start_dates (l_project_id,l_pa_task_id);
23913        fetch cur_get_child_task_start_dates bulk collect into      l_task_id_tbl,
23914                                                              l_start_date_tbl,
23915                                                              l_completion_date_tbl;
23916        close cur_get_child_task_start_dates;
23917        if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23918           FORALL i in l_task_id_tbl.first..l_task_id_tbl.last
23919           update pa_tasks set start_date = p_task_start_date where task_id = l_task_id_tbl(i)
23920           and project_id = l_project_id;
23921        end if;
23922 end if;
23923 
23924 
23925 --bug 2665656
23926 -- --dbms_output.put_line('p_pm_product_code'||p_pm_product_code);
23927 -- --dbms_output.put_line('p_update_task_structure'||p_update_task_structure);
23928 -- --dbms_output.put_line('p_structure_type'||p_structure_type);
23929 ----dbms_output.put_line('value of l_out_pa_task_id'||l_out_pa_task_id);
23930 ----dbms_output.put_line('value of l_out_pm_task_reference'||l_out_pm_task_reference);
23931 
23932      IF (NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN') AND (p_update_task_structure = 'Y') --Added for bug 2931183
23933      THEN
23934 --bug 2665656
23935          -- Bug 3106457
23936       -- --dbms_output.put_line('Going into this loop');
23937          -- --dbms_output.put_line('p_structure_version_id : '||p_structure_version_id);
23938          --BUG 3919800, p_structure_version_id to l_structure_version_id, rtarway
23939          IF l_structure_version_id IS NULL
23940             OR l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3174639
23941          THEN
23942               l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
23943          ELSE
23944               l_structure_version_id := p_structure_version_id;
23945          END IF;
23946 --      --dbms_output.put_line('BEFORE CALLING UPDATE_task_structure');
23947 --      --dbms_output.put_line('l_structure_version_id IS'||l_structure_version_id);
23948 
23949 
23950 ----dbms_output.put_line('Value of p_task_number passed to update_task_structure'||p_task_number);
23951 
23952          PA_PROJ_TASK_STRUC_PUB.update_task_structure
23953                (
23954                 p_calling_module                  => 'AMG'
23955                ,p_task_id                         => l_pa_task_id  --BUG 3919800, rtarway
23956                ,p_ref_task_id                     => l_ref_task_id --Bug 3705333 changed from p_ref_task_id to l_ref_task_id
23957                ,p_project_id                      => l_project_id
23958                ,p_task_number                     => p_task_number
23959                ,p_task_name                       => l_long_task_name      ----bug 2833194 -- for bug# 3749447
23960                ,p_task_description                => p_task_description
23961                ,p_carrying_out_organization_id    => p_carrying_out_organization_id
23962                ,p_task_manager_id                 => p_task_manager_person_id
23963                ,p_pm_product_code                 => p_pm_product_code
23964                ,p_pm_task_reference               => p_pm_task_reference
23965                ,p_location_id                     => p_address_id
23966                ,p_structure_type                  => l_structure_type --Bug#3747312 p_structure_type
23967                ,p_OBLIGATION_START_DATE           => p_OBLIGATION_START_DATE
23968                ,p_OBLIGATION_FINISH_DATE          => p_OBLIGATION_FINISH_DATE
23969                ,p_ESTIMATED_START_DATE            => p_ESTIMATED_START_DATE
23970                ,p_ESTIMATED_FINISH_DATE           => p_ESTIMATED_FINISH_DATE
23971                ,p_BASELINE_START_DATE             => p_BASELINE_START_DATE
23972                ,p_BASELINE_FINISH_DATE            => p_BASELINE_FINISH_DATE
23973                ,p_CLOSED_DATE                     => p_CLOSED_DATE
23974                ,p_WQ_UOM_CODE                     => p_WQ_UOM_CODE
23975                ,p_WQ_ITEM_CODE                    => p_WQ_ITEM_CODE
23976                ,p_STATUS_CODE                     => p_STATUS_CODE
23977                ,p_WF_STATUS_CODE                  => p_WF_STATUS_CODE
23978                ,p_PRIORITY_CODE                   => p_PRIORITY_CODE
23979                ,p_MILESTONE_FLAG                  => p_MILESTONE_FLAG
23980                ,p_CRITICAL_FLAG                   => p_CRITICAL_FLAG
23981                ,p_INC_PROJ_PROGRESS_FLAG          => p_INC_PROJ_PROGRESS_FLAG
23982                ,p_LINK_TASK_FLAG                  => p_LINK_TASK_FLAG
23983                ,p_CALENDAR_ID                     => p_CALENDAR_ID
23984                ,p_PLANNED_EFFORT                  => p_PLANNED_EFFORT
23985                ,p_DURATION                        => p_DURATION
23986                ,p_PLANNED_WORK_QUANTITY           => p_PLANNED_WORK_QUANTITY
23987                ,p_TASK_TYPE                       => p_TASK_TYPE
23988                ,p_actual_start_date               => p_actual_start_date
23989                ,p_actual_finish_date              => p_actual_finish_date
23990                ,p_early_start_date                => p_early_start_date
23991                ,p_early_finish_date               => p_early_finish_date
23992                ,p_late_start_date                 => p_late_start_date
23993                ,p_late_finish_date                => p_late_finish_date
23994                ,p_scheduled_start_date            => p_scheduled_start_date
23995                ,p_scheduled_finish_date           => p_scheduled_finish_date
23996                --Commented by rtarway for BUG 3663712
23997                --,p_structure_version_id            => p_structure_version_id
23998                ,p_structure_version_id            => l_structure_version_id
23999 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
24000         ,p_ext_act_duration         => p_ext_act_duration
24001         ,p_ext_remain_duration      => p_ext_remain_duration
24002         ,p_ext_sch_duration         => p_ext_sch_duration
24003 -- (End venkat) new params for bug #3450684 -------------------------------------------------
24004     --Bug 6153503 start
24005     ,p_attribute_category            => l_wp_attribute_category
24006     ,p_attribute1                    => l_wp_attribute1
24007     ,p_attribute2                    => l_wp_attribute2
24008     ,p_attribute3                    => l_wp_attribute3
24009     ,p_attribute4                    => l_wp_attribute4
24010     ,p_attribute5                    => l_wp_attribute5
24011     ,p_attribute6                    => l_wp_attribute6
24012     ,p_attribute7                    => l_wp_attribute7
24013     ,p_attribute8                    => l_wp_attribute8
24014     ,p_attribute9                    => l_wp_attribute9
24015     ,p_attribute10                   => l_wp_attribute10
24016     ,p_attribute11                   => l_wp_attribute11
24017     ,p_attribute12                   => l_wp_attribute12
24018     ,p_attribute13                   => l_wp_attribute13
24019     ,p_attribute14                   => l_wp_attribute14
24020     ,p_attribute15                   => l_wp_attribute15
24021      --Bug 6153503 end
24022 -- set the new params - bug #3654243 ----------------------------------------------
24023     ,p_base_percent_comp_deriv_code => p_base_percent_comp_deriv_code
24024     ,p_sch_tool_tsk_type_code       => p_sch_tool_tsk_type_code
24025     ,p_constraint_type_code         => p_constraint_type_code
24026     ,p_constraint_date              => p_constraint_date
24027     ,p_free_slack                   => p_free_slack
24028     ,p_total_slack                  => p_total_slack
24029     ,p_effort_driven_flag           => p_effort_driven_flag
24030     ,p_level_assignments_flag       => p_level_assignments_flag
24031     ,p_invoice_method               => p_invoice_method
24032     ,p_customer_id                  => p_customer_id
24033     ,p_gen_etc_source_code          => p_gen_etc_source_code
24034 -- set the new params - bug #3654243 -------------------------------------------------
24035 
24036 -- Progress Management Changes. Bug # 3420093.
24037                 ,p_etc_effort                 => p_etc_effort
24038                 ,p_percent_complete           => p_percent_complete
24039 -- Progress Management Changes. Bug # 3420093.
24040 --Added by rtarway for BUG 3908013
24041 /* Values are already being passed above. Ref Bug #6153503
24042                ,p_attribute_category            => p_attribute_category
24043                ,p_attribute1                    => p_attribute1
24044                ,p_attribute2                    => p_attribute2
24045                ,p_attribute3                    => p_attribute3
24046                ,p_attribute4                    => p_attribute4
24047                ,p_attribute5                    => p_attribute5
24048                ,p_attribute6                    => p_attribute6
24049                ,p_attribute7                    => p_attribute7
24050                ,p_attribute8                    => p_attribute8
24051                ,p_attribute9                    => p_attribute9
24052                ,p_attribute10                   => p_attribute10 */
24053 --end add by rtarway, 3908013
24054                ,x_msg_count                       => l_msg_count
24055                ,x_msg_data                        => l_msg_data
24056                ,x_return_status                   => l_return_status
24057 	       ,P_PM_SOURCE_CODE                  => P_PM_SOURCE_CODE -- Huawei 15876400 source code
24058                );
24059            ----dbms_output.put_line('return status of update_task_struc '||l_return_status);
24060 
24061        END IF;
24062 
24063      IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
24064         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
24065      ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
24066         RAISE  FND_API.G_EXC_ERROR;
24067      END IF;
24068 
24069 ELSIF l_structure_type = 'WORKPLAN' --p_structure_type
24070 THEN
24071    -- Moved this code up. As this should be the first validation the should be performed
24072    -- IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
24073    --If update task is called from update_project api then PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN wont be called
24074    --bcoz G_IS_WP_SEPARATE_FROM_FN will already be set by upate_project.
24075    --    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
24076    --THEN
24077    --     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
24078    --     THEN
24079    --         pa_interface_utils_pub.map_new_amg_msg
24080    --           ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
24081    --               ,p_msg_attribute    => 'CHANGE'
24082    --               ,p_resize_flag      => 'N'
24083    --               ,p_msg_context      => 'GENERAL'
24084    --               ,p_attribute1       => ''
24085    --               ,p_attribute2       => ''
24086    --               ,p_attribute3       => ''
24087    --               ,p_attribute4       => ''
24088    --               ,p_attribute5       => '');
24089    --     END IF;
24090    --     RAISE FND_API.G_EXC_ERROR;
24091    -- END IF;
24092 
24093     -- Actions performed using the APIs would be subject to
24094     -- function security. If the responsibility does not allow
24095     -- such functions to be executed, the API should not proceed further
24096     -- since the user does not have access to such functions
24097 
24098 
24099     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
24100       (p_api_version_number => p_api_version_number,
24101        p_responsibility_id  => l_resp_id,
24102        p_function_name      => 'PA_PM_UPDATE_TASK',
24103        p_msg_count          => l_msg_count,
24104        p_msg_data           => l_msg_data,
24105        p_return_status      => l_return_status,
24106        p_function_allowed   => l_function_allowed );
24107 
24108         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24109         THEN
24110                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24111 
24112         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24113         THEN
24114                         RAISE FND_API.G_EXC_ERROR;
24115         END IF;
24116         IF l_function_allowed = 'N' THEN
24117           pa_interface_utils_pub.map_new_amg_msg
24118           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
24119            ,p_msg_attribute    => 'CHANGE'
24120            ,p_resize_flag      => 'Y'
24121            ,p_msg_context      => 'GENERAL'
24122            ,p_attribute1       => ''
24123            ,p_attribute2       => ''
24124            ,p_attribute3       => ''
24125            ,p_attribute4       => ''
24126            ,p_attribute5       => '');
24127            p_return_status := FND_API.G_RET_STS_ERROR;
24128            RAISE FND_API.G_EXC_ERROR;
24129         END IF;
24130 
24131 --Project Structures Integration
24132 ----dbms_output.put_line('l_structure_version_id--ut'||l_structure_version_id);
24133        IF ( l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
24134             l_structure_version_id IS NULL  )
24135        THEN
24136             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
24137             THEN
24138                pa_interface_utils_pub.map_new_amg_msg
24139                     ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
24140                      ,p_msg_attribute    => 'CHANGE'
24141                      ,p_resize_flag      => 'N'
24142                      ,p_msg_context      => 'GENERAL'
24143                      ,p_attribute1       => ''
24144                      ,p_attribute2       => ''
24145                      ,p_attribute3       => ''
24146                      ,p_attribute4       => ''
24147                      ,p_attribute5       => '');
24148             END IF;
24149             RAISE FND_API.G_EXC_ERROR;
24150             p_return_status    := FND_API.G_RET_STS_SUCCESS;
24151        END IF;
24152        -- Bug 3106457. This is not null.
24153        --Commented by rtarway for BUG 3919800
24154        --l_structure_version_id := p_structure_version_id;
24155        --Added by rtarway for BUG 4106154
24156        if (l_update_pa_tasks = 'Y' AND
24157            --Added by rtarway for bug 4321313
24158        PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_pa_task_id) = 'Y'
24159        ) then
24160 
24161                --In case of Shared Structures, we do not need to update dff attributes in pa_tasks, instead
24162                --dff fields of pa_proj_elem_ver_schedule are updated
24163 
24164               PA_PROJECT_PVT.Update_One_Task
24165                (
24166                     p_api_version_number            => p_api_version_number,
24167                     p_commit                        => FND_API.G_FALSE,
24168                     p_msg_count                     => p_msg_count,
24169                     p_msg_data                      => p_msg_data,
24170                     p_return_status                 => l_return_status,
24171                     p_pm_product_code               => p_pm_product_code,
24172                     p_pa_project_id                 => l_project_id,
24173                     p_pa_task_id                    => l_pa_task_id,
24174                     p_pm_task_reference             => p_pm_task_reference,
24175                     p_task_number                   => p_task_number,
24176                     p_task_name                     => p_task_name,
24177                     p_long_task_name                => l_long_task_name,
24178                     p_task_description              => p_task_description,
24179                     p_task_start_date               => p_task_start_date,
24180                     p_task_completion_date          => p_task_completion_date,
24181                     p_early_start_date              => p_early_start_date,
24182                     p_early_finish_date             => p_early_finish_date,
24183                     p_late_start_date               => p_late_start_date,
24184                     p_late_finish_date              => p_late_finish_date,
24185 		    p_scheduled_start_date          => p_scheduled_start_date,  -- 7245488
24186 		    p_scheduled_finish_date         => p_scheduled_finish_date, /* bug 7245488 */
24187                     p_pm_parent_task_reference      => p_pm_parent_task_reference,
24188                     p_pa_parent_task_id             => p_pa_parent_task_id,
24189                     p_address_id                    => p_address_id,
24190                     p_carrying_out_organization_id  => p_carrying_out_organization_id,
24191                     p_service_type_code             => p_service_type_code,
24192                     p_task_manager_person_id        => p_task_manager_person_id,
24193                     p_billable_flag                 => p_billable_flag,
24194                     p_chargeable_flag               => p_chargeable_flag,
24195                     p_ready_to_bill_flag            => p_ready_to_bill_flag,
24196                     p_ready_to_distribute_flag      => p_ready_to_distribute_flag,
24197                     p_limit_to_txn_controls_flag    => p_limit_to_txn_controls_flag,
24198                     p_labor_bill_rate_org_id        => p_labor_bill_rate_org_id,
24199                     p_labor_std_bill_rate_schdl     => p_labor_std_bill_rate_schdl,
24200                     p_labor_schedule_fixed_date     => p_labor_schedule_fixed_date,
24201                     p_labor_schedule_discount       => p_labor_schedule_discount,
24202                     p_nl_bill_rate_org_id           => p_nl_bill_rate_org_id,
24203                     p_nl_std_bill_rate_schdl        => p_nl_std_bill_rate_schdl,
24204                     p_nl_schedule_fixed_date        => p_nl_schedule_fixed_date,
24205                     p_nl_schedule_discount          => p_nl_schedule_discount,
24206                     p_labor_cost_multiplier_name    => p_labor_cost_multiplier_name,
24207                     p_cost_ind_rate_sch_id          => p_cost_ind_rate_sch_id,
24208                     p_rev_ind_rate_sch_id           => p_rev_ind_rate_sch_id,
24209                     p_inv_ind_rate_sch_id           => p_inv_ind_rate_sch_id,
24210                     p_cost_ind_sch_fixed_date       => p_cost_ind_sch_fixed_date,
24211                     p_rev_ind_sch_fixed_date        => p_rev_ind_sch_fixed_date,
24212                     p_inv_ind_sch_fixed_date        => p_inv_ind_sch_fixed_date,
24213                     p_labor_sch_type                => p_labor_sch_type,
24214                     p_nl_sch_type                   => p_nl_sch_type,
24215                     p_tasks_dff                     => p_tasks_dff, -- bug 13680655
24216                     --Bug 6153503 start
24217                     p_attribute_category            => l_attribute_category,
24218                     p_attribute1                    => l_attribute1,
24219                     p_attribute2                    => l_attribute2,
24220                     p_attribute3                    => l_attribute3,
24221                     p_attribute4                    => l_attribute4,
24222                     p_attribute5                    => l_attribute5,
24223                     p_attribute6                    => l_attribute6,
24224                     p_attribute7                    => l_attribute7,
24225                     p_attribute8                    => l_attribute8,
24226                     p_attribute9                    => l_attribute9,
24227                     p_attribute10                   => l_attribute10,
24228                     --Bug 6153503 end
24229                     p_allow_cross_charge_flag       => p_allow_cross_charge_flag,
24230                     p_project_rate_type             => p_project_rate_type,
24231                     p_project_rate_date             => p_project_rate_date,
24232                     p_cc_process_labor_flag         => p_cc_process_labor_flag,
24233                     p_labor_tp_schedule_id          => p_labor_tp_schedule_id,
24234                     p_labor_tp_fixed_date           => p_labor_tp_fixed_date,
24235                     p_cc_process_nl_flag            => p_cc_process_nl_flag,
24236                     p_nl_tp_schedule_id             => p_nl_tp_schedule_id,
24237                     p_nl_tp_fixed_date              => p_nl_tp_fixed_date,
24238                     p_receive_project_invoice_flag  => p_receive_project_invoice_flag,
24239                     p_work_type_id                  => p_work_type_id,
24240                     p_emp_bill_rate_schedule_id     => p_emp_bill_rate_schedule_id,
24241                     p_job_bill_rate_schedule_id     => p_job_bill_rate_schedule_id,
24242                     p_non_lab_std_bill_rt_sch_id    => p_non_lab_std_bill_rt_sch_id,
24243                     p_taskfunc_cost_rate_type       => p_taskfunc_cost_rate_type,
24244                     p_taskfunc_cost_rate_date       => p_taskfunc_cost_rate_date,
24245                     p_labor_disc_reason_code        => p_labor_disc_reason_code,
24246                     p_non_labor_disc_reason_code    => p_non_labor_disc_reason_code,
24247                     p_retirement_cost_flag          => p_retirement_cost_flag,
24248                     p_cint_eligible_flag            => p_cint_eligible_flag,
24249                     p_cint_stop_date                => p_cint_stop_date,
24250                     p_gen_etc_source_code          =>  p_gen_etc_source_code,
24251                     p_invoice_method                => l_invoice_method,
24252                     p_customer_id                   => l_customer_id,
24253                     p_out_pa_task_id                => l_out_pa_task_id,
24254                     p_out_pm_task_reference         => l_out_pm_task_reference
24255                );
24256 
24257                p_return_status := l_return_status;
24258 
24259                IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
24260                   RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
24261                ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
24262                   RAISE  FND_API.G_EXC_ERROR;
24263                END IF;
24264        end if;
24265   --End Added by rtarway for BUG 4106154
24266 
24267 --bug 2665656
24268      IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN'
24269      THEN
24270 --bug 2665656
24271           PA_PROJ_TASK_STRUC_PUB.update_task_structure
24272                (
24273                 p_calling_module                  => 'AMG'
24274                ,p_task_id                         => l_pa_task_id --BUG 3919800, rtarway
24275                ,p_ref_task_id                     => l_ref_task_id --Bug 3705333 changed from p_ref_task_id to l_ref_task_id
24276                ,p_project_id                      => l_project_id
24277                ,p_task_number                     => p_task_number
24278                ,p_task_name                       => l_long_task_name     ----bug 2833194 , -- bug# 3749447
24279                ,p_task_description                => p_task_description
24280                ,p_carrying_out_organization_id    => p_carrying_out_organization_id
24281                ,p_task_manager_id                 => p_task_manager_person_id
24282                ,p_pm_product_code                 => p_pm_product_code
24283                ,p_pm_task_reference               => p_pm_task_reference
24284                ,p_location_id                     => p_address_id
24285                ,p_structure_type                  => l_structure_type --p_structure_type
24286                ,p_OBLIGATION_START_DATE           => p_OBLIGATION_START_DATE
24287                ,p_OBLIGATION_FINISH_DATE          => p_OBLIGATION_FINISH_DATE
24288                ,p_ESTIMATED_START_DATE            => p_ESTIMATED_START_DATE
24289                ,p_ESTIMATED_FINISH_DATE           => p_ESTIMATED_FINISH_DATE
24290                ,p_BASELINE_START_DATE             => p_BASELINE_START_DATE
24291                ,p_BASELINE_FINISH_DATE            => p_BASELINE_FINISH_DATE
24292                ,p_CLOSED_DATE                     => p_CLOSED_DATE
24293                ,p_WQ_UOM_CODE                     => p_WQ_UOM_CODE
24294                ,p_WQ_ITEM_CODE                    => p_WQ_ITEM_CODE
24295                ,p_STATUS_CODE                     => p_STATUS_CODE
24296                ,p_WF_STATUS_CODE                  => p_WF_STATUS_CODE
24297                ,p_PRIORITY_CODE                   => p_PRIORITY_CODE
24298                ,p_MILESTONE_FLAG                  => p_MILESTONE_FLAG
24299                ,p_CRITICAL_FLAG                   => p_CRITICAL_FLAG
24300                ,p_INC_PROJ_PROGRESS_FLAG          => p_INC_PROJ_PROGRESS_FLAG
24301                ,p_LINK_TASK_FLAG                  => p_LINK_TASK_FLAG
24302                ,p_CALENDAR_ID                     => p_CALENDAR_ID
24303                ,p_PLANNED_EFFORT                  => p_PLANNED_EFFORT
24304                ,p_DURATION                        => p_DURATION
24305                ,p_PLANNED_WORK_QUANTITY           => p_PLANNED_WORK_QUANTITY
24306                ,p_TASK_TYPE                       => p_TASK_TYPE
24307                ,p_actual_start_date               => p_actual_start_date
24308                ,p_actual_finish_date              => p_actual_finish_date
24309                ,p_early_start_date                => p_early_start_date
24310                ,p_early_finish_date               => p_early_finish_date
24311                ,p_late_start_date                 => p_late_start_date
24312                ,p_late_finish_date                => p_late_finish_date
24313                ,p_scheduled_start_date            => p_scheduled_start_date
24314                ,p_scheduled_finish_date           => p_scheduled_finish_date
24315                --Commented by rtarway, BUG 3663712
24316                --,p_structure_version_id            => p_structure_version_id
24317                ,p_structure_version_id            => l_structure_version_id
24318 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
24319         ,p_ext_act_duration     => p_ext_act_duration
24320         ,p_ext_remain_duration      => p_ext_remain_duration
24321         ,p_ext_sch_duration     => p_ext_sch_duration
24322 -- (End venkat) new params for bug #3450684 -------------------------------------------------
24323     --Bug 6153503 start
24324     ,p_attribute_category            => l_wp_attribute_category
24325     ,p_attribute1                    => l_wp_attribute1
24326     ,p_attribute2                    => l_wp_attribute2
24327     ,p_attribute3                    => l_wp_attribute3
24328     ,p_attribute4                    => l_wp_attribute4
24329     ,p_attribute5                    => l_wp_attribute5
24330     ,p_attribute6                    => l_wp_attribute6
24331     ,p_attribute7                    => l_wp_attribute7
24332     ,p_attribute8                    => l_wp_attribute8
24333     ,p_attribute9                    => l_wp_attribute9
24334     ,p_attribute10                   => l_wp_attribute10
24335     ,p_attribute11                   => l_wp_attribute11
24336     ,p_attribute12                   => l_wp_attribute12
24337     ,p_attribute13                   => l_wp_attribute13
24338     ,p_attribute14                   => l_wp_attribute14
24339     ,p_attribute15                   => l_wp_attribute15
24340      --Bug 6153503 end
24341 -- set the new params - bug #3654243 ----------------------------------------------
24342     ,p_base_percent_comp_deriv_code => p_base_percent_comp_deriv_code
24343     ,p_sch_tool_tsk_type_code       => p_sch_tool_tsk_type_code
24344     ,p_constraint_type_code         => p_constraint_type_code
24345     ,p_constraint_date              => p_constraint_date
24346     ,p_free_slack                   => p_free_slack
24347     ,p_total_slack                  => p_total_slack
24348     ,p_effort_driven_flag           => p_effort_driven_flag
24349     ,p_level_assignments_flag       => p_level_assignments_flag
24350     ,p_invoice_method               => p_invoice_method
24351     ,p_customer_id                  => p_customer_id
24352     ,p_gen_etc_source_code          => p_gen_etc_source_code
24353 -- set the new params - bug #3654243 -------------------------------------------------
24354 
24355 
24356 -- Progress Management Changes. Bug # 3420093.
24357                 ,p_etc_effort                   => p_etc_effort
24358                 ,p_percent_complete             => p_percent_complete
24359 -- Progress Management Changes. Bug # 3420093.
24360 
24361                ,x_msg_count                       => l_msg_count
24362                ,x_msg_data                        => l_msg_data
24363                ,x_return_status                   => l_return_status
24364 	       ,P_PM_SOURCE_CODE                  => P_PM_SOURCE_CODE -- Huawei 15876400 source code
24365                 --Added by rtarway for BUG 3908013
24366                 /* Values are already being passed above. Ref Bug#6153503
24367                ,p_attribute_category            => p_attribute_category
24368                ,p_attribute1                    => p_attribute1
24369                ,p_attribute2                    => p_attribute2
24370                ,p_attribute3                    => p_attribute3
24371                ,p_attribute4                    => p_attribute4
24372                ,p_attribute5                    => p_attribute5
24373                ,p_attribute6                    => p_attribute6
24374                ,p_attribute7                    => p_attribute7
24375                ,p_attribute8                    => p_attribute8
24376                ,p_attribute9                    => p_attribute9
24377                ,p_attribute10                   => p_attribute10 */
24378 
24379                );
24380 
24381            IF l_return_status =  FND_API.G_RET_STS_UNEXP_ERROR THEN
24382               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
24383            ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
24384               RAISE  FND_API.G_EXC_ERROR;
24385            END IF;
24386      END IF;   --<< p_pm_product_code = 'WORKPLAN' >>
24387 
24388      p_out_pa_task_id  := l_pa_task_id;--BUG 3919800, rtarway
24389      p_out_pm_task_reference := p_pm_task_reference ;
24390 
24391 
24392 --Project Structures Integration
24393 END IF; --<<p_structure_type>>
24394 --Begin Add by rtarway FP.M changes for Mapping
24395 --No Function Security Check required
24396 --Call the update_mapping only if p_mapped_task_reference or p_mapped_task_id is passed
24397 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
24398 IF (G_PROJECT_SHARING_TYPE = 'SPLIT_MAPPING' and nvl(l_is_wp_separate_from_fn,'N') = 'Y')
24399 THEN
24400      IF (
24401           ( p_mapped_task_reference IS NULL OR p_mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
24402           OR
24403           ( p_mapped_task_id IS NULL OR  p_mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
24404         )
24405      THEN
24406           pa_project_pub.update_mapping
24407           (
24408               p_api_version            => p_api_version_number
24409             , p_init_msg_list          => p_init_msg_list
24410             , p_commit                 => FND_API.G_FALSE--bug 3766967
24411             , p_debug_mode             => FND_API.G_TRUE
24412             , p_project_id             => l_project_id --Bug#3747312 p_pa_project_id
24413             , p_proj_source_reference  => null
24414             , p_wkp_structure_version_id => l_structure_version_id -- BUG 3919800, rtarway
24415             , p_wkp_task_id            => l_pa_task_id--Since the tasks are already created , this will have task Ids
24416             , px_mapped_task_id        => p_mapped_task_id------------|One of theses two should be passed
24417             , p_mapped_task_reference  => p_mapped_task_reference ----|
24418             , x_return_status          => l_return_status
24419             , x_msg_count              => l_msg_count
24420             , x_msg_data               => l_msg_data
24421 
24422           );
24423           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
24424                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24425           ELSIF l_return_status = FND_API.G_RET_STS_ERROR        THEN
24426                 RAISE FND_API.G_EXC_ERROR;
24427           END IF;
24428      END IF;
24429 END IF;
24430 
24431 --End Add by rtarway  FP.M chages for Mapping
24432 --Begin  Add by rtarway  FP.M chages for Set Financial Task
24433 IF (G_PROJECT_SHARING_TYPE = 'SHARE_PARTIAL' and nvl(l_is_wp_separate_from_fn,'N') = 'N') THEN --l_structure_type
24434     --Get the task Version Id
24435     --BUG 3919800,p_structure_version_id and p_pa_task_id are replaced
24436     l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(l_structure_version_id, l_pa_task_id);
24437     OPEN  c_get_pa_record_version_number ( l_task_version_id  , l_project_id ); --Bug#3747312
24438     FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
24439     CLOSE c_get_pa_record_version_number;
24440     IF ( p_financial_task_flag IS NOT NULL AND p_financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
24441     THEN
24442         PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
24443          (
24444             p_api_version               => p_api_version_number
24445           , p_init_msg_list             => p_init_msg_list
24446           , p_commit                    => FND_API.G_FALSE--bug 3766967
24447           , p_calling_module            => 'AMG'
24448           , p_debug_mode                => FND_API.G_TRUE
24449           , p_task_version_id           => l_task_version_id
24450           , p_checked_flag              => p_financial_task_flag
24451           , p_record_version_number     => l_patask_record_version_number
24452           , p_project_id                => l_project_id --Bug#3747312 p_pa_project_id
24453           , p_published_version_exists  => G_Published_version_exists
24454           , x_return_status             => l_return_status
24455           , x_msg_count                 => l_msg_count
24456           , x_msg_data                  => l_msg_data
24457         );
24458          IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24459          THEN
24460                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24461          ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24462          THEN
24463                RAISE FND_API.G_EXC_ERROR;
24464          END IF;
24465     END IF;
24466 END IF;
24467 --End Add by rtarway  FP.M chages for Set Financial Task
24468 
24469 --     p_out_pa_task_id  := l_out_pa_task_id;
24470 --     p_out_pm_task_reference := l_out_pm_task_reference;
24471 
24472 -- PA L Changes 3010538
24473 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
24474                                                   -- publishing flow.
24475   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.
24476 THEN
24477 ---bug 4199694
24478 --call directly the PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup api. No need to call the rollup_dates here as its called per task.
24479 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'Y'
24480 THEN
24481   IF l_task_version_id IS NULL
24482   THEN
24483       l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(l_structure_version_id, l_pa_task_id);
24484   END IF;
24485   PA_PROJ_TASK_STRUC_PUB.rollup_dates(
24486              p_tasks_in             => l_tasks_out
24487             ,p_task_version_id      => l_task_version_id
24488             ,p_project_id           => l_project_id
24489             ,P_structure_version_id => l_structure_version_id
24490             ,x_msg_count            => l_msg_count
24491             ,x_msg_data             => l_msg_data
24492             ,x_return_status        => l_return_status
24493        );
24494 
24495         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24496         THEN
24497            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24498 
24499         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24500         THEN
24501           RAISE FND_API.G_EXC_ERROR;
24502         END IF;
24503 END IF;
24504 ---bug 4199694
24505 
24506    -- These globals have been intialized before they are used!
24507    PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id ); -- Bug 3106457
24508    /* Commented the code below for bug#3451073
24509    PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Bug 3106457 */
24510    /* Added the If condition Bug#3451073 */
24511    IF p_is_wp_seperate_from_fn = 'X'
24512    THEN
24513      PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Bug 3106457
24514    ELSE
24515      PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN   :=  p_is_wp_seperate_from_fn; -- Addded for bug#3451073
24516    END IF;
24517 
24518    PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id ); -- Bug 3106457
24519 
24520 IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
24521        ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
24522          PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
24523          PA_PROJECT_PUB.G_Published_version_exists = 'N')
24524 THEN
24525 
24526    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id -- Bug 3106457 p_pa_project_id
24527                                                            ,p_structure_version_id => l_structure_version_id ) ; -- Bug 3106457
24528      IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
24529           IF p_process_mode = 'ONLINE' THEN
24530 
24531              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
24532                                                        ,p_project_id           => l_project_id -- Bug 3106457 p_pa_project_id
24533                                                        ,p_structure_version_id => l_structure_version_id -- Bug 3106457 p_structure_version_id
24534                                                        ,x_return_status        => l_return_status
24535                                                        ,x_msg_count            => l_msg_count
24536                                                        ,x_msg_data             => l_msg_data ) ;
24537 
24538              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24539                   THEN
24540                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24541              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24542                   THEN
24543                     RAISE FND_API.G_EXC_ERROR;
24544              END IF;
24545           ELSIF p_process_mode = 'CONCURRENT' THEN
24546 
24547              PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context      => 'CONC_UPDATE'
24548                                                                  ,p_project_id           => l_project_id --Bug 3106457 p_pa_project_id
24549                                                                  ,p_structure_version_id => l_structure_version_id -- Bug 3106457 p_structure_version_id
24550                                                                  ,x_return_status        => l_return_status
24551                                                                  ,x_msg_count            => l_msg_count
24552                                                                  ,x_msg_data             => l_msg_data ) ;
24553 
24554              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24555                   THEN
24556                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24557              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24558                   THEN
24559                     RAISE FND_API.G_EXC_ERROR;
24560              END IF;
24561           END IF ;
24562      END IF ;
24563    END IF ;
24564 END IF;
24565 -- PA L Changes 3010538
24566 
24567 -- FP-M Bug # 3301192  update task
24568 /*
24569       PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_pa_project_id
24570                                               ,p_pm_task_reference => p_pm_task_reference
24571                                               ,p_out_task_id => l_d_task_id
24572                                               ,p_return_status => l_return_status);
24573 */
24574 
24575       IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN --Bug#3747312
24576 
24577         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
24578         THEN
24579           PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id --Bug#3747312 p_pa_project_id
24580                                               , p_structure_type       => l_structure_type -- Bug 10052686
24581                                               ,p_pm_task_reference => p_pm_task_reference
24582                                               ,p_out_task_id => l_d_task_id
24583                                               ,p_return_status => l_return_status);
24584              IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24585                   THEN
24586                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24587              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24588                   THEN
24589                     RAISE FND_API.G_EXC_ERROR;
24590              END IF;
24591 
24592         END IF;
24593 /*
24594           IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id) = 'Y') THEN
24595              l_d_struct_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_d_task_id);
24596           ELSE
24597              l_d_struct_ver_id :=  PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(p_pa_project_id, 'WORKPLAN');
24598           END IF;
24599 */ --we dont need this. The structure version id is derived.
24600 
24601       l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_structure_version_id
24602                                           ,p_task_id => l_d_task_id);
24603 
24604       pa_proj_task_struc_pub.parse_predecessor_import(p_string => p_pred_string
24605                                                      ,p_delimeter => p_pred_delimiter
24606                                                      ,p_task_version_Id => l_d_task_ver_id
24607                                                      ,x_return_status => l_return_status
24608                                                      ,x_msg_count => l_msg_count
24609                                                      ,x_msg_data  => l_msg_data);
24610 
24611            IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24612                   THEN
24613                      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24614              ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24615                   THEN
24616                     RAISE FND_API.G_EXC_ERROR;
24617              END IF;
24618             l_d_task_id := null;
24619    END IF;
24620   --bug 4218977, rtarway, unset this variable if not called from update_project
24621   if p_calling_api <> 'UPDATE_PROJECT' then
24622      G_OP_VALIDATE_FLAG := null;
24623   end if;
24624 EXCEPTION
24625 
24626     WHEN FND_API.G_EXC_ERROR THEN
24627 
24628         p_return_status := FND_API.G_RET_STS_ERROR ;
24629         --bug 4218977, rtarway, unset this variable if not called from update_project
24630         if p_calling_api <> 'UPDATE_PROJECT' then
24631           G_OP_VALIDATE_FLAG := null;
24632         end if;
24633         ROLLBACK TO Update_Task_pub;
24634 
24635         -- 4537865
24636         p_out_pa_task_id := NULL ;
24637         p_out_pm_task_reference := NULL ;
24638         -- 4537865
24639 
24640         FND_MSG_PUB.Count_And_Get
24641       (   p_count    =>  p_msg_count  ,
24642           p_data    =>  p_msg_data  );
24643 
24644     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
24645 
24646         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
24647         ROLLBACK TO Update_Task_pub;
24648         --bug 4218977, rtarway, unset this variable if not called from update_project
24649         if p_calling_api <> 'UPDATE_PROJECT' then
24650           G_OP_VALIDATE_FLAG := null;
24651         end if;
24652 
24653         -- 4537865
24654         p_out_pa_task_id := NULL ;
24655         p_out_pm_task_reference := NULL ;
24656         -- 4537865
24657 
24658         FND_MSG_PUB.Count_And_Get
24659       (   p_count    =>  p_msg_count  ,
24660           p_data    =>  p_msg_data  );
24661 
24662     WHEN OTHERS THEN
24663 
24664         ROLLBACK TO Update_Task_pub;
24665         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
24666         --bug 4218977, rtarway, unset this variable if not called from update_project
24667         if p_calling_api <> 'UPDATE_PROJECT' then
24668           G_OP_VALIDATE_FLAG := null;
24669         end if;
24670 
24671         -- 4537865
24672         p_out_pa_task_id := NULL ;
24673         p_out_pm_task_reference := NULL ;
24674         -- 4537865
24675 
24676         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
24677 
24678             FND_MSG_PUB.add_exc_msg
24679         ( p_pkg_name    => G_PKG_NAME
24680         , p_procedure_name  => l_api_name  );
24681 
24682         END IF;
24683 
24684         FND_MSG_PUB.Count_And_Get
24685       (   p_count    =>  p_msg_count  ,
24686           p_data    =>  p_msg_data  );
24687 
24688 END update_task;
24689 
24690 --------------------------------------------------------------------------------
24691 --Name:               execute_update_project
24692 --Type:               Procedure
24693 --Description:        This procedure can be used to update a project
24694 --                    using global PL/SQL tables.
24695 --
24696 --Called subprograms:
24697 --
24698 --
24699 --
24700 --History:
24701 --    15-AUG-1996        R. Krishnamurthy      Created
24702 --    05-DEC-1996   L. de Werker    Added initialisation of message list
24703 --    22-DEC-97    jwhite    - Added OUT-parameter p_workflow_started
24704 --             for workflow.
24705 --
24706 
24707 PROCEDURE execute_update_project
24708 ( p_api_version_number      IN  NUMBER
24709  ,p_commit        IN  VARCHAR2  := FND_API.G_FALSE
24710  ,p_init_msg_list                    IN  VARCHAR2  := FND_API.G_FALSE
24711  ,p_op_validate_flag  IN VARCHAR2 := 'Y'--added by rtarway, bug 4218977
24712  ,p_msg_count        OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24713  ,p_msg_data        OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24714  ,p_return_status                    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24715  ,p_workflow_started                  OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24716  ,p_pm_product_code                                 IN     VARCHAR2      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24717  ,p_pass_entire_structure       IN      VARCHAR2 := 'N'  -- Added for bug 3696234 : Bug 3627124
24718  ,p_update_mode    IN VARCHAR2 := 'PA_UPD_WBS_ATTR' -- rtarway, for DHI ER, BUG 4413568  --bug 4534919
24719  )
24720 IS
24721 
24722 l_api_name              CONSTANT    VARCHAR2(30):='Execute_update_project';
24723 l_return_status                     VARCHAR2(1) ;
24724 
24725 BEGIN
24726 
24727     SAVEPOINT execute_update_project_pub;
24728 
24729     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
24730                                p_api_version_number  ,
24731                                l_api_name         ,
24732                                G_PKG_NAME         )
24733     THEN
24734 
24735         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24736 
24737     END IF;
24738 
24739     --  Initialize the message table if requested.
24740 
24741     IF FND_API.TO_BOOLEAN( p_init_msg_list )
24742     THEN
24743 
24744   FND_MSG_PUB.initialize;
24745 
24746     END IF;
24747 
24748     p_return_status := FND_API.G_RET_STS_SUCCESS;
24749 
24750 -- Begin code to fix Bug # 4314797.
24751 
24752 -- In the publish workplan flow, we do not need to update key members so we can clear the global
24753 -- g_key_members_in_tbl table. Further, in the 'create project and publish workplan version' flow
24754 -- from MSP where the g_key_members_in_tbl would be populated during the create project flow
24755 -- we need to clear the g_key_members_in_tbl before calling the API: update_project() in the publish
24756 -- workplan flow to prevent errors.
24757 
24758         if nvl(p_pm_product_code,'WORKPLAN') = 'WORKPLAN' then
24759 
24760                 g_key_members_in_tbl.delete;
24761 
24762         end if;
24763 
24764 -- End code to fix Bug # 4314797.
24765 
24766 
24767     Update_Project (   p_api_version_number    => p_api_version_number,
24768         p_commit                  => FND_API.G_FALSE,
24769         p_return_status                               => l_return_status,
24770         p_msg_count                                   => p_msg_count,
24771         p_msg_data                                    => p_msg_data,
24772       p_workflow_started                => p_workflow_started,
24773         p_pm_product_code    => p_pm_product_code,
24774         p_op_validate_flag   => p_op_validate_flag, --Added by rtarway 4218977
24775         p_project_in                  => g_project_in_rec,
24776         p_project_out                              => g_project_out_rec,
24777         p_key_members                   => g_key_members_in_tbl,
24778         p_class_categories    => g_class_categories_in_tbl,
24779         p_tasks_in                  => g_tasks_in_tbl,
24780         p_tasks_out                              => g_tasks_out_tbl,
24781                         p_org_roles                     => g_org_roles_in_tbl
24782        ,p_pass_entire_structure  => p_pass_entire_structure  -- Added for bug 3696234 : Bug 3627124
24783       --bug 3096203
24784        ,p_ext_attr_tbl_in      => G_ext_attr_in_tbl
24785       --bug 3096203
24786 --FP M : deliverables
24787       ,p_deliverables_in          => G_deliverables_in_tbl
24788 --      ,p_deliverables_out         => G_deliverables_out_tbl
24789       ,p_deliverable_actions_in   => G_deliverable_actions_in_tbl
24790 --      ,p_deliverable_actions_out  => G_deliverable_actions_out_tbl
24791       ,p_update_mode              => p_update_mode --DHI ER bug 4413568
24792 --FP M : deliverables
24793      );
24794 
24795         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24796         THEN
24797 
24798                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24799 
24800         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24801         THEN
24802 
24803                         RAISE FND_API.G_EXC_ERROR;
24804         END IF;
24805 
24806 
24807         IF FND_API.to_boolean( p_commit )
24808   THEN
24809     COMMIT;
24810   END IF;
24811 
24812 
24813 EXCEPTION
24814 
24815         WHEN FND_API.G_EXC_ERROR
24816         THEN
24817         ROLLBACK TO execute_update_project_pub;
24818 
24819         p_return_status := FND_API.G_RET_STS_ERROR;
24820 
24821         -- 4537865
24822         p_workflow_started := NULL ;
24823         -- 4537865
24824 
24825         FND_MSG_PUB.Count_And_Get
24826       (   p_count    =>  p_msg_count  ,
24827           p_data    =>  p_msg_data  );
24828 
24829         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24830         THEN
24831         ROLLBACK TO execute_update_project_pub;
24832 
24833         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24834 
24835         -- 4537865
24836         p_workflow_started := NULL ;
24837         -- 4537865
24838 
24839         FND_MSG_PUB.Count_And_Get
24840       (   p_count    =>  p_msg_count  ,
24841           p_data    =>  p_msg_data  );
24842 
24843         WHEN OTHERS THEN
24844 
24845         ROLLBACK TO execute_update_project_pub;
24846 
24847         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24848 
24849         -- 4537865
24850         p_workflow_started := NULL ;
24851         -- 4537865
24852 
24853         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24854         THEN
24855 
24856         FND_MSG_PUB.add_exc_msg
24857         ( p_pkg_name    => G_PKG_NAME
24858         , p_procedure_name  => l_api_name
24859         , p_error_text    => SUBSTRB(SQLERRM, 1, 240) ); -- 4537865 Converted from SUBSTR to SUBSTRB
24860 
24861 
24862                 FND_MSG_PUB.add;
24863         END IF;
24864 
24865         FND_MSG_PUB.Count_And_Get
24866       (   p_count    =>  p_msg_count  ,
24867           p_data    =>  p_msg_data  );
24868 
24869 END execute_update_project;
24870 
24871 --------------------------------------------------------------------------------
24872 --Name:               delete_project
24873 --Type:               Procedure
24874 --Description:        This procedure can be used to delete a project
24875 --
24876 --
24877 --Called subprograms:
24878 --
24879 --
24880 --
24881 --History:
24882 --    19-AUG-1996        R. Krishnamurthy    Created
24883 --
24884 
24885 PROCEDURE delete_project
24886 ( p_api_version_number    IN  NUMBER
24887  ,p_commit      IN  VARCHAR2  := FND_API.G_FALSE
24888  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24889  ,p_msg_count      OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
24890  ,p_msg_data      OUT  NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24891  ,p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24892  ,p_pm_product_code    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24893  ,p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24894  ,p_pa_project_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24895  )
24896 IS
24897 
24898 l_return_status                        VARCHAR2(1); --bug 2471668
24899 l_project_id                           NUMBER;      --bug 2471668
24900 
24901 BEGIN
24902 
24903     -- 4537865 : Initialize Return status to success
24904     p_return_status := FND_API.G_RET_STS_SUCCESS;
24905 
24906         --bug 2471668.
24907         --We need to call this API here toget the corrct project id. This is also
24908         --called from the private API. But I discussed with Sakthi and he is ok to call this
24909         --twice once here and second time in private API. The idea is to make the advanced security changes
24910         --only in public APIs.
24911 
24912       PA_PROJECT_PVT.Convert_pm_projref_to_id
24913         (        p_pm_project_reference =>      p_pm_project_reference
24914                  ,  p_pa_project_id     =>      p_pa_project_id
24915                  ,  p_out_project_id    =>      l_project_id
24916                  ,  p_return_status     =>      l_return_status
24917         );
24918 
24919 
24920       IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
24921 
24922               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
24923       ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
24924               RAISE  FND_API.G_EXC_ERROR;
24925       END IF;
24926 
24927      PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id;  --bug 2471668 ( in the project context )
24928      --end of bug 2471668
24929 
24930 pa_project_pvt.delete_project1
24931 (p_api_version_number  => p_api_version_number
24932 ,p_commit              => p_commit  -- added for bug#16386039  --FND_API.G_FALSE--bug 3766967
24933 ,p_init_msg_list       => p_init_msg_list
24934 ,p_msg_count           => p_msg_count
24935 ,p_msg_data            => p_msg_data
24936 ,p_return_status       => p_return_status
24937 ,p_pm_product_code     => p_pm_product_code
24938 ,p_pm_project_reference => p_pm_project_reference
24939 ,p_pa_project_id        => p_pa_project_id);
24940 
24941 EXCEPTION
24942         WHEN FND_API.G_EXC_ERROR
24943         THEN
24944         p_return_status := FND_API.G_RET_STS_ERROR;
24945         p_msg_count := FND_MSG_PUB.count_msg; --  4537865
24946 
24947         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24948         THEN
24949         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24950         p_msg_count := FND_MSG_PUB.count_msg; --  4537865
24951 
24952         WHEN OTHERS THEN
24953         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24954         p_msg_count := FND_MSG_PUB.count_msg; --  4537865
24955 
24956 END delete_project;
24957 
24958 --------------------------------------------------------------------------------
24959 -- Name:    Check_Delete_Task_OK
24960 -- Type:    PL/SQL Procedure
24961 -- Decscription:  This procedure returns 'Y' if it is OK to delete a task.
24962 --      Otherwise, it returns 'N'.
24963 --
24964 -- Called Subprograms: Convert_Pm_Projref_To_Id
24965 --      , Convert_Pm_Taskref_To_Id
24966 -- History:  15-AUG-96  Created  jwhite
24967 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
24968 --            procedure.
24969 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
24970 --    20-NOV-96  Update  lwerker Changed handling of error messages
24971 --    02-DEC-96  Update  lwerker Removed Savepoint and Rollbacks
24972 
24973 PROCEDURE Check_Delete_Task_OK
24974 ( p_api_version_number    IN  NUMBER
24975 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
24976 , p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24977 , p_msg_count      OUT  NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24978 , p_msg_data      OUT  NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24979 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24980 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24981 , p_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24982 , p_pm_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24983 --Project Structure changes done for bug 2765115
24984 , p_structure_type              IN      VARCHAR2        := 'FINANCIAL'
24985 , p_task_version_id             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24986 --END Project Structure changes done for bug 2765115
24987 , p_delete_task_ok_flag    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
24988 )
24989 IS
24990 l_retrieve varchar2(1) ; --     4096218 Issues found during Unit Testing
24991 BEGIN
24992 
24993 -- 4537865 : Initialize return status to success
24994 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24995 
24996 --bug 2876703   --check_delete_task_ok
24997      IF p_structure_type = 'WORKPLAN' AND p_project_id IS NOT NULL AND p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24998      THEN
24999          IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_project_id ) = 'N' OR
25000             PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ) = 'N'
25001          THEN
25002          l_retrieve := 'Y' ;
25003             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
25004             THEN
25005                 pa_interface_utils_pub.map_new_amg_msg
25006                     ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
25007                   ,p_msg_attribute    => 'CHANGE'
25008                   ,p_resize_flag      => 'Y' -- 4096218 Changed from 'N' to 'Y'
25009                   ,p_msg_context      => 'GENERAL'
25010                   ,p_attribute1       => ''
25011                   ,p_attribute2       => ''
25012                   ,p_attribute3       => ''
25013                   ,p_attribute4       => ''
25014                   ,p_attribute5       => '');
25015             END IF;
25016             RAISE FND_API.G_EXC_ERROR;
25017          END IF;
25018      END IF;
25019 --bug 2876703
25020 pa_project_check_pvt.Check_Delete_Task_OK_pvt
25021 (p_api_version_number      => p_api_version_number
25022 ,p_init_msg_list          => p_init_msg_list
25023 ,p_return_status          => p_return_status
25024 ,p_msg_count            => p_msg_count
25025 ,p_msg_data              => p_msg_data
25026 ,p_project_id            => p_project_id
25027 ,p_pm_project_reference      => p_pm_project_reference
25028 ,p_task_id              => p_task_id
25029 ,p_pm_task_reference        => p_pm_task_reference
25030 --Project Structure changes done for bug 2765115
25031 ,p_structure_type                      => p_structure_type
25032 ,p_task_version_id                     => p_task_version_id
25033 --END Project Structure changes done for bug 2765115
25034 ,p_delete_task_ok_flag      => p_delete_task_ok_flag);
25035 
25036 --bug 2876703   Added ecxeption block to support the above code added for bug 2876703
25037 EXCEPTION
25038         WHEN FND_API.G_EXC_ERROR
25039         THEN
25040         p_return_status := FND_API.G_RET_STS_ERROR;
25041         IF l_retrieve = 'Y' THEN
25042             FND_MSG_PUB.Count_And_Get
25043                (p_encoded =>'F' ,   p_count    =>  p_msg_count  ,
25044                    p_data    =>  p_msg_data  );
25045         END IF;
25046 
25047         -- 4537865
25048         p_delete_task_ok_flag := NULL ;
25049         p_msg_count := FND_MSG_PUB.count_msg;
25050 
25051         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
25052         THEN
25053 
25054         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25055 
25056         -- 4537865
25057         p_delete_task_ok_flag := NULL ;
25058 
25059         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25060         THEN
25061                FND_MSG_PUB.add_exc_msg
25062                ( p_pkg_name            => G_PKG_NAME
25063                , p_procedure_name      => 'Check_Delete_Task_Ok');
25064         END IF;
25065 
25066         FND_MSG_PUB.Count_And_Get
25067         (p_count             =>      p_msg_count     ,
25068         p_data              =>      p_msg_data      );
25069 
25070         WHEN OTHERS THEN
25071         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25072 
25073         -- 4537865
25074         p_delete_task_ok_flag := NULL ;
25075 
25076         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25077         THEN
25078                FND_MSG_PUB.add_exc_msg
25079                ( p_pkg_name            => G_PKG_NAME
25080                , p_procedure_name      => 'Check_Delete_Task_Ok');
25081         END IF;
25082 
25083         FND_MSG_PUB.Count_And_Get
25084         (p_count             =>      p_msg_count     ,
25085         p_data              =>      p_msg_data      );
25086 
25087 --bug 2876703
25088 END Check_Delete_Task_Ok;
25089 
25090 
25091 --------------------------------------------------------------------------------
25092 -- Name:    Check_Add_Subtask_OK
25093 -- Type:    PL/SQL Procedure
25094 -- Decscription:  This procedure returns 'Y' if it is OK to add subtask, 'N' otherwise.
25095 --
25096 -- Called Subprograms: Convert_Pm_Projref_To_Id
25097 --      , Convert_Pm_Taskref_To_Id
25098 -- History:  15-AUG-96  Created  jwhite
25099 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
25100 --            procedure.
25101 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
25102 --    20-NOV-96  Update  lwerker Changed handling of error messages
25103 --    02-DEC-96  Update  lwerker Removed Savepoint and Rollbacks
25104 --
25105 
25106 PROCEDURE Check_Add_Subtask_OK
25107 (p_api_version_number    IN  NUMBER
25108 ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
25109 , p_return_status    OUT  NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
25110 , p_msg_count      OUT  NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
25111 , p_msg_data      OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
25112 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25113 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25114 , p_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25115 , p_pm_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25116 , p_add_subtask_ok_flag    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
25117 )
25118 IS
25119 
25120 BEGIN
25121 
25122 -- 4537865 : Initialize return status to success
25123 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25124 
25125 pa_project_check_pvt.Check_Add_Subtask_OK_pvt
25126 (p_api_version_number      => p_api_version_number
25127 ,p_init_msg_list          => p_init_msg_list
25128 ,p_return_status          => p_return_status
25129 ,p_msg_count            => p_msg_count
25130 ,p_msg_data              => p_msg_data
25131 ,p_project_id            => p_project_id
25132 ,p_pm_project_reference      => p_pm_project_reference
25133 ,p_task_id              => p_task_id
25134 ,p_pm_task_reference        => p_pm_task_reference
25135 ,p_add_subtask_ok_flag      => p_add_subtask_ok_flag);
25136 
25137 -- 4537865
25138 EXCEPTION
25139 
25140         WHEN OTHERS THEN
25141         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25142 
25143         p_add_subtask_ok_flag := NULL ;
25144 
25145         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25146         THEN
25147                FND_MSG_PUB.add_exc_msg
25148                ( p_pkg_name            => G_PKG_NAME
25149                , p_procedure_name      => 'Check_Add_Subtask_Ok');
25150         END IF;
25151 
25152         FND_MSG_PUB.Count_And_Get
25153         (p_count             =>      p_msg_count     ,
25154         p_data              =>      p_msg_data      );
25155 
25156 END Check_Add_Subtask_Ok;
25157 
25158 
25159 --------------------------------------------------------------------------------
25160 
25161 -- Name:    Check_Unique_Task_Reference
25162 -- Type:    PL/SQL Procedure
25163 -- Decscription:  This procedure returns 'Y' if the task reference does not exist,
25164 --       'N' otherwise.
25165 --
25166 -- Called Subprograms: Convert_Pm_Projref_To_Id
25167 --
25168 -- History:  15-AUG-96  Created  jwhite
25169 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
25170 --            procedure.
25171 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
25172 --    20-NOV-96  Update  lwerker Added use of cursor and changed handling of error messages
25173 --    02-DEC-96  Update  lwerker Removed Savepoint and Rollbacks
25174 --
25175 PROCEDURE Check_Unique_Task_Reference
25176 (p_api_version_number    IN  NUMBER
25177 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
25178 , p_return_status    OUT  NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
25179 , p_msg_count      OUT NOCOPY  NUMBER  /*Added the nocopy check for 4537865 */
25180 , p_msg_data      OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
25181 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25182 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25183 , p_pm_task_reference    IN  VARCHAR2
25184 , p_unique_task_ref_flag  OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
25185 )
25186 IS
25187 
25188 BEGIN
25189 
25190 -- 4537865 : Initialize return status to success
25191 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25192 
25193 pa_project_check_pvt.Check_Unique_Task_Ref_pvt
25194 (p_api_version_number      => p_api_version_number
25195 ,p_init_msg_list          => p_init_msg_list
25196 ,p_return_status          => p_return_status
25197 ,p_msg_count            => p_msg_count
25198 ,p_msg_data              => p_msg_data
25199 ,p_project_id            => p_project_id
25200 ,p_pm_project_reference      => p_pm_project_reference
25201 ,p_pm_task_reference        => p_pm_task_reference
25202 ,p_unique_task_ref_flag        => p_unique_task_ref_flag);
25203 
25204 -- 4537865
25205 EXCEPTION
25206 
25207         WHEN OTHERS THEN
25208         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25209 
25210         p_unique_task_ref_flag := NULL ;
25211 
25212         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25213         THEN
25214                FND_MSG_PUB.add_exc_msg
25215                ( p_pkg_name            => G_PKG_NAME
25216                , p_procedure_name      => 'Check_Unique_Task_Reference');
25217         END IF;
25218 
25219         FND_MSG_PUB.Count_And_Get
25220         (p_count             =>      p_msg_count     ,
25221         p_data              =>      p_msg_data      );
25222 
25223 END Check_Unique_Task_Reference;
25224 
25225 
25226 --------------------------------------------------------------------------------
25227 -- Name:    Check_Unique_Project_Reference
25228 -- Type:    PL/SQL Procedure
25229 -- Decscription:  This procedure returns 'Y' if the project reference does not exist
25230 --      , 'N' otherwise.
25231 --
25232 -- Called Subprograms: none.
25233 --
25234 -- History:  15-AUG-96  Created  jwhite
25235 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
25236 --            procedure.
25237 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
25238 --
25239 --    02-DEC-96  Update  lwerker Added use of cursor and changed handling of error messages
25240 --            Removed Savepoint and Rollbacks
25241 --
25242 PROCEDURE Check_Unique_Project_Reference
25243 (p_api_version_number    IN  NUMBER
25244 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
25245 , p_return_status    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25246 , p_msg_count      OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25247 , p_msg_data      OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25248 , p_pm_project_reference  IN  VARCHAR2
25249 , p_unique_project_ref_flag  OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25250 )
25251 IS
25252 
25253 BEGIN
25254 
25255 -- 4537865 : Initialize return status to success
25256 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25257 
25258 pa_project_check_pvt.Check_Unique_Project_Ref_pvt
25259 (p_api_version_number      => p_api_version_number
25260 ,p_init_msg_list          => p_init_msg_list
25261 ,p_return_status          => p_return_status
25262 ,p_msg_count            => p_msg_count
25263 ,p_msg_data              => p_msg_data
25264 ,p_pm_project_reference      => p_pm_project_reference
25265 ,p_unique_project_ref_flag    => p_unique_project_ref_flag);
25266 
25267 -- 4537865
25268 EXCEPTION
25269 
25270         WHEN OTHERS THEN
25271         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25272 
25273         p_unique_project_ref_flag := NULL ;
25274         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25275         THEN
25276                FND_MSG_PUB.add_exc_msg
25277                ( p_pkg_name            => G_PKG_NAME
25278                , p_procedure_name      => 'Check_Unique_Project_Reference');
25279         END IF;
25280 
25281         FND_MSG_PUB.Count_And_Get
25282         (p_count             =>      p_msg_count     ,
25283         p_data              =>      p_msg_data      );
25284 
25285 END Check_Unique_Project_Reference;
25286 
25287 --------------------------------------------------------------------------------
25288 -- Name:    Check_Delete_Project_OK
25289 -- Type:    PL/SQL Procedure
25290 -- Decscription:  This procedure returns 'Y' if the project can be deleted, 'N' otherwise.
25291 --
25292 -- Called Subprograms: Convert_Pm_Projref_To_Id
25293 --
25294 -- History:  15-AUG-96  Created  jwhite
25295 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
25296 --            procedure.
25297 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
25298 --    02-DEC-96  Update  lwerker Changed handling of error messages
25299 --            Removed Savepoint and Rollbacks
25300 --
25301 
25302 PROCEDURE Check_Delete_Project_OK
25303 (p_api_version_number    IN  NUMBER
25304 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
25305 , p_return_status    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
25306 , p_msg_count      OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
25307 , p_msg_data      OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
25308 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25309 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25310 , p_delete_project_ok_flag  OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
25311 )
25312 IS
25313 
25314 BEGIN
25315 
25316 -- 4537865 : Initialize return status to success
25317 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25318 
25319 pa_project_check_pvt.Check_Delete_Project_OK_pvt
25320 (p_api_version_number        => p_api_version_number
25321 ,p_init_msg_list            => p_init_msg_list
25322 ,p_return_status            => p_return_status
25323 ,p_msg_count              => p_msg_count
25324 ,p_msg_data                => p_msg_data
25325 ,p_project_id              => p_project_id
25326 ,p_pm_project_reference        => p_pm_project_reference
25327 ,p_delete_project_ok_flag      => p_delete_project_ok_flag);
25328 
25329 -- 4537865
25330 EXCEPTION
25331 
25332         WHEN OTHERS THEN
25333         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25334 
25335         p_delete_project_ok_flag := NULL ;
25336         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25337         THEN
25338                FND_MSG_PUB.add_exc_msg
25339                ( p_pkg_name            => G_PKG_NAME
25340                , p_procedure_name      => 'Check_Delete_Project_OK');
25341         END IF;
25342 
25343         FND_MSG_PUB.Count_And_Get
25344         (p_count             =>      p_msg_count     ,
25345         p_data              =>      p_msg_data      );
25346 
25347 END Check_Delete_Project_Ok;
25348 
25349 --------------------------------------------------------------------------------
25350 -- Name:    Check_Change_Parent_OK
25351 -- Type:    PL/SQL Procedure
25352 -- Decscription:  This procedure returns 'Y' if the task can be moved to another parent; 'N' otherwise.
25353 --
25354 -- Called Subprograms: Convert_Pm_Projref_To_Id
25355 --
25356 -- History:  15-AUG-96  Created  jwhite
25357 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
25358 --            procedure.
25359 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
25360 --    02-DEC-96  Update  lwerker  Changed handling of return values.
25361 --            Removed Savepoint and Rollbacks
25362 --
25363 PROCEDURE Check_Change_Parent_OK
25364 (p_api_version_number     IN  NUMBER
25365 , p_init_msg_list     IN  VARCHAR2  := FND_API.G_FALSE
25366 , p_return_status     OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25367 , p_msg_count       OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25368 , p_msg_data       OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25369 , p_project_id       IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25370 , p_pm_project_reference   IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25371 , p_task_id       IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25372 , p_pm_task_reference     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25373 , p_new_parent_task_id     IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25374 , p_pm_new_parent_task_reference IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25375 , p_change_parent_ok_flag   OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25376 )
25377 IS
25378 
25379 BEGIN
25380 
25381 -- 4537865 : Initialize return status to success
25382 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25383 
25384 pa_project_check_pvt.Check_Change_Parent_OK_pvt
25385 (p_api_version_number        => p_api_version_number
25386 ,p_init_msg_list            => p_init_msg_list
25387 ,p_return_status            => p_return_status
25388 ,p_msg_count              => p_msg_count
25389 ,p_msg_data                => p_msg_data
25390 ,p_project_id              => p_project_id
25391 ,p_pm_project_reference        => p_pm_project_reference
25392 ,p_task_id                => p_task_id
25393 ,p_pm_task_reference          => p_pm_task_reference
25394 ,p_new_parent_task_id        => p_new_parent_task_id
25395 ,p_pm_new_parent_task_reference  => p_pm_new_parent_task_reference
25396 ,p_change_parent_ok_flag      => p_change_parent_ok_flag);
25397 
25398 -- 4537865
25399 EXCEPTION
25400 
25401         WHEN OTHERS THEN
25402         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25403 
25404         p_change_parent_ok_flag := NULL ;
25405         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25406         THEN
25407                FND_MSG_PUB.add_exc_msg
25408                ( p_pkg_name            => G_PKG_NAME
25409                , p_procedure_name      => 'Check_Change_Parent_OK');
25410         END IF;
25411 
25412         FND_MSG_PUB.Count_And_Get
25413         (p_count             =>      p_msg_count     ,
25414         p_data              =>      p_msg_data      );
25415 
25416 END Check_Change_Parent_OK;
25417 
25418 --------------------------------------------------------------------------------
25419 -- Name:    Check_Change_Project_Org_OK
25420 -- Type:    PL/SQL Procedure
25421 -- Decscription:  This procedure returns 'Y' if the project organization can be changed, 'N' otherwise.
25422 --
25423 -- Called Subprograms: Convert_Pm_Projref_To_Id
25424 --
25425 -- History:  15-AUG-96  Created  jwhite
25426 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
25427 --            procedure.
25428 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
25429 --    02-DEC-96  Update  lwerker Changed error handling
25430 --            Removed Savepoint and Rollbacks
25431 --
25432 
25433 PROCEDURE Check_Change_Project_Org_OK
25434 (p_api_version_number    IN  NUMBER
25435 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
25436 , p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25437 , p_msg_count      OUT  NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25438 , p_msg_data      OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25439 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25440 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25441 , p_change_project_org_ok_flag  OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25442 )
25443 IS
25444 
25445 BEGIN
25446 
25447 -- 4537865 : Initialize return status to success
25448 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25449 
25450 pa_project_check_pvt.Check_Change_Proj_Org_OK_pvt
25451 (p_api_version_number        => p_api_version_number
25452 ,p_init_msg_list            => p_init_msg_list
25453 ,p_return_status            => p_return_status
25454 ,p_msg_count              => p_msg_count
25455 ,p_msg_data                => p_msg_data
25456 ,p_project_id              => p_project_id
25457 ,p_pm_project_reference        => p_pm_project_reference
25458 ,p_change_project_org_ok_flag    => p_change_project_org_ok_flag);
25459 
25460 -- 4537865
25461 EXCEPTION
25462 
25463         WHEN OTHERS THEN
25464         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25465 
25466         p_change_project_org_ok_flag := NULL ;
25467         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25468         THEN
25469                FND_MSG_PUB.add_exc_msg
25470                ( p_pkg_name            => G_PKG_NAME
25471                , p_procedure_name      => 'Check_Change_Project_Org_OK');
25472         END IF;
25473 
25474         FND_MSG_PUB.Count_And_Get
25475         (p_count             =>      p_msg_count     ,
25476         p_data              =>      p_msg_data      );
25477 
25478 END Check_Change_Project_Org_Ok;
25479 
25480 --------------------------------------------------------------------------------
25481 -- Name:    Check_Unique_Task_Number
25482 -- Type:    PL/SQL Procedure
25483 -- Decscription:  This procedure returns 'Y' if the task number does NOT already exist; 'N' otherwise.
25484 --
25485 -- Called Subprograms: Convert_Pm_Projref_To_Id
25486 --
25487 -- History:  15-AUG-96  Created  jwhite
25488 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
25489 --            procedure.
25490 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
25491 --    02-DEC-96  Update  lwerker  Changed handling of return values
25492 --            Removed Savepoint and Rollbacks
25493 --
25494 
25495 PROCEDURE Check_Unique_Task_Number
25496 (p_api_version_number    IN  NUMBER
25497 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
25498 , p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25499 , p_msg_count      OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
25500 , p_msg_data      OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25501 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25502 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25503 , p_task_number      IN  VARCHAR2
25504 , p_unique_task_number_flag  OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25505 )
25506 IS
25507 
25508 BEGIN
25509 
25510 -- 4537865 : Initialize return status to success
25511 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25512 
25513 pa_project_check_pvt.Check_Unique_Task_Number_pvt
25514 (p_api_version_number      => p_api_version_number
25515 ,p_init_msg_list          => p_init_msg_list
25516 ,p_return_status          => p_return_status
25517 ,p_msg_count            => p_msg_count
25518 ,p_msg_data              => p_msg_data
25519 ,p_project_id            => p_project_id
25520 ,p_pm_project_reference      => p_pm_project_reference
25521 ,p_task_number            => p_task_number
25522 ,p_unique_task_number_flag    => p_unique_task_number_flag);
25523 
25524 -- 4537865
25525 EXCEPTION
25526 
25527         WHEN OTHERS THEN
25528         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25529 
25530         p_unique_task_number_flag := NULL ;
25531         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25532         THEN
25533                FND_MSG_PUB.add_exc_msg
25534                ( p_pkg_name            => G_PKG_NAME
25535                , p_procedure_name      => 'Check_Unique_Task_Number');
25536         END IF;
25537 
25538         FND_MSG_PUB.Count_And_Get
25539         (p_count             =>      p_msg_count     ,
25540         p_data              =>      p_msg_data      );
25541 
25542 END Check_Unique_Task_Number;
25543 
25544 --------------------------------------------------------------------------------
25545 -- Name:    Check_Task_Number_Change_Ok
25546 -- Type:    PL/SQL Procedure
25547 -- Decscription:  This procedure returns 'Y' if it is OK to change a LOWEST task.
25548 --      Otherwise, it returns 'N'.
25549 --
25550 -- Called Subprograms: Convert_Pm_Projref_To_Id
25551 --      , Convert_Pm_Taskref_To_Id
25552 -- History:  15-AUG-96  Created  jwhite
25553 --    23-AUG-96  Update  jwhite  replaced local convert procedure with library
25554 --            procedure.
25555 --    26-AUG-96  Update  jwhite  Applied latest messaging standards.
25556 --    02-DEC-96  Update  lwerker  Changed the way return values are handled
25557 --            Removed Savepoint and Rollbacks
25558 
25559 PROCEDURE Check_Task_Number_Change_Ok
25560 ( p_api_version_number    IN  NUMBER
25561 , p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
25562 , p_return_status    OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25563 , p_msg_count      OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
25564 , p_msg_data      OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25565 , p_project_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25566 , p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25567 , p_task_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25568 , p_pm_task_reference    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25569 , p_task_number_change_Ok_flag  OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25570 )
25571 IS
25572 
25573 BEGIN
25574 
25575 -- 4537865 : Initialize return status to success
25576 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25577 
25578 pa_project_check_pvt.Check_Task_Numb_Change_Ok_Pvt
25579 (p_api_version_number        => p_api_version_number
25580 ,p_init_msg_list            => p_init_msg_list
25581 ,p_return_status            => p_return_status
25582 ,p_msg_count              => p_msg_count
25583 ,p_msg_data                => p_msg_data
25584 ,p_project_id              => p_project_id
25585 ,p_pm_project_reference        => p_pm_project_reference
25586 ,p_task_id                => p_task_id
25587 ,p_pm_task_reference          => p_pm_task_reference
25588 ,p_task_number_change_Ok_flag    => p_task_number_change_Ok_flag);
25589 
25590 -- 4537865
25591 EXCEPTION
25592 
25593         WHEN OTHERS THEN
25594         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25595 
25596         p_task_number_change_Ok_flag := NULL ;
25597         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25598         THEN
25599                FND_MSG_PUB.add_exc_msg
25600                ( p_pkg_name            => G_PKG_NAME
25601                , p_procedure_name      => 'Check_Task_Number_Change_Ok');
25602         END IF;
25603 
25604         FND_MSG_PUB.Count_And_Get
25605         (p_count             =>      p_msg_count     ,
25606         p_data              =>      p_msg_data      );
25607 
25608 END Check_Task_Number_Change_Ok;
25609 
25610 --------------------------------------------------------------------------------
25611 -- Name:    approve_project
25612 -- Type:    PL/SQL Procedure
25613 -- Decscription:  This procedure will set the project status to approved.
25614 --
25615 -- Called Subprograms:
25616 --
25617 -- History:  27-FEB-97  L. de Werker  Created
25618 --
25619 --
25620 PROCEDURE approve_project
25621 ( p_api_version_number    IN  NUMBER
25622  ,p_commit      IN  VARCHAR2  := FND_API.G_FALSE
25623  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
25624  ,p_msg_count      OUT NOCOPY  NUMBER /*Added the nocopy check for 4537865 */
25625  ,p_msg_data      OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25626  ,p_return_status    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25627  ,p_pm_product_code    IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25628  ,p_pm_project_reference  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25629  ,p_pa_project_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25630  )
25631 IS
25632 
25633 BEGIN
25634 
25635 -- 4537865 : Initialize return status to success
25636 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25637 
25638 pa_project_pvt.approve_project1
25639 ( p_api_version_number => p_api_version_number
25640 , p_commit             => FND_API.G_FALSE--bug 3766967
25641 , p_init_msg_list      => p_init_msg_list
25642 , p_msg_count          => p_msg_count
25643 , p_msg_data           => p_msg_data
25644 , p_return_status      => p_return_status
25645 , p_pm_product_code    => p_pm_product_code
25646 , p_pm_project_reference => p_pm_project_reference
25647 , p_pa_project_id        => p_pa_project_id);
25648 
25649 -- 4537865
25650 EXCEPTION
25651 
25652         WHEN OTHERS THEN
25653         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25654 
25655         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25656         THEN
25657                FND_MSG_PUB.add_exc_msg
25658                ( p_pkg_name            => G_PKG_NAME
25659                , p_procedure_name      => 'approve_project');
25660         END IF;
25661 
25662         FND_MSG_PUB.Count_And_Get
25663         (p_count             =>      p_msg_count     ,
25664         p_data              =>      p_msg_data      );
25665 
25666 END approve_project;
25667 
25668 --------------------------------------------------------------------------------
25669 -- Name:    load_tasks
25670 -- Type:    PL/SQL Procedure
25671 -- Decscription:  This is a wrapper API for the load_task procedure.
25672 --
25673 -- Called Subprograms: load_task
25674 --
25675 -- History:  05-JUN-02  hyau  Created
25676 --          22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
25677 --                                        dependency_type and lag days to tasks and create dependencies.
25678 --          10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
25679 --                                        dependency_type and lag days with parameters: pred_string and pred_delimiter.
25680 --
25681 --
25682 --          01-MAR-2004 Rakesh Raghavan   Copied Venkat's FP-M changes from load_task API to load_tasks API.
25683 --          05-APR-2004 Rakesh Raghavan   Progress Management Changes. Bug # 3420093.
25684 --          29-NOV-2004 djoseph           Bug 4024659: Changed the function substr to substrb for l_task_name and l_long_task_name.
25685 --                                        Changes tagged by bug number.
25686 
25687 PROCEDURE load_tasks
25688 (
25689    p_api_version_number      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25690   ,p_init_msg_list      IN  VARCHAR2  := FND_API.G_FALSE
25691   ,p_return_status      OUT NOCOPY  VARCHAR2 /*Added the nocopy check for 4537865 */
25692   ,p_pm_task_reference      IN  PA_VC_1000_150
25693   ,p_pa_task_id                         IN      PA_NUM_1000_NUM
25694   ,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
25695   ,p_long_task_name      IN  PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25696   ,p_pa_task_number                     IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25697   ,p_task_description      IN  PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25698   ,p_task_start_date      IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25699   ,p_task_completion_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25700   ,p_pm_parent_task_reference    IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25701   ,p_pa_parent_task_id      IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25702   ,p_address_id        IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25703   ,p_carrying_out_organization_id  IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25704   ,p_service_type_code      IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25705   ,p_task_manager_person_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25706   ,p_billable_flag      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25707   ,p_chargeable_flag      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25708   ,p_ready_to_bill_flag      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25709   ,p_ready_to_distribute_flag    IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25710   ,p_limit_to_txn_controls_flag    IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25711   ,p_labor_bill_rate_org_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25712   ,p_labor_std_bill_rate_schdl    IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25713   ,p_labor_schedule_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25714   ,p_labor_schedule_discount    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25715   ,p_nl_bill_rate_org_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25716   ,p_nl_std_bill_rate_schdl    IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25717   ,p_nl_schedule_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25718   ,p_nl_schedule_discount    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25719   ,p_labor_cost_multiplier_name    IN  PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25720   ,p_cost_ind_rate_sch_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25721   ,p_rev_ind_rate_sch_id          IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25722   ,p_inv_ind_rate_sch_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25723   ,p_cost_ind_sch_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25724   ,p_rev_ind_sch_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25725   ,p_inv_ind_sch_fixed_date    IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25726   ,p_labor_sch_type      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25727   ,p_nl_sch_type      IN  PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25728   ,p_actual_start_date                  IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25729   ,p_actual_finish_date                 IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25730   ,p_early_start_date                   IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25731   ,p_early_finish_date                  IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25732   ,p_late_start_date                    IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25733   ,p_late_finish_date                   IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25734   ,p_scheduled_start_date               IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25735   ,p_scheduled_finish_date              IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25736   ,p_attribute_category      IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25737   ,p_attribute1        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25738   ,p_attribute2        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25739   ,p_attribute3        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25740   ,p_attribute4        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25741   ,p_attribute5        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25742   ,p_attribute6        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25743   ,p_attribute7        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25744   ,p_attribute8        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25745   ,p_attribute9        IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25746   ,p_attribute10      IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25747   ,p_allow_cross_charge_flag            IN      PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25748   ,p_project_rate_date                  IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25749   ,p_project_rate_type                  IN      PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25750   ,p_cc_process_labor_flag              IN      PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25751   ,p_labor_tp_schedule_id               IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25752   ,p_labor_tp_fixed_date                IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25753   ,p_cc_process_nl_flag                 IN      PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25754   ,p_nl_tp_schedule_id                  IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25755   ,p_nl_tp_fixed_date                   IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25756   ,p_receive_project_invoice_flag       IN      PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25757   ,p_work_type_id                       IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25758   ,p_emp_bill_rate_schedule_id          IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25759   ,p_job_bill_rate_schedule_id          IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25760 --Sakthi  MCB
25761  ,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)
25762  ,p_taskfunc_cost_rate_type             IN      PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25763  ,p_taskfunc_cost_rate_date             IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25764 --Sakthi  MCB
25765  ,p_display_sequence            IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25766  ,p_wbs_level                    IN      PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25767  ,p_milestone                     IN    PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25768  ,p_duration                      IN    PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25769  ,p_duration_unit                 IN    PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25770  ,p_login_user_name               IN    PA_VC_1000_150:= PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25771  ,p_critical_flag                 IN    PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25772  ,p_sub_project_id                IN    PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25773  ,p_progress_status_code           IN    PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25774  ,p_progress_comments             IN    PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25775  ,p_progress_asof_date            IN    PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25776  ,p_progress_description             IN      PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25777  ,p_predecessors                  IN    PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25778  ,p_priority_code                       IN      PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25779  ,p_wbs_number                           IN      PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25780  ,p_estimated_start_date                IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25781  ,p_estimated_finish_date               IN      PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25782  ,p_estimate_to_complete              IN    PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25783  ,p_language                      IN    VARCHAR2 default 'US'
25784  ,p_delimiter                     IN    VARCHAR2 default ','
25785  ,p_structure_version_id          IN    NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25786 -- ,p_calling_mode                  IN    VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25787 --Margaret bug 2683364
25788  ,P_OBLIGATION_START_DATE   IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25789  ,P_OBLIGATION_FINISH_DATE  IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25790  ,P_BASELINE_START_DATE     IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25791  ,P_BASELINE_FINISH_DATE    IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25792  ,P_CLOSED_DATE             IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25793  ,P_WQ_UOM_CODE             IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25794  ,P_WQ_ITEM_CODE            IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25795  ,P_STATUS_CODE             IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25796  ,P_WF_STATUS_CODE          IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25797  ,P_PM_SOURCE_CODE          IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25798  ,P_INC_PROJ_PROGRESS_FLAG  IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25799  ,P_LINK_TASK_FLAG          IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25800  ,P_CALENDAR_ID             IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25801  ,P_PLANNED_EFFORT          IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25802  ,P_PLANNED_WORK_QUANTITY   IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25803  ,P_TASK_TYPE               IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25804 --Margaret end bug 2683364
25805  ,p_labor_disc_reason_code       IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25806  ,p_non_labor_disc_reason_code   IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25807 --PA L changes -- bug 2872708  --load_tasks
25808  ,p_retirement_cost_flag          IN PA_VC_1000_10             := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25809  ,p_cint_eligible_flag            IN PA_VC_1000_10             := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25810  ,p_cint_stop_date       IN PA_DATE_1000_DATE         := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25811 --end PA L changes -- bug 2872708
25812 -- FP-M Bug # 3301192
25813  ,p_pred_string                   IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25814 -- ,p_pred_delimiter                IN PA_VC_1000_10   := PA_VC_1000_10(',')
25815  ,p_pred_delimiter                IN PA_VC_1000_10   := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25816  -- FP M : Deliverable
25817  -- ,p_deliverable                 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25818   ,p_deliverable                 IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --SMUKKA
25819   ,p_deliverable_id               IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)  -- 3661788 Added IN Parameter
25820 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25821 -- FP M changes begin (venkat)
25822   ,p_base_percent_comp_deriv_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25823   ,p_sch_tool_tsk_type_code       IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25824   ,p_constraint_type_code         IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25825   ,p_constraint_date          IN PA_DATE_1000_DATE:= PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25826   ,p_free_slack                   IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25827   ,p_total_slack                  IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25828   ,p_effort_driven_flag           IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25829   ,p_level_assignments_flag       IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25830   ,p_invoice_method           IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25831   ,p_customer_id                  IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25832   ,p_gen_etc_source_code          IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25833 -- FP M changes end (venkat)
25834 -- FP M changes start (Mapping )
25835 --  ,p_financial_task_flag        IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25836 --  ,p_mapped_task_id             IN NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25837 --  ,p_mapped_task_reference      IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25838 -- FP M changes end (Mapping )
25839    ,p_financial_task_flag        IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)    --SMukka
25840    ,p_mapped_task_id             IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --SMukka
25841    ,p_mapped_task_reference      IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)  --SMukka
25842 
25843 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
25844   ,p_ext_act_duration            IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25845   ,p_ext_remain_duration         IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25846   ,p_ext_sch_duration            IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25847 -- (end venkat) new params for bug #3450684 -------------------------------------------------
25848 
25849 -- Progress Management Changes. Bug # 3420093.
25850   ,p_etc_effort                 IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25851   ,p_percent_complete           IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25852 -- Progress Management Changes. Bug # 3420093.
25853 
25854 )
25855 IS
25856 l_api_name              CONSTANT    VARCHAR2(30):='Load_Tasks';
25857 l_return_status                     VARCHAR2(1):= 'S';
25858 l_responsibility_id                 NUMBER;
25859 
25860 
25861 --hyau added for debugging unhandled exception stage
25862   l_stage           VARCHAR2(250);
25863   l_counter           NUMBER;
25864 
25865   l_task_name_flag    VARCHAR2(1) := 'Y';
25866   l_long_task_name_flag  VARCHAR2(1) := 'Y';
25867   l_pa_task_number_flag VARCHAR2(1) := 'Y';
25868   l_task_description_flag   VARCHAR2(1) := 'Y';
25869   l_task_start_date_flag    VARCHAR2(1) := 'Y';
25870   l_task_completion_date_flag    VARCHAR2(1) := 'Y';
25871   l_pm_parent_task_ref_flag    VARCHAR2(1) := 'Y';
25872   l_pa_parent_task_id_flag    VARCHAR2(1) := 'Y';
25873   l_address_id_flag                      VARCHAR2(1) := 'Y';
25874   l_carrying_out_org_id_flag    VARCHAR2(1) := 'Y';
25875   l_service_type_code_flag               VARCHAR2(1) := 'Y';
25876   l_task_manager_person_id_flag          VARCHAR2(1) := 'Y';
25877   l_billable_flag_flag                   VARCHAR2(1) := 'Y';
25878   l_chargeable_flag_flag    VARCHAR2(1) := 'Y';
25879   l_ready_to_bill_flag_flag    VARCHAR2(1) := 'Y';
25880   l_ready_to_dist_flag_flag    VARCHAR2(1) := 'Y';
25881   l_limit_to_txn_cnt_flag_flag    VARCHAR2(1) := 'Y';
25882   l_labor_bill_rate_org_id_flag    VARCHAR2(1) := 'Y';
25883   l_labor_std_bill_rate_flag    VARCHAR2(1) := 'Y';
25884   l_labor_schd_fixed_date_flag    VARCHAR2(1) := 'Y';
25885   l_labor_schd_discount_flag    VARCHAR2(1) := 'Y';
25886   l_nl_bill_rate_org_id_flag    VARCHAR2(1) := 'Y';
25887   l_nl_std_bill_rate_schdl_flag    VARCHAR2(1) := 'Y';
25888   l_nl_schedule_fixed_date_flag    VARCHAR2(1) := 'Y';
25889   l_nl_schedule_discount_flag    VARCHAR2(1) := 'Y';
25890   l_labor_cost_mult_name_flag    VARCHAR2(1) := 'Y';
25891   l_cost_ind_rate_sch_id_flag    VARCHAR2(1) := 'Y';
25892   l_rev_ind_rate_sch_id_flag    VARCHAR2(1) := 'Y';
25893   l_inv_ind_rate_sch_id_flag    VARCHAR2(1) := 'Y';
25894   l_cost_ind_sch_fixed_date_flag    VARCHAR2(1) := 'Y';
25895   l_rev_ind_sch_fixed_date_flag    VARCHAR2(1) := 'Y';
25896   l_inv_ind_sch_fixed_date_flag    VARCHAR2(1) := 'Y';
25897   l_labor_sch_type_flag    VARCHAR2(1) := 'Y';
25898   l_nl_sch_type_flag    VARCHAR2(1) := 'Y';
25899   l_actual_start_date_flag    VARCHAR2(1) := 'Y';
25900   l_actual_finish_date_flag    VARCHAR2(1) := 'Y';
25901   l_early_start_date_flag    VARCHAR2(1) := 'Y';
25902   l_early_finish_date_flag    VARCHAR2(1) := 'Y';
25903   l_late_start_date_flag    VARCHAR2(1) := 'Y';
25904   l_late_finish_date_flag    VARCHAR2(1) := 'Y';
25905   l_scheduled_start_date_flag    VARCHAR2(1) := 'Y';
25906   l_scheduled_finish_date_flag    VARCHAR2(1) := 'Y';
25907   l_attribute_category_flag    VARCHAR2(1) := 'Y';
25908   l_attribute1_flag    VARCHAR2(1) := 'Y';
25909   l_attribute2_flag    VARCHAR2(1) := 'Y';
25910   l_attribute3_flag    VARCHAR2(1) := 'Y';
25911   l_attribute4_flag    VARCHAR2(1) := 'Y';
25912   l_attribute5_flag    VARCHAR2(1) := 'Y';
25913   l_attribute6_flag    VARCHAR2(1) := 'Y';
25914   l_attribute7_flag    VARCHAR2(1) := 'Y';
25915   l_attribute8_flag    VARCHAR2(1) := 'Y';
25916   l_attribute9_flag    VARCHAR2(1) := 'Y';
25917   l_attribute10_flag    VARCHAR2(1) := 'Y';
25918   l_allow_cross_charge_flag_flag    VARCHAR2(1) := 'Y';
25919   l_project_rate_date_flag    VARCHAR2(1) := 'Y';
25920   l_project_rate_type_flag    VARCHAR2(1) := 'Y';
25921   l_cc_process_labor_flag_flag    VARCHAR2(1) := 'Y';
25922   l_labor_tp_schedule_id_flag    VARCHAR2(1) := 'Y';
25923   l_labor_tp_fixed_date_flag    VARCHAR2(1) := 'Y';
25924   l_cc_process_nl_flag_flag    VARCHAR2(1) := 'Y';
25925   l_nl_tp_schedule_id_flag    VARCHAR2(1) := 'Y';
25926   l_nl_tp_fixed_date_flag    VARCHAR2(1) := 'Y';
25927   l_receive_proj_inv_flag_flag    VARCHAR2(1) := 'Y';
25928   l_work_type_id_flag    VARCHAR2(1) := 'Y';
25929   l_emp_bill_rate_schd_id_flag    VARCHAR2(1) := 'Y';
25930   l_job_bill_rate_schd_id_flag    VARCHAR2(1) := 'Y';
25931   l_non_lab_std_bill_rt_sch_flag    VARCHAR2(1) := 'Y';
25932   l_taskfunc_cost_rate_type_flag    VARCHAR2(1) := 'Y';
25933   l_taskfunc_cost_rate_date_flag    VARCHAR2(1) := 'Y';
25934   l_display_sequence_flag    VARCHAR2(1) := 'Y';
25935   l_wbs_level_flag    VARCHAR2(1) := 'Y';
25936 --bug 2683364
25937   l_obligation_start_date_flag       VARCHAR2(1) := 'Y';
25938   l_obligation_finish_date_flag      VARCHAR2(1) := 'Y';
25939   l_baseline_start_date_flag          VARCHAR2(1) := 'Y';
25940   l_baseline_finish_date_flag         VARCHAR2(1) := 'Y';
25941   l_closed_date_flag                   VARCHAR2(1) := 'Y';
25942   l_wq_uom_code_flag                  VARCHAR2(1) := 'Y';
25943   l_wq_item_code_flag                 VARCHAR2(1) := 'Y';
25944   l_status_code_flag                  VARCHAR2(1) := 'Y';
25945   l_wf_status_code_flag               VARCHAR2(1) := 'Y';
25946   l_pm_source_code_flag               VARCHAR2(1) := 'Y';
25947   l_inc_proj_progress_flag_flag       VARCHAR2(1) := 'Y';
25948   l_link_task_flag_flag                VARCHAR2(1) := 'Y';
25949   l_calendar_id_flag                  VARCHAR2(1) := 'Y';
25950   l_planned_effort_flag                VARCHAR2(1) := 'Y';
25951   l_planned_work_quantity_flag         VARCHAR2(1) := 'Y';
25952   l_task_type_flag                     VARCHAR2(1) := 'Y';
25953 
25954 --bug 2744729, 2740565
25955   l_estimated_start_date_flag       VARCHAR2(1) := 'Y';
25956   l_estimated_finish_date_flag      VARCHAR2(1) := 'Y';
25957   l_milestone_flag_flag             VARCHAR2(1) := 'Y';
25958   l_critical_flag_flag              VARCHAR2(1) := 'Y';
25959   l_priority_code_flag              VARCHAR2(1) := 'Y';
25960 --bug 2744729, 2740565
25961 
25962   l_labor_disc_reason_code_flag              VARCHAR2(1) := 'Y';
25963   l_nl_disc_reason_code_flag              VARCHAR2(1) := 'Y';
25964 
25965   --bug 2872708
25966   l_retirement_cost_flag_flag                  VARCHAR2(1) := 'Y';
25967   l_cint_eligible_flag_flag                    VARCHAR2(1) := 'Y';
25968   l_cint_stop_date_flag                        VARCHAR2(1) := 'Y';
25969   --bug 2872708
25970 
25971   -- FP-M Bug # 3301192
25972   l_pred_string_flag               VARCHAR2(1) := 'Y';
25973   l_pred_delimiter_flag                 VARCHAR2(1) := 'Y';
25974 
25975 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25976 -- FP M changes begin (venkat)
25977   l_base_prct_comp_drv_code_flag    VARCHAR2(1) := 'Y';
25978   l_sch_tool_tsk_type_code_flag         VARCHAR2(1) := 'Y';
25979   l_constraint_type_code_flag           VARCHAR2(1) := 'Y';
25980   l_constraint_date_flag                VARCHAR2(1) := 'Y';
25981   l_free_slack_flag                     VARCHAR2(1) := 'Y';
25982   l_total_slack_flag                    VARCHAR2(1) := 'Y';
25983   l_effort_driven_flag_flag             VARCHAR2(1) := 'Y';
25984   l_level_assignments_flag_flag         VARCHAR2(1) := 'Y';
25985   l_invoice_method_flag                 VARCHAR2(1) := 'Y';
25986   l_customer_id_flag                    VARCHAR2(1) := 'Y';
25987   l_gen_etc_source_code_flag            VARCHAR2(1) := 'Y';
25988 -- FP M changes end (venkat)
25989 
25990 -- (begin venkat) new params for bug #3450684 -------------
25991   l_ext_act_duration_flag       VARCHAR2(1) := 'Y';
25992   l_ext_remain_duration_flag        VARCHAR2(1) := 'Y';
25993   l_ext_sch_duration_flag       VARCHAR2(1) := 'Y';
25994 -- (end venkat) new params for bug #3450684 --------------
25995 --SMukka
25996    l_financial_task_flag         VARCHAR2(1) := 'Y';
25997    l_mapped_task_id_flag         VARCHAR2(1) := 'Y';
25998    l_mapped_task_reference_flag  VARCHAR2(1) := 'Y';
25999    l_deliverable_flag            VARCHAR2(1) := 'Y';
26000 
26001 -- Progress Management Changes. Bug # 3420093.
26002   l_etc_effort_flag                 VARCHAR2(1) := 'Y';
26003   l_percent_complete_flag           VARCHAR2(1) := 'Y';
26004 -- Progress Management Changes. Bug # 3420093.
26005 
26006  -- Bug 6193314 .
26007   l_task_name              VARCHAR2(240)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26008   l_long_task_name                          VARCHAR2(240)       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26009   l_pa_task_number             VARCHAR2(100)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26010   l_task_description        VARCHAR2(250)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26011   l_task_start_date            DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26012   l_task_completion_date      DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26013   l_pm_parent_task_reference    VARCHAR2(25)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26014   l_pa_parent_task_id        NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26015   l_address_id              NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26016   l_carrying_out_organization_id  NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26017   l_service_type_code        VARCHAR2(30)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26018   l_task_manager_person_id      NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26019   l_billable_flag            VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26020   l_chargeable_flag            VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26021   l_ready_to_bill_flag        VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26022   l_ready_to_distribute_flag    VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26023   l_limit_to_txn_controls_flag    VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26024   l_labor_bill_rate_org_id      NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26025   l_labor_std_bill_rate_schdl    VARCHAR2(20)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26026   l_labor_schedule_fixed_date    DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26027   l_labor_schedule_discount      NUMBER        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26028   l_nl_bill_rate_org_id          NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26029   l_nl_std_bill_rate_schdl      VARCHAR2(30)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26030   l_nl_schedule_fixed_date      DATE        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26031   l_nl_schedule_discount      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26032   l_labor_cost_multiplier_name    VARCHAR2(20)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26033   l_cost_ind_rate_sch_id      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26034   l_rev_ind_rate_sch_id          NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26035   l_inv_ind_rate_sch_id          NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26036   l_cost_ind_sch_fixed_date      DATE         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26037   l_rev_ind_sch_fixed_date      DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26038   l_inv_ind_sch_fixed_date      DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26039   l_labor_sch_type            VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26040   l_nl_sch_type                VARCHAR2(1)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26041   l_actual_start_date               DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26042   l_actual_finish_date              DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26043   l_early_start_date                DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26044   l_early_finish_date               DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26045   l_late_start_date                 DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26046   l_late_finish_date                DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26047   l_scheduled_start_date            DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26048   l_scheduled_finish_date           DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26049   l_attribute_category        VARCHAR2(30)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26050   l_attribute1              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26051   l_attribute2              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26052   l_attribute3              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26053   l_attribute4              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26054   l_attribute5              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26055   l_attribute6              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26056   l_attribute7              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26057   l_attribute8              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26058   l_attribute9              VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26059   l_attribute10                VARCHAR2(150)  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26060   l_allow_cross_charge_flag          VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26061   l_project_rate_date              DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26062   l_project_rate_type              VARCHAR2(30)   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26063   l_cc_process_labor_flag         VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26064   l_labor_tp_schedule_id          NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26065   l_labor_tp_fixed_date           DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26066   l_cc_process_nl_flag             VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26067   l_nl_tp_schedule_id              NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26068   l_nl_tp_fixed_date               DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26069   l_receive_project_invoice_flag   VARCHAR2(1)    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26070   l_work_type_id                  NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26071   l_emp_bill_rate_schedule_id        NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26072   l_job_bill_rate_schedule_id        NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26073   l_non_lab_std_bill_rt_sch_id    NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26074   l_taskfunc_cost_rate_type       VARCHAR2(30)   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26075   l_taskfunc_cost_rate_date       DATE            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26076   l_display_sequence          NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26077   l_wbs_level                  NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26078 
26079  l_obligation_start_date               DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26080  l_obligation_finish_date              DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26081  l_baseline_start_date                 DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26082  l_baseline_finish_date                DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26083  l_closed_date                         DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26084  l_wq_uom_code                         VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26085  l_wq_item_code                        VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26086  l_status_code                         VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26087  l_wf_status_code                      VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26088  l_pm_source_code                      VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26089  l_inc_proj_progress_flag              VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26090  l_link_task_flag                      VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26091  l_calendar_id                         NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26092  l_planned_effort                      NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26093  l_planned_work_quantity               NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26094  l_task_type                           NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26095 
26096 --bug 2744729, 2740565
26097  l_estimated_start_date               DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26098  l_estimated_finish_date              DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26099  l_priority_code                      VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26100  l_milestone_flag                     VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26101  l_critical_flag                      VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26102  --bug 2744729, 2740565
26103 
26104  l_labor_disc_reason_code                         VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26105  l_non_labor_disc_reason_code                        VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26106 
26107   --bug 2872708
26108   l_retirement_cost_flag                VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26109   l_cint_eligible_flag                  VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ;
26110   l_cint_stop_date                      DATE    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26111   --bug 2872708
26112 
26113  -- FP-M Bug # 3301192
26114  l_pred_string               VARCHAR2(4000)       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26115  l_pred_delimiter                VARCHAR2(1)      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26116 
26117 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
26118 -- FP M changes begin (venkat)
26119   l_base_percent_comp_deriv_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26120   l_sch_tool_tsk_type_code       VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26121   l_constraint_type_code         VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26122   l_constraint_date              DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26123   l_free_slack                   NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26124   l_total_slack                  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26125   l_effort_driven_flag           VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26126   l_level_assignments_flag       VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26127   l_invoice_method               VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26128   l_customer_id                  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26129   l_gen_etc_source_code          VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26130 -- FP M changes end (venkat)
26131 -- (Begin venkat) Bug #3450684 ---------------------------------------------------
26132   l_ext_act_duration            NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26133   l_ext_remain_duration         NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26134   l_ext_sch_duration            NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26135 -- (End venkat) Bug #3450684   ---------------------------------------------------
26136  --SMUKKA
26137    l_financial_task_fl          VARCHAR2(1):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26138    l_mapped_task_id             NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26139    l_mapped_task_reference      VARCHAR2(150):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26140    l_deliverable                VARCHAR2(4000):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26141    l_deliverable_id             NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM; -- 3661788 Added local variable
26142 
26143 -- Progress Management Changes. Bug # 3420093.
26144   l_etc_effort                 NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26145   l_percent_complete           NUMBER  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26146 -- Progress Management Changes. Bug # 3420093.
26147 
26148 BEGIN
26149 
26150 -- 4537865 : Initialize return status to success
26151 p_return_status := FND_API.G_RET_STS_SUCCESS ;
26152 
26153   -- Transferring all array variable to Global plsql table
26154   if (G_tasks_tbl_count = 0) then
26155     G_tasks_tbl_count := 1;
26156   end if;
26157 
26158   l_stage := '1';
26159 
26160 -- hyau validating what parameters are passed in.
26161   if p_task_name.count = 1 and p_task_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26162       l_task_name_flag := 'N';
26163   end if;
26164 
26165   if p_long_task_name.count = 1 and p_long_task_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26166       l_long_task_name_flag := 'N';
26167   end if;
26168 
26169   if p_pa_task_number.count = 1 and p_pa_task_number(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26170       l_pa_task_number_flag := 'N';
26171   end if;
26172 
26173   if p_task_description.count = 1 and p_task_description(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26174       l_task_description_flag := 'N';
26175   end if;
26176 
26177   if p_task_start_date.count = 1 and p_task_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26178       l_task_start_date_flag := 'N';
26179   end if;
26180 
26181   if p_task_completion_date.count = 1 and p_task_completion_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26182       l_task_completion_date_flag := 'N';
26183   end if;
26184 
26185   if p_pm_parent_task_reference.count = 1 and p_pm_parent_task_reference(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26186       l_pm_parent_task_ref_flag := 'N';
26187   end if;
26188 
26189   if p_pa_parent_task_id.count = 1 and p_pa_parent_task_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26190       l_pa_parent_task_id_flag := 'N';
26191   end if;
26192 
26193   if p_address_id.count = 1 and p_address_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26194       l_address_id_flag := 'N';
26195   end if;
26196 
26197   if p_carrying_out_organization_id.count = 1 and p_carrying_out_organization_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26198       l_carrying_out_org_id_flag := 'N';
26199   end if;
26200 
26201   if p_service_type_code.count = 1 and p_service_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26202       l_service_type_code_flag := 'N';
26203   end if;
26204 
26205   if p_task_manager_person_id.count = 1 and p_task_manager_person_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26206       l_task_manager_person_id_flag := 'N';
26207   end if;
26208 
26209   if p_billable_flag.count = 1 and p_billable_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26210       l_billable_flag_flag := 'N';
26211   end if;
26212 
26213   if p_chargeable_flag.count = 1 and p_chargeable_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26214       l_chargeable_flag_flag := 'N';
26215   end if;
26216 
26217   if p_ready_to_bill_flag.count = 1 and p_ready_to_bill_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26218       l_ready_to_bill_flag_flag := 'N';
26219   end if;
26220 
26221   if p_ready_to_distribute_flag.count = 1 and p_ready_to_distribute_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26222       l_ready_to_dist_flag_flag := 'N';
26223   end if;
26224 
26225   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
26226       l_limit_to_txn_cnt_flag_flag := 'N';
26227   end if;
26228 
26229   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
26230       l_labor_bill_rate_org_id_flag := 'N';
26231   end if;
26232 
26233   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
26234       l_labor_std_bill_rate_flag := 'N';
26235   end if;
26236 
26237   if p_labor_schedule_fixed_date.count = 1 and p_labor_schedule_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26238       l_labor_schd_fixed_date_flag := 'N';
26239   end if;
26240 
26241   if p_labor_schedule_discount.count = 1 and p_labor_schedule_discount(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26242       l_labor_schd_discount_flag := 'N';
26243   end if;
26244 
26245   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
26246       l_nl_bill_rate_org_id_flag := 'N';
26247   end if;
26248 
26249   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
26250       l_nl_std_bill_rate_schdl_flag := 'N';
26251   end if;
26252 
26253   if p_nl_schedule_fixed_date.count = 1 and p_nl_schedule_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26254       l_nl_schedule_fixed_date_flag := 'N';
26255   end if;
26256 
26257   if p_nl_schedule_discount.count = 1 and p_nl_schedule_discount(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26258       l_nl_schedule_discount_flag := 'N';
26259   end if;
26260 
26261   if p_labor_cost_multiplier_name.count = 1 and p_labor_cost_multiplier_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26262       l_labor_cost_mult_name_flag := 'N';
26263   end if;
26264 
26265   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
26266       l_cost_ind_rate_sch_id_flag := 'N';
26267   end if;
26268 
26269   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
26270       l_rev_ind_rate_sch_id_flag := 'N';
26271   end if;
26272 
26273   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
26274       l_inv_ind_rate_sch_id_flag := 'N';
26275   end if;
26276 
26277   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
26278       l_cost_ind_sch_fixed_date_flag := 'N';
26279   end if;
26280 
26281   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
26282       l_rev_ind_sch_fixed_date_flag := 'N';
26283   end if;
26284 
26285   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
26286       l_inv_ind_sch_fixed_date_flag := 'N';
26287   end if;
26288 
26289   if p_labor_sch_type.count = 1 and p_labor_sch_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26290       l_labor_sch_type_flag := 'N';
26291   end if;
26292 
26293   if p_nl_sch_type.count = 1 and p_nl_sch_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26294       l_nl_sch_type_flag := 'N';
26295   end if;
26296 
26297   if p_actual_start_date.count = 1 and p_actual_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26298       l_actual_start_date_flag := 'N';
26299   end if;
26300 
26301   if p_actual_finish_date.count = 1 and p_actual_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26302       l_actual_finish_date_flag := 'N';
26303   end if;
26304 
26305   if p_early_start_date.count = 1 and p_early_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26306       l_early_start_date_flag := 'N';
26307   end if;
26308 
26309   if p_early_finish_date.count = 1 and p_early_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26310       l_early_finish_date_flag := 'N';
26311   end if;
26312 
26313   if p_late_start_date.count = 1 and p_late_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26314       l_late_start_date_flag := 'N';
26315   end if;
26316 
26317   if p_late_finish_date.count = 1 and p_late_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26318       l_late_finish_date_flag := 'N';
26319   end if;
26320 
26321   if p_scheduled_start_date.count = 1 and p_scheduled_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26322       l_scheduled_start_date_flag := 'N';
26323   end if;
26324 
26325   if p_scheduled_finish_date.count = 1 and p_scheduled_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26326       l_scheduled_finish_date_flag := 'N';
26327   end if;
26328 
26329   if p_attribute_category.count = 1 and p_attribute_category(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26330       l_attribute_category_flag := 'N';
26331   end if;
26332   if p_attribute1.count = 1 and p_attribute1(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26333       l_attribute1_flag := 'N';
26334   end if;
26335   if p_attribute2.count = 1 and p_attribute2(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26336       l_attribute2_flag := 'N';
26337   end if;
26338   if p_attribute3.count = 1 and p_attribute3(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26339       l_attribute3_flag := 'N';
26340   end if;
26341   if p_attribute4.count = 1 and p_attribute4(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26342       l_attribute4_flag := 'N';
26343   end if;
26344   if p_attribute5.count = 1 and p_attribute5(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26345       l_attribute5_flag := 'N';
26346   end if;
26347   if p_attribute6.count = 1 and p_attribute6(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26348       l_attribute6_flag := 'N';
26349   end if;
26350   if p_attribute7.count = 1 and p_attribute7(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26351       l_attribute7_flag := 'N';
26352   end if;
26353   if p_attribute8.count = 1 and p_attribute8(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26354       l_attribute8_flag := 'N';
26355   end if;
26356   if p_attribute9.count = 1 and p_attribute9(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26357       l_attribute9_flag := 'N';
26358   end if;
26359   if p_attribute10.count = 1 and p_attribute10(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26360       l_attribute10_flag := 'N';
26361   end if;
26362 
26363   if p_allow_cross_charge_flag.count = 1 and p_allow_cross_charge_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26364       l_allow_cross_charge_flag_flag := 'N';
26365   end if;
26366 
26367   if p_project_rate_date.count = 1 and p_project_rate_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26368       l_project_rate_date_flag := 'N';
26369   end if;
26370 
26371   if p_project_rate_type.count = 1 and p_project_rate_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26372       l_project_rate_type_flag := 'N';
26373   end if;
26374 
26375   if p_cc_process_labor_flag.count = 1 and p_cc_process_labor_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26376       l_cc_process_labor_flag_flag := 'N';
26377   end if;
26378 
26379   if p_labor_tp_schedule_id.count = 1 and p_labor_tp_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26380       l_labor_tp_schedule_id_flag := 'N';
26381   end if;
26382 
26383   if p_labor_tp_fixed_date.count = 1 and p_labor_tp_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26384       l_labor_tp_fixed_date_flag := 'N';
26385   end if;
26386 
26387   if p_cc_process_nl_flag.count = 1 and p_cc_process_nl_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26388       l_cc_process_nl_flag_flag := 'N';
26389   end if;
26390   if p_nl_tp_schedule_id.count = 1 and p_nl_tp_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26391       l_nl_tp_schedule_id_flag := 'N';
26392   end if;
26393 
26394   if p_nl_tp_fixed_date.count = 1 and p_nl_tp_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26395       l_nl_tp_fixed_date_flag := 'N';
26396   end if;
26397 
26398   if p_receive_project_invoice_flag.count = 1 and p_receive_project_invoice_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26399       l_receive_proj_inv_flag_flag := 'N';
26400   end if;
26401 
26402   if p_work_type_id.count = 1 and p_work_type_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26403       l_work_type_id_flag := 'N';
26404   end if;
26405 
26406   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
26407       l_emp_bill_rate_schd_id_flag := 'N';
26408   end if;
26409   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
26410       l_job_bill_rate_schd_id_flag := 'N';
26411   end if;
26412   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
26413       l_non_lab_std_bill_rt_sch_flag := 'N';
26414   end if;
26415 
26416   if p_taskfunc_cost_rate_type.count = 1 and p_taskfunc_cost_rate_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26417       l_taskfunc_cost_rate_type_flag := 'N';
26418   end if;
26419   if p_taskfunc_cost_rate_date.count = 1 and p_taskfunc_cost_rate_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26420       l_taskfunc_cost_rate_date_flag := 'N';
26421   end if;
26422   if p_display_sequence.count = 1 and p_display_sequence(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26423       l_display_sequence_flag := 'N';
26424   end if;
26425   if p_wbs_level.count = 1 and p_wbs_level(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26426       l_wbs_level_flag := 'N';
26427   end if;
26428 
26429   if p_obligation_start_date.count = 1 and p_obligation_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26430       l_obligation_start_date_flag := 'N';
26431   end if;
26432 
26433  if p_obligation_finish_date.count = 1 and p_obligation_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26434       l_obligation_finish_date_flag := 'N';
26435   end if;
26436 
26437   if p_baseline_start_date.count = 1 and p_baseline_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26438       l_baseline_start_date_flag := 'N';
26439   end if;
26440 
26441   if p_baseline_finish_date.count = 1 and p_baseline_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26442       l_baseline_finish_date_flag := 'N';
26443   end if;
26444 
26445  if p_closed_date.count = 1 and p_closed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26446       l_closed_date_flag := 'N';
26447   end if;
26448 
26449   if p_wq_uom_code.count = 1 and p_wq_uom_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26450       l_wq_uom_code_flag := 'N';
26451   end if;
26452 
26453   if p_wq_item_code.count = 1 and p_wq_item_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26454       l_wq_item_code_flag := 'N';
26455   end if;
26456   if p_status_code.count = 1 and p_status_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26457       l_status_code_flag := 'N';
26458   end if;
26459 
26460   if p_wf_status_code.count = 1 and p_wf_status_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26461       l_wf_status_code_flag := 'N';
26462   end if;
26463 
26464   if p_pm_source_code.count = 1 and p_pm_source_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26465       l_pm_source_code_flag := 'N';
26466   end if;
26467 
26468   if p_inc_proj_progress_flag.count = 1 and p_inc_proj_progress_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26469       l_inc_proj_progress_flag_flag := 'N';
26470   end if;
26471 
26472   if p_link_task_flag.count = 1 and p_link_task_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26473       l_link_task_flag_flag := 'N';
26474   end if;
26475 
26476 
26477   if p_calendar_id.count = 1 and p_calendar_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26478       l_calendar_id_flag := 'N';
26479   end if;
26480 
26481   if p_planned_effort.count = 1 and p_planned_effort(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26482       l_planned_effort_flag := 'N';
26483   end if;
26484 
26485   if p_planned_work_quantity.count = 1 and p_planned_work_quantity(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26486       l_planned_work_quantity_flag := 'N';
26487   end if;
26488 
26489   if p_task_type.count = 1 and p_task_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26490       l_task_type_flag := 'N';
26491   end if;
26492 
26493 --bug 2744729, 2740565
26494   if p_estimated_start_date.count = 1 and p_estimated_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26495       l_estimated_start_date_flag := 'N';
26496   end if;
26497 
26498   if p_estimated_finish_date.count = 1 and p_estimated_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26499       l_estimated_finish_date_flag := 'N';
26500   end if;
26501 
26502   if p_priority_code.count = 1 and p_priority_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26503       l_priority_code_flag := 'N';
26504   end if;
26505 
26506   if p_milestone.count = 1 and p_milestone(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26507       l_milestone_flag_flag := 'N';
26508   end if;
26509 
26510   if p_critical_flag.count = 1 and p_critical_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26511       l_critical_flag_flag := 'N';
26512   end if;
26513 --bug 2744729, 2740565
26514 
26515   if p_labor_disc_reason_code.count = 1 and p_labor_disc_reason_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26516       l_labor_disc_reason_code_flag := 'N';
26517   end if;
26518 
26519   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
26520       l_nl_disc_reason_code_flag := 'N';
26521   end if;
26522 
26523 --bug 2872708
26524   if p_retirement_cost_flag.count = 1 and p_retirement_cost_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26525       l_retirement_cost_flag_flag := 'N';
26526   end if;
26527 
26528   if p_cint_eligible_flag.count = 1 and p_cint_eligible_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26529       l_cint_eligible_flag_flag := 'N';
26530   end if;
26531 
26532   if p_cint_stop_date.count = 1 and p_cint_stop_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26533       l_cint_stop_date_flag := 'N';
26534   end if;
26535 --bug 2872708
26536 
26537 -- FP-M Bug # 3301192
26538   if p_pred_string.count = 1 and p_pred_string(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26539       l_pred_string_flag := 'N';
26540   end if;
26541 
26542   if p_pred_delimiter.count = 1 and p_pred_delimiter(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26543       l_pred_delimiter_flag := 'N';
26544   end if;
26545 
26546 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
26547 -- FP M changes begin (venkat)
26548 
26549   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
26550       l_base_prct_comp_drv_code_flag := 'N';
26551   end if;
26552 
26553   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
26554       l_sch_tool_tsk_type_code_flag := 'N';
26555   end if;
26556 
26557   if p_constraint_type_code.count = 1 and p_constraint_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26558       l_constraint_type_code_flag := 'N';
26559   end if;
26560 
26561   if p_constraint_date.count = 1 and p_constraint_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26562       l_constraint_date_flag := 'N';
26563   end if;
26564 
26565   if p_free_slack.count = 1 and p_free_slack(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26566       l_free_slack_flag := 'N';
26567   end if;
26568 
26569   if p_total_slack.count = 1 and p_total_slack(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26570       l_total_slack_flag := 'N';
26571   end if;
26572 
26573   if p_effort_driven_flag.count = 1 and p_effort_driven_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26574       l_effort_driven_flag_flag := 'N';
26575   end if;
26576 
26577 
26578   if p_level_assignments_flag.count = 1 and p_level_assignments_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26579       l_level_assignments_flag_flag := 'N';
26580   end if;
26581 
26582   if p_invoice_method.count = 1 and p_invoice_method(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26583       l_invoice_method_flag := 'N';
26584   end if;
26585 
26586   if p_customer_id.count = 1 and p_customer_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26587       l_customer_id_flag := 'N';
26588   end if;
26589 
26590 
26591   if p_gen_etc_source_code.count = 1 and p_gen_etc_source_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26592       l_gen_etc_source_code_flag := 'N';
26593   end if;
26594 
26595 -- FP M changes end (venkat)
26596 
26597 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
26598 
26599   if p_ext_act_duration.count = 1 and p_ext_act_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26600       l_ext_act_duration_flag := 'N';
26601   end if;
26602 
26603   if p_ext_remain_duration.count = 1 and p_ext_remain_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26604       l_ext_remain_duration_flag := 'N';
26605   end if;
26606 
26607   if p_ext_sch_duration.count = 1 and p_ext_sch_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26608       l_ext_sch_duration_flag := 'N';
26609   end if;
26610 
26611 -- (End venkat) new params for bug #3450684 -------------------------------------------------
26612 --SMukka
26613    if p_financial_task_flag.count = 1 and p_financial_task_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26614        l_financial_task_flag := 'N';
26615    end if;
26616 
26617    if p_mapped_task_id.count = 1 and p_mapped_task_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26618        l_mapped_task_id_flag := 'N';
26619    end if;
26620 
26621    if p_mapped_task_reference.count = 1 and p_mapped_task_reference(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26622        l_mapped_task_reference_flag := 'N';
26623    end if;
26624 
26625    -- 3661788 added condition for deliverable_id
26626 
26627    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
26628        l_deliverable_flag := 'N';
26629    end if;
26630 
26631    if p_etc_effort.count = 1 and p_etc_effort(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26632        l_etc_effort_flag := 'N';
26633    end if;
26634 
26635    if p_percent_complete.count = 1 and p_percent_complete(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26636        l_percent_complete_flag := 'N';
26637    end if;
26638 
26639 --error_msg('BEFORE THE FOR LOOP ');
26640 
26641   FOR i in 1..1000 LOOP
26642 
26643     if p_pm_task_reference(i) is null then
26644 --       G_tasks_tbl_count := i;
26645 --       error_msg('INSIDE THE LOOP  '||G_tasks_tbl_count);
26646        return;
26647     end if;
26648 
26649     if l_task_name_flag = 'N' then
26650         l_task_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26651     else
26652         /*Start of changes for bug 4024659*/
26653 
26654         --l_task_name := substr(p_task_name(i),1,20);
26655 
26656          l_task_name := substrb(p_task_name(i),1,240); -- Bug 6193314 . Changed to 240 from 20
26657 
26658         /*End of changes for bug 4024659*/
26659     end if;
26660 
26661     if l_long_task_name_flag = 'N' then
26662         l_long_task_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26663     else
26664         /*Start of changes for bug 4024659*/
26665 
26666         --l_long_task_name := substr(p_long_task_name(i),1,240);
26667 
26668         l_long_task_name := substrb(p_long_task_name(i),1,240);
26669 
26670         /*End of changes for bug 4024659*/
26671     end if;
26672 
26673     if l_pa_task_number_flag = 'N' then
26674         l_pa_task_number := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26675     else
26676        l_pa_task_number := substrb(p_pa_task_number(i),1,100); -- Modified for bug 6193314
26677     end if;
26678 
26679     if l_task_description_flag = 'N' then
26680         l_task_description := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26681     else
26682         l_task_description :=  substrb(p_task_description(i),1,250); -- Fix for Bug # 4513291.
26683     end if;
26684 
26685     if l_task_start_date_flag = 'N' then
26686         l_task_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26687     else
26688         l_task_start_date := p_task_start_date(i);
26689     end if;
26690 
26691     if l_task_completion_date_flag = 'N' then
26692         l_task_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26693     else
26694         l_task_completion_date := p_task_completion_date(i);
26695     end if;
26696 
26697     if l_pm_parent_task_ref_flag = 'N' then
26698         l_pm_parent_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26699     else
26700         l_pm_parent_task_reference := p_pm_parent_task_reference(i);
26701     end if;
26702 
26703     if l_pa_parent_task_id_flag = 'N' then
26704         l_pa_parent_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26705     else
26706         l_pa_parent_task_id := p_pa_parent_task_id(i);
26707     end if;
26708 
26709     if l_address_id_flag = 'N' then
26710         l_address_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26711     else
26712         l_address_id := p_address_id(i);
26713     end if;
26714 
26715     if l_carrying_out_org_id_flag = 'N' then
26716         l_carrying_out_organization_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26717     else
26718         l_carrying_out_organization_id := p_carrying_out_organization_id(i);
26719     end if;
26720 
26721     if l_service_type_code_flag = 'N' then
26722         l_service_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26723     else
26724         l_service_type_code := p_service_type_code(i);
26725     end if;
26726 
26727     if l_task_manager_person_id_flag = 'N' then
26728         l_task_manager_person_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26729     else
26730         l_task_manager_person_id := p_task_manager_person_id(i);
26731     end if;
26732  -- Added NVL for bug 4737984
26733     if l_billable_flag_flag = 'N' then
26734         l_billable_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26735     else
26736         l_billable_flag := NVL(p_billable_flag(i),PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
26737     end if;
26738  -- Added NVL for bug 4737984
26739     if l_chargeable_flag_flag = 'N' then
26740         l_chargeable_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26741     else
26742         l_chargeable_flag := NVL(p_chargeable_flag(i),PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
26743     end if;
26744 
26745     if l_ready_to_bill_flag_flag = 'N' then
26746         l_ready_to_bill_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26747     else
26748         l_ready_to_bill_flag := p_ready_to_bill_flag(i);
26749     end if;
26750 
26751     if l_ready_to_dist_flag_flag = 'N' then
26752         l_ready_to_distribute_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26753     else
26754         l_ready_to_distribute_flag := p_ready_to_distribute_flag(i);
26755     end if;
26756 
26757     if l_limit_to_txn_cnt_flag_flag = 'N' then
26758         l_limit_to_txn_controls_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26759     else
26760         l_limit_to_txn_controls_flag := p_limit_to_txn_controls_flag(i);
26761     end if;
26762 
26763     if l_labor_bill_rate_org_id_flag = 'N' then
26764         l_labor_bill_rate_org_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26765     else
26766         l_labor_bill_rate_org_id := p_labor_bill_rate_org_id(i);
26767     end if;
26768 
26769     if l_labor_std_bill_rate_flag = 'N' then
26770         l_labor_std_bill_rate_schdl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26771     else
26772         l_labor_std_bill_rate_schdl := p_labor_std_bill_rate_schdl(i);
26773     end if;
26774 
26775     if l_labor_schd_fixed_date_flag = 'N' then
26776         l_labor_schedule_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26777     else
26778         l_labor_schedule_fixed_date := p_labor_schedule_fixed_date(i);
26779     end if;
26780 
26781     if l_labor_schd_discount_flag = 'N' then
26782         l_labor_schedule_discount := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26783     else
26784         l_labor_schedule_discount := p_labor_schedule_discount(i);
26785     end if;
26786 
26787     if l_nl_bill_rate_org_id_flag = 'N' then
26788         l_nl_bill_rate_org_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26789     else
26790         l_nl_bill_rate_org_id := p_nl_bill_rate_org_id(i);
26791     end if;
26792 
26793     if l_nl_std_bill_rate_schdl_flag = 'N' then
26794         l_nl_std_bill_rate_schdl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26795     else
26796         l_nl_std_bill_rate_schdl := p_nl_std_bill_rate_schdl(i);
26797     end if;
26798 
26799     if l_nl_schedule_fixed_date_flag = 'N' then
26800         l_nl_schedule_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26801     else
26802         l_nl_schedule_fixed_date := p_nl_schedule_fixed_date(i);
26803     end if;
26804 
26805     if l_nl_schedule_discount_flag = 'N' then
26806         l_nl_schedule_discount := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26807     else
26808         l_nl_schedule_discount := p_nl_schedule_discount(i);
26809     end if;
26810 
26811     if l_labor_cost_mult_name_flag = 'N' then
26812         l_labor_cost_multiplier_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26813     else
26814         l_labor_cost_multiplier_name := p_labor_cost_multiplier_name(i);
26815     end if;
26816 
26817     if l_cost_ind_rate_sch_id_flag = 'N' then
26818         l_cost_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26819     else
26820         l_cost_ind_rate_sch_id := p_cost_ind_rate_sch_id(i);
26821     end if;
26822 
26823     if l_rev_ind_rate_sch_id_flag = 'N' then
26824         l_rev_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26825     else
26826         l_rev_ind_rate_sch_id := p_rev_ind_rate_sch_id(i);
26827     end if;
26828 
26829     if l_inv_ind_rate_sch_id_flag = 'N' then
26830         l_inv_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26831     else
26832         l_inv_ind_rate_sch_id := p_inv_ind_rate_sch_id(i);
26833     end if;
26834 
26835     if l_cost_ind_sch_fixed_date_flag = 'N' then
26836         l_cost_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26837     else
26838         l_cost_ind_sch_fixed_date := p_cost_ind_sch_fixed_date(i);
26839     end if;
26840 
26841     if l_rev_ind_sch_fixed_date_flag = 'N' then
26842         l_rev_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26843     else
26844         l_rev_ind_sch_fixed_date := p_rev_ind_sch_fixed_date(i);
26845     end if;
26846 
26847     if l_inv_ind_sch_fixed_date_flag = 'N' then
26848         l_inv_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26849     else
26850         l_inv_ind_sch_fixed_date := p_inv_ind_sch_fixed_date(i);
26851     end if;
26852 
26853     if l_labor_sch_type_flag = 'N' then
26854         l_labor_sch_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26855     else
26856         l_labor_sch_type := p_labor_sch_type(i);
26857     end if;
26858 
26859     if l_nl_sch_type_flag = 'N' then
26860         l_nl_sch_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26861     else
26862         l_nl_sch_type := p_nl_sch_type(i);
26863     end if;
26864 
26865     if l_actual_start_date_flag = 'N' then
26866         l_actual_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26867     else
26868         l_actual_start_date := p_actual_start_date(i);
26869     end if;
26870 
26871     if l_actual_finish_date_flag = 'N' then
26872         l_actual_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26873     else
26874         l_actual_finish_date := p_actual_finish_date(i);
26875     end if;
26876 
26877     if l_early_start_date_flag = 'N' then
26878         l_early_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26879     else
26880         l_early_start_date := p_early_start_date(i);
26881     end if;
26882 
26883     if l_early_finish_date_flag = 'N' then
26884         l_early_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26885     else
26886         l_early_finish_date := p_early_finish_date(i);
26887     end if;
26888 
26889     if l_late_start_date_flag = 'N' then
26890         l_late_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26891     else
26892         l_late_start_date := p_late_start_date(i);
26893     end if;
26894 
26895     if l_late_finish_date_flag = 'N' then
26896         l_late_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26897     else
26898         l_late_finish_date := p_late_finish_date(i);
26899     end if;
26900 
26901     if l_scheduled_start_date_flag = 'N' then
26902         l_scheduled_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26903     else
26904         l_scheduled_start_date := p_scheduled_start_date(i);
26905     end if;
26906 
26907     if l_scheduled_finish_date_flag = 'N' then
26908         l_scheduled_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26909     else
26910         l_scheduled_finish_date := p_scheduled_finish_date(i);
26911     end if;
26912 
26913     if l_attribute_category_flag = 'N' then
26914         l_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26915     else
26916         l_attribute_category := p_attribute_category(i);
26917     end if;
26918 
26919     if l_attribute1_flag = 'N' then
26920         l_attribute1 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26921     else
26922         l_attribute1 := p_attribute1(i);
26923     end if;
26924 
26925     if l_attribute2_flag = 'N' then
26926         l_attribute2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26927     else
26928         l_attribute2 := p_attribute2(i);
26929     end if;
26930 
26931     if l_attribute3_flag = 'N' then
26932         l_attribute3 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26933     else
26934         l_attribute3 := p_attribute3(i);
26935     end if;
26936 
26937     if l_attribute4_flag = 'N' then
26938         l_attribute4 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26939     else
26940         l_attribute4 := p_attribute4(i);
26941     end if;
26942 
26943     if l_attribute5_flag = 'N' then
26944         l_attribute5 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26945     else
26946         l_attribute5 := p_attribute5(i);
26947     end if;
26948 
26949     if l_attribute6_flag = 'N' then
26950         l_attribute6 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26951     else
26952         l_attribute6 := p_attribute6(i);
26953     end if;
26954 
26955     if l_attribute7_flag = 'N' then
26956         l_attribute7 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26957     else
26958         l_attribute7 := p_attribute7(i);
26959     end if;
26960 
26961     if l_attribute8_flag = 'N' then
26962         l_attribute8 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26963     else
26964         l_attribute8 := p_attribute8(i);
26965     end if;
26966 
26967     if l_attribute9_flag = 'N' then
26968         l_attribute9 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26969     else
26970         l_attribute9 := p_attribute9(i);
26971     end if;
26972 
26973     if l_attribute10_flag = 'N' then
26974         l_attribute10 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26975     else
26976         l_attribute10 := p_attribute10(i);
26977     end if;
26978 
26979     if l_allow_cross_charge_flag_flag = 'N' then
26980         l_allow_cross_charge_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26981     else
26982         l_allow_cross_charge_flag := p_allow_cross_charge_flag(i);
26983     end if;
26984 
26985     if l_project_rate_date_flag = 'N' then
26986         l_project_rate_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26987     else
26988         l_project_rate_date := p_project_rate_date(i);
26989     end if;
26990 
26991     if l_project_rate_type_flag = 'N' then
26992         l_project_rate_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26993     else
26994         l_project_rate_type := p_project_rate_type(i);
26995     end if;
26996 
26997     if l_allow_cross_charge_flag_flag = 'N' then
26998         l_allow_cross_charge_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26999     else
27000         l_allow_cross_charge_flag := p_allow_cross_charge_flag(i);
27001     end if;
27002 
27003     if l_cc_process_labor_flag_flag = 'N' then
27004         l_cc_process_labor_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27005     else
27006         l_cc_process_labor_flag := p_cc_process_labor_flag(i);
27007     end if;
27008 
27009     if l_labor_tp_schedule_id_flag = 'N' then
27010         l_labor_tp_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27011     else
27012         l_labor_tp_schedule_id := p_labor_tp_schedule_id(i);
27013     end if;
27014 
27015     if l_labor_tp_fixed_date_flag = 'N' then
27016         l_labor_tp_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27017     else
27018         l_labor_tp_fixed_date := p_labor_tp_fixed_date(i);
27019     end if;
27020 
27021     if l_cc_process_nl_flag_flag = 'N' then
27022         l_cc_process_nl_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27023     else
27024         l_cc_process_nl_flag := p_cc_process_nl_flag(i);
27025     end if;
27026 
27027     if l_nl_tp_schedule_id_flag = 'N' then
27028         l_nl_tp_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27029     else
27030         l_nl_tp_schedule_id := p_nl_tp_schedule_id(i);
27031     end if;
27032 
27033     if l_nl_tp_fixed_date_flag = 'N' then
27034         l_nl_tp_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27035     else
27036         l_nl_tp_fixed_date := p_nl_tp_fixed_date(i);
27037     end if;
27038 
27039     if l_receive_proj_inv_flag_flag = 'N' then
27040         l_receive_project_invoice_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27041     else
27042         l_receive_project_invoice_flag := p_receive_project_invoice_flag(i);
27043     end if;
27044 
27045     if l_work_type_id_flag = 'N' then
27046         l_work_type_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27047     else
27048         l_work_type_id := p_work_type_id(i);
27049     end if;
27050 
27051     if l_emp_bill_rate_schd_id_flag = 'N' then
27052         l_emp_bill_rate_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27053     else
27054         l_emp_bill_rate_schedule_id := p_emp_bill_rate_schedule_id(i);
27055     end if;
27056 
27057     if l_job_bill_rate_schd_id_flag = 'N' then
27058         l_job_bill_rate_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27059     else
27060         l_job_bill_rate_schedule_id := p_job_bill_rate_schedule_id(i);
27061     end if;
27062 
27063     if l_non_lab_std_bill_rt_sch_flag = 'N' then
27064         l_non_lab_std_bill_rt_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27065     else
27066         l_non_lab_std_bill_rt_sch_id := p_non_lab_std_bill_rt_sch_id(i);
27067     end if;
27068 
27069     if l_taskfunc_cost_rate_type_flag = 'N' then
27070         l_taskfunc_cost_rate_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27071     else
27072         l_taskfunc_cost_rate_type := p_taskfunc_cost_rate_type(i);
27073     end if;
27074 
27075     if l_taskfunc_cost_rate_date_flag = 'N' then
27076         l_taskfunc_cost_rate_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27077     else
27078         l_taskfunc_cost_rate_date := p_taskfunc_cost_rate_date(i);
27079     end if;
27080 
27081     if l_display_sequence_flag = 'N' then
27082         l_display_sequence := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27083     else
27084         l_display_sequence := p_display_sequence(i);
27085     end if;
27086 
27087     if l_wbs_level_flag = 'N' then
27088         l_wbs_level := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27089     else
27090         l_wbs_level := p_wbs_level(i);
27091     end if;
27092 
27093     if l_obligation_start_date_flag = 'N' then
27094        l_obligation_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27095     else
27096        l_obligation_start_date := p_obligation_start_date(i);
27097     end if;
27098 
27099     if l_obligation_finish_date_flag = 'N' then
27100        l_obligation_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27101     else
27102        l_obligation_finish_date := p_obligation_finish_date(i);
27103     end if;
27104 
27105 
27106     if l_baseline_start_date_flag = 'N' then
27107        l_baseline_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27108     else
27109        l_baseline_start_date := p_baseline_start_date(i);
27110     end if;
27111 
27112     if l_baseline_finish_date_flag = 'N' then
27113        l_baseline_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27114     else
27115        l_baseline_finish_date := p_baseline_finish_date(i);
27116     end if;
27117 
27118     if l_closed_date_flag = 'N' then
27119        l_closed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27120     else
27121        l_closed_date := p_closed_date(i);
27122     end if;
27123 
27124     if l_wq_uom_code_flag = 'N' then
27125        l_wq_uom_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27126     else
27127        l_wq_uom_code := p_wq_uom_code(i);
27128     end if;
27129 
27130     if l_wq_item_code_flag = 'N' then
27131        l_wq_item_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27132     else
27133        l_wq_item_code := p_wq_item_code(i);
27134     end if;
27135 
27136     if l_status_code_flag = 'N' then
27137        l_status_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27138     else
27139        l_status_code := p_status_code(i);
27140     end if;
27141 
27142 
27143     if l_wf_status_code_flag = 'N' then
27144        l_wf_status_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27145     else
27146        l_wf_status_code := p_wf_status_code(i);
27147     end if;
27148 
27149     if l_pm_source_code_flag = 'N' then
27150        l_pm_source_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27151     else
27152        l_pm_source_code := p_pm_source_code(i);
27153     end if;
27154 
27155 
27156     if l_inc_proj_progress_flag_flag = 'N' then
27157        l_inc_proj_progress_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27158     else
27159        l_inc_proj_progress_flag := p_inc_proj_progress_flag(i);
27160     end if;
27161 
27162     if l_link_task_flag_flag = 'N' then
27163        l_link_task_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27164     else
27165        l_link_task_flag := p_link_task_flag(i);
27166     end if;
27167 
27168     if l_calendar_id_flag = 'N' then
27169         l_calendar_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27170     else
27171         l_calendar_id := p_calendar_id(i);
27172     end if;
27173 
27174     if l_planned_effort_flag = 'N' then
27175         l_planned_effort := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27176     else
27177         l_planned_effort := p_planned_effort(i);
27178     end if;
27179 
27180     if l_planned_work_quantity_flag = 'N' then
27181         l_planned_work_quantity := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27182     else
27183         l_planned_work_quantity := p_planned_work_quantity(i);
27184     end if;
27185 
27186 
27187     if l_task_type_flag = 'N' then
27188        l_task_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27189     else
27190        l_task_type := p_task_type(i);
27191     end if;
27192 
27193 --bug 2744729, 2740565
27194     if l_estimated_start_date_flag = 'N' then
27195        l_estimated_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27196     else
27197        l_estimated_start_date := p_estimated_start_date(i);
27198     end if;
27199 
27200     if l_estimated_finish_date_flag = 'N' then
27201        l_estimated_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27202     else
27203        l_estimated_finish_date := p_estimated_finish_date(i);
27204     end if;
27205 
27206     if l_critical_flag_flag = 'N' then
27207        l_critical_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27208     else
27209        l_critical_flag := p_critical_flag(i);
27210     end if;
27211 
27212     if l_milestone_flag_flag = 'N' then
27213        l_milestone_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27214     else
27215        l_milestone_flag := p_milestone(i);
27216     end if;
27217 
27218     if l_priority_code_flag = 'N' then
27219        l_priority_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27220     else
27221        l_priority_code := p_priority_code(i);
27222     end if;
27223 --bug 2744729, 2740565
27224 
27225     if l_labor_disc_reason_code_flag = 'N' then
27226        l_labor_disc_reason_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27227     else
27228        l_labor_disc_reason_code := p_labor_disc_reason_code(i);
27229     end if;
27230 
27231     if l_nl_disc_reason_code_flag = 'N' then
27232        l_non_labor_disc_reason_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27233     else
27234        l_non_labor_disc_reason_code := p_non_labor_disc_reason_code(i);
27235     end if;
27236 
27237 --bug 2872708
27238     if l_retirement_cost_flag_flag = 'N' then
27239        l_retirement_cost_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27240     else
27241        l_retirement_cost_flag := p_retirement_cost_flag(i);
27242     end if;
27243 
27244     if l_cint_eligible_flag_flag = 'N' then
27245        l_cint_eligible_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27246     else
27247        l_cint_eligible_flag := p_cint_eligible_flag(i);
27248     end if;
27249 
27250     if l_cint_stop_date_flag = 'N' then
27251        l_cint_stop_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27252     else
27253        l_cint_stop_date := p_cint_stop_date(i);
27254     end if;
27255 --bug 2872708
27256 
27257 -- FP-M Bug # 3301192
27258     if l_pred_string_flag = 'N' then
27259        l_pred_string := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27260     else
27261        l_pred_string := p_pred_string(i);
27262     end if;
27263 
27264     if l_pred_delimiter_flag = 'N' then
27265        l_pred_delimiter := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27266     else
27267        l_pred_delimiter := p_pred_delimiter(i);
27268     end if;
27269 
27270 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
27271 -- FP M changes begin (venkat)
27272 
27273     if l_base_prct_comp_drv_code_flag = 'N' then
27274        l_base_percent_comp_deriv_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27275     else
27276        l_base_percent_comp_deriv_code := p_base_percent_comp_deriv_code(i);
27277     end if;
27278 
27279     if l_sch_tool_tsk_type_code_flag = 'N' then
27280        l_sch_tool_tsk_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27281     else
27282        l_sch_tool_tsk_type_code := p_sch_tool_tsk_type_code(i);
27283     end if;
27284 
27285     if l_constraint_type_code_flag = 'N' then
27286        l_constraint_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27287     else
27288        l_constraint_type_code := p_constraint_type_code(i);
27289     end if;
27290 
27291 
27292     if l_constraint_date_flag = 'N' then
27293        l_constraint_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27294     else
27295        l_constraint_date := p_constraint_date(i);
27296     end if;
27297 
27298 
27299     if l_free_slack_flag = 'N' then
27300        l_free_slack := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27301     else
27302        l_free_slack := p_free_slack(i);
27303     end if;
27304 
27305 
27306     if l_total_slack_flag = 'N' then
27307        l_total_slack := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27308     else
27309        l_total_slack := p_total_slack(i);
27310     end if;
27311 
27312     if l_effort_driven_flag_flag = 'N' then
27313        l_effort_driven_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27314     else
27315        l_effort_driven_flag := p_effort_driven_flag(i);
27316     end if;
27317 
27318 
27319     if l_level_assignments_flag_flag = 'N' then
27320        l_level_assignments_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27321     else
27322        l_level_assignments_flag := p_level_assignments_flag(i);
27323     end if;
27324 
27325 
27326     if l_invoice_method_flag = 'N' then
27327        l_invoice_method := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27328     else
27329        l_invoice_method := p_invoice_method(i);
27330     end if;
27331 
27332 
27333     if l_customer_id_flag = 'N' then
27334        l_customer_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27335     else
27336        l_customer_id := p_customer_id(i);
27337     end if;
27338 
27339     if l_gen_etc_source_code_flag = 'N' then
27340        l_gen_etc_source_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27341     else
27342        l_gen_etc_source_code := p_gen_etc_source_code(i);
27343     end if;
27344 
27345 -- FP M changes end (venkat)
27346 
27347 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
27348 
27349     if l_ext_act_duration_flag = 'N' then
27350          l_ext_act_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27351     else
27352          l_ext_act_duration := p_ext_act_duration(i);
27353     end if;
27354 
27355     if l_ext_remain_duration_flag = 'N' then
27356          l_ext_remain_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27357     else
27358          l_ext_remain_duration := p_ext_remain_duration(i);
27359     end if;
27360 
27361     if l_ext_sch_duration_flag = 'N' then
27362          l_ext_sch_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27363     else
27364          l_ext_sch_duration := p_ext_sch_duration(i);
27365     end if;
27366 
27367 -- (end venkat) new params for bug #3450684 ----------------------------------------------
27368 --SMukka
27369         -- 3661788 added code for l_deliverable_id
27370 
27371         if l_deliverable_flag = 'N' then
27372                  l_deliverable := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27373                  l_deliverable_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27374         else
27375                  l_deliverable := p_deliverable(i);
27376                  l_deliverable_id := p_deliverable_id(i);
27377         end if;
27378 
27379         if l_financial_task_flag = 'N' then
27380                  l_financial_task_fl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27381         else
27382                  l_financial_task_fl := p_financial_task_flag(i);
27383         end if;
27384 
27385         if l_mapped_task_id_flag = 'N' then
27386                  l_mapped_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27387         else
27388                  l_mapped_task_id := p_mapped_task_id(i);
27389         end if;
27390 
27391         if l_mapped_task_reference_flag = 'N' then
27392                  l_mapped_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27393         else
27394                  l_mapped_task_reference := p_mapped_task_reference(i);
27395         end if;
27396 
27397 -- Progress Management Changes. Bug # 3420093.
27398 
27399   if l_etc_effort_flag = 'N' then
27400                  l_etc_effort := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27401   else
27402                  l_etc_effort := p_etc_effort(i);
27403   end if;
27404 
27405   if l_percent_complete_flag = 'N' then
27406                  l_percent_complete := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27407   else
27408                  l_percent_complete := p_percent_complete(i);
27409   end if;
27410 
27411 -- Progress Management Changes. Bug # 3420093.
27412 
27413 
27414     PA_PROJECT_PUB.load_task (
27415      p_api_version_number         => G_API_VERSION_NUMBER
27416     ,p_init_msg_list          => p_init_msg_list
27417     ,p_return_status             => l_return_status
27418     ,p_pm_task_reference         => p_pm_task_reference(i)
27419     ,p_pa_task_id               => p_pa_task_id(i)
27420     ,p_task_name               => l_task_name
27421     ,p_long_task_name               => l_long_task_name
27422     ,p_pa_task_number             => l_pa_task_number
27423     ,p_task_description            => l_task_description
27424     ,p_task_start_date             => l_task_start_date
27425     ,p_task_completion_date       => l_task_completion_date
27426     ,p_scheduled_start_date        => l_scheduled_start_date
27427     ,p_scheduled_finish_date        => l_scheduled_finish_date
27428     ,p_display_sequence             => l_display_sequence
27429     ,p_wbs_level                    => l_wbs_level
27430     ,p_pm_parent_task_reference      => l_pm_parent_task_reference
27431     ,p_pa_parent_task_id        => l_pa_parent_task_id
27432     ,p_address_id              => l_address_id
27433     ,p_carrying_out_organization_id  => l_carrying_out_organization_id
27434     ,p_service_type_code            => l_service_type_code
27435     ,p_task_manager_person_id      => l_task_manager_person_id
27436     ,p_billable_flag                => l_billable_flag
27437     ,p_chargeable_flag           => l_chargeable_flag
27438     ,p_ready_to_bill_flag        => l_ready_to_bill_flag
27439     ,p_ready_to_distribute_flag    => l_ready_to_distribute_flag
27440     ,p_limit_to_txn_controls_flag  => l_limit_to_txn_controls_flag
27441     ,p_labor_bill_rate_org_id    => l_labor_bill_rate_org_id
27442     ,p_labor_std_bill_rate_schdl  => l_labor_std_bill_rate_schdl
27443     ,p_labor_schedule_fixed_date  => l_labor_schedule_fixed_date
27444     ,p_labor_schedule_discount    => l_labor_schedule_discount
27445     ,p_nl_bill_rate_org_id        => l_nl_bill_rate_org_id
27446     ,p_nl_std_bill_rate_schdl    => l_nl_std_bill_rate_schdl
27447     ,p_nl_schedule_fixed_date    => l_nl_schedule_fixed_date
27448     ,p_nl_schedule_discount        => l_nl_schedule_discount
27449     ,p_labor_cost_multiplier_name  => l_labor_cost_multiplier_name
27450     ,p_cost_ind_rate_sch_id        => l_cost_ind_rate_sch_id
27451     ,p_rev_ind_rate_sch_id        => l_rev_ind_rate_sch_id
27452     ,p_inv_ind_rate_sch_id        => l_inv_ind_rate_sch_id
27453     ,p_cost_ind_sch_fixed_date    => l_cost_ind_sch_fixed_date
27454     ,p_rev_ind_sch_fixed_date    => l_rev_ind_sch_fixed_date
27455     ,p_inv_ind_sch_fixed_date    => l_inv_ind_sch_fixed_date
27456     ,p_labor_sch_type          => l_labor_sch_type
27457     ,p_nl_sch_type              => l_nl_sch_type
27458     ,p_actual_start_date        => l_actual_start_date
27459     ,p_actual_finish_date        => l_actual_finish_date
27460     ,p_early_start_date         => l_early_start_date
27461     ,p_early_finish_date         => l_early_finish_date
27462     ,p_late_start_date             => l_late_start_date
27463     ,p_late_finish_date         => l_late_finish_date
27464     ,p_attribute_category            => l_attribute_category
27465     ,p_attribute1              => l_attribute1
27466     ,p_attribute2              => l_attribute2
27467     ,p_attribute3              => l_attribute3
27468     ,p_attribute4              => l_attribute4
27469     ,p_attribute5              => l_attribute5
27470     ,p_attribute6              => l_attribute6
27471     ,p_attribute7              => l_attribute7
27472     ,p_attribute8              => l_attribute8
27473     ,p_attribute9              => l_attribute9
27474     ,p_attribute10              => l_attribute10
27475     ,p_allow_cross_charge_flag    => l_allow_cross_charge_flag
27476     ,p_project_rate_date        => l_project_rate_date
27477     ,p_project_rate_type        => l_project_rate_type
27478     ,p_cc_process_labor_flag    => l_cc_process_labor_flag
27479     ,p_labor_tp_schedule_id        => l_labor_tp_schedule_id
27480     ,p_labor_tp_fixed_date        => l_labor_tp_fixed_date
27481     ,p_cc_process_nl_flag        => l_cc_process_nl_flag
27482     ,p_nl_tp_schedule_id        => l_nl_tp_schedule_id
27483     ,p_nl_tp_fixed_date          => l_nl_tp_fixed_date
27484     ,p_receive_project_invoice_flag  => l_receive_project_invoice_flag
27485     ,p_work_type_id              => l_work_type_id
27486     ,p_emp_bill_rate_schedule_id  => l_emp_bill_rate_schedule_id
27487     ,p_job_bill_rate_schedule_id  => l_job_bill_rate_schedule_id
27488     ,p_non_lab_std_bill_rt_sch_id  => l_non_lab_std_bill_rt_sch_id
27489     ,p_taskfunc_cost_rate_type    => l_taskfunc_cost_rate_type
27490     ,p_taskfunc_cost_rate_date    => l_taskfunc_cost_rate_date
27491     ,P_OBLIGATION_START_DATE    => l_obligation_start_date
27492     ,P_OBLIGATION_FINISH_DATE   => l_obligation_finish_date
27493     ,P_BASELINE_START_DATE      => l_baseline_start_date
27494     ,P_BASELINE_FINISH_DATE     => l_baseline_finish_date
27495     ,P_CLOSED_DATE              => l_closed_date
27496     ,P_WQ_UOM_CODE              => l_wq_uom_code
27497     ,P_WQ_ITEM_CODE             => l_wq_item_code
27498     ,P_STATUS_CODE              => l_status_code
27499     ,P_WF_STATUS_CODE           => l_wf_status_code
27500     ,P_PM_SOURCE_CODE           => l_pm_source_code
27501     ,P_INC_PROJ_PROGRESS_FLAG   => l_inc_proj_progress_flag
27502     ,P_LINK_TASK_FLAG           => l_link_task_flag
27503     ,P_CALENDAR_ID              => l_calendar_id
27504     ,P_PLANNED_EFFORT           => l_planned_effort
27505     ,P_PLANNED_WORK_QUANTITY    => l_planned_work_quantity
27506     ,P_TASK_TYPE                => l_task_type
27507 --bug 2744729, 2740565
27508     ,P_estimated_start_date     => l_estimated_start_date
27509     ,P_estimated_finish_date    => l_estimated_start_date
27510     ,P_milestone_flag           => l_milestone_flag
27511     ,P_critical_flag            => l_critical_flag
27512     ,P_priority_code            => l_priority_code
27513 --bug 2744729, 2740565
27514     ,P_labor_disc_reason_code                => l_labor_disc_reason_code
27515     ,P_non_labor_disc_reason_code            => l_non_labor_disc_reason_code
27516 --bug 2872708
27517     ,p_retirement_cost_flag     => l_retirement_cost_flag
27518     ,p_cint_eligible_flag       => l_cint_eligible_flag
27519     ,p_cint_stop_date           => l_cint_stop_date
27520 --bug 2872708
27521 -- FP-M Bug # 3301192
27522     ,p_pred_string              => l_pred_string
27523     ,p_pred_delimiter           => l_pred_delimiter
27524 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
27525 -- FP M changes begin (venkat)
27526     ,p_base_percent_comp_deriv_code =>  l_base_percent_comp_deriv_code
27527     ,p_sch_tool_tsk_type_code       =>  l_sch_tool_tsk_type_code
27528     ,p_constraint_type_code     =>  l_constraint_type_code
27529     ,p_constraint_date          =>  l_constraint_date
27530     ,p_free_slack           =>  l_free_slack
27531     ,p_total_slack          =>  l_total_slack
27532     ,p_effort_driven_flag       =>  l_effort_driven_flag
27533     ,p_level_assignments_flag       =>  l_level_assignments_flag
27534     ,p_invoice_method           =>  l_invoice_method
27535     ,p_customer_id          =>  l_customer_id
27536     ,p_gen_etc_source_code      =>  l_gen_etc_source_code
27537 -- FP M changes end (venkat)
27538    --SMukka
27539     ,p_financial_task_flag        =>     l_financial_task_fl
27540     ,p_mapped_task_id             =>     l_mapped_task_id
27541     ,p_mapped_task_reference      =>     l_mapped_task_reference
27542     ,p_deliverable                =>     l_deliverable
27543     ,p_deliverable_id             =>     l_deliverable_id  -- 3661788 Passing added deliverable_id to load_task
27544 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
27545     ,p_ext_act_duration         => l_ext_act_duration
27546     ,p_ext_remain_duration      => l_ext_remain_duration
27547     ,p_ext_sch_duration         => l_ext_sch_duration
27548 -- (end venkat) new params for bug #3450684 ----------------------------------------------
27549 
27550 -- Progress Management Changes. Bug # 3420093.
27551   ,p_etc_effort                 =>      l_etc_effort
27552   ,p_percent_complete           =>      l_percent_complete
27553 -- Progress Management Changes. Bug # 3420093.
27554 
27555     );
27556 
27557     l_stage := '1.4';
27558 
27559     if (l_return_status <> 'S') then
27560        p_return_status := l_return_status;
27561        return;
27562     end if;
27563 
27564   END LOOP;
27565 
27566   p_return_status := l_return_status;
27567 
27568 -- 4537865
27569 EXCEPTION
27570 
27571         WHEN OTHERS THEN
27572         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27573 
27574         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27575         THEN
27576                FND_MSG_PUB.add_exc_msg
27577                ( p_pkg_name            => G_PKG_NAME
27578                , p_procedure_name      => 'load_tasks');
27579         END IF;
27580 
27581 END load_tasks;
27582 
27583 
27584 PROCEDURE fetch_tasks
27585 ( p_api_version_number    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27586  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
27587  ,p_return_status    OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
27588  ,p_task_index      IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
27589  ,p_pa_task_id      OUT  NOCOPY PA_NUM_1000_NUM  /*Added the nocopy check for 4537865 */
27590  ,p_task_version_id             OUT  NOCOPY   PA_NUM_1000_NUM  /*Added the nocopy check for 4537865 */
27591  ,p_pm_task_reference    OUT NOCOPY PA_VC_1000_150  /*Added the nocopy check for 4537865 */
27592  ,p_task_return_status    OUT  NOCOPY PA_VC_1000_150  /*Added the nocopy check for 4537865 */
27593 )
27594 IS
27595 
27596 l_return_status                     VARCHAR2(1):= 'S';
27597 l_pm_task_reference                 PA_VC_1000_150 := PA_VC_1000_150(1);
27598 l_task_return_status                PA_VC_1000_150 := PA_VC_1000_150(1);
27599 l_pa_task_id                        PA_NUM_1000_NUM := PA_NUM_1000_NUM(1);
27600 --project structrues
27601 l_task_version_id                   PA_NUM_1000_NUM := PA_NUM_1000_NUM(1);
27602 --project structures
27603 BEGIN
27604 
27605     l_pm_task_reference.extend(1000);
27606     l_task_return_status.extend(1000);
27607     l_pa_task_id.extend(1000);
27608 --project structrues
27609     l_task_version_id.extend(1000);
27610 --project structrues
27611 
27612     FOR i in 1..1000 LOOP
27613 
27614        if p_task_index(i) is null or p_task_index(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  then
27615           p_return_status := l_return_status;
27616     p_pm_task_reference := l_pm_task_reference;
27617     p_task_return_status := l_task_return_status;
27618     p_pa_task_id := l_pa_task_id;
27619           return;
27620        end if;
27621 
27622        fetch_task( p_api_version_number  => p_api_version_number
27623       ,p_init_msg_list => p_init_msg_list
27624       ,p_return_status => l_return_status
27625       ,p_task_index => p_task_index(i)
27626       ,p_pa_task_id => l_pa_task_id(i)
27627       ,p_pm_task_reference => l_pm_task_reference(i)
27628        ,p_task_return_status  => l_task_return_status(i));
27629 
27630     if (l_return_status <> 'S') then
27631           p_return_status := l_return_status;
27632     p_pm_task_reference := l_pm_task_reference;
27633     p_task_return_status := l_task_return_status;
27634     p_pa_task_id := l_pa_task_id;
27635           return;
27636      end if;
27637 
27638 
27639        fetch_task_version( p_api_version_number  => p_api_version_number
27640       ,p_init_msg_list => p_init_msg_list
27641       ,p_return_status => l_return_status
27642       ,p_task_index => p_task_index(i)
27643       ,p_task_version_id => l_task_version_id(i)
27644        ,p_task_return_status  => l_task_return_status(i));
27645 
27646     if (l_return_status <> 'S') then
27647           p_return_status := l_return_status;
27648     p_pm_task_reference := l_pm_task_reference;
27649     p_task_return_status := l_task_return_status;
27650     p_pa_task_id := l_pa_task_id;
27651           return;
27652      end if;
27653 
27654     END LOOP;
27655 
27656     p_return_status := l_return_status;
27657     p_pm_task_reference := l_pm_task_reference;
27658     p_task_return_status := l_task_return_status;
27659     p_pa_task_id := l_pa_task_id;
27660 
27661 --project structrues
27662     p_task_version_id := l_task_version_id;
27663 --project structrues
27664 
27665 -- 4537865
27666 EXCEPTION
27667 
27668         WHEN OTHERS THEN
27669         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27670 
27671     p_pm_task_reference := NULL ;
27672     p_pa_task_id := NULL ;
27673     p_task_version_id := NULL ;
27674 
27675         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27676         THEN
27677                FND_MSG_PUB.add_exc_msg
27678                ( p_pkg_name            => G_PKG_NAME
27679                , p_procedure_name      => 'fetch_tasks');
27680         END IF;
27681 
27682 END fetch_tasks;
27683 -- <EA>
27684 --------------------------------------------------------------------------------
27685 --Name:        LOAD_EXTENSIBLE_ATTRIBUTE
27686 --Type:        Procedure
27687 --Description: This procedure can be used to move an extensible attribute value
27688 --            from the client side to a PL/SQL table on the server side,
27689 --             where it will be used by a LOAD/EXECUTE/FETCH cycle.
27690 --
27691 --Called subprograms:
27692 --
27693 --History:
27694 --    16-APR-2003    zahid.khan  Initial creation
27695 --
27696 
27697 PROCEDURE load_extensible_attribute(P_API_VERSION_NUMBER     IN     NUMBER   := 1.0,
27698                                     P_INIT_MSG_LIST          IN     VARCHAR2 := FND_API.G_FALSE,
27699                                     P_COMMIT                 IN     VARCHAR2 := FND_API.G_FALSE,
27700                                     X_RETURN_STATUS             OUT NOCOPY VARCHAR2,  /*Added the nocopy check for 4537865 */
27701                                     P_TRANSACTION_TYPE       IN     VARCHAR2 := PA_PROJECT_PUB.G_SYNC_MODE,
27702                         P_TASK_ID                IN     NUMBER   := NULL,
27703                                     P_TASK_REFERENCE         IN     VARCHAR2 := NULL,
27704                                     P_ATTR_GRP_INTERNAL_NAME IN     VARCHAR2 := NULL,
27705                                     P_ATTR_GRP_ID            IN     NUMBER   := NULL,
27706                                     P_ATTR_GRP_ROW_INDEX     IN     NUMBER   := NULL,
27707                                     P_ATTR_INTERNAL_NAME     IN     VARCHAR2 := NULL,
27708                                     P_ATTR_VALUE_STR         IN     VARCHAR2 := NULL,
27709                                     P_ATTR_VALUE_NUM         IN     NUMBER   := NULL,
27710                                     P_ATTR_VALUE_NUM_UOM     IN     VARCHAR2 := NULL,
27711                                     P_ATTR_VALUE_DATE        IN     DATE     := NULL,
27712                                     P_ATTR_DISP_VALUE        IN     VARCHAR2 := NULL
27713                                     )
27714 
27715 IS
27716 
27717    l_api_name           CONSTANT    VARCHAR2(30)        := 'Load_Extensible_Attribute';
27718    i                        NUMBER;
27719 
27720 BEGIN
27721 --  Standard begin of API savepoint
27722 
27723     SAVEPOINT load_extensible_attribute_pub;
27724 
27725 --  Standard call to check for call compatibility.
27726     IF NOT FND_API.Compatible_API_Call (  g_api_version_number  ,
27727                                                 p_api_version_number    ,
27728                                                     l_api_name,
27729                                                     G_PKG_NAME)
27730     THEN
27731       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27732     END IF;
27733 
27734 --  Initialize the message table if requested.
27735     IF FND_API.TO_BOOLEAN( p_init_msg_list )
27736     THEN
27737       FND_MSG_PUB.initialize;
27738     END IF;
27739 
27740 --  assign a value to the global counter for this table
27741    G_ext_attr_tbl_count   := G_ext_attr_tbl_count + 1;
27742 
27743    G_ext_attr_in_tbl(G_ext_attr_tbl_count).PROJ_ELEMENT_ID     := P_TASK_ID;
27744    G_ext_attr_in_tbl(G_ext_attr_tbl_count).PROJ_ELEMENT_REFERENCE := P_TASK_REFERENCE;
27745    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ROW_IDENTIFIER      := P_ATTR_GRP_ROW_INDEX;
27746    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_GROUP_INT_NAME := P_ATTR_GRP_INTERNAL_NAME;
27747    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_GROUP_ID       := P_ATTR_GRP_ID;
27748    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_INT_NAME       := P_ATTR_INTERNAL_NAME;
27749    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_STR      := P_ATTR_VALUE_STR;
27750    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_NUM      := P_ATTR_VALUE_NUM;
27751    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_DATE     := P_ATTR_VALUE_DATE;
27752    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_DISP_VALUE     := P_ATTR_DISP_VALUE;
27753    G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_UNIT_OF_MEASURE:= P_ATTR_VALUE_NUM_UOM;
27754    G_ext_attr_in_tbl(G_ext_attr_tbl_count).TRANSACTION_TYPE    := P_TRANSACTION_TYPE;
27755 
27756 --  Set API return status to success
27757    x_return_status := FND_API.G_RET_STS_SUCCESS;
27758 
27759 EXCEPTION
27760 
27761     WHEN FND_API.G_EXC_ERROR
27762     THEN
27763     ROLLBACK TO load_extensible_attribute_pub;
27764 
27765     x_return_status := FND_API.G_RET_STS_ERROR;
27766 
27767     WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27768     THEN
27769     ROLLBACK TO load_extensible_attribute_pub;
27770 
27771     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27772 
27773     WHEN OTHERS THEN
27774     ROLLBACK TO load_extensible_attribute_pub;
27775 
27776     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27777 
27778     IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27779     THEN
27780         FND_MSG_PUB.add_exc_msg
27781                 ( p_pkg_name        => G_PKG_NAME
27782                 , p_procedure_name  => l_api_name   );
27783 
27784     END IF;
27785 
27786 END load_extensible_attribute;
27787 
27788 --------------------------------------------------------------------------------
27789 --Name:        LOAD_EXTENSIBLE_ATTRIBUTES
27790 --Type:        Procedure
27791 --Description: This procedure can be used to bulk-load extensible attribute
27792 --             information into the global pl/sql table in batch of thousand
27793 --             records.
27794 --
27795 --Called subprograms: LOAD_EXTENSIBLE_ATTRIBUTE
27796 --
27797 --History:
27798 --    22-APR-2003    zahid.khan  Initial creation
27799 --
27800 PROCEDURE load_extensible_attributes(P_API_VERSION_NUMBER     IN     NUMBER,
27801                                      P_INIT_MSG_LIST          IN     VARCHAR2          := FND_API.G_FALSE,
27802                                      P_COMMIT                 IN     VARCHAR2          := FND_API.G_FALSE,
27803                                      X_RETURN_STATUS          OUT NOCOPY   VARCHAR2,  /*Added the nocopy check for 4537865 */
27804                                      P_TRANSACTION_TYPE       IN     PA_VC_1000_10     := PA_VC_1000_10(PA_PROJECT_PUB.G_SYNC_MODE),
27805                                      P_TASK_ID        IN     PA_NUM_1000_NUM   := PA_NUM_1000_NUM(NULL),
27806                                      P_TASK_REFERENCE IN     PA_VC_1000_150    := PA_VC_1000_150(NULL),
27807                                      P_ATTR_GRP_INTERNAL_NAME    IN     PA_VC_1000_30     := PA_VC_1000_30(NULL),
27808                                      P_ATTR_GRP_ID          IN     PA_NUM_1000_NUM   := PA_NUM_1000_NUM(NULL),
27809                                      P_ATTR_GRP_ROW_INDEX          IN     PA_NUM_1000_NUM   := PA_NUM_1000_NUM(NULL),
27810                                      P_ATTR_INTERNAL_NAME          IN     PA_VC_1000_30     := PA_VC_1000_30(NULL),
27811                                      P_ATTR_VALUE_STR         IN     PA_VC_1000_1000    := PA_VC_1000_1000(NULL),
27812                                      P_ATTR_VALUE_NUM         IN     PA_NUM_1000_NUM   := PA_NUM_1000_NUM(NULL),
27813                                      P_ATTR_VALUE_NUM_UOM   IN     PA_VC_1000_30     := PA_VC_1000_30(NULL),
27814                                      P_ATTR_VALUE_DATE        IN     PA_DATE_1000_DATE := PA_DATE_1000_DATE(NULL),
27815                                      P_ATTR_DISP_VALUE        IN     PA_VC_1000_150    := PA_VC_1000_150(NULL)
27816                          )
27817 IS
27818    l_api_name           CONSTANT    VARCHAR2(30)        := 'Load_Extensible_Attributes';
27819    l_return_status VARCHAR(1) := FND_API.G_RET_STS_SUCCESS;
27820 
27821    l_proj_element_id_flag         BOOLEAN := (P_TASK_ID.count = 1 and P_TASK_ID(1) = NULL);
27822    l_proj_element_reference_flag BOOLEAN := (P_TASK_REFERENCE.count = 1 and P_TASK_REFERENCE(1) = NULL);
27823    l_row_identifier_flag          BOOLEAN := (P_ATTR_GRP_ROW_INDEX.count = 1 and P_ATTR_GRP_ROW_INDEX(1) = NULL);
27824    l_attr_group_int_name_flag    BOOLEAN := (P_ATTR_GRP_INTERNAL_NAME.count = 1 and P_ATTR_GRP_INTERNAL_NAME(1) = NULL);
27825    l_attr_group_id_flag          BOOLEAN := (P_ATTR_GRP_ID.count = 1 and P_ATTR_GRP_ID(1) = NULL);
27826    l_attr_int_name_flag          BOOLEAN := (P_ATTR_INTERNAL_NAME.count = 1 and P_ATTR_INTERNAL_NAME(1) = NULL);
27827    l_attr_value_str_flag          BOOLEAN := (P_ATTR_VALUE_STR.count = 1 and P_ATTR_VALUE_STR(1) = NULL);
27828    l_attr_value_num_flag          BOOLEAN := (P_ATTR_VALUE_NUM.count = 1 and P_ATTR_VALUE_NUM(1) = NULL);
27829    l_attr_value_date_flag         BOOLEAN := (P_ATTR_VALUE_DATE.count = 1 and P_ATTR_VALUE_DATE(1) = NULL);
27830    l_attr_disp_value_flag         BOOLEAN := (P_ATTR_DISP_VALUE.count = 1 and P_ATTR_DISP_VALUE(1) = NULL);
27831    l_attr_unit_of_measure_flag   BOOLEAN := (P_ATTR_VALUE_NUM_UOM.count = 1 and P_ATTR_VALUE_NUM_UOM(1) = NULL);
27832    l_transaction_type_flag     BOOLEAN := (P_TRANSACTION_TYPE.count = 1 and P_TRANSACTION_TYPE(1) = PA_PROJECT_PUB.G_SYNC_MODE);
27833 
27834    l_proj_element_id              NUMBER;
27835    l_proj_element_reference      VARCHAR2(30);
27836    l_attr_group_int_name         VARCHAR2(30);
27837    l_attr_group_id               NUMBER;
27838    l_attr_int_name               VARCHAR2(30);
27839    l_attr_value_str               VARCHAR2(1000);
27840    l_attr_value_num               NUMBER;
27841    l_attr_value_date              DATE;
27842    l_attr_disp_value             VARCHAR2(150);
27843    l_attr_unit_of_measure        VARCHAR2(30);
27844    l_user_row_identifier         VARCHAR2(150);
27845    l_transaction_type          VARCHAR2(30);
27846 BEGIN
27847    -- initialize message stack, if needed
27848     IF  FND_API.to_boolean(p_init_msg_list)
27849     THEN
27850         FND_MSG_PUB.initialize;
27851     END IF;
27852 
27853    -- There are two ways to load the global pl/sql table:
27854    -- 1. Call Load_Extensible_Attribute
27855    -- 2. Directly populate the table
27856    -- We will use approach 1.
27857    FOR i in 1..1000 LOOP
27858       -- increment global table record counter
27859       G_ext_attr_tbl_count  := G_ext_attr_tbl_count + 1;
27860 
27861       -- if Row Identifier is NULL, that means there were
27862       -- fewer than 1000 rows and we're done processing
27863       IF(P_ATTR_GRP_ROW_INDEX(i) IS NULL) THEN
27864          return;
27865       END IF;
27866 
27867       -- default parameter values if they were not bound
27868       -- by caller. This needs to be done because
27869       -- there is no way to default the entire
27870       -- array contents to NULL via the procedure
27871       -- declaration. For e.g., using the syntax
27872       -- 'P_ATTR_UNIT_OF_MEASURE  IN PA_VC_1000_30 := PA_VC_1000_30(NULL)'
27873       -- only sets the first array cell to the
27874       -- value NULL
27875       if (l_proj_element_id_flag <> TRUE) then
27876          l_proj_element_id := P_TASK_ID(i);
27877       else
27878          l_proj_element_id := NULL;
27879       end if;
27880 
27881       if (l_proj_element_reference_flag <> TRUE) then
27882          l_proj_element_reference := P_TASK_REFERENCE(i);
27883       else
27884          l_proj_element_reference := NULL;
27885       end if;
27886 
27887       if (l_attr_group_int_name_flag <> TRUE) then
27888          l_attr_group_int_name := P_ATTR_GRP_INTERNAL_NAME(i);
27889       else
27890          l_attr_group_int_name := NULL;
27891       end if;
27892 
27893       if (l_attr_group_id_flag <> TRUE) then
27894          l_attr_group_id := P_ATTR_GRP_ID(i);
27895       else
27896          l_attr_group_id := NULL;
27897       end if;
27898 
27899       if (l_attr_int_name_flag <> TRUE) then
27900          l_attr_int_name := P_ATTR_INTERNAL_NAME(i);
27901       else
27902          l_attr_int_name := NULL;
27903       end if;
27904 
27905       if (l_attr_value_str_flag <> TRUE) then
27906          l_attr_value_str := P_ATTR_VALUE_STR(i);
27907       else
27908          l_attr_value_str := NULL;
27909       end if;
27910 
27911       if (l_attr_value_num_flag <> TRUE) then
27912          l_attr_value_num := P_ATTR_VALUE_NUM(i);
27913       else
27914          l_attr_value_num := NULL;
27915       end if;
27916 
27917       if (l_attr_value_date_flag <> TRUE) then
27918          l_attr_value_date := P_ATTR_VALUE_DATE(i);
27919       else
27920          l_attr_value_date := NULL;
27921       end if;
27922 
27923       if (l_attr_disp_value_flag <> TRUE) then
27924          l_attr_disp_value := P_ATTR_DISP_VALUE(i);
27925       else
27926          l_attr_disp_value := NULL;
27927       end if;
27928 
27929       if (l_attr_unit_of_measure_flag <> TRUE) then
27930          l_attr_unit_of_measure := P_ATTR_VALUE_NUM_UOM(i);
27931       else
27932          l_attr_unit_of_measure := NULL;
27933       end if;
27934 
27935       if (l_transaction_type_flag <> TRUE) then
27936          l_transaction_type := P_TRANSACTION_TYPE(i);
27937       else
27938          l_transaction_type := PA_PROJECT_PUB.G_SYNC_MODE;
27939       end if;
27940 
27941       -- call unit api
27942       load_extensible_attribute
27943       (  P_INIT_MSG_LIST        => P_INIT_MSG_LIST,
27944          P_COMMIT                   => FND_API.G_FALSE,--bug 3766967
27945          X_RETURN_STATUS          => l_return_status,
27946          P_TASK_ID            => l_proj_element_id,
27947          P_TASK_REFERENCE       => l_proj_element_reference,
27948          P_ATTR_GRP_ROW_INDEX         => P_ATTR_GRP_ROW_INDEX(i),
27949          P_ATTR_GRP_INTERNAL_NAME   => l_attr_group_int_name,
27950          P_ATTR_GRP_ID            => l_attr_group_id,
27951          P_ATTR_INTERNAL_NAME         => l_attr_int_name,
27952          P_ATTR_VALUE_STR         => l_attr_value_str,
27953          P_ATTR_VALUE_NUM         => l_attr_value_num,
27954          P_ATTR_VALUE_DATE        => l_attr_value_date,
27955          P_ATTR_DISP_VALUE        => l_attr_disp_value,
27956          P_ATTR_VALUE_NUM_UOM       => l_attr_unit_of_measure,
27957          P_TRANSACTION_TYPE     => l_transaction_type
27958       );
27959 
27960     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
27961         THEN
27962             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27963         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
27964         THEN
27965             RAISE FND_API.G_EXC_ERROR;
27966         END IF;
27967 
27968    END LOOP;
27969 
27970    X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
27971     EXCEPTION
27972         WHEN FND_API.G_EXC_ERROR THEN
27973             x_return_status := FND_API.G_RET_STS_ERROR;
27974         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
27975             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27976         WHEN OTHERS THEN
27977             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27978             IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
27979                 FND_MSG_PUB.Add_Exc_Msg
27980                 (   G_PKG_NAME
27981                     , l_api_name
27982                 );
27983             END IF;
27984 END load_extensible_attributes;
27985 -- </EA>
27986 
27987 --------------------------------------------------------------------------------
27988 --Project Structures
27989 
27990 PROCEDURE load_structure
27991 ( p_api_version_number     IN  NUMBER
27992  ,p_init_msg_list           IN  VARCHAR2         := FND_API.G_FALSE
27993  ,p_return_status           OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
27994  ,p_pa_project_id           IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27995  ,p_structure_type             IN    VARCHAR2          := 'FINANCIAL'
27996  ,p_structure_version_name     IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27997  ,P_structure_version_id       IN    NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27998  ,P_DESCRIPTION                IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27999  /*,P_VERSION_NUMBER             IN    NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28000  ,P_NAME                       IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28001  ,P_CURRENT_FLAG               IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28002  ,P_ORIGINAL_FLAG              IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28003  ,P_LATEST_EFF_PUBLISHED_FLAG IN    VARCHAR2          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28004  ,P_EFFECTIVE_DATE             IN    DATE              := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28005  ,P_PUBLISHED_DATE             IN    DATE              := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28006  ,P_PUBLISHED_BY_PERSON_ID     IN    NUMBER            := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28007  ,P_CURRENT_BASELINE_DATE      IN    DATE              := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28008  ,P_CURRENT_BASELINE_PERSON_ID   IN    NUMBER         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28009  ,P_ORIGINAL_BASELINE_DATE       IN    DATE           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28010  ,P_ORIGINAL_BASELINE_PERSON_ID  IN    NUMBER         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28011  ,P_LOCK_STATUS_CODE             IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28012  ,P_LOCKED_BY_PERSON_ID          IN    NUMBER         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28013  ,P_LOCKED_DATE                  IN    DATE           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28014  ,P_STATUS_CODE                  IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28015  ,P_WF_STATUS_CODE               IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28016  ,P_PM_SOURCE_CODE               IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28017  ,P_PM_SOURCE_REFERENCE          IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28018  ,P_CHANGE_REASON_CODE           IN    VARCHAR2       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28019 */
28020 ) IS
28021 
28022    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_structure';
28023 
28024 
28025 BEGIN
28026 
28027 --  Standard begin of API savepoint
28028 
28029     SAVEPOINT load_structure_pub;
28030 
28031 --  Standard call to check for call compatibility.
28032 
28033     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
28034                                p_api_version_number  ,
28035                                l_api_name         ,
28036                                G_PKG_NAME         )
28037     THEN
28038 
28039   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28040 
28041     END IF;
28042 
28043 --  Initialize the message table if requested.
28044 
28045     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28046     THEN
28047 
28048   FND_MSG_PUB.initialize;
28049 
28050     END IF;
28051 
28052 --  Set API return status to success
28053 
28054     p_return_status := FND_API.G_RET_STS_SUCCESS;
28055 
28056 --  Bug 2978114.
28057 --  Validate the structure type. It should be FINANCIAL / WORKPLAN /DELIVERABLE.
28058 --  Throw an error otherwise.
28059 
28060     IF nvl(p_structure_type,'-99') not in ('FINANCIAL','WORKPLAN', 'DELIVERABLE') THEN
28061           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28062                                ,p_msg_name       => 'PA_PS_INV_STR_TYPE');
28063 
28064           RAISE FND_API.G_EXC_ERROR;
28065     END IF;
28066 
28067 -- assign incoming parameters to the fields of global structure record
28068 
28069     G_structure_in_rec.pa_project_id      := p_pa_project_id;
28070     G_structure_in_rec.structure_type                 := p_structure_type;
28071     G_structure_in_rec.structure_version_name         := p_structure_version_name;
28072     G_structure_in_rec.structure_version_id           := p_structure_version_id;
28073     G_structure_in_rec.DESCRIPTION                    := p_DESCRIPTION;
28074     /*G_structure_in_rec.VERSION_NUMBER                 := p_VERSION_NUMBER;
28075     G_structure_in_rec.NAME                           := p_NAME;
28076     G_structure_in_rec.CURRENT_FLAG                   := p_CURRENT_FLAG;
28077     G_structure_in_rec.ORIGINAL_FLAG                  := p_ORIGINAL_FLAG;
28078     G_structure_in_rec.LATEST_EFF_PUBLISHED_FLAG      := p_LATEST_EFF_PUBLISHED_FLAG;
28079     G_structure_in_rec.EFFECTIVE_DATE                 := p_EFFECTIVE_DATE;
28080     G_structure_in_rec.PUBLISHED_DATE                 := p_PUBLISHED_DATE;
28081     G_structure_in_rec.PUBLISHED_BY_PERSON_ID         := p_PUBLISHED_BY_PERSON_ID;
28082     G_structure_in_rec.CURRENT_BASELINE_DATE          := p_CURRENT_BASELINE_DATE;
28083     G_structure_in_rec.CURRENT_BASELINE_PERSON_ID     := p_CURRENT_BASELINE_PERSON_ID;
28084     G_structure_in_rec.ORIGINAL_BASELINE_DATE         := p_ORIGINAL_BASELINE_DATE;
28085     G_structure_in_rec.ORIGINAL_BASELINE_PERSON_ID    := p_ORIGINAL_BASELINE_PERSON_ID;
28086     G_structure_in_rec.LOCK_STATUS_CODE               := p_LOCK_STATUS_CODE;
28087     G_structure_in_rec.LOCKED_BY_PERSON_ID            := p_LOCKED_BY_PERSON_ID;
28088     G_structure_in_rec.LOCKED_DATE                    := p_LOCKED_DATE;
28089     G_structure_in_rec.STATUS_CODE                    := p_STATUS_CODE;
28090     G_structure_in_rec.WF_STATUS_CODE                 := p_WF_STATUS_CODE;
28091     G_structure_in_rec.PM_SOURCE_CODE                 := p_PM_SOURCE_CODE;
28092     G_structure_in_rec.PM_SOURCE_REFERENCE            := p_PM_SOURCE_REFERENCE;
28093     G_structure_in_rec.CHANGE_REASON_CODE             := p_CHANGE_REASON_CODE;
28094     */
28095 
28096 EXCEPTION
28097 
28098   WHEN FND_API.G_EXC_ERROR
28099   THEN
28100   ROLLBACK TO load_structure_pub;
28101 
28102   p_return_status := FND_API.G_RET_STS_ERROR;
28103 
28104 
28105   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28106   THEN
28107   ROLLBACK TO load_structure_pub;
28108 
28109   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28110 
28111 
28112   WHEN OTHERS THEN
28113   ROLLBACK TO load_structure_pub;
28114 
28115   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28116 
28117   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28118   THEN
28119     FND_MSG_PUB.add_exc_msg
28120         ( p_pkg_name    => G_PKG_NAME
28121         , p_procedure_name  => l_api_name  );
28122 
28123   END IF;
28124 
28125 
28126 END load_structure;
28127 
28128 PROCEDURE change_structure_status
28129 (p_api_version_number           IN      NUMBER          := 1.0 -- for bug# 3802319
28130 , p_init_msg_list               IN      VARCHAR2        := 'F'
28131 , p_commit                      IN      VARCHAR2        := 'F'
28132 , p_return_status               OUT NOCOPY    VARCHAR2  /*Added the nocopy check for 4537865 */
28133 , p_msg_count                   OUT NOCOPY    NUMBER  /*Added the nocopy check for 4537865 */
28134 , p_msg_data                    OUT NOCOPY    VARCHAR2  /*Added the nocopy check for 4537865 */
28135 , p_structure_version_id        IN      NUMBER
28136 , p_pa_project_id               IN      NUMBER
28137 , p_status_code                 IN      VARCHAR2
28138 , p_process_mode                IN      VARCHAR2 := 'ONLINE'
28139 , p_published_struct_ver_id     OUT NOCOPY     NUMBER  /*Added the nocopy check for 4537865 */
28140 
28141 )IS
28142 
28143 l_api_name CONSTANT VARCHAR2(30)  := 'change_structure_status';
28144 l_update_wbs_flag   VARCHAR2(1);
28145 l_msg_count         NUMBER ;
28146 l_msg_data          VARCHAR2(2000);
28147 l_return_status     VARCHAR2(1);
28148 BEGIN
28149 
28150 -- Begin fix for Bug # 4314797.
28151 
28152 --  Standard begin of API savepoint
28153     -- Bug 10434606
28154     IF p_commit = FND_API.G_TRUE THEN
28155     SAVEPOINT change_structure_status;
28156     END IF;
28157 
28158 --  Standard call to check for call compatibility.
28159 
28160     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
28161                                          p_api_version_number   ,
28162                                          l_api_name             ,
28163                                          G_PKG_NAME             )
28164     THEN
28165 
28166         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28167 
28168     END IF;
28169 
28170 --  Initialize the message table if requested.
28171 
28172     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28173     THEN
28174 
28175         FND_MSG_PUB.initialize;
28176 
28177     END IF;
28178 
28179 --  Set API return status to success
28180 
28181     p_return_status := FND_API.G_RET_STS_SUCCESS;
28182 
28183 -- End fix for Bug # 4314797.
28184 
28185     PA_WORKPLAN_AMG_PUB.CHANGE_STRUCTURE_STATUS
28186             (
28187             p_api_version_number                => p_api_version_number
28188            ,p_init_msg_list                     => p_init_msg_list
28189            ,p_commit                            => FND_API.G_FALSE--bug 3766967
28190            ,p_pa_project_id                     => p_pa_project_id
28191            ,p_structure_version_id              => p_structure_version_id
28192            ,p_status_code                       => p_status_code
28193            ,p_return_status                     => p_return_status
28194            ,p_msg_count                         => p_msg_count
28195            ,p_msg_data                          => p_msg_data
28196            , p_published_struct_ver_id          => p_published_struct_ver_id
28197            );
28198    IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28199           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
28200    ELSIF  (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28201           RAISE  FND_API.G_EXC_ERROR;
28202    END IF;
28203 
28204    -- PA L Changes 3010538
28205 --Commenting as for a publishing case we need to always check for update wbs required flag
28206 --   IF  ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
28207 --       ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
28208 --         PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'  AND
28209 --         PA_PROJECT_PUB.G_Published_version_exists = 'N')
28210 --   THEN
28211 
28212    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => p_pa_project_id
28213                                                         ,p_structure_version_id => p_published_struct_ver_id ) ;
28214    IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
28215         IF p_process_mode = 'ONLINE' THEN
28216 
28217         --Added by rtarway for BUG 4032291
28218         if p_status_code = 'STRUCTURE_PUBLISHED' then
28219              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_PUBLISH'
28220                                                        ,p_project_id           => p_pa_project_id
28221                                                            ,p_commit           => p_commit
28222                                                        -- Fix for Bug # 4314797.
28223                                                        ,p_structure_version_id => p_structure_version_id
28224                                                        ,p_pub_struc_ver_id     => p_published_struct_ver_id
28225                                                        ,x_return_status        => l_return_status
28226                                                        ,x_msg_count            => l_msg_count
28227                                                        ,x_msg_data             => l_msg_data ) ;
28228        --Added by rtarway for BUG 4032291
28229         else
28230              PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
28231                                                        ,p_project_id           => p_pa_project_id
28232                                                        ,p_structure_version_id => p_published_struct_ver_id
28233                                                        ,x_return_status        => l_return_status
28234                                                        ,x_msg_count            => l_msg_count
28235                                                        ,x_msg_data             => l_msg_data ) ;
28236         end if;
28237 
28238 
28239 
28240         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
28241              THEN
28242                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28243         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
28244              THEN
28245                RAISE FND_API.G_EXC_ERROR;
28246         END IF;
28247         ELSIF p_process_mode = 'CONCURRENT' THEN
28248           /* Added if block for bug 5390015 */
28249           IF p_status_code = 'STRUCTURE_PUBLISHED' THEN
28250 
28251                 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_PUBLISH'
28252                                                                ,p_project_id            => p_pa_project_id
28253                                                                ,p_commit                     => p_commit
28254                                                                              ,p_structure_version_id  => p_structure_version_id
28255                                                                ,p_pub_struc_ver_id      => p_published_struct_ver_id
28256                                                                              ,x_return_status         => l_return_status
28257                                                                ,x_msg_count             => l_msg_count
28258                                                                ,x_msg_data              => l_msg_data ) ;
28259          ELSE
28260 
28261             PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_UPDATE'
28262                                                             ,p_project_id            => p_pa_project_id
28263                                                             ,p_structure_version_id  => p_published_struct_ver_id
28264                                                             ,x_return_status         => l_return_status
28265                                                             ,x_msg_count             => l_msg_count
28266                                                             ,x_msg_data              => l_msg_data ) ;
28267         END IF;
28268 
28269         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
28270              THEN
28271                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28272         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
28273              THEN
28274                RAISE FND_API.G_EXC_ERROR;
28275         END IF;
28276 
28277 
28278         END IF ;
28279      END IF ;
28280 --   END IF ;
28281 
28282 -- PA L Changes 3010538
28283 
28284 EXCEPTION
28285         WHEN FND_API.G_EXC_ERROR THEN
28286         p_return_status := FND_API.G_RET_STS_ERROR;
28287 
28288     -- 4537865
28289      p_published_struct_ver_id := NULL ;
28290 
28291     -- Begin fix for Bug # 4314797.
28292 	-- Bug 10434606
28293 
28294 		IF p_commit = FND_API.G_TRUE THEN
28295         ROLLBACK TO change_structure_status;
28296         END IF;
28297 
28298         p_msg_count := l_msg_count;
28299         p_msg_data := l_msg_data;
28300 
28301         FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
28302                           , p_data   =>  p_msg_data);
28303 
28304     -- End fix for Bug # 4314797.
28305 
28306         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
28307         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28308 
28309     -- 4537865
28310          p_published_struct_ver_id := NULL ;
28311 
28312         -- Begin fix for Bug # 4314797.
28313         -- Bug 10434606
28314 		IF p_commit = FND_API.G_TRUE THEN
28315         ROLLBACK TO change_structure_status;
28316 		END IF;
28317 
28318                 p_msg_count := l_msg_count;
28319                 p_msg_data := l_msg_data;
28320 
28321                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
28322                                           , p_data   =>  p_msg_data);
28323 
28324         -- End fix for Bug # 4314797.
28325 
28326 
28327         WHEN OTHERS THEN
28328         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28329 
28330     -- 4537865
28331          p_published_struct_ver_id := NULL ;
28332 
28333         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
28334           FND_MSG_PUB.add_exc_msg
28335               (p_pkg_name            => G_PKG_NAME
28336               ,p_procedure_name      => l_api_name);
28337         END IF;
28338 
28339 
28340         -- Begin fix for Bug # 4314797.
28341         -- Bug 10434606
28342 
28343                 IF p_commit = FND_API.G_TRUE THEN
28344 				ROLLBACK TO change_structure_status;
28345 				END IF;
28346 
28347                 p_msg_count := l_msg_count;
28348                 p_msg_data := l_msg_data;
28349 
28350                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
28351                                           , p_data   =>  p_msg_data);
28352 
28353         -- End fix for Bug # 4314797.
28354 
28355 END change_structure_status;
28356 
28357 
28358 PROCEDURE baseline_structure
28359 (p_api_version_number           IN      NUMBER
28360 , p_init_msg_list               IN      VARCHAR2        := 'F'
28361 , p_commit                      IN      VARCHAR2        := 'F'
28362 , p_return_status               OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
28363 , p_msg_count                   OUT NOCOPY    NUMBER /*Added the nocopy check for 4537865 */
28364 , p_msg_data                    OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
28365 , p_structure_version_id        IN      NUMBER
28366 , p_pa_project_id                  IN      NUMBER
28367 
28368 ) IS
28369 
28370 l_api_name CONSTANT VARCHAR2(30)  := 'baseline_structure';
28371 
28372 BEGIN
28373 
28374 -- 4537865
28375 --Initialize p_return_status to Success
28376 p_return_status := FND_API.G_RET_STS_SUCCESS ;
28377 
28378     PA_WORKPLAN_AMG_PUB.BASELINE_STRUCTURE
28379             (
28380             p_api_version_number                => p_api_version_number
28381            ,p_init_msg_list                     => p_init_msg_list
28382            ,p_commit                            => FND_API.G_FALSE--bug 3766967
28383            ,p_pa_project_id                     => p_pa_project_id
28384            ,p_structure_version_id              => p_structure_version_id
28385            ,p_return_status                     => p_return_status
28386            ,p_msg_count                         => p_msg_count
28387            ,p_msg_data                          => p_msg_data
28388            );
28389    IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28390           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
28391    ELSIF  (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28392           RAISE  FND_API.G_EXC_ERROR;
28393    END IF;
28394 
28395 EXCEPTION
28396         WHEN FND_API.G_EXC_ERROR THEN
28397         p_return_status := FND_API.G_RET_STS_ERROR;
28398 
28399         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
28400         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28401 
28402         WHEN OTHERS THEN
28403         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28404 
28405         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
28406           FND_MSG_PUB.add_exc_msg
28407               (p_pkg_name            => G_PKG_NAME
28408               ,p_procedure_name      => l_api_name);
28409         END IF;
28410 END baseline_structure;
28411 
28412 
28413 PROCEDURE delete_structure_version
28414 ( p_api_version_number          IN      NUMBER          := 1.0 -- for bug# 3802759
28415  ,p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
28416  ,p_init_msg_list               IN      VARCHAR2        := FND_API.G_FALSE
28417  ,p_msg_count                   OUT NOCOPY    NUMBER  /*Added the nocopy check for 4537865 */
28418  ,p_msg_data                    OUT NOCOPY    VARCHAR2   /*Added the nocopy check for 4537865 */
28419  ,p_return_status               OUT NOCOPY    VARCHAR2   /*Added the nocopy check for 4537865 */
28420  ,p_structure_version_id        IN  NUMBER
28421  ,p_record_version_number       IN      NUMBER
28422 ) IS
28423    l_api_name                   CONSTANT        VARCHAR2(30)            := 'delete_structure_version';
28424 
28425 BEGIN
28426 
28427 --  Standard begin of API savepoint
28428 
28429     SAVEPOINT delete_structure_ver_pub;
28430 
28431 --  Standard call to check for call compatibility.
28432 
28433     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
28434                                          p_api_version_number   ,
28435                                          l_api_name             ,
28436                                          G_PKG_NAME             )
28437     THEN
28438 
28439         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28440 
28441     END IF;
28442 
28443 --  Initialize the message table if requested.
28444 
28445     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28446     THEN
28447 
28448         FND_MSG_PUB.initialize;
28449 
28450     END IF;
28451 
28452 --  Set API return status to success
28453 
28454     p_return_status := FND_API.G_RET_STS_SUCCESS;
28455 
28456     PA_PROJ_TASK_STRUC_PUB.DELETE_STRUCTURE_VERSION(
28457          p_api_version                       => p_api_version_number
28458         ,p_init_msg_list                     => p_init_msg_list
28459         ,p_commit                            => FND_API.G_FALSE--bug 3766967
28460         ,p_calling_module                    => 'AMG'
28461         ,p_structure_version_id              => p_structure_version_id
28462         ,p_record_version_number             => p_record_version_number
28463         ,x_return_status                     => p_return_status
28464         ,x_msg_count                         => p_msg_count
28465         ,x_msg_data                          => p_msg_data
28466    );
28467 
28468    IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28469           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
28470    ELSIF  (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28471           RAISE  FND_API.G_EXC_ERROR;
28472    END IF;
28473 
28474 EXCEPTION
28475 
28476         WHEN FND_API.G_EXC_ERROR
28477         THEN
28478         ROLLBACK TO delete_structure_ver_pub;
28479 
28480         p_return_status := FND_API.G_RET_STS_ERROR;
28481 
28482 
28483         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28484         THEN
28485         ROLLBACK TO delete_structure_ver_pub;
28486 
28487         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28488 
28489 
28490         WHEN OTHERS THEN
28491         ROLLBACK TO delete_structure_ver_pub;
28492 
28493         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28494 
28495         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28496         THEN
28497                 FND_MSG_PUB.add_exc_msg
28498                                 ( p_pkg_name            => G_PKG_NAME
28499                                 , p_procedure_name      => l_api_name   );
28500 
28501         END IF;
28502 
28503 END delete_structure_version;
28504 
28505 --Project Structures
28506 
28507 --Project Connect 4.0
28508 --------------------------------------------------------------------------------
28509 --Name:               fetch_structure_version
28510 --Type:               Procedure
28511 --Description:        This procedure can be used to get the structure version ids
28512 --                    to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
28513 --
28514 --Called subprograms:
28515 --
28516 --
28517 --
28518 --History:
28519 --    03-DEC-2002        Created
28520 --
28521 
28522 PROCEDURE fetch_structure_version
28523 ( p_api_version_number          IN      NUMBER
28524  ,p_init_msg_list               IN      VARCHAR2        := FND_API.G_FALSE
28525  ,p_return_status               OUT NOCOPY    VARCHAR2  /*Added the nocopy check for 4537865 */
28526  ,p_structure_type              IN      VARCHAR2        := 'FINANCIAL'
28527  ,p_pa_structure_version_id     OUT NOCOPY    NUMBER  /*Added the nocopy check for 4537865 */
28528  ,p_struc_return_status          OUT NOCOPY     VARCHAR2   /*Added the nocopy check for 4537865 */
28529 )
28530 IS
28531    l_api_name                   CONSTANT        VARCHAR2(30)            := 'fetch_structure_version';
28532    l_index                                      NUMBER;
28533    i                                            NUMBER;
28534 
28535 BEGIN
28536 
28537 --  Standard begin of API savepoint
28538 
28539     SAVEPOINT fetch_struc_pub;
28540 
28541 --  Standard call to check for call compatibility.
28542 
28543     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
28544                                          p_api_version_number   ,
28545                                          l_api_name             ,
28546                                          G_PKG_NAME             )
28547     THEN
28548 
28549         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28550 
28551     END IF;
28552 
28553 --  Initialize the message table if requested.
28554 
28555     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28556     THEN
28557 
28558         FND_MSG_PUB.initialize;
28559 
28560     END IF;
28561 
28562 --  Set API return status to success
28563 
28564     p_return_status := FND_API.G_RET_STS_SUCCESS;
28565 
28566 
28567   FOR i in 1..G_Struc_out_tbl.count LOOP
28568 
28569       IF G_struc_out_tbl(i).structure_type = p_structure_type
28570       THEN
28571 
28572         IF G_struc_out_tbl(i).structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28573         THEN
28574                 p_pa_structure_version_id := NULL;
28575         ELSE
28576 
28577                 p_pa_structure_version_id := G_struc_out_tbl(i).structure_version_id;
28578 
28579         END IF;
28580         p_struc_return_status := G_struc_out_tbl(i).return_status;
28581         exit;
28582       END IF;
28583   END LOOP;
28584 
28585 EXCEPTION
28586         WHEN FND_API.G_EXC_ERROR
28587         THEN
28588         ROLLBACK TO fetch_struc_pub;
28589 
28590         p_return_status := FND_API.G_RET_STS_ERROR;
28591 
28592     -- 4537865
28593     p_pa_structure_version_id := NULL ;
28594     p_struc_return_status := NULL ;
28595 
28596 
28597         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28598         THEN
28599         ROLLBACK TO fetch_struc_pub;
28600 
28601         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28602 
28603         -- 4537865
28604         p_pa_structure_version_id := NULL ;
28605         p_struc_return_status := NULL ;
28606 
28607 
28608         WHEN OTHERS THEN
28609         ROLLBACK TO fetch_struc_pub;
28610 
28611         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28612 
28613         -- 4537865
28614         p_pa_structure_version_id := NULL ;
28615         p_struc_return_status := NULL ;
28616 
28617         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28618         THEN
28619                 FND_MSG_PUB.add_exc_msg
28620                                 ( p_pkg_name            => G_PKG_NAME
28621                                 , p_procedure_name      => l_api_name   );
28622 
28623         END IF;
28624 
28625 
28626 END fetch_structure_version;
28627 
28628 
28629 --------------------------------------------------------------------------------
28630 --Name:               fetch_task_version
28631 --Type:               Procedure
28632 --Description:        This procedure can be used to get the task version related output data
28633 --           to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
28634 --
28635 --Called subprograms:
28636 --
28637 --
28638 --
28639 --History:
28640 --    30-JAN-2003        anlee    Created
28641 --
28642 
28643 PROCEDURE fetch_task_version
28644 ( p_api_version_number    IN  NUMBER
28645  ,p_init_msg_list    IN  VARCHAR2  := FND_API.G_FALSE
28646  ,p_return_status    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
28647  ,p_task_index      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28648  ,p_task_version_id    OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
28649  ,p_task_return_status    OUT NOCOPY  VARCHAR2  )  /*Added the nocopy check for 4537865 */
28650 IS
28651 
28652    l_api_name      CONSTANT  VARCHAR2(30)     := 'fetch_task_version';
28653    l_index          NUMBER;
28654    i            NUMBER;
28655 
28656 BEGIN
28657 
28658 --  Standard begin of API savepoint
28659 
28660     SAVEPOINT fetch_task_version_pub;
28661 
28662 --  Standard call to check for call compatibility.
28663 
28664     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
28665                                p_api_version_number  ,
28666                                l_api_name         ,
28667                                G_PKG_NAME         )
28668     THEN
28669 
28670   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28671 
28672     END IF;
28673 
28674 --  Initialize the message table if requested.
28675 
28676     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28677     THEN
28678 
28679   FND_MSG_PUB.initialize;
28680 
28681     END IF;
28682 
28683 --  Set API return status to success
28684 
28685     p_return_status := FND_API.G_RET_STS_SUCCESS;
28686 
28687 --  Check Task index value, when they don't provide an index we will error out
28688     IF p_task_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28689     OR p_task_index IS NULL
28690     THEN
28691   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28692   THEN
28693          pa_interface_utils_pub.map_new_amg_msg
28694            ( p_old_message_code => 'PA_INDEX_NOT_PROVIDED'
28695             ,p_msg_attribute    => 'CHANGE'
28696             ,p_resize_flag      => 'N'
28697             ,p_msg_context      => 'GENERAL'
28698             ,p_attribute1       => ''
28699             ,p_attribute2       => ''
28700             ,p_attribute3       => ''
28701             ,p_attribute4       => ''
28702             ,p_attribute5       => '');
28703   END IF;
28704 
28705   p_return_status := FND_API.G_RET_STS_ERROR;
28706   RAISE FND_API.G_EXC_ERROR;
28707     ELSE
28708   l_index := p_task_index;
28709     END IF;
28710 
28711   If G_Tasks_out_tbl.exists(l_index) THEN
28712 --  assign global table fields to the outgoing parameter
28713 --  we don't want to return the big number G_PA_MISS_NUM
28714 
28715                 --project structrues
28716     IF G_tasks_out_tbl(l_index).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28717         THEN
28718                 p_task_version_id := NULL;
28719         ELSE
28720 
28721                 p_task_version_id := G_tasks_out_tbl(l_index).task_version_id;
28722 
28723         END IF;
28724                 --project structrues
28725 
28726      p_task_return_status    := G_tasks_out_tbl(l_index).return_status;
28727 
28728 END IF;
28729 
28730 EXCEPTION
28731 
28732   WHEN FND_API.G_EXC_ERROR
28733   THEN
28734   ROLLBACK TO fetch_task_version_pub;
28735 
28736   p_return_status := FND_API.G_RET_STS_ERROR;
28737 
28738  -- 4537865
28739   p_task_version_id := NULL ;
28740 
28741 
28742   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28743   THEN
28744   ROLLBACK TO fetch_task_version_pub;
28745 
28746   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28747 
28748  -- 4537865
28749   p_task_version_id := NULL ;
28750 
28751 
28752   WHEN OTHERS THEN
28753   ROLLBACK TO fetch_task_version_pub;
28754 
28755   p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28756  -- 4537865
28757   p_task_version_id := NULL ;
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 
28768 END fetch_task_version;
28769 
28770 --bug 2765115
28771 PROCEDURE get_task_version
28772 ( p_api_version_number          IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28773  ,p_init_msg_list               IN      VARCHAR2        := FND_API.G_FALSE
28774  ,p_return_status               OUT NOCOPY     VARCHAR2  /*Added the nocopy check for 4537865 */
28775  ,p_pa_project_id                  IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28776  ,p_pa_task_id                     IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28777  ,p_pa_structure_version_id        IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28778  ,p_task_version_id             OUT  NOCOPY   NUMBER  /*Added the nocopy check for 4537865 */
28779 ) IS
28780 
28781    l_api_name                   CONSTANT        VARCHAR2(30)            := 'get_task_version';
28782    l_index                                      NUMBER;
28783    i                                            NUMBER;
28784 
28785 BEGIN
28786 
28787 --  Standard begin of API savepoint
28788 
28789     SAVEPOINT get_task_version_pub;
28790 
28791 --  Standard call to check for call compatibility.
28792 
28793     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
28794                                          p_api_version_number   ,
28795                                          l_api_name             ,
28796                                          G_PKG_NAME             )
28797     THEN
28798 
28799         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28800 
28801     END IF;
28802 
28803 --  Initialize the message table if requested.
28804 
28805     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28806     THEN
28807 
28808         FND_MSG_PUB.initialize;
28809 
28810     END IF;
28811 
28812 --  Set API return status to success
28813     p_return_status := FND_API.G_RET_STS_SUCCESS;
28814 
28815     IF ( p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_task_id IS NULL ) OR
28816        ( p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_project_id IS NULL ) OR
28817        ( p_pa_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_structure_version_id IS NULL )
28818     THEN
28819         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28820         THEN
28821         --My suggestion was to create a new message but Sakthi asked me use the following
28822         --Since these changes are done at the last moment of PA K around build9. We are hesitant to
28823         --log a new message bug. Sakthi suggested to use an existing message PA_PS_INV_STR_VER_ID
28824         --although it does not convey full message here and we will change it later
28825         --The message PA_PS_INV_STR_VER_ID does not have the AMG at the end so I cant use the standard api
28826         --call for AMG messages i.e,pa_interface_utils_pub.map_new_amg_msg
28827 
28828           PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28829                                ,p_msg_name       => 'PA_PS_INV_STR_VER_ID');
28830         END IF;
28831         p_return_status := FND_API.G_RET_STS_ERROR;
28832         RAISE FND_API.G_EXC_ERROR;
28833     END IF;
28834 
28835     PA_PROJ_TASK_STRUC_PUB.get_task_version_id(
28836               p_project_id               => p_pa_project_id
28837              ,p_structure_version_id     => p_pa_structure_version_id
28838              ,p_task_id                  => p_pa_task_id
28839              ,x_task_version_id          => p_task_version_id
28840           );
28841 
28842     IF p_task_version_id IS NULL
28843     THEN
28844         p_return_status := FND_API.G_RET_STS_ERROR;
28845         RAISE FND_API.G_EXC_ERROR;
28846     END IF;
28847 
28848 EXCEPTION
28849 
28850         WHEN FND_API.G_EXC_ERROR
28851         THEN
28852         ROLLBACK TO get_task_version_pub;
28853 
28854         p_return_status := FND_API.G_RET_STS_ERROR;
28855 
28856     --4537865
28857     p_task_version_id := NULL ;
28858 
28859 
28860         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28861         THEN
28862         ROLLBACK TO get_task_version_pub;
28863 
28864         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28865             --4537865
28866         p_task_version_id := NULL ;
28867 
28868 
28869         WHEN OTHERS THEN
28870         ROLLBACK TO get_task_version_pub;
28871 
28872         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28873         --4537865
28874         p_task_version_id := NULL ;
28875         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28876         THEN
28877                 FND_MSG_PUB.add_exc_msg
28878                                 ( p_pkg_name            => G_PKG_NAME
28879                                 , p_procedure_name      => l_api_name   );
28880 
28881         END IF;
28882 
28883 END get_task_version;
28884 --bug 2765115
28885 
28886 --------------------------- FP M changes begin (venkat) 4 ------------------------------------
28887 
28888 PROCEDURE change_current_working_version
28889 (p_api_version_number           IN      NUMBER
28890 , p_init_msg_list               IN      VARCHAR2        := 'F'
28891 , p_commit                      IN      VARCHAR2        := 'F'
28892 , p_return_status               OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
28893 , p_msg_count                   OUT NOCOPY    NUMBER /*Added the nocopy check for 4537865 */
28894 , p_msg_data                    OUT NOCOPY     VARCHAR2  /*Added the nocopy check for 4537865 */
28895 , p_structure_version_id        IN      NUMBER
28896 , p_pa_project_id               IN      NUMBER
28897 )
28898 
28899 IS
28900 
28901 l_api_name   CONSTANT        VARCHAR2(30)  := 'change_current_working_version';
28902 l_rec_version_number         NUMBER;
28903 l_pev_structure_id       NUMBER;
28904 l_name               VARCHAR2(30);
28905 
28906 CURSOR l_temp_cursor
28907 IS
28908 SELECT record_version_number, pev_structure_id, name
28909 FROM      PA_PROJ_ELEM_VER_STRUCTURE
28910 WHERE  project_id = p_pa_project_id  and element_version_id = p_structure_version_id;
28911 
28912 
28913 BEGIN
28914 
28915 --  Standard begin of API savepoint
28916 
28917     SAVEPOINT get_task_version_pub;
28918 
28919 --  Standard call to check for call compatibility.
28920 
28921     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
28922                                          p_api_version_number   ,
28923                                          l_api_name             ,
28924                                          G_PKG_NAME             )
28925     THEN
28926 
28927         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28928 
28929     END IF;
28930 
28931 --  Initialize the message table if requested.
28932 
28933     IF FND_API.TO_BOOLEAN( p_init_msg_list )
28934     THEN
28935 
28936         FND_MSG_PUB.initialize;
28937 
28938     END IF;
28939 
28940 --  Set API return status to success
28941     p_return_status := FND_API.G_RET_STS_SUCCESS;
28942 
28943     IF ( p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_project_id IS NULL ) OR
28944        ( p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_structure_version_id IS NULL )
28945     THEN
28946         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28947         THEN
28948 
28949     -- Using the message name PA_PS_INV_STR_VER_ID
28950 
28951       PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28952                                ,p_msg_name       => 'PA_PS_INV_STR_VER_ID');
28953         END IF;
28954         p_return_status := FND_API.G_RET_STS_ERROR;
28955         RAISE FND_API.G_EXC_ERROR;
28956     END IF;
28957 
28958    OPEN l_temp_cursor;
28959    FETCH l_temp_cursor INTO l_rec_version_number, l_pev_structure_id, l_name;
28960 
28961    IF l_temp_cursor%NOTFOUND
28962    THEN
28963     CLOSE l_temp_cursor;
28964         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28965         THEN
28966     -- Using the message name PA_PS_INV_STR_VER_ID
28967     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28968                               ,p_msg_name       => 'PA_PS_INV_STR_VER_ID');
28969         END IF;
28970         p_return_status := FND_API.G_RET_STS_ERROR;
28971         RAISE FND_API.G_EXC_ERROR;
28972    END IF;
28973    CLOSE l_temp_cursor;
28974 
28975    PA_PROJECT_STRUCTURE_PVT1.update_structure_version_attr
28976     (p_api_version          => p_api_version_number
28977     ,p_init_msg_list        => p_init_msg_list
28978     ,p_commit                       => FND_API.G_FALSE--bug 3766967
28979     ,p_pev_structure_id     => l_pev_structure_id
28980     ,p_structure_version_name       => l_name
28981     ,p_record_version_number        => l_rec_version_number
28982     ,p_current_working_ver_flag     => 'Y'
28983     ,x_return_status        => p_return_status
28984     ,x_msg_count            => p_msg_count
28985     ,x_msg_data         => p_msg_data
28986     );
28987 
28988    IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28989           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
28990    ELSIF  (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28991           RAISE  FND_API.G_EXC_ERROR;
28992    END IF;
28993 
28994 EXCEPTION
28995 
28996         WHEN FND_API.G_EXC_ERROR
28997         THEN
28998         ROLLBACK TO get_task_version_pub;
28999 
29000         p_return_status := FND_API.G_RET_STS_ERROR;
29001 
29002 
29003         WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29004         THEN
29005         ROLLBACK TO get_task_version_pub;
29006 
29007         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29008 
29009 
29010         WHEN OTHERS THEN
29011         ROLLBACK TO get_task_version_pub;
29012 
29013         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29014         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29015         THEN
29016                 FND_MSG_PUB.add_exc_msg
29017                                 ( p_pkg_name            => G_PKG_NAME
29018                                 , p_procedure_name      => l_api_name   );
29019 
29020         END IF;
29021 
29022 
29023 END change_current_working_version;
29024 
29025 -------------------------- FP M changes end (venkat) 4 ----------------------------------------
29026 
29027 -- Progress Management Changes. Bug # 3420093.
29028 
29029 -- Name:               apply_lp_prog_on_cwv
29030 -- Type:               Procedure
29031 -- Description:        This procedure can be used to apply the latest progress on the given
29032 --                     structure_version.
29033 --
29034 -- Called subprograms: pa_progress_pub.apply_lp_prog_on_cwv().
29035 --
29036 --
29037 --
29038 --History:
29039 --
29040 --    02-APR-2004       Rakesh Raghavan         Created
29041 
29042 PROCEDURE apply_lp_prog_on_cwv(
29043   p_api_version                 IN      NUMBER          :=1.0
29044  ,p_init_msg_list               IN      VARCHAR2        :=FND_API.G_TRUE
29045  ,p_commit                      IN      VARCHAR2        :=FND_API.G_FALSE
29046  ,p_pa_project_id               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29047  ,p_pm_project_reference        IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29048  ,p_working_str_version_id      IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29049  ,p_return_status               OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
29050  ,p_msg_count                   OUT NOCOPY     NUMBER  /*Added the nocopy check for 4537865 */
29051  ,p_msg_data                    OUT NOCOPY     VARCHAR2 /*Added the nocopy check for 4537865 */
29052 )
29053 
29054 IS
29055    l_api_name           CONSTANT   VARCHAR2(30)    := 'APPLY_LP_PROG_ON_CWV';
29056    l_api_version        CONSTANT   NUMBER          := p_api_version;
29057    l_user_id                       NUMBER          := FND_GLOBAL.USER_ID;
29058    l_login_id                      NUMBER          := FND_GLOBAL.LOGIN_ID;
29059    l_return_status                 VARCHAR2(1);
29060    l_msg_count                     NUMBER;
29061    l_msg_data                      VARCHAR2(250);
29062 
29063    l_function_allowed      VARCHAR2(1);
29064    l_resp_id               NUMBER := FND_GLOBAL.Resp_id;
29065    l_debug_mode            VARCHAR2(1);
29066 
29067    l_project_id            NUMBER;
29068 
29069 BEGIN
29070         --  Standard begin of API savepoint.
29071 
29072         savepoint APPLY_LP_PROG_ON_CWV;
29073 
29074         l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
29075 
29076         --  Standard call to check for call compatibility.
29077 
29078         IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
29079 
29080                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29081 
29082         END IF;
29083 
29084         -- Initialize the message table if requested.
29085 
29086         IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
29087 
29088                 FND_MSG_PUB.initialize;
29089 
29090         END IF;
29091 
29092         --  Set API return status to success.
29093 
29094         p_return_status := FND_API.G_RET_STS_SUCCESS;
29095 
29096         /*      Checking function security.     */
29097 
29098        -- Actions performed using the APIs would be subject to
29099        -- function security. If the responsibility does not allow
29100        -- such functions to be executed, the API should not proceed further
29101        -- since the user does not have access to such functions.
29102        -- The function security for this API is the same as that enforced
29103        -- in the the update_task() API.
29104 
29105     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
29106       (p_api_version_number => p_api_version,
29107        p_responsibility_id  => l_resp_id,
29108        p_function_name      => 'PA_PM_UPDATE_TASK',
29109        p_msg_count          => l_msg_count,
29110        p_msg_data           => l_msg_data,
29111        p_return_status      => l_return_status,
29112        p_function_allowed   => l_function_allowed );
29113 
29114         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
29115         THEN
29116                         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29117 
29118         ELSIF l_return_status = FND_API.G_RET_STS_ERROR
29119         THEN
29120                         RAISE FND_API.G_EXC_ERROR;
29121         END IF;
29122         IF l_function_allowed = 'N' THEN
29123           pa_interface_utils_pub.map_new_amg_msg
29124           ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
29125            ,p_msg_attribute    => 'CHANGE'
29126            ,p_resize_flag      => 'Y'
29127            ,p_msg_context      => 'GENERAL'
29128            ,p_attribute1       => ''
29129            ,p_attribute2       => ''
29130            ,p_attribute3       => ''
29131            ,p_attribute4       => ''
29132            ,p_attribute5       => '');
29133            p_return_status := FND_API.G_RET_STS_ERROR;
29134            RAISE FND_API.G_EXC_ERROR;
29135         END IF;
29136 
29137         /*      Converting project_reference to project_id      */
29138 
29139         PA_PROJECT_PVT.Convert_pm_projref_to_id
29140                 (p_pm_project_reference =>      p_pm_project_reference
29141                  ,  p_pa_project_id     =>      p_pa_project_id
29142                  ,  p_out_project_id    =>      l_project_id
29143                  ,  p_return_status     =>      l_return_status);
29144 
29145       IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
29146               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
29147       ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
29148               RAISE  FND_API.G_EXC_ERROR;
29149       END IF;
29150 
29151         /*      Getting the working structure_version_id        */
29152 
29153         if (p_working_str_version_id = NULL or p_working_str_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) then
29154                 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
29155                          pa_interface_utils_pub.map_new_amg_msg
29156                                 (p_old_message_code => 'PA_WRKG_STR_VER_ID_IS_MISSING'
29157                                 ,p_msg_attribute    => 'CHANGE'
29158                                 ,p_resize_flag      => 'N'
29159                                 ,p_msg_context      => 'GENERAL'
29160                                 ,p_attribute1       => ''
29161                                 ,p_attribute2       => ''
29162                                 ,p_attribute3       => ''
29163                                 ,p_attribute4       => ''
29164                                 ,p_attribute5       => '');
29165                 end if;
29166 
29167                           p_return_status := FND_API.G_RET_STS_ERROR;
29168                           RAISE FND_API.G_EXC_ERROR;
29169         end if;
29170 
29171         /*      Calling: PA_PROGRESS_PUB.apply_lp_prog_on_cwv.  */
29172 
29173         PA_PROGRESS_PUB.apply_lp_prog_on_cwv(p_api_version              =>      p_api_version
29174                                             ,p_init_msg_list            =>      p_init_msg_list
29175                                             ,p_commit                   =>      FND_API.G_FALSE--bug 3766967
29176                                             ,p_project_id               =>      l_project_id
29177                                             ,p_working_str_version_id   =>      p_working_str_version_id
29178                                             ,x_return_status            =>      l_return_status
29179                                             ,x_msg_count                =>      l_msg_count
29180                                             ,x_msg_data                 =>      l_msg_data);
29181 
29182         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
29183                 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
29184                                      p_msg_name       => l_msg_data);
29185                 p_msg_data := l_msg_data;
29186                 p_return_status := 'E';
29187                 p_msg_count := l_msg_count;
29188                 RAISE  FND_API.G_EXC_ERROR;
29189         END IF;
29190 
29191         IF (p_commit = FND_API.G_TRUE) THEN
29192                 COMMIT;
29193         END IF;
29194 
29195 EXCEPTION
29196 
29197     when FND_API.G_EXC_ERROR then
29198 
29199       if p_commit = FND_API.G_TRUE then
29200         rollback to APPLY_LP_PROG_ON_CWV;
29201       end if;
29202 
29203       p_return_status := FND_API.G_RET_STS_ERROR;
29204 
29205       FND_MSG_PUB.Count_And_Get
29206         (p_count    =>  p_msg_count
29207          ,p_data    =>  p_msg_data);
29208 
29209     when FND_API.G_EXC_UNEXPECTED_ERROR then
29210       if p_commit = FND_API.G_TRUE then
29211          rollback to APPLY_LP_PROG_ON_CWV;
29212       end if;
29213 
29214       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29215 
29216       FND_MSG_PUB.Count_And_Get
29217         (p_count    =>  p_msg_count
29218          ,p_data    =>  p_msg_data);
29219 
29220     when OTHERS then
29221 
29222       if p_commit = FND_API.G_TRUE then
29223          rollback to APPLY_LP_PROG_ON_CWV;
29224       end if;
29225 
29226       p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29227 
29228       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29229         THEN
29230                 FND_MSG_PUB.add_exc_msg
29231                    (p_pkg_name    => G_PKG_NAME
29232                    ,p_procedure_name  => l_api_name);
29233         END IF;
29234 
29235       FND_MSG_PUB.Count_And_Get
29236         (p_count    =>  p_msg_count
29237          ,p_data    =>  p_msg_data);
29238       raise;
29239 
29240 END apply_lp_prog_on_cwv;
29241 
29242 -- Progress Management Changes. Bug # 3420093.
29243 
29244 -- 3435905 FP M Changes for Deliverables : Start
29245 
29246 --------------------------------------------------------------------------------
29247 --Name:               load_deliverable
29248 --Type:               Procedure
29249 --Description:        This procedure can be used to load a record of deliverable from input
29250 --                     paramters to global table
29251 --
29252 --Called subprograms:
29253 --
29254 --
29255 --
29256 --History:
29257 --    03-Mar-2004   Puneet            Created
29258 --
29259 
29260 PROCEDURE load_deliverable
29261 (   p_api_version            IN  NUMBER     := 1.0
29262   , p_init_msg_list          IN  VARCHAR2   := FND_API.G_TRUE
29263   , p_debug_mode             IN  VARCHAR2   := 'N'
29264   , x_return_status          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29265   , p_deliverable_name       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29266   , p_deliverable_short_name IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29267   , p_deliverable_type_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29268   , p_deliverable_owner_id   IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29269   , p_description            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29270   , p_status_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29271   , p_due_date               IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29272   , p_completion_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29273   , p_progress_weight        IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29274   , p_pm_source_code         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29275   , px_deliverable_id     IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
29276   , p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29277   -- for bug# 3729250
29278   --  , p_carrying_out_org_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29279   , p_task_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29280   , p_task_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29281   , p_item_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29282   , P_inventory_org_id       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29283   , p_quantity               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29284   , p_uom_code               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29285   -- for bug# 3729250
29286   --  , p_item_description       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29287   , p_unit_price         IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29288   -- for bug# 3729250
29289   , p_unit_number        IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29290   , p_currency_code      IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29291   )
29292   IS
29293 
29294    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_deliverable';
29295 
29296 BEGIN
29297 
29298 --  Standard begin of API savepoint
29299 
29300     SAVEPOINT load_deliverable_pub;
29301 
29302 --  Standard call to check for call compatibility.
29303 
29304     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
29305                                p_api_version  ,
29306                                l_api_name         ,
29307                                G_PKG_NAME       )
29308     THEN
29309 
29310        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29311 
29312     END IF;
29313 
29314 --  Initialize the message table if requested.
29315 
29316     IF FND_API.TO_BOOLEAN( p_init_msg_list )
29317     THEN
29318 
29319        FND_MSG_PUB.initialize;
29320 
29321     END IF;
29322 
29323 --  Set API return status to success
29324 
29325     x_return_status := FND_API.G_RET_STS_SUCCESS;
29326 
29327 -- Load the record only if deliverable_short_name is passed
29328   --   IF (p_deliverable_short_name <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND  /* Bug 39590235 */
29329        IF (p_deliverable_short_name <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29330           (p_deliverable_short_name IS NOT NULL) THEN
29331 
29332 -- assign a value to the global counter for this table
29333        G_deliverables_in_tbl_count  := G_deliverables_in_tbl_count + 1;
29334 
29335         IF p_debug_mode = 'Y' THEN
29336            pa_debug.g_err_stage := 'Loading deliverable ['|| p_deliverable_short_name||'] element [ '||G_deliverables_in_tbl_count ||']';
29337            pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29338         END IF;
29339 
29340 -- assign incoming parameters to the global table fields
29341     G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_name          := p_deliverable_name       ;
29342     G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_short_name    := p_deliverable_short_name ;
29343     G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_type_id       := p_deliverable_type_id    ;
29344     G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_owner_id      := p_deliverable_owner_id   ;
29345     G_deliverables_in_tbl(G_deliverables_in_tbl_count).description               := p_description            ;
29346     G_deliverables_in_tbl(G_deliverables_in_tbl_count).status_code               := p_status_code            ;
29347     G_deliverables_in_tbl(G_deliverables_in_tbl_count).due_date                  := p_due_date               ;
29348     G_deliverables_in_tbl(G_deliverables_in_tbl_count).completion_date           := p_completion_date        ;
29349     G_deliverables_in_tbl(G_deliverables_in_tbl_count).progress_weight           := p_progress_weight        ;
29350     G_deliverables_in_tbl(G_deliverables_in_tbl_count).pm_source_code            := p_pm_source_code         ;
29351         G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_id            := px_deliverable_id        ;
29352     G_deliverables_in_tbl(G_deliverables_in_tbl_count).pm_deliverable_reference  := p_pm_deliverable_reference;
29353     -- for bug# 3729250
29354     --  G_deliverables_in_tbl(G_deliverables_in_tbl_count).carrying_out_org_id       := p_carrying_out_org_id  ;
29355     G_deliverables_in_tbl(G_deliverables_in_tbl_count).task_id                   := p_task_id                ;
29356     G_deliverables_in_tbl(G_deliverables_in_tbl_count).task_source_reference     := p_task_source_reference  ;
29357     G_deliverables_in_tbl(G_deliverables_in_tbl_count).item_id                   := p_item_id                ;
29358     G_deliverables_in_tbl(G_deliverables_in_tbl_count).inventory_org_id      := p_inventory_org_id       ;
29359     G_deliverables_in_tbl(G_deliverables_in_tbl_count).quantity                  := p_quantity               ;
29360     G_deliverables_in_tbl(G_deliverables_in_tbl_count).uom_code                  := p_uom_code               ;
29361     -- for bug# 3729250
29362     --  G_deliverables_in_tbl(G_deliverables_in_tbl_count).item_description          := p_item_description       ;
29363     G_deliverables_in_tbl(G_deliverables_in_tbl_count).unit_price                := p_unit_price             ;
29364     G_deliverables_in_tbl(G_deliverables_in_tbl_count).unit_number               := p_unit_number            ;
29365     G_deliverables_in_tbl(G_deliverables_in_tbl_count).currency_code         := p_currency_code          ;
29366    END IF;
29367 
29368 EXCEPTION
29369 
29370   WHEN FND_API.G_EXC_ERROR THEN
29371     ROLLBACK TO load_deliverable_pub;
29372     x_return_status := FND_API.G_RET_STS_ERROR;
29373 
29374 
29375   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
29376     ROLLBACK TO load_deliverable_pub;
29377     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29378 
29379 
29380   WHEN OTHERS THEN
29381     ROLLBACK TO load_deliverable_pub;
29382     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29383 
29384   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29385   THEN
29386     FND_MSG_PUB.add_exc_msg
29387         ( p_pkg_name    => G_PKG_NAME
29388         , p_procedure_name  => l_api_name  );
29389 
29390   END IF;
29391 
29392 END load_deliverable;
29393 
29394 --------------------------------------------------------------------------------
29395 --Name:               load_deliverables
29396 --Type:               Procedure
29397 --Description:        This procedure can be used to load a set record of deliverables from input
29398 --                     paramters to global table
29399 --
29400 --Called subprograms:   load_deliverable
29401 --
29402 --
29403 --
29404 --History:
29405 --    03-Mar-2004   Puneet            Created
29406 --
29407 
29408 PROCEDURE load_deliverables
29409 (   p_api_version            IN  NUMBER     := 1.0
29410   , p_init_msg_list          IN  VARCHAR2   := FND_API.G_TRUE
29411   , p_debug_mode             IN  VARCHAR2  := 'N'
29412   , x_return_status          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29413   , p_deliverable_name       IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29414   --, p_deliverable_name       IN  PA_VC_1000_240 := PA_VC_1000_240(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29415 --  , p_deliverable_short_name IN  PA_VC_1000_100 := PA_VC_1000_100(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29416   , p_deliverable_short_name IN  PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29417   , p_deliverable_type_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29418   , p_deliverable_owner_id   IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29419   , p_description            IN  PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29420   , p_status_code            IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29421   , p_due_date               IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29422   , p_completion_date        IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29423   , p_progress_weight        IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29424   , p_pm_source_code         IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29425   , px_deliverable_id     IN OUT NOCOPY PA_NUM_1000_NUM /*Added the nocopy check for 4537865 */
29426   , p_pm_deliverable_reference IN  PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29427   -- for bug# 3729250
29428   --  , p_carrying_out_org_id    IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29429   , p_task_id                IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29430   , p_task_source_reference  IN  PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29431   , p_item_id                IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29432   , P_inventory_org_id       IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29433   , p_quantity               IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29434   , p_uom_code               IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29435   -- for bug# 3729250
29436   --  , p_item_description       IN  PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29437   , p_unit_price         IN  PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29438   -- for bug# 3729250
29439   , p_unit_number        IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29440 --  , p_currency_code        IN  PA_VC_1000_15 := PA_VC_1000_15(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29441   , p_currency_code      IN  PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29442   )
29443   IS
29444 
29445    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_deliverables';
29446 
29447 BEGIN
29448 
29449 --  Standard begin of API savepoint
29450 
29451     SAVEPOINT load_deliverables_pub;
29452 
29453 --  Standard call to check for call compatibility.
29454 
29455     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
29456                                p_api_version  ,
29457                                l_api_name         ,
29458                                G_PKG_NAME       )
29459     THEN
29460 
29461        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29462 
29463     END IF;
29464 
29465 --  Initialize the message table if requested.
29466 
29467     IF FND_API.TO_BOOLEAN( p_init_msg_list )
29468     THEN
29469 
29470        FND_MSG_PUB.initialize;
29471 
29472     END IF;
29473 
29474 --  Set API return status to success
29475 
29476     x_return_status := FND_API.G_RET_STS_SUCCESS;
29477 
29478 -- Load the table only if deliverable_short_name is passed
29479  FOR i in 1..1000 LOOP
29480     IF (p_deliverable_short_name(i) <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND                    /* Bug # 3590235 */
29481           (p_deliverable_short_name(i) IS NOT NULL) THEN
29482 
29483        load_deliverable
29484        (   p_api_version              => p_api_version
29485          , p_init_msg_list            => p_init_msg_list
29486          , p_debug_mode               => p_debug_mode
29487          , x_return_status            => x_return_status
29488          , p_deliverable_name         => p_deliverable_name(i)
29489          , p_deliverable_short_name   => p_deliverable_short_name(i)
29490          , p_deliverable_type_id      => p_deliverable_type_id(i)
29491          , p_deliverable_owner_id     => p_deliverable_owner_id(i)
29492          , p_description              => p_description(i)
29493          , p_status_code              => p_status_code(i)
29494          , p_due_date                 => p_due_date(i)
29495          , p_completion_date          => p_completion_date(i)
29496          , p_progress_weight          => p_progress_weight(i)
29497          , p_pm_source_code           => p_pm_source_code(i)
29498          , px_deliverable_id          => px_deliverable_id(i)
29499          , p_pm_deliverable_reference => p_pm_deliverable_reference(i)
29500          -- for bug# 3729250
29501          --  , p_carrying_out_org_id      => p_carrying_out_org_id(i)
29502          , p_task_id                  => p_task_id(i)
29503          , p_task_source_reference    => p_task_source_reference(i)
29504          , p_item_id                  => p_item_id(i)
29505          , P_inventory_org_id         => p_inventory_org_id(i)
29506          , p_quantity                 => p_quantity(i)
29507          , p_uom_code                 => p_uom_code(i)
29508          -- for bug# 3729250
29509          --  , p_item_description         => p_item_description(i)
29510          , p_unit_price               => p_unit_price(i)
29511          , p_unit_number              => p_unit_number(i)
29512          , p_currency_code            => p_currency_code(i)
29513          ) ;
29514    END IF;
29515 END LOOP;
29516 
29517 EXCEPTION
29518 
29519   WHEN FND_API.G_EXC_ERROR
29520   THEN
29521   ROLLBACK TO load_deliverables_pub;
29522 
29523   x_return_status := FND_API.G_RET_STS_ERROR;
29524 
29525 
29526   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29527   THEN
29528   ROLLBACK TO load_deliverables_pub;
29529 
29530   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29531 
29532 
29533   WHEN OTHERS THEN
29534   ROLLBACK TO load_deliverables_pub;
29535 
29536   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29537 
29538   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29539   THEN
29540     FND_MSG_PUB.add_exc_msg
29541         ( p_pkg_name    => G_PKG_NAME
29542         , p_procedure_name  => l_api_name  );
29543 
29544   END IF;
29545 
29546 END load_deliverables;
29547 
29548 --------------------------------------------------------------------------------
29549 --Name:               load_action
29550 --Type:               Procedure
29551 --Description:        This procedure can be used to load a record of Deliverable
29552 --                    Actions from input paramters to global tables
29553 --
29554 --Called subprograms:
29555 --
29556 --
29557 --
29558 --History:
29559 --    03-Mar-2004   Puneet            Created
29560 --
29561 
29562 PROCEDURE load_action
29563 (   p_api_version                  IN  NUMBER    := 1.0
29564   , p_init_msg_list                IN  VARCHAR2  := FND_API.G_TRUE
29565   , p_debug_mode                   IN  VARCHAR2  := 'N'
29566   , x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29567   , p_action_name                  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29568   , p_action_id                    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29569   , p_action_owner_id              IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29570   , p_function_code                IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29571   , p_due_date                     IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29572   , p_description                  IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29573   , p_completion_date              IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29574   , p_pm_source_code               IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29575   , p_pm_action_reference          IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29576   -- for bug# 3729250
29577   --  , p_carrying_out_org_id          IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29578   , p_pm_deliverable_reference     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29579   , p_deliverable_id               IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29580   -- added for bug# 3729250
29581   , p_financial_task_reference     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29582   , p_financial_task_id            IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29583   , p_destination_type_code        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29584   , p_receiving_org_id             IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29585   , p_receiving_location_id        IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29586   , p_po_need_by_date              IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29587   , p_vendor_id                    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29588   , p_vendor_site_code             IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29589 --  , p_project_currency             IN  VARCHAR2    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29590   , p_Quantity                     IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29591   , p_uom_code                     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29592   , p_unit_price                   IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29593   , p_exchange_rate_type           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29594   , p_exchange_rate_date           IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29595   , p_exchange_rate                IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  /* Bug 3590235 */
29596   , p_expenditure_type             IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29597   , p_expenditure_org_id           IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29598   , p_expenditure_item_date        IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29599   , p_requisition_line_type_id     IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29600   , p_category_id                  IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29601   , p_ready_to_procure_flag        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29602   , p_initiate_procure_flag        IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29603   , p_ship_from_organization_id    IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29604   , p_ship_from_location_id        IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29605   , p_ship_to_organization_id      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29606   , p_ship_to_location_id          IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29607   , p_demand_schedule              IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29608   , p_expected_shipment_date       IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29609   , p_promised_shipment_date       IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29610   , p_volume                       IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29611   , p_volume_uom                   IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29612   , p_weight                       IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29613   , p_weight_uom                   IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29614   , p_ready_to_ship_flag           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29615   , p_initiate_planning_flag       IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29616   , p_initiate_shipping_flag       IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29617   , p_event_type                   IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29618   , p_currency                     IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29619   , p_invoice_amount               IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29620   , p_revenue_amount               IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29621   , p_event_date                   IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29622   , p_event_number                 IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29623   , p_organization_id              IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29624   , p_bill_hold_flag               IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29625   , p_project_functional_rate_type IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29626   , p_project_functional_rate_date IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29627   , p_project_functional_rate      IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29628   , p_project_rate_type            IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29629   , p_project_rate_date            IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29630   , p_project_rate                 IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29631   , p_funding_rate_type            IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29632   , p_funding_rate_date            IN  DATE      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29633   , p_funding_rate                 IN  NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29634   , p_pm_event_reference           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
29635 )
29636   IS
29637 
29638    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_actions';
29639 
29640 BEGIN
29641 
29642 --  Standard begin of API savepoint
29643 
29644     SAVEPOINT load_action_pub;
29645 
29646 --  Standard call to check for call compatibility.
29647 
29648     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
29649                                p_api_version  ,
29650                                l_api_name         ,
29651                                G_PKG_NAME       )
29652     THEN
29653 
29654        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29655 
29656     END IF;
29657 
29658 --  Initialize the message table if requested.
29659 
29660     IF FND_API.TO_BOOLEAN( p_init_msg_list )
29661     THEN
29662 
29663        FND_MSG_PUB.initialize;
29664 
29665     END IF;
29666 
29667 --  Set API return status to success
29668 
29669     x_return_status := FND_API.G_RET_STS_SUCCESS;
29670 
29671 -- Load the table only if action_name is passed
29672    IF (p_action_name <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29673          (p_action_name IS NOT NULL) THEN
29674 
29675 -- assign a value to the global counter for this table
29676         G_dlvr_actions_in_tbl_count  := G_dlvr_actions_in_tbl_count + 1;
29677 
29678         IF p_debug_mode = 'Y' THEN
29679            pa_debug.g_err_stage := 'Loading action ['|| p_action_name||'] element [ '||G_dlvr_actions_in_tbl_count ||']';
29680            pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29681         END IF;
29682 
29683 -- assign incoming parameters to the global table fields
29684     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_name                  := p_action_name                   ;
29685     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_owner_id              := p_action_owner_id               ;
29686     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_id                    := p_action_id                     ;
29687     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).function_code                := p_function_code                 ;
29688     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).due_date                     := p_due_date                      ;
29689     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).description                  := p_description                   ;
29690     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).completion_date              := p_completion_date               ;
29691     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_source_code               := p_pm_source_code                ;
29692     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_action_reference          := p_pm_action_reference           ;
29693     -- for bug# 3729250
29694     -- G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).carrying_out_org_id          := p_carrying_out_org_id           ;
29695     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_deliverable_reference     := p_pm_deliverable_reference      ;
29696     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).deliverable_id               := p_deliverable_id                ;
29697    -- added for bug# 3729250
29698     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).financial_task_reference     := p_financial_task_reference      ;
29699     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).financial_task_id            := p_financial_task_id             ;
29700     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).destination_type_code        := p_destination_type_code         ;
29701     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).receiving_org_id             := p_receiving_org_id              ;
29702     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).receiving_location_id        := p_receiving_location_id         ;
29703     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).po_need_by_date              := p_po_need_by_date               ;
29704     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).vendor_id                    := p_vendor_id                     ;
29705     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).vendor_site_code             := p_vendor_site_code              ;
29706 --  G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_currency             := p_project_currency              ;
29707     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).Quantity                     := p_Quantity                      ;
29708     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).uom_code                     := p_uom_code                      ;
29709     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).unit_price                   := p_unit_price                    ;
29710     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate_type           := p_exchange_rate_type            ;
29711     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate_date           := p_exchange_rate_date            ;
29712     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate                := p_exchange_rate                 ;
29713     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_type             := p_expenditure_type              ;
29714     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_org_id           := p_expenditure_org_id            ;
29715     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_item_date        := p_expenditure_item_date         ;
29716     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).requisition_line_type_id     := p_requisition_line_type_id      ;
29717     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).category_id                  := p_category_id                   ;
29718     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ready_to_procure_flag        := p_ready_to_procure_flag         ;
29719     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_procure_flag        := p_initiate_procure_flag         ;
29720     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_from_organization_id    := p_ship_from_organization_id     ;
29721     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_from_location_id        := p_ship_from_location_id         ;
29722     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_to_organization_id      := p_ship_to_organization_id       ;
29723     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_to_location_id          := p_ship_to_location_id           ;
29724     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).demand_schedule              := p_demand_schedule               ;
29725     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expected_shipment_date       := p_expected_shipment_date        ;
29726     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).promised_shipment_date       := p_promised_shipment_date        ;
29727     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).volume                       := p_volume                        ;
29728     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).volume_uom                   := p_volume_uom                    ;
29729     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).weight                       := p_weight                        ;
29730     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).weight_uom                   := p_weight_uom                    ;
29731     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ready_to_ship_flag           := p_ready_to_ship_flag               ;
29732     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_planning_flag       := p_initiate_planning_flag        ;
29733     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_shipping_flag       := p_initiate_shipping_flag        ;
29734     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_type                   := p_event_type                    ;
29735     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).currency                     := p_currency                      ;
29736     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).invoice_amount               := p_invoice_amount                ;
29737     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).revenue_amount               := p_revenue_amount                ;
29738     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_date                   := p_event_date                    ;
29739     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_number                 := p_event_number                  ;
29740     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).organization_id              := p_organization_id               ;
29741     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).bill_hold_flag               := p_bill_hold_flag                ;
29742     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate_type := p_project_functional_rate_type  ;
29743     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate_date := p_project_functional_rate_date  ;
29744     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate      := p_project_functional_rate       ;
29745     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate_type            := p_project_rate_type             ;
29746     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate_date            := p_project_rate_date             ;
29747     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate                 := p_project_rate                  ;
29748     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate_type            := p_funding_rate_type             ;
29749     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate_date            := p_funding_rate_date             ;
29750     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate                 := p_funding_rate                  ;
29751     G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_event_reference           := p_pm_event_reference            ; -- 3651489 added parameter
29752     END IF;
29753 
29754 EXCEPTION
29755 
29756   WHEN FND_API.G_EXC_ERROR
29757   THEN
29758   ROLLBACK TO load_action_pub;
29759 
29760   x_return_status := FND_API.G_RET_STS_ERROR;
29761 
29762 
29763   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29764   THEN
29765   ROLLBACK TO load_action_pub;
29766 
29767   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29768 
29769 
29770   WHEN OTHERS THEN
29771   ROLLBACK TO load_action_pub;
29772 
29773   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29774 
29775   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29776   THEN
29777     FND_MSG_PUB.add_exc_msg
29778         ( p_pkg_name    => G_PKG_NAME
29779         , p_procedure_name  => l_api_name  );
29780 
29781   END IF;
29782 
29783 END load_action;
29784 
29785 --------------------------------------------------------------------------------
29786 --Name:               load_actions
29787 --Type:               Procedure
29788 --Description:        This procedure can be used to load Actions from input
29789 --                     paramters to global tables
29790 --
29791 --Called subprograms:
29792 --
29793 --
29794 --
29795 --History:
29796 --    03-Mar-2004   Puneet            Created
29797 --
29798 PROCEDURE load_actions
29799 (   p_api_version                  IN  NUMBER            := 1.0
29800   , p_init_msg_list                IN  VARCHAR2          := FND_API.G_TRUE
29801   , p_debug_mode                   IN  VARCHAR2          := 'N'
29802   , x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29803   --, p_action_name                  IN  PA_VC_1000_240  := PA_VC_1000_240(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29804   , p_action_name                  IN  PA_VC_1000_150    := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29805   , p_action_id                    IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29806   , p_action_owner_id              IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29807   , p_function_code                IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29808   , p_due_date                     IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29809   , p_description                  IN  PA_VC_1000_2000   := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29810   , p_completion_date              IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29811   , p_pm_source_code               IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29812   , p_pm_action_reference          IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29813   -- for bug# 3729250
29814   --  , p_carrying_out_org_id          IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29815   , p_pm_deliverable_reference     IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29816   , p_deliverable_id               IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29817   -- added for bug# 3729250
29818   , p_financial_task_reference     IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29819   , p_financial_task_id            IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29820   , p_destination_type_code        IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29821   , p_receiving_org_id             IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29822   , p_receiving_location_id        IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29823   , p_po_need_by_date              IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29824   , p_vendor_id                    IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29825   , p_vendor_site_code             IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29826 --  , p_project_currency             IN  PA_VC_1000_25   := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29827   , p_Quantity                     IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29828   , p_uom_code                     IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29829   , p_unit_price                   IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29830   , p_exchange_rate_type           IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29831   , p_exchange_rate_date           IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29832   , p_exchange_rate                IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)   /* Bug # 3590235 */
29833   , p_expenditure_type             IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29834   , p_expenditure_org_id           IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29835   , p_expenditure_item_date        IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29836   , p_requisition_line_type_id     IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29837   , p_category_id                  IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29838 --  , p_ready_to_procure_flag        IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29839 --  , p_initiate_procure_flag        IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29840   , p_ready_to_procure_flag        IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29841   , p_initiate_procure_flag        IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29842   , p_ship_from_organization_id    IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29843   , p_ship_from_location_id        IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29844   , p_ship_to_organization_id      IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29845   , p_ship_to_location_id          IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29846   , p_demand_schedule              IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29847   , p_expected_shipment_date       IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29848   , p_promised_shipment_date       IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29849   , p_volume                       IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29850   , p_volume_uom                   IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29851   , p_weight                       IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29852   , p_weight_uom                   IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29853 --  , p_ready_to_ship_flag           IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29854 --  , p_initiate_planning_flag       IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29855 --  , p_initiate_shipping_flag       IN  PA_VC_1000_1    := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29856   , p_ready_to_ship_flag           IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29857   , p_initiate_planning_flag       IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29858   , p_initiate_shipping_flag       IN  PA_VC_1000_10     := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29859   , p_event_type                   IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29860   , p_currency                     IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29861   , p_invoice_amount               IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29862   , p_revenue_amount               IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29863   , p_event_date                   IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29864   , p_event_number                 IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29865   , p_organization_id              IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29866   , p_bill_hold_flag               IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29867   , p_project_functional_rate_type IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29868   , p_project_functional_rate_date IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29869   , p_project_functional_rate      IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29870   , p_project_rate_type            IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29871   , p_project_rate_date            IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29872   , p_project_rate                 IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29873   , p_funding_rate_type            IN  PA_VC_1000_30     := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29874   , p_funding_rate_date            IN  PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29875   , p_funding_rate                 IN  PA_NUM_1000_NUM   := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29876   , p_pm_event_reference           IN  PA_VC_1000_25     := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- 3651489 added parameter
29877 )
29878   IS
29879 
29880    l_api_name      CONSTANT  VARCHAR2(30)     := 'load_actions';
29881    l_return_status VARCHAR2(1) := null;
29882 
29883 BEGIN
29884 
29885 --  Standard begin of API savepoint
29886 
29887     SAVEPOINT load_actions_pub;
29888 
29889 --  Standard call to check for call compatibility.
29890 
29891     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
29892                                p_api_version  ,
29893                                l_api_name         ,
29894                                G_PKG_NAME       )
29895     THEN
29896 
29897        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29898 
29899     END IF;
29900 
29901 --  Initialize the message table if requested.
29902 
29903     IF FND_API.TO_BOOLEAN( p_init_msg_list )
29904     THEN
29905 
29906        FND_MSG_PUB.initialize;
29907 
29908     END IF;
29909 
29910 --  Set API return status to success
29911 
29912     x_return_status := FND_API.G_RET_STS_SUCCESS;
29913 
29914 -- Load the table only if action_name is passed
29915  FOR i in 1..1000 LOOP
29916     IF (p_action_name(i) <>  PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29917          (p_action_name(i) IS NOT NULL) THEN
29918 
29919 -- assign a value to the global counter for this table
29920         G_dlvr_actions_in_tbl_count  := G_dlvr_actions_in_tbl_count + 1;
29921 
29922 -- assign incoming parameters to the global table fields
29923     load_action
29924      (  p_api_version                  => p_api_version
29925       , p_init_msg_list                => p_init_msg_list
29926       , p_debug_mode                   => p_debug_mode
29927       , x_return_status            => l_return_status
29928       , p_action_name                  => p_action_name(i)
29929       , p_action_id                    => p_action_id(i)
29930       , p_action_owner_id              => p_action_owner_id(i)
29931       , p_function_code                => p_function_code(i)
29932       , p_due_date                     => p_due_date(i)
29933       , p_description                  => p_description(i)
29934       , p_completion_date              => p_completion_date(i)
29935       , p_pm_source_code               => p_pm_source_code(i)
29936       , p_pm_action_reference          => p_pm_action_reference(i)
29937       -- for bug# 3729250
29938       --      , p_carrying_out_org_id          => p_carrying_out_org_id(i)
29939       , p_pm_deliverable_reference     => p_pm_deliverable_reference(i)
29940       , p_deliverable_id               => p_deliverable_id(i)
29941       , p_financial_task_reference     => p_financial_task_reference(i) -- added for bug# 3729250
29942       , p_financial_task_id            => p_financial_task_id(i)
29943       , p_destination_type_code        => p_destination_type_code(i)
29944       , p_receiving_org_id             => p_receiving_org_id(i)
29945       , p_receiving_location_id        => p_receiving_location_id(i)
29946       , p_po_need_by_date              => p_po_need_by_date(i)
29947       , p_vendor_id                    => p_vendor_id(i)
29948       , p_vendor_site_code             => p_vendor_site_code(i)
29949 --    , p_project_currency             => p_project_currency(i)
29950       , p_Quantity                     => p_Quantity(i)
29951       , p_uom_code                     => p_uom_code(i)
29952       , p_unit_price                   => p_unit_price(i)
29953       , p_exchange_rate_type           => p_exchange_rate_type(i)
29954       , p_exchange_rate_date           => p_exchange_rate_date(i)
29955       , p_exchange_rate                => p_exchange_rate(i)
29956       , p_expenditure_type             => p_expenditure_type(i)
29957       , p_expenditure_org_id           => p_expenditure_org_id(i)
29958       , p_expenditure_item_date        => p_expenditure_item_date(i)
29959       , p_requisition_line_type_id     => p_requisition_line_type_id(i)
29960       , p_category_id                  => p_category_id(i)
29961       , p_ready_to_procure_flag        => p_ready_to_procure_flag(i)
29962       , p_initiate_procure_flag        => p_initiate_procure_flag(i)
29963       , p_ship_from_organization_id    => p_ship_from_organization_id(i)
29964       , p_ship_from_location_id        => p_ship_from_location_id(i)
29965       , p_ship_to_organization_id      => p_ship_to_organization_id(i)
29966       , p_ship_to_location_id          => p_ship_to_location_id(i)
29967       , p_demand_schedule              => p_demand_schedule(i)
29968       , p_expected_shipment_date       => p_expected_shipment_date(i)
29969       , p_promised_shipment_date       => p_promised_shipment_date(i)
29970       , p_volume                       => p_volume(i)
29971       , p_volume_uom                   => p_volume_uom(i)
29972       , p_weight                       => p_weight(i)
29973       , p_weight_uom                   => p_weight_uom(i)
29974       , p_ready_to_ship_flag           => p_ready_to_ship_flag(i)
29975       , p_initiate_planning_flag       => p_initiate_planning_flag(i)
29976       , p_initiate_shipping_flag       => p_initiate_shipping_flag(i)
29977       , p_event_type                   => p_event_type(i)
29978       , p_currency                     => p_currency(i)
29979       , p_invoice_amount               => p_invoice_amount(i)
29980       , p_revenue_amount               => p_revenue_amount(i)
29981       , p_event_date                   => p_event_date(i)
29982       , p_event_number                 => p_event_number(i)
29983       , p_organization_id              => p_organization_id(i)
29984       , p_bill_hold_flag               => p_bill_hold_flag(i)
29985       , p_project_functional_rate_type => p_project_functional_rate_type(i)
29986       , p_project_functional_rate_date => p_project_functional_rate_date(i)
29987       , p_project_functional_rate      => p_project_functional_rate(i)
29988       , p_project_rate_type            => p_project_rate_type(i)
29989       , p_project_rate_date            => p_project_rate_date(i)
29990       , p_project_rate                 => p_project_rate(i)
29991       , p_funding_rate_type            => p_funding_rate_type(i)
29992       , p_funding_rate_date            => p_funding_rate_date(i)
29993       , p_funding_rate                 => p_funding_rate(i)
29994       , p_pm_event_reference           => p_pm_event_reference(i)  -- 3651489 added parameter
29995     );
29996 
29997     END IF;
29998 END LOOP;
29999 
30000 EXCEPTION
30001 
30002   WHEN FND_API.G_EXC_ERROR
30003   THEN
30004   ROLLBACK TO load_actions_pub;
30005 
30006   x_return_status := FND_API.G_RET_STS_ERROR;
30007 
30008 
30009   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
30010   THEN
30011   ROLLBACK TO load_actions_pub;
30012 
30013   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30014 
30015 
30016   WHEN OTHERS THEN
30017   ROLLBACK TO load_actions_pub;
30018 
30019   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30020 
30021   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
30022   THEN
30023     FND_MSG_PUB.add_exc_msg
30024         ( p_pkg_name    => G_PKG_NAME
30025         , p_procedure_name  => l_api_name  );
30026 
30027   END IF;
30028 
30029 END load_actions;
30030 
30031 
30032 --------------------------------------------------------------------------------
30033 --Name:               Create_Deliverable
30034 --Type:               Procedure
30035 --Description:        This procedure creates a deliverable and its related actions
30036 --                    which are passed through actions PLSQL table
30037 --
30038 --Called subprograms:   PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
30039 --                      Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
30040 --
30041 --
30042 --
30043 --History:
30044 --    08-Mar-2004   Puneet            Created
30045 --
30046 
30047 PROCEDURE create_deliverable
30048 (   p_api_version            IN  NUMBER     := 1.0
30049   , p_init_msg_list          IN  VARCHAR2   := FND_API.G_TRUE
30050   , p_commit                 IN  VARCHAR2   := FND_API.G_FALSE
30051   , p_debug_mode             IN  VARCHAR2   := 'N'
30052   , x_return_status          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30053   , p_deliverable_name       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30054   , p_deliverable_short_name IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30055   , p_deliverable_type_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30056   , p_deliverable_owner_id   IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30057   , p_description            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30058   , p_status_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30059   , p_due_date               IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30060   , p_completion_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30061   , p_progress_weight        IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30062   , px_deliverable_id        IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
30063   , p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30064   -- for bug# 3729250
30065   --  , p_carrying_out_org_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30066   , p_task_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30067   , p_task_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30068   , p_project_id             IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30069   , p_proj_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30070   , p_action_in_tbl          IN  action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
30071   , x_action_out_tbl         OUT NOCOPY action_out_tbl_type /*Added the nocopy check for 4537865 */
30072   , p_item_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30073   , P_inventory_org_id       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30074   , p_quantity               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30075   , p_uom_code               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30076   -- for bug# 3729250
30077   --  , p_item_description       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   -- for bug# 3729250
30080   , p_unit_number            IN  VARCHAR2     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30081   , p_currency_code          IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30082   , p_pm_source_code         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR              /* Bug no. 3651113 */
30083   , x_msg_count              OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
30084   , x_msg_data               OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
30085   )
30086 
30087   IS
30088 
30089     l_project_id NUMBER;
30090     l_task_id    NUMBER;
30091     l_project_number          Pa_Projects_All.Segment1%TYPE;
30092     l_task_number             Pa_Proj_Elements.Name%TYPE;
30093     l_task_source_reference VARCHAR2(240);
30094     l_deliverable_element_id NUMBER;
30095     l_deliverable_version_id  NUMBER;
30096     l_dlvr_prg_enabled     VARCHAR2(1) := NULL;
30097     l_dlvr_action_enabled  VARCHAR2(1) := NULL;
30098     l_dlvr_enabled         VARCHAR2(1) := NULL;
30099     l_status_code   PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
30100 
30101     l_unique_flag  VARCHAR2(1) := null;
30102     l_err_message    Fnd_New_Messages.Message_text%TYPE;  -- for AMG message
30103 
30104     l_data                       VARCHAR2(2000); -- 4537865
30105     l_action_in_tbl action_in_tbl_type;
30106     l_action_out_tlb action_out_tbl_type;
30107 
30108     l_api_name      CONSTANT  VARCHAR2(30)     := 'CREATE_DELIVERABLES';
30109     l_msg_index_out              NUMBER;
30110 
30111     i       NUMBER := 0;
30112     i_actn  NUMBER := 0;
30113 
30114     l_resp_id NUMBER := FND_GLOBAL.Resp_id;
30115     l_function_allowed      VARCHAR2(1);
30116     l_pm_product_code VARCHAR2(2) :='Z';                          /* Bug 3651113 */
30117 
30118     -- 3651542 added local variable
30119 
30120     l_dlvr_owner_id             PA_PROJ_ELEMENTS.MANAGER_PERSON_ID%TYPE;
30121     l_dlvr_owner_name           PER_ALL_PEOPLE_F.FULL_NAME%TYPE;
30122     l_default_date              DATE;
30123 
30124   /*cursor added for Bug 3651113 */
30125   Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
30126   Is
30127   Select 'X'
30128   from pa_lookups
30129   where lookup_type='PM_PRODUCT_CODE'
30130   and lookup_code = p_pm_product_code;
30131 
30132   l_wp_task_flag varchar2(1); -- Added for bug5462298
30133 
30134 BEGIN
30135  --  Initialize the message table if requested.
30136     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
30137        FND_MSG_PUB.initialize;
30138     END IF;
30139 
30140     -- 3735792 , setting save point unconditionally
30141     -- IF (p_commit = FND_API.G_TRUE) THEN
30142     savepoint CREATE_DELIVERABLE_PUB;
30143     -- END IF;
30144 
30145 -- Validation check for product code : Bug 3651113
30146 
30147     OPEN p_product_code_csr (p_pm_source_code);
30148     FETCH p_product_code_csr INTO l_pm_product_code;
30149     CLOSE p_product_code_csr;
30150 
30151     IF l_pm_product_code <> 'X'
30152            AND p_pm_source_code <> 'WORKPLAN'
30153     THEN
30154          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
30155          THEN
30156          pa_interface_utils_pub.map_new_amg_msg
30157          ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
30158           ,p_msg_attribute    => 'CHANGE'
30159           ,p_resize_flag      => 'N'
30160           ,p_msg_context      => 'GENERAL'
30161           ,p_attribute1       => ''
30162           ,p_attribute2       => ''
30163           ,p_attribute3       => ''
30164           ,p_attribute4       => ''
30165           ,p_attribute5       => '');
30166          END IF;
30167     x_return_status             := FND_API.G_RET_STS_ERROR;
30168     RAISE FND_API.G_EXC_ERROR;
30169     END IF;
30170 
30171     IF p_debug_mode = 'Y' THEN
30172           PA_DEBUG.set_curr_function( p_function   => l_api_name,
30173                                       p_debug_mode => p_debug_mode );
30174           pa_debug.g_err_stage:= 'Inside '||l_api_name;
30175           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
30176      END IF;
30177 
30178    --  Set API return status to success
30179     x_return_status     := FND_API.G_RET_STS_SUCCESS;
30180 
30181 
30182     IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
30183        l_task_id := NULL;
30184     ELSE
30185        l_task_id := p_task_id;
30186     END IF;
30187 
30188 
30189     IF p_task_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
30190        l_task_source_reference := NULL;
30191     ELSE
30192        l_task_source_reference := p_task_source_reference;
30193     END IF;
30194 
30195 
30196 
30197     -- Function Security Check
30198     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
30199     (p_api_version_number => p_api_version,
30200      p_responsibility_id  => l_resp_id,
30201      p_function_name      => 'PA_DELIVERABLE_EDIT',
30202      p_msg_count          => x_msg_count,
30203      p_msg_data           => x_msg_data,
30204      p_return_status      => x_return_status,
30205      p_function_allowed   => l_function_allowed);
30206 
30207      IF p_debug_mode = 'Y' THEN
30208           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
30209      END IF;
30210 
30211      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
30212          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30213      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
30214          RAISE FND_API.G_EXC_ERROR;
30215      END IF;
30216 
30217     IF l_function_allowed = 'N' THEN
30218          PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
30219                              ,p_msg_name         => 'PA_FUNCTION_SECURITY_ENFORCED');
30220          x_return_status := FND_API.G_RET_STS_ERROR;
30221          RAISE FND_API.G_EXC_ERROR;
30222      END IF;
30223 
30224  -- validate the input parameters.
30225  -- Get the task and Project details based on source reference passed
30226     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
30227                     p_pm_project_reference =>   p_proj_source_reference
30228                  ,  p_pa_project_id     =>      p_project_id
30229                  ,  p_out_project_id    =>      l_project_id
30230                  ,  p_return_status     =>      x_return_status
30231         );
30232 
30233     IF p_debug_mode = 'Y' THEN
30234          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
30235     END IF;
30236 
30237     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30238         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30239     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30240         RAISE  FND_API.G_EXC_ERROR;
30241     END IF;
30242 
30243     IF ( l_task_id IS NOT NULL OR l_task_source_reference IS NOT NULL ) THEN
30244        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
30245                    p_pa_project_id      => l_project_id
30246                  , p_structure_type     => 'WORKPLAN'
30247                  , p_pa_task_id         => p_task_id
30248                  , p_pm_task_reference  => p_task_source_reference
30249                  , p_out_task_id        => l_task_id
30250                  , p_return_status      => x_return_status );
30251 
30252        IF p_debug_mode = 'Y' THEN
30253            pa_debug.write(g_pkg_name,'Task Ref to ID Return Status ['||x_return_status||']Task ID['||l_task_id||']',3) ;
30254        END IF;
30255 
30256        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30257              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30258        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30259              RAISE FND_API.G_EXC_ERROR;
30260        END IF;
30261 
30262        -- 5462298 Added below code to validate passed task id
30263        -- if it is not workplan task , throw error message
30264 
30265        l_wp_task_flag := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_WORKPLAN_TASK (
30266                                            p_project_id         => l_project_id
30267                                          , p_proj_element_id    => l_task_id );
30268 
30269        IF l_wp_task_flag <> 'Y' THEN
30270 
30271         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
30272         THEN
30273 
30274            PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
30275                                ,p_msg_name         => 'PA_TASK_ID_INVALID');
30276 
30277            x_return_status := FND_API.G_RET_STS_ERROR;
30278            RAISE FND_API.G_EXC_ERROR;
30279 
30280         END IF;
30281 
30282        END IF;
30283 
30284        -- 5462298 end
30285 
30286     END IF;
30287 
30288  -- Validate Deliverable reference - not null, unique
30289     PA_Deliverable_Utils.is_dlvr_reference_unique(
30290            p_deliverable_reference  => p_pm_deliverable_reference
30291          , p_project_id         => l_project_id
30292          , x_unique_flag        => l_unique_flag
30293          , x_return_status      => x_return_status );
30294 
30295     IF p_debug_mode = 'Y' THEN
30296         pa_debug.write(g_pkg_name,'Dlvr Reference Unique Return Status ['||x_return_status||']Unique['||l_unique_flag||']',3) ;
30297     END IF;
30298 
30299     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30300         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30301     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30302         RAISE FND_API.G_EXC_ERROR;
30303     END IF;
30304 
30305  -- Fetching Task Name , Project Name to use as token in Error Messages.
30306 
30307    IF (l_task_id IS NOT NULL) THEN
30308       SELECT name INTO   l_task_number
30309       FROM Pa_Proj_Elements
30310       WHERE  proj_element_id = l_task_id;
30311    ELSE
30312        l_task_number := null;
30313    END IF;
30314 
30315    SELECT segment1 INTO   l_project_number
30316    FROM Pa_Projects_All
30317    WHERE  project_id = l_project_id;
30318 
30319     IF p_debug_mode = 'Y' THEN
30320        pa_debug.g_err_stage := 'Creating deliverable ['|| p_deliverable_short_name||']['||p_pm_deliverable_reference||']['
30321                                 ||p_deliverable_owner_id||']['||p_deliverable_Type_id||']['||l_project_id||']['||l_task_id||']';
30322        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30323     END IF;
30324 
30325  -- Check if deliverable is enabled for project.
30326  -- If not then first enable it before creating the deliverable.
30327 
30328     -- 3700247, check for G_DLVR_STRUCTURE_ENABLED parameter, if it is null,
30329     -- check for target project, whether deliverable is enabled or not
30330     -- if deliverable is not enabled and deliverables are loaded, throw error message
30331 
30332     IF p_debug_mode = 'Y' THEN
30333        pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
30334        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30335     END IF;
30336 
30337     IF G_DLVR_STRUCTURE_ENABLED IS NULL THEN
30338         G_DLVR_STRUCTURE_ENABLED := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_id);
30339 
30340         IF p_debug_mode = 'Y' THEN
30341            pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
30342            pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30343         END IF;
30344     END IF;
30345 
30346     IF G_DLVR_STRUCTURE_ENABLED = 'N' THEN
30347         PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
30348                             ,p_msg_name         => 'PA_DLV_STRUCTURE_DISABLED');
30349         x_return_status := FND_API.G_RET_STS_ERROR;
30350         RAISE FND_API.G_EXC_ERROR;
30351     END IF;
30352 
30353     -- 3700247, if deliverable structure is not enabled for target and deliverables are passed in loading,
30354     -- error message is thrown. So, removing the below code , which enables the structure for the target project in
30355     -- above condition.
30356 
30357 /*
30358     l_dlvr_enabled := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_id);
30359 
30360     IF p_debug_mode = 'Y' THEN
30361        pa_debug.g_err_stage := 'Deliverable Enabled ['||l_dlvr_enabled||']';
30362        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30363     END IF;
30364 
30365     IF ( l_dlvr_enabled = 'N' ) THEN
30366 
30367     Pa_Deliverable_Utils.enable_deliverable(
30368            p_api_version            => p_api_version
30369          , p_init_msg_list          => FND_API.G_FALSE
30370          , p_commit                 => p_commit
30371          , p_debug_mode             => p_debug_mode
30372          , p_validate_only          => FND_API.G_FALSE
30373          , p_project_id             => l_project_id
30374          , x_return_status          => x_return_status
30375          , x_msg_count              => x_msg_count
30376          , x_msg_data               => x_msg_data
30377          );
30378 
30379         IF p_debug_mode = 'Y' THEN
30380             pa_debug.write(g_pkg_name,'Pa_Deliverable_Utils.enable_deliverable Return Status ['||x_return_status||']',3) ;
30381         END IF;
30382 
30383         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30384             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30385         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30386             RAISE FND_API.G_EXC_ERROR;
30387         END IF;
30388 
30389     END IF; -- deliverable not enabled
30390 */
30391 
30392 
30393    -- 3651542 if deliverable onwer and date is not passed
30394    -- call util api to retrieve default value and assign it to local variables
30395    -- if it is passed, use the passed owner id and due date
30396 
30397    -- here in defaulting , considered only project flow
30398    -- task flow is not considered and passing task ver id as NULL
30399 
30400    IF p_deliverable_owner_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
30401        PA_DELIVERABLE_UTILS.GET_DEFAULT_DLVR_OWNER
30402             (
30403                  p_project_id   =>  p_project_id
30404                 ,p_task_ver_id  =>  NULL
30405                 ,x_owner_id     =>  l_dlvr_owner_id
30406                 ,x_owner_name   =>  l_dlvr_owner_name
30407             );
30408    ELSE
30409        l_dlvr_owner_id := p_deliverable_owner_id;
30410    END IF;
30411 
30412    IF p_due_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
30413        PA_DELIVERABLE_UTILS.GET_DEFAULT_DLVR_DATE
30414             (
30415                  p_project_id   =>  p_project_id
30416                 ,p_task_ver_id  =>  NULL
30417                 ,x_due_date     =>  l_default_date
30418             );
30419    ELSE
30420        l_default_date := p_due_date;
30421    END IF;
30422 
30423    -- 3651542 end
30424 
30425  -- All other validations done in PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
30426  --invoke the api to create deliverable
30427     Pa_Deliverable_Pub.Create_Deliverable
30428     (  p_api_version            =>  p_api_version
30429      , p_init_msg_list          =>  FND_API.G_FALSE -- passed as false as doesn't want message stack to be reset.
30430       -- 3735792, passing p_commit as false to next level api calls
30431      , p_commit                 =>  FND_API.G_FALSE
30432      , p_validate_only          =>  FND_API.G_FALSE
30433      , p_validation_level       =>  FND_API.G_VALID_LEVEL_FULL
30434      , p_calling_module         =>  'AMG'
30435      , p_debug_mode             =>  p_debug_mode
30436      , p_max_msg_count          =>  NULL
30437      , p_record_version_number  =>  1
30438      , p_object_type            =>  'PA_DELIVERABLES'
30439      , p_project_id             =>  l_project_id
30440      , p_dlvr_number            =>  p_deliverable_short_name
30441      , p_dlvr_name              =>  p_deliverable_name
30442      , p_dlvr_description       =>  p_description
30443      , p_dlvr_owner_id          =>  l_dlvr_owner_id     -- for bug# 3651542, earlier p_deliverable_owner_id was passed
30444      , p_dlvr_owner_name        =>  NULL
30445      -- for bug# 3729250
30446      --     , p_carrying_out_org_id    =>  p_carrying_out_org_id
30447      , p_carrying_out_org_name  =>  NULL
30448      , p_dlvr_version_id        =>  null
30449      , p_status_code            =>  p_status_code
30450      , p_parent_structure_id    =>  NULL
30451      , p_dlvr_type_id           =>  p_deliverable_type_id
30452      , p_dlvr_type_name         =>  NULL
30453      , p_progress_weight        =>  p_progress_weight
30454      , p_scheduled_finish_date  =>  l_default_date      -- for bug# 3651542, earlier p_due_date was passed
30455      , p_actual_finish_date     =>  p_completion_date
30456      , p_task_id                =>  l_task_id
30457      , p_task_version_id        =>  null
30458      , p_task_name              =>  null
30459      , p_deliverable_reference  =>  p_pm_deliverable_reference
30460      , p_item_id                =>  p_item_id
30461      , p_inventory_org_id       =>  p_inventory_org_id
30462      , p_quantity               =>  p_quantity
30463      , p_uom_code               =>  p_uom_code
30464      -- for bug# 3729250
30465      --     , p_item_description       =>  p_item_description
30466      , p_unit_price             =>  p_unit_price
30467      , p_unit_number            =>  p_unit_number
30468      , p_currency_code          =>  p_currency_code
30469      , p_dlvr_item_id           =>  px_deliverable_id
30470      , p_pm_source_code         =>  p_pm_source_code                       /* Bug no. 3651113 */
30471      , x_return_status          =>  x_return_status
30472      , x_msg_count              =>  x_msg_count
30473      , x_msg_data               =>  x_msg_data
30474     );
30475 
30476        l_deliverable_element_id := px_deliverable_id ;
30477 
30478     IF p_debug_mode = 'Y' THEN
30479        pa_debug.g_err_stage := 'Created deliverable ['|| l_deliverable_element_id||']['||x_return_status||']';
30480        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30481     END IF;
30482 
30483 
30484    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30485           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30486    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30487           RAISE  FND_API.G_EXC_ERROR;
30488    END IF;
30489 -- Will create actions only when deliverable type of deliverable
30490 -- has action creation enabled.
30491 
30492    Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
30493    (
30494        p_dlvr_type_id                 =>  p_deliverable_type_id
30495       ,x_dlvr_prg_enabled             =>  l_dlvr_prg_enabled
30496       ,x_dlvr_action_enabled          =>  l_dlvr_action_enabled
30497       ,x_dlvr_default_status_code     =>  l_status_code
30498     );
30499 
30500     IF p_debug_mode = 'Y' THEN
30501        pa_debug.g_err_stage := 'Dlvr Type allow action creation ['|| l_dlvr_action_enabled||']';
30502        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30503     END IF;
30504 
30505 -- invoke the api pa_actions_pub.create_dlvr_action_wrapper
30506 -- to create actions for the deliverable, insert records
30507 -- in OKE tables, create events if required.
30508 
30509    i := p_action_in_tbl.first();
30510    l_action_in_tbl.delete;
30511 
30512 
30513    WHILE (i IS NOT NULL ) LOOP
30514       IF ( p_pm_deliverable_reference = p_action_in_tbl(i).pm_deliverable_reference) THEN
30515           i_actn := i_actn + 1;
30516           l_action_in_tbl(i_actn) := p_action_in_tbl(i);
30517           l_action_in_tbl(i_actn).deliverable_id   :=  l_deliverable_element_id;
30518 
30519          -- added for bug# 3749447
30520          -- if pm_source_code is not passed in action record, use it from deliverable record
30521          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
30522              l_action_in_tbl(i_actn).pm_source_code := p_pm_source_code;
30523          END IF;
30524 
30525       END IF;
30526       i := p_action_in_tbl.next(i);
30527    END LOOP;
30528 
30529     IF p_debug_mode = 'Y' THEN
30530        pa_debug.g_err_stage := 'About to Create ['|| i_actn ||'] out of ['||i ||'] Actn enabled ['||l_dlvr_action_enabled||']';
30531        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30532     END IF;
30533 
30534 
30535    IF (i_actn > 0 ) THEN
30536 
30537        IF ( l_dlvr_action_enabled = 'Y') THEN
30538 
30539           Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
30540           ( p_api_version            => p_api_version
30541           , p_init_msg_list          => FND_API.G_FALSE
30542           , p_commit                 => FND_API.G_FALSE
30543           , p_validate_only          => FND_API.G_FALSE
30544           , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
30545           , p_calling_module         => 'AMG'
30546           , p_debug_mode             => p_debug_mode
30547           , p_insert_or_update       => 'INSERT'
30548           , p_action_in_tbl          => l_action_in_tbl
30549           , x_action_out_tbl         => x_action_out_tbl
30550           , x_return_status          => x_return_status
30551           , x_msg_count              => x_msg_count
30552           , x_msg_data               => x_msg_data);
30553 
30554          IF p_debug_mode = 'Y' THEN
30555              pa_debug.g_err_stage := 'Returned after Create actions for ['|| i_actn ||'] action return['||x_return_status||']';
30556              pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30557          END IF;
30558 
30559          IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30560                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30561          ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30562                 RAISE  FND_API.G_EXC_ERROR;
30563          END IF;
30564 
30565       ELSE --l_dlvr_action_enabled <> 'Y'
30566 
30567             IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)  THEN
30568                 l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
30569                 PA_UTILS.ADD_MESSAGE
30570                                (p_app_short_name => 'PA',
30571                                 p_msg_name       => 'PA_DLVR_VALID_ERR',
30572                                 p_token1         => 'PROJECT',
30573                                 p_value1         =>  l_project_number,
30574                                 p_token2         =>  'TASK',
30575                                 p_value2         =>  l_task_number,
30576                                 p_token3         => 'DLVR_REFERENCE',
30577                                 p_value3         =>  p_pm_deliverable_reference,
30578                                 p_token4         => 'MESSAGE',
30579                                 p_value4         =>  l_err_message
30580                                );
30581             END IF;
30582 
30583             x_return_status             := FND_API.G_RET_STS_ERROR;
30584             RAISE FND_API.G_EXC_ERROR;
30585       END IF; -- l_dlvr_action_enabled = 'Y'
30586 
30587    END IF; --i_actn > 0
30588 
30589    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
30590    IF (p_commit = FND_API.G_TRUE) THEN
30591        COMMIT;
30592    END IF;
30593 
30594    IF p_debug_mode = 'Y' THEN
30595        pa_debug.reset_curr_function;
30596        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
30597    END IF;
30598 
30599 EXCEPTION
30600    WHEN FND_API.G_EXC_ERROR        THEN
30601       -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
30602       --IF (p_commit = FND_API.G_TRUE) THEN
30603       ROLLBACK TO CREATE_DELIVERABLE_PUB;
30604       --END IF;
30605 
30606       IF p_debug_mode = 'Y' THEN
30607           pa_debug.reset_curr_function;
30608           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
30609       END IF;
30610       x_return_status := FND_API.G_RET_STS_ERROR;
30611       x_msg_count := FND_MSG_PUB.count_msg;
30612 
30613       IF x_msg_count = 1 THEN
30614            PA_INTERFACE_UTILS_PUB.get_messages
30615                (p_encoded        => FND_API.G_FALSE,
30616                 p_msg_index      => 1,
30617                 p_msg_count      => x_msg_count,
30618                 p_msg_data       => x_msg_data,
30619                 p_data           => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
30620                 p_msg_index_out  => l_msg_index_out);
30621         x_msg_data := l_data ; -- 4537865
30622      END IF;
30623 
30624    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
30625       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
30626       --IF (p_commit = FND_API.G_TRUE) THEN
30627       ROLLBACK TO CREATE_DELIVERABLE_PUB;
30628       --END IF;
30629 
30630       IF p_debug_mode = 'Y' THEN
30631           pa_debug.reset_curr_function;
30632           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
30633       END IF;
30634       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30635       x_msg_count := FND_MSG_PUB.count_msg;
30636 
30637       IF x_msg_count = 1 THEN
30638            PA_INTERFACE_UTILS_PUB.get_messages
30639                (p_encoded        => FND_API.G_FALSE,
30640                 p_msg_index      => 1,
30641                 p_msg_count      => x_msg_count,
30642                 p_msg_data       => x_msg_data,
30643                 p_data           => l_data, --  4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
30644                 p_msg_index_out  => l_msg_index_out);
30645                 x_msg_data := l_data ; -- 4537865
30646      END IF;
30647 
30648    WHEN OTHERS THEN
30649       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
30650       --IF (p_commit = FND_API.G_TRUE) THEN
30651       ROLLBACK TO CREATE_DELIVERABLE_PUB;
30652       --END IF;
30653 
30654       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30655       x_msg_count := 1;
30656       x_msg_data := SQLERRM;
30657 
30658       IF p_debug_mode = 'Y' THEN
30659           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
30660           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
30661           pa_debug.reset_curr_function;
30662       END IF;
30663 
30664    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
30665        FND_MSG_PUB.add_exc_msg
30666                    ( p_pkg_name            => G_PKG_NAME
30667                    , p_procedure_name      => l_api_name   );
30668   END IF;
30669 END create_deliverable;
30670 
30671 PROCEDURE create_deliverable_action
30672 (   p_api_version                  IN  NUMBER   := 1.0
30673   , p_init_msg_list                IN  VARCHAR2 := FND_API.G_TRUE
30674   , p_debug_mode                   IN  VARCHAR2 := FND_API.G_FALSE
30675   , p_commit                       IN  VARCHAR2 := FND_API.G_FALSE
30676   , p_action_name                  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30677   , p_action_owner_id              IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30678   , p_function_code                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30679   , p_due_date                     IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30680   , p_description                  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30681   , p_completion_date              IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30682   , p_pm_source_code               IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30683   , p_pm_action_reference          IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30684   -- for bug# 3729250
30685   --  , p_carrying_out_org_id          IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30686   , p_deliverable_reference        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30687   , p_deliverable_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30688   -- added for bug# 3729250
30689   , p_pm_proj_reference            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30690   , p_project_id                   IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30691   -- added for bug# 3729250
30692   , p_financial_task_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30693   , p_financial_task_id            IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30694   , p_destination_type_code        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30695   , p_receiving_org_id             IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30696   , p_receiving_location_id        IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30697   , p_po_need_by_date              IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30698   , p_vendor_id                    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30699   , p_vendor_site_code             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30700 --  , p_project_currency             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30701   , p_Quantity                     IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30702   , p_uom_code                     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30703   , p_unit_price                   IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30704   , p_exchange_rate_type           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30705   , p_exchange_rate_date           IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30706   , p_exchange_rate                IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30707   , p_expenditure_type             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30708   , p_expenditure_org_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30709   , p_expenditure_item_date        IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30710   , p_requisition_line_type_id     IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30711   , p_category_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30712   , p_ready_to_procure_flag        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30713   , p_initiate_procure_flag        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30714   , p_ship_from_organization_id    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30715   , p_ship_from_location_id        IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30716   , p_ship_to_organization_id      IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30717   , p_ship_to_location_id          IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30718   , p_demand_schedule              IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30719   , p_expected_shipment_date       IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30720   , p_promised_shipment_date       IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30721   , p_volume                       IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30722   , p_volume_uom                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30723   , p_weight                       IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30724   , p_weight_uom                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30725   , p_ready_to_ship_flag           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30726   , p_initiate_planning_flag       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30727   , p_initiate_shipping_flag       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30728   , p_event_type                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30729   , p_currency                     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3749462 changed datatype
30730   , p_invoice_amount               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30731   , p_revenue_amount               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30732   , p_event_date                   IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30733   , p_event_number                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30734   , p_organization_id              IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30735   , p_bill_hold_flag               IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30736   , p_project_functional_rate_type IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30737   , p_project_functional_rate_date IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30738   , p_project_functional_rate      IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30739   , p_project_rate_type            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30740   , p_project_rate_date            IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30741   , p_project_rate                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30742   , p_funding_rate_type            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30743   , p_funding_rate_date            IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30744   , p_funding_rate                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30745   , p_pm_event_reference           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
30746   , x_action_out                   OUT NOCOPY  action_out_tbl_type
30747   , x_return_status                OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
30748   , x_msg_count                    OUT NOCOPY NUMBER     /*Added the nocopy check for 4537865 */
30749   , x_msg_data                     OUT NOCOPY VARCHAR2   /*Added the nocopy check for 4537865 */
30750   )
30751 IS
30752 
30753     -- 3749462 changed the cursor, added two parameters and using it
30754     Cursor C_dlvr_type(l_project_id NUMBER, l_deliverable_id NUMBER) IS
30755        SELECT type_id
30756        FROM   PA_PROJ_ELEMENTS
30757        WHERE  proj_element_id = l_deliverable_id
30758        AND    project_id      = l_project_id
30759        AND    OBJECT_TYPE     = 'PA_DELIVERABLES';
30760 
30761     l_api_name      CONSTANT  VARCHAR2(30)     := 'create_deliverable_actions';
30762 
30763     l_action_in_tbl   action_in_tbl_type ;
30764     l_action_out_tbl  action_out_tbl_type ;
30765 
30766     l_project_id NUMBER;
30767     l_task_id    NUMBER;
30768     l_project_number          Pa_Projects_All.Segment1%TYPE;
30769     l_task_number             Pa_Proj_Elements.Name%TYPE;
30770     l_dlvr_type_id            Pa_Proj_Elements.type_id%TYPE;
30771 
30772     l_dlvr_prg_enabled  VARCHAR2(1) := NULL;
30773     l_dlvr_action_enabled  VARCHAR2(1) := NULL;
30774     l_status_code   PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
30775 
30776     l_msg_index_out              NUMBER;
30777     l_msg_count                  NUMBER ;
30778     l_data                       VARCHAR2(2000);
30779     l_msg_data                   VARCHAR2(2000);
30780     l_err_message                VARCHAR2(2000);
30781     l_unique_flag                VARCHAR2(1);
30782 
30783     l_function_allowed      VARCHAR2(1);
30784     l_resp_id NUMBER := FND_GLOBAL.Resp_id;
30785 
30786     l_deliverable_id NUMBER := 0;
30787 
30788     i  NUMBER := 1;
30789 
30790     -- 3729250 added local variables
30791     l_fin_task_id   NUMBER := NULL;
30792 
30793 BEGIN
30794 
30795 --  Standard begin of API savepoint
30796 
30797     -- 3735792, setting save point unconditionally
30798  -- IF (p_commit = FND_API.G_TRUE) THEN
30799     SAVEPOINT create_deliverable_actions_pub;
30800  -- END IF;
30801 
30802 --  Standard call to check for call compatibility.
30803     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
30804                                p_api_version  ,
30805                                l_api_name         ,
30806                                G_PKG_NAME       )
30807     THEN
30808        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30809     END IF;
30810 
30811 --  Initialize the message table if requested.
30812     IF FND_API.TO_BOOLEAN( p_init_msg_list )   THEN
30813        FND_MSG_PUB.initialize;
30814     END IF;
30815 
30816     IF p_debug_mode = 'Y' THEN
30817           PA_DEBUG.set_curr_function( p_function   => l_api_name,
30818                                       p_debug_mode => p_debug_mode );
30819           pa_debug.g_err_stage:= 'Inside '||l_api_name;
30820           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
30821     END IF;
30822 
30823 --  Set API return status to success
30824     x_return_status := FND_API.G_RET_STS_SUCCESS;
30825 
30826 -- Function Security Check
30827     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
30828     (p_api_version_number => p_api_version,
30829      p_responsibility_id  => l_resp_id,
30830      p_function_name      => 'PA_DELIVERABLE_EDIT',
30831      p_msg_count          => x_msg_count,
30832      p_msg_data           => x_msg_data,
30833      p_return_status      => x_return_status,
30834      p_function_allowed   => l_function_allowed);
30835 
30836      IF p_debug_mode = 'Y' THEN
30837           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
30838      END IF;
30839 
30840      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
30841          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30842      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
30843          RAISE FND_API.G_EXC_ERROR;
30844      END IF;
30845 
30846      IF l_function_allowed = 'N' THEN
30847         pa_interface_utils_pub.map_new_amg_msg
30848         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
30849          ,p_msg_attribute    => 'CHANGE'
30850          ,p_resize_flag      => 'Y'
30851          ,p_msg_context      => 'GENERAL'
30852          ,p_attribute1       => ''
30853          ,p_attribute2       => ''
30854          ,p_attribute3       => ''
30855          ,p_attribute4       => ''
30856          ,p_attribute5       => '');
30857 
30858      x_return_status := FND_API.G_RET_STS_ERROR;
30859          RAISE FND_API.G_EXC_ERROR;
30860      END IF;
30861 
30862  -- validate the input parameters.
30863     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
30864                     p_pm_project_reference =>   p_pm_proj_reference -- 3729250 , earlier was passed as null
30865                  ,  p_pa_project_id     =>      p_project_id
30866                  ,  p_out_project_id    =>      l_project_id
30867                  ,  p_return_status     =>      x_return_status
30868         );
30869 
30870     IF p_debug_mode = 'Y' THEN
30871          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
30872     END IF;
30873 
30874     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30875         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30876     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30877         RAISE  FND_API.G_EXC_ERROR;
30878     END IF;
30879 
30880  -- Validate Deliverable reference / ID
30881     PA_Deliverable_Utils.Convert_pm_dlvrref_to_id(
30882           p_deliverable_reference => p_deliverable_reference
30883         , p_deliverable_id        => p_deliverable_id
30884         , p_project_id            => l_project_id
30885         , p_out_deliverable_id    => l_deliverable_id
30886         , p_return_status         => x_return_status);
30887 
30888     IF p_debug_mode = 'Y' THEN
30889         pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID ['||l_deliverable_id||'] Return Status ['||x_return_status||']',3) ;
30890     END IF;
30891 
30892     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30893         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30894     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30895         RAISE FND_API.G_EXC_ERROR;
30896     END IF;
30897 
30898     -- 3729250, Validate Financial Task Reference / ID
30899     -- PA_PROJECT_PVT.Convert_pm_taskref_to_id_all should only be called if either p_financial_task_id or
30900     -- p_financial_task_reference is passed
30901 
30902     IF ( ( p_financial_task_id IS NOT NULL AND p_financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
30903          ( p_financial_task_reference IS NOT NULL AND p_financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) THEN
30904 
30905         PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
30906                    p_pa_project_id      => l_project_id
30907                  , p_structure_type     => 'FINANCIAL'
30908                  , p_pa_task_id         => p_financial_task_id
30909                  , p_pm_task_reference  => p_financial_task_reference
30910                  , p_out_task_id        => l_fin_task_id
30911                  , p_return_status      => x_return_status );
30912 
30913         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30914               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30915         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30916               RAISE FND_API.G_EXC_ERROR;
30917         END IF;
30918 
30919    END IF;
30920 
30921 -- Validate Action reference - not null, unique
30922    pa_deliverable_utils.is_action_reference_unique (
30923          p_action_reference      => p_pm_action_reference
30924        , p_deliverable_id        => l_deliverable_id
30925        , p_project_id            => l_project_id
30926        , x_unique_flag           => l_unique_flag
30927        , x_return_status         => x_return_status
30928        );
30929 
30930     IF p_debug_mode = 'Y' THEN
30931         pa_debug.write(g_pkg_name,'Action Reference Unique Return Status ['||x_return_status||']Unique['||l_unique_flag||']',3) ;
30932     END IF;
30933 
30934     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
30935         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
30936     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
30937         RAISE FND_API.G_EXC_ERROR;
30938     END IF;
30939 
30940 -- Derive the dlvr_Type of a deliverable
30941    -- 3749462 passing l_project_id and l_deliverable_id to cursor
30942    -- earlier p_project_id and p_deliverable_id was used directly, which may be G_PA_MISS_NUM and
30943    -- cursor will return l_dlvr_type_id as NULL
30944 
30945    OPEN C_dlvr_type(l_project_id,l_deliverable_id);
30946    FETCH C_dlvr_Type INTO l_dlvr_type_id;
30947    CLOSE  C_dlvr_type;
30948 
30949 -- Will create actions only when deliverable type of deliverable
30950 -- has action creation enabled.
30951 
30952    Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
30953    (
30954        p_dlvr_type_id                 =>  l_dlvr_type_id
30955       ,x_dlvr_prg_enabled             =>  l_dlvr_prg_enabled
30956       ,x_dlvr_action_enabled          =>  l_dlvr_action_enabled
30957       ,x_dlvr_default_status_code     =>  l_status_code
30958     );
30959 
30960     IF p_debug_mode = 'Y' THEN
30961        pa_debug.g_err_stage := 'Dlvr Type allow action creation ['|| l_dlvr_action_enabled||']';
30962        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30963     END IF;
30964 
30965 --  Populate the table with input parameters
30966     ---- --dbms_output.put_line('loading');
30967 
30968     IF ( i IS NOT NULL ) THEN
30969 
30970        IF (l_dlvr_action_enabled = 'Y') THEN
30971 
30972            l_action_in_tbl(i).action_name                 :=  p_action_name                 ;
30973            l_action_in_tbl(i).action_owner_id             :=  p_action_owner_id             ;
30974            l_action_in_tbl(i).function_code               :=  p_function_code               ;
30975            l_action_in_tbl(i).due_date                    :=  p_due_date                    ;
30976            l_action_in_tbl(i).description                 :=  p_description                 ;
30977            l_action_in_tbl(i).completion_date             :=  p_completion_date             ;
30978            l_action_in_tbl(i).pm_source_code              :=  p_pm_source_code              ;
30979            l_action_in_tbl(i).pm_action_reference         :=  p_pm_action_reference         ;
30980            -- for bug# 3729250
30981 --           l_action_in_tbl(i).carrying_out_org_id         :=  p_carrying_out_org_id         ;
30982            l_action_in_tbl(i).pm_deliverable_reference    :=  p_deliverable_reference       ;
30983            l_action_in_tbl(i).deliverable_id              :=  l_deliverable_id              ;   -- 3749462 earlier p_deliverable_id was passed
30984            l_action_in_tbl(i).financial_task_id           :=  l_fin_task_id                 ; -- for bug# 3729250
30985            l_action_in_tbl(i).destination_type_code       :=  p_destination_type_code       ;
30986            l_action_in_tbl(i).receiving_org_id            :=  p_receiving_org_id            ;
30987            l_action_in_tbl(i).receiving_location_id       :=  p_receiving_location_id       ;
30988            l_action_in_tbl(i).po_need_by_date             :=  p_po_need_by_date             ;
30989            l_action_in_tbl(i).vendor_id                   :=  p_vendor_id                   ;
30990            l_action_in_tbl(i).vendor_site_code            :=  p_vendor_site_code            ;
30991            l_action_in_tbl(i).Quantity                    :=  p_Quantity                    ;
30992            l_action_in_tbl(i).uom_code                    :=  p_uom_code                    ;
30993            l_action_in_tbl(i).unit_price                  :=  p_unit_price                  ;
30994            l_action_in_tbl(i).exchange_rate_type          :=  p_exchange_rate_type          ;
30995            l_action_in_tbl(i).exchange_rate_date          :=  p_exchange_rate_date          ;
30996            l_action_in_tbl(i).exchange_rate               :=  p_exchange_rate               ;
30997            l_action_in_tbl(i).expenditure_type            :=  p_expenditure_type            ;
30998            l_action_in_tbl(i).expenditure_org_id          :=  p_expenditure_org_id          ;
30999            l_action_in_tbl(i).expenditure_item_date       :=  p_expenditure_item_date       ;
31000            l_action_in_tbl(i).requisition_line_type_id    :=  p_requisition_line_type_id    ;
31001            l_action_in_tbl(i).category_id                 :=  p_category_id                 ;
31002            l_action_in_tbl(i).ready_to_procure_flag       :=  p_ready_to_procure_flag       ;
31003            l_action_in_tbl(i).initiate_procure_flag       :=  p_initiate_procure_flag       ;
31004            l_action_in_tbl(i).ship_from_organization_id   :=  p_ship_from_organization_id   ;
31005            l_action_in_tbl(i).ship_from_location_id       :=  p_ship_from_location_id       ;
31006            l_action_in_tbl(i).ship_to_organization_id     :=  p_ship_to_organization_id     ;
31007            l_action_in_tbl(i).ship_to_location_id         :=  p_ship_to_location_id         ;
31008            l_action_in_tbl(i).demand_schedule             :=  p_demand_schedule             ;
31009            l_action_in_tbl(i).expected_shipment_date      :=  p_expected_shipment_date      ;
31010            l_action_in_tbl(i).promised_shipment_date      :=  p_promised_shipment_date      ;
31011            l_action_in_tbl(i).volume                      :=  p_volume                      ;
31012            l_action_in_tbl(i).volume_uom                  :=  p_volume_uom                  ;
31013            l_action_in_tbl(i).weight                      :=  p_weight                      ;
31014            l_action_in_tbl(i).weight_uom                  :=  p_weight_uom                  ;
31015            l_action_in_tbl(i).ready_to_ship_flag          :=  p_ready_to_ship_flag          ;
31016            l_action_in_tbl(i).initiate_planning_flag      :=  p_initiate_planning_flag      ;
31017            l_action_in_tbl(i).initiate_shipping_flag      :=  p_initiate_shipping_flag      ;
31018            l_action_in_tbl(i).event_type                  :=  p_event_type                  ;
31019            l_action_in_tbl(i).currency                    :=  p_currency                    ;
31020            l_action_in_tbl(i).invoice_amount              :=  p_invoice_amount              ;
31021            l_action_in_tbl(i).revenue_amount              :=  p_revenue_amount              ;
31022            l_action_in_tbl(i).event_date                  :=  p_event_date                  ;
31023            l_action_in_tbl(i).event_number                :=  p_event_number                ;
31024            l_action_in_tbl(i).organization_id             :=  p_organization_id             ;
31025            l_action_in_tbl(i).bill_hold_flag              :=  p_bill_hold_flag              ;
31026            l_action_in_tbl(i).project_functional_rate_type:=  p_project_functional_rate_type;
31027            l_action_in_tbl(i).project_functional_rate_date:=  p_project_functional_rate_date;
31028            l_action_in_tbl(i).project_functional_rate     :=  p_project_functional_rate     ;
31029            l_action_in_tbl(i).project_rate_type           :=  p_project_rate_type           ;
31030            l_action_in_tbl(i).project_rate_date           :=  p_project_rate_date           ;
31031            l_action_in_tbl(i).project_rate                :=  p_project_rate                ;
31032            l_action_in_tbl(i).funding_rate_type           :=  p_funding_rate_type           ;
31033            l_action_in_tbl(i).funding_rate_date           :=  p_funding_rate_date           ;
31034            l_action_in_tbl(i).funding_rate                :=  p_funding_rate                ;
31035            l_action_in_tbl(i).pm_event_reference          :=  p_pm_event_reference          ; -- 3651489 added parameter
31036 
31037 
31038       ELSE --l_dlvr_action_enabled <> 'Y'
31039 
31040      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)  THEN
31041               l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
31042               PA_UTILS.ADD_MESSAGE
31043                                (p_app_short_name => 'PA',
31044                                 p_msg_name       => 'PA_DLVR_VALID_ERR',
31045                                 p_token1         => 'PROJECT',
31046                                 p_value1         =>  l_project_number,
31047                                 p_token2         =>  'TASK',
31048                                 p_value2         =>  l_task_number,
31049                                 p_token3         => 'DLVR_REFERENCE',
31050                                 p_value3         =>  p_deliverable_reference,
31051                                 p_token4         => 'MESSAGE',
31052                                 p_value4         =>  l_err_message
31053                                );
31054      END IF;
31055            x_return_status             := FND_API.G_RET_STS_ERROR;
31056           RAISE FND_API.G_EXC_ERROR;
31057 
31058       END IF; -- l_dlvr_action_enabled = 'Y'
31059     END IF;
31060 
31061 --  Call api to create actions  passing the newly populated plsql table
31062     Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31063     ( p_api_version            => p_api_version
31064     , p_init_msg_list          => FND_API.G_FALSE
31065     , p_commit                 => FND_API.G_FALSE
31066     , p_validate_only          => FND_API.G_FALSE
31067     , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
31068     , p_calling_module         => 'AMG'
31069     , p_debug_mode             => p_debug_mode
31070     , p_insert_or_update       => 'INSERT'
31071     , p_action_in_tbl          => l_action_in_tbl
31072     , x_action_out_tbl         => x_action_out
31073     , x_return_status          => x_return_status
31074     , x_msg_count              => l_msg_count
31075     , x_msg_data               => l_msg_data);
31076 
31077     IF p_debug_mode = 'Y' THEN
31078        pa_debug.g_err_stage := 'Returned from Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper ['|| x_return_status||']';
31079        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
31080     END IF;
31081 
31082     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31083         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31084     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31085         RAISE FND_API.G_EXC_ERROR;
31086     END IF;     i := l_action_out_tbl.first();
31087 
31088    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31089    IF (p_commit = FND_API.G_TRUE) THEN
31090        COMMIT;
31091    END IF;
31092 
31093    IF p_debug_mode = 'Y' THEN
31094        pa_debug.reset_curr_function;
31095        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31096    END IF;
31097 
31098 EXCEPTION
31099   WHEN FND_API.G_EXC_ERROR  THEN
31100       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31101   --  IF (p_commit = FND_API.G_TRUE) THEN
31102       ROLLBACK TO create_deliverable_actions_pub;
31103   --  END IF;
31104 
31105       x_return_status := FND_API.G_RET_STS_ERROR;
31106       l_msg_count := FND_MSG_PUB.count_msg;
31107 
31108       IF l_msg_count = 1 AND x_msg_data IS NULL
31109       THEN
31110            PA_INTERFACE_UTILS_PUB.get_messages
31111                (p_encoded        => FND_API.G_FALSE,
31112                 p_msg_index      => 1,
31113                 p_msg_count      => x_msg_count,
31114                 p_msg_data       => l_msg_data,
31115                 p_data           => l_data,
31116                 p_msg_index_out  => l_msg_index_out);
31117 
31118        x_msg_data := l_data;
31119            x_msg_count := l_msg_count;
31120      ELSE
31121           x_msg_count := l_msg_count;
31122 
31123      END IF;
31124 
31125      IF  p_debug_mode = 'Y' THEN
31126           pa_debug.reset_curr_function;
31127           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31128      END IF;
31129 
31130   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
31131      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31132      --IF (p_commit = FND_API.G_TRUE) THEN
31133      ROLLBACK TO create_deliverable_actions_pub;
31134      --END IF;
31135 
31136      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31137      l_msg_count := FND_MSG_PUB.count_msg;
31138 
31139      IF l_msg_count = 1 AND x_msg_data IS NULL
31140      THEN
31141            PA_INTERFACE_UTILS_PUB.get_messages
31142                (p_encoded        => FND_API.G_FALSE,
31143                 p_msg_index      => 1,
31144                 p_msg_count      => x_msg_count,
31145                 p_msg_data       => l_msg_data,
31146                 p_data           => l_data,
31147                 p_msg_index_out  => l_msg_index_out);
31148 
31149        x_msg_data := l_data;
31150            x_msg_count := l_msg_count;
31151      ELSE
31152           x_msg_count := l_msg_count;
31153 
31154      END IF;
31155 
31156      IF  p_debug_mode = 'Y' THEN
31157           pa_debug.reset_curr_function;
31158           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31159      END IF;
31160 
31161    WHEN OTHERS THEN
31162       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31163       --IF (p_commit = FND_API.G_TRUE) THEN
31164       ROLLBACK TO create_deliverable_actions_pub;
31165       --END IF;
31166 
31167       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31168       x_msg_count := 1;
31169       x_msg_data := SQLERRM;
31170 
31171       IF p_debug_mode = 'Y' THEN
31172           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31173           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31174           pa_debug.reset_curr_function;
31175       END IF;
31176 
31177 
31178       IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
31179        FND_MSG_PUB.add_exc_msg
31180                    ( p_pkg_name            => G_PKG_NAME
31181                    , p_procedure_name      => l_api_name   );
31182      END IF;
31183   END create_deliverable_action;
31184 
31185 --------------------------------------------------------------------------------
31186 --Name:               Update_Deliverable
31187 --Type:               Procedure
31188 --Description:        This procedure updates a deliverable and its related actions
31189 --                    which are passed through actions PLSQL table
31190 --
31191 --Called subprograms:   PA_DELIVERABLE_PUB.UPDATE_DELIVERABLE
31192 --                      Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31193 --
31194 --
31195 --
31196 --History:
31197 --    08-Mar-2004   Puneet            Created
31198 --
31199 
31200 PROCEDURE update_deliverable
31201 (   p_api_version            IN  NUMBER     := 1.0
31202   , p_init_msg_list          IN  VARCHAR2   := 'F'
31203   , p_commit                 IN  VARCHAR2   := FND_API.G_FALSE
31204   , p_debug_mode             IN  VARCHAR2   := 'N'
31205   , x_return_status          OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31206   , p_deliverable_name       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31207   , p_deliverable_short_name IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31208   , p_deliverable_type_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31209   , p_deliverable_owner_id   IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31210   , p_description            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31211   , p_status_code            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31212   , p_due_date               IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31213   , p_completion_date        IN  DATE       := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31214   , p_progress_weight        IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31215   , px_deliverable_id        IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31216   , p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31217   -- for bug# 3729250
31218 --  , p_carrying_out_org_id    IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31219   , p_task_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31220   , p_task_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31221   , p_project_id             IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31222   , p_proj_source_reference  IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31223   , p_action_in_tbl          IN  action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
31224   , x_action_out_tbl         OUT NOCOPY action_out_tbl_type /*Added the nocopy check for 4537865 */
31225   , p_item_id                IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31226   , P_inventory_org_id       IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31227   , p_quantity               IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31228   , p_uom_code               IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31229   -- for bug# 3729250
31230 --  , p_item_description       IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31231   , p_unit_price             IN  NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31232   -- for bug# 3729250
31233   , p_unit_number            IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31234   , p_currency_code          IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31235   , p_pm_source_code         IN  VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR              /* Bug no. 3651113 */
31236   , x_msg_count              OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31237   , x_msg_data               OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31238   )
31239 
31240   IS
31241     l_project_id NUMBER;
31242     l_task_id    NUMBER;
31243     l_task_source_reference VARCHAR2(240);
31244     l_msg_count NUMBER;
31245     l_msg_data VARCHAR2(2000);
31246     l_msg_index_out              NUMBER;
31247     l_data                       VARCHAR2(2000);
31248 
31249 
31250     l_deliverable_id NUMBER;
31251     l_action_id      NUMBER;
31252     l_deliverable_version_id NUMBER;
31253 
31254     l_action_in_tbl_ins action_in_tbl_type;
31255     l_action_in_tbl_upd action_in_tbl_type;
31256 
31257     l_api_name      CONSTANT  VARCHAR2(30)     := 'UPDATE_DELIVERABLE';
31258 
31259     i      NUMBER := 0;
31260     i_actn NUMBER := 0;
31261     i_actn_ins NUMBER := 0;
31262     i_actn_upd NUMBER := 0;
31263 
31264     l_function_allowed      VARCHAR2(1);
31265     l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31266     l_pm_product_code VARCHAR2(2) :='Z';                          /* Bug 3651113 */
31267 
31268     /*cursor added for Bug 3651113 */
31269     Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
31270     Is
31271     Select 'X'
31272     from pa_lookups
31273     where lookup_type='PM_PRODUCT_CODE'
31274     and lookup_code = p_pm_product_code;
31275 
31276      Cursor C_vers (p_proj_element_id NUMBER) IS
31277      SELECT   vers.element_version_id
31278      FROM     pa_proj_element_versions vers
31279            ,  pa_proj_elements elem
31280      WHERE    vers.proj_element_id = elem.proj_element_id
31281      AND      elem.project_id  = vers.project_id
31282      AND      elem.proj_element_id  = p_proj_element_id
31283      AND      elem.project_id  = vers.project_id
31284      AND      elem.object_type = 'PA_DELIVERABLES';
31285 
31286      l_dlvr_id NUMBER; -- added for bug# 3749447
31287 
31288 BEGIN
31289  --  Initialize the message table if requested.
31290     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
31291        FND_MSG_PUB.initialize;
31292     END IF;
31293 ---- --dbms_output.put_line('entering pa_project_pub.Update_deliverable['||p_project_id||']['||p_task_id||']');
31294 
31295     -- 3735792, setting save point unconditionally
31296     --IF (p_commit = FND_API.G_TRUE) THEN
31297     savepoint UPDATE_DELIVERABLE_PUB;
31298     --END IF;
31299 
31300     IF p_debug_mode = 'Y' THEN
31301           PA_DEBUG.set_curr_function( p_function   => l_api_name,
31302                                       p_debug_mode => p_debug_mode );
31303           pa_debug.g_err_stage:= 'Inside '||l_api_name;
31304           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31305     END IF;
31306 
31307 -- Validation check for product code : Bug 3651113
31308 
31309     OPEN p_product_code_csr (p_pm_source_code);
31310     FETCH p_product_code_csr INTO l_pm_product_code;
31311     CLOSE p_product_code_csr;
31312 
31313     IF l_pm_product_code <> 'X'
31314            AND p_pm_source_code <> 'WORKPLAN'
31315     THEN
31316          IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
31317          THEN
31318          pa_interface_utils_pub.map_new_amg_msg
31319          ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
31320           ,p_msg_attribute    => 'CHANGE'
31321           ,p_resize_flag      => 'N'
31322           ,p_msg_context      => 'GENERAL'
31323           ,p_attribute1       => ''
31324           ,p_attribute2       => ''
31325           ,p_attribute3       => ''
31326           ,p_attribute4       => ''
31327           ,p_attribute5       => '');
31328          END IF;
31329     x_return_status             := FND_API.G_RET_STS_ERROR;
31330     RAISE FND_API.G_EXC_ERROR;
31331     END IF;
31332 
31333  --  Set API return status to success
31334     x_return_status     := FND_API.G_RET_STS_SUCCESS;
31335 
31336     IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
31337        l_task_id := NULL;
31338     ELSE
31339        l_task_id := p_task_id;
31340     END IF;
31341 
31342     IF p_task_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
31343        l_task_source_reference := NULL;
31344     ELSE
31345        l_task_source_reference := p_task_source_reference;
31346     END IF;
31347 
31348 -- Function Security Check
31349     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31350     (p_api_version_number => p_api_version,
31351      p_responsibility_id  => l_resp_id,
31352      p_function_name      => 'PA_DELIVERABLE_EDIT',
31353      p_msg_count          => x_msg_count,
31354      p_msg_data           => x_msg_data,
31355      p_return_status      => x_return_status,
31356      p_function_allowed   => l_function_allowed);
31357 
31358      IF p_debug_mode = 'Y' THEN
31359           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
31360      END IF;
31361 
31362      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
31363          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31364      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
31365          RAISE FND_API.G_EXC_ERROR;
31366      END IF;
31367 
31368      IF l_function_allowed = 'N' THEN
31369         pa_interface_utils_pub.map_new_amg_msg
31370         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
31371          ,p_msg_attribute    => 'CHANGE'
31372          ,p_resize_flag      => 'Y'
31373          ,p_msg_context      => 'GENERAL'
31374          ,p_attribute1       => ''
31375          ,p_attribute2       => ''
31376          ,p_attribute3       => ''
31377          ,p_attribute4       => ''
31378          ,p_attribute5       => '');
31379 
31380      x_return_status := FND_API.G_RET_STS_ERROR;
31381          RAISE FND_API.G_EXC_ERROR;
31382      END IF;
31383 
31384  -- validate the input parameters.
31385  -- Get the task and Project details based on source reference passed
31386     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
31387                     p_pm_project_reference =>   p_proj_source_reference
31388                  ,  p_pa_project_id     =>      p_project_id
31389                  ,  p_out_project_id    =>      l_project_id
31390                  ,  p_return_status     =>      x_return_status
31391         );
31392 
31393     IF p_debug_mode = 'Y' THEN
31394          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31395     END IF;
31396 
31397     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31398         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31399     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31400         RAISE  FND_API.G_EXC_ERROR;
31401     END IF;
31402 
31403     -- 3749447 Changed from p_task_id to l_task_id in if conditon
31404     -- also did the same change in below api's parameter passing
31405 
31406     IF ( l_task_id IS NOT NULL OR l_task_source_reference IS NOT NULL ) THEN
31407        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
31408                    p_pa_project_id      => l_project_id
31409                  , p_structure_type     => 'WORKPLAN'
31410                  , p_pa_task_id         => l_task_id
31411                  , p_pm_task_reference  => l_task_source_reference
31412                  , p_out_task_id        => l_task_id
31413                  , p_return_status      => x_return_status );
31414 
31415        IF p_debug_mode = 'Y' THEN
31416            pa_debug.write(g_pkg_name,'Task Ref to ID Return Status ['||x_return_status||']Task ID['||l_task_id||']',3) ;
31417        END IF;
31418 
31419        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31420              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31421        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31422              RAISE FND_API.G_EXC_ERROR;
31423        END IF;
31424     END IF;
31425 
31426  -- Validate Deliverable reference / id- not null, unique
31427     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
31428       (   p_deliverable_reference => p_pm_deliverable_reference
31429         , p_deliverable_id        => px_deliverable_id
31430         , p_project_id            => l_project_id
31431         , p_out_deliverable_id    => l_deliverable_id
31432         , p_return_status         => x_return_status
31433       );
31434 
31435     IF p_debug_mode = 'Y' THEN
31436         pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID ['||l_deliverable_id||'] Return Status ['||x_return_status||']',3) ;
31437     END IF;
31438 
31439     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31440         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31441     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31442         RAISE FND_API.G_EXC_ERROR;
31443     END IF;
31444 
31445     OPEN C_vers(l_deliverable_id);
31446     FETCH C_vers INTO l_deliverable_version_id;
31447     CLOSE C_vers;
31448 
31449     IF p_debug_mode = 'Y' THEN
31450        pa_debug.write(g_pkg_name,'Updatinging deliverable ['|| p_deliverable_short_name||']['||l_deliverable_id||']['||l_project_id||']['||l_task_id||']',3);
31451     END IF;
31452 
31453  -- All other validations done in PA_DELIVERABLE_PUB.UPDATE_DELIVERABLE
31454  --invoke the api to Update deliverable
31455 
31456     Pa_Deliverable_Pub.Update_Deliverable
31457     (  p_api_version            =>  p_api_version
31458      , p_init_msg_list          =>  p_init_msg_list
31459      -- 3735792, passing p_commit as false to next level api calls
31460      , p_commit                 =>  FND_API.G_FALSE
31461      , p_validate_only          =>  FND_API.G_FALSE
31462      , p_validation_level       =>  FND_API.G_VALID_LEVEL_FULL
31463      , p_calling_module         =>  'AMG'
31464      , p_debug_mode             =>  p_debug_mode
31465      , p_max_msg_count          =>  NULL
31466      , p_record_version_number  =>  null
31467      , p_object_type            =>  'PA_DELIVERABLES'
31468      , p_project_id             =>  l_project_id
31469      , p_dlvr_number            =>  p_deliverable_short_name
31470      , p_dlvr_name              =>  p_deliverable_name
31471      , p_dlvr_description       =>  p_description
31472      , p_dlvr_owner_id          =>  p_deliverable_owner_id
31473      , p_dlvr_owner_name        =>  NULL
31474      -- for bug# 3729250
31475 --     , p_carrying_out_org_id    =>  p_carrying_out_org_id
31476      , p_carrying_out_org_name  =>  NULL
31477      , p_dlvr_version_id        =>  l_deliverable_version_id --3733221
31478      , p_status_code            =>  p_status_code
31479      , p_parent_structure_id    =>  NULL
31480      , p_dlvr_type_id           =>  p_deliverable_type_id
31481      , p_dlvr_type_name         =>  NULL
31482      , p_progress_weight        =>  p_progress_weight
31483      , p_scheduled_finish_date  =>  p_due_date
31484      , p_actual_finish_date     =>  p_completion_date
31485      , p_task_id                =>  l_task_id
31486      , p_task_version_id        =>  null
31487      , p_task_name              =>  null
31488      , p_deliverable_reference  =>  p_pm_deliverable_reference
31489      , p_item_id                =>  p_item_id
31490      , p_inventory_org_id       =>  p_inventory_org_id
31491      , p_quantity               =>  p_quantity
31492      , p_uom_code               =>  p_uom_code
31493      -- for bug# 3729250
31494 --     , p_item_description       =>  p_item_description
31495      , p_unit_price             =>  p_unit_price
31496      , p_unit_number            =>  p_unit_number
31497      , p_currency_code          =>  p_currency_code
31498      , p_dlvr_item_id           =>  l_deliverable_id -- 3749447 changed from px_deliverable_id to l_deliverable_id
31499      , p_pm_source_code         =>  p_pm_source_code -- 3749447 passing p_pm_source_code
31500      , x_return_status          =>  x_return_status
31501      , x_msg_count              =>  l_msg_count
31502      , x_msg_data               =>  l_msg_data
31503     );
31504 
31505     -- 3749447 assigning the derived deliverale id, this is required in the below case
31506     -- while calling update_deliverable, if user has passed only deliverable reference,
31507     -- after api execution, returned value for px_deliverable_id will be g_pa_miss_num
31508     px_deliverable_id := l_deliverable_id;
31509 
31510     x_msg_count              := l_msg_count;
31511     x_msg_data               := l_msg_data;
31512 
31513     IF p_debug_mode = 'Y' THEN
31514        pa_debug.g_err_stage := 'Pa_Deliverable_Pub.Update_Deliverable return status ['||x_return_status||']';
31515        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
31516     END IF;
31517 
31518    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31519           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31520    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31521           RAISE  FND_API.G_EXC_ERROR;
31522    END IF;
31523 
31524 -- From the action_in table, select the actions for the given deliverable.
31525 -- Based on action_reference / action_id identify if new action is to
31526 -- to be created or existing action is to be updated.
31527 
31528    i := p_action_in_tbl.first();
31529 
31530    -- added for bug# 3749447, added below code to handle following scenario
31531    -- if user has not passed deliverable id in action record , only deliverable reference is passed
31532    -- and for deliverable record not passed passed deliverable id
31533    -- in this case, passed action will not be considered for update or create
31534 
31535    -- deriving deliverable id from deliverable reference
31536 
31537    IF i IS NOT NULL THEN
31538        Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
31539          (   p_deliverable_reference => p_action_in_tbl(i).pm_deliverable_reference
31540            , p_deliverable_id        => p_action_in_tbl(i).deliverable_id
31541            , p_project_id            => l_project_id
31542            , p_out_deliverable_id    => l_dlvr_id
31543            , p_return_status         => x_return_status
31544          );
31545 
31546         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31547             RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31548         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31549             RAISE FND_API.G_EXC_ERROR;
31550         END IF;
31551 
31552    END IF;
31553 
31554    WHILE (i IS NOT NULL ) LOOP
31555       IF ( p_pm_deliverable_reference = p_action_in_tbl(i).pm_deliverable_reference OR
31556            px_deliverable_id = l_dlvr_id ) THEN -- 3749447 using derived deliverable id instead of passed id, for above mentioned case
31557 
31558           -- action is for current deliverable only
31559           IF (p_action_in_tbl(i).action_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
31560               p_action_in_tbl(i).action_id = NULL) THEN
31561              l_action_id := NULL;
31562           ELSE
31563              l_action_id := p_action_in_tbl(i).action_id;
31564           END IF;
31565 
31566           i_actn := i_actn + 1;
31567 
31568           -- added for bug# 3749447, added if condition to check for not null action id
31569           -- if action id not null, then and only then , action reference to id validation should be done
31570           -- in case of new action below validon will fail and will not allow user to create new actions from update_deliverable
31571 
31572           IF l_action_id IS NOT NULL THEN
31573               Pa_Deliverable_Utils.Convert_pm_actionref_to_id      (
31574                     p_action_reference  =>  p_action_in_tbl(i_actn).pm_action_reference
31575                    ,p_action_id         =>  l_action_id
31576                    ,p_deliverable_id    =>  l_deliverable_id
31577                    ,p_project_id        =>  l_Project_id
31578                    ,p_out_action_id     =>  l_action_id
31579                    ,p_return_status     =>  x_return_status
31580                    );
31581           END IF;
31582 
31583          IF p_debug_mode = 'Y' THEN
31584            pa_debug.write(g_pkg_name,'Dlvr Action Reference Valid Return Status ['||x_return_status||']Action ID['||l_action_id||']',3) ;
31585          END IF;
31586 
31587          IF (l_action_id is NOT NULL) THEN
31588             -- action is an existing action and is to be updated
31589             i_actn_upd := i_actn_upd + 1 ;
31590             l_action_in_tbl_upd(i_actn_upd) := p_action_in_tbl(i);
31591 
31592             -- added for bug# 3749447
31593             -- passing derived values of action id and deliverable id
31594             -- when ever deliverable and action reference is passed , update will not work
31595             l_action_in_tbl_upd(i_actn_upd).action_id := l_action_id;
31596             l_action_in_tbl_upd(i_actn_upd).deliverable_id := l_deliverable_id;
31597 
31598             -- added for bug# 3749447
31599             -- if for action record , pm_source_code is not passed , use it from deliverable pm source code
31600             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
31601                 l_action_in_tbl_upd(i_actn_upd).pm_source_code := p_pm_source_code;
31602             END IF;
31603 
31604          ELSE
31605             -- New action is to be created.
31606             i_actn_ins := i_actn_ins + 1 ;
31607             l_action_in_tbl_ins(i_actn_ins) := p_action_in_tbl(i);
31608 
31609             -- added for bug# 3749447
31610             -- passing derived values of action id and deliverable id
31611             -- when ever deliverable reference is passed , create will not work
31612             l_action_in_tbl_ins(i_actn_ins).deliverable_id := l_deliverable_id;
31613 
31614             -- added for bug# 3749447
31615             -- if pm_source_code is not passed in action record, use it from deliverable record
31616 
31617             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
31618                 l_action_in_tbl_ins(i_actn_ins).pm_source_code := p_pm_source_code;
31619             END IF;
31620 
31621          END IF; -- l_action_id is NULL
31622 
31623       END IF; -- deliverable reference
31624       i := p_action_in_tbl.next(i);     -- added for bug# 3749447, next was not done
31625    END LOOP;
31626 
31627     IF p_debug_mode = 'Y' THEN
31628         pa_debug.write(g_pkg_name,'Uploaded action detail for Updation/Insertion upd ['||i_actn_upd||'] ins ['||i_actn_ins||'] tot ['||i_actn||']',3) ;
31629     END IF;
31630 
31631    IF (i_actn_upd > 0 ) THEN
31632 
31633 -- There are actions to be updated
31634        Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31635        ( p_api_version            => p_api_version
31636        , p_init_msg_list          => FND_API.G_FALSE
31637        , p_commit                 => FND_API.G_FALSE
31638        , p_validate_only          => FND_API.G_FALSE
31639        , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
31640        , p_calling_module         => 'AMG'
31641        , p_debug_mode             => p_debug_mode
31642        , p_insert_or_update       => 'UPDATE'
31643        , p_action_in_tbl          => l_action_in_tbl_upd
31644        , x_action_out_tbl         => x_action_out_tbl
31645        , x_return_status          => x_return_status
31646        , x_msg_count              => l_msg_count
31647        , x_msg_data               => l_msg_data);
31648 
31649       IF p_debug_mode = 'Y' THEN
31650           pa_debug.write(g_pkg_name,'Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper upd return status['||x_return_status||']',3) ;
31651       END IF;
31652 
31653       IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31654              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31655       ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31656              RAISE  FND_API.G_EXC_ERROR;
31657       END IF;
31658 
31659    END IF; --i_actn_upd > 0
31660 
31661    IF (i_actn_ins > 0 ) THEN
31662 
31663 -- There are actions to be updated
31664        Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31665        ( p_api_version            => p_api_version
31666        , p_init_msg_list          => FND_API.G_FALSE
31667        , p_commit                 => FND_API.G_FALSE
31668        , p_validate_only          => FND_API.G_FALSE
31669        , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
31670        , p_calling_module         => 'AMG'
31671        , p_debug_mode             => p_debug_mode
31672        , p_insert_or_update       => 'INSERT'
31673        , p_action_in_tbl          => l_action_in_tbl_ins
31674        , x_action_out_tbl         => x_action_out_tbl
31675        , x_return_status          => x_return_status
31676        , x_msg_count              => l_msg_count
31677        , x_msg_data               => l_msg_data);
31678 
31679       IF p_debug_mode = 'Y' THEN
31680           pa_debug.write(g_pkg_name,'Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper upd return status['||x_return_status||']',3) ;
31681       END IF;
31682 
31683       IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31684              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31685       ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31686              RAISE  FND_API.G_EXC_ERROR;
31687       END IF;
31688 
31689    END IF; --i_actn_upd > 0
31690 
31691    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31692    IF (p_commit = FND_API.G_TRUE) THEN
31693        COMMIT;
31694    END IF;
31695 
31696    IF p_debug_mode = 'Y' THEN
31697        pa_debug.reset_curr_function;
31698        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31699    END IF;
31700 
31701 EXCEPTION
31702    WHEN FND_API.G_EXC_ERROR        THEN
31703       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31704       --IF (p_commit = FND_API.G_TRUE) THEN
31705       ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31706       --END IF;
31707 
31708       IF p_debug_mode = 'Y' THEN
31709           pa_debug.reset_curr_function;
31710           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31711       END IF;
31712       x_return_status := FND_API.G_RET_STS_ERROR;
31713       x_msg_count := FND_MSG_PUB.count_msg;
31714 
31715       IF x_msg_count = 1 THEN
31716            PA_INTERFACE_UTILS_PUB.get_messages
31717                (p_encoded        => FND_API.G_FALSE,
31718                 p_msg_index      => 1,
31719                 p_msg_count      => x_msg_count,
31720                 p_msg_data       => x_msg_data,
31721                 p_data           => l_data, --  4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31722                 p_msg_index_out  => l_msg_index_out);
31723         x_msg_data := l_data ; -- 4537865
31724      END IF;
31725 
31726    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
31727       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31728       --IF (p_commit = FND_API.G_TRUE) THEN
31729       ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31730       --END IF;
31731 
31732       IF p_debug_mode = 'Y' THEN
31733           pa_debug.reset_curr_function;
31734           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31735       END IF;
31736       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31737       x_msg_count := FND_MSG_PUB.count_msg;
31738 
31739       IF x_msg_count = 1 THEN
31740            PA_INTERFACE_UTILS_PUB.get_messages
31741                (p_encoded        => FND_API.G_FALSE,
31742                 p_msg_index      => 1,
31743                 p_msg_count      => x_msg_count,
31744                 p_msg_data       => x_msg_data,
31745                 p_data           => l_data, --  4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31746                 p_msg_index_out  => l_msg_index_out);
31747                 x_msg_data := l_data ; -- 4537865
31748      END IF;
31749 
31750    WHEN OTHERS THEN
31751       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
31752       --IF (p_commit = FND_API.G_TRUE) THEN
31753       ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31754       --END IF;
31755 
31756       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31757       x_msg_count := 1;
31758       x_msg_data := SQLERRM;
31759 
31760       IF p_debug_mode = 'Y' THEN
31761           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31762           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31763           pa_debug.reset_curr_function;
31764       END IF;
31765 
31766 
31767    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
31768        FND_MSG_PUB.add_exc_msg
31769                    ( p_pkg_name            => G_PKG_NAME
31770                    , p_procedure_name      => l_api_name   );
31771   END IF;
31772 END update_deliverable;
31773 
31774 
31775 PROCEDURE update_deliverable_action
31776 (   p_api_version                  IN  NUMBER   := 1.0
31777   , p_init_msg_list                IN  VARCHAR2 := FND_API.G_TRUE
31778   , p_debug_mode                   IN  VARCHAR2 := FND_API.G_FALSE
31779   , p_commit                       IN  VARCHAR2 := FND_API.G_FALSE
31780   , p_action_name                  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31781   , p_action_owner_id              IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31782   , p_function_code                IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31783   , p_due_date                     IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31784   , p_description                  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31785   , p_completion_date              IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31786   , p_pm_source_code               IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31787   , p_pm_action_reference          IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31788   -- added for bug# 3729250
31789   , p_action_id                    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31790   -- for bug# 3729250
31791   --  , p_carrying_out_org_id          IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31792   , p_deliverable_reference        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31793   , p_deliverable_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31794   -- added for bug# 3729250
31795   , p_pm_proj_reference            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31796   , p_project_id                   IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31797   , p_financial_task_id            IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31798   -- added for bug# 3729250
31799   , p_financial_task_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31800   , p_destination_type_code        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31801   , p_receiving_org_id             IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31802   , p_receiving_location_id        IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31803   , p_po_need_by_date              IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31804   , p_vendor_id                    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31805   , p_vendor_site_code             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31806 --  , p_project_currency             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31807   , p_Quantity                     IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31808   , p_uom_code                     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31809   , p_unit_price                   IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31810   , p_exchange_rate_type           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31811   , p_exchange_rate_date           IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31812   , p_exchange_rate                IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31813   , p_expenditure_type             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31814   , p_expenditure_org_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31815   , p_expenditure_item_date        IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31816   , p_requisition_line_type_id     IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31817   , p_category_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31818   , p_ready_to_procure_flag        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31819   , p_initiate_procure_flag        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31820   , p_ship_from_organization_id    IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31821   , p_ship_from_location_id        IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31822   , p_ship_to_organization_id      IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31823   , p_ship_to_location_id          IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31824   , p_demand_schedule              IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31825   , p_expected_shipment_date       IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31826   , p_promised_shipment_date       IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31827   , p_volume                       IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31828   , p_volume_uom                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31829   , p_weight                       IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31830   , p_weight_uom                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31831   , p_ready_to_ship_flag           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31832   , p_initiate_planning_flag       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31833   , p_initiate_shipping_flag       IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31834   , p_event_type                   IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31835   , p_currency                     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3749474 changed data type
31836   , p_invoice_amount               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31837   , p_revenue_amount               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31838   , p_event_date                   IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31839   , p_event_number                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31840   , p_organization_id              IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31841   , p_bill_hold_flag               IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31842   , p_project_functional_rate_type IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31843   , p_project_functional_rate_date IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31844   , p_project_functional_rate      IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31845   , p_project_rate_type            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31846   , p_project_rate_date            IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31847   , p_project_rate                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31848   , p_funding_rate_type            IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31849   , p_funding_rate_date            IN  DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31850   , p_funding_rate                 IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31851   , p_pm_event_reference           IN  VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
31852   , x_action_out                   OUT NOCOPY  action_out_tbl_type
31853   , x_return_status                OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31854   , x_msg_count                    OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31855   , x_msg_data                     OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31856   )
31857 IS
31858     l_api_name      CONSTANT  VARCHAR2(30)     := 'update_deliverable_actions';
31859 
31860     l_action_in_tbl   action_in_tbl_type ;
31861     l_action_out_tbl  action_out_tbl_type ;
31862 
31863     l_msg_count     NUMBER   := null;
31864     l_msg_data      VARCHAR2(2000) := null;
31865     l_msg_index_out              NUMBER;
31866     l_data                       VARCHAR2(2000);
31867 
31868 
31869     l_project_id   NUMBER := null;
31870     l_deliverable_id NUMBER := null;
31871     l_function_allowed      VARCHAR2(1);
31872     l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31873 
31874     -- 3729250 added local variables
31875     l_fin_task_id   NUMBER := NULL;
31876     l_action_id     NUMBER := NULL;
31877 
31878     i  NUMBER := 1;
31879 BEGIN
31880 
31881 --  Standard begin of API savepoint
31882     SAVEPOINT update_deliverable_actions_pub;
31883 
31884 --  Standard call to check for call compatibility.
31885     IF NOT FND_API.Compatible_API_Call ( g_api_version_number  ,
31886                                p_api_version  ,
31887                                l_api_name         ,
31888                                G_PKG_NAME       )
31889     THEN
31890        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31891     END IF;
31892 
31893 --  Initialize the message table if requested.
31894     IF FND_API.TO_BOOLEAN( p_init_msg_list )   THEN
31895        FND_MSG_PUB.initialize;
31896     END IF;
31897 
31898     IF p_debug_mode = 'Y' THEN
31899           PA_DEBUG.set_curr_function( p_function   => l_api_name,
31900                                       p_debug_mode => p_debug_mode );
31901           pa_debug.g_err_stage:= 'Inside '||l_api_name;
31902           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31903     END IF;
31904 --  Set API return status to success
31905     x_return_status := FND_API.G_RET_STS_SUCCESS;
31906 
31907 -- Function Security Check
31908     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31909     (p_api_version_number => p_api_version,
31910      p_responsibility_id  => l_resp_id,
31911      p_function_name      => 'PA_DELIVERABLE_EDIT',
31912      p_msg_count          => x_msg_count,
31913      p_msg_data           => x_msg_data,
31914      p_return_status      => x_return_status,
31915      p_function_allowed   => l_function_allowed);
31916 
31917 
31918      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
31919          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31920      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
31921          RAISE FND_API.G_EXC_ERROR;
31922      END IF;
31923 
31924      IF l_function_allowed = 'N' THEN
31925         pa_interface_utils_pub.map_new_amg_msg
31926         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
31927          ,p_msg_attribute    => 'CHANGE'
31928          ,p_resize_flag      => 'Y'
31929          ,p_msg_context      => 'GENERAL'
31930          ,p_attribute1       => ''
31931          ,p_attribute2       => ''
31932          ,p_attribute3       => ''
31933          ,p_attribute4       => ''
31934          ,p_attribute5       => '');
31935 
31936      x_return_status := FND_API.G_RET_STS_ERROR;
31937          RAISE FND_API.G_EXC_ERROR;
31938      END IF;
31939 
31940  -- validate the input parameters.
31941  -- Validate Project reference/id
31942     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
31943                     p_pm_project_reference =>   p_pm_proj_reference -- 3729250, earlier was passed as null
31944                  ,  p_pa_project_id     =>      p_project_id
31945                  ,  p_out_project_id    =>      l_project_id
31946                  ,  p_return_status     =>      x_return_status
31947         );
31948 
31949     IF p_debug_mode = 'Y' THEN
31950          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31951     END IF;
31952 
31953     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31954         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31955     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31956         RAISE  FND_API.G_EXC_ERROR;
31957     END IF;
31958 
31959  -- Validate Deliverable reference / ID
31960     PA_Deliverable_Utils.Convert_pm_dlvrref_to_id(
31961           p_deliverable_reference => p_deliverable_reference
31962         , p_deliverable_id        => p_deliverable_id
31963         , p_project_id            => l_project_id
31964         , p_out_deliverable_id    => l_deliverable_id
31965         , p_return_status         => x_return_status);
31966 
31967     IF p_debug_mode = 'Y' THEN
31968         pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID Return Status ['||x_return_status,3) ;
31969     END IF;
31970 
31971     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31972         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31973     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31974         RAISE FND_API.G_EXC_ERROR;
31975     END IF;
31976 
31977 
31978  -- 3729250 Validate Deliverable Action reference / ID
31979     PA_Deliverable_Utils.Convert_pm_actionref_to_id(
31980           p_action_reference      => p_pm_action_reference
31981         , p_action_id             => p_action_id
31982         , p_deliverable_id        => l_deliverable_id
31983         , p_project_id            => l_project_id
31984         , p_out_action_id         => l_action_id
31985         , p_return_status         => x_return_status);
31986 
31987     IF p_debug_mode = 'Y' THEN
31988         pa_debug.write(g_pkg_name,'Convert_pm_actionref_to_id Return Status ['||x_return_status,3) ;
31989     END IF;
31990 
31991     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
31992         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
31993     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
31994         RAISE FND_API.G_EXC_ERROR;
31995     END IF;
31996 
31997     -- 3729250, Validate Financial Task Reference / ID
31998     -- PA_PROJECT_PVT.Convert_pm_taskref_to_id_all should only be called if either p_financial_task_id or
31999     -- p_financial_task_reference is passed
32000 
32001     IF ( ( p_financial_task_id IS NOT NULL AND p_financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
32002          ( p_financial_task_reference IS NOT NULL AND p_financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) THEN
32003         PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
32004                    p_pa_project_id      => l_project_id
32005                  , p_structure_type     => 'FINANCIAL'
32006                  , p_pa_task_id         => p_financial_task_id
32007                  , p_pm_task_reference  => p_financial_task_reference
32008                  , p_out_task_id        => l_fin_task_id
32009                  , p_return_status      => x_return_status );
32010 
32011         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32012               RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32013         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32014               RAISE FND_API.G_EXC_ERROR;
32015         END IF;
32016     END IF;
32017 
32018 --  Populate the table with input parameters
32019 
32020     IF ( i IS NOT NULL ) THEN
32021        l_action_in_tbl(i).action_name                 :=  p_action_name                 ;
32022        l_action_in_tbl(i).action_owner_id             :=  p_action_owner_id             ;
32023        l_action_in_tbl(i).function_code               :=  p_function_code               ;
32024        l_action_in_tbl(i).due_date                    :=  p_due_date                    ;
32025        l_action_in_tbl(i).description                 :=  p_description                 ;
32026        l_action_in_tbl(i).completion_date             :=  p_completion_date             ;
32027        l_action_in_tbl(i).pm_source_code              :=  p_pm_source_code              ;
32028        l_action_in_tbl(i).pm_action_reference         :=  p_pm_action_reference         ;
32029        -- for bug# 3729250
32030 --       l_action_in_tbl(i).carrying_out_org_id         :=  p_carrying_out_org_id         ;
32031        l_action_in_tbl(i).pm_deliverable_reference    :=  p_deliverable_reference       ;
32032        l_action_in_tbl(i).deliverable_id              :=  l_deliverable_id              ; -- 3749474 earlier p_deliverable_id was passed
32033        l_action_in_tbl(i).financial_task_id           :=  l_fin_task_id                 ; -- for bug# 3729250
32034        l_action_in_tbl(i).destination_type_code       :=  p_destination_type_code       ;
32035        l_action_in_tbl(i).receiving_org_id            :=  p_receiving_org_id            ;
32036        l_action_in_tbl(i).receiving_location_id       :=  p_receiving_location_id       ;
32037        l_action_in_tbl(i).po_need_by_date             :=  p_po_need_by_date             ;
32038        l_action_in_tbl(i).vendor_id                   :=  p_vendor_id                   ;
32039        l_action_in_tbl(i).vendor_site_code            :=  p_vendor_site_code            ;
32040 --       l_action_in_tbl(i).project_currency            :=  p_project_currency            ;
32041        l_action_in_tbl(i).Quantity                    :=  p_Quantity                    ;
32042        l_action_in_tbl(i).uom_code                    :=  p_uom_code                    ;
32043        l_action_in_tbl(i).unit_price                  :=  p_unit_price                  ;
32044        l_action_in_tbl(i).exchange_rate_type          :=  p_exchange_rate_type          ;
32045        l_action_in_tbl(i).exchange_rate_date          :=  p_exchange_rate_date          ;
32046        l_action_in_tbl(i).exchange_rate               :=  p_exchange_rate               ;
32047        l_action_in_tbl(i).expenditure_type            :=  p_expenditure_type            ;
32048        l_action_in_tbl(i).expenditure_org_id          :=  p_expenditure_org_id          ;
32049        l_action_in_tbl(i).expenditure_item_date       :=  p_expenditure_item_date       ;
32050        l_action_in_tbl(i).requisition_line_type_id    :=  p_requisition_line_type_id    ;
32051        l_action_in_tbl(i).category_id                 :=  p_category_id                 ;
32052        l_action_in_tbl(i).ready_to_procure_flag       :=  p_ready_to_procure_flag       ;
32053        l_action_in_tbl(i).initiate_procure_flag       :=  p_initiate_procure_flag       ;
32054        l_action_in_tbl(i).ship_from_organization_id   :=  p_ship_from_organization_id   ;
32055        l_action_in_tbl(i).ship_from_location_id       :=  p_ship_from_location_id       ;
32056        l_action_in_tbl(i).ship_to_organization_id     :=  p_ship_to_organization_id     ;
32057        l_action_in_tbl(i).ship_to_location_id         :=  p_ship_to_location_id         ;
32058        l_action_in_tbl(i).demand_schedule             :=  p_demand_schedule             ;
32059        l_action_in_tbl(i).expected_shipment_date      :=  p_expected_shipment_date      ;
32060        l_action_in_tbl(i).promised_shipment_date      :=  p_promised_shipment_date      ;
32061        l_action_in_tbl(i).volume                      :=  p_volume                      ;
32062        l_action_in_tbl(i).volume_uom                  :=  p_volume_uom                  ;
32063        l_action_in_tbl(i).weight                      :=  p_weight                      ;
32064        l_action_in_tbl(i).weight_uom                  :=  p_weight_uom                  ;
32065        l_action_in_tbl(i).ready_to_ship_flag          :=  p_ready_to_ship_flag          ;
32066        l_action_in_tbl(i).initiate_planning_flag      :=  p_initiate_planning_flag      ;
32067        l_action_in_tbl(i).initiate_shipping_flag      :=  p_initiate_shipping_flag      ;
32068        l_action_in_tbl(i).event_type                  :=  p_event_type                  ;
32069        l_action_in_tbl(i).currency                    :=  p_currency                    ;
32070        l_action_in_tbl(i).invoice_amount              :=  p_invoice_amount              ;
32071        l_action_in_tbl(i).revenue_amount              :=  p_revenue_amount              ;
32072        l_action_in_tbl(i).event_date                  :=  p_event_date                  ;
32073        l_action_in_tbl(i).event_number                :=  p_event_number                ;
32074        l_action_in_tbl(i).organization_id             :=  p_organization_id             ;
32075        l_action_in_tbl(i).bill_hold_flag              :=  p_bill_hold_flag              ;
32076        l_action_in_tbl(i).project_functional_rate_type:=  p_project_functional_rate_type;
32077        l_action_in_tbl(i).project_functional_rate_date:=  p_project_functional_rate_date;
32078        l_action_in_tbl(i).project_functional_rate     :=  p_project_functional_rate     ;
32079        l_action_in_tbl(i).project_rate_type           :=  p_project_rate_type           ;
32080        l_action_in_tbl(i).project_rate_date           :=  p_project_rate_date           ;
32081        l_action_in_tbl(i).project_rate                :=  p_project_rate                ;
32082        l_action_in_tbl(i).funding_rate_type           :=  p_funding_rate_type           ;
32083        l_action_in_tbl(i).funding_rate_date           :=  p_funding_rate_date           ;
32084        l_action_in_tbl(i).funding_rate                :=  p_funding_rate                ;
32085        l_action_in_tbl(i).pm_event_reference          :=  p_pm_event_reference          ; -- 3651489 added parameter
32086        l_action_in_tbl(i).action_id                   :=  l_action_id                   ; -- 3729250 added parameter
32087     END IF;
32088 
32089 --  Call api to update actions  passing the newly populated plsql table
32090     Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
32091     ( p_api_version            => p_api_version
32092     , p_init_msg_list          => FND_API.G_FALSE
32093     , p_commit                 => FND_API.G_FALSE
32094     , p_validate_only          => FND_API.G_FALSE
32095     , p_validation_level       => FND_API.G_VALID_LEVEL_FULL
32096     , p_calling_module         => 'AMG'
32097     , p_debug_mode             => p_debug_mode
32098     , p_insert_or_update       => 'UPDATE'
32099     , p_action_in_tbl          => l_action_in_tbl
32100     , x_action_out_tbl         => l_action_out_tbl
32101     , x_return_status          => x_return_status
32102     , x_msg_count              => l_msg_count
32103     , x_msg_data               => l_msg_data);
32104 
32105     -- 3749474 added code to check for return status
32106 
32107     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32108           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32109     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32110           RAISE FND_API.G_EXC_ERROR;
32111     END IF;
32112 
32113 ---- --dbms_output.put_line('after  Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper'||x_return_status);
32114      i := l_action_out_tbl.first();
32115 
32116      WHILE i IS NOT NULL LOOP
32117         ---- --dbms_output.put_line('action created ['||l_action_out_tbl(i).action_id||'] status ['||l_action_out_tbl(i).return_status);
32118         i := l_action_out_tbl.next(i);
32119      END LOOP;
32120 
32121     -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32122     IF (p_commit = FND_API.G_TRUE) THEN
32123         COMMIT;
32124     END IF;
32125 
32126     IF p_debug_mode = 'Y' THEN
32127        pa_debug.reset_curr_function;
32128        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32129    END IF;
32130 
32131 EXCEPTION
32132    WHEN FND_API.G_EXC_ERROR        THEN
32133       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32134       --IF (p_commit = FND_API.G_TRUE) THEN
32135       ROLLBACK TO update_deliverable_actions_pub;
32136       --END IF;
32137 
32138       IF p_debug_mode = 'Y' THEN
32139           pa_debug.reset_curr_function;
32140           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32141       END IF;
32142       x_return_status := FND_API.G_RET_STS_ERROR;
32143       x_msg_count := FND_MSG_PUB.count_msg;
32144 
32145       IF x_msg_count = 1 THEN
32146            PA_INTERFACE_UTILS_PUB.get_messages
32147                (p_encoded        => FND_API.G_FALSE,
32148                 p_msg_index      => 1,
32149                 p_msg_count      => x_msg_count,
32150                 p_msg_data       => x_msg_data,
32151                 p_data           => l_data, --4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
32152                 p_msg_index_out  => l_msg_index_out);
32153         x_msg_data := l_data ; -- 4537865
32154      END IF;
32155 
32156    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
32157       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32158       --IF (p_commit = FND_API.G_TRUE) THEN
32159       ROLLBACK TO update_deliverable_actions_pub;
32160       --END IF;
32161 
32162       IF p_debug_mode = 'Y' THEN
32163           pa_debug.reset_curr_function;
32164           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32165       END IF;
32166       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32167       x_msg_count := FND_MSG_PUB.count_msg;
32168 
32169       IF x_msg_count = 1 THEN
32170            PA_INTERFACE_UTILS_PUB.get_messages
32171                (p_encoded        => FND_API.G_FALSE,
32172                 p_msg_index      => 1,
32173                 p_msg_count      => x_msg_count,
32174                 p_msg_data       => x_msg_data,
32175                 p_data           => l_data,-- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
32176                 p_msg_index_out  => l_msg_index_out);
32177                 x_msg_data := l_data ; -- 4537865
32178      END IF;
32179 
32180    WHEN OTHERS THEN
32181       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32182       -- IF (p_commit = FND_API.G_TRUE) THEN
32183       ROLLBACK TO update_deliverable_actions_pub;
32184       -- END IF;
32185 
32186       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32187       x_msg_count := 1;
32188       x_msg_data := SQLERRM;
32189 
32190       IF p_debug_mode = 'Y' THEN
32191           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32192           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32193           pa_debug.reset_curr_function;
32194       END IF;
32195 
32196    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
32197        FND_MSG_PUB.add_exc_msg
32198                    ( p_pkg_name            => G_PKG_NAME
32199                    , p_procedure_name      => l_api_name   );
32200   END IF;
32201 
32202   END update_deliverable_action;
32203 
32204 
32205 -- SubProgram           : DELETE_DELIVERABLES
32206 -- Type                 : PUBLIC FUNCTION
32207 -- Purpose              : This function will delete the deliverable - Single record
32208 -- Assumptions          : None
32209 
32210 Procedure Delete_Deliverables (
32211    p_api_version              IN  NUMBER   := 1.0
32212   ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_FALSE
32213   ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
32214   ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32215   ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32216   ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32217   --for bug# 3729250
32218   ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32219   ,p_pm_dlv_source_reference  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32220   ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32221   ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32222   ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32223 )IS
32224   l_api_name VARCHAR2(30) := 'Delete_Deliverables';
32225   l_deliverable_id NUMBER;
32226   l_dlvr_version_id NUMBER;
32227   l_project_id NUMBER;
32228   l_function_allowed      VARCHAR2(1);
32229   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32230 
32231   l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
32232   l_msg_index_out              NUMBER;
32233   l_msg_count                  NUMBER ;
32234   l_data                       VARCHAR2(2000);
32235   l_msg_data                   VARCHAR2(2000);
32236 
32237 
32238 BEGIN
32239  --  Initialize the message table if requested.
32240     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
32241        FND_MSG_PUB.initialize;
32242     END IF;
32243 
32244     -- 3735792, setting save point unconditionally
32245     --IF (p_commit = FND_API.G_TRUE) THEN
32246     savepoint DELETE_DELIVERABLE_PUB;
32247     --END IF;
32248 
32249     IF l_debug_mode = 'Y' THEN
32250           PA_DEBUG.set_curr_function( p_function   => l_api_name,
32251                                       p_debug_mode => l_debug_mode );
32252           pa_debug.g_err_stage:= 'Inside '||l_api_name;
32253           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32254     END IF;
32255 
32256  --  Set API return status to success
32257     x_return_status     := FND_API.G_RET_STS_SUCCESS;
32258 
32259 -- Function Security Check
32260     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32261     (p_api_version_number => p_api_version,
32262      p_responsibility_id  => l_resp_id,
32263      p_function_name      => 'PA_DELIVERABLE_EDIT',
32264      p_msg_count          => x_msg_count,
32265      p_msg_data           => x_msg_data,
32266      p_return_status      => x_return_status,
32267      p_function_allowed   => l_function_allowed);
32268 
32269      IF l_debug_mode = 'Y' THEN
32270           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
32271      END IF;
32272 
32273      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
32274          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32275      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
32276          RAISE FND_API.G_EXC_ERROR;
32277      END IF;
32278 
32279      IF l_function_allowed = 'N' THEN
32280         PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
32281                             ,p_msg_name         => 'PA_FUNCTION_SECURITY_ENFORCED');
32282          x_return_status := FND_API.G_RET_STS_ERROR;
32283          RAISE FND_API.G_EXC_ERROR;
32284      END IF;
32285 
32286 -- validate the input parameters.
32287 -- Validate Project Reference / ID
32288     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
32289                     p_pm_project_reference =>   p_pm_project_reference
32290                  ,  p_pa_project_id     =>      p_project_id
32291                  ,  p_out_project_id    =>      l_project_id
32292                  ,  p_return_status     =>      x_return_status
32293         );
32294 
32295     IF l_debug_mode = 'Y' THEN
32296          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
32297     END IF;
32298 
32299     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32300         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32301     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32302         RAISE  FND_API.G_EXC_ERROR;
32303     END IF;
32304 
32305 -- Validate Deliverable Reference / ID
32306     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32307       (   p_deliverable_reference => p_pm_dlv_source_reference
32308         -- for bug# 3729250
32309         , p_deliverable_id        => p_deliverable_id
32310         , p_project_id            => l_project_id
32311         , p_out_deliverable_id    => l_deliverable_id
32312         , p_return_status         => x_return_status
32313       );
32314 
32315     IF l_debug_mode = 'Y' THEN
32316         pa_debug.write(g_pkg_name,'Dlvr Reference Valid Return Status ['||x_return_status||']Dlvr ID['||l_deliverable_id||']',3) ;
32317     END IF;
32318 
32319     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32320         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32321     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32322         RAISE FND_API.G_EXC_ERROR;
32323     END IF;
32324 
32325 -- Derive deliverable version ID and call api Delete Deliverable. It
32326      l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32327 
32328     IF l_debug_mode = 'Y' THEN
32329         pa_debug.write(g_pkg_name,'Derived Dlvr Version ID ['||l_dlvr_version_id||'] for Dlvr ID['||l_deliverable_id||']',3) ;
32330     END IF;
32331 
32332 -- deletes the corresponding actions and associations also.
32333    IF ( l_dlvr_version_id IS NOT NULL )
32334    THEN
32335       pa_deliverable_pvt.delete_deliverable
32336          (p_api_version         => p_api_version
32337          ,p_init_msg_list       => FND_API.G_FALSE
32338          -- 3735792, passing p_commit as false to next level api calls
32339          ,p_commit              => FND_API.G_FALSE
32340          ,p_validate_only       => FND_API.G_FALSE
32341          ,p_validation_level    => FND_API.G_VALID_LEVEL_FULL
32342          ,p_calling_module      => 'AMG'
32343          ,p_debug_mode          => l_debug_mode
32344          ,p_max_msg_count       => null
32345          ,p_dlv_element_id      => l_deliverable_id
32346          ,p_dlv_version_id      => l_dlvr_version_id
32347          ,p_rec_ver_number      => null
32348          ,p_project_id          => l_project_id
32349          ,x_return_status       => x_return_status
32350          ,x_msg_count           => x_msg_count
32351          ,x_msg_data            => x_msg_data   );
32352 
32353      IF l_debug_mode = 'Y' THEN
32354         pa_debug.write(g_pkg_name,' after pa_deliverable_pvt.delete_deliverable ['||x_return_status||']',3) ;
32355      END IF;
32356 
32357      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32358         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32359      ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32360         RAISE FND_API.G_EXC_ERROR;
32361      END IF;
32362 
32363    END IF;
32364 
32365    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32366    IF (p_commit = FND_API.G_TRUE) THEN
32367        COMMIT;
32368    END IF;
32369 
32370    IF l_debug_mode = 'Y' THEN
32371        pa_debug.reset_curr_function;
32372        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32373    END IF;
32374 
32375 EXCEPTION
32376   WHEN FND_API.G_EXC_ERROR  THEN
32377       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32378       --IF (p_commit = FND_API.G_TRUE) THEN
32379       ROLLBACK TO DELETE_DELIVERABLE_PUB;
32380       --END IF;
32381 
32382       x_return_status := FND_API.G_RET_STS_ERROR;
32383       l_msg_count := FND_MSG_PUB.count_msg;
32384 
32385       IF l_msg_count = 1 AND x_msg_data IS NULL
32386       THEN
32387            PA_INTERFACE_UTILS_PUB.get_messages
32388                (p_encoded        => FND_API.G_FALSE,
32389                 p_msg_index      => 1,
32390                 p_msg_count      => x_msg_count,
32391                 p_msg_data       => l_msg_data,
32392                 p_data           => l_data,
32393                 p_msg_index_out  => l_msg_index_out);
32394 
32395        x_msg_data := l_data;
32396            x_msg_count := l_msg_count;
32397      ELSE
32398           x_msg_count := l_msg_count;
32399 
32400      END IF;
32401 
32402      IF  l_debug_mode = 'Y' THEN
32403           pa_debug.reset_curr_function;
32404           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32405      END IF;
32406 
32407   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
32408      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32409      --IF (p_commit = FND_API.G_TRUE) THEN
32410      ROLLBACK TO DELETE_DELIVERABLE_PUB;
32411      --END IF;
32412 
32413      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32414      l_msg_count := FND_MSG_PUB.count_msg;
32415 
32416      IF l_msg_count = 1 AND x_msg_data IS NULL
32417      THEN
32418            PA_INTERFACE_UTILS_PUB.get_messages
32419                (p_encoded        => FND_API.G_FALSE,
32420                 p_msg_index      => 1,
32421                 p_msg_count      => x_msg_count,
32422                 p_msg_data       => l_msg_data,
32423                 p_data           => l_data,
32424                 p_msg_index_out  => l_msg_index_out);
32425 
32426        x_msg_data := l_data;
32427            x_msg_count := l_msg_count;
32428      ELSE
32429           x_msg_count := l_msg_count;
32430      END IF;
32431 
32432      IF  l_debug_mode = 'Y' THEN
32433           pa_debug.reset_curr_function;
32434           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32435      END IF;
32436 
32437   WHEN OTHERS THEN
32438     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32439     --IF (p_commit = FND_API.G_TRUE) THEN
32440     ROLLBACK TO DELETE_DELIVERABLE_PUB;
32441     --END IF;
32442 
32443      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32444      x_msg_count := 1;
32445      x_msg_data := SQLERRM;
32446 
32447      IF l_debug_mode = 'Y' THEN
32448           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32449           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32450           pa_debug.reset_curr_function;
32451      END IF;
32452 
32453      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32454        FND_MSG_PUB.add_exc_msg
32455            ( p_pkg_name    => G_PKG_NAME
32456            , p_procedure_name  => l_api_name  );
32457     END IF;
32458 
32459 END Delete_Deliverables;
32460 
32461 -- SubProgram           : DELETE_DELIVERABLE_ACTIONS
32462 -- Type                 : PUBLIC FUNCTION
32463 -- Purpose              : This function will delete the action - Single record
32464 -- Assumptions          : None
32465 
32466 PROCEDURE delete_deliverable_actions
32467 (  p_api_version              IN  NUMBER   := 1.0 -- 3749480 earlier defaulted with G_PA_MISS_NUM ; Bug#3451073 Removed Quotes
32468   ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_FALSE
32469   ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
32470   ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32471   ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32472   ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32473   -- for bug# 3729250 , changed datatype from NUMBER TO VARCHAR2
32474   ,p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32475   ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32476   -- for bug# 3729250 , changed datatype from NUMBER TO VARCHAR2
32477   ,p_action_source_reference  IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32478   ,p_action_id                IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32479   ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32480   ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32481   ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32482 )
32483 
32484 IS
32485   l_api_name VARCHAR2(30) := 'Delete_Deliverable_Actions';
32486   l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
32487 
32488   l_project_id NUMBER ;
32489   l_action_id NUMBER;
32490   l_action_version_id NUMBER;
32491   l_deliverable_id NUMBER;
32492   l_dlvr_version_id NUMBER;
32493   l_function_code  Pa_Proj_Elements.function_code%TYPE;
32494 
32495   l_function_allowed      VARCHAR2(1);
32496   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32497 
32498   l_msg_index_out              NUMBER;
32499   l_msg_count                  NUMBER ;
32500   l_data                       VARCHAR2(2000);
32501   l_msg_data                   VARCHAR2(2000);
32502 
32503 BEGIN
32504  --  Initialize the message table if requested.
32505     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
32506        FND_MSG_PUB.initialize;
32507     END IF;
32508 
32509     -- 3735792, setting save point unconditionally
32510     --IF (p_commit = FND_API.G_TRUE) THEN
32511     savepoint DELETE_DELIVERABLE_ACTION_PUB;
32512     --END IF;
32513 
32514     IF l_debug_mode = 'Y' THEN
32515           PA_DEBUG.set_curr_function( p_function   => l_api_name,
32516                                       p_debug_mode => l_debug_mode );
32517           pa_debug.g_err_stage:= 'Inside '||l_api_name;
32518           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32519     END IF;
32520  --  Set API return status to success
32521     x_return_status     := FND_API.G_RET_STS_SUCCESS;
32522 
32523 -- Function Security Check
32524     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32525     (p_api_version_number => p_api_version,
32526      p_responsibility_id  => l_resp_id,
32527      p_function_name      => 'PA_DELIVERABLE_EDIT',
32528      p_msg_count          => x_msg_count,
32529      p_msg_data           => x_msg_data,
32530      p_return_status      => x_return_status,
32531      p_function_allowed   => l_function_allowed);
32532 
32533      IF l_debug_mode = 'Y' THEN
32534           pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
32535      END IF;
32536 
32537      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
32538          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32539      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
32540          RAISE FND_API.G_EXC_ERROR;
32541      END IF;
32542 
32543      IF l_function_allowed = 'N' THEN
32544         pa_interface_utils_pub.map_new_amg_msg
32545         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32546          ,p_msg_attribute    => 'CHANGE'
32547          ,p_resize_flag      => 'Y'
32548          ,p_msg_context      => 'GENERAL'
32549          ,p_attribute1       => ''
32550          ,p_attribute2       => ''
32551          ,p_attribute3       => ''
32552          ,p_attribute4       => ''
32553          ,p_attribute5       => '');
32554 
32555      x_return_status := FND_API.G_RET_STS_ERROR;
32556          RAISE FND_API.G_EXC_ERROR;
32557      END IF;
32558 
32559 -- validate the input parameters.
32560 -- Validate Project Reference / ID
32561     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
32562                     p_pm_project_reference =>   p_pm_project_reference
32563                  ,  p_pa_project_id     =>      p_project_id
32564                  ,  p_out_project_id    =>      l_project_id
32565                  ,  p_return_status     =>      x_return_status
32566         );
32567 
32568     IF l_debug_mode = 'Y' THEN
32569          pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
32570     END IF;
32571 
32572     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32573         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32574     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32575         RAISE  FND_API.G_EXC_ERROR;
32576     END IF;
32577 
32578 -- Validate Deliverable Reference / ID
32579     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32580       (   p_deliverable_reference => p_pm_deliverable_reference
32581         , p_deliverable_id        => p_deliverable_id
32582         , p_project_id            => l_project_id
32583         , p_out_deliverable_id    => l_deliverable_id
32584         , p_return_status         => x_return_status
32585       );
32586 
32587     IF l_debug_mode = 'Y' THEN
32588         pa_debug.write(g_pkg_name,'Dlvr Reference Valid Return Status ['||x_return_status||']Dlvr ID['||l_deliverable_id||']',3) ;
32589     END IF;
32590 
32591     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32592         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32593     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32594         RAISE FND_API.G_EXC_ERROR;
32595     END IF;
32596 
32597 -- Validate Action Reference / ID
32598     Pa_Deliverable_Utils.Convert_pm_actionref_to_id
32599     (
32600        p_action_reference   =>  p_action_source_reference
32601       ,p_action_id          =>  p_action_id
32602       ,p_deliverable_id     =>  l_deliverable_id -- 3749480 earlier p_deliverable_id was used
32603       ,p_project_id         =>  l_project_id
32604       ,p_out_action_id      =>  l_action_id
32605       ,p_return_status      =>  x_return_status
32606     );
32607 
32608     IF l_debug_mode = 'Y' THEN
32609         pa_debug.write(g_pkg_name,'Dlvr Action Reference Valid Return Status ['||x_return_status||']Action ID['||l_action_id||']',3) ;
32610     END IF;
32611 
32612    IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32613         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32614     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32615         RAISE FND_API.G_EXC_ERROR;
32616     END IF;
32617 
32618 -- Derive Deliverable_version_id
32619    l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32620 
32621     IF l_debug_mode = 'Y' THEN
32622         pa_debug.write(g_pkg_name,'Derived Dlvr Version ID ['||l_dlvr_version_id||'] for Dlvr ID['||l_deliverable_id||']',3) ;
32623     END IF;
32624 
32625 -- Derive Action_version_id and Function Code
32626    l_action_version_id := Pa_Deliverable_Utils.Get_Action_Version_Id (l_action_id, null, l_project_id) ;
32627    l_function_code     := Pa_Deliverable_Utils.GET_FUNCTION_CODE(l_action_id) ;
32628 
32629     IF l_debug_mode = 'Y' THEN
32630         pa_debug.write(g_pkg_name,'Derived Action version ID  ['||l_action_version_id||']and function code ['||l_function_code||']',3) ;
32631     END IF;
32632 
32633 -- Calling Actions API to delete actions.
32634 
32635    pa_actions_pvt.DELETE_DLV_ACTION
32636      (p_api_version           =>  p_api_version
32637      ,p_init_msg_list         =>  FND_API.G_FALSE
32638      ,p_commit                =>  FND_API.G_FALSE
32639      ,p_validate_only         =>  FND_API.G_FALSE
32640      ,p_validation_level      =>  FND_API.G_VALID_LEVEL_FULL
32641      ,p_calling_module        =>  'AMG'
32642      ,p_debug_mode            =>  l_debug_mode
32643      ,p_max_msg_count         =>  null
32644      ,p_action_id             =>  l_action_id
32645      ,p_action_ver_id         =>  l_action_version_id
32646      ,p_dlv_element_id        =>  l_deliverable_id
32647      ,p_dlv_version_id        =>  l_dlvr_version_id
32648      ,p_function_code         =>  l_function_code
32649      ,p_project_id            =>  l_project_id
32650      ,x_return_status         =>  x_return_status
32651      ,x_msg_count             =>  x_msg_count
32652      ,x_msg_data              =>  x_msg_data
32653      ) ;
32654 
32655      IF l_debug_mode = 'Y' THEN
32656         pa_debug.write(g_pkg_name,' after  pa_actions_pvt.DELETE_DLV_ACTION ['||x_return_status||']',3) ;
32657      END IF;
32658 
32659     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32660         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32661     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32662         RAISE FND_API.G_EXC_ERROR;
32663     END IF;
32664 
32665    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32666    IF (p_commit = FND_API.G_TRUE) THEN
32667        COMMIT;
32668    END IF;
32669 
32670    IF l_debug_mode = 'Y' THEN
32671        pa_debug.reset_curr_function;
32672        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32673    END IF;
32674 
32675 EXCEPTION
32676   WHEN FND_API.G_EXC_ERROR  THEN
32677       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32678       --IF (p_commit = FND_API.G_TRUE) THEN
32679       ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32680       --END IF;
32681 
32682       x_return_status := FND_API.G_RET_STS_ERROR;
32683       l_msg_count := FND_MSG_PUB.count_msg;
32684 
32685       IF l_msg_count = 1 AND x_msg_data IS NULL
32686       THEN
32687            PA_INTERFACE_UTILS_PUB.get_messages
32688                (p_encoded        => FND_API.G_FALSE,
32689                 p_msg_index      => 1,
32690                 p_msg_count      => x_msg_count,
32691                 p_msg_data       => l_msg_data,
32692                 p_data           => l_data,
32693                 p_msg_index_out  => l_msg_index_out);
32694 
32695        x_msg_data := l_data;
32696            x_msg_count := l_msg_count;
32697      ELSE
32698           x_msg_count := l_msg_count;
32699 
32700      END IF;
32701 
32702      IF  l_debug_mode = 'Y' THEN
32703           pa_debug.reset_curr_function;
32704           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32705      END IF;
32706 
32707   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
32708      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32709      --IF (p_commit = FND_API.G_TRUE) THEN
32710      ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32711      --END IF;
32712 
32713      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32714      l_msg_count := FND_MSG_PUB.count_msg;
32715 
32716      IF l_msg_count = 1 AND x_msg_data IS NULL
32717      THEN
32718            PA_INTERFACE_UTILS_PUB.get_messages
32719                (p_encoded        => FND_API.G_FALSE,
32720                 p_msg_index      => 1,
32721                 p_msg_count      => x_msg_count,
32722                 p_msg_data       => l_msg_data,
32723                 p_data           => l_data,
32724                 p_msg_index_out  => l_msg_index_out);
32725 
32726        x_msg_data := l_data;
32727            x_msg_count := l_msg_count;
32728      ELSE
32729           x_msg_count := l_msg_count;
32730 
32731      END IF;
32732 
32733      IF  l_debug_mode = 'Y' THEN
32734           pa_debug.reset_curr_function;
32735           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32736      END IF;
32737 
32738   WHEN OTHERS THEN
32739     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32740     --IF (p_commit = FND_API.G_TRUE) THEN
32741     ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32742     --END IF;
32743 
32744      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32745      x_msg_count := 1;
32746      x_msg_data := SQLERRM;
32747 
32748      IF l_debug_mode = 'Y' THEN
32749           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32750           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32751           pa_debug.reset_curr_function;
32752      END IF;
32753 
32754      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32755        FND_MSG_PUB.add_exc_msg
32756            ( p_pkg_name    => G_PKG_NAME
32757            , p_procedure_name  => l_api_name  );
32758     END IF;
32759 
32760 END Delete_Deliverable_Actions;
32761 
32762 -- SubProgram           : DELETE_DLV_TO_TASK_ASSCN
32763 -- Type                 : PUBLIC FUNCTION
32764 -- Purpose              : This function will delete the association of Deliverable with Task - Single record
32765 -- Assumptions          : None
32766 
32767 Procedure DELETE_DLV_TO_TASK_ASSCN (
32768       p_api_version              IN  NUMBER   := 1.0
32769      ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_TRUE
32770      ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
32771      ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32772      ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32773      ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32774      ,p_task_reference           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32775      ,p_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32776      ,p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32777      ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32778      ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32779      ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32780      ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32781      )IS
32782 
32783 
32784   l_api_name VARCHAR2(30) := 'DELETE_DLV_TO_TASK_ASSCN';
32785   l_project_id NUMBER ;
32786   l_task_id NUMBER;
32787   l_task_reference VARCHAR2(240);
32788   l_deliverable_id NUMBER;
32789   l_dlvr_version_id NUMBER;
32790   l_function_code  Pa_Proj_Elements.function_code%TYPE;
32791   l_object_relationship_Id     pa_object_relationships.object_relationship_Id%TYPE;
32792   l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
32793 
32794   l_function_allowed      VARCHAR2(1);
32795   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32796 
32797   l_msg_index_out              NUMBER;
32798   l_msg_count                  NUMBER ;
32799   l_data                       VARCHAR2(2000);
32800   l_msg_data                   VARCHAR2(2000);
32801 
32802 BEGIN
32803 
32804  --  Initialize the message table if requested.
32805     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
32806        FND_MSG_PUB.initialize;
32807     END IF;
32808 
32809     -- 3735792, setting save point unconditionally
32810     --IF (p_commit = FND_API.G_TRUE) THEN
32811     savepoint DELETE_DLV_TO_TASK_ASSCN_PUB;
32812     --END IF;
32813 
32814     IF l_debug_mode = 'Y' THEN
32815           PA_DEBUG.set_curr_function( p_function   => l_api_name,
32816                                       p_debug_mode => l_debug_mode );
32817           pa_debug.g_err_stage:= 'Inside '||l_api_name;
32818           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32819     END IF;
32820 
32821  --  Set API return status to success
32822     x_return_status     := FND_API.G_RET_STS_SUCCESS;
32823 
32824 -- Function Security Check
32825     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32826     (p_api_version_number => p_api_version,
32827      p_responsibility_id  => l_resp_id,
32828      p_function_name      => 'PA_DELIVERABLE_EDIT',
32829      p_msg_count          => x_msg_count,
32830      p_msg_data           => x_msg_data,
32831      p_return_status      => x_return_status,
32832      p_function_allowed   => l_function_allowed);
32833 
32834 
32835      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
32836          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32837      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
32838          RAISE FND_API.G_EXC_ERROR;
32839      END IF;
32840 
32841      IF l_function_allowed = 'N' THEN
32842         pa_interface_utils_pub.map_new_amg_msg
32843         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32844          ,p_msg_attribute    => 'CHANGE'
32845          ,p_resize_flag      => 'Y'
32846          ,p_msg_context      => 'GENERAL'
32847          ,p_attribute1       => ''
32848          ,p_attribute2       => ''
32849          ,p_attribute3       => ''
32850          ,p_attribute4       => ''
32851          ,p_attribute5       => '');
32852 
32853      x_return_status := FND_API.G_RET_STS_ERROR;
32854          RAISE FND_API.G_EXC_ERROR;
32855      END IF;
32856 
32857 -- validate the input parameters.
32858 -- Validate Project Reference / ID
32859     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
32860                     p_pm_project_reference =>   p_pm_project_reference
32861                  ,  p_pa_project_id     =>      p_project_id
32862                  ,  p_out_project_id    =>      l_project_id
32863                  ,  p_return_status     =>      x_return_status
32864         );
32865 
32866     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32867         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32868     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32869         RAISE  FND_API.G_EXC_ERROR;
32870     END IF;
32871 
32872 -- Validate Deliverable Reference / ID
32873     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32874       (   p_deliverable_reference => p_pm_deliverable_reference
32875         , p_deliverable_id        => p_deliverable_id
32876         , p_project_id            => l_project_id
32877         , p_out_deliverable_id    => l_deliverable_id
32878         , p_return_status         => x_return_status
32879       );
32880 
32881     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32882         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32883     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32884         RAISE FND_API.G_EXC_ERROR;
32885     END IF;
32886 
32887 -- Validate Task Reference / ID
32888     IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
32889        l_task_id := NULL;
32890     ELSE
32891        l_task_id := p_task_id;
32892     END IF;
32893 
32894     IF p_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
32895        l_task_reference := NULL;
32896     ELSE
32897        l_task_reference := p_task_reference;
32898     END IF;
32899 
32900     IF ( p_task_id IS NOT NULL OR l_task_reference IS NOT NULL ) THEN
32901        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
32902                    p_pa_project_id      => l_project_id
32903                  , p_structure_type     => 'WORKPLAN'
32904                  , p_pa_task_id         => p_task_id
32905                  , p_pm_task_reference  => p_task_reference
32906                  , p_out_task_id        => l_task_id
32907                  , p_return_status      => x_return_status );
32908 
32909        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32910              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32911        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32912              RAISE FND_API.G_EXC_ERROR;
32913        END IF;
32914     END IF;
32915 
32916 
32917 -- Derive Deliverable_version_id
32918    l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32919 
32920 -- Derive Object Relationship ID
32921    l_object_relationship_id := Pa_Deliverable_Utils.Get_Dlvr_Task_Asscn_ID(l_deliverable_id, l_task_id);
32922 
32923 -- Calling deliverable api to Delete Association
32924    pa_deliverable_pub.DELETE_DLV_TASK_ASSOCIATION
32925      (p_api_version              =>   p_api_version
32926      ,p_init_msg_list            =>   FND_API.G_FALSE
32927      ,p_commit                   =>   FND_API.G_FALSE
32928      ,p_validate_only            =>   FND_API.G_FALSE
32929      ,p_validation_level         =>   FND_API.G_VALID_LEVEL_FULL
32930      ,p_calling_module           =>   'AMG'
32931      ,p_debug_mode               =>   l_debug_mode
32932      ,p_max_msg_count            =>   null
32933      ,p_task_element_id          =>   l_task_id
32934      ,p_task_version_id          =>   -99       -- 3749498 passing -99 instead of null
32935      ,p_dlv_element_id           =>   l_deliverable_Id
32936      ,p_dlv_version_id           =>   l_dlvr_version_id
32937      ,p_object_relationship_id   =>   l_object_relationship_id
32938      ,p_obj_rec_ver_number       =>   null
32939      ,p_project_id               =>   l_project_id
32940      ,p_calling_context        =>   'TASKS'
32941      ,x_return_status            =>   x_return_status
32942      ,x_msg_count                =>   x_msg_count
32943      ,x_msg_data                 =>   x_msg_data
32944      );
32945 
32946     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
32947         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
32948     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
32949         RAISE FND_API.G_EXC_ERROR;
32950     END IF;
32951 
32952    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32953    IF (p_commit = FND_API.G_TRUE) THEN
32954        COMMIT;
32955    END IF;
32956 
32957    IF l_debug_mode = 'Y' THEN
32958        pa_debug.reset_curr_function;
32959        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32960    END IF;
32961 
32962 EXCEPTION
32963   WHEN FND_API.G_EXC_ERROR  THEN
32964       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32965       --IF (p_commit = FND_API.G_TRUE) THEN
32966       ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32967       --END IF;
32968 
32969       x_return_status := FND_API.G_RET_STS_ERROR;
32970       l_msg_count := FND_MSG_PUB.count_msg;
32971 
32972       IF l_msg_count = 1 AND x_msg_data IS NULL
32973       THEN
32974            PA_INTERFACE_UTILS_PUB.get_messages
32975                (p_encoded        => FND_API.G_FALSE,
32976                 p_msg_index      => 1,
32977                 p_msg_count      => x_msg_count,
32978                 p_msg_data       => l_msg_data,
32979                 p_data           => l_data,
32980                 p_msg_index_out  => l_msg_index_out);
32981 
32982        x_msg_data := l_data;
32983            x_msg_count := l_msg_count;
32984      ELSE
32985           x_msg_count := l_msg_count;
32986      END IF;
32987 
32988      IF  l_debug_mode = 'Y' THEN
32989           pa_debug.reset_curr_function;
32990           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32991      END IF;
32992 
32993   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
32994      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
32995      -- IF (p_commit = FND_API.G_TRUE) THEN
32996      ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32997      --END IF;
32998 
32999      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33000      l_msg_count := FND_MSG_PUB.count_msg;
33001 
33002      IF l_msg_count = 1 AND x_msg_data IS NULL
33003      THEN
33004            PA_INTERFACE_UTILS_PUB.get_messages
33005                (p_encoded        => FND_API.G_FALSE,
33006                 p_msg_index      => 1,
33007                 p_msg_count      => x_msg_count,
33008                 p_msg_data       => l_msg_data,
33009                 p_data           => l_data,
33010                 p_msg_index_out  => l_msg_index_out);
33011 
33012        x_msg_data := l_data;
33013            x_msg_count := l_msg_count;
33014      ELSE
33015           x_msg_count := l_msg_count;
33016      END IF;
33017 
33018      IF  l_debug_mode = 'Y' THEN
33019           pa_debug.reset_curr_function;
33020           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33021      END IF;
33022 
33023   WHEN OTHERS THEN
33024     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33025     --IF (p_commit = FND_API.G_TRUE) THEN
33026     ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
33027     --END IF;
33028 
33029      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33030      x_msg_count := 1;
33031      x_msg_data := SQLERRM;
33032 
33033      IF l_debug_mode = 'Y' THEN
33034           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33035           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33036           pa_debug.reset_curr_function;
33037      END IF;
33038 
33039      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33040        FND_MSG_PUB.add_exc_msg
33041            ( p_pkg_name    => G_PKG_NAME
33042            , p_procedure_name  => l_api_name  );
33043     END IF;
33044 
33045 END DELETE_DLV_TO_TASK_ASSCN;
33046 
33047 -- SubProgram           : ASSOCIATE_DLV_TO_TASK
33048 -- Type                 : PUBLIC FUNCTION
33049 -- Purpose              : This function will create the association of Deliverable with Task - Single record
33050 -- Assumptions          : None
33051 
33052 Procedure ASSOCIATE_DLV_TO_TASK (
33053       p_api_version              IN  NUMBER   := 1.0
33054      ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_TRUE
33055      ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
33056      ,p_debug_mode               IN  VARCHAR2 := FND_API.G_FALSE
33057      ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33058      -- added for bug# 3729250
33059      ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33060      ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33061      -- added for bug# 3729250
33062      ,p_pm_task_reference        IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33063      ,p_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33064      -- added for bug# 3729250
33065      ,p_deliverable_reference    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33066      ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33067      ,x_return_status            OUT NOCOPY VARCHAR2/*Added the nocopy check for 4537865 */
33068      ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33069      ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33070      )IS
33071 
33072   l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK';
33073   l_project_id NUMBER ;
33074   l_task_id NUMBER;
33075   l_task_reference VARCHAR2(240);
33076   l_deliverable_id NUMBER;
33077   l_dlvr_version_id NUMBER;
33078   l_function_code  Pa_Proj_Elements.function_code%TYPE;
33079   l_object_relationship_Id     pa_object_relationships.object_relationship_Id%TYPE;
33080 
33081   l_function_allowed      VARCHAR2(1);
33082   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
33083 
33084   l_msg_index_out              NUMBER;
33085   l_msg_count                  NUMBER ;
33086   l_data                       VARCHAR2(2000);
33087   l_msg_data                   VARCHAR2(2000);
33088 
33089   l_wp_task_flag varchar2(1); -- Added for bug5462298
33090 
33091 BEGIN
33092 
33093  --  Initialize the message table if requested.
33094     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
33095        FND_MSG_PUB.initialize;
33096     END IF;
33097 
33098     -- 3735792, setting save point unconditionally
33099     --IF (p_commit = FND_API.G_TRUE) THEN
33100     savepoint ASSOCIATE_DLV_TO_TASK_PUB;
33101     --END IF;
33102 
33103     IF p_debug_mode = 'Y' THEN
33104           PA_DEBUG.set_curr_function( p_function   => l_api_name,
33105                                       p_debug_mode => p_debug_mode );
33106           pa_debug.g_err_stage:= 'Inside '||l_api_name;
33107           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33108     END IF;
33109 
33110  --  Set API return status to success
33111     x_return_status     := FND_API.G_RET_STS_SUCCESS;
33112 
33113 -- Function Security Check
33114     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
33115     (p_api_version_number => p_api_version,
33116      p_responsibility_id  => l_resp_id,
33117      p_function_name      => 'PA_DELIVERABLE_EDIT',
33118      p_msg_count          => x_msg_count,
33119      p_msg_data           => x_msg_data,
33120      p_return_status      => x_return_status,
33121      p_function_allowed   => l_function_allowed);
33122 
33123 
33124      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
33125          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33126      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
33127          RAISE FND_API.G_EXC_ERROR;
33128      END IF;
33129 
33130      IF l_function_allowed = 'N' THEN
33131         pa_interface_utils_pub.map_new_amg_msg
33132         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
33133          ,p_msg_attribute    => 'CHANGE'
33134          ,p_resize_flag      => 'Y'
33135          ,p_msg_context      => 'GENERAL'
33136          ,p_attribute1       => ''
33137          ,p_attribute2       => ''
33138          ,p_attribute3       => ''
33139          ,p_attribute4       => ''
33140          ,p_attribute5       => '');
33141 
33142      x_return_status := FND_API.G_RET_STS_ERROR;
33143          RAISE FND_API.G_EXC_ERROR;
33144      END IF;
33145 
33146 -- validate the input parameters.
33147 -- Validate Project Reference / ID
33148     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
33149                     p_pm_project_reference =>   p_pm_project_reference -- 3729250, earlier null was passed
33150                  ,  p_pa_project_id     =>      p_project_id
33151                  ,  p_out_project_id    =>      l_project_id
33152                  ,  p_return_status     =>      x_return_status
33153         );
33154 
33155     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33156         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33157     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33158         RAISE  FND_API.G_EXC_ERROR;
33159     END IF;
33160 
33161 -- Validate Deliverable Reference / ID
33162     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
33163       (   p_deliverable_reference => p_deliverable_reference -- 3729250, earlier null was passed
33164         , p_deliverable_id        => p_deliverable_id
33165         , p_project_id            => l_project_id
33166         , p_out_deliverable_id    => l_deliverable_id
33167         , p_return_status         => x_return_status
33168       );
33169 
33170     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33171         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33172     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33173         RAISE FND_API.G_EXC_ERROR;
33174     END IF;
33175 
33176 -- Validate Task Reference / ID
33177        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
33178                    p_pa_project_id      => l_project_id
33179                  , p_structure_type     => 'WORKPLAN'
33180                  , p_pa_task_id         => p_task_id
33181                  , p_pm_task_reference  => p_pm_task_reference -- 3729250, earlier null was passed
33182                  , p_out_task_id        => l_task_id
33183                  , p_return_status      => x_return_status );
33184 
33185     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33186           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33187     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33188           RAISE FND_API.G_EXC_ERROR;
33189     END IF;
33190 
33191 
33192     -- 5462298 Added below code to validate passed task id
33193     -- if it is not workplan task , throw error message
33194 
33195     l_wp_task_flag := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_WORKPLAN_TASK (
33196                                         p_project_id         => l_project_id
33197                                       , p_proj_element_id    => l_task_id );
33198 
33199     IF l_wp_task_flag <> 'Y' THEN
33200 
33201      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
33202      THEN
33203 
33204         PA_UTILS.ADD_MESSAGE(p_app_short_name  => 'PA'
33205                             ,p_msg_name         => 'PA_TASK_ID_INVALID');
33206 
33207         x_return_status := FND_API.G_RET_STS_ERROR;
33208         RAISE FND_API.G_EXC_ERROR;
33209 
33210      END IF;
33211 
33212     END IF;
33213 
33214     -- 5462298 end
33215 
33216 -- Derive Deliverable_version_id
33217    l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
33218 
33219 -- Calling deliverable api to Create Association
33220      pa_deliverable_pvt.CREATE_DLV_TASK_ASSOCIATION
33221      (p_api_version              =>   p_api_version
33222      ,p_init_msg_list            =>   FND_API.G_FALSE
33223      ,p_commit                   =>   FND_API.G_FALSE
33224      ,p_validate_only            =>   FND_API.G_FALSE
33225      ,p_validation_level         =>   FND_API.G_VALID_LEVEL_FULL
33226      ,p_calling_module           =>   'AMG'
33227      ,p_debug_mode               =>   p_debug_mode
33228      ,p_max_msg_count            =>   null
33229      ,p_task_element_id          =>   l_task_id
33230      ,p_task_version_id          =>   null
33231      ,p_dlv_element_id           =>   l_deliverable_id
33232      ,p_dlv_version_id           =>   l_dlvr_version_id
33233      ,p_project_id               =>   l_project_id
33234      ,x_return_status            =>   x_return_status
33235      ,x_msg_count                =>   x_msg_count
33236      ,x_msg_data                 =>   x_msg_data
33237      );
33238 
33239     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33240         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33241     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33242         RAISE FND_API.G_EXC_ERROR;
33243     END IF;
33244 
33245    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
33246    IF (p_commit = FND_API.G_TRUE) THEN
33247        COMMIT;
33248    END IF;
33249 
33250    IF p_debug_mode = 'Y' THEN
33251        pa_debug.reset_curr_function;
33252        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
33253    END IF;
33254 
33255 EXCEPTION
33256   WHEN FND_API.G_EXC_ERROR  THEN
33257 
33258       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33259       --IF (p_commit = FND_API.G_TRUE) THEN
33260       ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
33261       --END IF;
33262 
33263       x_return_status := FND_API.G_RET_STS_ERROR;
33264       l_msg_count := FND_MSG_PUB.count_msg;
33265 
33266       IF l_msg_count = 1 AND x_msg_data IS NULL
33267       THEN
33268            PA_INTERFACE_UTILS_PUB.get_messages
33269                (p_encoded        => FND_API.G_FALSE,
33270                 p_msg_index      => 1,
33271                 p_msg_count      => x_msg_count,
33272                 p_msg_data       => l_msg_data,
33273                 p_data           => l_data,
33274                 p_msg_index_out  => l_msg_index_out);
33275 
33276        x_msg_data := l_data;
33277            x_msg_count := l_msg_count;
33278      ELSE
33279           x_msg_count := l_msg_count;
33280      END IF;
33281 
33282      IF  p_debug_mode = 'Y' THEN
33283           pa_debug.reset_curr_function;
33284           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
33285      END IF;
33286 
33287   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
33288      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33289      --IF (p_commit = FND_API.G_TRUE) THEN
33290      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
33291      --END IF;
33292 
33293      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33294      l_msg_count := FND_MSG_PUB.count_msg;
33295 
33296      IF l_msg_count = 1 AND x_msg_data IS NULL
33297      THEN
33298            PA_INTERFACE_UTILS_PUB.get_messages
33299                (p_encoded        => FND_API.G_FALSE,
33300                 p_msg_index      => 1,
33301                 p_msg_count      => x_msg_count,
33302                 p_msg_data       => l_msg_data,
33303                 p_data           => l_data,
33304                 p_msg_index_out  => l_msg_index_out);
33305 
33306        x_msg_data := l_data;
33307            x_msg_count := l_msg_count;
33308      ELSE
33309           x_msg_count := l_msg_count;
33310      END IF;
33311 
33312      IF  p_debug_mode = 'Y' THEN
33313           pa_debug.reset_curr_function;
33314           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33315      END IF;
33316 
33317   WHEN OTHERS THEN
33318     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33319     -- IF (p_commit = FND_API.G_TRUE) THEN
33320     ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
33321     -- END IF;
33322 
33323      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33324      x_msg_count := 1;
33325      x_msg_data := SQLERRM;
33326 
33327      IF p_debug_mode = 'Y' THEN
33328           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33329           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33330           pa_debug.reset_curr_function;
33331      END IF;
33332 
33333      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33334        FND_MSG_PUB.add_exc_msg
33335            ( p_pkg_name    => G_PKG_NAME
33336            , p_procedure_name  => l_api_name  );
33337     END IF;
33338 
33339 END ASSOCIATE_DLV_TO_TASK;
33340 
33341 Procedure ASSOCIATE_DLV_TO_TASK_ASSIGN (
33342       p_api_version              IN  NUMBER   := 1.0
33343      ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_TRUE
33344      ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
33345      ,p_debug_mode               IN  VARCHAR2 := FND_API.G_FALSE
33346      ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33347      -- added for bug# 3729250
33348      ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33349      ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33350      ,p_pm_task_asgmt_reference  IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33351      ,p_task_assign_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33352      -- added for bug# 3729250
33353      ,p_deliverable_reference    IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33354      ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33355      ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33356      ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33357      ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33358      )IS
33359 
33360   l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK_ASSIGN';
33361   l_project_id NUMBER ;
33362   l_task_assign_id NUMBER;
33363   l_task_assign_reference VARCHAR2(240);
33364   l_deliverable_id NUMBER;
33365   l_dlvr_version_id NUMBER;
33366   l_function_code  Pa_Proj_Elements.function_code%TYPE;
33367   l_object_relationship_Id     pa_object_relationships.object_relationship_Id%TYPE;
33368   l_task_assignment_id  NUMBER ;
33369 
33370   l_function_allowed      VARCHAR2(1);
33371   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
33372 
33373   l_msg_index_out              NUMBER;
33374   l_msg_count                  NUMBER ;
33375   l_data                       VARCHAR2(2000);
33376   l_msg_data                   VARCHAR2(2000);
33377 
33378 BEGIN
33379 
33380  --  Initialize the message table if requested.
33381     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
33382        FND_MSG_PUB.initialize;
33383     END IF;
33384 
33385     -- 3735792, setting save point unconditionally
33386     -- IF (p_commit = FND_API.G_TRUE) THEN
33387     savepoint ASSOCIATE_DLV_TO_TASK_ASSIGN;
33388     --END IF;
33389 
33390     IF p_debug_mode = 'Y' THEN
33391           PA_DEBUG.set_curr_function( p_function   => l_api_name,
33392                                       p_debug_mode => p_debug_mode );
33393           pa_debug.g_err_stage:= 'Inside '||l_api_name;
33394           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33395     END IF;
33396 
33397  --  Set API return status to success
33398     x_return_status     := FND_API.G_RET_STS_SUCCESS;
33399 
33400 -- Function Security Check
33401     PA_PM_FUNCTION_SECURITY_PUB.check_function_security
33402     (p_api_version_number => p_api_version,
33403      p_responsibility_id  => l_resp_id,
33404      p_function_name      => 'PA_DELIVERABLE_EDIT',
33405      p_msg_count          => x_msg_count,
33406      p_msg_data           => x_msg_data,
33407      p_return_status      => x_return_status,
33408      p_function_allowed   => l_function_allowed);
33409 
33410 
33411      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
33412          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33413      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
33414          RAISE FND_API.G_EXC_ERROR;
33415      END IF;
33416 
33417      IF l_function_allowed = 'N' THEN
33418         pa_interface_utils_pub.map_new_amg_msg
33419         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
33420          ,p_msg_attribute    => 'CHANGE'
33421          ,p_resize_flag      => 'Y'
33422          ,p_msg_context      => 'GENERAL'
33423          ,p_attribute1       => ''
33424          ,p_attribute2       => ''
33425          ,p_attribute3       => ''
33426          ,p_attribute4       => ''
33427          ,p_attribute5       => '');
33428 
33429      x_return_status := FND_API.G_RET_STS_ERROR;
33430          RAISE FND_API.G_EXC_ERROR;
33431      END IF;
33432 
33433 -- validate the input parameters.
33434 -- Validate Project Reference / ID
33435     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
33436                     p_pm_project_reference =>   p_pm_project_reference -- 3729250, earlier was passed as null
33437                  ,  p_pa_project_id     =>      p_project_id
33438                  ,  p_out_project_id    =>      l_project_id
33439                  ,  p_return_status     =>      x_return_status
33440         );
33441 
33442     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33443         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33444     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33445         RAISE  FND_API.G_EXC_ERROR;
33446     END IF;
33447 
33448 -- Validate Deliverable Reference / ID
33449     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
33450       (   p_deliverable_reference => p_deliverable_reference -- 3729250 , earlier passed was null
33451         , p_deliverable_id        => p_deliverable_id
33452         , p_project_id            => l_project_id
33453         , p_out_deliverable_id    => l_deliverable_id
33454         , p_return_status         => x_return_status
33455       );
33456 
33457     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33458         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33459     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33460         RAISE FND_API.G_EXC_ERROR;
33461     END IF;
33462 
33463 -- Validate Task Assignment Reference / ID
33464     IF p_task_assign_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33465        l_task_assign_id := NULL;
33466     ELSE
33467        l_task_assign_id := p_task_assign_id;
33468     END IF;
33469 
33470 
33471  PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID
33472      ( p_pm_product_code           => p_pm_source_code
33473       ,p_pa_project_id             => l_project_id
33474       ,p_pa_structure_version_id   => null
33475       ,p_pa_task_id                => null
33476       ,p_pa_task_elem_ver_id       => null
33477       ,p_pm_task_asgmt_reference   => p_pm_task_asgmt_reference
33478       ,p_pa_task_assignment_id     => p_task_assign_id
33479       ,p_resource_alias            => null
33480       ,p_resource_list_member_id   => null
33481       ,x_pa_task_assignment_id     => l_task_assignment_id
33482       ,x_return_status             => x_return_status
33483        ) ;
33484 
33485        IF p_debug_mode = 'Y' THEN
33486            pa_debug.write(g_pkg_name,'PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID ret status'||x_return_status||
33487                           ']task assign ref['||l_task_assign_reference||']task assign id['||l_task_assign_id||']',3) ;
33488        END IF;
33489 
33490        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33491              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33492        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33493              RAISE FND_API.G_EXC_ERROR;
33494        END IF;
33495 
33496 -- Derive Deliverable_version_id
33497    l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
33498 
33499 -- Calling deliverable api to Create Association
33500      pa_deliverable_pvt.CREATE_DLV_TASK_ASSOCIATION
33501      (p_api_version              => p_api_version
33502      ,p_init_msg_list            => FND_API.G_FALSE
33503      ,p_commit                   => FND_API.G_FALSE
33504      ,p_validate_only            => FND_API.G_FALSE
33505      ,p_validation_level         => FND_API.G_VALID_LEVEL_FULL
33506      ,p_calling_module           => 'AMG'
33507      ,p_calling_context        => 'PA_ASSIGNMENTS'
33508      ,p_debug_mode               => p_debug_mode
33509      ,p_max_msg_count            => null
33510      ,p_task_element_id        => l_task_assignment_id
33511      ,p_task_version_id        => null
33512      ,p_dlv_element_id         => l_deliverable_id
33513      ,p_dlv_version_id         => l_dlvr_version_id
33514      ,p_project_id             => l_project_id
33515      ,x_return_status            => x_return_status
33516      ,x_msg_count                => x_msg_count
33517      ,x_msg_data                 => x_msg_data
33518      );
33519 
33520     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33521         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33522     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33523         RAISE FND_API.G_EXC_ERROR;
33524     END IF;
33525 
33526    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
33527    IF (p_commit = FND_API.G_TRUE) THEN
33528        COMMIT;
33529    END IF;
33530 
33531    IF p_debug_mode = 'Y' THEN
33532        pa_debug.reset_curr_function;
33533        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
33534    END IF;
33535 
33536 EXCEPTION
33537   WHEN FND_API.G_EXC_ERROR  THEN
33538       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33539       -- IF (p_commit = FND_API.G_TRUE) THEN
33540       ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33541       -- END IF;
33542 
33543       x_return_status := FND_API.G_RET_STS_ERROR;
33544       l_msg_count := FND_MSG_PUB.count_msg;
33545 
33546       IF l_msg_count = 1 AND x_msg_data IS NULL
33547       THEN
33548            PA_INTERFACE_UTILS_PUB.get_messages
33549                (p_encoded        => FND_API.G_FALSE,
33550                 p_msg_index      => 1,
33551                 p_msg_count      => x_msg_count,
33552                 p_msg_data       => l_msg_data,
33553                 p_data           => l_data,
33554                 p_msg_index_out  => l_msg_index_out);
33555 
33556        x_msg_data := l_data;
33557            x_msg_count := l_msg_count;
33558      ELSE
33559           x_msg_count := l_msg_count;
33560      END IF;
33561 
33562      IF  p_debug_mode = 'Y' THEN
33563           pa_debug.reset_curr_function;
33564           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
33565      END IF;
33566 
33567   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
33568      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33569      --IF (p_commit = FND_API.G_TRUE) THEN
33570      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33571      --END IF;
33572      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33573      l_msg_count := FND_MSG_PUB.count_msg;
33574 
33575      IF l_msg_count = 1 AND x_msg_data IS NULL
33576      THEN
33577            PA_INTERFACE_UTILS_PUB.get_messages
33578                (p_encoded        => FND_API.G_FALSE,
33579                 p_msg_index      => 1,
33580                 p_msg_count      => x_msg_count,
33581                 p_msg_data       => l_msg_data,
33582                 p_data           => l_data,
33583                 p_msg_index_out  => l_msg_index_out);
33584 
33585        x_msg_data := l_data;
33586            x_msg_count := l_msg_count;
33587      ELSE
33588           x_msg_count := l_msg_count;
33589      END IF;
33590 
33591      IF  p_debug_mode = 'Y' THEN
33592           pa_debug.reset_curr_function;
33593           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33594      END IF;
33595 
33596   WHEN OTHERS THEN
33597     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33598     --IF (p_commit = FND_API.G_TRUE) THEN
33599      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33600     --END IF;
33601 
33602      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33603      x_msg_count := 1;
33604      x_msg_data := SQLERRM;
33605 
33606      IF p_debug_mode = 'Y' THEN
33607           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33608           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33609           pa_debug.reset_curr_function;
33610      END IF;
33611 
33612      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33613        FND_MSG_PUB.add_exc_msg
33614            ( p_pkg_name    => G_PKG_NAME
33615            , p_procedure_name  => l_api_name  );
33616     END IF;
33617 
33618 END ASSOCIATE_DLV_TO_TASK_ASSIGN;
33619 
33620 
33621 Procedure DELETE_DLV_TO_TASK_ASSIGN (
33622       p_api_version              IN  NUMBER   := 1.0
33623      ,p_init_msg_list            IN  VARCHAR2 := FND_API.G_TRUE
33624      ,p_commit                   IN  VARCHAR2 := FND_API.G_FALSE
33625      ,p_debug_mode               IN  VARCHAR2 := FND_API.G_FALSE
33626      ,p_pm_source_code           IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33627      ,p_project_id               IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33628      -- added for bug# 3729250
33629      ,p_pm_project_reference     IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33630      ,p_task_assign_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33631      ,p_pm_task_asgmt_reference  IN VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33632      ,p_deliverable_id           IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM  --added for bug 3888280
33633      ,p_pm_deliverable_reference IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR --added for bug 3888280
33634      ,x_return_status            OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33635      ,x_msg_count                OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33636      ,x_msg_data                 OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33637      )IS
33638 
33639   l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK_ASSIGN';
33640   l_project_id         NUMBER ;
33641   l_task_assign_id     NUMBER;
33642   l_task_assign_reference VARCHAR2(240);
33643   l_deliverable_id     NUMBER;
33644   l_dlvr_version_id    NUMBER;
33645   l_function_code      Pa_Proj_Elements.function_code%TYPE;
33646   l_object_relationship_Id     pa_object_relationships.object_relationship_Id%TYPE;
33647   l_task_assignment_id NUMBER ;
33648 
33649   l_function_allowed      VARCHAR2(1);
33650   l_resp_id NUMBER := FND_GLOBAL.Resp_id;
33651 
33652   l_msg_index_out              NUMBER;
33653   l_msg_count                  NUMBER ;
33654   l_data                       VARCHAR2(2000);
33655   l_msg_data                   VARCHAR2(2000);
33656 
33657    -- 3888280 Added cursor to retrieve object_relationship_id for a TA to a DLVR
33658    -- Association
33659 
33660   CURSOR c_obj_rel_id(l_task_assng_id NUMBER, l_dlvr_id NUMBER) IS
33661   SELECT
33662         OBJ.OBJECT_RELATIONSHIP_ID
33663   FROM  PA_OBJECT_RELATIONSHIPS OBJ
33664   WHERE
33665         OBJ.OBJECT_ID_FROM2         =   l_task_assng_id
33666     AND OBJ.OBJECT_ID_TO2           =   l_dlvr_id
33667     AND OBJ.OBJECT_TYPE_FROM        =   'PA_ASSIGNMENTS'
33668     AND OBJ.OBJECT_TYPE_TO          =   'PA_DELIVERABLES'
33669     AND OBJ.RELATIONSHIP_TYPE       =   'A'
33670     AND OBJ.RELATIONSHIP_SUBTYPE    =   'ASSIGNMENT_TO_DELIVERABLE';
33671 
33672 BEGIN
33673 
33674  --  Initialize the message table if requested.
33675     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
33676        FND_MSG_PUB.initialize;
33677     END IF;
33678 
33679     -- 3735792, setting save point unconditionally
33680     --IF (p_commit = FND_API.G_TRUE) THEN
33681     savepoint ASSOCIATE_DLV_TO_TASK_ASSIGN;
33682     --END IF;
33683 
33684     IF p_debug_mode = 'Y' THEN
33685           PA_DEBUG.set_curr_function( p_function   => l_api_name,
33686                                       p_debug_mode => p_debug_mode );
33687           pa_debug.g_err_stage:= 'Inside '||l_api_name;
33688           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33689     END IF;
33690 
33691  --  Set API return status to success
33692     x_return_status     := FND_API.G_RET_STS_SUCCESS;
33693 
33694      IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR     THEN
33695          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33696      ELSIF x_return_status = FND_API.G_RET_STS_ERROR     THEN
33697          RAISE FND_API.G_EXC_ERROR;
33698      END IF;
33699 
33700      IF l_function_allowed = 'N' THEN
33701         pa_interface_utils_pub.map_new_amg_msg
33702         ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
33703          ,p_msg_attribute    => 'CHANGE'
33704          ,p_resize_flag      => 'Y'
33705          ,p_msg_context      => 'GENERAL'
33706          ,p_attribute1       => ''
33707          ,p_attribute2       => ''
33708          ,p_attribute3       => ''
33709          ,p_attribute4       => ''
33710          ,p_attribute5       => '');
33711 
33712      x_return_status := FND_API.G_RET_STS_ERROR;
33713          RAISE FND_API.G_EXC_ERROR;
33714      END IF;
33715 
33716 -- validate the input parameters.
33717 -- Validate Project Reference / ID
33718     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
33719                     p_pm_project_reference =>   p_pm_project_reference -- 3729250 , earlier null was passed
33720                  ,  p_pa_project_id     =>      p_project_id
33721                  ,  p_out_project_id    =>      l_project_id
33722                  ,  p_return_status     =>      x_return_status
33723         );
33724 
33725     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33726         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33727     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33728         RAISE  FND_API.G_EXC_ERROR;
33729     END IF;
33730 
33731 -- Validate Task Assignment Reference / ID
33732     IF p_task_assign_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33733        l_task_assign_id := NULL;
33734     ELSE
33735        l_task_assign_id := p_task_assign_id;
33736     END IF;
33737 
33738    PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID
33739      ( p_pm_product_code           => p_pm_source_code
33740       ,p_pa_project_id             => l_project_id
33741       ,p_pa_structure_version_id   => null
33742       ,p_pa_task_id                => null
33743       ,p_pa_task_elem_ver_id       => null
33744       ,p_pm_task_asgmt_reference   => p_pm_task_asgmt_reference
33745       ,p_pa_task_assignment_id     => p_task_assign_id
33746       ,p_resource_alias            => null
33747       ,p_resource_list_member_id   => null
33748       ,x_pa_task_assignment_id     => l_task_assignment_id
33749       ,x_return_status             => x_return_status
33750        ) ;
33751 
33752        IF p_debug_mode = 'Y' THEN
33753            pa_debug.write(g_pkg_name,'PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID ret status'||x_return_status||
33754                           ']task assign ref['||l_task_assign_reference||']task assign id['||l_task_assign_id||']',3) ;
33755        END IF;
33756 
33757        IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33758              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33759        ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33760              RAISE FND_API.G_EXC_ERROR;
33761        END IF;
33762 
33763    -- 3888280 start
33764    -- Added code to validate Deliverable Reference and Id
33765 
33766     -- Validate Deliverable Reference / ID
33767     Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
33768       (   p_deliverable_reference => p_pm_deliverable_reference
33769         , p_deliverable_id        => p_deliverable_id
33770         , p_project_id            => l_project_id
33771         , p_out_deliverable_id    => l_deliverable_id
33772         , p_return_status         => x_return_status
33773       );
33774 
33775     IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
33776         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
33777     ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
33778         RAISE FND_API.G_EXC_ERROR;
33779     END IF;
33780 
33781     -- Addec code to retrieve object_relationship_id for a TA to a DLVR relationship
33782     -- passing this retrieved id to DELETE_DLV_TASK_ASSOCIATION api
33783 
33784     OPEN c_obj_rel_id(l_task_assignment_id,l_deliverable_id) ;
33785     FETCH c_obj_rel_id into l_object_relationship_Id ;
33786     CLOSE c_obj_rel_id;
33787 
33788     -- commented below code because below api was deleting all the association to deliverables
33789     -- for a TA
33790 
33791 /*
33792    PA_DELIVERABLE_PVT.DELETE_DLV_TASK_ASSCN_IN_BULK
33793      (p_calling_module      => 'AMG'
33794      ,p_calling_context     => 'PA_ASSIGNMENTS'
33795      ,p_task_element_id     => l_task_assignment_id
33796      ,p_task_version_id     => null
33797      ,p_project_id          => l_project_id
33798      ,x_return_status       => x_return_status
33799      ,x_msg_count           => x_msg_count
33800      ,x_msg_data            => x_msg_data
33801      ) ;
33802 */
33803 
33804     IF p_debug_mode = 'Y' THEN
33805          pa_debug.g_err_stage:= ' l_object_relationship_Id is  ' || l_object_relationship_Id;
33806          pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33807     END IF ;
33808 
33809    -- Added below api call to delete a TA to a DLVR association
33810    -- passing calling context as TASK_ASSIGNMENT and for calling context TASK_ASSIGNMENT
33811    -- below api is not doing any validation to check whether the deletion is allowed or not
33812 
33813     PA_DELIVERABLE_PVT.DELETE_DLV_TASK_ASSOCIATION
33814     (
33815       p_calling_module          =>  'AMG'
33816      ,p_task_element_id         =>  l_task_assignment_id
33817      ,p_task_version_id         =>  NULL
33818      ,p_dlv_element_id          =>  l_deliverable_id
33819      ,p_dlv_version_id          =>  NULL
33820      ,p_object_relationship_id  =>  l_object_relationship_Id
33821      ,p_obj_rec_ver_number      =>  NULL
33822      ,p_project_id              =>  l_project_id
33823      ,p_calling_context         =>  'TASK_ASSIGNMENT'
33824      ,x_return_status           =>  x_return_status
33825      ,x_msg_count               =>  x_msg_count
33826      ,x_msg_data                =>  x_msg_data
33827     );
33828 
33829    -- 3888280 end
33830 
33831    -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
33832    IF (p_commit = FND_API.G_TRUE) THEN
33833        COMMIT;
33834    END IF;
33835 
33836    IF p_debug_mode = 'Y' THEN
33837        pa_debug.reset_curr_function;
33838        pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
33839    END IF;
33840 
33841 EXCEPTION
33842   WHEN FND_API.G_EXC_ERROR  THEN
33843       -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33844       --IF (p_commit = FND_API.G_TRUE) THEN
33845       ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33846       --END IF;
33847 
33848       x_return_status := FND_API.G_RET_STS_ERROR;
33849       l_msg_count := FND_MSG_PUB.count_msg;
33850 
33851       IF l_msg_count = 1 AND x_msg_data IS NULL
33852       THEN
33853            PA_INTERFACE_UTILS_PUB.get_messages
33854                (p_encoded        => FND_API.G_FALSE,
33855                 p_msg_index      => 1,
33856                 p_msg_count      => x_msg_count,
33857                 p_msg_data       => l_msg_data,
33858                 p_data           => l_data,
33859                 p_msg_index_out  => l_msg_index_out);
33860 
33861        x_msg_data := l_data;
33862            x_msg_count := l_msg_count;
33863      ELSE
33864           x_msg_count := l_msg_count;
33865      END IF;
33866 
33867      IF  p_debug_mode = 'Y' THEN
33868           pa_debug.reset_curr_function;
33869           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
33870      END IF;
33871 
33872   WHEN FND_API.G_EXC_UNEXPECTED_ERROR  THEN
33873      -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33874      --IF (p_commit = FND_API.G_TRUE) THEN
33875      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33876      --END IF;
33877 
33878      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33879      l_msg_count := FND_MSG_PUB.count_msg;
33880 
33881      IF l_msg_count = 1 AND x_msg_data IS NULL
33882      THEN
33883            PA_INTERFACE_UTILS_PUB.get_messages
33884                (p_encoded        => FND_API.G_FALSE,
33885                 p_msg_index      => 1,
33886                 p_msg_count      => x_msg_count,
33887                 p_msg_data       => l_msg_data,
33888                 p_data           => l_data,
33889                 p_msg_index_out  => l_msg_index_out);
33890 
33891        x_msg_data := l_data;
33892            x_msg_count := l_msg_count;
33893      ELSE
33894           x_msg_count := l_msg_count;
33895      END IF;
33896 
33897      IF  p_debug_mode = 'Y' THEN
33898           pa_debug.reset_curr_function;
33899           pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33900      END IF;
33901 
33902   WHEN OTHERS THEN
33903     -- 3735792, if return status is 'U' or 'E' , rollback to save point ,  don't check for p_commit
33904     --IF (p_commit = FND_API.G_TRUE) THEN
33905      ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33906     --END IF;
33907 
33908      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33909      x_msg_count := 1;
33910      x_msg_data := SQLERRM;
33911 
33912      IF p_debug_mode = 'Y' THEN
33913           pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33914           pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33915           pa_debug.reset_curr_function;
33916      END IF;
33917 
33918      IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33919        FND_MSG_PUB.add_exc_msg
33920            ( p_pkg_name    => G_PKG_NAME
33921            , p_procedure_name  => l_api_name  );
33922     END IF;
33923 
33924 END DELETE_DLV_TO_TASK_ASSIGN;
33925 -- FP M Changes for deliverables : End
33926 
33927 --Added by rtarway for FP.M Development
33928 PROCEDURE Delete_Mapping
33929 (
33930    p_api_version              IN   NUMBER     := 1.0
33931  , p_init_msg_list            IN   VARCHAR2   := FND_API.G_TRUE
33932  , p_commit                   IN   VARCHAR2   := FND_API.G_TRUE
33933  , p_debug_mode               IN   VARCHAR2   := 'N'
33934  , p_wp_task_version_id       IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33935  , p_fp_task_version_id       IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33936  , p_wp_task_id               IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33937  , p_fp_task_id               IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33938  , p_pm_wp_task_reference     IN   VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33939  , p_pm_fp_task_reference     IN   VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33940  , p_wp_structure_version_id  IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33941  , p_project_id               IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33942  , p_proj_source_reference    IN   VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33943  , x_return_status            OUT NOCOPY  VARCHAR2  /*Added the nocopy check for 4537865 */
33944  , x_msg_count                OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
33945  , x_msg_data                 OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
33946 )
33947 IS
33948     l_msg_count             NUMBER;
33949     l_msg_data              VARCHAR2(2000);
33950     l_api_name              CONSTANT  VARCHAR2(30)     := 'DELETE_MAPPING';
33951     l_return_status         VARCHAR2(1);
33952     l_debug_mode                     VARCHAR2(1);
33953     l_debug_level2                   CONSTANT NUMBER := 2;
33954     l_debug_level3                   CONSTANT NUMBER := 3;
33955     l_debug_level4                   CONSTANT NUMBER := 4;
33956     l_debug_level5                   CONSTANT NUMBER := 5;
33957 
33958     l_wp_task_version_id             NUMBER;
33959     l_fp_task_version_id             NUMBER;
33960     l_wp_task_id                     NUMBER;
33961     l_fp_task_id                     NUMBER;
33962     l_project_id                     NUMBER;
33963     l_wp_structure_version_id        NUMBER;
33964 
33965 --This cursor is based on assumption that a financial structure will have only one version in a project.
33966 CURSOR cur_get_fin_task_version_id(l_project_id NUMBER, l_fp_task_id NUMBER)
33967 is
33968      Select element_version_id
33969      from pa_proj_element_versions
33970      where proj_element_id = l_fp_task_id
33971      and project_id = l_project_id
33972      and financial_task_flag = 'Y';
33973 
33974 
33975 BEGIN
33976 
33977 -- 4537865
33978 x_return_status := FND_API.G_RET_STS_SUCCESS;
33979 
33980     --  Initialize the message table if requested.
33981     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
33982        FND_MSG_PUB.initialize;
33983     END IF;
33984 
33985 -- Bug 4142254 : Commenting this condition, as we want to create savepoint always.
33986 -- We could have done other way around too i.e. Savepoint and rollback shoud both be in
33987 -- conditions. But we prefer removing conditions due to bug 3735792
33988 --    IF (p_commit = FND_API.G_TRUE) THEN
33989        savepoint DELETE_MAPPING_PUB;
33990 --    END IF;
33991 
33992     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
33993     IF l_debug_mode = 'Y' THEN
33994           PA_DEBUG.set_curr_function( p_function   => 'DELETE_MAPPING',
33995                                       p_debug_mode => l_debug_mode );
33996     END IF;
33997 
33998     IF l_debug_mode = 'Y' THEN
33999           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : DELETE_MAPPING : Printing Input parameters';
34000           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34001                                      l_debug_level3);
34002           Pa_Debug.WRITE(g_pkg_name,'p_wp_task_version_id'||':'||p_wp_task_version_id,
34003                                      l_debug_level3);
34004           Pa_Debug.WRITE(g_pkg_name,'p_fp_task_version_id'||':'||p_fp_task_version_id,
34005                                      l_debug_level3);
34006           Pa_Debug.WRITE(g_pkg_name,'p_wp_task_id'||':'||p_wp_task_id,
34007                                      l_debug_level3);
34008           Pa_Debug.WRITE(g_pkg_name,'p_fp_task_id'||':'||p_fp_task_id,
34009                                      l_debug_level3);
34010           Pa_Debug.WRITE(g_pkg_name,'p_pm_wp_task_reference'||':'||p_pm_wp_task_reference,
34011                                      l_debug_level3);
34012           Pa_Debug.WRITE(g_pkg_name,'p_pm_fp_task_reference'||':'||p_pm_fp_task_reference,
34013                                      l_debug_level3);
34014           Pa_Debug.WRITE(g_pkg_name,'p_wp_structure_version_id'||':'||p_wp_structure_version_id,
34015                                      l_debug_level3);
34016           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34017                                      l_debug_level3);
34018 
34019      END IF;
34020    --Validate for input parameters
34021      IF l_debug_mode = 'Y' THEN
34022           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : DELETE_MAPPING : Validating Input parameters';
34023           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34024                                      l_debug_level3);
34025      END IF;
34026 
34027      --If task ids or names are passed , then we need to derive task_version_ids to be used by the DELETE_MAPPING API.
34028 
34029      --1. If Task version ids are null , start deriving task version id
34030      IF (
34031           (p_wp_task_version_id IS NULL OR p_wp_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34032           AND
34033           (p_fp_task_version_id IS NULL OR p_fp_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34034         )
34035      THEN
34036           --1.0 Get the project id
34037           IF (
34038                ( p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34039                AND
34040                ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34041              )
34042           THEN
34043 
34044                     PA_PROJECT_PVT.Convert_pm_projref_to_id  (
34045                          p_pm_project_reference =>   p_proj_source_reference
34046                       ,  p_pa_project_id     =>      p_project_id
34047                       ,  p_out_project_id    =>      l_project_id
34048                       ,  p_return_status     =>      x_return_status
34049                     );
34050 
34051                     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34052                          RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34053                     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34054                          RAISE  FND_API.G_EXC_ERROR;
34055                     END IF;
34056           ELSE
34057                l_project_id := p_project_id;
34058           END IF;
34059 
34060           IF p_debug_mode = 'Y' THEN
34061             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'DELETE_MAPPING'||'Project ID:'||l_project_id;
34062             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34063           END IF;
34064           --1.1 Get the task ids if these are null
34065                --WP TASK ID
34066                IF( (p_wp_task_id IS NULL OR p_wp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34067                     AND
34068                     (p_pm_wp_task_reference IS NOT NULL AND p_pm_wp_task_reference <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34069                  )
34070                THEN
34071                     --get the task id from task reference
34072                      PA_PROJECT_PVT.Convert_pm_taskref_to_id_all(
34073                                                p_pa_project_id => l_project_id
34074                                               ,p_structure_type => 'WORKPLAN'
34075                                               ,p_pm_task_reference => p_pm_wp_task_reference
34076                                               ,p_out_task_id => l_wp_task_id
34077                                               ,p_return_status => l_return_status);
34078 
34079                      x_return_status := l_return_status;
34080                      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
34081                         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34082                      ELSIF l_return_status = FND_API.G_RET_STS_ERROR      THEN
34083                         RAISE FND_API.G_EXC_ERROR;
34084                      END IF;
34085 
34086                ELSE
34087                     l_wp_task_id := p_wp_task_id;
34088                END IF;
34089                --FP TASK ID
34090                IF(
34091                     (p_fp_task_id IS NULL OR p_fp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34092                     AND
34093                     (p_pm_fp_task_reference IS NOT NULL AND p_pm_fp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34094                  )
34095                THEN
34096                     --get the task id from task reference
34097                      PA_PROJECT_PVT.Convert_pm_taskref_to_id_all(
34098                                                p_pa_project_id => l_project_id
34099                                               ,p_structure_type => 'FINANCIAL'
34100                                               ,p_pm_task_reference => p_pm_fp_task_reference
34101                                               ,p_out_task_id => l_fp_task_id
34102                                               ,p_return_status => l_return_status);
34103                      x_return_status := l_return_status;
34104                      IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
34105                         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34106                      ELSIF l_return_status = FND_API.G_RET_STS_ERROR      THEN
34107                         RAISE FND_API.G_EXC_ERROR;
34108                      END IF;
34109                ELSE
34110                     l_fp_task_id := p_fp_task_id;
34111                END IF;
34112           --1.2 Get the task version ids
34113                --1.2.1 get the wp structure version id
34114                  IF (
34115                          l_wp_task_id IS NOT NULL
34116                      AND ( p_wp_structure_version_id IS NULL OR p_wp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34117                     )
34118                  THEN
34119 
34120                     IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
34121                     l_wp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
34122                          IF (l_wp_structure_version_id = -1 OR l_wp_structure_version_id = NULL)
34123                          THEN
34124                             l_wp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
34125                          END IF;
34126                      END IF;
34127                  ELSIF(p_wp_structure_version_id IS NOT NULL AND p_wp_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34128                  THEN
34129                          l_wp_structure_version_id :=p_wp_structure_version_id;
34130                  END IF;
34131                --1.2.1.1 get the l_wp_task_version_id
34132                  l_wp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
34133                                  (
34134                                      p_structure_version_id => l_wp_structure_version_id
34135                                    , p_task_id => l_wp_task_id
34136                                  );
34137 
34138                --1.2.2 get the fp task version id, as there will be only one structure version for financial
34139                 IF (l_fp_task_id IS NOT NULL) THEN
34140                    open  cur_get_fin_task_version_id (l_project_id, l_fp_task_id);
34141                    fetch cur_get_fin_task_version_id into l_fp_task_version_id;
34142                    close cur_get_fin_task_version_id ;
34143                 END IF;
34144 
34145 
34146      ELSE
34147           l_wp_task_version_id := p_wp_task_version_id;
34148           l_fp_task_version_id := p_fp_task_version_id;
34149      END IF;
34150 
34151 
34152 --Calling Delete Mapping
34153    PA_PROJ_STRUC_MAPPING_PUB.DELETE_MAPPING
34154    (
34155        p_api_version           => p_api_version
34156      , p_init_msg_list         => FND_API.G_FALSE
34157      , p_commit                => FND_API.G_FALSE--bug 3766967
34158      , p_debug_mode            => p_debug_mode
34159      , p_wp_task_version_id    => l_wp_task_version_id
34160      , p_fp_task_version_id    => l_fp_task_version_id
34161      , p_calling_module        => 'AMG' -- Bug 4142254
34162      , x_return_status         => x_return_status
34163      , x_msg_count             => l_msg_count
34164      , x_msg_data              => l_msg_data
34165    );
34166     x_msg_count              := l_msg_count;
34167     x_msg_data               := l_msg_data;
34168 
34169     IF p_debug_mode = 'Y' THEN
34170        pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'DELETE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.DELETE_MAPPING:'||x_return_status;
34171        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34172     END IF;
34173 
34174    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34175           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34176    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34177           RAISE  FND_API.G_EXC_ERROR;
34178    END IF;
34179 
34180 EXCEPTION
34181    WHEN FND_API.G_EXC_ERROR        THEN
34182        ROLLBACK TO DELETE_MAPPING_PUB;
34183        x_return_status := FND_API.G_RET_STS_ERROR;
34184 
34185    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
34186        ROLLBACK TO DELETE_MAPPING_PUB;
34187        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34188 
34189    WHEN OTHERS THEN
34190        ROLLBACK TO DELETE_MAPPING_PUB;
34191        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34192 
34193    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
34194        FND_MSG_PUB.add_exc_msg
34195                    ( p_pkg_name            => G_PKG_NAME
34196                    , p_procedure_name      => l_api_name   );
34197   END IF;
34198 
34199 END Delete_Mapping ;
34200 --------------------------------------------------------------------------------
34201 --Name:               Create_Mapping
34202 --Type:               Procedure
34203 --Description:        This procedure creates a Mapping for the passed Wkp Task Id and Financial Task Id
34204 --                    This program can be called as per following:
34205 --mapped_task_id   mapped_task_ref mapped_task_name    wkp_task_id    wkp_task_name  wkp_task_reference  wkp_structure_ver_id   Status
34206 --   y               N                N                  y               N              N                   N                   Valid
34207 --   N               N                Y                  N               Y              N                   Y                   Valid
34208 --   N               Y                N                  N               N              Y                   N                   Valid
34209 --
34210 --Called subprograms:    PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING
34211 
34212 --History:
34213 --    24-Mar-2004   Ritesg            Created
34214 --
34215 
34216 PROCEDURE create_mapping
34217 (   p_api_version                  IN        NUMBER     := 1.0
34218   , p_init_msg_list                IN        VARCHAR2   := FND_API.G_TRUE
34219   , p_commit                       IN        VARCHAR2   := FND_API.G_TRUE
34220   , p_debug_mode                   IN        VARCHAR2   := 'N'
34221   , px_mapped_task_id              IN        NUMBER
34222   , p_mapped_task_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34223   , p_mapped_task_name             IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34224   , p_wkp_task_id                  IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34225   , p_wkp_task_name                IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34226   , p_wkp_structure_version_id     IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34227   , p_wkp_task_reference           IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34228   , p_project_id                   IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34229   , p_proj_source_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34230   , x_return_status                OUT  NOCOPY     VARCHAR2 /*Added the nocopy check for 4537865 */
34231   , x_msg_count                    OUT  NOCOPY     NUMBER /*Added the nocopy check for 4537865 */
34232   , x_msg_data                     OUT  NOCOPY     VARCHAR2 /*Added the nocopy check for 4537865 */
34233   )
34234 
34235   IS
34236     l_project_id               NUMBER;
34237 
34238     l_wkp_task_id              NUMBER;
34239     l_wkp_structure_version_id NUMBER;
34240     l_wkp_task_version_id      NUMBER;
34241     l_wkp_task_name            VARCHAR2(240);
34242 
34243     l_mapped_task_id           NUMBER;
34244     l_mapped_task_reference    VARCHAR2(240);
34245     l_mapped_task_version_id   NUMBER;
34246     l_mapped_task_name         VARCHAR2(240);
34247 
34248     l_msg_count             NUMBER;
34249     l_msg_data              VARCHAR2(2000);
34250     l_api_name              CONSTANT  VARCHAR2(30)     := 'CREATE_MAPPING';
34251 
34252     l_debug_mode                     VARCHAR2(1);
34253     l_debug_level2                   CONSTANT NUMBER := 2;
34254     l_debug_level3                   CONSTANT NUMBER := 3;
34255     l_debug_level4                   CONSTANT NUMBER := 4;
34256     l_debug_level5                   CONSTANT NUMBER := 5;
34257 
34258 --This cursor is based on assumption that a financial structure will have only one version in a project.
34259 CURSOR cur_get_mapped_task_version_id(p_project_id NUMBER, p_mapped_task_id NUMBER)
34260 is
34261      Select element_version_id
34262      from pa_proj_element_versions
34263      where proj_element_id = p_mapped_task_id
34264      and project_id = p_project_id
34265      and financial_task_flag = 'Y';
34266 
34267 BEGIN
34268  --  Initialize the message table if requested.
34269     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
34270        FND_MSG_PUB.initialize;
34271     END IF;
34272 
34273     IF (p_commit = FND_API.G_TRUE) THEN
34274        savepoint CREATE_MAPPING_PUB;
34275     END IF;
34276 
34277     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34278     IF l_debug_mode = 'Y' THEN
34279           PA_DEBUG.set_curr_function( p_function   => 'CREATE_MAPPING',
34280                                       p_debug_mode => l_debug_mode );
34281     END IF;
34282 
34283     IF l_debug_mode = 'Y' THEN
34284           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : Printing Input parameters';
34285           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34286                                      l_debug_level3);
34287           Pa_Debug.WRITE(g_pkg_name,'px_mapped_task_id'||':'||px_mapped_task_id,
34288                                      l_debug_level3);
34289           Pa_Debug.WRITE(g_pkg_name,'p_mapped_task_name'||':'||p_mapped_task_name,
34290                                      l_debug_level3);
34291           Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_id'||':'||p_wkp_task_id,
34292                                      l_debug_level3);
34293           Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_name'||':'||p_wkp_task_name,
34294                                      l_debug_level3);
34295           Pa_Debug.WRITE(g_pkg_name,'p_wkp_structure_version_id'||':'||p_wkp_structure_version_id,
34296                                      l_debug_level3);
34297           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34298                                      l_debug_level3);
34299           Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34300                                      l_debug_level3);
34301      END IF;
34302    --Validate for input parameters
34303     IF l_debug_mode = 'Y' THEN
34304           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : Validating Input parameters';
34305           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34306                                      l_debug_level3);
34307     END IF;
34308 
34309     IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34310           AND
34311           (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34312         )
34313     THEN
34314           IF l_debug_mode = 'Y' THEN
34315                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving Project id should be passed';
34316                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34317                                           l_debug_level3);
34318           END IF;
34319           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34320     END IF;
34321 
34322     IF (
34323          ( px_mapped_task_id IS NULL OR px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
34324          ( p_mapped_task_reference IS NULL OR p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
34325          ( p_mapped_task_name IS NULL OR p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34326         )
34327     THEN
34328           IF l_debug_mode = 'Y' THEN
34329                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';
34330                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34331                                           l_debug_level3);
34332           END IF;
34333           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34334     END IF;
34335 
34336     IF (
34337           (p_wkp_task_id IS NULL OR p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
34338           (p_wkp_task_reference IS NULL OR p_wkp_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
34339           (p_wkp_task_name IS NULL OR p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34340         )
34341     THEN
34342           IF l_debug_mode = 'Y' THEN
34343                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';
34344                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34345                                           l_debug_level3);
34346           END IF;
34347           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34348     END IF;
34349 
34350 
34351   --  Set API return status to success
34352      x_return_status     := FND_API.G_RET_STS_SUCCESS;
34353 
34354      IF p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34355         l_wkp_task_id := NULL;
34356      ELSE
34357         l_wkp_task_id := p_wkp_task_id;
34358      END IF;
34359 
34360      IF px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34361        l_mapped_task_id := NULL;
34362      ELSE
34363        l_mapped_task_id := px_mapped_task_id;
34364      END IF;
34365 
34366      IF p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34367        l_mapped_task_reference := NULL;
34368      ELSE
34369        l_mapped_task_reference := p_mapped_task_reference;
34370      END IF;
34371 
34372      IF p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34373        l_wkp_task_name := NULL;
34374      ELSE
34375        l_wkp_task_name := p_wkp_task_name;
34376      END IF;
34377 
34378      IF p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34379        l_mapped_task_name := NULL;
34380      ELSE
34381        l_mapped_task_name := p_mapped_task_name;
34382      END IF;
34383 
34384      IF p_wkp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34385        l_wkp_structure_version_id := NULL;
34386      ELSE
34387        l_wkp_structure_version_id := p_wkp_structure_version_id;
34388      END IF;
34389 
34390      IF p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34391           l_project_id := NULL;
34392      ELSE
34393           l_project_id := p_project_id;
34394      END IF;
34395 
34396   -- Get the task and Project details based on source reference passed
34397      IF (
34398           p_project_id IS NULL
34399           AND ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34400         )
34401      THEN
34402           PA_PROJECT_PVT.Convert_pm_projref_to_id  (
34403                          p_pm_project_reference =>   p_proj_source_reference
34404                       ,  p_pa_project_id     =>      p_project_id
34405                       ,  p_out_project_id    =>      l_project_id
34406                       ,  p_return_status     =>      x_return_status
34407              );
34408      END IF;
34409 
34410      IF p_debug_mode = 'Y' THEN
34411             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'Project ID:'||l_project_id;
34412             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34413      END IF;
34414 
34415      IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34416         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34417      ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34418         RAISE  FND_API.G_EXC_ERROR;
34419      END IF;
34420 
34421  --Get the Wkp Task ID using Wkp Task Reference
34422     IF (
34423          (l_wkp_task_id IS NULL)
34424          AND
34425          (p_wkp_task_reference IS NOT NULL AND p_wkp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34426        )
34427     THEN
34428         PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34429                    p_pa_project_id      => l_project_id
34430                  , p_structure_type     => 'WORKPLAN'
34431                  , p_pm_task_reference  => p_wkp_task_reference
34432                  , p_out_task_id        => l_wkp_task_id
34433                  , p_return_status      => x_return_status );
34434 
34435         IF p_debug_mode = 'Y' THEN
34436             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'wkp_task_id:'||l_wkp_task_id;
34437             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34438         END IF;
34439 
34440         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
34441           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34442         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
34443           RAISE FND_API.G_EXC_ERROR;
34444         END IF;
34445     END IF;
34446 
34447 -- Get the mapped task Id based in mapped_task_reference
34448     IF ( l_mapped_task_id IS NULL
34449          AND
34450          l_mapped_task_reference IS NOT NULL
34451     )
34452     THEN
34453          PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34454                    p_pa_project_id      => l_project_id
34455                  , p_structure_type     => 'FINANCIAL'
34456                  , p_pm_task_reference  => p_mapped_task_reference
34457                  , p_out_task_id        => l_mapped_task_id
34458                  , p_return_status      => x_return_status );
34459 
34460      --Assign mapped task_id to px_mapped_task_id as it is in out parameter
34461           IF p_debug_mode = 'Y' THEN
34462                  pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'mapped_task_id:'||l_mapped_task_id;
34463                  pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34464           END IF;
34465           IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
34466              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34467           ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
34468              RAISE FND_API.G_EXC_ERROR;
34469           END IF;
34470     END IF;
34471      --Get the task version id from Wkp task Id
34472      -- Avoid this call if wkp task name and wkp task version ids are passed
34473      IF (l_wkp_task_id IS NOT NULL AND l_wkp_structure_version_id IS NULL ) THEN
34474 
34475            IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
34476                   l_wkp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
34477                   IF (l_wkp_structure_version_id = -1 OR l_wkp_structure_version_id = NULL)
34478                   THEN
34479                        l_wkp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
34480                   END IF;
34481            END IF;
34482      END IF;
34483      l_wkp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
34484                                  (
34485                                      p_structure_version_id => l_wkp_structure_version_id
34486                                    , p_task_id => l_wkp_task_id
34487                                  );
34488 
34489 
34490      --Get the financial task version id from financial task id,
34491      IF (l_mapped_task_id IS NOT NULL) THEN
34492          open cur_get_mapped_task_version_id (l_project_id, l_mapped_task_id);
34493          fetch cur_get_mapped_task_version_id into l_mapped_task_version_id;
34494          close cur_get_mapped_task_version_id ;
34495      END IF;
34496      IF p_debug_mode = 'Y' THEN
34497             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'Before Calling PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING:';
34498             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34499      END IF;
34500 
34501 
34502 -- All other validations done in PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
34503 -- call PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING here only
34504 
34505    PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING
34506    (
34507        p_api_version           => p_api_version
34508      , p_init_msg_list         => FND_API.G_FALSE
34509      , p_calling_module        => 'AMG'
34510      , p_commit                => FND_API.G_FALSE--bug 3766967
34511      , p_debug_mode            => p_debug_mode
34512      , p_wp_task_name          => l_wkp_task_name
34513      , p_wp_task_version_id    => l_wkp_task_version_id
34514      , p_parent_str_version_id => l_wkp_structure_version_id
34515      , p_fp_task_version_id    => l_mapped_task_version_id
34516      , p_fp_task_name          => l_mapped_task_name
34517      , p_project_id            => l_project_id
34518      , x_return_status         => x_return_status
34519      , x_msg_count             => l_msg_count
34520      , x_msg_data              => l_msg_data
34521    );
34522     x_msg_count              := l_msg_count;
34523     x_msg_data               := l_msg_data;
34524 
34525     IF p_debug_mode = 'Y' THEN
34526        pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING:'||x_return_status;
34527        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34528     END IF;
34529 
34530    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34531           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34532    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34533           RAISE  FND_API.G_EXC_ERROR;
34534    END IF;
34535 
34536 EXCEPTION
34537    WHEN FND_API.G_EXC_ERROR THEN
34538        IF (p_commit = FND_API.G_TRUE) THEN
34539         ROLLBACK TO CREATE_MAPPING_PUB;
34540        END IF;
34541        x_return_status := FND_API.G_RET_STS_ERROR;
34542 
34543    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34544        IF (p_commit = FND_API.G_TRUE) THEN
34545         ROLLBACK TO CREATE_MAPPING_PUB;
34546        END IF;
34547        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34548 
34549    WHEN OTHERS THEN
34550        IF (p_commit = FND_API.G_TRUE) THEN
34551         ROLLBACK TO CREATE_MAPPING_PUB;
34552        END IF;
34553        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34554 
34555    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
34556        FND_MSG_PUB.add_exc_msg
34557                    ( p_pkg_name            => G_PKG_NAME
34558                    , p_procedure_name      => l_api_name   );
34559   END IF;
34560 END create_mapping;
34561 --------------------------------------------------------------------------------
34562 --Name:               Update_Mapping
34563 --Type:               Procedure
34564 --Description:        This procedure creates a Mapping for the passed Wkp Task Id and Financial Task Id
34565 --                    This program can be called as per following:
34566 --mapped_task_id   mapped_task_ref mapped_task_name    wkp_task_id    wkp_task_name  wkp_task_reference  wkp_structure_ver_id   Status
34567 --   y               N                N                  y               N              N                   N                   Valid
34568 --   N               N                Y                  N               Y              N                   Y                   Valid
34569 --   N               Y                N                  N               N              Y                   N                   Valid
34570 --
34571 --Called subprograms:    PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34572 
34573 --History:
34574 --    24-Mar-2004   Ritesg            Created
34575 --
34576 
34577 PROCEDURE update_mapping
34578 (   p_api_version                  IN        NUMBER     := 1.0
34579   , p_init_msg_list                IN        VARCHAR2   := FND_API.G_TRUE
34580   , p_commit                       IN        VARCHAR2   := FND_API.G_TRUE
34581   , p_debug_mode                   IN        VARCHAR2   := 'N'
34582   , px_mapped_task_id              IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34583   , p_mapped_task_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34584   , p_mapped_task_name             IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34585   , p_wkp_task_id                  IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34586   , p_wkp_task_name                IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34587   , p_wkp_structure_version_id     IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34588   , p_wkp_task_reference           IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34589   , p_project_id                   IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34590   , p_proj_source_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34591   , x_return_status                OUT NOCOPY       VARCHAR2 /*Added the nocopy check for 4537865 */
34592   , x_msg_count                    OUT NOCOPY      NUMBER /*Added the nocopy check for 4537865 */
34593   , x_msg_data                     OUT NOCOPY      VARCHAR2 /*Added the nocopy check for 4537865 */
34594   )
34595 
34596   IS
34597     l_project_id            NUMBER;
34598 
34599     l_wkp_task_id              NUMBER;
34600     l_wkp_structure_version_id NUMBER;
34601     l_wkp_task_version_id      NUMBER;
34602     l_wkp_task_name            VARCHAR2(240);
34603 
34604     l_mapped_task_id        NUMBER;
34605     l_mapped_task_reference VARCHAR2(240);
34606     l_mapped_task_version_id NUMBER;
34607     l_mapped_task_name     VARCHAR2(240);
34608 
34609     l_msg_count             NUMBER;
34610     l_msg_data              VARCHAR2(2000);
34611     l_api_name              CONSTANT  VARCHAR2(30)     := 'UPDATE_MAPPING';
34612 
34613     l_return_status                  VARCHAR2(1);
34614     l_debug_mode                     VARCHAR2(1);
34615     l_debug_level2                   CONSTANT NUMBER := 2;
34616     l_debug_level3                   CONSTANT NUMBER := 3;
34617     l_debug_level4                   CONSTANT NUMBER := 4;
34618     l_debug_level5                   CONSTANT NUMBER := 5;
34619 
34620 --This cursor is based on assumption that a financial structure will have only one version in a project.
34621 CURSOR cur_get_mapped_task_version_id(p_project_id NUMBER, p_mapped_task_id NUMBER)
34622 is
34623      Select element_version_id
34624      from pa_proj_element_versions
34625      where proj_element_id = p_mapped_task_id
34626      and project_id = p_project_id
34627      and financial_task_flag = 'Y';
34628 
34629 BEGIN
34630  --  Initialize the message table if requested.
34631     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
34632        FND_MSG_PUB.initialize;
34633     END IF;
34634 
34635     IF (p_commit = FND_API.G_TRUE) THEN
34636        savepoint UPDATE_MAPPING_PUB;
34637     END IF;
34638 
34639     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34640     IF l_debug_mode = 'Y' THEN
34641           PA_DEBUG.set_curr_function( p_function   => 'UPDATE_MAPPING',
34642                                       p_debug_mode => l_debug_mode );
34643     END IF;
34644 
34645     IF l_debug_mode = 'Y' THEN
34646           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : Printing Input parameters';
34647           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34648                                      l_debug_level3);
34649           Pa_Debug.WRITE(g_pkg_name,'px_mapped_task_id'||':'||px_mapped_task_id,
34650                                      l_debug_level3);
34651           Pa_Debug.WRITE(g_pkg_name,'p_mapped_task_name'||':'||p_mapped_task_name,
34652                                      l_debug_level3);
34653           Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_id'||':'||p_wkp_task_id,
34654                                      l_debug_level3);
34655           Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_name'||':'||p_wkp_task_name,
34656                                      l_debug_level3);
34657           Pa_Debug.WRITE(g_pkg_name,'p_wkp_structure_version_id'||':'||p_wkp_structure_version_id,
34658                                      l_debug_level3);
34659           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34660                                      l_debug_level3);
34661           Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34662                                      l_debug_level3);
34663      END IF;
34664    --Validate for input parameters
34665      IF l_debug_mode = 'Y' THEN
34666           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : Validating Input parameters';
34667           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34668                                      l_debug_level3);
34669      END IF;
34670 
34671      IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34672           AND
34673           (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34674         )
34675      THEN
34676           IF l_debug_mode = 'Y' THEN
34677                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : At least one of the parameters for deriving Project id should be passed';
34678                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34679                                           l_debug_level3);
34680           END IF;
34681           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34682      END IF;
34683 
34684 
34685      IF (
34686           (p_wkp_task_id IS NULL OR p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34687           AND
34688           (p_wkp_task_reference IS NULL OR p_wkp_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34689           AND
34690           ( p_wkp_task_name IS NULL OR p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34691         )
34692      THEN
34693           IF l_debug_mode = 'Y' THEN
34694                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';
34695                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34696                                           l_debug_level3);
34697           END IF;
34698           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34699      END IF;
34700 
34701 
34702   --  Set API return status to success
34703      x_return_status     := FND_API.G_RET_STS_SUCCESS;
34704 
34705      IF p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34706         l_wkp_task_id := NULL;
34707      ELSE
34708         l_wkp_task_id := p_wkp_task_id;
34709      END IF;
34710 
34711      IF px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34712        l_mapped_task_id := NULL;
34713      ELSE
34714        l_mapped_task_id := px_mapped_task_id;
34715      END IF;
34716 
34717      IF p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34718        l_mapped_task_reference := NULL;
34719      ELSE
34720        l_mapped_task_reference := p_mapped_task_reference;
34721      END IF;
34722 
34723      IF p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34724        l_wkp_task_name := NULL;
34725      ELSE
34726        l_wkp_task_name := p_wkp_task_name;
34727      END IF;
34728 
34729      IF p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34730        l_mapped_task_name := NULL;
34731      ELSE
34732        l_mapped_task_name := p_mapped_task_name;
34733      END IF;
34734 
34735      IF p_wkp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34736        l_wkp_structure_version_id := NULL;
34737      ELSE
34738        l_wkp_structure_version_id := p_wkp_structure_version_id;
34739      END IF;
34740 
34741      IF p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34742           l_project_id := NULL;
34743      ELSE
34744           l_project_id := p_project_id;
34745      END IF;
34746     -- Get the task and Project details based on source reference passed
34747     IF (
34748           ( p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34749           AND
34750           ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34751        )
34752     THEN
34753           PA_PROJECT_PVT.Convert_pm_projref_to_id  (
34754                          p_pm_project_reference =>   p_proj_source_reference
34755                       ,  p_pa_project_id     =>      p_project_id
34756                       ,  p_out_project_id    =>      l_project_id
34757                       ,  p_return_status     =>      x_return_status
34758              );
34759     END IF;
34760 
34761     IF p_debug_mode = 'Y' THEN
34762             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'Project ID:'||l_project_id;
34763             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34764     END IF;
34765 
34766     IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34767         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34768     ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34769         RAISE  FND_API.G_EXC_ERROR;
34770     END IF;
34771  --Get the Wkp Task ID using Wkp Task Reference
34772      IF ( l_wkp_task_id IS NULL
34773           AND
34774           (p_wkp_task_reference IS NOT NULL AND p_wkp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34775         )
34776      THEN
34777              PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34778                    p_pa_project_id      => l_project_id
34779                  , p_structure_type     => 'WORKPLAN'
34780                  , p_pm_task_reference  => p_wkp_task_reference
34781                  , p_out_task_id        => l_wkp_task_id
34782                  , p_return_status      => x_return_status );
34783 
34784                IF p_debug_mode = 'Y' THEN
34785                       pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'wkp_task_id:'||l_wkp_task_id;
34786                       pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34787                END IF;
34788 
34789         IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
34790           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34791         ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
34792           RAISE FND_API.G_EXC_ERROR;
34793         END IF;
34794      END IF;
34795 
34796 -- Get the mapped task Id based in mapped_task_reference
34797    IF (  l_mapped_task_id IS NULL
34798           AND
34799           (l_mapped_task_reference IS NOT NULL AND l_mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34800        )
34801    THEN
34802        PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34803                    p_pa_project_id      => l_project_id
34804                  , p_structure_type     => 'FINANCIAL'
34805                  , p_pm_task_reference  => p_mapped_task_reference
34806                  , p_out_task_id        => l_mapped_task_id
34807                  , p_return_status      => x_return_status );
34808 
34809       IF p_debug_mode = 'Y' THEN
34810             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'mapped_task_id:'||l_mapped_task_id;
34811             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34812       END IF;
34813       IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR   THEN
34814              RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34815       ELSIF x_return_status = FND_API.G_RET_STS_ERROR      THEN
34816              RAISE FND_API.G_EXC_ERROR;
34817       END IF;
34818    END IF;
34819 
34820      --Get the task version id from Wkp task Id
34821      -- Avoid this call if wkp task name and wkp task version ids are passed
34822      IF (l_wkp_task_id IS NOT NULL AND l_wkp_structure_version_id IS NULL ) THEN
34823            IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
34824                    l_wkp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
34825                   IF (l_wkp_structure_version_id  IS NULL OR l_wkp_structure_version_id  = -1) THEN
34826                        l_wkp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
34827                   END IF;
34828            END IF;
34829      END IF;
34830      l_wkp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
34831                                  (
34832                                      p_structure_version_id => l_wkp_structure_version_id
34833                                    , p_task_id => l_wkp_task_id
34834                                  );
34835      --Get the financial task version id from financial task id,
34836      IF (l_mapped_task_id IS NOT NULL) THEN
34837          open cur_get_mapped_task_version_id (l_project_id, l_mapped_task_id);
34838          fetch cur_get_mapped_task_version_id into l_mapped_task_version_id;
34839          close cur_get_mapped_task_version_id ;
34840 
34841      END IF;
34842 
34843      IF p_debug_mode = 'Y' THEN
34844             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'Before Calling PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING:';
34845             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34846      END IF;
34847 
34848 
34849 -- All other validations done in PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34850 -- call PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING here only
34851 
34852    PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34853    (
34854        p_api_version               => p_api_version
34855      , p_calling_module            => 'AMG'
34856      , p_init_msg_list             => FND_API.G_FALSE
34857      , p_commit                    => FND_API.G_FALSE--bug 3766967
34858      , p_debug_mode                => p_debug_mode
34859      , p_project_id                => l_project_id
34860      , p_wp_task_name              => l_wkp_task_name
34861      , p_wp_prnt_str_ver_id        => l_wkp_structure_version_id
34862      , p_wp_task_version_id        => l_wkp_task_version_id
34863      , p_fp_task_name              => l_mapped_task_name
34864      , p_fp_task_version_id        => l_mapped_task_version_id
34865      , x_return_status             => l_return_status
34866      , x_msg_count                 => x_msg_count
34867      , x_msg_data                  => x_msg_data
34868    );
34869 
34870     x_msg_count              := l_msg_count;
34871     x_msg_data               := l_msg_data;
34872 
34873     IF p_debug_mode = 'Y' THEN
34874        pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING:'||x_return_status;
34875        pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34876     END IF;
34877 
34878     -- 10053423
34879     IF l_debug_mode = 'Y' THEN
34880         pa_debug.reset_curr_function;
34881         pa_debug.write(g_pkg_name, l_api_name || ': Exiting succesfully', 5);
34882     END IF;
34883 
34884    IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34885           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
34886    ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34887           RAISE  FND_API.G_EXC_ERROR;
34888    END IF;
34889 
34890 EXCEPTION
34891    WHEN FND_API.G_EXC_ERROR        THEN
34892         IF (p_commit = FND_API.G_TRUE) THEN
34893           ROLLBACK TO UPDATE_MAPPING_PUB;
34894          END IF;
34895        x_return_status := FND_API.G_RET_STS_ERROR;
34896    -- Bug 10053423
34897         IF l_debug_mode = 'Y' THEN
34898             pa_debug.reset_curr_function;
34899             pa_debug.write(g_pkg_name, l_api_name || ': Inside G_EXC_ERROR exception', 5);
34900         END IF;
34901 
34902    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
34903         IF (p_commit = FND_API.G_TRUE) THEN
34904           ROLLBACK TO UPDATE_MAPPING_PUB;
34905          END IF;
34906        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34907        -- Bug 10053423
34908         IF l_debug_mode = 'Y' THEN
34909             pa_debug.reset_curr_function;
34910             pa_debug.write(g_pkg_name, l_api_name || ': Inside G_EXC_UNEXPECTED_ERROR exception', 5);
34911         END IF;
34912 
34913    WHEN OTHERS THEN
34914         IF (p_commit = FND_API.G_TRUE) THEN
34915           ROLLBACK TO UPDATE_MAPPING_PUB;
34916         END IF;
34917        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34918        -- Bug 10053423
34919         IF l_debug_mode = 'Y' THEN
34920             pa_debug.reset_curr_function;
34921             pa_debug.write(g_pkg_name, l_api_name || ': Inside OTHERS exception', 5);
34922         END IF;
34923 
34924    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
34925        FND_MSG_PUB.add_exc_msg
34926                    ( p_pkg_name            => G_PKG_NAME
34927                    , p_procedure_name      => l_api_name   );
34928   END IF;
34929 END UPDATE_MAPPING;
34930 --------------------------------------------------------------------------------
34931 --Name:               process_tasks_table
34932 --Type:               Procedure
34933 
34934 --History:
34935 --    24-Mar-2004   Ritesh            Created
34936 --
34937 
34938 PROCEDURE process_tasks_table
34939 (   p_api_version                  IN        NUMBER     := 1.0
34940   , p_init_msg_list                IN        VARCHAR2   := FND_API.G_TRUE
34941   , p_debug_mode                   IN        VARCHAR2   := 'N'
34942   , p_structure_type               IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34943   , p_tasks_in_tbl                 IN OUT  NOCOPY     task_in_tbl_type /*Added the nocopy check for 4537865 */
34944 --  , p_tasks_out_tbl                OUT       task_in_tbl_type
34945   , p_project_id                   IN        NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34946   , p_proj_source_reference        IN        VARCHAR2   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34947   , x_return_status                OUT NOCOPY       VARCHAR2 /*Added the nocopy check for 4537865 */
34948   , x_msg_count                    OUT NOCOPY       NUMBER /*Added the nocopy check for 4537865 */
34949   , x_msg_data                     OUT NOCOPY       VARCHAR2 /*Added the nocopy check for 4537865 */
34950   )
34951 
34952   IS
34953     l_project_id            NUMBER;
34954     l_proj_share_type       VARCHAR2(240);
34955     iCounter                NUMBER := 0;
34956     last_financial_flag     VARCHAR2(1) := NULL;
34957     last_wbs_level          NUMBER := -1;
34958     l_task_rec              task_in_rec_type;
34959     l_msg_count             NUMBER;
34960     l_msg_data              VARCHAR2(2000);
34961     l_api_name              CONSTANT  VARCHAR2(30)     := 'PROCESS_TASK_TABLE';
34962 
34963     l_return_status                  VARCHAR2(1);
34964     l_debug_mode                     VARCHAR2(1);
34965     l_debug_level2                   CONSTANT NUMBER := 2;
34966     l_debug_level3                   CONSTANT NUMBER := 3;
34967     l_debug_level4                   CONSTANT NUMBER := 4;
34968     l_debug_level5                   CONSTANT NUMBER := 5;
34969 
34970 BEGIN
34971     --Initialize the message table if requested.
34972     IF FND_API.TO_BOOLEAN( p_init_msg_list )  THEN
34973        FND_MSG_PUB.initialize;
34974     END IF;
34975 
34976     l_debug_mode  := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34977     IF l_debug_mode = 'Y' THEN
34978           PA_DEBUG.set_curr_function( p_function   => 'PROCESS_TASK_TABLE',
34979                                       p_debug_mode => l_debug_mode );
34980     END IF;
34981 
34982     IF l_debug_mode = 'Y' THEN
34983           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Printing Input parameters';
34984           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34985                                      l_debug_level3);
34986           Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34987                                      l_debug_level3);
34988           Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34989                                   l_debug_level3);
34990      END IF;
34991    --Validate for input parameters
34992      IF l_debug_mode = 'Y' THEN
34993           Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Validating Input parameters';
34994           Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34995                                      l_debug_level3);
34996      END IF;
34997 
34998      IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34999           AND
35000           (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
35001         )
35002      THEN
35003           IF l_debug_mode = 'Y' THEN
35004                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : At least one of the parameters for deriving Project id should be passed';
35005                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
35006                                           l_debug_level3);
35007           END IF;
35008           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35009      END IF;
35010 
35011      IF ( p_tasks_in_tbl IS NULL OR p_tasks_in_tbl.count <= 0 )
35012      THEN
35013           IF l_debug_mode = 'Y' THEN
35014                Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Empty or NULL Task Table';
35015                Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
35016                                           l_debug_level3);
35017           END IF;
35018           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35019      END IF;
35020 
35021 
35022 
35023   --  Set API return status to success
35024      x_return_status     := FND_API.G_RET_STS_SUCCESS;
35025 
35026 
35027   -- Get the task and Project details based on source reference passed
35028      IF (p_project_id IS NULL AND p_proj_source_reference IS NOT NULL ) THEN
35029           PA_PROJECT_PVT.Convert_pm_projref_to_id  (
35030                          p_pm_project_reference =>   p_proj_source_reference
35031                       ,  p_pa_project_id     =>      p_project_id
35032                       ,  p_out_project_id    =>      l_project_id
35033                       ,  p_return_status     =>      x_return_status
35034              );
35035      END IF;
35036 
35037      IF p_debug_mode = 'Y' THEN
35038             pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'PROCESS_TASK_TABLE'||'Project ID:'||l_project_id;
35039             pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
35040      END IF;
35041 
35042      IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35043         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35044      ELSIF  (x_return_status = FND_API.G_RET_STS_ERROR) THEN
35045         RAISE  FND_API.G_EXC_ERROR;
35046      END IF;
35047 -- Get the project sharing type
35048      l_proj_share_type  := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
35049      IF (l_proj_share_type = 'SHARE_PARTIAL' and p_structure_type = 'FINANCIAL')
35050      THEN
35051           FOR iCounter IN REVERSE p_tasks_in_tbl.FIRST..p_tasks_in_tbl.LAST LOOP
35052                l_task_rec := p_tasks_in_tbl(iCounter);
35053 
35054                IF (iCounter <> p_tasks_in_tbl.LAST OR last_wbs_level <> 1)
35055                THEN
35056                     --If not the summary task and not at the same level as the last task, set flag as 'Y', if lower task is 'Y'
35057                     IF (l_task_rec.wbs_level <> last_wbs_level )
35058                     THEN
35059                          l_task_rec.financial_task_flag := last_financial_flag;
35060                     END IF;
35061 
35062                END IF;
35063 
35064                IF (l_task_rec.financial_task_flag IS NOT NULL)
35065                THEN
35066                     IF(
35067                          l_task_rec.wbs_level = last_wbs_level
35068                          and
35069                          last_financial_flag = 'Y'
35070                          and
35071                          l_task_rec.financial_task_flag = 'N'
35072                       )
35073                     THEN
35074                          NULL;
35075                     ELSE
35076                         last_financial_flag :=  l_task_rec.financial_task_flag;
35077                     END IF;
35078                ELSE
35079                     last_financial_flag := 'N';
35080                END IF;
35081 
35082                last_wbs_level := l_task_rec.wbs_level;
35083                --p_tasks_out_tbl(iCounter):= l_task_rec;
35084           END LOOP;
35085 
35086      END IF;
35087 
35088 EXCEPTION
35089    WHEN FND_API.G_EXC_ERROR        THEN
35090 
35091        x_return_status := FND_API.G_RET_STS_ERROR;
35092 
35093    WHEN FND_API.G_EXC_UNEXPECTED_ERROR        THEN
35094 
35095        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35096 
35097    WHEN OTHERS THEN
35098 
35099        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35100 
35101    IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)       THEN
35102        FND_MSG_PUB.add_exc_msg
35103                    ( p_pkg_name            => G_PKG_NAME
35104                    , p_procedure_name      => l_api_name   );
35105   END IF;
35106 END process_tasks_table;
35107 --End Add by rtarway for FP.M Development
35108 
35109 --added by hsiu
35110 --
35111 PROCEDURE Create_Dependency(
35112   p_api_version_number          IN  NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35113  ,p_commit                      IN  VARCHAR2 := FND_API.G_FALSE
35114  ,p_init_msg_list               IN  VARCHAR2 := FND_API.G_FALSE
35115  ,p_msg_count                   OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
35116  ,p_msg_data                    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35117  ,p_return_status               OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35118  ,p_pm_product_code     IN  VARCHAR2
35119  ,p_pm_project_reference    IN  VARCHAR2
35120  ,p_pa_project_id       IN  NUMBER
35121  ,p_structure_version_id        IN  NUMBER
35122  ,p_pm_task_reference           IN  VARCHAR2
35123  ,p_pa_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35124  ,p_pm_pred_reference           IN  VARCHAR2
35125  ,p_pa_pred_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35126  ,p_type                        IN  VARCHAR2 := 'FS'
35127  ,p_lag_days                    IN  NUMBER   := 0
35128  ,p_comments                    IN  VARCHAR2 := NULL
35129 )
35130 IS
35131   l_msg_count NUMBER;
35132   l_msg_data      VARCHAR2(250);
35133   l_return_status VARCHAR2(1);
35134   l_project_id  NUMBER;
35135   l_task_ver_id     NUMBER;
35136   l_pred_ver_id     NUMBER;
35137   l_template_flag   VARCHAR2(1);
35138   l_wp_status       VARCHAR2(150);
35139   l_versioning      VARCHAR2(1);
35140 
35141 --  CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER)  --Bug 3735799
35142   CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2)  --Bug 3735799
35143   IS
35144   select ppev.element_version_id
35145     from pa_proj_elements ppe, pa_proj_element_versions ppev
35146    where ppe.project_id = c_project_id
35147      and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
35148      and ppe.project_id = ppev.project_Id
35149      and ppe.proj_element_id = ppev.proj_element_id
35150      and ppev.parent_structure_version_id = p_structure_version_id;
35151 
35152   CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER)  --Bug 3880403
35153   IS
35154   select ppev.element_version_id
35155     from pa_proj_elements ppe, pa_proj_element_versions ppev
35156    where ppe.project_id = c_project_id
35157      and ppe.proj_element_id = c_task_id
35158      and ppe.project_id = ppev.project_Id
35159      and ppe.proj_element_id = ppev.proj_element_id
35160      and ppev.parent_structure_version_id = p_structure_version_id;
35161 
35162   CURSOR get_template_flag(c_project_id NUMBER)
35163   IS
35164   select template_flag
35165     from pa_projects_all
35166    where project_id = c_project_id;
35167 
35168   CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
35169   IS
35170   select STATUS_CODE
35171     from pa_proj_elem_ver_structure
35172    where project_id = c_project_id
35173      and element_version_id = c_structure_version_id;
35174 BEGIN
35175   savepoint create_dep_pub_amg;
35176 
35177   IF FND_API.TO_BOOLEAN( p_init_msg_list )
35178   THEN
35179     FND_MSG_PUB.Initialize;
35180   END IF;
35181 
35182   --get project id
35183   PA_PROJECT_PVT.Convert_pm_projref_to_id
35184   (        p_pm_project_reference =>      p_pm_project_reference
35185         ,  p_pa_project_id     =>      p_pa_project_id
35186         ,  p_out_project_id    =>      l_project_id
35187         ,  p_return_status     =>      l_return_status
35188    );
35189 
35190    IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35191      RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35192    ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35193      RAISE  FND_API.G_EXC_ERROR;
35194    END IF;
35195 --
35196    --Bug 3768875
35197    If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
35198       If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
35199            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35200                                 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35201            RAISE FND_API.G_EXC_ERROR;
35202       End If;
35203    Else
35204       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35205                            p_msg_name => 'PA_INV_PROJECT_ID');
35206       RAISE FND_API.G_EXC_ERROR;
35207    End If;
35208 --
35209    --check if structure version can be modified
35210    OPEN get_template_flag(l_project_id);
35211    FETCH get_template_flag into l_template_flag;
35212    CLOSE get_template_flag;
35213 
35214    l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
35215 
35216    --if template, then ok
35217    IF l_template_flag = 'N' THEN
35218      --project, check if versioning is enabled
35219      --            ok if versioning is disabled
35220      IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
35221        --            if versioning enabled, ok if working
35222        OPEN get_workplan_status(l_project_id, p_structure_version_id);
35223        FETCH get_workplan_status into l_wp_status;
35224        CLOSE get_workplan_status;
35225        IF l_wp_status <> 'STRUCTURE_WORKING' THEN
35226          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35227                               p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
35228          RAISE FND_API.G_EXC_ERROR;
35229        END IF;
35230      ELSE
35231        IF (l_versioning IS NULL) THEN
35232          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35233                               p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
35234          RAISE FND_API.G_EXC_ERROR;
35235        END IF;
35236      END IF;
35237    END IF;
35238 
35239    --get task id
35240    IF (p_pm_task_reference IS NOT NULL) THEN
35241      open get_task_ver_id(l_project_id, p_pm_task_reference);
35242      Fetch get_task_ver_id into l_task_ver_id;
35243      --   Bug 3768875
35244      IF get_task_ver_id%NOTFOUND THEN
35245          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35246                               p_msg_name => 'PA_PS_INV_TASK_ID');
35247          CLOSE get_task_ver_id;
35248          RAISE FND_API.G_EXC_ERROR;
35249      END IF;
35250      CLOSE get_task_ver_id;
35251    END IF;
35252 
35253    --bug 3880403
35254    IF (p_pm_task_reference IS NULL OR l_task_ver_id IS NULL) THEN
35255      --need to get id using task id
35256      OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
35257      FETCH get_task_Ver_id2 into l_task_ver_id;
35258      IF get_task_ver_id2%NOTFOUND THEN
35259          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35260                               p_msg_name => 'PA_PS_INV_TASK_ID');
35261          CLOSE get_task_ver_id2;
35262          RAISE FND_API.G_EXC_ERROR;
35263      END IF;
35264      CLOSE get_task_ver_id2;
35265    END IF;
35266    --end bug 3880403
35267 --
35268    --get predecessor id
35269    IF (p_pm_pred_reference IS NOT NULL) THEN
35270      open get_task_ver_id(l_project_id, p_pm_pred_reference);
35271      Fetch get_task_ver_id into l_pred_ver_id;
35272      --Bug 3768875
35273      IF get_task_ver_id%NOTFOUND THEN
35274          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35275                               p_msg_name => 'PA_PS_INV_TASK_ID');
35276          CLOSE get_task_ver_id;
35277          RAISE FND_API.G_EXC_ERROR;
35278      END IF;
35279      CLOSE get_task_ver_id;
35280    END IF;
35281 
35282    --bug 3880403
35283    IF (p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL) THEN
35284      --need to get id using task id
35285      OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
35286      FETCH get_task_Ver_id2 into l_pred_ver_id;
35287      IF get_task_ver_id2%NOTFOUND THEN
35288          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35289                               p_msg_name => 'PA_PS_INV_TASK_ID');
35290          CLOSE get_task_ver_id2;
35291          RAISE FND_API.G_EXC_ERROR;
35292      END IF;
35293      CLOSE get_task_ver_id2;
35294    END IF;
35295    --end bug 3880403
35296 --
35297 -- Bug 3768933 Validating the relationship_subtype
35298    -- Bug 8513869 - Replaced lookup type PA_OBJECT_DEPENDENCY_TYPES with PA_DEPENDENCY_TYPE
35299    IF PA_PROJ_ELEMENTS_UTILS.check_pa_lookup_exists('PA_DEPENDENCY_TYPE',p_type) <> 'Y' THEN
35300       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35301                            p_msg_name => 'PA_PS_INV_REL_SUBTYPE_VAL');
35302       RAISE FND_API.G_EXC_ERROR;
35303    END IF;
35304 --
35305    --call existing create dependency API to create intra dependency
35306    PA_RELATIONSHIP_PVT.Create_Dependency(
35307              p_calling_module                   => 'SELF_SERVICE'
35308             ,p_src_proj_id                      => l_project_id
35309             ,p_src_task_ver_id                  => l_task_ver_id
35310             ,p_dest_proj_id                     => l_project_id
35311             ,p_dest_task_ver_id                 => l_pred_ver_id
35312             ,p_type                             => p_type
35313             ,p_lag_days                         => p_lag_days
35314             ,p_comments                         => p_comments
35315             ,x_return_status                    => p_return_status
35316             ,x_msg_count                        => p_msg_count
35317             ,x_msg_data                         => p_msg_data
35318             );
35319 
35320   IF p_msg_count > 0 THEN
35321     RAISE FND_API.G_EXC_ERROR;
35322   END IF;
35323 
35324   p_return_status := FND_API.G_RET_STS_SUCCESS;
35325 
35326 EXCEPTION
35327   WHEN FND_API.G_EXC_ERROR THEN
35328     ROLLBACK TO create_dep_pub_amg;
35329     p_return_status := FND_API.G_RET_STS_ERROR;
35330 
35331 -- Begin fix for Bug # 4323969.
35332 
35333    FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35334                              , p_data   =>  p_msg_data);
35335 
35336 -- End fix for Bug # 4323969.
35337 
35338   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35339     ROLLBACK TO create_dep_pub_amg;
35340     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35341 
35342 -- Begin fix for Bug # 4323969.
35343 
35344    FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35345                              , p_data   =>  p_msg_data);
35346 
35347 -- End fix for Bug # 4323969.
35348 
35349   When OTHERS then
35350     ROLLBACK TO create_dep_pub_amg;
35351     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35352 
35353 -- Begin fix for Bug # 4323969.
35354 
35355    FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35356                              , p_data   =>  p_msg_data);
35357 
35358 -- End fix for Bug # 4323969.
35359 
35360 END Create_Dependency;
35361 
35362 
35363 
35364 PROCEDURE Update_Dependency(
35365   p_api_version_number          IN  NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35366  ,p_commit                      IN  VARCHAR2 := FND_API.G_FALSE
35367  ,p_init_msg_list               IN  VARCHAR2 := FND_API.G_FALSE
35368  ,p_msg_count                   OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
35369  ,p_msg_data                    OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35370  ,p_return_status               OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35371  ,p_pm_product_code             IN  VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35372  ,p_pm_project_reference        IN  VARCHAR2
35373  ,p_pa_project_id       IN  NUMBER
35374  ,p_structure_version_id        IN  NUMBER
35375  ,p_pm_task_reference           IN  VARCHAR2
35376  ,p_pa_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35377  ,p_pm_pred_reference           IN  VARCHAR2
35378  ,p_pa_pred_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35379  ,p_type                        IN  VARCHAR2 := 'FS'
35380  ,p_lag_days                    IN  NUMBER   := 0
35381  ,p_comments                    IN  VARCHAR2 := NULL
35382 )
35383 IS
35384   l_return_status VARCHAR2(1);
35385   l_project_id  NUMBER;
35386   l_task_ver_id     NUMBER;
35387   l_pred_ver_id     NUMBER;
35388   l_template_flag   VARCHAR2(1);
35389   l_wp_status       VARCHAR2(150);
35390   l_versioning      VARCHAR2(1);
35391   l_record_version_number NUMBER;
35392 
35393 --  CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER)  --Bug 3735799
35394   CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2)  --Bug 3735799
35395   IS
35396   select ppev.element_version_id
35397     from pa_proj_elements ppe, pa_proj_element_versions ppev
35398    where ppe.project_id = c_project_id
35399      and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
35400      and ppe.project_id = ppev.project_Id
35401      and ppe.proj_element_id = ppev.proj_element_id
35402      and ppev.parent_structure_version_id = p_structure_version_id;
35403 
35404   CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER)  --Bug 3880403
35405   IS
35406   select ppev.element_version_id
35407     from pa_proj_elements ppe, pa_proj_element_versions ppev
35408    where ppe.project_id = c_project_id
35409      and ppe.proj_element_id = c_task_id
35410      and ppe.project_id = ppev.project_Id
35411      and ppe.proj_element_id = ppev.proj_element_id
35412      and ppev.parent_structure_version_id = p_structure_version_id;
35413 
35414   CURSOR get_template_flag(c_project_id NUMBER)
35415   IS
35416   select template_flag
35417     from pa_projects_all
35418    where project_id = c_project_id;
35419 
35420   CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
35421   IS
35422   select STATUS_CODE
35423     from pa_proj_elem_ver_structure
35424    where project_id = c_project_id
35425      and element_version_id = c_structure_version_id;
35426 
35427   CURSOR get_rvn(c_id_from NUMBER, c_id_to NUMBER) IS
35428       SELECT record_version_number
35429         FROM pa_object_relationships
35430        WHERE object_id_to1 = c_id_to
35431          AND object_id_from1 = c_id_from
35432          AND relationship_type = 'D';
35433 BEGIN
35434   savepoint update_dep_pub_amg;
35435 
35436   IF FND_API.TO_BOOLEAN( p_init_msg_list )
35437   THEN
35438     FND_MSG_PUB.Initialize;
35439   END IF;
35440 
35441   --get project id
35442   PA_PROJECT_PVT.Convert_pm_projref_to_id
35443   (        p_pm_project_reference =>      p_pm_project_reference
35444         ,  p_pa_project_id     =>      p_pa_project_id
35445         ,  p_out_project_id    =>      l_project_id
35446         ,  p_return_status     =>      l_return_status
35447    );
35448 
35449    IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35450      RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35451    ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35452      RAISE  FND_API.G_EXC_ERROR;
35453    END IF;
35454 --
35455    --Bug 3769089
35456    If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
35457       If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
35458            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35459                                 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35460 
35461            RAISE FND_API.G_EXC_ERROR;
35462       End If;
35463    Else
35464       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35465                            p_msg_name => 'PA_INV_PROJECT_ID');
35466       RAISE FND_API.G_EXC_ERROR;
35467    End If;
35468 --
35469 --
35470    --check if structure version can be modified
35471    OPEN get_template_flag(l_project_id);
35472    FETCH get_template_flag into l_template_flag;
35473    CLOSE get_template_flag;
35474 
35475    l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
35476 
35477    --if template, then ok
35478    IF l_template_flag = 'N' THEN
35479      --project, check if versioning is enabled
35480      --            ok if versioning is disabled
35481      IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
35482        --            if versioning enabled, ok if working
35483        OPEN get_workplan_status(l_project_id, p_structure_version_id);
35484        FETCH get_workplan_status into l_wp_status;
35485        CLOSE get_workplan_status;
35486        IF l_wp_status <> 'STRUCTURE_WORKING' THEN
35487          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35488                               p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
35489          RAISE FND_API.G_EXC_ERROR;
35490        END IF;
35491      ELSE
35492        IF (l_versioning IS NULL) THEN
35493          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35494                               p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
35495          RAISE FND_API.G_EXC_ERROR;
35496        END IF;
35497      END IF;
35498    END IF;
35499 
35500    --get task id
35501    IF p_pm_task_reference IS NOT NULL THEN
35502      open get_task_ver_id(l_project_id, p_pm_task_reference);
35503      Fetch get_task_ver_id into l_task_ver_id;
35504      --Bug 3769089
35505      IF get_task_ver_id%NOTFOUND THEN
35506          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35507                               p_msg_name => 'PA_PS_INV_TASK_ID');
35508          CLOSE get_task_ver_id;
35509          RAISE FND_API.G_EXC_ERROR;
35510      END IF;
35511      CLOSE get_task_ver_id;
35512    END IF;
35513 
35514    --bug 3880403
35515    IF p_pm_task_reference IS NULL OR l_task_ver_id IS NULL THEN
35516      --need to get id using task id
35517      OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
35518      FETCH get_task_Ver_id2 into l_task_ver_id;
35519      IF get_task_ver_id2%NOTFOUND THEN
35520          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35521                               p_msg_name => 'PA_PS_INV_TASK_ID');
35522          CLOSE get_task_ver_id2;
35523          RAISE FND_API.G_EXC_ERROR;
35524      END IF;
35525      CLOSE get_task_ver_id2;
35526    END IF;
35527    --end bug 3880403
35528 
35529 
35530    --get predecessor id
35531    IF (p_pm_pred_reference IS NOT NULL) THEN
35532      open get_task_ver_id(l_project_id, p_pm_pred_reference);
35533      Fetch get_task_ver_id into l_pred_ver_id;
35534      --Bug 3769089
35535      IF get_task_ver_id%NOTFOUND THEN
35536          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35537                               p_msg_name => 'PA_PS_INV_TASK_ID');
35538          CLOSE get_task_ver_id;
35539          RAISE FND_API.G_EXC_ERROR;
35540      END IF;
35541      CLOSE get_task_ver_id;
35542    END IF;
35543 
35544    --bug 3880403
35545    IF p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL THEN
35546      --need to get id using task id
35547      OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
35548      FETCH get_task_Ver_id2 into l_pred_ver_id;
35549      IF get_task_ver_id2%NOTFOUND THEN
35550          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35551                               p_msg_name => 'PA_PS_INV_TASK_ID');
35552          CLOSE get_task_ver_id2;
35553          RAISE FND_API.G_EXC_ERROR;
35554      END IF;
35555      CLOSE get_task_ver_id2;
35556    END IF;
35557    --end bug 3880403
35558 
35559 --
35560    --get record version number
35561    open get_rvn(l_task_ver_id, l_pred_ver_id);
35562    FETCH get_rvn into l_record_version_number;
35563    --Bug 3769047
35564    IF get_rvn%NOTFOUND THEN
35565          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35566                               p_msg_name => 'PA_PS_INV_DEP_ID');
35567          RAISE FND_API.G_EXC_ERROR;
35568    END IF;
35569    CLOSE get_rvn;
35570 --
35571    --call existing update dependency API to create intra dependency
35572    PA_RELATIONSHIP_PVT.Update_Dependency(
35573              p_calling_module                   => 'SELF_SERVICE'
35574             ,p_task_version_id                  => l_pred_ver_id
35575             ,p_src_task_version_id              => l_task_ver_id
35576             ,p_type                             => p_type
35577             ,p_lag_days                         => p_lag_days
35578             ,p_comments                         => p_comments
35579             ,p_record_version_number            => l_record_version_number
35580             ,x_return_status                    => p_return_status
35581             ,x_msg_count                        => p_msg_count
35582             ,x_msg_data                         => p_msg_data
35583             );
35584 
35585   IF p_msg_count > 0 THEN
35586     RAISE FND_API.G_EXC_ERROR;
35587   END IF;
35588 
35589   p_return_status := FND_API.G_RET_STS_SUCCESS;
35590 
35591 EXCEPTION
35592   WHEN FND_API.G_EXC_ERROR THEN
35593     ROLLBACK TO update_dep_pub_amg;
35594     p_return_status := FND_API.G_RET_STS_ERROR;
35595 
35596     -- 4537865 Included same fix as 4323969.
35597     FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35598                           , p_data   =>  p_msg_data);
35599 
35600   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35601     ROLLBACK TO update_dep_pub_amg;
35602     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35603 
35604     -- 4537865 : Included same fix as 4323969.
35605     FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35606                           , p_data   =>  p_msg_data);
35607 
35608   When OTHERS then
35609     ROLLBACK TO update_dep_pub_amg;
35610     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35611     IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35612 
35613       FND_MSG_PUB.add_exc_msg
35614       (p_pkg_name     => G_PKG_NAME
35615       , p_procedure_name => 'Update_Dependency');
35616 
35617     END IF;
35618    -- 4537865 : Included same fix as 4323969.
35619     FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35620                           , p_data   =>  p_msg_data);
35621 END Update_Dependency;
35622 
35623 
35624 
35625 PROCEDURE Delete_Dependency(
35626   p_api_version_number          IN  NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35627  ,p_commit                      IN  VARCHAR2 := FND_API.G_FALSE
35628  ,p_init_msg_list               IN  VARCHAR2 := FND_API.G_FALSE
35629  ,p_msg_count                   OUT NOCOPY NUMBER  /*Added the nocopy check for 4537865 */
35630  ,p_msg_data                    OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
35631  ,p_return_status               OUT NOCOPY VARCHAR2  /*Added the nocopy check for 4537865 */
35632  ,p_pm_product_code     IN  VARCHAR2
35633  ,p_pm_project_reference    IN  VARCHAR2
35634  ,p_pa_project_id       IN  NUMBER
35635  ,p_structure_version_id        IN  NUMBER
35636  ,p_pm_task_reference           IN  VARCHAR2
35637  ,p_pa_task_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35638  ,p_pm_pred_reference           IN  VARCHAR2
35639  ,p_pa_pred_id                  IN  NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35640 )
35641 IS
35642   l_msg_count       NUMBER;
35643   l_msg_data        VARCHAR2(250);
35644   l_return_status VARCHAR2(1);
35645   l_project_id  NUMBER;
35646   l_task_ver_id     NUMBER;
35647   l_pred_ver_id     NUMBER;
35648   l_template_flag   VARCHAR2(1);
35649   l_wp_status       VARCHAR2(150);
35650   l_versioning      VARCHAR2(1);
35651   l_record_version_number NUMBER;
35652   l_obj_rel_id      NUMBER;
35653 
35654 --  CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER)   --Bug 3735799
35655   CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2)   --Bug 3735799
35656   IS
35657   select ppev.element_version_id
35658     from pa_proj_elements ppe, pa_proj_element_versions ppev
35659    where ppe.project_id = c_project_id
35660      and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
35661      and ppe.project_id = ppev.project_Id
35662      and ppe.proj_element_id = ppev.proj_element_id
35663      and ppev.parent_structure_version_id = p_structure_version_id;
35664 
35665   CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER)  --Bug 3880403
35666   IS
35667   select ppev.element_version_id
35668     from pa_proj_elements ppe, pa_proj_element_versions ppev
35669    where ppe.project_id = c_project_id
35670      and ppe.proj_element_id = c_task_id
35671      and ppe.project_id = ppev.project_Id
35672      and ppe.proj_element_id = ppev.proj_element_id
35673      and ppev.parent_structure_version_id = p_structure_version_id;
35674 
35675   CURSOR get_template_flag(c_project_id NUMBER)
35676   IS
35677   select template_flag
35678     from pa_projects_all
35679    where project_id = c_project_id;
35680 
35681   CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
35682   IS
35683   select STATUS_CODE
35684     from pa_proj_elem_ver_structure
35685    where project_id = c_project_id
35686      and element_version_id = c_structure_version_id;
35687 
35688   CURSOR get_rvn(c_id_from NUMBER, c_id_to NUMBER) IS
35689       SELECT object_relationship_id, record_version_number
35690         FROM pa_object_relationships
35691        WHERE object_id_to1 = c_id_to
35692          AND object_id_from1 = c_id_from
35693          AND relationship_type = 'D';
35694 BEGIN
35695   savepoint delete_dep_pub_amg;
35696 
35697   IF FND_API.TO_BOOLEAN( p_init_msg_list )
35698   THEN
35699     FND_MSG_PUB.Initialize;
35700   END IF;
35701 
35702   --get project id
35703   PA_PROJECT_PVT.Convert_pm_projref_to_id
35704   (        p_pm_project_reference =>      p_pm_project_reference
35705         ,  p_pa_project_id     =>      p_pa_project_id
35706         ,  p_out_project_id    =>      l_project_id
35707         ,  p_return_status     =>      l_return_status
35708    );
35709 
35710    IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35711      RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
35712    ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35713      RAISE  FND_API.G_EXC_ERROR;
35714    END IF;
35715 --
35716    --Bug 3769079
35717    If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
35718       If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
35719            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35720                                 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35721            RAISE FND_API.G_EXC_ERROR;
35722       End If;
35723    Else
35724       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35725                            p_msg_name => 'PA_INV_PROJECT_ID');
35726       RAISE FND_API.G_EXC_ERROR;
35727    End If;
35728 --
35729 --
35730    --check if structure version can be modified
35731    OPEN get_template_flag(l_project_id);
35732    FETCH get_template_flag into l_template_flag;
35733    CLOSE get_template_flag;
35734 
35735    l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
35736 
35737    --if template, then ok
35738    IF l_template_flag = 'N' THEN
35739      --project, check if versioning is enabled
35740      --            ok if versioning is disabled
35741      IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
35742        --            if versioning enabled, ok if working
35743        OPEN get_workplan_status(l_project_id, p_structure_version_id);
35744        FETCH get_workplan_status into l_wp_status;
35745        CLOSE get_workplan_status;
35746        IF l_wp_status <> 'STRUCTURE_WORKING' THEN
35747          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35748                               p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
35749          RAISE FND_API.G_EXC_ERROR;
35750        END IF;
35751      ELSE
35752        IF (l_versioning IS NULL) THEN
35753          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35754                               p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
35755          RAISE FND_API.G_EXC_ERROR;
35756        END IF;
35757      END IF;
35758    END IF;
35759 
35760    --get task id
35761    IF (p_pm_task_reference IS NOT NULL) THEN
35762      open get_task_ver_id(l_project_id, p_pm_task_reference);
35763      Fetch get_task_ver_id into l_task_ver_id;
35764      --Bug 3769079
35765      IF get_task_ver_id%NOTFOUND THEN
35766          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35767                               p_msg_name => 'PA_PS_INV_TASK_ID');
35768          CLOSE get_task_ver_id;
35769          RAISE FND_API.G_EXC_ERROR;
35770      END IF;
35771      CLOSE get_task_ver_id;
35772    END IF;
35773 
35774    --bug 3880403
35775    IF p_pm_task_reference IS NULL OR l_task_ver_id IS NULL THEN
35776      --need to get id using task id
35777      OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
35778      FETCH get_task_Ver_id2 into l_task_ver_id;
35779      IF get_task_ver_id2%NOTFOUND THEN
35780          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35781                               p_msg_name => 'PA_PS_INV_TASK_ID');
35782          CLOSE get_task_ver_id2;
35783          RAISE FND_API.G_EXC_ERROR;
35784      END IF;
35785      CLOSE get_task_ver_id2;
35786    END IF;
35787    --end bug 3880403
35788 --
35789    --get predecessor id
35790    IF (p_pm_pred_reference IS NOT NULL) THEN
35791      open get_task_ver_id(l_project_id, p_pm_pred_reference);
35792      Fetch get_task_ver_id into l_pred_ver_id;
35793      --Bug 3769079
35794      IF get_task_ver_id%NOTFOUND THEN
35795          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35796                               p_msg_name => 'PA_PS_INV_TASK_ID');
35797          CLOSE get_task_ver_id;
35798          RAISE FND_API.G_EXC_ERROR;
35799      END IF;
35800      CLOSE get_task_ver_id;
35801    END IF;
35802 
35803    --bug 3880403
35804    IF p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL THEN
35805      --need to get id using task id
35806      OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
35807      FETCH get_task_Ver_id2 into l_pred_ver_id;
35808      IF get_task_ver_id2%NOTFOUND THEN
35809          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35810                               p_msg_name => 'PA_PS_INV_TASK_ID');
35811          CLOSE get_task_ver_id2;
35812          RAISE FND_API.G_EXC_ERROR;
35813      END IF;
35814      CLOSE get_task_ver_id2;
35815    END IF;
35816    --end bug 3880403
35817 
35818 
35819    --call existing delete dependency API to create intra dependency
35820    --get record version number
35821    open get_rvn(l_task_ver_id, l_pred_ver_id);
35822    FETCH get_rvn into l_obj_rel_id, l_record_version_number;
35823    --Bug 3769066
35824    IF get_rvn%NOTFOUND THEN
35825          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35826                               p_msg_name => 'PA_PS_INV_DEP_ID');
35827          RAISE FND_API.G_EXC_ERROR;
35828    END IF;
35829    CLOSE get_rvn;
35830 
35831     PA_RELATIONSHIP_PVT.Delete_Dependency(
35832              p_calling_module                   => 'SELF_SERVICE'
35833             ,p_object_relationship_id           => l_obj_rel_id
35834             ,x_return_status                    => l_return_status
35835             ,x_msg_count                        => l_msg_count
35836             ,x_msg_data                         => l_msg_data
35837             );
35838 
35839   -- 4537865 : Check has to be made against l_msg_count ,not p_msg_count
35840   -- IF p_msg_count > 0 THEN
35841   IF l_msg_count > 0 THEN
35842     RAISE FND_API.G_EXC_ERROR;
35843   END IF;
35844 
35845   p_return_status := FND_API.G_RET_STS_SUCCESS;
35846 EXCEPTION
35847 
35848   WHEN FND_API.G_EXC_ERROR THEN
35849     ROLLBACK TO delete_dep_pub_amg;
35850     p_return_status := FND_API.G_RET_STS_ERROR;
35851     -- 4537865 Included same fix as 4323969.
35852     FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35853     , p_data   =>  p_msg_data);
35854   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35855     ROLLBACK TO delete_dep_pub_amg;
35856     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35857   -- 4537865 Included same fix as 4323969.
35858   FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35859   , p_data   =>  p_msg_data);
35860   When OTHERS then
35861     ROLLBACK TO delete_dep_pub_amg;
35862     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35863 
35864     IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35865 
35866       FND_MSG_PUB.add_exc_msg
35867       (p_pkg_name     => G_PKG_NAME
35868       , p_procedure_name => 'Delete_Dependency');
35869 
35870     END IF;
35871   -- 4537865 Included same fix as 4323969.
35872   FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
35873   , p_data   =>  p_msg_data);
35874 
35875 END Delete_Dependency;
35876 --
35877 --
35878 -- Begin fix for Bug # 4096218.
35879 
35880 PROCEDURE check_task_mfd
35881 ( p_api_version_number          IN      NUMBER
35882  , p_init_msg_list              IN      VARCHAR2        := FND_API.G_FALSE
35883  , p_return_status              OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
35884  , p_msg_count                  OUT NOCOPY     NUMBER /*Added the nocopy check for 4537865 */
35885  , p_msg_data                   OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
35886  , p_project_id                 IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35887  , p_pm_project_reference       IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35888  , p_task_id                    IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35889  , p_pm_task_reference          IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35890  , p_task_version_id            IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35891  , p_structure_type             IN      VARCHAR2        := 'FINANCIAL'
35892  , p_perform_check_delete_task_ok IN    VARCHAR2        := 'N'
35893  , p_check_task_mfd_flag        OUT NOCOPY    VARCHAR2 /*Added the nocopy check for 4537865 */
35894 )
35895 IS
35896 
35897 cursor cur_task_status(c_project_id NUMBER, c_task_id NUMBER, c_task_version_id NUMBER)
35898 is
35899 select task_unpub_ver_status_code,parent_structure_version_id
35900 from pa_proj_element_versions ppev
35901 where ppev.project_id = c_project_id
35902 and ppev.proj_element_id = c_task_id
35903 and ppev.element_version_id = c_task_version_id;
35904 
35905 cursor c_valid_task_id(c_task_id NUMBER,c_project_id NUMBER)
35906 is
35907 select 'Y'
35908 from pa_proj_elements
35909 where proj_element_id = c_task_id
35910   and project_id = c_project_id ;
35911 
35912 cursor get_task_ver_id(c_task_id NUMBER)
35913 is
35914 select element_version_id from pa_proj_element_versions
35915 where proj_element_id = c_task_id ;
35916 
35917  -- Begin fix for Bug # 4096218 : 09-AUG-2005.
35918 
35919  -- Modified cursor to return the element_number if the task exists
35920  -- in a published workplan structure version. This cursor will
35921  -- work for both split and shared projects.
35922  /*
35923 
35924  CURSOR   l_amg_task_csr
35925       (p_pa_task_id pa_tasks.task_id%type)
35926    IS
35927    SELECT   task_number
35928    FROM     pa_tasks p
35929    WHERE p.task_id = p_pa_task_id;
35930 
35931   */
35932 
35933   -- The Following cursor has been commented for Performance Bug 4878722 SQL ID 14909071
35934   -- The purpose of this cursor per usage in this API is to verify whether the task exists in any of the previously published versions
35935   -- cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35936   -- select ppe.element_number
35937   -- from pa_proj_elements ppe, pa_proj_elem_ver_structure ppevs
35938   -- where ppe.proj_element_id = p_pa_task_id
35939   -- and ppe.parent_structure_id = ppevs.proj_element_id
35940   -- and ppevs.status_code = 'STRUCTURE_PUBLISHED';
35941 
35942   -- The Following cursor has been re-written for Performance Bug 4878722 SQL ID 14909071
35943 
35944 /*
35945   Bug Fix 5263426
35946 
35947   Issue:
35948 
35949    After succesful deletion of a task and the publishing of the structure, a new task is added to the current working version.
35950    And that the task was deleted and the MSP was returning a message saying 'Mark this task for deletion?'. Ideally this
35951    should be used for tasks which are present in the published versions as well. Only those tasks will be marked for deletion
35952    and during publishing those marked tasks will be deleted. All the other tasks which dont have any transactions and are not
35953    present in the published versions should be deleted right away and the MSP should not show any message.
35954 
35955   Analysis:
35956 
35957    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.
35958    The reason is due to the bug in the cursor l_amg_task_csr.
35959    This SQL is starting with an element id i.e the task id and getting the parent sturcture id and looking for that parent
35960    structure id's published status in other tables.
35961 
35962    Ideally this is ignoring the versions of a strucutre. Even if one structure version is published the above SQL will always
35963    find a record in the structures table with status published irrespective of the fact that the task was added to a working
35964    version and same is not in a published version.
35965 
35966  Solution:
35967    The correct way of doing this is to get the task status directly from the element versions table itself as shown below
35968    and modify the logic to use the above column value.
35969 
35970 
35971   cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35972   select 1 from dual
35973   where exists (select  ppe.element_number
35974   from pa_proj_elements ppe, pa_proj_elem_ver_structure ppevs
35975   where ppe.proj_element_id = p_pa_task_id
35976   and ppe.object_type = 'PA_TASKS'
35977   and ppe.parent_structure_id = ppevs.proj_element_id
35978   and ppe.project_id = ppevs.project_id
35979   and ppevs.status_code = 'STRUCTURE_PUBLISHED');
35980 */
35981 
35982   cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35983   select 1 from dual
35984   where exists(
35985   select pev.task_unpub_ver_status_code
35986   from  pa_proj_element_versions pev
35987   where pev.proj_element_id = p_pa_task_id
35988   and   pev.object_type = 'PA_TASKS'
35989   and pev.task_unpub_ver_status_code in ('PUBLISHED','TO_BE_DELETED'));
35990 -- End fix for Bug  5263429
35991 -- End fix for Bug # 4096218 : 09-AUG-2005.
35992 
35993 l_dummy varchar2(1);
35994 l_derive varchar2(1);
35995 
35996 l_project_id NUMBER := NULL;
35997 
35998 l_task_version_id NUMBER := NULL;
35999 
36000 l_task_id NUMBER := NULL;
36001 
36002 l_structure_version_id NUMBER := NULL;
36003 
36004 l_task_status VARCHAR2(30) := NULL;
36005 
36006 l_check_task_mfd_flag VARCHAR2(1) := NULL;
36007 
36008 l_api_name CONSTANT VARCHAR2(30) := 'check_task_mfd';
36009 
36010 l_return_status VARCHAR2(1) := NULL;
36011 
36012 l_msg_count NUMBER := NULL; -- 4096218 : Issues found during Unit Testing
36013 
36014 l_msg_data VARCHAR2(2000) := NULL;  -- 4096218 : This was declared as size 30 ,causing unexpected error.Corrected it
36015 
36016 
36017 l_delete_task_ok_flag VARCHAR2(1);
36018 
36019 l_wp_str_exists VARCHAR2(1);
36020 
36021 l_versioning_enabled VARCHAR2(1);
36022 
36023 l_pub_ver_exists VARCHAR2(1);
36024 
36025 l_amg_task_number       NUMBER; -- Datatype changed for Bug 4878722
36026 BEGIN
36027 
36028     IF NOT FND_API.Compatible_API_Call (g_api_version_number
36029                                         , p_api_version_number
36030                                         , l_api_name
36031                                         , G_PKG_NAME) THEN
36032 
36033         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36034 
36035         END IF;
36036 
36037     IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
36038 
36039         FND_MSG_PUB.initialize;
36040 
36041     END IF;
36042 
36043     p_return_status := FND_API.G_RET_STS_SUCCESS;
36044 
36045     -- Initialize output flag.
36046 
36047     l_check_task_mfd_flag := 'N';
36048         l_delete_task_ok_flag := 'N';
36049         l_versioning_enabled := 'N' ;
36050         l_pub_ver_exists     :='N' ;
36051 
36052     -- Convert project reference to id.
36053 
36054         PA_PROJECT_PVT.Convert_pm_projref_to_id
36055         (p_pm_project_reference         =>      p_pm_project_reference
36056          , p_pa_project_id              =>      p_project_id
36057          , p_out_project_id             =>      l_project_id
36058          , p_return_status              =>      l_return_status);
36059 
36060         IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36061 
36062                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
36063 
36064         ELSIF  (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
36065 
36066                 RAISE  FND_API.G_EXC_ERROR;
36067         END IF;
36068 
36069     -- If task id is passed ,verify whether it is a valid value
36070         IF p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36071         THEN
36072 
36073             open c_valid_task_id(p_task_id,l_project_id) ;
36074         fetch c_valid_task_id into l_dummy;
36075         close c_valid_task_id ;
36076 
36077         IF nvl(l_dummy,'N') = 'Y' THEN
36078                    l_task_id := p_task_id ;
36079             -- Task ID exists and its a valid one.
36080         ELSE
36081         -- Try to derive task_id from its reference
36082            l_derive := 'Y';
36083         END IF;
36084 
36085         END IF;
36086 
36087         IF (p_task_id is NULL AND p_pm_task_reference IS NOT NULL
36088            AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
36089            OR nvl(l_derive,'N') = 'Y'
36090         THEN
36091     -- Convert task reference to id.
36092 
36093     PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
36094     (p_pa_project_id    =>  l_project_id
36095      , p_pa_task_id     =>  p_task_id
36096      , p_pm_task_reference  =>  p_pm_task_reference
36097      , p_out_task_id        =>  l_task_id
36098      , p_return_status  =>  l_return_status);
36099 
36100 
36101     IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36102 
36103         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
36104 
36105     ELSIF  (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
36106 
36107         RAISE  FND_API.G_EXC_ERROR;
36108     END IF;
36109 
36110     END IF;
36111     --get structure_version_id and task_version_id
36112 
36113         PA_PROJ_TASK_STRUC_PUB.get_version_ids
36114         (p_task_id                 =>     l_task_id
36115          , p_task_version_id       =>     p_task_version_id
36116          , p_project_id            =>     l_project_id
36117          , x_structure_version_id  =>     l_structure_version_id
36118          , x_task_version_id       =>     l_task_version_id);
36119 --------------------------------------------------------------------------------------------------------------------------------
36120        -- If p_perform_check_delete_task_ok is "Y" , then we need to call the API
36121        -- pa_project_pub.Check_Delete_Task_OK
36122 
36123       IF p_perform_check_delete_task_ok ='Y' THEN
36124         pa_project_pub.Check_Delete_Task_OK
36125         (
36126           p_api_version_number => p_api_version_number
36127           -- Start OUT params
36128         , p_return_status   => l_return_status
36129         , p_msg_count       => l_msg_count
36130         , p_msg_data        => l_msg_data
36131           -- End OUT params
36132         , p_project_id      => l_project_id
36133         , p_pm_project_reference  => p_pm_project_reference
36134         , p_task_id         => l_task_id
36135         , p_pm_task_reference     => p_pm_task_reference
36136         , p_structure_type        => p_structure_type
36137         , p_task_version_id       => l_task_version_id
36138         , p_delete_task_ok_flag   => l_delete_task_ok_flag -- OUT param
36139         );
36140         IF l_return_status  = FND_API.G_RET_STS_UNEXP_ERROR THEN
36141 
36142                 RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
36143 
36144         /* Commented because of Issue found during Unit testing
36145            In Check_Delete_Task_OK ,already message has been retrieved and
36146            Hence ,If we raise again here ,In this API ,it wont be able to find any msg in stack now
36147            thereby returning empty message
36148 
36149            The commented check corresponds to return status 'E' check .It will be 'E' if its nt
36150            allowed to delete the task. So, Just set the OUT params appropriately
36151            and return
36152 
36153         ELSIF  (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
36154 
36155                 RAISE  FND_API.G_EXC_ERROR;
36156         */
36157         END IF;
36158 
36159         IF l_delete_task_ok_flag = 'N' THEN
36160 
36161              -- Its not Ok to delete this task,so skip further steps and just return with 'N'
36162              l_check_task_mfd_flag := 'N';
36163 
36164         ELSIF l_delete_task_ok_flag = 'Y' THEN
36165 
36166              -- Its Ok to delete this task , Check whether it can be deleted immediately (l_check_task_mfd_flag = 'Y')
36167              -- (Or) it has to be marked for deletion. (l_check_task_mfd_flag = 'M')
36168 
36169              open cur_task_status(l_project_id, l_task_id, l_task_version_id);
36170              fetch cur_task_status into l_task_status,l_structure_version_id;
36171              close cur_task_status;
36172 
36173              open l_amg_task_csr(l_task_id );
36174              fetch l_amg_task_csr INTO l_amg_task_number;
36175              close l_amg_task_csr;
36176 
36177              l_wp_str_exists := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_project_id );
36178              l_versioning_enabled := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id);
36179              l_pub_ver_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
36180 
36181              -- If this passed task belongs to a Split - Fin. Only structure
36182              IF nvl(l_wp_str_exists,'N') = 'N'
36183                 AND (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id, 'FINANCIAL') = 'Y')
36184              THEN
36185                  -- Its ok to delete this task
36186                  l_check_task_mfd_flag := 'Y' ;
36187             -- Begin Bug 9480442
36188             -- Logic to handle the deletion of task from Financial Plans in a project that also contains WBS(NSTBM structure projects)
36189             ELSIF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id,'FINANCIAL') = 'Y') AND NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id),' ') = 'SPLIT_MAPPING'
36190               THEN
36191             l_check_task_mfd_flag := 'Y' ;
36192              -- End Bug 9480442
36193              -- If this passed task belongs to a WP structure (be it shared or be it split)
36194              ELSIF  PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id,'WORKPLAN') = 'Y'
36195              THEN
36196                  IF l_versioning_enabled = 'Y'
36197                     AND l_pub_ver_exists = 'Y'
36198                  THEN
36199                      IF l_amg_task_number IS NULL -- It means ,task is only in current working version,not in any previous pub. versions
36200                      THEN
36201                         -- It can be deleted, there is no need to mark it for deletion.
36202                         l_check_task_mfd_flag := 'Y';
36203                      ELSE -- Task exists in prior published version and it has entry in pa_tasks.
36204                         -- So, Mark it for deletion ,so that it can be deleted in publishing flow
36205 
36206                         /* This API call marks the task for deletion in OP
36207                         PA_TASK_PVT1.update_task_ver_delete_status(
36208                          p_task_version_id => p_task_version_id
36209                          ,x_return_status => l_return_status
36210                          ,x_msg_count => x_msg_count
36211                          ,x_msg_data => x_msg_data);
36212                         */
36213 
36214                         l_check_task_mfd_flag := 'M' ;
36215 
36216                      END IF;
36217                  ELSIF l_versioning_enabled = 'Y' and l_pub_ver_exists = 'N'
36218                  THEN
36219                         -- Versioning Enabled , But there is no published version so far .So,This is the Working version
36220                         -- So,its ok to delete this task.
36221                         l_check_task_mfd_flag := 'Y';
36222                  ELSIF l_versioning_enabled = 'N'
36223                  THEN
36224                         -- Versioning Disabled Case , Its ok to delete this task.
36225                         l_check_task_mfd_flag := 'Y';
36226                  END IF;
36227              END IF;
36228 
36229         END IF; -- End If for l_delete_task_ok_flag = 'Y'
36230 
36231       ELSE   -- So, Now the case if p_perform_check_delete_task_ok ='N'
36232 
36233         -- If this flag p_perform_check_delete_task_ok is passed as 'N' ,it means just we need to check
36234         -- whether task is marked for deletion or not in Oracle Projects.
36235         -- Return 'M' if marked for delete
36236 
36237 
36238     -- Check for task status.
36239 
36240     open cur_task_status(l_project_id, l_task_id, l_task_version_id);
36241     fetch cur_task_status into l_task_status,l_structure_version_id;
36242     close cur_task_status;
36243 
36244     if l_task_status = 'TO_BE_DELETED' then
36245 
36246        l_check_task_mfd_flag := 'M';
36247         else
36248            l_check_task_mfd_flag := 'N';
36249     end if;
36250 
36251       END IF;
36252 --------------------------------------------------------------------------------------------------------------------------------
36253     -- Set output variables.
36254 
36255     p_check_task_mfd_flag := l_check_task_mfd_flag;
36256 
36257     p_return_status := l_return_status;
36258     p_msg_count := l_msg_count;
36259     p_msg_data  := l_msg_data;
36260 
36261 EXCEPTION
36262 
36263     WHEN FND_API.G_EXC_ERROR THEN
36264 
36265             p_return_status := FND_API.G_RET_STS_ERROR;
36266 
36267         -- 4537865
36268         p_check_task_mfd_flag := NULL ;
36269 
36270             FND_MSG_PUB.Count_And_Get
36271             (   p_count     =>  p_msg_count ,
36272                 p_data      =>  p_msg_data  );
36273 
36274     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
36275 
36276             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36277 
36278         -- 4537865
36279         p_check_task_mfd_flag := NULL ;
36280 
36281             FND_MSG_PUB.Count_And_Get
36282             (   p_count     =>  p_msg_count ,
36283                 p_data      =>  p_msg_data  );
36284 
36285     WHEN OTHERS THEN
36286 
36287             p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36288 
36289        p_check_task_mfd_flag := NULL ; -- 4537865
36290 
36291             IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
36292 
36293                 FND_MSG_PUB.add_exc_msg
36294                 (p_pkg_name     => G_PKG_NAME
36295                  , p_procedure_name => l_api_name);
36296 
36297             END IF;
36298 
36299             FND_MSG_PUB.Count_And_Get
36300             (p_count        =>  p_msg_count
36301              , p_data       =>  p_msg_data);
36302 
36303 END check_task_mfd;
36304 
36305 
36306 -- API Name         : get_deleted_tasks_from_op
36307 --
36308 -- Parameters       :
36309 --
36310 -- x_deleted_task_ver_ids  OUT PA_NUM_1000_NUM
36311 -- x_return_status             OUT VARCHAR2
36312 -- x_msg_count                 OUT  NUMBER
36313 -- x_msg_data                  OUT VARCHAR2
36314 --
36315 -- HISTORY
36316 -- Created by avaithia for Bug 4096218
36317 -- 29-Jun-2005                          Changed out param name from x_deleted_task_ver_ids to x_deleted_task_ids
36318 --                  Changed global var name from G_DELETED_TASK_VER_IDS_FROM_OP to  G_DELETED_TASK_IDS_FROM_OP
36319 --
36320 -- Notes About the API :-
36321 -- This API is supposed to be calling only in AMG/MSP context.
36322 --
36323 -- This is not a standalone API .This API will produce useful output only if its called after WP publishing flow
36324 --
36325 -- 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
36326 -- in the Publish_Structure API (PAXSTCVB.pls) ONLY if p_calling_module in that API is 'AMG'
36327 
36328 PROCEDURE get_deleted_tasks_from_op
36329 (
36330  x_deleted_task_ids      OUT NOCOPY PA_NUM_1000_NUM,/*4537865 : Added nocopy hint manually */
36331  x_return_status             OUT NOCOPY VARCHAR2, /*4537865 : Added nocopy hint manually */
36332  x_msg_count                 OUT NOCOPY  NUMBER, /*4537865 : Added nocopy hint manually */
36333  x_msg_data                  OUT NOCOPY VARCHAR2 /*4537865 : Added nocopy hint manually */
36334 )
36335 IS
36336 BEGIN
36337     x_msg_count := 0;
36338     x_return_status := FND_API.G_RET_STS_SUCCESS;
36339     x_msg_data := NULL;
36340     x_deleted_task_ids := PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP;
36341 EXCEPTION
36342         WHEN OTHERS THEN
36343                         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36344                         IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
36345 
36346                                 FND_MSG_PUB.add_exc_msg
36347                                 (p_pkg_name             => G_PKG_NAME
36348                                  , p_procedure_name     => 'get_deleted_tasks_from_op');
36349 
36350                         END IF;
36351 
36352                         FND_MSG_PUB.Count_And_Get
36353                         (p_count                =>      x_msg_count
36354                          , p_data               =>      x_msg_data);
36355 
36356 END get_deleted_tasks_from_op;
36357 
36358 -- End fix for Bug # 4096218.
36359 
36360 
36361 -- -------------
36362 -- Bug 5436264 : AMG API FOR PROCESS STRUCTURE UPDATES
36363 
36364 PROCEDURE process_structure_updates
36365 (p_api_version_number           IN      NUMBER          := 1.0
36366 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_FALSE
36367 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
36368 , p_return_status               OUT     NOCOPY VARCHAR2
36369 , p_msg_count                   OUT     NOCOPY NUMBER
36370 , p_msg_data                    OUT     NOCOPY VARCHAR2
36371 , p_structure_version_id        IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36372 , p_pa_project_id               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36373 , p_pm_project_reference        IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36374 , p_process_mode                IN      VARCHAR2        := 'ONLINE'
36375 , p_calling_context             IN      VARCHAR2        := 'AMG')
36376 IS
36377 
36378 l_api_name CONSTANT VARCHAR2(30)  := 'process_structure_updates';
36379 l_msg_count         NUMBER;
36380 l_msg_data          VARCHAR2(2000);
36381 l_return_status     VARCHAR2(1);
36382 l_responsibility_id NUMBER := 0;
36383 l_user_id           NUMBER := 0;
36384 l_module_name       VARCHAR2(80);
36385 l_function_allowed  VARCHAR2(1);
36386 
36387 l_project_id        pa_projects.project_id%type;
36388 
36389 l_update_wbs_flag   VARCHAR2(1);
36390 
36391 l_str_ver_id        NUMBER:= null;
36392 l_conc_request_id   NUMBER := null;
36393 l_message_name      VARCHAR2(30) := null;
36394 l_message_type      VARCHAR2(30) := null;
36395 l_process_code  pa_proj_elem_ver_structure.process_code%TYPE; --Bug# 5973460
36396 
36397 BEGIN
36398 
36399 --  Standard begin of API savepoint
36400 
36401     SAVEPOINT process_structure_updates;
36402 
36403 --  Standard call to check for call compatibility
36404 
36405     IF NOT FND_API.Compatible_API_Call ( g_api_version_number   ,
36406                                          p_api_version_number   ,
36407                                          l_api_name             ,
36408                                          g_pkg_name             )
36409     THEN
36410 
36411         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36412 
36413     END IF;
36414 
36415 --  Initialize the message table if requested
36416 
36417     IF FND_API.TO_BOOLEAN( p_init_msg_list )
36418     THEN
36419 
36420         FND_MSG_PUB.initialize;
36421 
36422     END IF;
36423 
36424 --  Set API return status to success
36425 
36426     p_return_status := FND_API.G_RET_STS_SUCCESS;
36427 
36428 
36429 -- Get the project ID
36430   -- Added if clause for Bug 6727014
36431    IF p_calling_context = 'CONC_WRP' then
36432 
36433          l_project_id := p_pa_project_id;
36434 
36435    ELSE
36436 
36437    PA_PROJECT_PVT.Convert_pm_projref_to_id
36438       (        p_pm_project_reference =>      p_pm_project_reference
36439                ,  p_pa_project_id     =>      p_pa_project_id
36440                ,  p_out_project_id    =>      l_project_id
36441                ,  p_return_status     =>      l_return_status
36442       );
36443 
36444    IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36445 
36446            RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
36447 
36448    ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
36449 
36450            RAISE  FND_API.G_EXC_ERROR;
36451    END IF;
36452 
36453    END IF;
36454 
36455    If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id, p_structure_version_id) <> 'Y' THEN
36456            PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
36457                                 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
36458 
36459            RAISE FND_API.G_EXC_ERROR;
36460    End If;
36461 
36462    l_responsibility_id := FND_GLOBAL.Resp_id;
36463    l_user_id           := FND_GLOBAL.User_id;
36464 
36465 
36466    -- As part of enforcing project security, which would determine
36467    -- whether the user has the necessary privileges to update the project
36468    -- need to call the pa_security package
36469 
36470    pa_security.initialize (X_user_id        => l_user_id,
36471                            X_calling_module => l_module_name);
36472 
36473    -- Actions performed using the APIs would be subject to
36474    -- function security. If the responsibility does not allow
36475    -- such functions to be executed, the API should not proceed further
36476    -- since the user does not have access to such functions
36477 
36478    -- Function security procedure check whether user has the
36479    -- privilege to update the project or not
36480 
36481    PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;
36482 
36483    PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36484       (p_api_version_number => p_api_version_number,
36485        p_responsibility_id  => l_responsibility_id,
36486        p_function_name      => 'PA_PM_UPDATE_PROJECT',
36487        p_msg_count          => l_msg_count,
36488        p_msg_data           => l_msg_data,
36489        p_return_status      => l_return_status,
36490        p_function_allowed   => l_function_allowed);
36491 
36492    IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
36493     THEN
36494         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36495 
36496    ELSIF l_return_status = FND_API.G_RET_STS_ERROR
36497    THEN
36498          RAISE FND_API.G_EXC_ERROR;
36499 
36500    END IF;
36501 
36502    IF l_function_allowed = 'N' THEN
36503      pa_interface_utils_pub.map_new_amg_msg
36504        ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
36505         ,p_msg_attribute    => 'CHANGE'
36506         ,p_resize_flag      => 'Y'
36507         ,p_msg_context      => 'GENERAL'
36508         ,p_attribute1       => ''
36509         ,p_attribute2       => ''
36510         ,p_attribute3       => ''
36511         ,p_attribute4       => ''
36512         ,p_attribute5       => '');
36513      p_return_status := FND_API.G_RET_STS_ERROR;
36514      RAISE FND_API.G_EXC_ERROR;
36515    END IF;
36516 
36517 --Bug# 5973460
36518 l_process_code := PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id
36519                                                                      ,p_structure_version_id => p_structure_version_id );
36520 
36521  IF  l_process_code = 'PUE'
36522  THEN
36523      PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
36524                            ,p_msg_name       => 'PA_PS_PUBLISH_ERROR');
36525 
36526      RAISE FND_API.G_EXC_ERROR;
36527  END IF;
36528 --Bug# 5973460
36529 
36530    -- check the process_update_wbs_flag
36531 
36532    l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
36533                                                                        ,p_structure_version_id => p_structure_version_id ) ;
36534 
36535    IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
36536 
36537      PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
36538         p_project_id              => l_project_id
36539         , p_structure_version_id  => p_structure_version_id
36540         , p_context               => 'UPDATE_AMG'
36541         , x_message_name          => l_message_name
36542         , x_message_type          => l_message_type
36543         , x_structure_version_id  => l_str_ver_id
36544         , x_conc_request_id       => l_conc_request_id);
36545 
36546 
36547      IF nvl(l_message_type,'NOT_PROCESS') <> 'PROCESS' THEN
36548 
36549         IF p_process_mode = 'ONLINE' THEN
36550 
36551           PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context      => 'ONLINE_UPDATE'
36552                                                     ,p_project_id           => l_project_id
36553                                                     ,p_structure_version_id => p_structure_version_id
36554                                                     ,x_return_status        => l_return_status
36555                                                     ,x_msg_count            => l_msg_count
36556                                                     ,x_msg_data             => l_msg_data ) ;
36557 
36558           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
36559                THEN
36560                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36561           ELSIF l_return_status = FND_API.G_RET_STS_ERROR
36562                THEN
36563                  RAISE FND_API.G_EXC_ERROR;
36564           END IF;
36565 
36566         ELSIF p_process_mode = 'CONCURRENT' THEN
36567 
36568           PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context       => 'CONC_UPDATE'
36569                                                             ,p_project_id            => l_project_id
36570                                                             ,p_structure_version_id  => p_structure_version_id
36571                                                             ,x_return_status         => l_return_status
36572                                                             ,x_msg_count             => l_msg_count
36573                                                             ,x_msg_data              => l_msg_data ) ;
36574 
36575           IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
36576                THEN
36577                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36578           ELSIF l_return_status = FND_API.G_RET_STS_ERROR
36579                THEN
36580                   RAISE FND_API.G_EXC_ERROR;
36581           END IF;
36582 
36583         END IF ; -- p_process_mode
36584 
36585      END IF ; -- l_message_type
36586 
36587    END IF; -- l_update_wbs_flag
36588 
36589    IF FND_API.to_boolean( p_commit )
36590    THEN
36591      COMMIT;
36592    END IF;
36593 
36594 EXCEPTION
36595         WHEN FND_API.G_EXC_ERROR THEN
36596         p_return_status := FND_API.G_RET_STS_ERROR;
36597 
36598                 ROLLBACK TO process_structure_updates;
36599 
36600                 p_msg_count := l_msg_count;
36601                 p_msg_data := l_msg_data;
36602 
36603                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
36604                                           , p_data   =>  p_msg_data);
36605 
36606 
36607         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
36608         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36609 
36610                 ROLLBACK TO process_structure_updates;
36611 
36612                 p_msg_count := l_msg_count;
36613                 p_msg_data := l_msg_data;
36614 
36615                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
36616                                           , p_data   =>  p_msg_data);
36617 
36618         WHEN OTHERS THEN
36619         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36620 
36621         IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
36622           FND_MSG_PUB.add_exc_msg
36623               (p_pkg_name            => G_PKG_NAME
36624               ,p_procedure_name      => l_api_name
36625               ,p_error_text          => SUBSTRB(SQLERRM,1,120));
36626         END IF;
36627 
36628                 ROLLBACK TO process_structure_updates;
36629 
36630                 p_msg_count := fnd_msg_pub.count_msg;
36631                 p_msg_data  := SUBSTRB(SQLERRM,1,120);
36632 
36633                 FND_MSG_PUB.Count_And_Get(p_count    =>  p_msg_count
36634                                           , p_data   =>  p_msg_data);
36635 
36636 END process_structure_updates;
36637 -- -------------
36638 
36639 
36640 -- Bug 6727014. Creating a wrapper on process_structure_updates to be used in new concurrent request
36641 
36642 PROCEDURE process_structure_updates_wrp
36643      (errbuf                        OUT NOCOPY VARCHAR2
36644     , retcode                       OUT NOCOPY VARCHAR2
36645     , p_operating_unit              IN         VARCHAR2
36646     , p_project_num_from            IN         VARCHAR2
36647     , p_project_num_to              IN         VARCHAR2
36648     )
36649 is
36650 
36651      CURSOR cur_get_structures IS
36652      select ppes.pev_structure_id
36653            ,ppes.project_id          project_id
36654            ,ppes.element_version_id  structure_version_id
36655            ,ppa.segment1             project_number
36656            ,ppes.name                structure_name
36657        from pa_proj_elem_ver_structure ppes,
36658             pa_projects_all  ppa
36659       where ppa.project_id = ppes.project_id
36660         and ppes.process_update_wbs_flag = 'Y'
36661         and NVL(ppes.process_code,'WUE') = 'WUE'
36662         and ppa.segment1 between nvl(p_project_num_from,ppa.segment1)
36663                              and nvl(p_project_num_to,ppa.segment1)
36664         and nvl(ppa.org_id,-99) = nvl(p_operating_unit, nvl(org_id,-99))
36665       Order by 4,5;
36666 
36667    l_msg_count         NUMBER;
36668    l_msg_data          VARCHAR2(2000);
36669    l_return_status     VARCHAR2(1);
36670 
36671    l_data              VARCHAR2(2000);
36672    l_msg_index_out     NUMBER;
36673    l_retcode           NUMBER := 0;
36674 
36675    l_status            VARCHAR2(2000);
36676    l_exists            VARCHAR2(1);
36677 
36678 begin
36679   --Initializing global variable
36680 
36681   -- Print the input parameter values
36682   fnd_file.put_line(1, '');
36683   fnd_file.put_line(1, '***********************************************');
36684   fnd_file.put_line(1, '* Process Structure Update Concurrent Program *');
36685   fnd_file.put_line(1, '***********************************************');
36686   fnd_file.put_line(1, '');
36687   fnd_file.put_line(1,'Parameters List ');
36688   fnd_file.put_line(1,'------------------------------------------------');
36689   fnd_file.put_line(1,'Operating Unit           : '||p_operating_unit);
36690   fnd_file.put_line(1,'From Project Number      : '||p_project_num_from);
36691   fnd_file.put_line(1,'To Project Number        : '||p_project_num_to);
36692   fnd_file.put_line(1, '');
36693   fnd_file.put_line(1, '');
36694   fnd_file.put_line(1, 'List of Projects and Structures processed by the concurrent request and their Status');
36695   fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36696   fnd_file.put_line(1, 'Project Number                Structure Name                                                   Status');
36697   fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36698 
36699   For i in cur_get_structures loop
36700     l_return_status := 'S';
36701     l_msg_count     := 0;
36702     l_msg_data      := Null;
36703     l_status        := 'Success';
36704     l_exists        := NULL;
36705 
36706     Begin
36707     -- the below query will use PA_PROJ_ELEM_VER_STRUCTURE_U1 index
36708        select 'X'
36709          into l_exists
36710          from pa_proj_elem_ver_structure ppes
36711         where ppes.process_update_wbs_flag = 'Y'
36712           and NVL(ppes.process_code,'WUE') = 'WUE'
36713           and ppes.pev_structure_id = i.pev_structure_id;
36714 
36715        if nvl(l_exists,'Y') = 'X' Then
36716           PA_PROJECT_PUB.process_structure_updates
36717                  ( p_api_version_number    => 1.0
36718                  , p_init_msg_list         => FND_API.G_TRUE
36719                  , p_commit                => FND_API.G_FALSE
36720                  , p_return_status         => l_return_status
36721                  , p_msg_count             => l_msg_count
36722                  , p_msg_data              => l_msg_data
36723                  , p_structure_version_id  => i.structure_version_id
36724                  , p_pa_project_id         => i.project_id
36725                  , p_pm_project_reference  => PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36726                  , p_process_mode          => 'ONLINE'
36727                                  , p_calling_context       => 'CONC_WRP');
36728 
36729              IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36730                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
36731              ELSIF  (l_return_status = FND_API.G_RET_STS_ERROR) THEN
36732                  RAISE  FND_API.G_EXC_ERROR;
36733                          ELSIF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
36734                  COMMIT;
36735              END IF;
36736 
36737          fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status);
36738       Else
36739         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');
36740       End If;
36741 
36742  EXCEPTION
36743         WHEN FND_API.G_EXC_ERROR THEN
36744            l_retcode     := '1';
36745 
36746            IF l_msg_count >= 1 THEN
36747                 PA_INTERFACE_UTILS_PUB.get_messages
36748                     (p_encoded        => FND_API.G_FALSE
36749                     ,p_msg_index      => 1
36750                     ,p_msg_count      => l_msg_count
36751                     ,p_msg_data       => l_msg_data
36752                     ,p_data           => l_data
36753                     ,p_msg_index_out  => l_msg_index_out);
36754                 errbuf := l_data;
36755         fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36756            END IF;
36757         ROLLBACK;
36758 
36759         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
36760            l_retcode     := '1';
36761 
36762            IF l_msg_count >= 1 THEN
36763                 PA_INTERFACE_UTILS_PUB.get_messages
36764                     (p_encoded        => FND_API.G_FALSE
36765                     ,p_msg_index      => 1
36766                     ,p_msg_count      => l_msg_count
36767                     ,p_msg_data       => l_msg_data
36768                     ,p_data           => l_data
36769                     ,p_msg_index_out  => l_msg_index_out);
36770                 errbuf := l_data;
36771         fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36772            END IF;
36773         ROLLBACK;
36774 
36775      WHEN OTHERS THEN
36776      l_retcode         := '1';
36777      errbuf          := SQLERRM;
36778         fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36779       ROLLBACK;
36780 
36781    end;
36782   end loop;
36783   fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36784   fnd_file.put_line(1, '');
36785   fnd_file.put_line(1, '');
36786 
36787     if l_retcode = 1 then
36788       retcode := '1';
36789     else
36790       retcode := '0';
36791     end if;
36792 
36793 
36794 exception
36795   when others then
36796       retcode := '2';
36797       errbuf  := sqlerrm;
36798     return;
36799 End process_structure_updates_wrp;
36800 
36801 
36802 -- Bug # 5072032.
36803 
36804 PROCEDURE SETUP_PROJECT_AS_PROGRAM
36805 (p_api_version                  IN      NUMBER          := 1.0
36806 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_TRUE
36807 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
36808 , p_debug_mode                  IN      VARCHAR2        := 'N'
36809 , p_max_msg_count               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36810 , p_project_id                  IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36811 , p_pm_project_reference        IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36812 , p_sys_program_flag            IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36813 , p_allow_multi_program_rollup  IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36814 , x_return_status               OUT     NOCOPY VARCHAR2
36815 , x_msg_count                   OUT     NOCOPY NUMBER
36816 , x_msg_data                    OUT     NOCOPY VARCHAR2)
36817 is
36818 
36819 l_api_name		CONSTANT  VARCHAR2(30)	:= 'SETUP_PRJ_AS_PGM';
36820 
36821 l_pm_product_code 	VARCHAR2(2) 		:= NULL;
36822 l_function_allowed 	VARCHAR2(1) 		:= NULL;
36823 
36824 l_project_id 		NUMBER			:= NULL;
36825 l_wp_enabled 		VARCHAR2(1)		:= NULL;
36826 l_fin_enabled   	VARCHAR2(1)		:= NULL;
36827 l_delv_enabled  	VARCHAR2(1)		:= NULL;
36828 l_share_code            VARCHAR2(30)            := null;
36829 
36830 l_sys_program_flag            VARCHAR2(1)       := NULL;
36831 l_allow_multi_program_rollup  VARCHAR2(1)       := NULL;
36832 
36833 cursor l_cur_sys_program_flag(c_project_id NUMBER) is
36834 select ppa.sys_program_flag
36835 from pa_projects_all ppa
36836 where ppa.project_id = c_project_id;
36837 
36838 cursor l_cur_allow_multi_prog_rollup(c_project_id NUMBER) is
36839 select ppa.allow_multi_program_rollup
36840 from pa_projects_all ppa
36841 where ppa.project_id = c_project_id;
36842 
36843 l_msg_index_out     	NUMBER			:= NULL;
36844 l_return_status		VARCHAR2(1) 		:= NULL;
36845 l_msg_count 		NUMBER 			:= NULL;
36846 l_msg_data 		VARCHAR2(2000) 		:= NULL;
36847 
36848 begin
36849 
36850 -- Establish the save point.
36851 savepoint SETUP_PROJECT_AS_PROGRAM_AMG;
36852 
36853 --  Initialize the message table if requested.
36854 if FND_API.TO_BOOLEAN(p_init_msg_list) then
36855        FND_MSG_PUB.initialize;
36856 end if;
36857 
36858 --  Standard call to check for API compatibility.
36859 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
36860 	raise FND_API.G_EXC_UNEXPECTED_ERROR;
36861  end if;
36862 
36863 -- Initialize the return status
36864 x_return_status	:= FND_API.G_RET_STS_SUCCESS;
36865 
36866 -- Convert project reference to id.
36867 PA_PROJECT_PVT.Convert_pm_projref_to_id
36868 (p_pm_project_reference       =>      p_pm_project_reference
36869 , p_pa_project_id             =>      p_project_id
36870 , p_out_project_id            =>      l_project_id
36871 , p_return_status             =>      l_return_status);
36872 
36873 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36874 	raise FND_API.G_EXC_UNEXPECTED_ERROR;
36875 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36876 	raise FND_API.G_EXC_ERROR;
36877 end if;
36878 
36879 -- Get the current attributes of the project.
36880 l_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_workplan_enabled(l_project_id);
36881 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_financial_enabled(l_project_id);
36882 l_delv_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_deliverable_enabled(l_project_id);
36883 l_share_code := PA_PROJECT_STRUCTURE_UTILS.Get_Structure_sharing_code(l_project_id);
36884 
36885 -- Check if valid values are passed into the parameters: p_sys_program_flag, p_allow_multi_program_rollup, else use the current values.
36886 if ((p_sys_program_flag = 'Y') or (p_sys_program_flag = 'N')) then
36887 	l_sys_program_flag := p_sys_program_flag;
36888 else
36889 	open l_cur_sys_program_flag(l_project_id);
36890 	fetch l_cur_sys_program_flag into l_sys_program_flag;
36891 	close l_cur_sys_program_flag;
36892 end if;
36893 
36894 if ((p_allow_multi_program_rollup = 'Y') or (p_allow_multi_program_rollup = 'N')) then
36895 	l_allow_multi_program_rollup := p_allow_multi_program_rollup;
36896 else
36897 	open l_cur_allow_multi_prog_rollup(l_project_id);
36898 	fetch l_cur_allow_multi_prog_rollup into l_allow_multi_program_rollup;
36899 	close l_cur_allow_multi_prog_rollup;
36900 end if;
36901 
36902 -- Actions performed using the APIs are subject to function security.
36903 -- If the responsibility does not allow a function to be executed the API
36904 -- will error out as the user does not have access.
36905 
36906 	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36907 	(p_api_version_number   => p_api_version
36908 	, p_responsibility_id   => FND_GLOBAL.RESP_ID
36909 	, p_function_name       => 'PA_PM_UPDATE_PROJECT'
36910 	, p_msg_count           => l_msg_count
36911 	, p_msg_data            => l_msg_data
36912 	, p_return_status       => l_return_status
36913 	, p_function_allowed    => l_function_allowed);
36914 
36915 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36916         	raise FND_API.G_EXC_UNEXPECTED_ERROR;
36917 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36918         	raise FND_API.G_EXC_ERROR;
36919 	end if;
36920 
36921 	if l_function_allowed = 'N' then
36922         	pa_interface_utils_pub.map_new_amg_msg
36923         	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
36924         	, p_msg_attribute       => 'CHANGE'
36925         	, p_resize_flag         => 'Y'
36926         	, p_msg_context         => 'GENERAL'
36927         	, p_attribute1          => ''
36928         	, p_attribute2          => ''
36929         	, p_attribute3          => ''
36930         	, p_attribute4          => ''
36931         	, p_attribute5          => '');
36932         	raise FND_API.G_EXC_ERROR;
36933 	end if;
36934 
36935 -- Call the API to setup the project as a program.
36936 PA_PROJECT_STRUCTURE_PUB1.UPDATE_STRUCTURES_SETUP_ATTR
36937 (p_api_version      		=> p_api_version
36938 , p_init_msg_list    		=> p_init_msg_list
36939 , p_commit           		=> p_commit
36940 , p_calling_module   		=> 'AMG'
36941 , p_debug_mode       		=> p_debug_mode
36942 , p_max_msg_count    		=> p_max_msg_count
36943 , p_project_id       		=> l_project_id
36944 , p_workplan_enabled_flag 	=> l_wp_enabled
36945 , p_financial_enabled_flag 	=> l_fin_enabled
36946 , p_deliverables_enabled_flag 	=> l_delv_enabled
36947 , p_sharing_option_code         => l_share_code
36948 , p_sys_program_flag 		=> l_sys_program_flag
36949 , p_allow_multi_prog_rollup 	=> l_allow_multi_program_rollup
36950 , x_return_status 		=> l_return_status
36951 , x_msg_count 			=> l_msg_count
36952 , x_msg_data  			=> l_msg_data);
36953 
36954 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36955         raise FND_API.G_EXC_UNEXPECTED_ERROR;
36956 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36957         raise FND_API.G_EXC_ERROR;
36958 end if;
36959 
36960 -- Commit if p_commit = FND_API.G_TRUE.
36961 if (p_commit = FND_API.G_TRUE) then
36962 	commit;
36963 end if;
36964 
36965 exception
36966 
36967    when FND_API.G_EXC_ERROR then
36968       rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36969       x_return_status := FND_API.G_RET_STS_ERROR;
36970       x_msg_count := FND_MSG_PUB.count_msg;
36971 
36972       if x_msg_count = 1 then
36973            PA_INTERFACE_UTILS_PUB.get_messages
36974                (p_encoded        => FND_API.G_FALSE
36975                 , p_msg_index      => 1
36976                 , p_msg_count      => x_msg_count
36977                 , p_msg_data       => x_msg_data
36978                 , p_data           => x_msg_data
36979                 , p_msg_index_out  => l_msg_index_out);
36980      end if;
36981 
36982    when FND_API.G_EXC_UNEXPECTED_ERROR then
36983       rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36984       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36985       x_msg_count := FND_MSG_PUB.count_msg;
36986 
36987       if x_msg_count = 1 then
36988            PA_INTERFACE_UTILS_PUB.get_messages
36989                (p_encoded        => FND_API.G_FALSE
36990                 , p_msg_index      => 1
36991                 , p_msg_count      => x_msg_count
36992                 , p_msg_data       => x_msg_data
36993                 , p_data           => x_msg_data
36994                 , p_msg_index_out  => l_msg_index_out);
36995      end if;
36996 
36997    when OTHERS then
36998       rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36999       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37000       x_msg_count := 1;
37001       x_msg_data := SQLERRM;
37002       if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
37003       		FND_MSG_PUB.add_exc_msg
37004                 ( p_pkg_name            => G_PKG_NAME
37005                 , p_procedure_name      => l_api_name);
37006       end if;
37007 
37008 end SETUP_PROJECT_AS_PROGRAM;
37009 
37010 PROCEDURE CREATE_PROGRAM_LINKS
37011 (p_api_version                  IN      NUMBER          := 1.0
37012 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_TRUE
37013 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
37014 , p_debug_mode                  IN      VARCHAR2        := 'N'
37015 , p_max_msg_count               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37016 , p_program_links_tbl           IN      PA_PROJECT_PUB.PROGRAM_LINKS_TBL_TYPE
37017 , x_return_status               OUT     NOCOPY VARCHAR2
37018 , x_msg_count                   OUT     NOCOPY NUMBER
37019 , x_msg_data                    OUT     NOCOPY VARCHAR2)
37020 is
37021 
37022 l_api_name              CONSTANT  VARCHAR2(30)  := 'CREATE_PROGRAM_LINKS';
37023 
37024 l_pm_product_code       VARCHAR2(2)             := NULL;
37025 l_function_allowed      VARCHAR2(1)             := NULL;
37026 
37027 l_count            	NUMBER          	:= NULL;
37028 l_parent_project_id	NUMBER			:= NULL;
37029 l_sub_project_id	NUMBER			:= NULL;
37030 l_task_id		NUMBER			:= NULL;
37031 l_task_id_out		NUMBER			:= NULL;
37032 l_task_version_id	NUMBER			:= NULL;
37033 
37034 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
37035 select ppev.element_version_id
37036 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
37037 , pa_proj_structure_types ppst, pa_structure_types pst
37038 where ppevs.proj_element_id = ppst.proj_element_id
37039 and ppst.structure_type_id = pst.structure_type_id
37040 and ppev.project_id = ppevs.project_id
37041 and ppev.parent_structure_version_id = ppevs.element_version_id
37042 and ppevs.current_working_flag = 'Y'
37043 and ppev.proj_element_id = c_task_id
37044 and pst.structure_type = c_structure_type;
37045 
37046 cursor l_cur_project_id1(c_task_id NUMBER) is
37047 select ppe.project_id
37048 from pa_proj_elements ppe
37049 where ppe.proj_element_id = c_task_id;
37050 
37051 cursor l_cur_project_id2(c_task_version_id NUMBER) is
37052 select ppev.project_id, ppev.proj_element_id
37053 from pa_proj_element_versions ppev
37054 where ppev.element_version_id = c_task_version_id;
37055 
37056 l_unexp_error_flag      VARCHAR2(1)             := 'N';
37057 l_exp_error_flag        VARCHAR2(1)             := 'N';
37058 
37059 l_msg_index_out     	NUMBER                  := NULL;
37060 l_return_status         VARCHAR2(1)             := NULL;
37061 l_msg_count             NUMBER                  := NULL;
37062 l_msg_data              VARCHAR2(2000)          := NULL;
37063 
37064 cursor l_cur_prog_name (c_task_version_id NUMBER) is
37065 select ppa.name
37066 from pa_projects_all ppa, pa_proj_element_versions ppev
37067 where ppa.project_id = ppev.project_id
37068 and ppev.element_version_id = c_task_version_id;
37069 
37070 cursor l_cur_prog_name2 (c_project_id NUMBER) is
37071 select ppa.name
37072 from pa_projects_all ppa
37073 where ppa.project_id = c_project_id;
37074 
37075 cursor l_cur_proj_name (c_project_id NUMBER) is
37076 select ppa.name
37077 from pa_projects_all ppa
37078 where ppa.project_id = c_project_id;
37079 
37080 cursor l_cur_task_name (c_task_ver_id NUMBER) is
37081 select ppe.name
37082 from pa_proj_elements ppe, pa_proj_element_versions ppev
37083 where ppe.project_id = ppev.project_id
37084 and ppe.proj_element_id = ppev.proj_element_id
37085 and ppev.element_version_id = c_task_ver_id;
37086 
37087 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
37088 select ppa.project_id
37089 from pa_projects_all ppa
37090 where pm_project_reference = c_sub_project_reference
37091 and ppa.project_id = c_sub_project_id;
37092 
37093 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
37094 select ppa.project_id
37095 from pa_projects_all ppa
37096 where pm_project_reference = c_sub_project_reference;
37097 
37098 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
37099 select ppa.project_id
37100 from pa_projects_all ppa
37101 where ppa.project_id = c_sub_project_id;
37102 
37103 l_parent_sub_flag	VARCHAR2(1)		:= NULL;
37104 
37105 l_program_name          VARCHAR2(30)            := NULL;
37106 l_project_name          VARCHAR2(30)            := NULL;
37107 l_task_name             VARCHAR2(30)            := NULL;
37108 
37109 TYPE l_prog_error_rec_type IS RECORD
37110 (program_name           VARCHAR2(300)   := null
37111 ,object_relationship_id NUMBER 		:= null
37112 ,error_msg         	VARCHAR2(2000)  := null);
37113 
37114 TYPE l_prog_error_tbl_type IS TABLE OF l_prog_error_rec_type INDEX BY BINARY_INTEGER;
37115 
37116 l_prog_error_tbl l_prog_error_tbl_type;
37117 
37118 l_error_count 		NUMBER 		:= 0;
37119 l_msg_code		VARCHAR2(30) 	:= null;
37120 
37121 l			NUMBER 		:= 0;
37122 
37123 begin
37124 
37125 -- Establish the save point.
37126 savepoint CREATE_PROGRAM_LINKS_AMG;
37127 
37128 --  Initialize the message table if requested.
37129 if FND_API.TO_BOOLEAN(p_init_msg_list) then
37130        FND_MSG_PUB.initialize;
37131 end if;
37132 
37133 --  Standard call to check for API compatibility.
37134 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
37135         raise FND_API.G_EXC_UNEXPECTED_ERROR;
37136  end if;
37137 
37138 -- Initialize the return status
37139 x_return_status := FND_API.G_RET_STS_SUCCESS;
37140 
37141 -- Initialize the error flags.
37142 l_unexp_error_flag := 'N';
37143 l_exp_error_flag := 'N';
37144 
37145 -- Loop through the records in the input PL/SQL table.
37146 for l_count in p_program_links_tbl.FIRST..p_program_links_tbl.LAST loop
37147 
37148    	-- Clear the message stack.
37149      	FND_MSG_PUB.initialize;
37150 
37151 	-- Initialize the error flags.
37152 	l_unexp_error_flag := 'N';
37153 	l_exp_error_flag := 'N';
37154 	l_parent_sub_flag := 'P'; -- By default assume that any errors will be for the parent project.
37155 
37156         -- Initialize the local variables.
37157         l_parent_project_id             := NULL;
37158         l_sub_project_id                := NULL;
37159         l_task_id                       := NULL;
37160         l_task_id_out                   := NULL;
37161         l_task_version_id               := NULL;
37162 
37163 	-- If task version id is not passed in.
37164 	if ((p_program_links_tbl(l_count).task_version_id is null)
37165 	     or (p_program_links_tbl(l_count).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37166 
37167                 -- Convert parent project reference to id.
37168 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37169                 	PA_PROJECT_PVT.Convert_pm_projref_to_id
37170                 	(p_pm_project_reference       =>     p_program_links_tbl(l_count).pm_parent_project_reference
37171                 	, p_pa_project_id             =>     p_program_links_tbl(l_count).parent_project_id
37172                 	, p_out_project_id            =>     l_parent_project_id
37173                 	, p_return_status             =>     l_return_status);
37174 
37175                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37176                 		l_unexp_error_flag := 'Y';
37177                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37178                 		l_exp_error_flag := 'Y';
37179                 	end if;
37180 
37181 		end if;
37182 
37183                 -- Convert task reference to id.
37184 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37185                 	PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37186                 	(p_pa_project_id        => l_parent_project_id
37187                 	, p_pm_task_reference   => p_program_links_tbl(l_count).pm_task_reference
37188 			, p_pa_task_id          => p_program_links_tbl(l_count).task_id
37189                 	, p_structure_type      => p_program_links_tbl(l_count).structure_type
37190                 	, p_out_task_id         => l_task_id
37191                 	, p_return_status       => l_return_status);
37192 
37193                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37194                 		l_unexp_error_flag := 'Y';
37195                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37196                 		l_exp_error_flag := 'Y';
37197                 	end if;
37198 
37199 		end if;
37200 
37201 		-- Find the task version id in the current working workplan structure version.
37202 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37203 			open l_cur_task_ver_id(l_task_id, p_program_links_tbl(l_count).structure_type);
37204 			fetch l_cur_task_ver_id into l_task_version_id;
37205 			close l_cur_task_ver_id;
37206 
37207 			-- Validate that the task has a version in the specified structure type.
37208 			if (l_task_version_id is null) then
37209 				PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
37210 				l_exp_error_flag := 'Y';
37211 			end if;
37212 
37213 		end if;
37214 
37215 	-- If task version id is passed in.
37216 	else
37217 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37218 			l_task_version_id := p_program_links_tbl(l_count).task_version_id;
37219 		end if;
37220 
37221 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37222                 	open l_cur_project_id2(l_task_version_id);
37223                 	fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
37224 			if l_cur_project_id2%NOTFOUND then
37225 				PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
37226                                 l_exp_error_flag := 'Y';
37227 			end if;
37228                 	close l_cur_project_id2;
37229 		end if;
37230 
37231 		-- Validate the task id and project id of the task version id.
37232 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37233                 	PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37234                 	(p_pa_project_id        => l_parent_project_id
37235                 	, p_pa_task_id          => l_task_id
37236                 	, p_structure_type      => p_program_links_tbl(l_count).structure_type
37237                 	, p_out_task_id         => l_task_id_out
37238                 	, p_return_status       => l_return_status);
37239 
37240                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37241                         	l_unexp_error_flag := 'Y';
37242                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37243                         	l_exp_error_flag := 'Y';
37244                 	end if;
37245 		end if;
37246 
37247 	end if;
37248 
37249         -- Validate sub-project across organizations and convert sub-project reference to id.
37250 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37251 
37252 		if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37253 		      and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37254 		    and ((p_program_links_tbl(l_count).sub_project_id is not null)
37255 		          and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37256 
37257 			open l_cur_sub_proj1(p_program_links_tbl(l_count).pm_sub_project_reference, p_program_links_tbl(l_count).sub_project_id);
37258 			fetch l_cur_sub_proj1 into l_sub_project_id;
37259 			close l_cur_sub_proj1;
37260 
37261 		elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37262                         and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37263 
37264                         open l_cur_sub_proj2(p_program_links_tbl(l_count).pm_sub_project_reference);
37265                         fetch l_cur_sub_proj2 into l_sub_project_id;
37266                         close l_cur_sub_proj2;
37267 
37268 		elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37269                         and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37270 
37271                         open l_cur_sub_proj3(p_program_links_tbl(l_count).sub_project_id);
37272                         fetch l_cur_sub_proj3 into l_sub_project_id;
37273                         close l_cur_sub_proj3;
37274 
37275 		else
37276 
37277 		     l_sub_project_id := null;
37278 
37279 		end if;
37280 
37281         	if (l_sub_project_id is null) then
37282 
37283                 	PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
37284                         l_exp_error_flag := 'Y';
37285 
37286 			l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37287 
37288 		end if;
37289 
37290 	end if;
37291 
37292         -- Check if the task version id corresponds to a summary task.
37293         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration
37294                 if (pa_proj_elements_utils.is_summary_task_or_structure(l_task_version_id) = 'Y') then
37295                         -- The task is a summary task.
37296                         open l_cur_prog_name(l_task_version_id);
37297                         fetch l_cur_prog_name into l_program_name;
37298                         close l_cur_prog_name;
37299 
37300                         open l_cur_proj_name(l_sub_project_id);
37301                         fetch l_cur_proj_name into l_project_name;
37302                         close l_cur_proj_name;
37303 
37304                         open l_cur_task_name(l_task_version_id);
37305                         fetch l_cur_task_name into l_task_name;
37306                         close l_cur_task_name;
37307 
37308                         PA_UTILS.ADD_MESSAGE('PA','PA_PS_CANT_LINK_SUMMARY_TASK'
37309                                              ,'PROJ', l_project_name
37310                                              ,'PROG', l_program_name
37311                                              ,'TASK', l_task_name);
37312 
37313 			l_exp_error_flag := 'Y';
37314 
37315                 end if;
37316         end if;
37317 
37318         -- Actions performed using the APIs are subject to function security.
37319         -- If the responsibility does not allow a function to be executed the API
37320         -- will error out as the user does not have access.
37321 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37322         	if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN'
37323             	    or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37324                 	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37325                 	(p_api_version_number   => p_api_version
37326                 	, p_responsibility_id   => FND_GLOBAL.RESP_ID
37327                 	, p_function_name       => 'PA_PAXPREPR_WP_LINK_PROJ'
37328                 	, p_msg_count           => l_msg_count
37329                 	, p_msg_data            => l_msg_data
37330                 	, p_return_status       => l_return_status
37331                 	, p_function_allowed    => l_function_allowed);
37332 
37333                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37334                         	l_unexp_error_flag := 'Y';
37335                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37336                         	l_exp_error_flag := 'Y';
37337                 	end if;
37338 
37339                 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37340                         	if l_function_allowed = 'N' then
37341                                 	pa_interface_utils_pub.map_new_amg_msg
37342                                 	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
37343                                 	, p_msg_attribute       => 'CHANGE'
37344                                 	, p_resize_flag         => 'Y'
37345                                 	, p_msg_context         => 'GENERAL'
37346                                 	, p_attribute1          => ''
37347                                 	, p_attribute2          => ''
37348                                 	, p_attribute3          => ''
37349                                 	, p_attribute4          => ''
37350                                 	, p_attribute5          => '');
37351                                 	l_exp_error_flag := 'Y';
37352                         	end if;
37353                 	end if;
37354         	end if;
37355 	end if;
37356 
37357         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37358         	if (p_program_links_tbl(l_count).structure_type = 'FINANCIAL'
37359             	    or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37360                 	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37361                 	(p_api_version_number   => p_api_version
37362                 	, p_responsibility_id   => FND_GLOBAL.RESP_ID
37363                 	, p_function_name       => 'PA_PAXPREPR_OPT_SUBPROJECTS'
37364                 	, p_msg_count           => l_msg_count
37365                 	, p_msg_data            => l_msg_data
37366                 	, p_return_status       => l_return_status
37367                 	, p_function_allowed    => l_function_allowed);
37368 
37369                 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37370                         	l_unexp_error_flag := 'Y';
37371                 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37372                         	l_exp_error_flag := 'Y';
37373                 	end if;
37374 
37375                 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37376                         	if l_function_allowed = 'N' then
37377                                 	pa_interface_utils_pub.map_new_amg_msg
37378                                 	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
37379                                 	, p_msg_attribute       => 'CHANGE'
37380                                 	, p_resize_flag         => 'Y'
37381                                 	, p_msg_context         => 'GENERAL'
37382                                 	, p_attribute1          => ''
37383                                 	, p_attribute2          => ''
37384                                 	, p_attribute3          => ''
37385                                 	, p_attribute4          => ''
37386                                 	, p_attribute5          => '');
37387                                 	l_exp_error_flag := 'Y';
37388                         	end if;
37389                 	end if;
37390         	end if;
37391 	end if;
37392 
37393 	-- Check if the sub-project has the appropriate structure type enabled.
37394 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37395 		if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN') then
37396 			if (pa_project_structure_utils.check_workplan_enabled(l_sub_project_id) = 'N') then
37397 
37398                         	open l_cur_proj_name(l_sub_project_id);
37399                         	fetch l_cur_proj_name into l_project_name;
37400                         	close l_cur_proj_name;
37401 
37402 				PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_WORKPLAN_TO_LINK'
37403                                              	     ,'PROJ', l_project_name);
37404 				l_exp_error_flag := 'Y';
37405 
37406 				l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37407 
37408 			end if;
37409 		elsif (p_program_links_tbl(l_count).structure_type = 'FINANCIAL') then
37410                         if (pa_project_structure_utils.check_financial_enabled(l_sub_project_id) = 'N') then
37411 
37412                                 open l_cur_proj_name(l_sub_project_id);
37413                                 fetch l_cur_proj_name into l_project_name;
37414                                 close l_cur_proj_name;
37415 
37416                                 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_FINANCIAL_TO_LINK'
37417                                                      ,'PROJ', l_project_name);
37418                                 l_exp_error_flag := 'Y';
37419 
37420 				l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37421 
37422                         end if;
37423 		end if;
37424 	end if;
37425 
37426 	-- Call the API to create the sub-project association.
37427 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37428 		PA_RELATIONSHIP_PUB.CREATE_SUBPROJECT_ASSOCIATION
37429 		(p_api_version	 	=>	p_api_version
37430 		, p_init_msg_list 	=> 	FND_API.G_FALSE
37431 		, p_commit	 	=>	p_commit
37432 		, p_calling_module 	=> 	'AMG'
37433 		, p_debug_mode	 	=>	p_debug_mode
37434 		, p_max_msg_count 	=>	p_max_msg_count
37435 		, p_src_proj_id	 	=>	l_parent_project_id
37436 		, p_task_ver_id	 	=>	l_task_version_id
37437 		, p_dest_proj_id 	=>	l_sub_project_id
37438 		, p_comment	 	=> 	p_program_links_tbl(l_count).comments
37439 		, x_return_status 	=>	l_return_status
37440 		, x_msg_count	 	=>	l_msg_count
37441 		, x_msg_data		=> 	l_msg_data);
37442 
37443         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37444                 	l_unexp_error_flag := 'Y';
37445         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37446                 	l_exp_error_flag := 'Y';
37447         	end if;
37448 	end if;
37449 
37450 	-- In case of any errors in the loop store the message context and message code for the error message reported
37451 	-- in the local pl/sql error table.
37452 
37453 	if ((l_unexp_error_flag = 'Y') or (l_exp_error_flag = 'Y')) then
37454 
37455                 l_prog_error_tbl(l_count).program_name := NULL;
37456                 l_prog_error_tbl(l_count).object_relationship_id := NULL;
37457 
37458 		if (l_parent_sub_flag = 'P') then -- Indicates that the error is for the parent_project.
37459 
37460 			if (((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
37461                               and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37462 			    and ((p_program_links_tbl(l_count).parent_project_id is not null)
37463                                	  and (p_program_links_tbl(l_count).parent_project_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37464 					 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
37465 					 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
37466                	 	elsif ((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
37467                     	     and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37468                         		l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
37469                 	elsif ((p_program_links_tbl(l_count).parent_project_id is not null)
37470                       	       and (p_program_links_tbl(l_count).parent_project_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37471                         		open l_cur_prog_name2(p_program_links_tbl(l_count).parent_project_id);
37472                         		fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
37473                         		close l_cur_prog_name2;
37474                         		l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
37475                 	elsif ((p_program_links_tbl(l_count).task_version_id is not null)
37476                        		and (p_program_links_tbl(l_count).task_version_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37477                         		l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).task_version_id;
37478                 	end if;
37479 
37480 		elsif (l_parent_sub_flag = 'S')  then -- Indicates that the error is for the sub-project.
37481 
37482                 	if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37483                       	      and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37484                     	    and ((p_program_links_tbl(l_count).sub_project_id is not null)
37485                           	  and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37486                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
37487                                          l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
37488 			elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37489                         	and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37490                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
37491 		        elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37492                         	and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37493                                         open l_cur_prog_name2(p_program_links_tbl(l_count).sub_project_id);
37494                                         fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
37495                                         close l_cur_prog_name2;
37496                                         l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
37497 			end if;
37498 
37499 		end if;
37500 
37501 		PA_INTERFACE_UTILS_PUB.get_messages
37502            	(p_encoded         => FND_API.G_FALSE     -- Get the encoded message.
37503                 , p_msg_index      => 1                   -- Get the message at index 1.
37504                 , p_data           => l_prog_error_tbl(l_count).error_msg
37505                 , p_msg_index_out  => l_msg_index_out);
37506 
37507 	end if;
37508 
37509 end loop;
37510 
37511 -- In case of any errors in the above loop, populate the tokenized error messages in the error stack and raise an exception:
37512 l_error_count := l_prog_error_tbl.count;
37513 
37514 if (l_error_count > 0) then
37515 
37516 	-- Set the return status to error.
37517   	x_return_status := FND_API.G_RET_STS_ERROR;
37518 
37519 	-- Clear all previous messages from the message stack.
37520   	FND_MSG_PUB.initialize;
37521 
37522 	-- Populate the generic error message.
37523 	PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
37524 
37525 	-- Loop through the local pl/sql error table to populate the tokenized error messages.
37526 	for l in l_prog_error_tbl.first..l_prog_error_tbl.last
37527 	loop
37528 		if (l_prog_error_tbl.exists(l)) then
37529 	 	 	PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
37530 	 				     ,'TASKNAME',l_prog_error_tbl(l).program_name
37531 					     ,'TASKNUMBER',l_prog_error_tbl(l).object_relationship_id
37532 					     ,'ERRORMSG', l_prog_error_tbl(l).error_msg);
37533 		end if;
37534 	 end loop;
37535 
37536   	 raise FND_API.G_EXC_ERROR;
37537 
37538   end if;
37539 
37540 -- Commit if p_commit = FND_API.G_TRUE.
37541 if (p_commit = FND_API.G_TRUE) then
37542         commit;
37543 end if;
37544 
37545 exception
37546 
37547    when FND_API.G_EXC_ERROR then
37548       rollback to CREATE_PROGRAM_LINKS_AMG;
37549       x_return_status := FND_API.G_RET_STS_ERROR;
37550       x_msg_count := FND_MSG_PUB.count_msg;
37551 
37552       if x_msg_count = 1 then
37553            PA_INTERFACE_UTILS_PUB.get_messages
37554                (p_encoded        => FND_API.G_FALSE
37555                 , p_msg_index      => 1
37556                 , p_msg_count      => x_msg_count
37557                 , p_msg_data       => x_msg_data
37558                 , p_data           => x_msg_data
37559                 , p_msg_index_out  => l_msg_index_out);
37560      end if;
37561 
37562    when FND_API.G_EXC_UNEXPECTED_ERROR then
37563       rollback to CREATE_PROGRAM_LINKS_AMG;
37564       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37565       x_msg_count := FND_MSG_PUB.count_msg;
37566 
37567       if x_msg_count = 1 then
37568            PA_INTERFACE_UTILS_PUB.get_messages
37569                (p_encoded        => FND_API.G_FALSE
37570                 , p_msg_index      => 1
37571                 , p_msg_count      => x_msg_count
37572                 , p_msg_data       => x_msg_data
37573                 , p_data           => x_msg_data
37574                 , p_msg_index_out  => l_msg_index_out);
37575      end if;
37576 
37577    when OTHERS then
37578       rollback to CREATE_PROGRAM_LINKS_AMG;
37579       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37580       x_msg_count := 1;
37581       x_msg_data := SQLERRM;
37582       if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
37583                 FND_MSG_PUB.add_exc_msg
37584                 ( p_pkg_name            => G_PKG_NAME
37585                 , p_procedure_name      => l_api_name);
37586       end if;
37587 
37588 end CREATE_PROGRAM_LINKS;
37589 
37590 PROCEDURE UPDATE_PROGRAM_LINK_COMMENTS
37591 (p_api_version                  IN      NUMBER          := 1.0
37592 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_TRUE
37593 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
37594 , p_debug_mode                  IN      VARCHAR2        := 'N'
37595 , p_max_msg_count               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37596 , p_program_links_tbl           IN      PA_PROJECT_PUB.PROGRAM_LINKS_TBL_TYPE
37597 , x_return_status               OUT     NOCOPY VARCHAR2
37598 , x_msg_count                   OUT     NOCOPY NUMBER
37599 , x_msg_data                    OUT     NOCOPY VARCHAR2)
37600 is
37601 
37602 l_api_name              CONSTANT  VARCHAR2(30)  := 'UPDATE_PROGRAM_LINK_COMMENTS';
37603 
37604 l_pm_product_code       VARCHAR2(2)             := NULL;
37605 l_function_allowed      VARCHAR2(1)             := NULL;
37606 
37607 l_count            		NUMBER          	:= NULL;
37608 l_parent_project_id		NUMBER			:= NULL;
37609 l_sub_project_id		NUMBER			:= NULL;
37610 l_task_id			NUMBER			:= NULL;
37611 l_task_id_out			NUMBER			:= NULL;
37612 l_task_version_id		NUMBER			:= NULL;
37613 l_object_relationship_id 	NUMBER                  := NULL;
37614 l_record_version_number 	NUMBER                  := NULL;
37615 
37616 
37617 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
37618 select ppev.element_version_id
37619 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
37620 , pa_proj_structure_types ppst, pa_structure_types pst
37621 where ppevs.proj_element_id = ppst.proj_element_id
37622 and ppst.structure_type_id = pst.structure_type_id
37623 and ppev.project_id = ppevs.project_id
37624 and ppev.parent_structure_version_id = ppevs.element_version_id
37625 and ppevs.current_working_flag = 'Y'
37626 and ppev.proj_element_id = c_task_id
37627 and pst.structure_type = c_structure_type;
37628 
37629 cursor l_cur_por1(c_task_version_id NUMBER, c_sub_proj_id NUMBER, c_structure_type VARCHAR2) is
37630 select por2.object_relationship_id, por2.record_version_number
37631 from pa_object_relationships por1, pa_object_relationships por2
37632 where por1.object_id_to1 = por2.object_id_from1
37633 and por1.relationship_type = 'S'
37634 and por1.object_id_from1 = c_task_version_id
37635 and por2.object_id_to2 = c_sub_proj_id
37636 and por2.relationship_type = decode(c_structure_type, 'WORKPLAN', 'LW', 'FINANCIAL', 'LF');
37637 
37638 cursor l_cur_por2(c_object_relationship_id NUMBER) is
37639 select por.object_relationship_id, por.record_version_number, por.object_id_from2
37640 from pa_object_relationships por
37641 where por.relationship_type in ('LW','LF')
37642 and por.object_relationship_id = c_object_relationship_id;
37643 
37644 cursor l_cur_prog_name (c_task_version_id NUMBER) is
37645 select ppa.name
37646 from pa_projects_all ppa, pa_proj_element_versions ppev
37647 where ppa.project_id = ppev.project_id
37648 and ppev.element_version_id = c_task_version_id;
37649 
37650 cursor l_cur_prog_name2 (c_project_id NUMBER) is
37651 select ppa.name
37652 from pa_projects_all ppa
37653 where ppa.project_id = c_project_id;
37654 
37655 cursor l_cur_proj_name (c_project_id NUMBER) is
37656 select ppa.name
37657 from pa_projects_all ppa
37658 where ppa.project_id = c_project_id;
37659 
37660 cursor l_cur_task_name (c_task_ver_id NUMBER) is
37661 select ppe.name
37662 from pa_proj_elements ppe, pa_proj_element_versions ppev
37663 where ppe.project_id = ppev.project_id
37664 and ppe.proj_element_id = ppev.proj_element_id
37665 and ppev.element_version_id = c_task_ver_id;
37666 
37667 cursor l_cur_project_id2(c_task_version_id NUMBER) is
37668 select ppev.project_id, ppev.proj_element_id
37669 from pa_proj_element_versions ppev
37670 where ppev.element_version_id = c_task_version_id;
37671 
37672 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
37673 select ppa.project_id
37674 from pa_projects_all ppa
37675 where pm_project_reference = c_sub_project_reference
37676 and ppa.project_id = c_sub_project_id;
37677 
37678 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
37679 select ppa.project_id
37680 from pa_projects_all ppa
37681 where pm_project_reference = c_sub_project_reference;
37682 
37683 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
37684 select ppa.project_id
37685 from pa_projects_all ppa
37686 where ppa.project_id = c_sub_project_id;
37687 
37688 l_parent_sub_flag       VARCHAR2(1)             := NULL;
37689 
37690 l_program_name		VARCHAR2(30)		:= NULL;
37691 l_project_name		VARCHAR2(30)		:= NULL;
37692 l_task_name		VARCHAR2(30)		:= NULL;
37693 
37694 l_unexp_error_flag      VARCHAR2(1)             := 'N';
37695 l_exp_error_flag        VARCHAR2(1)             := 'N';
37696 
37697 l_msg_index_out     	NUMBER                  := NULL;
37698 l_return_status         VARCHAR2(1)             := NULL;
37699 l_msg_count             NUMBER                  := NULL;
37700 l_msg_data              VARCHAR2(2000)          := NULL;
37701 
37702 TYPE l_prog_error_rec_type IS RECORD
37703 (program_name           VARCHAR2(300)   := null
37704 ,object_relationship_id NUMBER          := null
37705 ,error_msg              VARCHAR2(2000)  := null);
37706 
37707 TYPE l_prog_error_tbl_type IS TABLE OF l_prog_error_rec_type INDEX BY BINARY_INTEGER;
37708 
37709 l_prog_error_tbl l_prog_error_tbl_type;
37710 
37711 l_error_count           NUMBER          := 0;
37712 l_msg_code              VARCHAR2(30)    := null;
37713 
37714 l                       NUMBER          := 0;
37715 
37716 begin
37717 
37718 -- Establish the save point.
37719 savepoint UPDATE_PROGRAM_LINK_CMNTS_AMG;
37720 
37721 --  Initialize the message table if requested.
37722 if FND_API.TO_BOOLEAN(p_init_msg_list) then
37723        FND_MSG_PUB.initialize;
37724 end if;
37725 
37726 --  Standard call to check for API compatibility.
37727 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
37728         raise FND_API.G_EXC_UNEXPECTED_ERROR;
37729  end if;
37730 
37731 -- Initialize the return status
37732 x_return_status := FND_API.G_RET_STS_SUCCESS;
37733 
37734 -- Initialize the error flags.
37735 l_unexp_error_flag := 'N';
37736 l_exp_error_flag := 'N';
37737 
37738 -- Loop through the records in the input PL/SQL table.
37739 for l_count in p_program_links_tbl.FIRST..p_program_links_tbl.LAST loop
37740 
37741         -- Clear the message stack.
37742         FND_MSG_PUB.initialize;
37743 
37744         -- Initialize the error flags.
37745         l_unexp_error_flag := 'N';
37746         l_exp_error_flag := 'N';
37747         l_parent_sub_flag := 'P'; -- By default assume that any errors will be for the parent project.
37748 
37749 	-- Initialize the local variables.
37750 	l_parent_project_id             := NULL;
37751 	l_sub_project_id                := NULL;
37752 	l_task_id                       := NULL;
37753 	l_task_id_out                   := NULL;
37754 	l_task_version_id               := NULL;
37755 	l_object_relationship_id        := NULL;
37756 	l_record_version_number         := NULL;
37757 
37758 	-- If object relationship id is not passed in.
37759 	if ((p_program_links_tbl(l_count).object_relationship_id is null)
37760              or (p_program_links_tbl(l_count).object_relationship_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37761 
37762 		-- If task version id is not passed in.
37763 		if ((p_program_links_tbl(l_count).task_version_id is null)
37764 	     	    or (p_program_links_tbl(l_count).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37765 
37766                 	-- Convert parent project reference to id.
37767 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37768                         	PA_PROJECT_PVT.Convert_pm_projref_to_id
37769                         	(p_pm_project_reference       =>     p_program_links_tbl(l_count).pm_parent_project_reference
37770                         	, p_pa_project_id             =>     p_program_links_tbl(l_count).parent_project_id
37771                         	, p_out_project_id            =>     l_parent_project_id
37772                         	, p_return_status             =>     l_return_status);
37773 
37774                         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37775                         		l_unexp_error_flag := 'Y';
37776                         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37777                         		l_exp_error_flag := 'Y';
37778                         	end if;
37779 			end if;
37780 
37781                         -- Convert task reference to id
37782 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37783                         	PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37784                         	(p_pa_project_id        => l_parent_project_id
37785                         	, p_pm_task_reference   => p_program_links_tbl(l_count).pm_task_reference
37786                 		, p_pa_task_id   	=> p_program_links_tbl(l_count).task_id
37787                         	, p_structure_type      => p_program_links_tbl(l_count).structure_type
37788                         	, p_out_task_id         => l_task_id
37789                         	, p_return_status       => l_return_status);
37790 
37791                         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37792                         		l_unexp_error_flag := 'Y';
37793                         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37794                         		l_exp_error_flag := 'Y';
37795                         	end if;
37796 			end if;
37797 
37798 			-- Find the task version id in the current working workplan structure version.
37799 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37800 				open l_cur_task_ver_id(l_task_id, p_program_links_tbl(l_count).structure_type);
37801 				fetch l_cur_task_ver_id into l_task_version_id;
37802 				close l_cur_task_ver_id;
37803 
37804                         	-- Validate that the task has a version in the specified structure type.
37805                         	if (l_task_version_id is null) then
37806                                 	PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
37807 					l_exp_error_flag := 'Y';
37808                         	end if;
37809 
37810 			end if;
37811 
37812 		-- If task version id is passed in.
37813 		else
37814 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37815 				l_task_version_id := p_program_links_tbl(l_count).task_version_id;
37816 			end if;
37817 
37818 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37819 	        		open l_cur_project_id2(l_task_version_id);
37820                 		fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
37821                         	if l_cur_project_id2%NOTFOUND then
37822                                 	PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
37823                                 	l_exp_error_flag := 'Y';
37824                         	end if;
37825 
37826                 		close l_cur_project_id2;
37827 			end if;
37828 
37829                 	-- Validate the task id and project id of the task version id.
37830 			if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37831                         	PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37832                         	(p_pa_project_id        => l_parent_project_id
37833                         	, p_pa_task_id          => l_task_id
37834                         	, p_structure_type      => p_program_links_tbl(l_count).structure_type
37835                         	, p_out_task_id         => l_task_id_out
37836                         	, p_return_status       => l_return_status);
37837 
37838                         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37839                                 	l_unexp_error_flag := 'Y';
37840                         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37841                                 	l_exp_error_flag := 'Y';
37842                         	end if;
37843 			end if;
37844 
37845 		end if;
37846 
37847         	-- Validate sub-project across organizations and convert sub-project reference to id.
37848         	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37849 
37850                 	if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37851                       	      and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37852                     	    and ((p_program_links_tbl(l_count).sub_project_id is not null)
37853                               and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37854 
37855                         	open l_cur_sub_proj1(p_program_links_tbl(l_count).pm_sub_project_reference, p_program_links_tbl(l_count).sub_project_id);
37856                         	fetch l_cur_sub_proj1 into l_sub_project_id;
37857                         	close l_cur_sub_proj1;
37858 
37859                 	elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37860                         	and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37861 
37862                         	open l_cur_sub_proj2(p_program_links_tbl(l_count).pm_sub_project_reference);
37863                         	fetch l_cur_sub_proj2 into l_sub_project_id;
37864                         	close l_cur_sub_proj2;
37865 
37866                 	elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37867                         	and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37868 
37869                         	open l_cur_sub_proj3(p_program_links_tbl(l_count).sub_project_id);
37870                         	fetch l_cur_sub_proj3 into l_sub_project_id;
37871                         	close l_cur_sub_proj3;
37872 
37873                 	else
37874 
37875                      		l_sub_project_id := null;
37876 
37877                 	end if;
37878 
37879                 	if (l_sub_project_id is null) then
37880 
37881         	                PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
37882                         	l_exp_error_flag := 'Y';
37883 
37884                         	l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37885 
37886                 	end if;
37887 
37888         	end if;
37889 
37890 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37891 			open l_cur_por1(l_task_version_id, l_sub_project_id, p_program_links_tbl(l_count).structure_type);
37892 			fetch l_cur_por1 into l_object_relationship_id, l_record_version_number;
37893 			if  l_cur_por1%NOTFOUND then
37894 				-- Program Link does not exist between the parent project and the sub-project.
37895 				open l_cur_prog_name(l_task_version_id);
37896 				fetch l_cur_prog_name into l_program_name;
37897 				close l_cur_prog_name;
37898 
37899 				open l_cur_proj_name(l_sub_project_id);
37900 				fetch l_cur_proj_name into l_project_name;
37901 				close l_cur_proj_name;
37902 
37903                 		open l_cur_task_name(l_task_version_id);
37904                 		fetch l_cur_task_name into l_task_name;
37905                 		close l_cur_task_name;
37906 
37907 				PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_LINK_EXISTS'
37908 						 ,'PROJ', l_project_name
37909 						 ,'PROG', l_program_name
37910 						 ,'TASK', l_task_name
37911 						 ,'STR', p_program_links_tbl(l_count).structure_type);
37912 
37913 				l_exp_error_flag := 'Y';
37914 			end if;
37915 			close l_cur_por1;
37916 		end if;
37917 
37918 	-- If object relationship id is passed in.
37919 	else
37920 		if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37921 	        	open l_cur_por2(p_program_links_tbl(l_count).object_relationship_id);
37922                 	fetch l_cur_por2 into l_object_relationship_id, l_record_version_number, l_parent_project_id;
37923 			if l_cur_por2%NOTFOUND then
37924 				-- Invalid object_relationship_id.
37925 				PA_UTILS.ADD_MESSAGE('PA','PA_PS_INVALID_OBJ_REL_ID'
37926                                                   	 ,'OBJRELID', p_program_links_tbl(l_count).object_relationship_id);
37927 
37928 				l_exp_error_flag := 'Y';
37929 			end if;
37930                 	close l_cur_por2;
37931 		end if;
37932 	end if;
37933 
37934         -- Actions performed using the APIs are subject to function security.
37935         -- If the responsibility does not allow a function to be executed the API
37936         -- will error out as the user does not have access.
37937         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37938                 if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN'
37939                     or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37940                         PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37941                         (p_api_version_number   => p_api_version
37942                         , p_responsibility_id   => FND_GLOBAL.RESP_ID
37943                         , p_function_name       => 'PA_PAXPREPR_WP_LINK_PROJ'
37944                         , p_msg_count           => l_msg_count
37945                         , p_msg_data            => l_msg_data
37946                         , p_return_status       => l_return_status
37947                         , p_function_allowed    => l_function_allowed);
37948 
37949                         if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37950                                 l_unexp_error_flag := 'Y';
37951                         elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37952                                 l_exp_error_flag := 'Y';
37953                         end if;
37954 
37955                         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37956                                 if l_function_allowed = 'N' then
37957                                         pa_interface_utils_pub.map_new_amg_msg
37958                                         (p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
37959                                         , p_msg_attribute       => 'CHANGE'
37960                                         , p_resize_flag         => 'Y'
37961                                         , p_msg_context         => 'GENERAL'
37962                                         , p_attribute1          => ''
37963                                         , p_attribute2          => ''
37964                                         , p_attribute3          => ''
37965                                         , p_attribute4          => ''
37966                                         , p_attribute5          => '');
37967                                         l_exp_error_flag := 'Y';
37968                                 end if;
37969                         end if;
37970                 end if;
37971 
37972 	end if;
37973 
37974 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then  -- Indicates no errors thus far in the loop iteration.
37975                 if (p_program_links_tbl(l_count).structure_type = 'FINANCIAL'
37976                     or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37977                         PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37978                         (p_api_version_number   => p_api_version
37979                         , p_responsibility_id   => FND_GLOBAL.RESP_ID
37980                         , p_function_name       => 'PA_PAXPREPR_OPT_SUBPROJECTS'
37981                         , p_msg_count           => l_msg_count
37982                         , p_msg_data            => l_msg_data
37983                         , p_return_status       => l_return_status
37984                         , p_function_allowed    => l_function_allowed);
37985 
37986                         if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37987                                 l_unexp_error_flag := 'Y';
37988                         elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37989                                 l_exp_error_flag := 'Y';
37990                         end if;
37991 
37992                         if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37993                                 if l_function_allowed = 'N' then
37994                                         pa_interface_utils_pub.map_new_amg_msg
37995                                         (p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
37996                                         , p_msg_attribute       => 'CHANGE'
37997                                         , p_resize_flag         => 'Y'
37998                                         , p_msg_context         => 'GENERAL'
37999                                         , p_attribute1          => ''
38000                                         , p_attribute2          => ''
38001                                         , p_attribute3          => ''
38002                                         , p_attribute4          => ''
38003                                         , p_attribute5          => '');
38004                                         l_exp_error_flag := 'Y';
38005                                 end if;
38006                         end if;
38007                 end if;
38008         end if;
38009 
38010 	if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
38011 		-- Call the API to update the sub-project association.
38012 		PA_RELATIONSHIP_PUB.UPDATE_SUBPROJECT_ASSOCIATION
38013 		(p_api_version			=> 	p_api_version
38014 		, p_init_msg_list 		=> 	FND_API.G_FALSE
38015 		, p_calling_module		=>	'AMG'
38016 		, p_max_msg_count		=>	p_max_msg_count
38017 		, p_commit			=>	p_commit
38018 		, p_debug_mode			=>	p_debug_mode
38019 		, p_object_relationship_id	=>	l_object_relationship_id
38020 		, p_record_version_number	=>	l_record_version_number
38021 		, p_comment			=>	p_program_links_tbl(l_count).comments
38022 		, x_return_status		=>	l_return_status
38023 		, x_msg_count			=>	l_msg_count
38024 		, x_msg_data			=>	l_msg_data);
38025 
38026         	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38027                 	l_unexp_error_flag := 'Y';
38028         	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38029                 	l_exp_error_flag := 'Y';
38030         	end if;
38031 	end if;
38032 
38033         -- In case of any errors in the loop store the message context and message code for the error message reported
38034         -- in the local pl/sql error table.
38035 
38036         if ((l_unexp_error_flag = 'Y') or (l_exp_error_flag = 'Y')) then
38037 
38038                 l_prog_error_tbl(l_count).program_name := NULL;
38039                 l_prog_error_tbl(l_count).object_relationship_id := NULL;
38040 
38041                 if (l_parent_sub_flag = 'P') then -- Indicates that the error is for the parent_project.
38042 
38043                         if (((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
38044                               and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
38045                             and ((p_program_links_tbl(l_count).parent_project_id is not null)
38046                                   and (p_program_links_tbl(l_count).parent_project_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
38047                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
38048                                          l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
38049                         elsif ((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
38050                              and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
38051                                         l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
38052                         elsif ((p_program_links_tbl(l_count).parent_project_id is not null)
38053                                and (p_program_links_tbl(l_count).parent_project_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38054                                         open l_cur_prog_name2(p_program_links_tbl(l_count).parent_project_id);
38055                                         fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
38056                                         close l_cur_prog_name2;
38057                                         l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
38058                         elsif ((p_program_links_tbl(l_count).task_version_id is not null)
38059                                 and (p_program_links_tbl(l_count).task_version_id  <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38060                                         l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).task_version_id;
38061                         end if;
38062 
38063                 elsif (l_parent_sub_flag = 'S')  then -- Indicates that the error is for the sub-project.
38064 
38065                         if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
38066                               and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
38067                             and ((p_program_links_tbl(l_count).sub_project_id is not null)
38068                                   and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
38069                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
38070                                          l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
38071                         elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
38072                                 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
38073                                          l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
38074                         elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
38075                                 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38076                                         open l_cur_prog_name2(p_program_links_tbl(l_count).sub_project_id);
38077                                         fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
38078                                         close l_cur_prog_name2;
38079                                         l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
38080                         end if;
38081 
38082                 end if;
38083 
38084                 PA_INTERFACE_UTILS_PUB.get_messages
38085                 (p_encoded         => FND_API.G_FALSE     -- Get the encoded message.
38086                 , p_msg_index      => 1                   -- Get the message at index 1.
38087                 , p_data           => l_prog_error_tbl(l_count).error_msg
38088                 , p_msg_index_out  => l_msg_index_out);
38089 
38090         end if;
38091 
38092 end loop;
38093 
38094 -- In case of any errors in the above loop, populate the tokenized error messages in the error stack and raise an exception:
38095 l_error_count := l_prog_error_tbl.count;
38096 
38097 if (l_error_count > 0) then
38098 
38099         -- Set the return status to error.
38100         x_return_status := FND_API.G_RET_STS_ERROR;
38101 
38102         -- Clear all previous messages from the message stack.
38103         FND_MSG_PUB.initialize;
38104 
38105         -- Populate the generic error message.
38106         PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
38107 
38108         -- Loop through the local pl/sql error table to populate the tokenized error messages.
38109         for l in l_prog_error_tbl.first..l_prog_error_tbl.last
38110         loop
38111                 if (l_prog_error_tbl.exists(l)) then
38112                         PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
38113                                              ,'TASKNAME',l_prog_error_tbl(l).program_name
38114                                              ,'TASKNUMBER',l_prog_error_tbl(l).object_relationship_id
38115                                              ,'ERRORMSG', l_prog_error_tbl(l).error_msg);
38116                 end if;
38117          end loop;
38118 
38119          raise FND_API.G_EXC_ERROR;
38120 
38121   end if;
38122 
38123 -- Commit if p_commit = FND_API.G_TRUE.
38124 if (p_commit = FND_API.G_TRUE) then
38125         commit;
38126 end if;
38127 
38128 exception
38129 
38130    when FND_API.G_EXC_ERROR then
38131       rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
38132       x_return_status := FND_API.G_RET_STS_ERROR;
38133       x_msg_count := FND_MSG_PUB.count_msg;
38134 
38135       if x_msg_count = 1 then
38136            PA_INTERFACE_UTILS_PUB.get_messages
38137                (p_encoded        => FND_API.G_FALSE
38138                 , p_msg_index      => 1
38139                 , p_msg_count      => x_msg_count
38140                 , p_msg_data       => x_msg_data
38141                 , p_data           => x_msg_data
38142                 , p_msg_index_out  => l_msg_index_out);
38143      end if;
38144 
38145    when FND_API.G_EXC_UNEXPECTED_ERROR then
38146       rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
38147       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38148       x_msg_count := FND_MSG_PUB.count_msg;
38149 
38150       if x_msg_count = 1 then
38151            PA_INTERFACE_UTILS_PUB.get_messages
38152                (p_encoded        => FND_API.G_FALSE
38153                 , p_msg_index      => 1
38154                 , p_msg_count      => x_msg_count
38155                 , p_msg_data       => x_msg_data
38156                 , p_data           => x_msg_data
38157                 , p_msg_index_out  => l_msg_index_out);
38158      end if;
38159 
38160    when OTHERS then
38161       rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
38162       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38163       x_msg_count := 1;
38164       x_msg_data := SQLERRM;
38165       if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
38166                 FND_MSG_PUB.add_exc_msg
38167                 ( p_pkg_name            => G_PKG_NAME
38168                 , p_procedure_name      => l_api_name);
38169       end if;
38170 
38171 end UPDATE_PROGRAM_LINK_COMMENTS;
38172 
38173 PROCEDURE DELETE_PROGRAM_LINK
38174 (p_api_version                  IN      NUMBER          := 1.0
38175 , p_init_msg_list               IN      VARCHAR2        := FND_API.G_TRUE
38176 , p_commit                      IN      VARCHAR2        := FND_API.G_FALSE
38177 , p_debug_mode                  IN      VARCHAR2        := 'N'
38178 , p_max_msg_count               IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38179 , p_object_relationship_id      IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38180 , p_parent_project_id           IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38181 , p_pm_parent_project_reference IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38182 , p_task_id                     IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38183 , p_pm_task_reference           IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38184 , p_task_version_id             IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38185 , p_structure_type		IN	VARCHAR2	:= 'WORKPLAN'
38186 , p_sub_project_id              IN      NUMBER          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38187 , p_pm_sub_project_reference    IN      VARCHAR2        := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38188 , x_return_status               OUT     NOCOPY VARCHAR2
38189 , x_msg_count                   OUT     NOCOPY NUMBER
38190 , x_msg_data                    OUT     NOCOPY VARCHAR2)
38191 is
38192 
38193 l_api_name              CONSTANT  VARCHAR2(30)  := 'DELETE_PROGRAM_LINK';
38194 
38195 l_pm_product_code       VARCHAR2(2)             := NULL;
38196 l_function_allowed      VARCHAR2(1)             := NULL;
38197 
38198 l_count            		NUMBER          	:= NULL;
38199 l_parent_project_id		NUMBER			:= NULL;
38200 l_sub_project_id		NUMBER			:= NULL;
38201 l_task_id			NUMBER			:= NULL;
38202 l_task_id_out			NUMBER			:= NULL;
38203 l_task_version_id		NUMBER			:= NULL;
38204 l_object_relationship_id 	NUMBER                  := NULL;
38205 l_record_version_number 	NUMBER                  := NULL;
38206 
38207 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
38208 select ppev.element_version_id
38209 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
38210 , pa_proj_structure_types ppst, pa_structure_types pst
38211 where ppevs.proj_element_id = ppst.proj_element_id
38212 and ppst.structure_type_id = pst.structure_type_id
38213 and ppev.project_id = ppevs.project_id
38214 and ppev.parent_structure_version_id = ppevs.element_version_id
38215 and ppevs.current_working_flag = 'Y'
38216 and ppev.proj_element_id = c_task_id
38217 and pst.structure_type = c_structure_type;
38218 
38219 cursor l_cur_por1(c_task_version_id NUMBER, c_sub_proj_id NUMBER, c_structure_type VARCHAR2) is
38220 select por2.object_relationship_id, por2.record_version_number
38221 from pa_object_relationships por1, pa_object_relationships por2
38222 where por1.object_id_to1 = por2.object_id_from1
38223 and por1.relationship_type = 'S'
38224 and por1.object_id_from1 = c_task_version_id
38225 and por2.object_id_to2 = c_sub_proj_id
38226 and por2.relationship_type = decode(c_structure_type, 'WORKPLAN', 'LW', 'FINANCIAL', 'LF');
38227 
38228 cursor l_cur_por2(c_object_relationship_id NUMBER) is
38229 select por.object_relationship_id, por.record_version_number, por.object_id_from2
38230 from pa_object_relationships por
38231 where por.relationship_type in ('LW','LF')
38232 and por.object_relationship_id = c_object_relationship_id;
38233 
38234 cursor l_cur_prog_name (c_task_version_id NUMBER) is
38235 select ppa.name
38236 from pa_projects_all ppa, pa_proj_element_versions ppev
38237 where ppa.project_id = ppev.project_id
38238 and ppev.element_version_id = c_task_version_id;
38239 
38240 cursor l_cur_proj_name (c_project_id NUMBER) is
38241 select ppa.name
38242 from pa_projects_all ppa
38243 where ppa.project_id = c_project_id;
38244 
38245 cursor l_cur_task_name (c_task_ver_id NUMBER) is
38246 select ppe.name
38247 from pa_proj_elements ppe, pa_proj_element_versions ppev
38248 where ppe.project_id = ppev.project_id
38249 and ppe.proj_element_id = ppev.proj_element_id
38250 and ppev.element_version_id = c_task_ver_id;
38251 
38252 cursor l_cur_project_id2(c_task_version_id NUMBER) is
38253 select ppev.project_id, ppev.proj_element_id
38254 from pa_proj_element_versions ppev
38255 where ppev.element_version_id = c_task_version_id;
38256 
38257 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
38258 select ppa.project_id
38259 from pa_projects_all ppa
38260 where pm_project_reference = c_sub_project_reference
38261 and ppa.project_id = c_sub_project_id;
38262 
38263 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
38264 select ppa.project_id
38265 from pa_projects_all ppa
38266 where pm_project_reference = c_sub_project_reference;
38267 
38268 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
38269 select ppa.project_id
38270 from pa_projects_all ppa
38271 where ppa.project_id = c_sub_project_id;
38272 
38273 l_program_name          VARCHAR2(30)            := NULL;
38274 l_project_name          VARCHAR2(30)            := NULL;
38275 l_task_name 		VARCHAR2(30)		:= NULL;
38276 
38277 l_msg_index_out     	NUMBER                  := NULL;
38278 l_return_status         VARCHAR2(1)             := NULL;
38279 l_msg_count             NUMBER                  := NULL;
38280 l_msg_data              VARCHAR2(2000)          := NULL;
38281 
38282 begin
38283 
38284 -- Establish the save point.
38285 savepoint DELETE_PROGRAM_LINK_AMG;
38286 
38287 --  Initialize the message table if requested.
38288 if FND_API.TO_BOOLEAN(p_init_msg_list) then
38289        FND_MSG_PUB.initialize;
38290 end if;
38291 
38292 --  Standard call to check for API compatibility.
38293 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
38294         raise FND_API.G_EXC_UNEXPECTED_ERROR;
38295 end if;
38296 
38297 -- Initialize the return status
38298 x_return_status := FND_API.G_RET_STS_SUCCESS;
38299 
38300 -- If object relationship id is not passed in.
38301 if ((p_object_relationship_id is null)
38302      or (p_object_relationship_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38303 
38304 	-- If task version id is not passed in.
38305 	if ((p_task_version_id is null)
38306      	     or (p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38307 
38308         	-- Convert parent project reference to id.
38309                 PA_PROJECT_PVT.Convert_pm_projref_to_id
38310                 (p_pm_project_reference       =>     p_pm_parent_project_reference
38311                 , p_pa_project_id             =>     p_parent_project_id
38312                 , p_out_project_id            =>     l_parent_project_id
38313                 , p_return_status             =>     l_return_status);
38314 
38315                 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38316                 	raise FND_API.G_EXC_UNEXPECTED_ERROR;
38317                 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38318                 	raise FND_API.G_EXC_ERROR;
38319                 end if;
38320 
38321                 -- Convert task reference to id
38322                 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
38323                 (p_pa_project_id        => l_parent_project_id
38324                 , p_pm_task_reference   => p_pm_task_reference
38325 		, p_pa_task_id          => p_task_id
38326                 , p_structure_type      => p_structure_type
38327                 , p_out_task_id         => l_task_id
38328                 , p_return_status       => l_return_status);
38329 
38330                 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38331                 	raise FND_API.G_EXC_UNEXPECTED_ERROR;
38332                 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38333                 	raise FND_API.G_EXC_ERROR;
38334                 end if;
38335 
38336 		-- Find the task version id in the current working workplan structure version.
38337 		open l_cur_task_ver_id(l_task_id, p_structure_type);
38338 		fetch l_cur_task_ver_id into l_task_version_id;
38339 		close l_cur_task_ver_id;
38340 
38341                 -- Validate that the task has a version in the specified structure type.
38342                 if (l_task_version_id is null) then
38343                 	PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
38344 			raise FND_API.G_EXC_ERROR;
38345                 end if;
38346 
38347 	-- If task version id is passed in.
38348 	else
38349 		l_task_version_id := p_task_version_id;
38350 
38351                 open l_cur_project_id2(l_task_version_id);
38352                 fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
38353                 if l_cur_project_id2%NOTFOUND then
38354                 	PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
38355                         raise FND_API.G_EXC_ERROR;
38356                 end if;
38357                 close l_cur_project_id2;
38358 
38359                 -- Validate the task id and project id of the task version id.
38360                 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
38361                 (p_pa_project_id        => l_parent_project_id
38362                 , p_pa_task_id          => l_task_id
38363                 , p_structure_type      => p_structure_type
38364                 , p_out_task_id         => l_task_id_out
38365                 , p_return_status       => l_return_status);
38366 
38367                 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38368                         raise FND_API.G_EXC_UNEXPECTED_ERROR;
38369                 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38370                         raise FND_API.G_EXC_ERROR;
38371                 end if;
38372 
38373 	end if;
38374 
38375         -- Validate sub-project across organizations and convert sub-project reference to id.
38376         if (((p_pm_sub_project_reference is not null)
38377               and (p_pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
38378             and ((p_sub_project_id is not null)
38379                   and (p_sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
38380 
38381         	open l_cur_sub_proj1(p_pm_sub_project_reference, p_sub_project_id);
38382                 fetch l_cur_sub_proj1 into l_sub_project_id;
38383                 close l_cur_sub_proj1;
38384 
38385         elsif ((p_pm_sub_project_reference is not null)
38386                and (p_pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
38387 
38388         	open l_cur_sub_proj2(p_pm_sub_project_reference);
38389                 fetch l_cur_sub_proj2 into l_sub_project_id;
38390                 close l_cur_sub_proj2;
38391 
38392         elsif ((p_sub_project_id is not null)
38393                and (p_sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38394 
38395         	open l_cur_sub_proj3(p_sub_project_id);
38396                 fetch l_cur_sub_proj3 into l_sub_project_id;
38397                 close l_cur_sub_proj3;
38398 
38399         else
38400 
38401                      l_sub_project_id := null;
38402 
38403         end if;
38404 
38405         if (l_sub_project_id is null) then
38406 
38407         	PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
38408                 raise FND_API.G_EXC_ERROR;
38409 
38410         end if;
38411 
38412 	open l_cur_por1(l_task_version_id, l_sub_project_id, p_structure_type);
38413 	fetch l_cur_por1 into l_object_relationship_id, l_record_version_number;
38414         if  l_cur_por1%NOTFOUND then
38415         	-- Program Link does not exist between the parent project and the sub-project.
38416 
38417         	open l_cur_prog_name(l_task_version_id);
38418                 fetch l_cur_prog_name into l_program_name;
38419                 close l_cur_prog_name;
38420 
38421                 open l_cur_proj_name(l_sub_project_id);
38422                 fetch l_cur_proj_name into l_project_name;
38423                 close l_cur_proj_name;
38424 
38425 		open l_cur_task_name(l_task_version_id);
38426 		fetch l_cur_task_name into l_task_name;
38427 		close l_cur_task_name;
38428 
38429                 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_LINK_EXISTS'
38430                                          ,'PROJ', l_project_name
38431                                          ,'PROG', l_program_name
38432                                          ,'TASK', l_task_name
38433                                          ,'STR', p_structure_type);
38434 
38435                  close l_cur_por1;
38436 
38437                  RAISE FND_API.G_EXC_ERROR;
38438         end if;
38439 
38440 	close l_cur_por1;
38441 
38442 -- If object relationship id is passed in.
38443 else
38444         open l_cur_por2(p_object_relationship_id);
38445       	fetch l_cur_por2 into l_object_relationship_id, l_record_version_number, l_parent_project_id;
38446         if l_cur_por2%NOTFOUND then
38447         	-- Invalid object_relationship_id.
38448 
38449         	PA_UTILS.ADD_MESSAGE('PA','PA_PS_INVALID_OBJ_REL_ID'
38450                                          ,'OBJRELID', p_object_relationship_id);
38451 
38452                 close l_cur_por2;
38453 
38454                 RAISE FND_API.G_EXC_ERROR;
38455         end if;
38456 
38457         close l_cur_por2;
38458 end if;
38459 
38460 -- Actions performed using the APIs are subject to function security.
38461 -- If the responsibility does not allow a function to be executed the API
38462 -- will error out as the user does not have access.
38463 if (p_structure_type = 'WORKPLAN'
38464     or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
38465        	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
38466        	(p_api_version_number   => p_api_version
38467        	, p_responsibility_id   => FND_GLOBAL.RESP_ID
38468        	, p_function_name       => 'PA_PAXPREPR_WP_LINK_PROJ'
38469        	, p_msg_count           => l_msg_count
38470        	, p_msg_data            => l_msg_data
38471        	, p_return_status       => l_return_status
38472        	, p_function_allowed    => l_function_allowed);
38473 
38474 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38475         	raise FND_API.G_EXC_UNEXPECTED_ERROR;
38476 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38477         	raise FND_API.G_EXC_ERROR;
38478 	end if;
38479 
38480         if l_function_allowed = 'N' then
38481                	pa_interface_utils_pub.map_new_amg_msg
38482                	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
38483                	, p_msg_attribute       => 'CHANGE'
38484                	, p_resize_flag         => 'Y'
38485                	, p_msg_context         => 'GENERAL'
38486                	, p_attribute1          => ''
38487                	, p_attribute2          => ''
38488                	, p_attribute3          => ''
38489                	, p_attribute4          => ''
38490                	, p_attribute5          => '');
38491 		raise FND_API.G_EXC_ERROR;
38492         end if;
38493 end if;
38494 
38495 if (p_structure_type = 'FINANCIAL'
38496     or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
38497        	PA_PM_FUNCTION_SECURITY_PUB.check_function_security
38498        	(p_api_version_number   => p_api_version
38499        	, p_responsibility_id   => FND_GLOBAL.RESP_ID
38500        	, p_function_name       => 'PA_PAXPREPR_OPT_SUBPROJECTS'
38501        	, p_msg_count           => l_msg_count
38502        	, p_msg_data            => l_msg_data
38503        	, p_return_status       => l_return_status
38504        	, p_function_allowed    => l_function_allowed);
38505 
38506 	if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38507         	raise FND_API.G_EXC_UNEXPECTED_ERROR;
38508 	elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38509         	raise FND_API.G_EXC_ERROR;
38510 	end if;
38511 
38512        	if l_function_allowed = 'N' then
38513                	pa_interface_utils_pub.map_new_amg_msg
38514                	(p_old_message_code     => 'PA_FUNCTION_SECURITY_ENFORCED'
38515                	, p_msg_attribute       => 'CHANGE'
38516                	, p_resize_flag         => 'Y'
38517                	, p_msg_context         => 'GENERAL'
38518                	, p_attribute1          => ''
38519                	, p_attribute2          => ''
38520                	, p_attribute3          => ''
38521                	, p_attribute4          => ''
38522                	, p_attribute5          => '');
38523 		raise FND_API.G_EXC_ERROR;
38524        	end if;
38525 end if;
38526 
38527 -- Call the API to delete the sub-project association.
38528 PA_RELATIONSHIP_PUB.DELETE_SUBPROJECT_ASSOCIATION
38529 (p_api_version			=>	p_api_version
38530 , p_init_msg_list		=>	p_init_msg_list
38531 , p_commit			=>	p_commit
38532 , p_calling_module		=>	'AMG'
38533 , p_debug_mode			=>	p_debug_mode
38534 , p_max_msg_count		=>	p_max_msg_count
38535 , p_object_relationships_id	=>	l_object_relationship_id
38536 , p_record_version_number	=>	l_record_version_number
38537 , x_return_status	 	=>	l_return_status
38538 , x_msg_count	 		=>	l_msg_count
38539 , x_msg_data	 		=>	l_msg_data);
38540 
38541 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38542        	raise FND_API.G_EXC_UNEXPECTED_ERROR;
38543 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38544        	raise FND_API.G_EXC_ERROR;
38545 end if;
38546 
38547 -- Commit if p_commit = FND_API.G_TRUE.
38548 if (p_commit = FND_API.G_TRUE) then
38549         commit;
38550 end if;
38551 
38552 exception
38553 
38554    when FND_API.G_EXC_ERROR then
38555       rollback to DELETE_PROGRAM_LINK_AMG;
38556       x_return_status := FND_API.G_RET_STS_ERROR;
38557       x_msg_count := FND_MSG_PUB.count_msg;
38558 
38559       if x_msg_count = 1 then
38560            PA_INTERFACE_UTILS_PUB.get_messages
38561                (p_encoded        => FND_API.G_FALSE
38562                 , p_msg_index      => 1
38563                 , p_msg_count      => x_msg_count
38564                 , p_msg_data       => x_msg_data
38565                 , p_data           => x_msg_data
38566                 , p_msg_index_out  => l_msg_index_out);
38567      end if;
38568 
38569    when FND_API.G_EXC_UNEXPECTED_ERROR then
38570       rollback to DELETE_PROGRAM_LINK_AMG;
38571       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38572       x_msg_count := FND_MSG_PUB.count_msg;
38573 
38574       if x_msg_count = 1 then
38575            PA_INTERFACE_UTILS_PUB.get_messages
38576                (p_encoded        => FND_API.G_FALSE
38577                 , p_msg_index      => 1
38578                 , p_msg_count      => x_msg_count
38579                 , p_msg_data       => x_msg_data
38580                 , p_data           => x_msg_data
38581                 , p_msg_index_out  => l_msg_index_out);
38582      end if;
38583 
38584    when OTHERS then
38585       rollback to DELETE_PROGRAM_LINK_AMG;
38586       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38587       x_msg_count := 1;
38588       x_msg_data := SQLERRM;
38589       if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
38590                 FND_MSG_PUB.add_exc_msg
38591                 ( p_pkg_name            => G_PKG_NAME
38592                 , p_procedure_name      => l_api_name);
38593       end if;
38594 
38595 end DELETE_PROGRAM_LINK;
38596 
38597 -- Bug # 5072032.
38598 
38599 
38600 -- Bug 7525628
38601 PROCEDURE UPDATE_FINANCIAL_ATTRIBUTES
38602 (
38603  P_API_VERSION_NUMBER           IN  NUMBER,
38604  P_COMMIT                       IN  VARCHAR2,
38605  P_INIT_MSG_LIST                IN  VARCHAR2,
38606  P_PA_PROJECT_ID                IN  NUMBER,
38607  P_TASK_ID_TBL                  IN  SYSTEM.PA_NUM_TBL_TYPE,
38608  P_SERVICE_TYPE_CODE_TBL        IN  SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
38609  P_CHARGEABLE_FLAG_TBL          IN  SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
38610  P_BILLABLE_FLAG_TBL            IN  SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
38611  X_MSG_COUNT                    OUT NOCOPY NUMBER,
38612  X_MSG_DATA                     OUT NOCOPY VARCHAR2,
38613  X_RETURN_STATUS                OUT NOCOPY VARCHAR2
38614 )
38615 IS
38616 l_published_version             NUMBER(15);
38617 l_prev_published_version        NUMBER(15);
38618 l_new_task                      NUMBER(15);
38619 i                               NUMBER    := 0;
38620 l_api_name      CONSTANT        VARCHAR2(30)     := 'UPDATE_FINANCIAL_ATTRIBUTES';
38621 
38622 --cursor which fetches the previous published version
38623 cursor c_prev_published_version(p_pa_project_id IN NUMBER) is
38624 select element_version_id from (
38625   select element_version_id
38626         from pa_proj_elem_ver_structure ppevs,
38627              pa_proj_structure_types ppst
38628         where ppevs.latest_eff_published_flag = 'N'
38629                 and ppst.proj_element_id = ppevs.proj_element_id
38630                 and ppst.structure_type_id = 1
38631                 and ppevs.status_code = 'STRUCTURE_PUBLISHED'
38632                 and ppevs.project_id = p_pa_project_id
38633                 order by ppevs.published_date desc
38634         ) where rownum = 1;
38635 
38636 --cursor which fetches all tasks added as a result of last publish
38637 cursor c_newly_added_tasks(l_published_version IN NUMBER,l_prev_published_version IN NUMBER) is
38638 select proj_element_id
38639         from pa_proj_element_versions
38640         where   project_id = P_PA_PROJECT_ID
38641                 and object_type = 'PA_TASKS'
38642                 and PARENT_STRUCTURE_VERSION_ID = l_published_version
38643 MINUS
38644 select proj_element_id
38645         from pa_proj_element_versions
38646         where   project_id = P_PA_PROJECT_ID
38647                 and object_type = 'PA_TASKS'
38648                 and PARENT_STRUCTURE_VERSION_ID = l_prev_published_version;
38649 
38650 
38651 BEGIN
38652 
38653 l_published_version := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_pa_project_id);
38654 
38655 OPEN c_prev_published_version(p_pa_project_id);
38656 FETCH c_prev_published_version INTO l_prev_published_version;
38657 CLOSE c_prev_published_version;
38658 
38659 FOR rec IN c_newly_added_tasks(l_published_version, l_prev_published_version) LOOP
38660     FOR i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
38661                 IF p_task_id_tbl(i) = rec.proj_element_id THEN
38662 
38663                   UPDATE pa_tasks
38664                     SET service_type_code = nvl(p_service_type_code_tbl(i),service_type_code),  --  7525628
38665                         chargeable_flag = nvl(p_chargeable_flag_tbl(i),chargeable_flag),  --  7525628
38666                         billable_flag = nvl(p_billable_flag_tbl(i),billable_flag) --  7525628
38667                     WHERE task_id = p_task_id_tbl(i);
38668                     EXIT;
38669 
38670 
38671                  END IF;
38672         END LOOP;
38673 END LOOP;
38674 
38675 x_return_status := FND_API.G_RET_STS_SUCCESS;
38676 
38677 EXCEPTION
38678 
38679   WHEN FND_API.G_EXC_ERROR THEN
38680 
38681   x_return_status  := FND_API.G_RET_STS_ERROR;
38682 
38683 
38684  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
38685 
38686  x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38687 
38688   WHEN OTHERS THEN
38689 
38690   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38691 
38692   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
38693   THEN
38694     FND_MSG_PUB.add_exc_msg
38695         ( p_pkg_name    => G_PKG_NAME
38696         , p_procedure_name  => l_api_name  );
38697 
38698   END IF;
38699 
38700 END UPDATE_FINANCIAL_ATTRIBUTES;
38701 --End of fix for Bug 7525628
38702 
38703 -- Added BULK_UPDATE_TASKS_LITE api for Huawei enhancement bug 13923366 by skkoppul
38704 PROCEDURE BULK_UPDATE_TASKS_LITE
38705 ( p_api_version_number          IN         NUMBER
38706  ,p_commit                      IN         VARCHAR2  := FND_API.G_FALSE
38707  ,p_init_msg_list               IN         VARCHAR2  := FND_API.G_FALSE
38708  ,x_msg_count                  OUT  NOCOPY NUMBER
38709  ,x_msg_data                   OUT  NOCOPY VARCHAR2
38710  ,x_return_status              OUT  NOCOPY VARCHAR2
38711  ,p_project_id                  IN         NUMBER
38712  ,p_tasks_in                    IN         pa_project_pub.lite_task_in_tbl_type
38713  ,p_pass_entire_structure       IN         VARCHAR2
38714  ,p_pm_product_code             IN         VARCHAR2
38715  ,p_bulk_update_mode            IN         VARCHAR2  := 'ALL' -- other possible value is 'NO_DATES'
38716  ,p_op_validate_flag            IN         VARCHAR2  := 'N'
38717  ,p_update_mode                 IN         VARCHAR2  := 'PA_UPD_WBS_ATTR'
38718 ) IS
38719 
38720     --variables needed for API standard parameters
38721     l_return_status          VARCHAR2(1);
38722     l_msg_count              NUMBER;
38723     l_msg_data               VARCHAR2(2000);
38724 
38725     CURSOR get_project_details_csr (c_project_id NUMBER) IS
38726     SELECT project_id, name, segment1, pm_project_reference,
38727            start_date, completion_date, project_type, structure_sharing_code
38728     FROM PA_PROJECTS_ALL
38729     WHERE project_id = c_project_id;
38730 
38731     CURSOR get_task_details_csr (c_project_id NUMBER) IS
38732     SELECT element_version_id,proj_element_id,display_sequence,wbs_level,wbs_number
38733     FROM pa_proj_element_versions
38734     WHERE project_id = p_project_id
38735     AND object_type = 'PA_TASKS'
38736     ORDER BY display_sequence;
38737 
38738     l_project_details_rec             get_project_details_csr%ROWTYPE;
38739     l_project_in_rec                  pa_project_pub.project_in_rec_type;
38740     l_project_out_rec                 pa_project_pub.project_out_rec_type;
38741     l_tasks_in                        pa_project_pub.task_in_tbl_type;
38742     l_tasks_out                       pa_project_pub.task_out_tbl_type;
38743     l_workflow_started                VARCHAR2(1);
38744     l_first_index                     NUMBER;
38745     l_last_index                      NUMBER;
38746     l_count                           NUMBER;
38747 	l_structure_version_id			  NUMBER;
38748 	message varchar2(2000);
38749 	t_str varchar2(1);
38750 BEGIN
38751 
38752     SAVEPOINT BULK_UPDATE_TASKS_LITE;
38753 
38754 /* Added below block to ensure that the new API's are controlled by Dev*/
38755 	begin
38756 			select 'x' into  t_str
38757 			from pji_system_parameters
38758 			where name = 'BULK_LITE'
38759 			and value = 'Y';
38760 
38761 	exception
38762 		when no_data_found  then
38763 				    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
38764                               p_msg_name => 'PA_LITE_API_CANT_USE');
38765 					RAISE FND_API.G_EXC_ERROR;
38766 		when others  then
38767 
38768 			raise;
38769 	end;
38770 
38771     IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
38772         FND_MSG_PUB.Initialize;
38773     END IF;
38774 
38775     OPEN get_project_details_csr (p_project_id);
38776     FETCH get_project_details_csr INTO l_project_details_rec;
38777     CLOSE get_project_details_csr;
38778 
38779     --IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id),' ') <> 'SHARE_FULL'
38780     IF NVL(l_project_details_rec.structure_sharing_code,' ') <> 'SHARE_FULL'
38781        OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id),'N') = 'Y' THEN
38782          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
38783                               p_msg_name => 'PA_CANT_USE_LITE_API');
38784          RAISE FND_API.G_EXC_ERROR;
38785     END IF;
38786 
38787     l_project_in_rec.pm_project_reference     := l_project_details_rec.pm_project_reference;
38788     l_project_in_rec.pa_project_number        := l_project_details_rec.segment1;
38789     l_project_in_rec.project_name             := l_project_details_rec.name;
38790     l_project_in_rec.pa_project_id            := p_project_id;
38791     l_project_in_rec.process_mode             := 'CONCURRENT';
38792 
38793     PA_PROJECT_PUB.G_MASS_UPDATE_TASKS        := 'Y';
38794     PA_PROJECT_PUB.G_UPDATE_TASK_ALLOWED      := NULL;
38795     PA_PROJECT_PUB.G_UPDATE_PRJ_ALLOWED       := NULL;
38796     PA_PROJECT_PUB.G_VALID_PRODUCT_CODE       := NULL;
38797     PA_PROJECT_PUB.G_SEGMENT1                 := l_project_details_rec.segment1;
38798     PA_PROJECT_PUB.G_PROJ_START_DATE          := l_project_details_rec.start_date;
38799     PA_PROJECT_PUB.G_PROJ_COMPLETION_DATE     := l_project_details_rec.completion_date;
38800     PA_PROJECT_PUB.G_STRUC_ELEMENT_ID         := NULL;
38801     PA_PROJECT_PUB.G_PROJECT_TYPE             := l_project_details_rec.project_type;
38802     PA_PROJECT_PUB.G_IS_SUB_PROJ_ASSOCIATED   := NULL;
38803     PA_PROJECT_PUB.G_BULK_UPDATE_MODE         := p_bulk_update_mode;
38804 
38805 		-- Set the G_ROLLUP_FLAG based on profile options
38806 	PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
38807 	l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id);
38808 	IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38809 			PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'UPDATE',l_msg_data,l_return_status);
38810 			IF l_return_status <> 'S'
38811 			THEN
38812 				PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
38813                                      p_msg_name =>'PA_CANT_USE_LITE_API' );
38814 				RAISE  FND_API.G_EXC_ERROR;
38815 			ELSE
38816 				PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_project_id,l_structure_version_id,'UPDATE');
38817 			END IF;
38818 	END IF;
38819 
38820 
38821     PA_PROJECT_PUB.G_FP_DFF_TBL.delete;
38822     l_first_index := p_tasks_in.first;
38823     l_last_index := p_tasks_in.last;
38824     l_count := 0;
38825     FOR j IN l_first_index..l_last_index LOOP
38826         l_count := l_count + 1;
38827 
38828 		IF p_tasks_in(j).tasks_dff = 'B' THEN
38829           G_FP_DFF_TBL(l_count).pa_task_id         := p_tasks_in(j).pa_task_id;
38830           G_FP_DFF_TBL(l_count).pa_task_name       := p_tasks_in(j).task_name;
38831           G_FP_DFF_TBL(l_count).pm_task_reference  := p_tasks_in(j).pm_task_reference;
38832           G_FP_DFF_TBL(l_count).attribute_category := p_tasks_in(j).fp_attribute_category;
38833           G_FP_DFF_TBL(l_count).attribute1         := p_tasks_in(j).fp_attribute1;
38834           G_FP_DFF_TBL(l_count).attribute2         := p_tasks_in(j).fp_attribute2;
38835           G_FP_DFF_TBL(l_count).attribute3         := p_tasks_in(j).fp_attribute3;
38836           G_FP_DFF_TBL(l_count).attribute4         := p_tasks_in(j).fp_attribute4;
38837           G_FP_DFF_TBL(l_count).attribute5         := p_tasks_in(j).fp_attribute5;
38838           G_FP_DFF_TBL(l_count).attribute6         := p_tasks_in(j).fp_attribute6;
38839           G_FP_DFF_TBL(l_count).attribute7         := p_tasks_in(j).fp_attribute7;
38840           G_FP_DFF_TBL(l_count).attribute8         := p_tasks_in(j).fp_attribute8;
38841           G_FP_DFF_TBL(l_count).attribute9         := p_tasks_in(j).fp_attribute9;
38842           G_FP_DFF_TBL(l_count).attribute10        := p_tasks_in(j).fp_attribute10;
38843           l_tasks_in(l_count).tasks_dff            := 'N';
38844        ELSE
38845           l_tasks_in(l_count).tasks_dff            := p_tasks_in(j).tasks_dff;
38846        END IF;
38847 
38848        l_tasks_in(l_count).pm_task_reference    := p_tasks_in(j).pm_task_reference;
38849        l_tasks_in(l_count).pa_task_id           := p_tasks_in(j).pa_task_id;
38850        l_tasks_in(l_count).task_name            := p_tasks_in(j).task_name;
38851        l_tasks_in(l_count).long_task_name       := p_tasks_in(j).long_task_name;
38852        l_tasks_in(l_count).pa_task_number       := p_tasks_in(j).pa_task_number;
38853        l_tasks_in(l_count).task_description     := p_tasks_in(j).task_description;
38854        -- we'll not allow customer to change the parent task
38855        l_tasks_in(l_count).pm_parent_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR; --p_tasks_in(j).pm_parent_task_reference;
38856        l_tasks_in(l_count).pa_parent_task_id    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM; --p_tasks_in(j).pa_parent_task_id;
38857        --       l_tasks_in(l_count).tasks_dff            := p_tasks_in(j).tasks_dff; -- Moved code to top to handle BOTH scenario for Huawei
38858        l_tasks_in(l_count).attribute_category   := p_tasks_in(j).attribute_category;
38859        l_tasks_in(l_count).attribute1           := p_tasks_in(j).attribute1;
38860        l_tasks_in(l_count).attribute2           := p_tasks_in(j).attribute2;
38861        l_tasks_in(l_count).attribute3           := p_tasks_in(j).attribute3;
38862        l_tasks_in(l_count).attribute4           := p_tasks_in(j).attribute4;
38863        l_tasks_in(l_count).attribute5           := p_tasks_in(j).attribute5;
38864        l_tasks_in(l_count).attribute6           := p_tasks_in(j).attribute6;
38865        l_tasks_in(l_count).attribute7           := p_tasks_in(j).attribute7;
38866        l_tasks_in(l_count).attribute8           := p_tasks_in(j).attribute8;
38867        l_tasks_in(l_count).attribute9           := p_tasks_in(j).attribute9;
38868        l_tasks_in(l_count).attribute10          := p_tasks_in(j).attribute10;
38869        l_tasks_in(l_count).attribute11          := p_tasks_in(j).attribute11;
38870        l_tasks_in(l_count).attribute12          := p_tasks_in(j).attribute12;
38871        l_tasks_in(l_count).attribute13          := p_tasks_in(j).attribute13;
38872        l_tasks_in(l_count).attribute14          := p_tasks_in(j).attribute14;
38873        l_tasks_in(l_count).attribute15          := p_tasks_in(j).attribute15;
38874        l_tasks_in(l_count).PM_SOURCE_CODE       := p_tasks_in(j).PM_SOURCE_CODE;
38875        l_tasks_in(l_count).STATUS_CODE          := p_tasks_in(j).STATUS_CODE;
38876 
38877 	   -- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
38878 		l_tasks_in(l_count).service_type_code 		:= p_tasks_in(j).service_type_code;
38879 		l_tasks_in(l_count).chargeable_flag			:= p_tasks_in(j).chargeable_flag;
38880 		l_tasks_in(l_count).MILESTONE_FLAG			:= p_tasks_in(j).MILESTONE_FLAG;
38881 		l_tasks_in(l_count).PLANNED_WORK_QUANTITY	:= p_tasks_in(j).PLANNED_WORK_QUANTITY;
38882 		l_tasks_in(l_count).TASK_TYPE				:= p_tasks_in(j).TASK_TYPE;
38883 		l_tasks_in(l_count).WQ_UOM_CODE				:= p_tasks_in(j).WQ_UOM_CODE;
38884 		l_tasks_in(l_count).carrying_out_organization_id	:= p_tasks_in(j).carrying_out_organization_id;
38885 		l_tasks_in(l_count).task_manager_person_id	:= p_tasks_in(j).task_manager_person_id;
38886 		l_tasks_in(l_count).work_type_id			:= p_tasks_in(j).work_type_id;
38887 		l_tasks_in(l_count).CRITICAL_FLAG			:= p_tasks_in(j).CRITICAL_FLAG;
38888 		l_tasks_in(l_count).financial_task_flag		:= p_tasks_in(j).financial_task_flag;
38889 
38890        IF p_bulk_update_mode = 'ALL' THEN
38891           l_tasks_in(l_count).task_start_date      := p_tasks_in(j).task_start_date;
38892           l_tasks_in(l_count).task_completion_date := p_tasks_in(j).task_completion_date;
38893           l_tasks_in(l_count).actual_start_date    := p_tasks_in(j).actual_start_date;
38894           l_tasks_in(l_count).actual_finish_date   := p_tasks_in(j).actual_finish_date;
38895           l_tasks_in(l_count).early_start_date     := p_tasks_in(j).early_start_date;
38896           l_tasks_in(l_count).early_finish_date    := p_tasks_in(j).early_finish_date;
38897           l_tasks_in(l_count).late_start_date      := p_tasks_in(j).late_start_date;
38898           l_tasks_in(l_count).late_finish_date     := p_tasks_in(j).late_finish_date;
38899           l_tasks_in(l_count).scheduled_start_date := p_tasks_in(j).scheduled_start_date;
38900           l_tasks_in(l_count).scheduled_finish_date:= p_tasks_in(j).scheduled_finish_date;
38901           l_tasks_in(l_count).ESTIMATED_START_DATE := p_tasks_in(j).ESTIMATED_START_DATE;
38902           l_tasks_in(l_count).ESTIMATED_FINISH_DATE:= p_tasks_in(j).ESTIMATED_FINISH_DATE;
38903           l_tasks_in(l_count).BASELINE_START_DATE  := p_tasks_in(j).BASELINE_START_DATE;
38904           l_tasks_in(l_count).BASELINE_FINISH_DATE := p_tasks_in(j).BASELINE_FINISH_DATE;
38905           l_tasks_in(l_count).CLOSED_DATE          := p_tasks_in(j).CLOSED_DATE;
38906        ELSE
38907           l_tasks_in(l_count).task_start_date      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38908           l_tasks_in(l_count).task_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38909           l_tasks_in(l_count).actual_start_date    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38910           l_tasks_in(l_count).actual_finish_date   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38911           l_tasks_in(l_count).early_start_date     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38912           l_tasks_in(l_count).early_finish_date    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38913           l_tasks_in(l_count).late_start_date      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38914           l_tasks_in(l_count).late_finish_date     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38915           l_tasks_in(l_count).scheduled_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38916           l_tasks_in(l_count).scheduled_finish_date:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38917           l_tasks_in(l_count).ESTIMATED_START_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38918           l_tasks_in(l_count).ESTIMATED_FINISH_DATE:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38919           l_tasks_in(l_count).BASELINE_START_DATE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38920           l_tasks_in(l_count).BASELINE_FINISH_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38921           l_tasks_in(l_count).CLOSED_DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38922        END IF;
38923 	   IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38924 			PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,p_tasks_in(j).pa_task_id,l_structure_version_id,'UPDATE');
38925 	   END IF;
38926 	END LOOP;
38927 
38928     pa_project_pub.update_project(p_api_version_number    => p_api_version_number,
38929                                   p_commit                => p_commit,
38930                                   p_init_msg_list         => p_init_msg_list,
38931                                   p_msg_count             => l_msg_count,
38932                                   p_msg_data              => l_msg_data,
38933                                   p_return_status         => l_return_status,
38934                                   p_workflow_started      => l_workflow_started,
38935                                   p_pm_product_code       => p_pm_product_code,
38936                                   p_project_in            => l_project_in_rec,
38937                                   p_project_out           => l_project_out_rec,
38938                                   p_tasks_in              => l_tasks_in,
38939                                   p_tasks_out             => l_tasks_out,
38940                                   p_op_validate_flag      => p_op_validate_flag,
38941                                   p_pass_entire_structure => p_pass_entire_structure,
38942                                   p_update_mode           => p_update_mode);
38943     IF l_return_status <> 'S' THEN
38944        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
38945                             p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
38946        RAISE FND_API.G_EXC_ERROR;
38947     END IF;
38948 	IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38949 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
38950 	END IF;
38951     -- reset all global variables with NULL
38952     PA_PROJECT_PUB.G_MASS_UPDATE_TASKS        := NULL;
38953     PA_PROJECT_PUB.G_UPDATE_TASK_ALLOWED      := NULL;
38954     PA_PROJECT_PUB.G_UPDATE_PRJ_ALLOWED       := NULL;
38955     PA_PROJECT_PUB.G_VALID_PRODUCT_CODE       := NULL;
38956     PA_PROJECT_PUB.G_SEGMENT1                 := NULL;
38957     PA_PROJECT_PUB.G_PROJ_START_DATE          := NULL;
38958     PA_PROJECT_PUB.G_PROJ_COMPLETION_DATE     := NULL;
38959     PA_PROJECT_PUB.G_STRUC_ELEMENT_ID         := NULL;
38960     PA_PROJECT_PUB.G_PROJECT_TYPE             := NULL;
38961     PA_PROJECT_PUB.G_IS_SUB_PROJ_ASSOCIATED   := NULL;
38962     PA_PROJECT_PUB.G_BULK_UPDATE_MODE         := NULL;
38963 
38964 	PA_PROJECT_PUB.G_FP_DFF_TBL.delete;
38965 
38966     IF (FND_API.to_boolean( p_commit )) THEN
38967       COMMIT WORK;
38968     END IF;
38969     x_return_status := FND_API.G_RET_STS_SUCCESS;
38970 
38971 EXCEPTION
38972     WHEN FND_API.G_EXC_ERROR THEN
38973         x_return_status := FND_API.G_RET_STS_ERROR ;
38974         ROLLBACK TO BULK_UPDATE_TASKS_LITE;
38975 
38976         FND_MSG_PUB.Count_And_Get
38977       (   p_count    =>  x_msg_count  ,
38978           p_data    =>  x_msg_data  );
38979 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38980 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
38981 		END IF;
38982 
38983     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
38984         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
38985         ROLLBACK TO BULK_UPDATE_TASKS_LITE;
38986 
38987         FND_MSG_PUB.Count_And_Get
38988       (   p_count    =>  x_msg_count  ,
38989           p_data    =>  x_msg_data  );
38990 
38991 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38992 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
38993 		END IF;
38994 
38995     WHEN OTHERS THEN
38996         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
38997         ROLLBACK TO BULK_UPDATE_TASKS_LITE;
38998 
38999         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
39000             FND_MSG_PUB.add_exc_msg
39001         ( p_pkg_name    => G_PKG_NAME
39002         , p_procedure_name  => 'BULK_UPDATE_TASKS_LITE');
39003         END IF;
39004 
39005         FND_MSG_PUB.Count_And_Get
39006       (   p_count    =>  x_msg_count  ,
39007           p_data    =>  x_msg_data  );
39008 
39009 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39010 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39011 		END IF;
39012 
39013 END BULK_UPDATE_TASKS_LITE;
39014 
39015 -- Added BULK_ADD_TASKS_LITE api for Huawei enhancement bug 13923366 by skkoppul
39016 PROCEDURE BULK_ADD_TASKS_LITE
39017 ( p_api_version_number          IN         NUMBER
39018  ,p_commit                      IN         VARCHAR2  := FND_API.G_FALSE
39019  ,p_init_msg_list               IN         VARCHAR2  := FND_API.G_FALSE
39020  ,x_msg_count                  OUT  NOCOPY NUMBER
39021  ,x_msg_data                   OUT  NOCOPY VARCHAR2
39022  ,x_return_status              OUT  NOCOPY VARCHAR2
39023  ,p_project_id                  IN         NUMBER
39024  ,p_tasks_in                    IN         pa_project_pub.lite_task_in_tbl_type
39025  ,p_pass_entire_structure       IN         VARCHAR2
39026  ,p_pm_product_code             IN         VARCHAR2
39027  ,p_bulk_add_mode               IN         VARCHAR2  := 'ALL' -- other possible value is 'NO_DATES'
39028  ,p_op_validate_flag            IN         VARCHAR2  := 'N'
39029  ,p_update_mode                 IN         VARCHAR2  := 'PA_UPD_WBS_ATTR'
39030  ,p_tasks_out                   OUT NOCOPY pa_project_pub.task_out_tbl_type
39031 ) IS
39032 
39033     --variables needed for API standard parameters
39034     l_return_status          VARCHAR2(1);
39035     l_msg_count              NUMBER;
39036     l_msg_data               VARCHAR2(2000);
39037 
39038     CURSOR get_project_details_csr (c_project_id NUMBER) IS
39039     SELECT project_id, name, segment1, pm_project_reference,
39040            start_date, completion_date, project_type, structure_sharing_code
39041     FROM PA_PROJECTS_ALL
39042     WHERE project_id = c_project_id;
39043 
39044     CURSOR check_tasks_exists_csr(c_project_id NUMBER) IS
39045     SELECT 'Y'
39046     FROM pa_tasks
39047     WHERE project_id = c_project_id
39048       AND ROWNUM = 1;
39049 
39050     l_project_details_rec             get_project_details_csr%ROWTYPE;
39051     l_project_in_rec                  pa_project_pub.project_in_rec_type;
39052     l_project_out_rec                 pa_project_pub.project_out_rec_type;
39053     l_tasks_in                        pa_project_pub.task_in_tbl_type;
39054     l_tasks_out                       pa_project_pub.task_out_tbl_type;
39055     l_workflow_started                VARCHAR2(1);
39056     l_first_index                     NUMBER;
39057     l_last_index                      NUMBER;
39058     l_count                           NUMBER;
39059     l_incremental_add_tasks           VARCHAR2(1);
39060     l_task_id                         NUMBER(15);
39061     l_project_number                  VARCHAR2(25);
39062     o_project_id                      NUMBER(15);
39063 	l_tasks_dff                       VARCHAR(1);
39064 	message varchar2(2000);
39065 	t_str varchar2(1);
39066 
39067 BEGIN
39068     SAVEPOINT BULK_ADD_TASKS_LITE;
39069 
39070 	 /* Added below block to ensure that the new API's are controlled by Dev*/
39071 	begin
39072 			select 'x' into  t_str
39073 			from pji_system_parameters
39074 			where name = 'BULK_LITE'
39075 			and value = 'Y';
39076 
39077 	exception
39078 		when no_data_found  then
39079 		   		    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39080                               p_msg_name => 'PA_LITE_API_CANT_USE');
39081             RAISE FND_API.G_EXC_ERROR;
39082 		when others  then
39083 
39084 			raise;
39085 	end;
39086 
39087     IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
39088         FND_MSG_PUB.Initialize;
39089     END IF;
39090 
39091     OPEN get_project_details_csr (p_project_id);
39092     FETCH get_project_details_csr INTO l_project_details_rec;
39093     CLOSE get_project_details_csr;
39094 
39095     OPEN check_tasks_exists_csr (p_project_id);
39096     FETCH check_tasks_exists_csr INTO l_incremental_add_tasks;
39097     IF check_tasks_exists_csr%NOTFOUND THEN
39098        l_incremental_add_tasks := 'N';
39099     END IF;
39100     CLOSE check_tasks_exists_csr;
39101 
39102     --IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id),' ') <> 'SHARE_FULL'
39103     IF NVL(l_project_details_rec.structure_sharing_code,' ') <> 'SHARE_FULL'
39104        OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id),'N') = 'Y' THEN
39105          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39106                               p_msg_name => 'PA_CANT_USE_LITE_API');
39107          RAISE FND_API.G_EXC_ERROR;
39108     END IF;
39109 
39110     PA_PROJECT_PUB.G_MASS_ADD_TASKS           := 'Y';
39111     PA_PROJECT_PUB.G_UPDATE_TASK_ALLOWED      := NULL;
39112     PA_PROJECT_PUB.G_UPDATE_PRJ_ALLOWED       := NULL;
39113     PA_PROJECT_PUB.G_VALID_PRODUCT_CODE       := NULL;
39114     PA_PROJECT_PUB.G_SEGMENT1                 := l_project_details_rec.segment1;
39115     PA_PROJECT_PUB.G_PROJ_START_DATE          := l_project_details_rec.start_date;
39116     PA_PROJECT_PUB.G_PROJ_COMPLETION_DATE     := l_project_details_rec.completion_date;
39117     PA_PROJECT_PUB.G_STRUC_ELEMENT_ID         := NULL;
39118     PA_PROJECT_PUB.G_PROJECT_TYPE             := l_project_details_rec.project_type;
39119     PA_PROJECT_PUB.G_IS_SUB_PROJ_ASSOCIATED   := NULL;
39120     PA_PROJECT_PUB.G_BULK_ADD_MODE            := p_bulk_add_mode;
39121     PA_PROJECT_PUB.G_STRUC_VERSION_ID         := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id);
39122 	PA_PROJECT_PUB.G_FP_DFF_TBL.delete;
39123 
39124 	-- Set the G_ROLLUP_FLAG based on profile options
39125 	PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
39126 	IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39127 		IF l_incremental_add_tasks = 'Y' THEN
39128 			PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'ADD',l_msg_data,l_return_status);
39129 		ELSE
39130 			PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'ADD_F',l_msg_data,l_return_status);
39131 		END IF;
39132 			IF l_return_status <> 'S'
39133 			THEN
39134 			    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39135                                      p_msg_name =>l_msg_data );
39136 				RAISE  FND_API.G_EXC_ERROR;
39137 			ELSE
39138 				PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_project_id,PA_PROJECT_PUB.G_STRUC_VERSION_ID,'ADD');
39139 			END IF;
39140 	END IF;
39141 
39142     IF l_incremental_add_tasks = 'Y' THEN
39143 
39144        l_first_index := p_tasks_in.first;
39145        l_last_index  := p_tasks_in.last;
39146 
39147        IF p_bulk_add_mode = 'ALL' THEN
39148           FOR j IN l_first_index..l_last_index LOOP
39149 
39150 			 IF p_tasks_in(j).tasks_dff = 'B' THEN
39151                 G_FP_DFF_TBL(1).pa_task_name       := p_tasks_in(j).task_name;
39152                 G_FP_DFF_TBL(1).pm_task_reference  := p_tasks_in(j).pm_task_reference;
39153                 G_FP_DFF_TBL(1).attribute_category := p_tasks_in(j).fp_attribute_category;
39154                 G_FP_DFF_TBL(1).attribute1         := p_tasks_in(j).fp_attribute1;
39155                 G_FP_DFF_TBL(1).attribute2         := p_tasks_in(j).fp_attribute2;
39156                 G_FP_DFF_TBL(1).attribute3         := p_tasks_in(j).fp_attribute3;
39157                 G_FP_DFF_TBL(1).attribute4         := p_tasks_in(j).fp_attribute4;
39158                 G_FP_DFF_TBL(1).attribute5         := p_tasks_in(j).fp_attribute5;
39159                 G_FP_DFF_TBL(1).attribute6         := p_tasks_in(j).fp_attribute6;
39160                 G_FP_DFF_TBL(1).attribute7         := p_tasks_in(j).fp_attribute7;
39161                 G_FP_DFF_TBL(1).attribute8         := p_tasks_in(j).fp_attribute8;
39162                 G_FP_DFF_TBL(1).attribute9         := p_tasks_in(j).fp_attribute9;
39163                 G_FP_DFF_TBL(1).attribute10        := p_tasks_in(j).fp_attribute10;
39164                 l_tasks_dff                        := 'N';
39165              ELSE
39166                 l_tasks_dff                        := p_tasks_in(j).tasks_dff;
39167              END IF;
39168 
39169              pa_project_pub.add_task(
39170                   p_api_version_number          => p_api_version_number
39171                  ,p_commit                      => p_commit
39172                  ,p_init_msg_list               => p_init_msg_list
39173                  ,p_msg_count                   => l_msg_count --Out
39174                  ,p_msg_data                    => l_msg_data --Out
39175                  ,p_return_status               => l_return_status --Out
39176                  ,p_pm_product_code             => p_pm_product_code
39177                  ,p_pa_project_id               => p_project_id
39178                  ,p_pm_task_reference           => p_tasks_in(j).pm_task_reference
39179                  ,p_pa_task_number              => p_tasks_in(j).pa_task_number
39180                  ,p_task_name                   => p_tasks_in(j).task_name
39181                  ,p_long_task_name              => p_tasks_in(j).long_task_name
39182                  ,p_task_description            => p_tasks_in(j).task_description
39183                  ,p_pm_parent_task_reference    => p_tasks_in(j).pm_parent_task_reference
39184                  ,p_pa_parent_task_id           => p_tasks_in(j).pa_parent_task_id
39185                  ,p_tasks_dff                   => l_tasks_dff
39186                  ,p_attribute_category          => p_tasks_in(j).attribute_category
39187                  ,p_attribute1                  => p_tasks_in(j).attribute1
39188                  ,p_attribute2                  => p_tasks_in(j).attribute2
39189                  ,p_attribute3                  => p_tasks_in(j).attribute3
39190                  ,p_attribute4                  => p_tasks_in(j).attribute4
39191                  ,p_attribute5                  => p_tasks_in(j).attribute5
39192                  ,p_attribute6                  => p_tasks_in(j).attribute6
39193                  ,p_attribute7                  => p_tasks_in(j).attribute7
39194                  ,p_attribute8                  => p_tasks_in(j).attribute8
39195                  ,p_attribute9                  => p_tasks_in(j).attribute9
39196                  ,p_attribute10                 => p_tasks_in(j).attribute10
39197                  ,p_attribute11                 => p_tasks_in(j).attribute11
39198                  ,p_attribute12                 => p_tasks_in(j).attribute12
39199                  ,p_attribute13                 => p_tasks_in(j).attribute13
39200                  ,p_attribute14                 => p_tasks_in(j).attribute14
39201                  ,p_attribute15                 => p_tasks_in(j).attribute15
39202                  ,P_PM_SOURCE_CODE              => p_tasks_in(j).PM_SOURCE_CODE
39203                  ,P_STATUS_CODE                 => p_tasks_in(j).STATUS_CODE
39204                  -- All dates attributes start from here
39205                  ,p_task_start_date             => p_tasks_in(j).task_start_date
39206                  ,p_task_completion_date        => p_tasks_in(j).task_completion_date
39207                  ,p_actual_start_date           => p_tasks_in(j).actual_start_date
39208                  ,p_actual_finish_date          => p_tasks_in(j).actual_finish_date
39209                  ,p_early_start_date            => p_tasks_in(j).early_start_date
39210                  ,p_early_finish_date           => p_tasks_in(j).early_finish_date
39211                  ,p_late_start_date             => p_tasks_in(j).late_start_date
39212                  ,p_late_finish_date            => p_tasks_in(j).late_finish_date
39213                  ,p_scheduled_start_date        => p_tasks_in(j).scheduled_start_date
39214                  ,p_scheduled_finish_date       => p_tasks_in(j).scheduled_finish_date
39215                  ,P_ESTIMATED_START_DATE        => p_tasks_in(j).ESTIMATED_START_DATE
39216                  ,P_ESTIMATED_FINISH_DATE       => p_tasks_in(j).ESTIMATED_FINISH_DATE
39217                  ,P_BASELINE_START_DATE         => p_tasks_in(j).BASELINE_START_DATE
39218                  ,P_BASELINE_FINISH_DATE        => p_tasks_in(j).BASELINE_FINISH_DATE
39219                  ,P_CLOSED_DATE                 => p_tasks_in(j).CLOSED_DATE
39220                  ,p_structure_version_id        => PA_PROJECT_PUB.G_STRUC_VERSION_ID
39221                  ,p_pa_project_id_out           => o_project_id --OUT
39222                  ,p_pa_project_number_out       => l_project_number --OUT
39223                  ,p_task_id                     => l_task_id--OUT
39224                  ,p_process_mode                => 'CONCURRENT'
39225                  ,p_structure_updates_flag      => 'N'
39226                  ,p_op_validate_flag            => p_op_validate_flag,
39227 				 -- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
39228 					p_service_type_code	=> p_tasks_in(j).service_type_code,
39229 					p_chargeable_flag	=> p_tasks_in(j).chargeable_flag,
39230 					p_MILESTONE_FLAG	=> p_tasks_in(j).MILESTONE_FLAG,
39231 					p_PLANNED_WORK_QUANTITY	=> p_tasks_in(j).PLANNED_WORK_QUANTITY,
39232 					p_TASK_TYPE	=> p_tasks_in(j).TASK_TYPE,
39233 					p_WQ_UOM_CODE	=> p_tasks_in(j).WQ_UOM_CODE,
39234 					p_carrying_out_organization_id	=> p_tasks_in(j).carrying_out_organization_id,
39235 					p_task_manager_person_id	=> p_tasks_in(j).task_manager_person_id,
39236 					p_work_type_id	=> p_tasks_in(j).work_type_id,
39237 					p_CRITICAL_FLAG	=> p_tasks_in(j).CRITICAL_FLAG,
39238 					p_financial_task_flag	=> p_tasks_in(j).financial_task_flag
39239                );
39240                IF l_return_status <> 'S' THEN
39241                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39242                                        p_msg_name => 'PA_ERROR_ADDING_TASKS');
39243                   RAISE FND_API.G_EXC_ERROR;
39244                ELSE
39245                     IF(p_commit=FND_API.G_TRUE) THEN
39246 						commit;
39247 						SAVEPOINT BULK_ADD_TASKS_LITE;
39248 					END IF;
39249 					p_tasks_out(j).pa_task_id:=l_task_id;
39250 
39251 			   END IF;
39252 			   IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39253 			   PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,l_task_id,PA_PROJECT_PUB.G_STRUC_VERSION_ID,'ADD_INC');
39254 			   END IF;
39255           END LOOP;
39256 
39257        ELSE -- NON_DATES scenario while adding tasking incrementally
39258           FOR j IN l_first_index..l_last_index LOOP
39259 
39260 			IF p_tasks_in(j).tasks_dff = 'B' THEN
39261                 G_FP_DFF_TBL(1).pa_task_name       := p_tasks_in(j).task_name;
39262                 G_FP_DFF_TBL(1).pm_task_reference  := p_tasks_in(j).pm_task_reference;
39263                 G_FP_DFF_TBL(1).attribute_category := p_tasks_in(j).fp_attribute_category;
39264                 G_FP_DFF_TBL(1).attribute1         := p_tasks_in(j).fp_attribute1;
39265                 G_FP_DFF_TBL(1).attribute2         := p_tasks_in(j).fp_attribute2;
39266                 G_FP_DFF_TBL(1).attribute3         := p_tasks_in(j).fp_attribute3;
39267                 G_FP_DFF_TBL(1).attribute4         := p_tasks_in(j).fp_attribute4;
39268                 G_FP_DFF_TBL(1).attribute5         := p_tasks_in(j).fp_attribute5;
39269                 G_FP_DFF_TBL(1).attribute6         := p_tasks_in(j).fp_attribute6;
39270                 G_FP_DFF_TBL(1).attribute7         := p_tasks_in(j).fp_attribute7;
39271                 G_FP_DFF_TBL(1).attribute8         := p_tasks_in(j).fp_attribute8;
39272                 G_FP_DFF_TBL(1).attribute9         := p_tasks_in(j).fp_attribute9;
39273                 G_FP_DFF_TBL(1).attribute10        := p_tasks_in(j).fp_attribute10;
39274                 l_tasks_dff                        := 'N';
39275              ELSE
39276                 l_tasks_dff                        := p_tasks_in(j).tasks_dff;
39277              END IF;
39278 
39279              pa_project_pub.add_task(
39280                   p_api_version_number          => p_api_version_number
39281                  ,p_commit                      => p_commit
39282                  ,p_init_msg_list               => p_init_msg_list
39283                  ,p_msg_count                   => l_msg_count --Out
39284                  ,p_msg_data                    => l_msg_data --Out
39285                  ,p_return_status               => l_return_status --Out
39286                  ,p_pm_product_code             => p_pm_product_code
39287                  ,p_pa_project_id               => p_project_id
39288                  ,p_pm_task_reference           => p_tasks_in(j).pm_task_reference
39289                  ,p_pa_task_number              => p_tasks_in(j).pa_task_number
39290                  ,p_task_name                   => p_tasks_in(j).task_name
39291                  ,p_long_task_name              => p_tasks_in(j).long_task_name
39292                  ,p_task_description            => p_tasks_in(j).task_description
39293                  ,p_pm_parent_task_reference    => p_tasks_in(j).pm_parent_task_reference
39294                  ,p_pa_parent_task_id           => p_tasks_in(j).pa_parent_task_id
39295                  ,p_tasks_dff                   => l_tasks_dff
39296                  ,p_attribute_category          => p_tasks_in(j).attribute_category
39297                  ,p_attribute1                  => p_tasks_in(j).attribute1
39298                  ,p_attribute2                  => p_tasks_in(j).attribute2
39299                  ,p_attribute3                  => p_tasks_in(j).attribute3
39300                  ,p_attribute4                  => p_tasks_in(j).attribute4
39301                  ,p_attribute5                  => p_tasks_in(j).attribute5
39302                  ,p_attribute6                  => p_tasks_in(j).attribute6
39303                  ,p_attribute7                  => p_tasks_in(j).attribute7
39304                  ,p_attribute8                  => p_tasks_in(j).attribute8
39305                  ,p_attribute9                  => p_tasks_in(j).attribute9
39306                  ,p_attribute10                 => p_tasks_in(j).attribute10
39307                  ,p_attribute11                 => p_tasks_in(j).attribute11
39308                  ,p_attribute12                 => p_tasks_in(j).attribute12
39309                  ,p_attribute13                 => p_tasks_in(j).attribute13
39310                  ,p_attribute14                 => p_tasks_in(j).attribute14
39311                  ,p_attribute15                 => p_tasks_in(j).attribute15
39312                  ,P_PM_SOURCE_CODE              => p_tasks_in(j).PM_SOURCE_CODE
39313                  ,P_STATUS_CODE                 => p_tasks_in(j).STATUS_CODE
39314                  ,p_structure_version_id        => PA_PROJECT_PUB.G_STRUC_VERSION_ID
39315                  ,p_pa_project_id_out           => o_project_id --OUT
39316                  ,p_pa_project_number_out       => l_project_number --OUT
39317                  ,p_task_id                     => l_task_id--OUT
39318                  ,p_process_mode                => 'CONCURRENT'
39319                  ,p_structure_updates_flag      => 'N'
39320                  ,p_op_validate_flag            => p_op_validate_flag,
39321 				-- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
39322 					p_service_type_code	=> p_tasks_in(j).service_type_code,
39323 					p_chargeable_flag	=> p_tasks_in(j).chargeable_flag,
39324 					p_MILESTONE_FLAG	=> p_tasks_in(j).MILESTONE_FLAG,
39325 					p_PLANNED_WORK_QUANTITY	=> p_tasks_in(j).PLANNED_WORK_QUANTITY,
39326 					p_TASK_TYPE	=> p_tasks_in(j).TASK_TYPE,
39327 					p_WQ_UOM_CODE	=> p_tasks_in(j).WQ_UOM_CODE,
39328 					p_carrying_out_organization_id	=> p_tasks_in(j).carrying_out_organization_id,
39329 					p_task_manager_person_id	=> p_tasks_in(j).task_manager_person_id,
39330 					p_work_type_id	=> p_tasks_in(j).work_type_id,
39331 					p_CRITICAL_FLAG	=> p_tasks_in(j).CRITICAL_FLAG,
39332 					p_financial_task_flag	=> p_tasks_in(j).financial_task_flag
39333                );
39334                IF l_return_status <> 'S' THEN
39335                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39336                                        p_msg_name => 'PA_ERROR_ADDING_TASKS');
39337                   RAISE FND_API.G_EXC_ERROR;
39338                ELSE
39339 			        IF(p_commit=FND_API.G_TRUE) THEN
39340 						commit;
39341 						SAVEPOINT BULK_ADD_TASKS_LITE;
39342 					END IF;
39343 					p_tasks_out(j).pa_task_id:=l_task_id;
39344 
39345 			   END IF;
39346 			   IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39347 					PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,l_task_id,PA_PROJECT_PUB.G_STRUC_VERSION_ID,'ADD_INC');
39348 			   END IF;
39349           END LOOP;
39350 
39351        END IF;
39352 
39353 
39354 
39355     ELSE -- First time adding new tasks
39356 
39357 	  --PA_PROJECT_PUB.G_ROLLUP_DEFER:='N'; -- Defer flag should be N while adding task for the first time
39358 
39359        l_project_in_rec.pm_project_reference     := l_project_details_rec.pm_project_reference;
39360        l_project_in_rec.pa_project_number        := l_project_details_rec.segment1;
39361        l_project_in_rec.project_name             := l_project_details_rec.name;
39362        l_project_in_rec.pa_project_id            := p_project_id;
39363        l_project_in_rec.process_mode             := 'CONCURRENT';
39364 
39365        l_first_index := p_tasks_in.first;
39366        l_last_index := p_tasks_in.last;
39367        l_count := 0;
39368 
39369        FOR j IN l_first_index..l_last_index LOOP
39370            l_count := l_count + 1;
39371 
39372 		IF p_tasks_in(j).tasks_dff = 'B' THEN
39373              G_FP_DFF_TBL(l_count).pa_task_id         := p_tasks_in(j).pa_task_id;
39374              G_FP_DFF_TBL(l_count).pa_task_name       := p_tasks_in(j).task_name;
39375              G_FP_DFF_TBL(l_count).pm_task_reference  := p_tasks_in(j).pm_task_reference;
39376              G_FP_DFF_TBL(l_count).attribute_category := p_tasks_in(j).fp_attribute_category;
39377              G_FP_DFF_TBL(l_count).attribute1         := p_tasks_in(j).fp_attribute1;
39378              G_FP_DFF_TBL(l_count).attribute2         := p_tasks_in(j).fp_attribute2;
39379              G_FP_DFF_TBL(l_count).attribute3         := p_tasks_in(j).fp_attribute3;
39380              G_FP_DFF_TBL(l_count).attribute4         := p_tasks_in(j).fp_attribute4;
39381              G_FP_DFF_TBL(l_count).attribute5         := p_tasks_in(j).fp_attribute5;
39382              G_FP_DFF_TBL(l_count).attribute6         := p_tasks_in(j).fp_attribute6;
39383              G_FP_DFF_TBL(l_count).attribute7         := p_tasks_in(j).fp_attribute7;
39384              G_FP_DFF_TBL(l_count).attribute8         := p_tasks_in(j).fp_attribute8;
39385              G_FP_DFF_TBL(l_count).attribute9         := p_tasks_in(j).fp_attribute9;
39386              G_FP_DFF_TBL(l_count).attribute10        := p_tasks_in(j).fp_attribute10;
39387              l_tasks_in(l_count).tasks_dff            := 'N';
39388           ELSE
39389              l_tasks_in(l_count).tasks_dff            := p_tasks_in(j).tasks_dff;
39390           END IF;
39391           l_tasks_in(l_count).pm_task_reference    := p_tasks_in(j).pm_task_reference;
39392           l_tasks_in(l_count).pa_task_id           := p_tasks_in(j).pa_task_id;
39393           l_tasks_in(l_count).task_name            := p_tasks_in(j).task_name;
39394           l_tasks_in(l_count).long_task_name       := p_tasks_in(j).long_task_name;
39395           l_tasks_in(l_count).pa_task_number       := p_tasks_in(j).pa_task_number;
39396           l_tasks_in(l_count).task_description     := p_tasks_in(j).task_description;
39397           l_tasks_in(l_count).pm_parent_task_reference := p_tasks_in(j).pm_parent_task_reference;
39398           l_tasks_in(l_count).pa_parent_task_id    := p_tasks_in(j).pa_parent_task_id;
39399           --          l_tasks_in(l_count).tasks_dff            := p_tasks_in(j).tasks_dff; Moved code to top to handle BOTH scenario for Huawe
39400           l_tasks_in(l_count).attribute_category   := p_tasks_in(j).attribute_category;
39401           l_tasks_in(l_count).attribute1           := p_tasks_in(j).attribute1;
39402           l_tasks_in(l_count).attribute2           := p_tasks_in(j).attribute2;
39403           l_tasks_in(l_count).attribute3           := p_tasks_in(j).attribute3;
39404           l_tasks_in(l_count).attribute4           := p_tasks_in(j).attribute4;
39405           l_tasks_in(l_count).attribute5           := p_tasks_in(j).attribute5;
39406           l_tasks_in(l_count).attribute6           := p_tasks_in(j).attribute6;
39407           l_tasks_in(l_count).attribute7           := p_tasks_in(j).attribute7;
39408           l_tasks_in(l_count).attribute8           := p_tasks_in(j).attribute8;
39409           l_tasks_in(l_count).attribute9           := p_tasks_in(j).attribute9;
39410           l_tasks_in(l_count).attribute10          := p_tasks_in(j).attribute10;
39411           l_tasks_in(l_count).attribute11          := p_tasks_in(j).attribute11;
39412           l_tasks_in(l_count).attribute12          := p_tasks_in(j).attribute12;
39413           l_tasks_in(l_count).attribute13          := p_tasks_in(j).attribute13;
39414           l_tasks_in(l_count).attribute14          := p_tasks_in(j).attribute14;
39415           l_tasks_in(l_count).attribute15          := p_tasks_in(j).attribute15;
39416           l_tasks_in(l_count).PM_SOURCE_CODE       := p_tasks_in(j).PM_SOURCE_CODE;
39417           l_tasks_in(l_count).STATUS_CODE          := p_tasks_in(j).STATUS_CODE;
39418 
39419 		-- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
39420 		l_tasks_in(l_count).service_type_code 	:= p_tasks_in(j).service_type_code;
39421 		l_tasks_in(l_count).chargeable_flag	:= p_tasks_in(j).chargeable_flag;
39422 		l_tasks_in(l_count).MILESTONE_FLAG	:= p_tasks_in(j).MILESTONE_FLAG;
39423 		l_tasks_in(l_count).PLANNED_WORK_QUANTITY	:= p_tasks_in(j).PLANNED_WORK_QUANTITY;
39424 		l_tasks_in(l_count).TASK_TYPE	:= p_tasks_in(j).TASK_TYPE;
39425 		l_tasks_in(l_count).WQ_UOM_CODE	:= p_tasks_in(j).WQ_UOM_CODE;
39426 		l_tasks_in(l_count).carrying_out_organization_id	:= p_tasks_in(j).carrying_out_organization_id;
39427 		l_tasks_in(l_count).task_manager_person_id	:= p_tasks_in(j).task_manager_person_id;
39428 		l_tasks_in(l_count).work_type_id	:= p_tasks_in(j).work_type_id;
39429 		l_tasks_in(l_count).CRITICAL_FLAG	:= p_tasks_in(j).CRITICAL_FLAG;
39430 		l_tasks_in(l_count).financial_task_flag	:= p_tasks_in(j).financial_task_flag;
39431 
39432           IF p_bulk_add_mode = 'ALL' THEN
39433              l_tasks_in(l_count).task_start_date      := p_tasks_in(j).task_start_date;
39434              l_tasks_in(l_count).task_completion_date := p_tasks_in(j).task_completion_date;
39435              l_tasks_in(l_count).actual_start_date    := p_tasks_in(j).actual_start_date;
39436              l_tasks_in(l_count).actual_finish_date   := p_tasks_in(j).actual_finish_date;
39437              l_tasks_in(l_count).early_start_date     := p_tasks_in(j).early_start_date;
39438              l_tasks_in(l_count).early_finish_date    := p_tasks_in(j).early_finish_date;
39439              l_tasks_in(l_count).late_start_date      := p_tasks_in(j).late_start_date;
39440              l_tasks_in(l_count).late_finish_date     := p_tasks_in(j).late_finish_date;
39441              l_tasks_in(l_count).scheduled_start_date := p_tasks_in(j).scheduled_start_date;
39442              l_tasks_in(l_count).scheduled_finish_date:= p_tasks_in(j).scheduled_finish_date;
39443              l_tasks_in(l_count).ESTIMATED_START_DATE := p_tasks_in(j).ESTIMATED_START_DATE;
39444              l_tasks_in(l_count).ESTIMATED_FINISH_DATE:= p_tasks_in(j).ESTIMATED_FINISH_DATE;
39445              l_tasks_in(l_count).BASELINE_START_DATE  := p_tasks_in(j).BASELINE_START_DATE;
39446              l_tasks_in(l_count).BASELINE_FINISH_DATE := p_tasks_in(j).BASELINE_FINISH_DATE;
39447              l_tasks_in(l_count).CLOSED_DATE          := p_tasks_in(j).CLOSED_DATE;
39448           ELSE
39449              l_tasks_in(l_count).task_start_date      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39450              l_tasks_in(l_count).task_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39451              l_tasks_in(l_count).actual_start_date    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39452              l_tasks_in(l_count).actual_finish_date   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39453              l_tasks_in(l_count).early_start_date     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39454              l_tasks_in(l_count).early_finish_date    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39455              l_tasks_in(l_count).late_start_date      := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39456              l_tasks_in(l_count).late_finish_date     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39457              l_tasks_in(l_count).scheduled_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39458              l_tasks_in(l_count).scheduled_finish_date:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39459              l_tasks_in(l_count).ESTIMATED_START_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39460              l_tasks_in(l_count).ESTIMATED_FINISH_DATE:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39461              l_tasks_in(l_count).BASELINE_START_DATE  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39462              l_tasks_in(l_count).BASELINE_FINISH_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39463              l_tasks_in(l_count).CLOSED_DATE          := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39464           END IF;
39465 
39466        END LOOP;
39467 
39468        pa_project_pub.update_project(p_api_version_number     => p_api_version_number,
39469                                   p_commit                => p_commit,
39470                                   p_init_msg_list         => p_init_msg_list,
39471                                   p_msg_count             => l_msg_count,
39472                                   p_msg_data              => l_msg_data,
39473                                   p_return_status         => l_return_status,
39474                                   p_workflow_started      => l_workflow_started,
39475                                   p_pm_product_code       => p_pm_product_code,
39476                                   p_project_in            => l_project_in_rec,
39477                                   p_project_out           => l_project_out_rec,
39478                                   p_tasks_in              => l_tasks_in,
39479                                   p_tasks_out             => p_tasks_out,
39480                                   p_op_validate_flag      => p_op_validate_flag,
39481                                   p_pass_entire_structure => p_pass_entire_structure,
39482                                   p_update_mode           => p_update_mode);
39483        IF l_return_status <> 'S' THEN
39484           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39485                                p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
39486           RAISE FND_API.G_EXC_ERROR;
39487        END IF;
39488 			PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,PA_PROJECT_PUB.G_STRUC_VERSION_ID,PA_PROJECT_PUB.G_STRUC_VERSION_ID,'ADD_FIRST');
39489 			--PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39490 
39491 
39492     END IF; -- add_task or update_project
39493 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
39494     IF PA_PROJECT_PUB.G_MASS_ADD_TASKS = 'Y' and NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N') = 'N' then
39495 
39496        PA_PROJECT_STRUCTURE_PVT1.REFRESH_STRUCTURE_VERSION
39497        ( p_project_id                    => p_project_id
39498         ,p_structure_version_id          => PA_PROJECT_PUB.G_STRUC_VERSION_ID
39499         ,x_return_status                => l_return_status
39500         ,x_msg_count                    => l_msg_count
39501         ,x_msg_data                     => l_msg_data
39502         );
39503 
39504        IF l_return_status <> 'S' THEN
39505           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39506                                p_msg_name => 'PA_ERROR_REFRESHING_STRUCTURE');
39507           RAISE FND_API.G_EXC_ERROR;
39508        END IF;
39509     END IF;
39510 
39511     -- reset all global variables with NULL
39512     PA_PROJECT_PUB.G_MASS_ADD_TASKS           := NULL;
39513     PA_PROJECT_PUB.G_UPDATE_TASK_ALLOWED      := NULL;
39514     PA_PROJECT_PUB.G_UPDATE_PRJ_ALLOWED       := NULL;
39515     PA_PROJECT_PUB.G_VALID_PRODUCT_CODE       := NULL;
39516     PA_PROJECT_PUB.G_SEGMENT1                 := NULL;
39517     PA_PROJECT_PUB.G_PROJ_START_DATE          := NULL;
39518     PA_PROJECT_PUB.G_PROJ_COMPLETION_DATE     := NULL;
39519     PA_PROJECT_PUB.G_STRUC_ELEMENT_ID         := NULL;
39520     PA_PROJECT_PUB.G_PROJECT_TYPE             := NULL;
39521     PA_PROJECT_PUB.G_IS_SUB_PROJ_ASSOCIATED   := NULL;
39522     PA_PROJECT_PUB.G_BULK_ADD_MODE            := NULL;
39523     PA_PROJECT_PUB.G_STRUC_VERSION_ID         := NULL;
39524 
39525 	PA_PROJECT_PUB.G_FP_DFF_TBL.delete;
39526 
39527     IF (FND_API.to_boolean( p_commit )) THEN
39528       COMMIT WORK;
39529     END IF;
39530 
39531     x_return_status := FND_API.G_RET_STS_SUCCESS;
39532 
39533 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39534 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39535 		END IF;
39536 
39537 EXCEPTION
39538     WHEN FND_API.G_EXC_ERROR THEN
39539         x_return_status := FND_API.G_RET_STS_ERROR ;
39540 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39541 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39542 		END IF;
39543         ROLLBACK TO BULK_ADD_TASKS_LITE;
39544 
39545         FND_MSG_PUB.Count_And_Get
39546       (   p_count    =>  x_msg_count  ,
39547           p_data    =>  x_msg_data  );
39548 
39549 
39550     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
39551         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
39552 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39553 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39554 		END IF;
39555         ROLLBACK TO BULK_ADD_TASKS_LITE;
39556 
39557         FND_MSG_PUB.Count_And_Get
39558       (   p_count    =>  x_msg_count  ,
39559           p_data    =>  x_msg_data  );
39560 
39561 
39562     WHEN OTHERS THEN
39563         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
39564 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39565 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39566 		END IF;
39567         ROLLBACK TO BULK_ADD_TASKS_LITE;
39568 
39569         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
39570             FND_MSG_PUB.add_exc_msg
39571         ( p_pkg_name    => G_PKG_NAME
39572         , p_procedure_name  => 'BULK_ADD_TASKS_LITE'  );
39573         END IF;
39574 
39575         FND_MSG_PUB.Count_And_Get
39576       (   p_count    =>  x_msg_count  ,
39577           p_data    =>  x_msg_data  );
39578 
39579 END BULK_ADD_TASKS_LITE;
39580 
39581 -- Added new api BULK_MOVE_TASKS_LITE for Huawei enhancement - bug 13923366 by skkoppul
39582 PROCEDURE BULK_MOVE_TASKS_LITE
39583    ( p_api_version           IN     NUMBER   := 1.0,
39584      p_init_msg_list         IN     VARCHAR2 := FND_API.G_TRUE,
39585      p_commit                IN     VARCHAR2 := FND_API.G_FALSE,
39586      p_validate_only         IN     VARCHAR2 := FND_API.G_TRUE,
39587      p_validation_level      IN     NUMBER   := FND_API.G_VALID_LEVEL_FULL,
39588      p_calling_module        IN     VARCHAR2 := 'SELF_SERVICE',
39589      p_debug_mode            IN     VARCHAR2 := 'N',
39590      p_max_msg_count         IN     NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
39591      p_structure_version_id  IN     NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
39592      p_task_version_id_tbl   IN     SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
39593      p_ref_task_version_id   IN     NUMBER,
39594      p_ref_project_id        IN     NUMBER,
39595      p_peer_or_sub           IN     VARCHAR2,
39596      p_record_version_number_tbl     IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
39597      x_return_status                 OUT NOCOPY VARCHAR2,
39598      x_msg_count                     OUT NOCOPY NUMBER,
39599      x_msg_data                      OUT NOCOPY VARCHAR2
39600 )
39601 IS
39602    l_api_name                      CONSTANT VARCHAR(30) := 'BULK_MOVE_TASKS_LITE';
39603    l_api_version                   CONSTANT NUMBER      := 1.0;
39604 
39605    l_return_status                 VARCHAR2(1);
39606    l_msg_count                     NUMBER;
39607    l_msg_data                      VARCHAR2(2000);
39608    l_data                          VARCHAR2(2000);
39609    l_msg_index_out                 NUMBER;
39610    l_error_msg_code                     VARCHAR2(250);
39611 
39612    l_delete_project_allowed      VARCHAR2(1);
39613    l_update_proj_num_allowed      VARCHAR2(1);
39614    l_update_proj_name_allowed    VARCHAR2(1);
39615    l_update_proj_desc_allowed    VARCHAR2(1);
39616    l_update_proj_dates_allowed    VARCHAR2(1);
39617    l_update_proj_status_allowed  VARCHAR2(1);
39618    l_update_proj_manager_allowed  VARCHAR2(1);
39619    l_update_proj_org_allowed      VARCHAR2(1);
39620    l_add_task_allowed            VARCHAR2(1);
39621    l_delete_task_allowed          VARCHAR2(1);
39622    l_update_task_num_allowed      VARCHAR2(1);
39623    l_update_task_name_allowed    VARCHAR2(1);
39624    l_update_task_dates_allowed    VARCHAR2(1);
39625    l_update_task_desc_allowed    VARCHAR2(1);
39626    l_update_parent_task_allowed  VARCHAR2(1);
39627    l_update_task_org_allowed      VARCHAR2(1);
39628 
39629    ref_task_temp_version_id       NUMBER;
39630 
39631    l_err_code         NUMBER        := 0;
39632    l_err_stack        VARCHAR2(200) := NULL;
39633    l_err_stage        VARCHAR2(200) := NULL;
39634 
39635    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
39636 
39637    l_cur_project_id      NUMBER;
39638    CURSOR cur_proj_id
39639    IS
39640      SELECT project_id
39641        FROM pa_proj_element_versions
39642       WHERE element_version_id = p_structure_version_id;
39643 
39644    CURSOR get_product_code ( c_project_id NUMBER ) IS
39645    SELECT pm_product_code
39646    FROM PA_PROJECTS_ALL
39647    WHERE project_id = c_project_id;
39648 
39649     CURSOR cur_struc_type( c_structure_id NUMBER )
39650     IS
39651       SELECT 'Y'
39652         FROM pa_proj_structure_types ppst
39653             ,pa_structure_types pst
39654        WHERE ppst.proj_element_id = c_structure_id
39655          AND ppst.structure_type_id = pst.structure_type_id
39656          AND pst.structure_type_class_code = 'FINANCIAL' ;
39657 
39658     CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
39659       select 'Y'
39660         from pa_proj_elem_ver_structure
39661        where proj_element_id = c_structure_id
39662          AND project_id = c_project_id
39663          and STATUS_CODE = 'STRUCTURE_PUBLISHED';
39664 
39665    l_versioned      VARCHAR2(1) := 'N';
39666    l_shared         VARCHAR2(1) := 'N';
39667    l_sharing_code   VARCHAR2(30);
39668 
39669    l_task_version_id            NUMBER;
39670    l_structure_id               NUMBER;
39671    l_published_version          VARCHAR2(1);
39672    l_wp_type                    VARCHAR2(1);
39673    l_fin_type			VARCHAR2(1);
39674 
39675    l_weighting_basis_code       VARCHAR2(30);
39676    l_check_third_party_flag     VARCHAR2(1);
39677    l_dummy_char        VARCHAR2(1);
39678    l_project_id NUMBER;
39679    message varchar2(2000);
39680    t_str varchar2(1);
39681 
39682 BEGIN
39683 
39684     pa_debug.init_err_stack ('PA_PROJECT_PUB.BULK_MOVE_TASKS_LITE');
39685 
39686     x_return_status :=  FND_API.G_RET_STS_SUCCESS ;
39687 
39688 
39689 
39690 		-- Set the G_ROLLUP_FLAG based on profile options
39691 		--IF(p_calling_module = 'AMG') THEN
39692 			--PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
39693 		--END IF;
39694 
39695 		OPEN cur_proj_id;
39696 		FETCH cur_proj_id into l_project_id;
39697 		CLOSE cur_proj_id;
39698 
39699 
39700     IF (p_debug_mode = 'Y') THEN
39701       pa_debug.debug('PA_PROJECT_PUB.BULK_MOVE_TASKS_LITE begin');
39702     END IF;
39703 
39704     IF (p_commit = FND_API.G_TRUE) THEN
39705       savepoint BULK_MOVE_TASKS_LITE ;
39706     END IF;
39707 
39708 /* Added below block to ensure that the new API's are controlled by Dev*/
39709 	begin
39710 			select 'x' into  t_str
39711 			from pji_system_parameters
39712 			where name = 'BULK_LITE'
39713 			and value = 'Y';
39714 
39715 	exception
39716 		when no_data_found  then
39717 			PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39718                               p_msg_name => 'PA_LITE_API_CANT_USE');
39719             RAISE FND_API.G_EXC_ERROR;
39720 		when others  then
39721 
39722 			raise;
39723 	end;
39724 
39725 	IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id),' ') <> 'SHARE_FULL'
39726        OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id),'N') = 'Y' THEN
39727          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39728                               p_msg_name => 'PA_CANT_USE_LITE_API');
39729          RAISE FND_API.G_EXC_ERROR;
39730     END IF;
39731 	-- Set the G_ROLLUP_FLAG based on profile options
39732 	PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
39733 	IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39734 			PA_PROJECT_PVT.CONC_LOCK_PROJECT(l_project_id,'MOVE',l_msg_data,l_return_status);
39735 			IF l_return_status <> 'S'
39736 			THEN
39737 				PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39738                                      p_msg_name =>l_msg_data );
39739 				RAISE  FND_API.G_EXC_ERROR;
39740 			ELSE
39741 				PA_PROJECT_PVT.LOG_ROLLUP_EVENT(l_project_id,p_structure_version_id,'MOVE');
39742 				--PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(l_project_id,p_ref_task_version_id,p_structure_version_id,'MOVE');
39743 				--Loop through and update log event for all the tasks
39744 				for i in 1..p_task_version_id_tbl.count LOOP
39745 					PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(l_project_id,p_task_version_id_tbl(i),p_structure_version_id,'MOVE');
39746 				END LOOP;
39747 			END IF;
39748 	END IF;
39749 
39750     IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
39751       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
39752     END IF;
39753 
39754     IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
39755       FND_MSG_PUB.initialize;
39756     END IF;
39757     IF p_calling_module = 'SELF_SERVICE' THEN
39758 
39759         l_cur_project_id := p_ref_project_id;
39760 
39761         OPEN get_product_code(l_cur_project_id);
39762         FETCH get_product_code INTO l_pm_product_code;
39763         CLOSE get_product_code;
39764 
39765         If l_pm_product_code IS NOT NULL THEN
39766                 pa_pm_controls.Get_Project_actions_allowed
39767                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
39768                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
39769                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
39770                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
39771                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
39772                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
39773                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
39774                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
39775                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
39776                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
39777                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
39778                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
39779                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
39780                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
39781                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
39782                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
39783                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
39784                  P_ERROR_CODE                 => l_err_code,
39785                  P_ERROR_STACK                    => l_err_stack,
39786                  P_ERROR_STAGE                => l_err_stage );
39787 
39788                  IF l_err_code <> 0 THEN
39789                      PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39790                                  p_msg_name       => l_err_stage);
39791                  END IF;
39792                  IF l_update_parent_task_allowed = 'N' THEN
39793                        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39794                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
39795                        raise FND_API.G_EXC_ERROR;
39796                  END IF;
39797         End If;
39798 
39799     End If; /* End if calling module is self service*/
39800 
39801      l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_ref_project_id);
39802      l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_ref_project_id);
39803 
39804      l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
39805      l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
39806 
39807      l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_ref_project_id);
39808      l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_ref_project_id);
39809      l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(p_ref_project_id);
39810 
39811      IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
39812          l_task_version_id := p_task_version_id_tbl(1);
39813 
39814          SELECT proj_element_id INTO l_structure_id
39815          FROM pa_proj_element_versions
39816         WHERE element_version_id =  ( Select parent_structure_version_id
39817                                    from pa_proj_element_versions
39818                                   where element_version_id = l_task_version_id )
39819           AND object_type = 'PA_STRUCTURES';
39820         OPEN cur_struc_type( l_structure_id );
39821         FETCH cur_struc_type INTO l_dummy_char;
39822 
39823         IF cur_struc_type%FOUND
39824         THEN
39825              l_published_version := 'N';
39826              OPEN cur_pub_versions( l_structure_id, p_ref_project_id );
39827              FETCH cur_pub_versions INTO l_published_version;
39828              CLOSE cur_pub_versions;
39829         END IF;
39830 
39831         CLOSE cur_struc_type;
39832      END IF;
39833 
39834     ref_task_temp_version_id := p_ref_task_version_id;
39835 
39836 IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
39837     FOR i IN p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
39838                PA_TASK_PUB1.Move_Task_Version(
39839                p_init_msg_list                       => FND_API.G_FALSE,
39840                p_structure_version_id                => p_structure_version_id,
39841                p_task_version_id                     => p_task_version_id_tbl(i),
39842                p_ref_task_version_id                 => ref_task_temp_version_id,
39843                p_peer_or_sub                         => p_peer_or_sub,
39844                p_record_version_number               => p_record_version_number_tbl(i),
39845                p_ref_project_id                      => p_ref_project_id,
39846 	       p_structure_id			     => l_structure_id,
39847 	       p_published_version		     => l_published_version,
39848 	       p_shared 			     => l_shared ,
39849 	       p_sharing_code 			     => l_sharing_code,
39850 	       p_versioned			     => l_versioned,
39851                p_wp_type			     => l_wp_type,
39852 	       p_fin_type			     => l_fin_type,
39853 	       p_weighting_basis_code	             => l_weighting_basis_code,
39854 	       p_check_third_party_flag              => l_check_third_party_flag,
39855                p_called_from_bulk_api                => 'Y',
39856                x_return_status                       => x_return_status,
39857                x_msg_count                           => x_msg_count,
39858                x_msg_data                            => x_msg_data
39859                );
39860                IF x_return_status <>  FND_API.G_RET_STS_SUCCESS THEN
39861                    RAISE FND_API.G_EXC_ERROR ;
39862                END IF;
39863                ref_task_temp_version_id := p_task_version_id_tbl(i);
39864     END LOOP;
39865 
39866  END IF;
39867  		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39868 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(l_project_id);
39869 		END IF;
39870 
39871     IF (p_commit = FND_API.G_TRUE) THEN
39872       COMMIT;
39873     END IF;
39874 
39875 EXCEPTION
39876     when FND_API.G_EXC_ERROR then
39877       if p_commit = FND_API.G_TRUE then
39878          rollback to BULK_MOVE_TASKS_LITE;
39879       end if;
39880       x_return_status := FND_API.G_RET_STS_ERROR;
39881       x_msg_count  := Fnd_Msg_Pub.count_msg;
39882 
39883       IF x_msg_count = 1 AND x_msg_data IS NULL
39884       THEN
39885           Pa_Interface_Utils_Pub.get_messages
39886               ( p_encoded        => Fnd_Api.G_FALSE
39887               , p_msg_index      => 1
39888               , p_msg_count      => l_msg_count
39889               , p_msg_data       => l_msg_data
39890               , p_data           => l_data
39891               , p_msg_index_out  => l_msg_index_out);
39892           x_msg_data := l_data;
39893       END IF;
39894 	  	IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39895 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(l_project_id);
39896 		END IF;
39897 		FND_MSG_PUB.Count_And_Get
39898         (   p_count    =>  x_msg_count  ,
39899           p_data    =>  x_msg_data  );
39900 
39901     when FND_API.G_EXC_UNEXPECTED_ERROR then
39902       if p_commit = FND_API.G_TRUE then
39903          rollback to BULK_MOVE_TASKS_LITE;
39904       end if;
39905       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
39906       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
39907                               p_procedure_name => l_api_name,
39908                               p_error_text     => SUBSTRB(SQLERRM,1,240));
39909 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39910 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(l_project_id);
39911 		END IF;
39912     when OTHERS then
39913       if p_commit = FND_API.G_TRUE then
39914          rollback to BULK_MOVE_TASKS_LITE;
39915       end if;
39916       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
39917       fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
39918                               p_procedure_name => l_api_name,
39919                               p_error_text     => SUBSTRB(SQLERRM,1,240));
39920 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39921 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(l_project_id);
39922 		END IF;
39923 	 FND_MSG_PUB.Count_And_Get
39924         (   p_count    =>  x_msg_count  ,
39925           p_data    =>  x_msg_data  );
39926       raise;
39927 END BULK_MOVE_TASKS_LITE ;
39928 
39929 -- Added new api BULK_INDENT_TASKS_LITE for Huawei enhancement - bug 13923366 by skkoppul
39930 PROCEDURE BULK_INDENT_TASKS_LITE (
39931  p_api_version                IN    NUMBER   :=1.0,
39932  p_init_msg_list              IN    VARCHAR2 :=FND_API.G_TRUE,
39933  p_commit             IN    VARCHAR2 :=FND_API.G_FALSE,
39934  p_validate_only              IN    VARCHAR2 :=FND_API.G_TRUE,
39935  p_validation_level       IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
39936  p_calling_module         IN    VARCHAR2 :='SELF_SERVICE',
39937  p_debug_mode             IN    VARCHAR2 :='N',
39938  p_max_msg_count          IN    NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
39939  p_structure_version_id       IN    NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
39940  p_task_version_id        IN    NUMBER,
39941  p_project_id             IN    NUMBER,
39942  p_record_version_number      IN    NUMBER,
39943  x_return_status          OUT   NOCOPY VARCHAR2,
39944  x_msg_count              OUT   NOCOPY NUMBER,
39945  x_msg_data           OUT   NOCOPY VARCHAR2
39946 ) IS
39947 
39948 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
39949     SELECT 'Y'
39950     FROM pa_proj_structure_types ppst
39951         ,pa_structure_types pst
39952     WHERE ppst.proj_element_id = c_structure_id
39953     AND ppst.structure_type_id = pst.structure_type_id
39954     AND pst.structure_type_class_code IN( 'FINANCIAL' );
39955 
39956 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
39957      SELECT 'Y'
39958      FROM dual
39959      WHERE EXISTS(
39960     SELECT 'xyz'
39961     FROM pa_proj_elem_ver_structure
39962     WHERE proj_element_id = c_structure_id
39963     AND project_id = c_project_id
39964     AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
39965         );
39966 
39967 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
39968     SELECT object_id_from1
39969     FROM pa_object_relationships
39970     WHERE object_id_to1 = c_elem_ver_id
39971     AND object_type_to = 'PA_TASKS'
39972     AND relationship_type = 'S';
39973 
39974 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
39975     SELECT object_id_from1
39976      , object_relationship_id
39977      , record_version_number
39978      , relationship_subtype
39979     FROM pa_object_relationships
39980     WHERE object_id_to1 = p_child_version_id
39981     AND relationship_type = 'S';
39982 
39983 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
39984 
39985 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
39986    SELECT a.object_id_from1
39987     , a.weighting_percentage
39988    FROM pa_object_relationships a
39989    WHERE a.object_id_to1 = c_task_version_id
39990    AND a.object_type_to = 'PA_TASKS'
39991    AND a.relationship_type = 'S'
39992    AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
39993 
39994 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
39995    SELECT '1'
39996    FROM dual
39997    WHERE EXISTS
39998        (SELECT  'xyz'
39999        FROM pa_object_relationships
40000        WHERE object_id_from1 = c_task_version_id
40001        AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
40002        AND relationship_type = 'S'
40003        );
40004 
40005 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
40006   SELECT ptt.prog_entry_enable_flag
40007   FROM    pa_task_types ptt
40008     , pa_proj_element_versions ppev,
40009           pa_proj_elements ppe
40010   WHERE  ppev.element_version_id = c_element_version_id
40011   AND    ppev.proj_element_id = ppe.proj_element_id
40012   AND    ptt.object_type = 'PA_TASKS'
40013   AND    ppe.TYPE_ID   = ptt.task_type_id;
40014 
40015 
40016 
40017   l_api_name            CONSTANT VARCHAR(30) := 'BULK_INDENT_TASKS_LITE';
40018   l_api_version         CONSTANT NUMBER      := 1.0;
40019   l_return_status       VARCHAR2(1);
40020   l_msg_count           NUMBER;
40021   l_msg_data            VARCHAR2(250);
40022   l_data            VARCHAR2(250);
40023   l_msg_index_out       NUMBER;
40024 
40025   l_peer_or_sub         VARCHAR2(30);
40026   l_project_id          NUMBER;
40027   l_structure_id        NUMBER;
40028   l_ref_task_id         NUMBER;
40029   l_task_id                     NUMBER;
40030   l_task_record_version_number  NUMBER;
40031   l_wbs_record_version_number   NUMBER;
40032   l_dummy_char                  VARCHAR2(1);
40033   l_published_version           VARCHAR2(1);
40034   l_relationship_subtype        VARCHAR2(20);
40035   l_struc_version_from          NUMBER;
40036   l_task_version_from           NUMBER;
40037   l_version_from        NUMBER;
40038   l_versioned           VARCHAR2(1) := 'N';
40039   l_shared          VARCHAR2(1) := 'N';
40040 
40041   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
40042   l_parent_ver_id       NUMBER;
40043   l_error_msg_code      VARCHAR2(30);
40044 
40045   src_elem_ver_id       NUMBER;
40046   src_proj_element_id       NUMBER;
40047   src_wbs_number        VARCHAR2(240);
40048   src_seq_number        NUMBER;
40049   src_wbs_level         NUMBER;
40050   src_parent_str_ver_id     NUMBER;
40051   src_object_type       VARCHAR2(30);
40052 
40053   ref_elem_ver_id       NUMBER;
40054   ref_proj_element_id       NUMBER;
40055   ref_wbs_number        VARCHAR2(240);
40056   ref_seq_number        NUMBER;
40057   ref_wbs_level         NUMBER;
40058   ref_parent_str_ver_id     NUMBER;
40059   ref_object_type       VARCHAR2(30);
40060 
40061   l_old_parent_id       NUMBER;
40062   l_dummy           VARCHAR2(1);
40063 
40064   l_new_weighting       NUMBER(17,2);
40065   l_old_weighting       NUMBER(17,2);
40066   l_progress_allowed        VARCHAR2(1);
40067 
40068   l_element_version_id_tab  PA_FORECAST_GLOB.NumberTabTyp;
40069   l_proj_element_id_tab     PA_FORECAST_GLOB.NumberTabTyp;
40070   l_object_type_tab     PA_FORECAST_GLOB.VCTabTyp;
40071   l_project_id_tab      PA_FORECAST_GLOB.NumberTabTyp;
40072   l_parent_str_version_id_tab   PA_FORECAST_GLOB.NumberTabTyp;
40073   l_display_sequence_tab    PA_FORECAST_GLOB.NumberTabTyp;
40074   l_wbs_level_tab       PA_FORECAST_GLOB.NumberTabTyp;
40075   l_wbs_number_tab      PA_FORECAST_GLOB.VCTabTyp;
40076   l_record_version_tab      PA_FORECAST_GLOB.NumberTabTyp;
40077   l_changed_flag_tab        PA_FORECAST_GLOB.VC1TabTyp;
40078 
40079   l_wbs_number          VARCHAR2(1000);
40080   src_branch_mask       VARCHAR2(1000);
40081   ref_branch_mask       VARCHAR2(1000);
40082   l_str1            VARCHAR2(1000);
40083   l_str2            VARCHAR2(1000);
40084   l_number          NUMBER;
40085   l_new_wbs_number      VARCHAR2(1000);
40086   l_user_id         NUMBER;
40087   l_login_id            NUMBER;
40088 
40089   CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
40090     select object_id_from1
40091       from pa_object_relationships
40092      where object_id_to1 = c_object_id_to1
40093        and relationship_type = 'S';
40094   l_ref_parent_ver_id          NUMBER;
40095 
40096    CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
40097     select wbs_number
40098       from pa_proj_element_versions
40099      where element_version_id = c_elem_ver_id
40100      and object_type ='PA_TASKS';
40101 
40102    l_delete_project_allowed      VARCHAR2(1);
40103    l_update_proj_num_allowed      VARCHAR2(1);
40104    l_update_proj_name_allowed    VARCHAR2(1);
40105    l_update_proj_desc_allowed    VARCHAR2(1);
40106    l_update_proj_dates_allowed    VARCHAR2(1);
40107    l_update_proj_status_allowed  VARCHAR2(1);
40108    l_update_proj_manager_allowed  VARCHAR2(1);
40109    l_update_proj_org_allowed      VARCHAR2(1);
40110    l_add_task_allowed            VARCHAR2(1);
40111    l_delete_task_allowed          VARCHAR2(1);
40112    l_update_task_num_allowed      VARCHAR2(1);
40113    l_update_task_name_allowed    VARCHAR2(1);
40114    l_update_task_dates_allowed    VARCHAR2(1);
40115    l_update_task_desc_allowed    VARCHAR2(1);
40116    l_update_parent_task_allowed  VARCHAR2(1);
40117    l_update_task_org_allowed      VARCHAR2(1);
40118 
40119    l_err_code         NUMBER        := 0;
40120    l_err_stack        VARCHAR2(200) := NULL;
40121    l_err_stage        VARCHAR2(200) := NULL;
40122 
40123    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
40124 
40125    CURSOR get_product_code ( c_project_id NUMBER ) IS
40126    SELECT pm_product_code
40127    FROM PA_PROJECTS_ALL
40128    WHERE project_id = c_project_id;
40129 
40130    l_cur_project_id      NUMBER;
40131    CURSOR cur_proj_id
40132    IS
40133      SELECT project_id
40134        FROM pa_proj_element_versions
40135       WHERE element_version_id = p_structure_version_id;
40136 
40137 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
40138 l_parent_task_id             NUMBER;
40139 l_old_parent_task_id             NUMBER;
40140 l_top_task_id                NUMBER;
40141 l_old_top_task_id            NUMBER;  --bug 2967204
40142 
40143 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
40144     SELECT parent_task_id, top_task_id FROM pa_tasks
40145      WHERE project_id = c_project_id and task_id = c_task_id;
40146 
40147   l_wp_type              VARCHAR2(1);
40148   l_weighting_basis_Code VARCHAR2(30);
40149 
40150   cursor get_task_type_id(c_proj_element_id NUMBER) IS
40151       select type_id
40152         from pa_proj_elements
40153        where proj_element_id = c_proj_element_id;
40154   l_task_type_id      NUMBER;
40155   l_wp_process_flag   VARCHAR2(1);
40156 
40157   Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
40158     select object_id_to1
40159       from pa_object_relationships
40160      where relationshiP_type = 'S'
40161        and object_type_to = 'PA_TASKS'
40162              start with object_id_to1 = c_task_ver_id
40163                and object_type_to = 'PA_TASKS'
40164                and relationship_type = 'S'
40165            connect by prior object_id_from1 = object_id_to1
40166                and prior object_type_from = object_type_to
40167                and prior relationship_type = relationship_type
40168  intersect
40169     select a.object_id_to1
40170       from pa_object_relationships a, pa_proj_element_versions b
40171      where a.relationshiP_type = 'S'
40172        and a.object_id_from1 = b.parent_structure_version_id
40173        and b.element_version_id = c_task_ver_id
40174        and a.object_type_from = 'PA_STRUCTURES';
40175   l_old_par_ver_id NUMBER;
40176   l_new_par_ver_id NUMBER;
40177 
40178   l_task_ver_ids2             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
40179   l_lowest_task_flag1         VARCHAR2(1);
40180   l_lowest_task_flag2         VARCHAR2(1);
40181   l_fin_task_flag             VARCHAR2(1);
40182 
40183   l_ref_tsk_version_id      NUMBER;
40184 
40185   CURSOR cur_get_ref_tsk_ver_id(c_src_wbs_level NUMBER) IS
40186   SELECT element_version_id
40187   FROM PA_PROJ_ELEMENT_VERSIONS
40188   WHERE parent_structure_version_id = p_structure_version_id
40189   AND project_id = p_project_id
40190   AND wbs_level = c_src_wbs_level
40191   AND object_type = 'PA_TASKS'
40192   AND display_sequence < src_seq_number
40193   AND display_sequence =
40194         (SELECT max (display_sequence)
40195          FROM pa_proj_element_versions
40196          WHERE project_id = p_project_id
40197          AND parent_structure_version_id = p_structure_version_id
40198          AND wbs_level = c_src_wbs_level
40199          AND display_sequence < src_seq_number
40200          AND object_type = 'PA_TASKS');
40201 
40202 	l_ref_parent_task_id        NUMBER;
40203 	message varchar2(2000);
40204 	t_str varchar2(1);
40205 
40206 BEGIN
40207 
40208   pa_debug.init_err_stack ('PA_PROJECT_PUB.BULK_INDENT_TASKS_LITE');
40209 
40210   IF (p_debug_mode = 'Y') THEN
40211     pa_debug.debug('PA_PROJECT_PUB.BULK_INDENT_TASKS_LITE begin');
40212   END IF;
40213 
40214   IF (p_commit = FND_API.G_TRUE) THEN
40215     savepoint BULK_INDENT_TASKS_LITE;
40216   END IF;
40217 
40218       /* Added below block to ensure that the new API's are controlled by Dev*/
40219 	begin
40220 			select 'x' into  t_str
40221 			from pji_system_parameters
40222 			where name = 'BULK_LITE'
40223 			and value = 'Y';
40224 
40225 	exception
40226 		when no_data_found  then
40227 		    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40228                               p_msg_name => 'PA_LITE_API_CANT_USE');
40229             RAISE FND_API.G_EXC_ERROR;
40230 		when others  then
40231 
40232 			raise;
40233 	end;
40234 
40235   	IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id),' ') <> 'SHARE_FULL'
40236        OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id),'N') = 'Y' THEN
40237          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40238                               p_msg_name => 'PA_CANT_USE_LITE_API');
40239          RAISE FND_API.G_EXC_ERROR;
40240     END IF;
40241 
40242   		-- Set the G_ROLLUP_FLAG based on profile options
40243 		--IF(p_calling_module = 'AMG') THEN
40244 			PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
40245 		--END IF;
40246 
40247 	IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
40248 			PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'INDENT',l_msg_data,l_return_status);
40249 			IF l_return_status <> 'S'
40250 			THEN
40251 				PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40252                                      p_msg_name =>l_msg_data );
40253 				RAISE  FND_API.G_EXC_ERROR;
40254 			ELSE
40255 				PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_project_id,p_structure_version_id,'INDENT');
40256 				PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,p_task_version_id,p_structure_version_id,'INDENT');
40257 			END IF;
40258 	END IF;
40259 
40260   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
40261     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
40262   END IF;
40263 
40264   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
40265     FND_MSG_PUB.initialize;
40266   END IF;
40267 
40268   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
40269 
40270   l_wp_process_flag := 'N';
40271 
40272       IF p_calling_module = 'SELF_SERVICE' THEN
40273 
40274         OPEN cur_proj_id;
40275         FETCH cur_proj_id INTO l_cur_project_id;
40276         CLOSE cur_proj_id;
40277 
40278         OPEN get_product_code(l_cur_project_id);
40279         FETCH get_product_code INTO l_pm_product_code;
40280         CLOSE get_product_code;
40281 
40282         If l_pm_product_code IS NOT NULL THEN
40283           pa_pm_controls.Get_Project_actions_allowed
40284                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
40285                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
40286                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
40287                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
40288                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
40289                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
40290                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
40291                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
40292                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
40293                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
40294                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
40295                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
40296                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
40297                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
40298                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
40299                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
40300                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
40301                  P_ERROR_CODE                 => l_err_code,
40302          P_ERROR_STACK                    => l_err_stack,
40303          P_ERROR_STAGE                => l_err_stage );
40304 
40305           IF l_err_code <> 0 THEN
40306             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40307                                  p_msg_name       => l_err_stage);
40308           END IF;
40309       IF l_update_parent_task_allowed = 'N' THEN
40310               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40311                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
40312               raise FND_API.G_EXC_ERROR;
40313           END IF;
40314         END IF;
40315       END IF;
40316 
40317   BEGIN
40318       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
40319       INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
40320       FROM PA_PROJ_ELEMENT_VERSIONS
40321       WHERE element_version_id = p_task_version_id
40322       AND project_id = p_project_id
40323       AND parent_structure_version_id = p_structure_version_id;
40324   EXCEPTION
40325     WHEN OTHERS THEN
40326     raise;
40327   END;
40328 
40329 
40330 
40331   IF (p_structure_version_id IS NOT NULL) AND
40332        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
40333     IF (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
40334 							          , src_proj_element_id
40335 								        , p_task_version_id),'N') = 'Y') THEN
40336       --deleting linked task. Error
40337       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
40338       raise FND_API.G_EXC_ERROR;
40339     END IF;
40340   END IF;
40341 
40342   -- Get Source Task Information
40343   BEGIN
40344       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
40345       INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
40346       FROM PA_PROJ_ELEMENT_VERSIONS
40347       WHERE element_version_id = p_task_version_id
40348       AND project_id = p_project_id
40349       AND parent_structure_version_id = p_structure_version_id;
40350   EXCEPTION
40351     WHEN OTHERS THEN
40352     raise;
40353   END;
40354 
40355 -- Locking should be implemented here
40356 
40357   -- Lifecycle Phase validation Changes. Check if task has phase associated with it
40358   IF (p_task_version_id IS NOT NULL) AND
40359        (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
40360 
40361     IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
40362               src_proj_element_id)) THEN
40363       --Indenting a task with phase. Error
40364       PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
40365       raise FND_API.G_EXC_ERROR;
40366     END IF;
40367   END IF;
40368 
40369 
40370   IF src_seq_number = 1 then
40371     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
40372                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
40373     raise FND_API.G_EXC_ERROR;
40374   END IF;
40375 
40376   /* Bug 2843737 Added logic to populate the error message when you try to indent lowest task
40377      Also restructured the logic to get the reference task */
40378 
40379  -- Get the previous task information. If its wbs_level is equal to src_wbs_level then this will become refernce task
40380  -- Otherwise we will again fetch the correct reference task
40381 
40382   SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
40383   INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number,  ref_parent_str_ver_id, ref_object_type
40384   FROM PA_PROJ_ELEMENT_VERSIONS
40385   WHERE display_sequence = src_seq_number - 1
40386   AND parent_structure_version_id = p_structure_version_id
40387   AND project_id = p_project_id
40388   AND object_type = 'PA_TASKS';
40389 
40390   IF src_wbs_level > ref_wbs_level then
40391     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
40392                          ,p_msg_name       => 'PA_PS_CANNOT_INDENT');
40393     raise FND_API.G_EXC_ERROR;
40394   END IF;
40395 
40396   IF src_wbs_level = ref_wbs_level then
40397     l_peer_or_sub := 'SUB';
40398     --bug 4214825, start
40399     l_ref_tsk_version_id := ref_elem_ver_id;
40400     --bug 4214825, end
40401   ELSE
40402     l_peer_or_sub := 'PEER';
40403 
40404     SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
40405     INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number,  ref_parent_str_ver_id, ref_object_type
40406     FROM PA_PROJ_ELEMENT_VERSIONS
40407     WHERE parent_structure_version_id = p_structure_version_id
40408     AND project_id = p_project_id
40409     AND wbs_level = src_wbs_level+1
40410     AND object_type = 'PA_TASKS'
40411     AND display_sequence < src_seq_number
40412      AND display_sequence =
40413         (SELECT max (display_sequence)
40414          FROM pa_proj_element_versions
40415          WHERE project_id = p_project_id
40416          AND parent_structure_version_id = p_structure_version_id
40417          AND wbs_level = src_wbs_level+1
40418          AND display_sequence < src_seq_number
40419          AND object_type = 'PA_TASKS');
40420 
40421   OPEN cur_get_ref_tsk_ver_id(src_wbs_level);
40422   FETCH cur_get_ref_tsk_ver_id INTO l_ref_tsk_version_id;
40423   CLOSE cur_get_ref_tsk_ver_id;
40424 
40425   END IF;
40426 
40427     IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_ref_tsk_version_id) = 'Y' THEN
40428        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40429                             p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
40430        raise FND_API.G_EXC_ERROR;
40431     END IF;
40432 
40433     --Check if ok to indent this task
40434     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
40435          p_task_ver_id => p_task_version_id
40436         ,x_return_status      => l_return_status
40437         ,x_error_message_code => l_error_msg_code
40438     );
40439 
40440     IF (l_return_status <> 'Y') THEN
40441         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40442                              p_msg_name => l_error_msg_code);
40443         raise FND_API.G_EXC_ERROR;
40444     END IF;
40445 
40446     --check if ok to create subtask
40447     IF (l_peer_or_sub = 'PEER') THEN
40448       OPEN get_parent_version_id(ref_elem_ver_id);
40449       FETCH get_parent_version_id into l_parent_ver_id;
40450       CLOSE get_parent_version_id;
40451 
40452       --bug 3069306
40453       --if financial task, check if changing parent ok
40454       IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
40455         OPEN get_top_task_ver_id(l_parent_ver_id);
40456         FETCH get_top_task_ver_id into l_new_par_ver_id;
40457         CLOSE get_top_task_ver_id;
40458 
40459         OPEN get_top_task_ver_id(p_task_version_id);
40460         FETCH get_top_task_ver_id into l_old_par_ver_id;
40461         CLOSE get_top_task_Ver_id;
40462 
40463         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
40464           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40465                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
40466           raise FND_API.G_EXC_ERROR;
40467         END IF;
40468       END IF;
40469       --end bug 3069306
40470 
40471       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
40472          p_parent_task_ver_id => l_parent_ver_id
40473         ,x_return_status      => l_return_status
40474         ,x_error_message_code => l_error_msg_code
40475       );
40476 
40477       IF (l_return_status <> 'Y') THEN
40478         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40479                              p_msg_name => l_error_msg_code);
40480         raise FND_API.G_EXC_ERROR;
40481       END IF;
40482 
40483       --bug 4099488
40484       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
40485         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40486                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
40487         raise FND_API.G_EXC_ERROR;
40488       END IF;
40489       --end bug 4099488
40490     ELSE
40491       --bug 3069306
40492       --if financial task, check if changing parent ok
40493       IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
40494         OPEN get_top_task_ver_id(ref_elem_ver_id);
40495         FETCH get_top_task_ver_id into l_new_par_ver_id;
40496         CLOSE get_top_task_ver_id;
40497 
40498         OPEN get_top_task_ver_id(p_task_version_id);
40499         FETCH get_top_task_ver_id into l_old_par_ver_id;
40500         CLOSE get_top_task_Ver_id;
40501 
40502         IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
40503           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40504                                p_msg_name => 'PA_CANT_CHANGE_PARENT');
40505           raise FND_API.G_EXC_ERROR;
40506         END IF;
40507       END IF;
40508       --end bug 3069306
40509 
40510 
40511       PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
40512          p_parent_task_ver_id => ref_elem_ver_id
40513         ,x_return_status      => l_return_status
40514         ,x_error_message_code => l_error_msg_code
40515       );
40516 
40517       IF (l_return_status <> 'Y') THEN
40518         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40519                              p_msg_name => l_error_msg_code);
40520         raise FND_API.G_EXC_ERROR;
40521       END IF;
40522 
40523       --bug 4099488
40524       IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(ref_elem_ver_id, p_task_version_id) = 'N' THEN
40525         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40526                              p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
40527         raise FND_API.G_EXC_ERROR;
40528       END IF;
40529       --end bug 4099488
40530     END IF;
40531 
40532    If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
40533         IN ('SHARE_PARTIAL')
40534   Then
40535 
40536     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
40537         p_task_version_id       => p_task_version_id
40538       , p_ref_task_version_id   => ref_elem_ver_id
40539       , x_return_status         => x_return_status
40540       , x_msg_count             => x_msg_count
40541       , x_msg_data              => x_msg_data
40542       , x_error_msg_code        => l_error_msg_code);
40543 
40544     IF (x_return_status <> 'S') THEN -- 4275757 : Changed from 'Y' to 'S'
40545        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40546                 p_msg_name       => l_error_msg_code);
40547       raise FND_API.G_EXC_ERROR;
40548     End If;
40549   End If;
40550 
40551   --check the task is a lowest task bug 3301192
40552   l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
40553 
40554 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
40555 
40556 -- Logic Added for plsql table
40557 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
40558 
40559 l_element_version_id_tab.delete;
40560 l_proj_element_id_tab.delete;
40561 l_object_type_tab.delete;
40562 l_project_id_tab.delete;
40563 l_parent_str_version_id_tab.delete;
40564 l_display_sequence_tab.delete;
40565 l_wbs_level_tab.delete;
40566 l_wbs_number_tab.delete;
40567 l_record_version_tab.delete;
40568 l_changed_flag_tab.delete;
40569 
40570 If (l_peer_or_sub = 'SUB') THEN
40571   OPEN get_ref_parent_id(ref_elem_ver_id);
40572   FETCH get_ref_parent_id into l_ref_parent_ver_id;
40573   CLOSE get_ref_parent_id;
40574 ELSE
40575   OPEN get_ref_parent_id(p_task_version_id);
40576   FETCH get_ref_parent_id into l_ref_parent_ver_id;
40577   CLOSE get_ref_parent_id;
40578 END IF;
40579 
40580 	-- Sridhar Huawei 18-Sept  add the below if statement.
40581 	-- Need not derive   wbs_number and wbs_level in defer mode
40582 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='N') THEN
40583 
40584   BEGIN
40585        -- Using OR is beneficial than using UNION here
40586 	/*
40587             SELECT  element_version_id, proj_element_id, object_type,
40588             project_id, parent_structure_version_id,
40589             display_sequence, wbs_level, wbs_number,
40590             record_version_number, 'N' changed_flag
40591              BULK COLLECT INTO l_element_version_id_tab,
40592             l_proj_element_id_tab, l_object_type_tab,
40593             l_project_id_tab, l_parent_str_version_id_tab,
40594             l_display_sequence_tab, l_wbs_level_tab,
40595             l_wbs_number_tab, l_record_version_tab,
40596             l_changed_flag_tab
40597             FROM
40598         pa_proj_element_versions
40599         WHERE
40600                  project_id = p_project_id
40601         AND parent_structure_version_id = p_structure_version_id
40602         AND object_type = 'PA_TASKS'
40603         AND(
40604         element_version_id = p_task_version_id  -- Source task itself
40605         OR (element_version_id IN -- All tasks below the source task with wbs_level >= src_wbs_level-1
40606         (select object_id_to1
40607         from pa_object_relationships
40608         where relationship_type = 'S'
40609                 and object_type_to = 'PA_TASKS'
40610         start with object_id_from1 = l_ref_parent_ver_id
40611         connect by object_id_from1 = PRIOR object_id_to1
40612                     and relationship_type = PRIOR relationship_type
40613                     and relationship_type = 'S')
40614         )
40615         and display_sequence > src_seq_number)
40616         ORDER BY display_sequence ;
40617 	*/
40618 	select proj_element_id INTO l_ref_parent_task_id from pa_proj_element_versions
40619 	where element_version_id = l_ref_parent_ver_id and project_id= p_project_id;
40620 
40621        insert into  pa_tasks_tmp (task_id)
40622        SELECT task_id
40623        FROM pa_tasks
40624        WHERE project_id            = p_project_id
40625        START WITH parent_task_id        = l_ref_parent_task_id
40626        CONNECT BY parent_task_id = prior task_id;
40627 
40628        insert into pa_tasks_tmp (task_id)
40629        select proj_element_id
40630        from pa_proj_element_versions
40631        where ELEMENT_VERSION_ID = p_task_version_id and project_id = p_project_id and not exists (select null from pa_tasks_tmp where task_id = proj_element_id);
40632 
40633 	   SELECT /*+ ordered index(ev1 pa_proj_element_versions_n1)  */
40634        element_version_id, proj_element_id, object_type,
40635             project_id, parent_structure_version_id,
40636             display_sequence, wbs_level, wbs_number,
40637             record_version_number, 'N' changed_flag
40638 	   BULK COLLECT INTO l_element_version_id_tab,
40639             l_proj_element_id_tab, l_object_type_tab,
40640             l_project_id_tab, l_parent_str_version_id_tab,
40641             l_display_sequence_tab, l_wbs_level_tab,
40642             l_wbs_number_tab, l_record_version_tab,
40643             l_changed_flag_tab
40644        FROM pa_tasks_tmp t1 ,
40645         pa_proj_element_versions ev1
40646        WHERE
40647             project_id = p_project_id
40648            AND parent_structure_version_id = p_structure_version_id
40649            AND object_type = 'PA_TASKS'
40650            AND proj_element_id = t1.task_id
40651 	   and display_sequence >= src_seq_number
40652        ORDER BY display_sequence ;
40653 
40654 
40655 
40656   EXCEPTION
40657     WHEN OTHERS THEN
40658 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
40659 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
40660 		END IF;
40661         raise;
40662   END;
40663 
40664 
40665 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
40666 -- Here we can also incorporate sequence number update. In indent sequence number does not change.
40667 
40668 -- Update wbs level
40669 
40670  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
40671         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
40672             l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
40673             l_changed_flag_tab(j) := 'Y';
40674         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
40675             -- Direct Childs of source
40676             l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
40677             l_changed_flag_tab(j) := 'Y';
40678         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
40679             -- Exit level changes, IT means no Direct childs are left
40680             EXIT;
40681         END IF;
40682  END LOOP;
40683 
40684 
40685 -- Update wbs_number
40686 
40687  src_branch_mask := src_wbs_number;
40688 
40689  OPEN get_wbs_number(l_ref_parent_ver_id);
40690  FETCH get_wbs_number into ref_branch_mask;
40691  CLOSE get_wbs_number;
40692 
40693 
40694 
40695  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
40696         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
40697         IF l_peer_or_sub = 'SUB' THEN
40698                 l_wbs_number := ref_wbs_number || '.1';
40699             l_wbs_number_tab(j) := l_wbs_number;
40700             l_changed_flag_tab(j) := 'Y';
40701             l_new_wbs_number := l_wbs_number;
40702         ELSE
40703               l_number := instr(ref_wbs_number,'.', -1, 1);
40704               l_str1 := substr(ref_wbs_number, 1, l_number -1);
40705               l_str2 := substr(ref_wbs_number, l_number + 1);
40706               l_str2 := to_char(to_number(l_str2 + 1));
40707               l_wbs_number := l_str1 || '.' || l_str2;
40708               l_wbs_number_tab(j) := l_wbs_number;
40709               l_changed_flag_tab(j) := 'Y';
40710               l_new_wbs_number := l_wbs_number;
40711         END IF;
40712     ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
40713         IF l_display_sequence_tab(j) > src_seq_number THEN
40714         IF src_wbs_level = 1 THEN -- This was top task
40715               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
40716                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
40717             -- Direct childs of source
40718                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
40719               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
40720                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
40721               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
40722                   l_wbs_number_tab(j) := l_wbs_number;
40723                   l_changed_flag_tab(j) := 'Y';
40724               ELSIF(instr(l_wbs_number_tab(j), '.') <> 0) then
40725             -- Not in Direct Childs, But lower tasks
40726                   l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
40727                   l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
40728                   l_str1 := to_char(to_number(l_str1) - 1);
40729                   l_wbs_number := l_str1 || l_str2;
40730                   l_wbs_number_tab(j) := l_wbs_number;
40731                   l_changed_flag_tab(j) := 'Y';
40732               ELSIF (instr(l_wbs_number_tab(j), '.') = 0) then
40733                   l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) - 1);
40734                   l_wbs_number_tab(j) := l_wbs_number;
40735                   l_changed_flag_tab(j) := 'Y';
40736               END IF;
40737         ELSE -- src_wbs_level <> 1 Source was not a Top Task
40738               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
40739                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
40740             -- Direct childs of source
40741                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
40742               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
40743                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
40744               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
40745                   l_wbs_number_tab(j) := l_wbs_number;
40746                   l_changed_flag_tab(j) := 'Y';
40747               ELSE
40748                       l_str1 := substr(l_wbs_number_tab(j), length(ref_branch_mask) + 2);
40749                   IF(instr(l_str1, '.') <> 0) THEN
40750                     l_str2 := substr(l_str1, instr(l_str1, '.'));
40751                     l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
40752                     l_str1 := to_char(to_number(l_str1) - 1);
40753                     l_wbs_number := ref_branch_mask || '.' || l_str1 || l_str2;
40754                     l_wbs_number_tab(j) := l_wbs_number;
40755                     l_changed_flag_tab(j) := 'Y';
40756                   ELSE
40757                     l_str1:= to_char(to_number(l_str1) - 1);
40758                     l_wbs_number := ref_branch_mask || '.' || l_str1;
40759                     l_wbs_number_tab(j) := l_wbs_number;
40760                     l_changed_flag_tab(j) := 'Y';
40761              END IF;
40762               END IF;
40763         END IF; -- src_wbs_level = 1
40764         END IF; --   l_display_sequence_tab(j) > src_seq_number
40765     END IF; -- l_element_version_id_tab(j) = src_elem_ver_id
40766  END LOOP;
40767 l_user_id := fnd_global.user_id;
40768 l_login_id := fnd_global.login_id;
40769 
40770 -- Locking should be implemnted here
40771 
40772  FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
40773  UPDATE PA_PROJ_ELEMENT_VERSIONS
40774  SET
40775         wbs_level                = l_wbs_level_tab(j)           ,
40776         wbs_number                   = l_wbs_number_tab(j)          ,
40777         last_update_date                 = sysdate          ,
40778         last_updated_by                  = l_user_id            ,
40779         last_update_login                = l_login_id           ,
40780     record_version_number        = l_record_version_tab(j)+1
40781  WHERE  element_version_id         = l_element_version_id_tab(j)
40782  AND l_changed_flag_tab(j)='Y';
40783 
40784  END IF;
40785 -- Sridhar Huawei 18-Sept add above end if
40786 
40787 -- Update Relationship
40788 
40789       IF ref_object_type = 'PA_TASKS'
40790       THEN
40791          IF l_peer_or_sub = 'PEER'
40792          THEN
40793             OPEN cur_obj_rel( ref_elem_ver_id );
40794             FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
40795             CLOSE cur_obj_rel;
40796 
40797             l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
40798 
40799             IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
40800             THEN
40801                 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
40802                 l_task_version_from := null;
40803             ELSE
40804                 l_task_version_from  := v_cur_obj_rel_rec.object_id_from1;
40805                 l_struc_version_from := null;
40806             END IF;
40807          ELSE -- l_peer_or_sub = 'SUB'
40808                 --parent task is the reference task
40809             l_task_version_from  := ref_elem_ver_id;
40810             l_struc_version_from := null;
40811             l_relationship_subtype := 'TASK_TO_TASK';
40812 
40813 
40814          END IF;
40815       END IF; -- ref_object_type = 'PA_TASKS'
40816       -- No need to check for PA_STRUCTURES as this is indent and you can not indent below a structure
40817 
40818 
40819  --update relatonship of the task version p_task_version.
40820  --set structure_version_from and task_version_from accordingly.
40821  OPEN cur_obj_rel( p_task_version_id );
40822  FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
40823  CLOSE cur_obj_rel;
40824 
40825 --for task weighting
40826  OPEN get_task_weighting(p_task_version_id);
40827  FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
40828  CLOSE get_task_weighting;
40829 
40830 
40831  IF(l_task_version_from is not null) THEN
40832    l_version_from := l_task_version_from;
40833  ELSE
40834    l_version_from := l_struc_version_from;
40835  END IF;
40836 
40837  IF (l_version_from = p_task_version_id) THEN
40838    l_new_weighting := l_old_weighting;
40839  ELSE
40840    OPEN get_sub_tasks(l_version_from);
40841    FETCH get_sub_tasks into l_dummy;
40842    IF (get_sub_tasks%NOTFOUND) THEN
40843      l_new_weighting := 100;
40844      --bug 2673570
40845      OPEN check_progress_allowed(p_task_version_id);
40846      FETCH check_progress_allowed INTO l_progress_allowed;
40847      CLOSE check_progress_allowed;
40848 
40849      if l_progress_allowed = 'N' then
40850         l_new_weighting := 0;
40851      end if;
40852      --bug 2673570
40853    ELSE
40854      l_new_weighting := 0;
40855    END IF;
40856    CLOSE get_sub_tasks;
40857  END IF;
40858 
40859  PA_RELATIONSHIP_PVT.Update_Relationship
40860              (
40861               p_api_version                       => p_api_version
40862              ,p_init_msg_list                     => p_init_msg_list
40863              ,p_commit                            => p_commit
40864              ,p_validate_only                     => p_validate_only
40865              ,p_validation_level                  => p_validation_level
40866              ,p_calling_module                    => p_calling_module
40867              ,p_debug_mode                        => p_debug_mode
40868              ,p_max_msg_count                     => p_max_msg_count
40869              ,p_object_relationship_id            => v_cur_obj_rel_rec.object_relationship_id
40870              ,p_project_id_from                   => null
40871              ,p_structure_id_from                 => null
40872              ,p_structure_version_id_from         => l_struc_version_from
40873              ,p_task_version_id_from              => l_task_version_from
40874              ,p_project_id_to                     => null
40875              ,p_structure_id_to                   => null
40876              ,p_structure_version_id_to           => null
40877              ,p_task_version_id_to                => p_task_version_id
40878              ,p_relationship_type                 => 'S'
40879              ,p_relationship_subtype              => l_relationship_subtype
40880              ,p_weighting_percentage              => l_new_weighting
40881              ,p_record_version_number             => v_cur_obj_rel_rec.record_version_number
40882              ,x_return_status                     => l_return_status
40883              ,x_msg_count                         => l_msg_count
40884              ,x_msg_data                          => l_msg_data
40885             );
40886 
40887 
40888              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
40889                 x_msg_count := FND_MSG_PUB.count_msg;
40890                 IF x_msg_count = 1 then
40891                    pa_interface_utils_pub.get_messages
40892                    (p_encoded        => FND_API.G_TRUE,
40893                     p_msg_index      => 1,
40894                     p_msg_count      => l_msg_count,
40895                     p_msg_data       => l_msg_data,
40896                     p_data           => l_data,
40897                     p_msg_index_out  => l_msg_index_out);
40898                     x_msg_data := l_data;
40899                 END IF;
40900              raise FND_API.G_EXC_ERROR;
40901              END IF;
40902 
40903 --for task weighting
40904      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
40905        p_task_version_id => l_old_parent_id
40906       ,x_return_status => l_return_status
40907       ,x_msg_count => l_msg_count
40908       ,x_msg_data => l_msg_data
40909      );
40910 
40911      x_msg_count := FND_MSG_PUB.count_msg;
40912      IF x_msg_count = 1 then
40913        pa_interface_utils_pub.get_messages
40914         (p_encoded        => FND_API.G_TRUE,
40915          p_msg_index      => 1,
40916          p_msg_count      => l_msg_count,
40917          p_msg_data       => l_msg_data,
40918          p_data           => l_data,
40919          p_msg_index_out  => l_msg_index_out);
40920          x_msg_data := l_data;
40921       END IF;
40922 
40923      --bug 2673570
40924      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
40925        p_task_version_id => p_task_version_id
40926       ,x_return_status => l_return_status
40927       ,x_msg_count => l_msg_count
40928       ,x_msg_data => l_msg_data
40929      );
40930 
40931      x_msg_count := FND_MSG_PUB.count_msg;
40932      IF x_msg_count = 1 then
40933        pa_interface_utils_pub.get_messages
40934         (p_encoded        => FND_API.G_TRUE,
40935          p_msg_index      => 1,
40936          p_msg_count      => l_msg_count,
40937          p_msg_data       => l_msg_data,
40938          p_data           => l_data,
40939          p_msg_index_out  => l_msg_index_out);
40940          x_msg_data := l_data;
40941       END IF;
40942      --bug 2673570
40943 --end changes for task weighting
40944 
40945 
40946 /*** End Update_task_version and Update_wbs_number code ***/
40947 
40948   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
40949     FROM pa_proj_element_versions
40950    WHERE element_version_id =  ( Select parent_structure_version_id
40951                                    from pa_proj_element_versions
40952                                   where element_version_id = p_task_version_id )
40953      AND object_type = 'PA_STRUCTURES';
40954 
40955 
40956   --Do financial task check
40957   --If financial
40958   OPEN cur_struc_type( l_structure_id );
40959   FETCH cur_struc_type INTO l_dummy_char;
40960   IF cur_struc_type%FOUND
40961   THEN
40962       --If structure has any published versions.
40963       l_published_version := 'N';
40964       OPEN cur_pub_versions( l_structure_id, l_project_id );
40965       FETCH cur_pub_versions INTO l_published_version;
40966       CLOSE cur_pub_versions;
40967 
40968 
40969       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
40970                                                      l_project_id);
40971       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
40972                                                   l_project_id);
40973 
40974       l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --indent in corresponding task in pa_tasks
40975 
40976       IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
40977          (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
40978 	OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
40979         THEN
40980 
40981           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
40982             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
40983             FROM PA_TASKS pt,
40984                  pa_proj_elem_ver_structure ppa,
40985                  PA_PROJ_ELEMENT_VERSIONS ppev
40986            WHERE ppev.element_version_id = p_task_version_id
40987              AND ppev.parent_structure_version_id = ppa.element_version_id
40988              AND ppev.project_id = ppa.project_id
40989              AND ppev.proj_element_id = pt.task_id;
40990 
40991            SELECT record_version_number, parent_task_id    --get old parent id for bug 2947492 (indent )
40992                  ,top_task_id          --bug 2967204
40993             INTO l_task_record_version_number, l_old_parent_task_id
40994                  ,l_old_top_task_id    --bug 2967204
40995             FROM pa_tasks
40996            WHERE task_id = l_task_id
40997              AND project_id = l_project_id;
40998 
40999 
41000           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
41001                          p_project_id                        => l_project_id
41002                         ,p_task_id                           => l_task_id
41003                         ,p_edit_mode                         => 'INDENT'
41004                         ,p_record_version_number             => l_task_record_version_number
41005                         ,p_wbs_record_version_number         => 1
41006                         ,x_return_status                     => l_return_status
41007                         ,x_msg_count                         => l_msg_count
41008                         ,x_msg_data                          => l_msg_data );
41009 
41010 -- Merged from 85
41011              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
41012                 x_msg_count := FND_MSG_PUB.count_msg;
41013                 IF x_msg_count = 1 then
41014                    pa_interface_utils_pub.get_messages
41015                    (p_encoded        => FND_API.G_TRUE,
41016                     p_msg_index      => 1,
41017                     p_msg_count      => l_msg_count,
41018                     p_msg_data       => l_msg_data,
41019                     p_data           => l_data,
41020                     p_msg_index_out  => l_msg_index_out);
41021                     x_msg_data := l_data;
41022                 END IF;
41023                 raise FND_API.G_EXC_ERROR;
41024              END IF;
41025 
41026             OPEN get_parent_task_id( l_task_id , l_project_id );
41027             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
41028             CLOSE get_parent_task_id;
41029 
41030             --bug 2967204
41031             --Cannot move out of the current hierarchy
41032               IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
41033               THEN
41034                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41035                                        p_msg_name => 'PA_CANT_CHANGE_PARENT');
41036                   raise FND_API.G_EXC_ERROR;
41037               END IF;
41038             --End bug 2967204
41039 
41040       END IF;
41041   END IF;
41042   CLOSE cur_struc_type;
41043 
41044   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
41045 
41046     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
41047 
41048        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
41049           p_structure_version_id => P_Structure_Version_ID
41050      ,p_dirty_flag           => 'Y'             --bug 3902282
41051      ,x_return_status        => x_return_status
41052      ,x_msg_count            => x_msg_count
41053      ,x_msg_data             => x_msg_data
41054        );
41055 
41056        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
41057          x_msg_count := FND_MSG_PUB.count_msg;
41058          If x_msg_count = 1 then
41059            pa_interface_utils_pub.get_messages
41060            (p_encoded        => FND_API.G_TRUE,
41061             p_msg_index      => 1,
41062             p_msg_count      => l_msg_count,
41063             p_msg_data       => l_msg_data,
41064             p_data           => l_data,
41065             p_msg_index_out  => l_msg_index_out);
41066             x_msg_data := l_data;
41067          End If;
41068          raise FND_API.G_EXC_ERROR;
41069        End If;
41070     End If;
41071     -- End of FP_M changes
41072 
41073     l_tasks_ver_ids.extend;
41074     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
41075 
41076     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
41077                        p_commit => FND_API.G_FALSE,
41078                        p_element_versions => l_tasks_ver_ids,
41079                        x_return_status => l_return_status,
41080                        x_msg_count => l_msg_count,
41081                        x_msg_data => l_msg_data);
41082 
41083      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41084        x_msg_count := FND_MSG_PUB.count_msg;
41085        if x_msg_count = 1 then
41086          pa_interface_utils_pub.get_messages
41087          (p_encoded        => FND_API.G_TRUE,
41088           p_msg_index      => 1,
41089           p_msg_count      => l_msg_count,
41090           p_msg_data       => l_msg_data,
41091           p_data           => l_data,
41092           p_msg_index_out  => l_msg_index_out);
41093           x_msg_data := l_data;
41094        end if;
41095        raise FND_API.G_EXC_ERROR;
41096      end if;
41097 
41098 --hsiu added for task status
41099 --if versioning is off, rollup.
41100      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
41101        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
41102                   p_structure_version_id => p_structure_version_id
41103                  ,p_element_version_id => p_task_version_id
41104                  ,x_return_status => l_return_status
41105                  ,x_msg_count => l_msg_count
41106                  ,x_msg_data => l_msg_data
41107        );
41108 
41109        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41110          x_msg_count := FND_MSG_PUB.count_msg;
41111          if x_msg_count = 1 then
41112            pa_interface_utils_pub.get_messages
41113            (p_encoded        => FND_API.G_TRUE,
41114             p_msg_index      => 1,
41115             p_msg_count      => l_msg_count,
41116             p_msg_data       => l_msg_data,
41117             p_data           => l_data,
41118             p_msg_index_out  => l_msg_index_out);
41119             x_msg_data := l_data;
41120          end if;
41121          raise FND_API.G_EXC_ERROR;
41122        end if;
41123      END IF;
41124 
41125 --end task status changes
41126 
41127   END IF;
41128 
41129 --bug 3053281 --set flag if not (manual and workplan only)
41130 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
41131 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
41132 
41133   --3035902: process update flag changes
41134   OPEN get_task_type_id(src_proj_element_id);
41135   FETCH get_task_type_id INTO l_task_type_id;
41136   CLOSE get_task_type_id;
41137 
41138   --set update process flag if necessary;
41139   IF (l_wp_process_flag = 'N') THEN
41140     --may need to update process flag
41141     IF ((l_shared = 'N') AND
41142         (l_wp_type = 'Y') AND
41143         (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
41144         (l_weighting_basis_code <> 'MANUAL'))
41145     THEN
41146       --split and workplan; only update if progressable task added
41147       l_wp_process_flag := 'Y';
41148     ELSIF ((l_shared = 'N') AND
41149            (l_wp_type = 'N')) THEN
41150       --split and financial; update
41151       l_wp_process_flag := 'Y';
41152     ELSIF (l_shared = 'Y') THEN
41153       l_wp_process_flag := 'Y';
41154     END IF;
41155   END IF;
41156 
41157   IF (l_wp_process_flag = 'Y') THEN
41158    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
41159    (
41160       p_calling_context       => 'SELF_SERVICE'
41161      ,p_project_id            => p_project_id
41162      ,p_structure_version_id  => p_structure_version_id
41163      ,p_update_wbs_flag       => 'Y'
41164      ,x_return_status         => l_return_status
41165      ,x_msg_count             => l_msg_count
41166      ,x_msg_data              => l_msg_data);
41167 
41168    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41169      x_msg_count := FND_MSG_PUB.count_msg;
41170      if x_msg_count = 1 then
41171        pa_interface_utils_pub.get_messages
41172        (p_encoded        => FND_API.G_TRUE,
41173         p_msg_index      => 1,
41174         p_msg_count      => l_msg_count,
41175         p_msg_data       => l_msg_data,
41176         p_data           => l_data,
41177         p_msg_index_out  => l_msg_index_out);
41178         x_msg_data := l_data;
41179      end if;
41180      raise FND_API.G_EXC_ERROR;
41181    end if;
41182 END IF;
41183   --3035902: end process update flag changes
41184 
41185   --ideally the following calls should have been cached. but due to time constraints
41186   --we need to write the code this way in multiple places.
41187   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
41188    THEN
41189        IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and  l_published_version = 'N' ) THEN
41190        --Indent
41191        pa_fp_refresh_elements_pub.set_process_flag_proj(
41192              p_project_id               => p_project_id
41193             ,p_request_id               => null
41194             ,p_process_code             => null
41195             ,p_refresh_required_flag    => 'Y'
41196             ,x_return_status            => l_return_status
41197             ,x_msg_count                => l_msg_count
41198             ,x_msg_data                 => l_msg_data );
41199 
41200         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41201            x_msg_count := FND_MSG_PUB.count_msg;
41202            if x_msg_count = 1 then
41203              pa_interface_utils_pub.get_messages
41204             (p_encoded        => FND_API.G_TRUE,
41205              p_msg_index      => 1,
41206              p_msg_count      => l_msg_count,
41207              p_msg_data       => l_msg_data,
41208              p_data           => l_data,
41209              p_msg_index_out  => l_msg_index_out);
41210              x_msg_data := l_data;
41211            end if;
41212            raise FND_API.G_EXC_ERROR;
41213         end if;
41214       END IF;
41215    END IF;
41216 
41217    --check the task is a lowest task again and check whehter its no more a lowest task.
41218   l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
41219 
41220   IF l_lowest_task_flag1 = 'Y' AND
41221      l_lowest_task_flag2 = 'N'
41222   THEN
41223      IF l_wp_type = 'Y'
41224      THEN
41225      --now call call delete planning for task version id.
41226        l_task_ver_ids2.extend(1);
41227        l_task_ver_ids2(1) := p_task_version_id;
41228        DECLARE
41229            l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
41230            CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
41231              SELECT resource_assignment_id
41232                FROM pa_resource_assignments
41233               WHERE wbs_element_Version_id = c_task_ver_id
41234                 AND ta_display_flag = 'N';
41235            l_assign_id    NUMBER := NULL;
41236        BEGIN
41237            OPEN get_assignment_id(p_task_version_id);
41238            FETCH get_assignment_id into l_assign_id;
41239            CLOSE get_assignment_id;
41240 
41241            IF (l_assign_id IS NOT NULL) THEN
41242              l_assign_ids.extend(1);
41243              l_assign_ids(1) := l_assign_id;
41244              pa_fp_planning_transaction_pub.delete_planning_transactions
41245              (
41246                p_context                      => 'WORKPLAN'
41247               ,p_task_or_res                  => 'ASSIGNMENT'
41248               ,p_resource_assignment_tbl => l_assign_ids
41249               ,x_return_status                => l_return_status
41250               ,x_msg_count                    => l_msg_count
41251               ,x_msg_data                     => l_msg_data
41252              );
41253            END IF;
41254        EXCEPTION
41255            WHEN OTHERS THEN
41256                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
41257                                         p_procedure_name => 'BULK_INDENT_TASKS_LITE',
41258                                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
41259            RAISE FND_API.G_EXC_ERROR;
41260        END;
41261 
41262      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41263        x_msg_count := FND_MSG_PUB.count_msg;
41264        if x_msg_count = 1 then
41265          pa_interface_utils_pub.get_messages
41266          (p_encoded        => FND_API.G_TRUE,
41267           p_msg_index      => 1,
41268           p_msg_count      => l_msg_count,
41269           p_msg_data       => l_msg_data,
41270           p_data           => l_data,
41271           p_msg_index_out  => l_msg_index_out);
41272           x_msg_data := l_data;
41273        end if;
41274        raise FND_API.G_EXC_ERROR;
41275      end if;
41276      END IF;  --<<l_wp_type>>
41277   END IF; --<<l_lowest_task_flag1>>
41278 
41279   --bug 4149392
41280   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
41281   --end bug 4149392
41282 
41283   x_return_status := FND_API.G_RET_STS_SUCCESS;
41284 
41285   IF (p_commit = FND_API.G_TRUE) THEN
41286     COMMIT;
41287   END IF;
41288 
41289   		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41290 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
41291 		END IF;
41292 
41293   IF (p_debug_mode = 'Y') THEN
41294     pa_debug.debug('PA_PROJECT_PUB.BULK_INDENT_TASKS_LITE END');
41295   END IF;
41296 
41297 EXCEPTION
41298   when FND_API.G_EXC_ERROR then
41299     if p_commit = FND_API.G_TRUE then
41300       rollback to BULK_INDENT_TASKS_LITE;
41301     end if;
41302     x_return_status := FND_API.G_RET_STS_ERROR;
41303 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41304 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
41305 		END IF;
41306 		FND_MSG_PUB.Count_And_Get
41307         (   p_count    =>  x_msg_count  ,
41308             p_data    =>  x_msg_data  );
41309   when FND_API.G_EXC_UNEXPECTED_ERROR then
41310     if p_commit = FND_API.G_TRUE then
41311       rollback to BULK_INDENT_TASKS_LITE;
41312     end if;
41313     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
41314     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
41315                             p_procedure_name => 'BULK_INDENT_TASKS_LITE',
41316                             p_error_text     => SUBSTRB(SQLERRM,1,240));
41317 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41318 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
41319 		END IF;
41320   when OTHERS then
41321     if p_commit = FND_API.G_TRUE then
41322       rollback to BULK_INDENT_TASKS_LITE;
41323     end if;
41324     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
41325     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
41326                             p_procedure_name => 'BULK_INDENT_TASKS_LITE',
41327                             p_error_text     => SUBSTRB(SQLERRM,1,240));
41328 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41329 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
41330 		END IF;
41331 		FND_MSG_PUB.Count_And_Get
41332         (   p_count    =>  x_msg_count  ,
41333             p_data    =>  x_msg_data  );
41334 
41335     raise;
41336 
41337 END BULK_INDENT_TASKS_LITE;
41338 
41339 -- Added new api BULK_OUTDENT_TASKS_LITE for Huawei enhancement - bug 13923366 by skkoppul
41340 PROCEDURE BULK_OUTDENT_TASKS_LITE (
41341  p_api_version                IN    NUMBER   :=1.0,
41342  p_init_msg_list              IN    VARCHAR2 :=FND_API.G_TRUE,
41343  p_commit             IN    VARCHAR2 :=FND_API.G_FALSE,
41344  p_validate_only              IN    VARCHAR2 :=FND_API.G_TRUE,
41345  p_validation_level       IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
41346  p_calling_module         IN    VARCHAR2 :='SELF_SERVICE',
41347  p_debug_mode             IN    VARCHAR2 :='N',
41348  p_max_msg_count          IN    NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
41349  p_structure_version_id       IN    NUMBER   := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
41350  p_task_version_id        IN    NUMBER,
41351  p_project_id             IN    NUMBER,
41352  p_record_version_number      IN    NUMBER,
41353  x_return_status          OUT   NOCOPY VARCHAR2,
41354  x_msg_count              OUT   NOCOPY NUMBER,
41355  x_msg_data           OUT   NOCOPY VARCHAR2
41356 ) IS
41357 
41358 
41359 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
41360     SELECT 'Y'
41361     FROM pa_proj_structure_types ppst
41362         ,pa_structure_types pst
41363     WHERE ppst.proj_element_id = c_structure_id
41364     AND ppst.structure_type_id = pst.structure_type_id
41365     AND pst.structure_type_class_code IN( 'FINANCIAL' );
41366 
41367 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
41368      SELECT 'Y'
41369      FROM dual
41370      WHERE EXISTS(
41371     SELECT 'xyz'
41372     FROM pa_proj_elem_ver_structure
41373     WHERE proj_element_id = c_structure_id
41374     AND project_id = c_project_id
41375     AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
41376         );
41377 
41378 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
41379     SELECT object_id_from1
41380     FROM pa_object_relationships
41381     WHERE object_id_to1 = c_elem_ver_id
41382     AND object_type_to = 'PA_TASKS'
41383     AND relationship_type = 'S';
41384 
41385 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
41386     SELECT object_id_from1
41387      , object_relationship_id
41388      , record_version_number
41389      , relationship_subtype
41390     FROM pa_object_relationships
41391     WHERE object_id_to1 = p_child_version_id
41392     AND relationship_type = 'S';
41393 
41394 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
41395 
41396 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
41397    SELECT a.object_id_from1
41398     , a.weighting_percentage
41399    FROM pa_object_relationships a
41400    WHERE a.object_id_to1 = c_task_version_id
41401    AND a.object_type_to = 'PA_TASKS'
41402    AND a.relationship_type = 'S'
41403    AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
41404 
41405 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
41406    SELECT '1'
41407    FROM dual
41408    WHERE EXISTS
41409        (SELECT  'xyz'
41410        FROM pa_object_relationships
41411        WHERE object_id_from1 = c_task_version_id
41412        AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
41413        AND relationship_type = 'S'
41414        );
41415 
41416 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
41417   SELECT ptt.prog_entry_enable_flag
41418   FROM    pa_task_types ptt
41419     , pa_proj_element_versions ppev,
41420           pa_proj_elements ppe
41421   WHERE  ppev.element_version_id = c_element_version_id
41422   AND    ppev.proj_element_id = ppe.proj_element_id
41423   AND    ppe.TYPE_ID   = ptt.task_type_id;
41424 
41425 CURSOR get_peer_tasks IS
41426   SELECT b.object_id_to1 object_id_to1
41427   FROM    pa_object_relationships a
41428     , pa_object_relationships b
41429   WHERE a.object_id_to1 = p_task_version_id
41430   AND a.object_type_to = 'PA_TASKS'
41431   AND a.object_id_from1 = b.object_id_from1
41432   AND a.object_type_from = b.object_type_from
41433   AND b.object_type_to = 'PA_TASKS'
41434   AND b.object_id_to1 <> p_task_version_id
41435   AND a.relationship_type = 'S'
41436   AND b.relationship_type = 'S';
41437 
41438   c_get_peer_tasks get_peer_tasks%ROWTYPE;
41439 
41440   --This cursor fetches all tasks that are child of ref task but now become child of p_task_version
41441   -- This case should not be possible for Outdent/Indent
41442   CURSOR cur_new_child(c_ref_task_version_id NUMBER, c_display_sequence NUMBER) IS
41443     SELECT por.object_id_to1, ppev.display_sequence, por.record_version_number, por.object_relationship_id
41444     FROM pa_object_relationships por,
41445            pa_proj_element_versions ppev
41446     WHERE object_id_from1 = c_ref_task_version_id
41447     AND object_id_to1 = element_version_id
41448     AND display_sequence > c_display_sequence
41449     AND relationship_type = 'S'
41450      order by display_sequence;
41451 
41452 
41453 
41454   l_api_name            CONSTANT VARCHAR(30) := 'BULK_OUTDENT_TASKS_LITE';
41455   l_api_version         CONSTANT NUMBER      := 1.0;
41456   l_return_status       VARCHAR2(1);
41457   l_msg_count           NUMBER;
41458   l_msg_data            VARCHAR2(250);
41459   l_data            VARCHAR2(250);
41460   l_msg_index_out       NUMBER;
41461 
41462   l_peer_or_sub         VARCHAR2(30);
41463   l_project_id          NUMBER;
41464   l_structure_id        NUMBER;
41465   l_ref_task_id         NUMBER;
41466   l_task_id                     NUMBER;
41467   l_task_record_version_number  NUMBER;
41468   l_wbs_record_version_number   NUMBER;
41469   l_dummy_char                  VARCHAR2(1);
41470   l_published_version           VARCHAR2(1);
41471   l_relationship_subtype        VARCHAR2(20);
41472   l_struc_version_from          NUMBER;
41473   l_task_version_from           NUMBER;
41474   l_version_from        NUMBER;
41475   l_versioned           VARCHAR2(1) := 'N';
41476   l_shared          VARCHAR2(1) := 'N';
41477   l_rollup_task_id      NUMBER;
41478 
41479   l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
41480   l_parent_ver_id       NUMBER;
41481   l_error_msg_code      VARCHAR2(30);
41482 
41483   src_elem_ver_id       NUMBER;
41484   src_proj_element_id       NUMBER;
41485   src_wbs_number        VARCHAR2(240);
41486   src_seq_number        NUMBER;
41487   src_wbs_level         NUMBER;
41488   src_parent_str_ver_id     NUMBER;
41489   src_object_type       VARCHAR2(30);
41490 
41491   ref_elem_ver_id       NUMBER;
41492   ref_proj_element_id       NUMBER;
41493   ref_wbs_number        VARCHAR2(240);
41494   ref_seq_number        NUMBER;
41495   ref_wbs_level         NUMBER;
41496   ref_parent_str_ver_id     NUMBER;
41497   ref_object_type       VARCHAR2(30);
41498 
41499   l_old_parent_id       NUMBER;
41500   l_dummy           VARCHAR2(1);
41501 
41502   l_new_weighting       NUMBER(17,2);
41503   l_old_weighting       NUMBER(17,2);
41504   l_progress_allowed        VARCHAR2(1);
41505 
41506   l_element_version_id_tab  PA_FORECAST_GLOB.NumberTabTyp;
41507   l_proj_element_id_tab     PA_FORECAST_GLOB.NumberTabTyp;
41508   l_object_type_tab     PA_FORECAST_GLOB.VCTabTyp;
41509   l_project_id_tab      PA_FORECAST_GLOB.NumberTabTyp;
41510   l_parent_str_version_id_tab   PA_FORECAST_GLOB.NumberTabTyp;
41511   l_display_sequence_tab    PA_FORECAST_GLOB.NumberTabTyp;
41512   l_wbs_level_tab       PA_FORECAST_GLOB.NumberTabTyp;
41513   l_old_wbs_level_tab       PA_FORECAST_GLOB.NumberTabTyp;
41514   l_wbs_number_tab      PA_FORECAST_GLOB.VCTabTyp;
41515   l_record_version_tab      PA_FORECAST_GLOB.NumberTabTyp;
41516   l_changed_flag_tab        PA_FORECAST_GLOB.VC1TabTyp;
41517 
41518   l_wbs_number          VARCHAR2(1000);
41519   src_branch_mask       VARCHAR2(1000);
41520   ref_branch_mask       VARCHAR2(1000);
41521   l_str1            VARCHAR2(1000);
41522   l_str2            VARCHAR2(1000);
41523   l_number          NUMBER;
41524   l_new_wbs_number      VARCHAR2(1000);
41525   l_user_id         NUMBER;
41526   l_login_id            NUMBER;
41527   l_update_new_child_rels   VARCHAR2(1) := 'N';
41528   first_sub_task_below_src_flag boolean;
41529   last_sub_task_below_src      VARCHAR2(1000);
41530   temp_old_branch_mask      VARCHAR2(1000);
41531   temp_new_branch_mask      VARCHAR2(1000);
41532   last_sub_task_number      VARCHAR2(1000);
41533 
41534   --bug 2843737
41535   CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
41536     select object_id_from1
41537       from pa_object_relationships
41538      where object_id_to1 = c_object_id_to1
41539        and relationship_type = 'S';
41540   l_ref_parent_ver_id          NUMBER;
41541 --end bug 2843737
41542 
41543   CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
41544     select wbs_number
41545       from pa_proj_element_versions
41546      where element_version_id = c_elem_ver_id
41547      and object_type ='PA_TASKS';
41548 
41549   ref_parent_branch_mask        VARCHAR2(1000);
41550 
41551 -- hyau Bug 2852753
41552    l_delete_project_allowed      VARCHAR2(1);
41553    l_update_proj_num_allowed      VARCHAR2(1);
41554    l_update_proj_name_allowed    VARCHAR2(1);
41555    l_update_proj_desc_allowed    VARCHAR2(1);
41556    l_update_proj_dates_allowed    VARCHAR2(1);
41557    l_update_proj_status_allowed  VARCHAR2(1);
41558    l_update_proj_manager_allowed  VARCHAR2(1);
41559    l_update_proj_org_allowed      VARCHAR2(1);
41560    l_add_task_allowed            VARCHAR2(1);
41561    l_delete_task_allowed          VARCHAR2(1);
41562    l_update_task_num_allowed      VARCHAR2(1);
41563    l_update_task_name_allowed    VARCHAR2(1);
41564    l_update_task_dates_allowed    VARCHAR2(1);
41565    l_update_task_desc_allowed    VARCHAR2(1);
41566    l_update_parent_task_allowed  VARCHAR2(1);
41567    l_update_task_org_allowed      VARCHAR2(1);
41568 
41569    l_err_code         NUMBER        := 0;
41570    l_err_stack        VARCHAR2(200) := NULL;
41571    l_err_stage        VARCHAR2(200) := NULL;
41572 
41573    l_pm_product_code pa_projects_all.pm_product_code%TYPE;
41574 
41575    CURSOR get_product_code ( c_project_id NUMBER ) IS
41576    SELECT pm_product_code
41577    FROM PA_PROJECTS_ALL
41578    WHERE project_id = c_project_id;
41579 
41580    l_cur_project_id      NUMBER;
41581    CURSOR cur_proj_id
41582    IS
41583      SELECT project_id
41584        FROM pa_proj_element_versions
41585       WHERE element_version_id = p_structure_version_id;
41586 
41587 -- end hyau Bug 2852753
41588 
41589 l_plannable_tasks_tbl        PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
41590 l_parent_task_id             NUMBER;
41591 l_old_parent_task_id         NUMBER;
41592 l_top_task_id                NUMBER;
41593 l_old_top_task_id            NUMBER;
41594 l_old_wbs_level              NUMBER;
41595 i                            NUMBER;
41596 
41597     CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER )
41598     IS
41599       SELECT parent_task_id, top_task_id
41600         FROM pa_tasks
41601        WHERE project_id = c_project_id
41602          AND task_id = c_task_id;
41603 
41604     CURSOR cur_new_child_task( c_project_id NUMBER, c_wbs_level NUMBER,
41605                                c_task_id NUMBER , c_parent_task_id NUMBER )
41606     IS
41607       SELECT pt.task_id, pt.top_task_id, pt.parent_task_id
41608         FROM pa_tasks pt, pa_proj_element_versions ppev
41609        WHERE pt.wbs_level = c_wbs_level
41610          AND parent_task_id = c_parent_task_id
41611          AND pt.project_id = c_project_id
41612          AND pt.task_id = ppev.proj_element_id
41613          AND ppev.display_sequence > ( SELECT display_sequence FROM pa_proj_element_versions
41614                                         WHERE project_id = c_project_id
41615                                           AND object_type = 'PA_TASKS'
41616                                           AND proj_element_id = c_task_id );
41617 
41618    --For financial tasks we can directly join with pa_proj-element_version using proj_element_id
41619    --bcoz this api will be called as long as there is only one version for financial otherwise
41620    --publishing will take care.
41621 
41622   l_wp_type              VARCHAR2(1);
41623   l_weighting_basis_Code VARCHAR2(30);
41624 
41625   cursor get_task_type_id(c_proj_element_id NUMBER) IS
41626       select type_id
41627         from pa_proj_elements
41628        where proj_element_id = c_proj_element_id;
41629   l_task_type_id      NUMBER;
41630   l_wp_process_flag   VARCHAR2(1);
41631 
41632   Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
41633     select object_id_to1
41634       from pa_object_relationships
41635      where relationshiP_type = 'S'
41636        and object_type_to = 'PA_TASKS'
41637              start with object_id_to1 = c_task_ver_id
41638                and object_type_to = 'PA_TASKS'
41639                and relationship_type = 'S'
41640            connect by prior object_id_from1 = object_id_to1
41641                and prior object_type_from = object_type_to
41642                and prior relationship_type = relationship_type
41643  intersect
41644     select a.object_id_to1
41645       from pa_object_relationships a, pa_proj_element_versions b
41646      where a.relationshiP_type = 'S'
41647        and a.object_id_from1 = b.parent_structure_version_id
41648        and b.element_version_id = c_task_ver_id
41649        and a.object_type_from = 'PA_STRUCTURES';
41650   l_old_par_ver_id NUMBER;
41651   l_new_par_ver_id NUMBER;
41652 
41653   l_task_ver_ids2             SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
41654   l_lowest_task_flag1         VARCHAR2(1);
41655   l_lowest_task_flag2         VARCHAR2(1);
41656   l_fin_task_flag             VARCHAR2(1);
41657   l_ref_parent_task_id        NUMBER;
41658 	message varchar2(2000);
41659 	t_str varchar2(1);
41660 
41661 BEGIN
41662 
41663   pa_debug.init_err_stack ('PA_PROJECT_PUB.BULK_OUTDENT_TASKS_LITE');
41664 
41665   IF (p_debug_mode = 'Y') THEN
41666     pa_debug.debug('PA_PROJECT_PUB.BULK_OUTDENT_TASKS_LITE begin');
41667   END IF;
41668 
41669   IF (p_commit = FND_API.G_TRUE) THEN
41670     savepoint BULK_OUTDENT_TASKS_LITE;
41671   END IF;
41672 
41673       /* Added below block to ensure that the new API's are controlled by Dev*/
41674 	begin
41675 			select 'x' into  t_str
41676 			from pji_system_parameters
41677 			where name = 'BULK_LITE'
41678 			and value = 'Y';
41679 
41680 	exception
41681 		when no_data_found  then
41682 		    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41683                               p_msg_name => 'PA_LITE_API_CANT_USE');
41684             RAISE FND_API.G_EXC_ERROR;
41685 		when others  then
41686 
41687 			raise;
41688 	end;
41689 
41690 
41691   	IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id),' ') <> 'SHARE_FULL'
41692        OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id),'N') = 'Y' THEN
41693          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41694                               p_msg_name => 'PA_CANT_USE_LITE_API');
41695          RAISE FND_API.G_EXC_ERROR;
41696     END IF;
41697 
41698   		-- Set the G_ROLLUP_FLAG based on profile options
41699 		--IF(p_calling_module = 'AMG') THEN
41700 			PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
41701 		--END IF;
41702 	IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41703 			PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'OUTDENT',l_msg_data,l_return_status);
41704 			IF l_return_status <> 'S'
41705 			THEN
41706 				PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41707                                      p_msg_name =>l_msg_data );
41708 				RAISE  FND_API.G_EXC_ERROR;
41709 			ELSE
41710 				PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_project_id,p_structure_version_id,'OUTDENT');
41711 				PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,p_task_version_id,p_structure_version_id,'OUTDENT');
41712 			END IF;
41713 	END IF;
41714 
41715   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
41716     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
41717   END IF;
41718 
41719   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
41720     FND_MSG_PUB.initialize;
41721   END IF;
41722 
41723   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
41724 
41725   l_wp_process_flag := 'N';
41726 
41727       IF p_calling_module = 'SELF_SERVICE' THEN
41728 
41729         OPEN cur_proj_id;
41730         FETCH cur_proj_id INTO l_cur_project_id;
41731         CLOSE cur_proj_id;
41732 
41733         OPEN get_product_code(l_cur_project_id);
41734         FETCH get_product_code INTO l_pm_product_code;
41735         CLOSE get_product_code;
41736 
41737         If l_pm_product_code IS NOT NULL THEN
41738           pa_pm_controls.Get_Project_actions_allowed
41739                 (P_PM_PRODUCT_CODE                => l_pm_product_code,
41740                  P_DELETE_PROJECT_ALLOWED         => l_delete_project_allowed,
41741                  P_UPDATE_PROJ_NUM_ALLOWED        => l_update_proj_num_allowed,
41742                  P_UPDATE_PROJ_NAME_ALLOWED       => l_update_proj_name_allowed,
41743                  P_UPDATE_PROJ_DESC_ALLOWED       => l_update_proj_desc_allowed,
41744                  P_UPDATE_PROJ_DATES_ALLOWED      => l_update_proj_dates_allowed,
41745                  P_UPDATE_PROJ_STATUS_ALLOWED     => l_update_proj_status_allowed,
41746                  P_UPDATE_PROJ_MANAGER_ALLOWED    => l_update_proj_manager_allowed,
41747                  P_UPDATE_PROJ_ORG_ALLOWED        => l_update_proj_org_allowed,
41748                  P_ADD_TASK_ALLOWED               => l_add_task_allowed,
41749                  P_DELETE_TASK_ALLOWED            => l_delete_task_allowed,
41750                  P_UPDATE_TASK_NUM_ALLOWED        => l_update_task_num_allowed,
41751                  P_UPDATE_TASK_NAME_ALLOWED       => l_update_task_name_allowed,
41752                  P_UPDATE_TASK_DATES_ALLOWED      => l_update_task_dates_allowed,
41753                  P_UPDATE_TASK_DESC_ALLOWED       => l_update_task_desc_allowed,
41754                  P_UPDATE_PARENT_TASK_ALLOWED     => l_update_parent_task_allowed,
41755                  P_UPDATE_TASK_ORG_ALLOWED        => l_update_task_org_allowed,
41756                  P_ERROR_CODE                 => l_err_code,
41757          P_ERROR_STACK                    => l_err_stack,
41758          P_ERROR_STAGE                => l_err_stage );
41759 
41760           IF l_err_code <> 0 THEN
41761             PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41762                                  p_msg_name       => l_err_stage);
41763           END IF;
41764       IF l_update_parent_task_allowed = 'N' THEN
41765               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41766                                    p_msg_name       => 'PA_PR_PM_NO_MOVE_TASK');
41767               raise FND_API.G_EXC_ERROR;
41768           END IF;
41769         END IF;
41770       END IF;
41771 
41772   IF (p_structure_version_id IS NOT NULL) AND
41773        (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
41774     IF ('N' = pa_proj_elements_utils.check_task_in_structure(
41775           p_structure_version_id,
41776           p_task_version_id)) THEN
41777       --deleting linked task. Error
41778       PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
41779       raise FND_API.G_EXC_ERROR;
41780     END IF;
41781   END IF;
41782 
41783 --hsiu added, for dates rollup
41784 --need to get peer task before it has been outdented.
41785   OPEN get_peer_tasks;
41786   LOOP
41787     FETCH get_peer_tasks INTO c_get_peer_tasks;
41788     EXIT WHEN get_peer_tasks%NOTFOUND;
41789     l_tasks_ver_ids.extend;
41790     l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
41791 --added for task status rollup
41792     l_rollup_task_id := c_get_peer_tasks.object_id_to1;
41793   END LOOP;
41794   CLOSE get_peer_tasks;
41795 
41796   -- Get Source Task Information
41797   BEGIN
41798       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
41799       INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
41800       FROM PA_PROJ_ELEMENT_VERSIONS
41801       WHERE element_version_id = p_task_version_id
41802       AND project_id = p_project_id
41803       AND parent_structure_version_id = p_structure_version_id;
41804   EXCEPTION
41805     WHEN OTHERS THEN
41806     raise;
41807   END;
41808 
41809 
41810 -- Lifecycle Phase validation Changes should be implemented here
41811 
41812   IF src_wbs_level = 1 then
41813     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
41814                          ,p_msg_name       => 'PA_PS_CANNOT_OUTDENT');
41815     raise FND_API.G_EXC_ERROR;
41816   END IF;
41817 
41818   -- Get Refernce Task Information
41819 
41820   BEGIN
41821       SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
41822       INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number,  ref_parent_str_ver_id, ref_object_type
41823       FROM PA_PROJ_ELEMENT_VERSIONS
41824       WHERE parent_structure_version_id = p_structure_version_id
41825       AND project_id = p_project_id
41826       AND (wbs_level = src_wbs_level-1)
41827           AND object_type = 'PA_TASKS'
41828       AND display_sequence =
41829         (SELECT max (display_sequence)
41830          FROM pa_proj_element_versions
41831          WHERE project_id = p_project_id
41832          AND parent_structure_version_id = p_structure_version_id
41833          AND (wbs_level = src_wbs_level-1)
41834          AND display_sequence < src_seq_number
41835          AND object_type = 'PA_TASKS');
41836   EXCEPTION
41837     WHEN OTHERS THEN
41838     raise;
41839     -- It will never return NO_DATA_FOUND as there will always at least one task with wbs_level-1
41840   END;
41841 
41842   IF src_wbs_level < ref_wbs_level then
41843     PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
41844                          ,p_msg_name       => 'PA_PS_CANNOT_OUTDENT');
41845     raise FND_API.G_EXC_ERROR;
41846   END IF;
41847 
41848   -- While Outdenting always the source task will become peer of reference task
41849   l_peer_or_sub := 'PEER';
41850 
41851   OPEN get_ref_parent_id(ref_elem_ver_id);
41852   FETCH get_ref_parent_id into l_ref_parent_ver_id;
41853   CLOSE get_ref_parent_id;
41854 
41855   OPEN get_wbs_number(l_ref_parent_ver_id);
41856   FETCH get_wbs_number into ref_parent_branch_mask;
41857   CLOSE get_wbs_number;
41858 
41859     -- Bug 8211519 :  Dissallowing 'Outdenting' of a task if the task has a subproject association.
41860     if (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
41861 							          , src_proj_element_id
41862 								        , p_task_version_id),'N') = 'Y') then
41863 
41864     	IF (p_debug_mode = 'Y') THEN
41865          pa_debug.debug('ERROR - PA_PROJECT_PUB.BULK_OUTDENT_TASKS_LITE ');
41866       END IF;
41867 
41868       PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41869                            p_msg_name => 'PA_PS_TASK_HAS_SUB_PROJ');
41870       raise FND_API.G_EXC_ERROR;
41871 
41872     end if;
41873 
41874     --Check if ok to OUTDENT this task
41875     PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
41876          p_task_ver_id => p_task_version_id
41877         ,x_return_status      => l_return_status
41878         ,x_error_message_code => l_error_msg_code
41879     );
41880 
41881     IF (l_return_status <> 'Y') THEN
41882         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41883                              p_msg_name => l_error_msg_code);
41884         raise FND_API.G_EXC_ERROR;
41885     END IF;
41886 
41887     --check if ok to create
41888     OPEN get_parent_version_id(ref_elem_ver_id);
41889     FETCH get_parent_version_id into l_parent_ver_id;
41890     CLOSE get_parent_version_id;
41891 
41892     --if financial task, check if changing parent ok
41893     IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
41894       OPEN get_top_task_ver_id(l_parent_ver_id);
41895       FETCH get_top_task_ver_id into l_new_par_ver_id;
41896       CLOSE get_top_task_ver_id;
41897 
41898       OPEN get_top_task_ver_id(p_task_version_id);
41899       FETCH get_top_task_ver_id into l_old_par_ver_id;
41900       CLOSE get_top_task_Ver_id;
41901 
41902       IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
41903         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41904                              p_msg_name => 'PA_CANT_CHANGE_PARENT');
41905         raise FND_API.G_EXC_ERROR;
41906       END IF;
41907     END IF;
41908 
41909     PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
41910          p_parent_task_ver_id => l_parent_ver_id
41911         ,x_return_status      => l_return_status
41912         ,x_error_message_code => l_error_msg_code
41913       );
41914 
41915       IF (l_return_status <> 'Y') THEN
41916         PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41917                              p_msg_name => l_error_msg_code);
41918         raise FND_API.G_EXC_ERROR;
41919       END IF;
41920 
41921   -- Added for FP_M changes. Bug 3305199 : Bhumesh  xxx
41922 
41923   If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
41924         IN ('SHARE_PARTIAL')
41925   Then
41926 
41927     PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
41928         p_task_version_id       => p_task_version_id
41929       , p_ref_task_version_id   => ref_elem_ver_id
41930       , x_return_status         => x_return_status
41931       , x_msg_count             => x_msg_count
41932       , x_msg_data              => x_msg_data
41933       , x_error_msg_code        => l_error_msg_code);
41934 
41935     IF (x_return_status <> 'S') THEN    --Bug 3831786 Added
41936        PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41937                 p_msg_name       => l_error_msg_code);
41938       raise FND_API.G_EXC_ERROR;
41939     End If;
41940   End If;
41941 
41942   --check the task is a lowest task bug 3301192
41943   l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
41944 
41945   -- End of FP_M changes
41946 
41947 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
41948 
41949 -- Logic Added for plsql table
41950 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
41951 
41952 l_element_version_id_tab.delete;
41953 l_proj_element_id_tab.delete;
41954 l_object_type_tab.delete;
41955 l_project_id_tab.delete;
41956 l_parent_str_version_id_tab.delete;
41957 l_display_sequence_tab.delete;
41958 l_wbs_level_tab.delete;
41959 l_old_wbs_level_tab.delete;
41960 l_wbs_number_tab.delete;
41961 l_record_version_tab.delete;
41962 l_changed_flag_tab.delete;
41963 
41964 	-- Sridhar Huawei 18-Sept  add the below if statement.
41965 	-- Need not derive   wbs_number and wbs_level in defer mode
41966 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='N') THEN
41967   BEGIN
41968   /*
41969             SELECT  distinct element_version_id, proj_element_id, object_type,
41970             project_id, parent_structure_version_id,
41971             display_sequence, wbs_level, wbs_number,
41972             record_version_number, 'N' changed_flag
41973              BULK COLLECT INTO l_element_version_id_tab,
41974             l_proj_element_id_tab, l_object_type_tab,
41975             l_project_id_tab, l_parent_str_version_id_tab,
41976             l_display_sequence_tab, l_wbs_level_tab,
41977             l_wbs_number_tab, l_record_version_tab,
41978             l_changed_flag_tab
41979             FROM
41980         pa_proj_element_versions
41981         WHERE
41982                  project_id = p_project_id
41983         AND parent_structure_version_id = p_structure_version_id
41984         AND object_type = 'PA_TASKS'
41985         AND(
41986         element_version_id = p_task_version_id  -- Source task itself
41987         OR element_version_id IN -- All tasks below the source task
41988         (select object_id_to1
41989         from pa_object_relationships
41990         where relationship_type = 'S'
41991                 and object_type_to = 'PA_TASKS'
41992         start with object_id_from1 = l_ref_parent_ver_id
41993         connect by object_id_from1 = PRIOR object_id_to1
41994                     and relationship_type = prior relationship_type
41995                     and relationship_type = 'S')
41996         )
41997         ORDER BY display_sequence ;
41998 	*/
41999 	select proj_element_id INTO l_ref_parent_task_id from pa_proj_element_versions where element_version_id = l_ref_parent_ver_id and project_id= p_project_id;
42000 
42001 	   insert into  pa_tasks_tmp (task_id)
42002        SELECT task_id
42003        FROM pa_tasks
42004        WHERE project_id            = p_project_id
42005        START WITH parent_task_id        = l_ref_parent_task_id
42006        CONNECT BY parent_task_id = prior task_id;
42007 
42008        insert into pa_tasks_tmp (task_id)
42009        select proj_element_id
42010        from pa_proj_element_versions
42011        where ELEMENT_VERSION_ID = p_task_version_id and project_id = p_project_id and not exists (select null from pa_tasks_tmp where task_id = proj_element_id);
42012 
42013 	   SELECT /*+ ordered index(ev1 pa_proj_element_versions_n1)  */
42014        element_version_id, proj_element_id, object_type,
42015             project_id, parent_structure_version_id,
42016             display_sequence, wbs_level, wbs_number,
42017             record_version_number, 'N' changed_flag
42018 	   BULK COLLECT INTO l_element_version_id_tab,
42019             l_proj_element_id_tab, l_object_type_tab,
42020             l_project_id_tab, l_parent_str_version_id_tab,
42021             l_display_sequence_tab, l_wbs_level_tab,
42022             l_wbs_number_tab, l_record_version_tab,
42023             l_changed_flag_tab
42024        FROM pa_tasks_tmp t1 ,
42025         pa_proj_element_versions ev1
42026        WHERE
42027             project_id = p_project_id
42028            AND parent_structure_version_id = p_structure_version_id
42029            AND object_type = 'PA_TASKS'
42030            AND proj_element_id = t1.task_id
42031        ORDER BY display_sequence ;
42032 
42033     l_old_wbs_level_tab := l_wbs_level_tab;
42034   EXCEPTION
42035     WHEN OTHERS THEN
42036         raise;
42037   END;
42038 
42039 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
42040 -- Here we can also incorporate sequence number update. In OUTDENT sequence number does not change.
42041 
42042 -- Update wbs level
42043 
42044  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
42045         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
42046             l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
42047             l_changed_flag_tab(j) := 'Y';
42048         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
42049             -- Direct Childs of source
42050             l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
42051             l_changed_flag_tab(j) := 'Y';
42052         ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
42053             -- Exit level changes, IT means no Direct childs are left
42054             EXIT;
42055         END IF;
42056  END LOOP;
42057 
42058 
42059 -- Update wbs_number
42060 
42061 
42062  src_branch_mask := src_wbs_number;
42063  ref_branch_mask := ref_wbs_number;
42064  first_sub_task_below_src_flag := false;
42065 
42066 
42067  FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
42068         IF l_element_version_id_tab(j) = src_elem_ver_id THEN
42069         IF src_wbs_level = 2 THEN -- This is going to be a top task
42070             l_wbs_number := to_char(to_number(ref_wbs_number)+1);
42071                 l_wbs_number_tab(j) := l_wbs_number;
42072                 l_changed_flag_tab(j) := 'Y';
42073                 l_new_wbs_number := l_wbs_number;
42074         ELSE
42075               l_number := instr(ref_wbs_number,'.', -1, 1);
42076               l_str1 := substr(ref_wbs_number, 1, l_number -1);
42077               l_str2 := substr(ref_wbs_number, l_number + 1);
42078               l_str2 := to_char(to_number(l_str2 + 1));
42079               l_wbs_number := l_str1 || '.' || l_str2;
42080               l_wbs_number_tab(j) := l_wbs_number;
42081               l_changed_flag_tab(j) := 'Y';
42082               l_new_wbs_number := l_wbs_number;
42083         END IF;
42084     ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
42085         IF l_display_sequence_tab(j) > src_seq_number THEN
42086         IF src_wbs_level = 2 THEN -- Source is going to be a top task
42087               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
42088                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
42089             -- Direct childs of source
42090                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
42091               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
42092                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
42093               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
42094                   l_wbs_number_tab(j) := l_wbs_number;
42095                   l_changed_flag_tab(j) := 'Y';
42096               IF l_old_wbs_level_tab(j) = src_wbs_level+1 THEN
42097                 first_sub_task_below_src_flag := true;
42098                 last_sub_task_below_src := l_wbs_number;
42099               END IF;
42100               ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
42101                  AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
42102               IF first_sub_task_below_src_flag = false THEN
42103                   l_wbs_number := l_new_wbs_number || '.1';
42104                   first_sub_task_below_src_flag := true;
42105                   last_sub_task_below_src := l_wbs_number;
42106                   temp_old_branch_mask := l_wbs_number_tab(j);
42107                   temp_new_branch_mask := l_wbs_number;
42108                   l_wbs_number_tab(j) := l_wbs_number;
42109                   l_changed_flag_tab(j) := 'Y';
42110               ELSE
42111                 IF (l_old_wbs_level_tab(j) = src_wbs_level) THEN
42112                       l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
42113                   l_str1 := to_char(to_number(l_str1 + 1));
42114                   l_wbs_number := l_new_wbs_number || '.' || l_str1;
42115                   temp_old_branch_mask := l_wbs_number_tab(j);
42116                   temp_new_branch_mask := l_wbs_number;
42117                   l_wbs_number_tab(j) := l_wbs_number;
42118                   l_changed_flag_tab(j) := 'Y';
42119                   last_sub_task_below_src := l_wbs_number;
42120                 ELSE
42121                       l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
42122                   l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
42123                       l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
42124                   l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
42125                   l_wbs_number_tab(j) := l_wbs_number;
42126                   l_changed_flag_tab(j) := 'Y';
42127                                 END IF;
42128               END IF;
42129               ELSE
42130                  IF(instr(l_wbs_number_tab(j), '.') <> 0) then
42131                  l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
42132                  l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
42133                  l_str1 := to_char(to_number(l_str1) + 1);
42134                          l_wbs_number := l_str1 || l_str2;
42135                  l_wbs_number_tab(j) := l_wbs_number;
42136                  l_changed_flag_tab(j) := 'Y';
42137                  ELSE
42138                      l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) + 1);
42139                  l_wbs_number_tab(j) := l_wbs_number;
42140                  l_changed_flag_tab(j) := 'Y';
42141              END IF;
42142               END IF;
42143         ELSE
42144               IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
42145                  AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
42146             -- Direct childs of source
42147                   l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
42148               l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
42149                   l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
42150               l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
42151                   l_wbs_number_tab(j) := l_wbs_number;
42152                   l_changed_flag_tab(j) := 'Y';
42153               IF (l_old_wbs_level_tab(j) = src_wbs_level+1) THEN
42154                 first_sub_task_below_src_flag := true;
42155                 last_sub_task_below_src := l_wbs_number;
42156               END IF;
42157               ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
42158                  AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
42159               IF first_sub_task_below_src_flag = false THEN
42160                   l_wbs_number := l_new_wbs_number || '.1';
42161                   first_sub_task_below_src_flag := true;
42162                   last_sub_task_below_src := l_wbs_number;
42163                   temp_old_branch_mask := l_wbs_number_tab(j);
42164                   temp_new_branch_mask := l_wbs_number;
42165                   l_wbs_number_tab(j) := l_wbs_number;
42166                   l_changed_flag_tab(j) := 'Y';
42167               ELSE
42168                 IF l_old_wbs_level_tab(j) = src_wbs_level THEN
42169                       l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
42170                   l_str1 := to_char(to_number(l_str1 + 1));
42171                   l_wbs_number := l_new_wbs_number || '.' || l_str1;
42172                   temp_old_branch_mask := l_wbs_number_tab(j);
42173                   temp_new_branch_mask := l_wbs_number;
42174                   l_wbs_number_tab(j) := l_wbs_number;
42175                   l_changed_flag_tab(j) := 'Y';
42176                   last_sub_task_below_src := l_wbs_number;
42177                 ELSE
42178                       l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
42179                   l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
42180                       l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
42181                   l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
42182                   l_wbs_number_tab(j) := l_wbs_number;
42183                   l_changed_flag_tab(j) := 'Y';
42184                                 END IF;
42185               END IF;
42186               ELSE
42187                   l_str1 := substr(l_wbs_number_tab(j), length(ref_parent_branch_mask) + 2);
42188               IF(instr(l_str1, '.') <> 0) THEN
42189                 l_str2 := substr(l_str1, instr(l_str1, '.'));
42190                 l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
42191                 l_str1 := to_char(to_number(l_str1) + 1);
42192                 l_wbs_number := ref_parent_branch_mask || '.' || l_str1 || l_str2;
42193                 l_wbs_number_tab(j) := l_wbs_number;
42194                 l_changed_flag_tab(j) := 'Y';
42195               ELSE
42196                 l_str1:= to_char(to_number(l_str1) + 1);
42197                 l_wbs_number := ref_parent_branch_mask || '.' || l_str1;
42198                 l_wbs_number_tab(j) := l_wbs_number;
42199                 l_changed_flag_tab(j) := 'Y';
42200               END IF;
42201               END IF;
42202         END IF;
42203           END IF;
42204     END IF;
42205      END LOOP;
42206 
42207 
42208 l_user_id := fnd_global.user_id;
42209 l_login_id := fnd_global.login_id;
42210 
42211 -- Locking should be implemented here
42212 
42213  FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
42214  UPDATE PA_PROJ_ELEMENT_VERSIONS
42215  SET
42216         wbs_level                = l_wbs_level_tab(j)           ,
42217         wbs_number                   = l_wbs_number_tab(j)          ,
42218         last_update_date                 = sysdate          ,
42219         last_updated_by                  = l_user_id            ,
42220         last_update_login                = l_login_id           ,
42221     record_version_number        = l_record_version_tab(j)+1
42222  WHERE  element_version_id         = l_element_version_id_tab(j)
42223  AND l_changed_flag_tab(j)='Y';
42224 
42225 END IF;
42226 -- Sridhar Huawei 18-Sept add above end if
42227 
42228 -- Update Relationship
42229 
42230       IF ref_object_type = 'PA_TASKS'
42231       THEN
42232          IF l_peer_or_sub = 'PEER'
42233          THEN
42234             OPEN cur_obj_rel( ref_elem_ver_id );
42235             FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
42236             CLOSE cur_obj_rel;
42237 
42238             l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
42239 
42240             IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
42241             THEN
42242                 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
42243                 l_task_version_from := null;
42244             ELSE
42245                 l_task_version_from  := v_cur_obj_rel_rec.object_id_from1;
42246                 l_struc_version_from := null;
42247             END IF;
42248 
42249         --There could be some tasks with sequence number greater than the p_task_version that now become
42250             --children of p_task_version.
42251         -- I don't think so that this is needed. This is not possible in any case
42252             l_update_new_child_rels := 'Y';
42253 
42254          ELSE -- l_peer_or_sub = 'SUB' Basically this case will not be for OUTDENT
42255                 --parent task is the reference task
42256             l_task_version_from  := ref_elem_ver_id;
42257             l_struc_version_from := null;
42258             l_relationship_subtype := 'TASK_TO_TASK';
42259          END IF;
42260      -- The following case is not possible for Indent/Outdent
42261       ELSIF ref_object_type = 'PA_STRUCTURES'
42262       THEN
42263          l_struc_version_from := ref_elem_ver_id;
42264          l_task_version_from  := null;
42265          l_relationship_subtype := 'STRUCTURE_TO_TASK';
42266       END IF; -- ref_object_type = 'PA_TASKS'
42267 
42268 
42269  --update relatonship of the task version p_task_version.
42270  --set structure_version_from and task_version_from accordingly.
42271  OPEN cur_obj_rel( p_task_version_id );
42272  FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
42273  CLOSE cur_obj_rel;
42274 
42275 --for task weighting
42276  OPEN get_task_weighting(p_task_version_id);
42277  FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
42278  CLOSE get_task_weighting;
42279 
42280 
42281  IF(l_task_version_from is not null) THEN
42282    l_version_from := l_task_version_from;
42283  ELSE
42284    l_version_from := l_struc_version_from;
42285  END IF;
42286 
42287  IF (l_version_from = p_task_version_id) THEN
42288    l_new_weighting := l_old_weighting;
42289  ELSE
42290    OPEN get_sub_tasks(l_version_from);
42291    FETCH get_sub_tasks into l_dummy;
42292    IF (get_sub_tasks%NOTFOUND) THEN
42293      l_new_weighting := 100;
42294      --bug 2673570
42295      OPEN check_progress_allowed(p_task_version_id);
42296      FETCH check_progress_allowed INTO l_progress_allowed;
42297      CLOSE check_progress_allowed;
42298 
42299      if l_progress_allowed = 'N' then
42300         l_new_weighting := 0;
42301      end if;
42302      --bug 2673570
42303    ELSE
42304      l_new_weighting := 0;
42305    END IF;
42306    CLOSE get_sub_tasks;
42307  END IF;
42308 
42309  PA_RELATIONSHIP_PVT.Update_Relationship
42310              (
42311               p_api_version                       => p_api_version
42312              ,p_init_msg_list                     => p_init_msg_list
42313              ,p_commit                            => p_commit
42314              ,p_validate_only                     => p_validate_only
42315              ,p_validation_level                  => p_validation_level
42316              ,p_calling_module                    => p_calling_module
42317              ,p_debug_mode                        => p_debug_mode
42318              ,p_max_msg_count                     => p_max_msg_count
42319              ,p_object_relationship_id            => v_cur_obj_rel_rec.object_relationship_id
42320              ,p_project_id_from                   => null
42321              ,p_structure_id_from                 => null
42322              ,p_structure_version_id_from         => l_struc_version_from
42323              ,p_task_version_id_from              => l_task_version_from
42324              ,p_project_id_to                     => null
42325              ,p_structure_id_to                   => null
42326              ,p_structure_version_id_to           => null
42327              ,p_task_version_id_to                => p_task_version_id
42328              ,p_relationship_type                 => 'S'
42329              ,p_relationship_subtype              => l_relationship_subtype
42330              ,p_weighting_percentage              => l_new_weighting
42331              ,p_record_version_number             => v_cur_obj_rel_rec.record_version_number
42332              ,x_return_status                     => l_return_status
42333              ,x_msg_count                         => l_msg_count
42334              ,x_msg_data                          => l_msg_data
42335             );
42336 
42337 
42338              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
42339                 x_msg_count := FND_MSG_PUB.count_msg;
42340                 IF x_msg_count = 1 then
42341                    pa_interface_utils_pub.get_messages
42342                    (p_encoded        => FND_API.G_TRUE,
42343                     p_msg_index      => 1,
42344                     p_msg_count      => l_msg_count,
42345                     p_msg_data       => l_msg_data,
42346                     p_data           => l_data,
42347                     p_msg_index_out  => l_msg_index_out);
42348                     x_msg_data := l_data;
42349                 END IF;
42350              raise FND_API.G_EXC_ERROR;
42351              END IF;
42352 
42353 -- I don't think the following code is needed. This case is impossible in case of OUTDENT
42354      IF l_update_new_child_rels = 'Y' -- AND p_action IN( 'OUTDENT' )
42355      THEN
42356         FOR cur_new_child_rec in cur_new_child(ref_elem_ver_id, src_seq_number) LOOP
42357             OPEN get_sub_tasks(p_task_version_id);
42358             FETCH get_sub_tasks into l_dummy;
42359             IF (get_sub_tasks%NOTFOUND) THEN
42360               l_new_weighting := 100;
42361             ELSE
42362               l_new_weighting := 0;
42363             END IF;
42364             CLOSE get_sub_tasks;
42365 
42366             --bug 4099488
42367             IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_task_version_id, cur_new_child_rec.object_id_to1) = 'N' THEN
42368               PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42369                                    p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
42370               raise FND_API.G_EXC_ERROR;
42371             END IF;
42372             --end bug 4099488
42373 
42374             PA_RELATIONSHIP_PVT.Update_Relationship
42375               (
42376               p_api_version                       => p_api_version
42377              ,p_init_msg_list                     => p_init_msg_list
42378              ,p_commit                            => p_commit
42379              ,p_validate_only                     => p_validate_only
42380              ,p_validation_level                  => p_validation_level
42381              ,p_calling_module                    => p_calling_module
42382              ,p_debug_mode                        => p_debug_mode
42383              ,p_max_msg_count                     => p_max_msg_count
42384              ,p_object_relationship_id            => cur_new_child_rec.object_relationship_id
42385              ,p_project_id_from                   => null
42386              ,p_structure_id_from                 => null
42387              ,p_structure_version_id_from         => null
42388              ,p_task_version_id_from              => p_task_version_id
42389              ,p_project_id_to                     => null
42390              ,p_structure_id_to                   => null
42391              ,p_structure_version_id_to           => null
42392              ,p_task_version_id_to                => cur_new_child_rec.object_id_to1
42393              ,p_relationship_type                 => 'S'
42394              ,p_relationship_subtype              => 'TASK_TO_TASK'
42395              ,p_weighting_percentage              => l_new_weighting
42396              ,p_record_version_number             => cur_new_child_rec.record_version_number
42397              ,x_return_status                     => x_return_status
42398              ,x_msg_count                         => x_msg_count
42399              ,x_msg_data                          => x_msg_data
42400             );
42401 
42402              IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
42403                 x_msg_count := FND_MSG_PUB.count_msg;
42404                 IF x_msg_count = 1 then
42405                    pa_interface_utils_pub.get_messages
42406                    (p_encoded        => FND_API.G_TRUE,
42407                     p_msg_index      => 1,
42408                     p_msg_count      => l_msg_count,
42409                     p_msg_data       => l_msg_data,
42410                     p_data           => l_data,
42411                     p_msg_index_out  => l_msg_index_out);
42412                     x_msg_data := l_data;
42413                 END IF;
42414              raise FND_API.G_EXC_ERROR;
42415              END IF;
42416 
42417         END LOOP;
42418      END IF;
42419 
42420 --for task weighting
42421      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
42422        p_task_version_id => l_old_parent_id
42423       ,x_return_status => l_return_status
42424       ,x_msg_count => l_msg_count
42425       ,x_msg_data => l_msg_data
42426      );
42427 
42428      x_msg_count := FND_MSG_PUB.count_msg;
42429      IF x_msg_count = 1 then
42430        pa_interface_utils_pub.get_messages
42431         (p_encoded        => FND_API.G_TRUE,
42432          p_msg_index      => 1,
42433          p_msg_count      => l_msg_count,
42434          p_msg_data       => l_msg_data,
42435          p_data           => l_data,
42436          p_msg_index_out  => l_msg_index_out);
42437          x_msg_data := l_data;
42438       END IF;
42439 
42440      --bug 2673570
42441      PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
42442        p_task_version_id => p_task_version_id
42443       ,x_return_status => l_return_status
42444       ,x_msg_count => l_msg_count
42445       ,x_msg_data => l_msg_data
42446      );
42447 
42448      x_msg_count := FND_MSG_PUB.count_msg;
42449      IF x_msg_count = 1 then
42450        pa_interface_utils_pub.get_messages
42451         (p_encoded        => FND_API.G_TRUE,
42452          p_msg_index      => 1,
42453          p_msg_count      => l_msg_count,
42454          p_msg_data       => l_msg_data,
42455          p_data           => l_data,
42456          p_msg_index_out  => l_msg_index_out);
42457          x_msg_data := l_data;
42458       END IF;
42459      --bug 2673570
42460 --end changes for task weighting
42461 
42462 
42463 /*** End Update_task_version and Update_wbs_number code ***/
42464 
42465   SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
42466     FROM pa_proj_element_versions
42467    WHERE element_version_id =  ( Select parent_structure_version_id
42468                                    from pa_proj_element_versions
42469                                   where element_version_id = p_task_version_id )
42470      AND object_type = 'PA_STRUCTURES';
42471 
42472 
42473   --Do financial task check
42474   --If financial
42475   OPEN cur_struc_type( l_structure_id );
42476   FETCH cur_struc_type INTO l_dummy_char;
42477   IF cur_struc_type%FOUND
42478   THEN
42479       --If structure has any published versions.
42480       l_published_version := 'N';
42481       OPEN cur_pub_versions( l_structure_id, l_project_id );
42482       FETCH cur_pub_versions INTO l_published_version;
42483       CLOSE cur_pub_versions;
42484 
42485 
42486       l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
42487                                                      l_project_id);
42488       l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
42489                                                   l_project_id);
42490 
42491       l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --outdent in corresponding task in pa_tasks
42492 
42493       IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
42494          (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
42495 	 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
42496 	 THEN
42497 
42498           SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
42499             INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
42500             FROM PA_TASKS pt,
42501                  pa_proj_elem_ver_structure ppa,
42502                  PA_PROJ_ELEMENT_VERSIONS ppev
42503            WHERE ppev.element_version_id = p_task_version_id
42504              AND ppev.parent_structure_version_id = ppa.element_version_id
42505              AND ppev.project_id = ppa.project_id
42506              AND ppev.proj_element_id = pt.task_id;
42507 
42508           SELECT record_version_number, parent_task_id, wbs_level    --get old parent id for bug 2947492 (outdent )
42509                  ,top_task_id
42510             INTO l_task_record_version_number, l_old_parent_task_id, l_old_wbs_level
42511                  ,l_old_top_task_id
42512             FROM pa_tasks
42513            WHERE task_id = l_task_id
42514              AND project_id = l_project_id;
42515 
42516           PA_TASKS_MAINT_PUB.Edit_Task_Structure(
42517                          p_project_id                        => l_project_id
42518                         ,p_task_id                           => l_task_id
42519                         ,p_edit_mode                         => 'OUTDENT'
42520                         ,p_record_version_number             => l_task_record_version_number
42521                         ,p_wbs_record_version_number         => 1
42522                         ,x_return_status                     => l_return_status
42523                         ,x_msg_count                         => l_msg_count
42524                         ,x_msg_data                          => l_msg_data );
42525 
42526   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
42527                 x_msg_count := FND_MSG_PUB.count_msg;
42528                 IF x_msg_count = 1 then
42529                    pa_interface_utils_pub.get_messages
42530                    (p_encoded        => FND_API.G_TRUE,
42531                     p_msg_index      => 1,
42532                     p_msg_count      => l_msg_count,
42533                     p_msg_data       => l_msg_data,
42534                     p_data           => l_data,
42535                     p_msg_index_out  => l_msg_index_out);
42536                     x_msg_data := l_data;
42537                 END IF;
42538                 raise FND_API.G_EXC_ERROR;
42539              END IF;
42540 
42541             OPEN get_parent_task_id( l_task_id , l_project_id );
42542             FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
42543             CLOSE get_parent_task_id;
42544 
42545             --bug 2967204
42546             --Cannot move out of the current hierarchy
42547               IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
42548               THEN
42549                   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42550                                        p_msg_name => 'PA_CANT_CHANGE_PARENT');
42551                   raise FND_API.G_EXC_ERROR;
42552               END IF;
42553       END IF;
42554   END IF;
42555   CLOSE cur_struc_type;
42556 
42557 -- Added for date rollup; workplan only
42558 
42559   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
42560 
42561     -- Added for FP_M changes Bug 3305199 : Bhumesh
42562     If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
42563 
42564        PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
42565           p_structure_version_id => P_Structure_Version_ID
42566      ,p_dirty_flag           => 'Y'             --bug 3902282
42567      ,x_return_status        => x_return_status
42568      ,x_msg_count            => x_msg_count
42569      ,x_msg_data             => x_msg_data
42570        );
42571 
42572        IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
42573          x_msg_count := FND_MSG_PUB.count_msg;
42574          If x_msg_count = 1 then
42575            pa_interface_utils_pub.get_messages
42576            (p_encoded        => FND_API.G_TRUE,
42577             p_msg_index      => 1,
42578             p_msg_count      => l_msg_count,
42579             p_msg_data       => l_msg_data,
42580             p_data           => l_data,
42581             p_msg_index_out  => l_msg_index_out);
42582             x_msg_data := l_data;
42583          End If;
42584          raise FND_API.G_EXC_ERROR;
42585        End If;
42586     End If;
42587     -- End of FP_M changes
42588 
42589     l_tasks_ver_ids.extend;
42590     l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
42591 
42592 --added for task status rollup
42593     IF (l_rollup_task_id IS NULL) THEN
42594       l_rollup_task_id := p_task_version_id;
42595     END IF;
42596 
42597     PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
42598                        p_commit => FND_API.G_FALSE,
42599                        p_element_versions => l_tasks_ver_ids,
42600                        x_return_status => l_return_status,
42601                        x_msg_count => l_msg_count,
42602                        x_msg_data => l_msg_data);
42603 
42604      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42605        x_msg_count := FND_MSG_PUB.count_msg;
42606        if x_msg_count = 1 then
42607          pa_interface_utils_pub.get_messages
42608          (p_encoded        => FND_API.G_TRUE,
42609           p_msg_index      => 1,
42610           p_msg_count      => l_msg_count,
42611           p_msg_data       => l_msg_data,
42612           p_data           => l_data,
42613           p_msg_index_out  => l_msg_index_out);
42614           x_msg_data := l_data;
42615        end if;
42616        raise FND_API.G_EXC_ERROR;
42617      end if;
42618 
42619 --if versioning is off, rollup.
42620      IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
42621        PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
42622                   p_structure_version_id => p_structure_version_id
42623                  ,p_element_version_id => l_rollup_task_id
42624                  ,x_return_status => l_return_status
42625                  ,x_msg_count => l_msg_count
42626                  ,x_msg_data => l_msg_data
42627        );
42628 
42629        if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42630          x_msg_count := FND_MSG_PUB.count_msg;
42631          if x_msg_count = 1 then
42632            pa_interface_utils_pub.get_messages
42633            (p_encoded        => FND_API.G_TRUE,
42634             p_msg_index      => 1,
42635             p_msg_count      => l_msg_count,
42636             p_msg_data       => l_msg_data,
42637             p_data           => l_data,
42638             p_msg_index_out  => l_msg_index_out);
42639             x_msg_data := l_data;
42640          end if;
42641          raise FND_API.G_EXC_ERROR;
42642        end if;
42643      END IF;
42644 
42645   END IF;
42646 
42647 --bug 3010538  ( outdent )
42648 --bug 3053281 --set flag if not (manual and workplan only)
42649 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
42650 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
42651   --3035902: process update flag changes
42652   OPEN get_task_type_id(src_proj_element_id);
42653   FETCH get_task_type_id INTO l_task_type_id;
42654   CLOSE get_task_type_id;
42655 
42656   --set update process flag if necessary;
42657   IF (l_wp_process_flag = 'N') THEN
42658     --may need to update process flag
42659     IF ((l_shared = 'N') AND
42660         (l_wp_type = 'Y') AND
42661         (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
42662         (l_weighting_basis_code <> 'MANUAL'))
42663     THEN
42664       --split and workplan; only update if progressable task added
42665       l_wp_process_flag := 'Y';
42666     ELSIF ((l_shared = 'N') AND
42667            (l_wp_type = 'N')) THEN
42668       --split and financial; update
42669       l_wp_process_flag := 'Y';
42670     ELSIF (l_shared = 'Y') THEN
42671       l_wp_process_flag := 'Y';
42672     END IF;
42673   END IF;
42674 
42675    PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
42676    (
42677       p_calling_context       => 'SELF_SERVICE'
42678      ,p_project_id            => p_project_id
42679      ,p_structure_version_id  => p_structure_version_id
42680      ,p_update_wbs_flag       => 'Y'
42681      ,x_return_status         => l_return_status
42682      ,x_msg_count             => l_msg_count
42683      ,x_msg_data              => l_msg_data);
42684 
42685    if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42686      x_msg_count := FND_MSG_PUB.count_msg;
42687      if x_msg_count = 1 then
42688        pa_interface_utils_pub.get_messages
42689        (p_encoded        => FND_API.G_TRUE,
42690         p_msg_index      => 1,
42691         p_msg_count      => l_msg_count,
42692         p_msg_data       => l_msg_data,
42693         p_data           => l_data,
42694         p_msg_index_out  => l_msg_index_out);
42695         x_msg_data := l_data;
42696      end if;
42697      raise FND_API.G_EXC_ERROR;
42698    end if;
42699   --3035902: end process update flag changes
42700 
42701   --ideally the following calls should have been cached. but due to time constraints
42702   --we need to write the code this way in multiple places.
42703   IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
42704    THEN
42705        IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and  l_published_version = 'N' ) THEN
42706 
42707        --Outdent
42708        pa_fp_refresh_elements_pub.set_process_flag_proj(
42709              p_project_id               => p_project_id
42710             ,p_request_id               => null
42711             ,p_process_code             => null
42712             ,p_refresh_required_flag    => 'Y'
42713             ,x_return_status            => l_return_status
42714             ,x_msg_count                => l_msg_count
42715             ,x_msg_data                 => l_msg_data );
42716 
42717         if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42718            x_msg_count := FND_MSG_PUB.count_msg;
42719            if x_msg_count = 1 then
42720              pa_interface_utils_pub.get_messages
42721             (p_encoded        => FND_API.G_TRUE,
42722              p_msg_index      => 1,
42723              p_msg_count      => l_msg_count,
42724              p_msg_data       => l_msg_data,
42725              p_data           => l_data,
42726              p_msg_index_out  => l_msg_index_out);
42727              x_msg_data := l_data;
42728            end if;
42729            raise FND_API.G_EXC_ERROR;
42730         end if;
42731       END IF;
42732    END IF;
42733    --check the task is a lowest task again and check whehter its no more a lowest task.
42734   l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
42735 
42736   IF l_lowest_task_flag1 = 'Y' AND
42737      l_lowest_task_flag2 = 'N'
42738   THEN
42739      IF l_wp_type = 'Y'
42740      THEN
42741      --now call call delete planning for task version id.
42742        l_task_ver_ids2.extend(1); /* Venky */
42743        l_task_ver_ids2(1) := p_task_version_id;
42744        /*Smukka Bug No. 3474141 Date 03/01/2004                                                    */
42745        /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block        */
42746        DECLARE
42747            --p1 bug 3888432
42748            l_assign_ids   SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
42749            CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
42750              SELECT resource_assignment_id
42751                FROM pa_resource_assignments
42752               WHERE wbs_element_Version_id = c_task_ver_id
42753                 AND ta_display_flag = 'N';
42754            l_assign_id    NUMBER := NULL;
42755        BEGIN
42756            OPEN get_assignment_id(p_task_version_id);
42757            FETCH get_assignment_id into l_assign_id;
42758            CLOSE get_assignment_id;
42759 
42760            IF (l_assign_id IS NOT NULL) THEN
42761              l_assign_ids.extend(1);
42762              l_assign_ids(1) := l_assign_id;
42763              pa_fp_planning_transaction_pub.delete_planning_transactions
42764              (
42765              p_context                      => 'WORKPLAN'
42766             ,p_task_or_res                  => 'ASSIGNMENT'
42767 --          ,p_element_version_id_tbl       => l_task_ver_ids2
42768 --          ,p_maintain_reporting_lines     => 'Y'
42769             ,p_resource_assignment_tbl => l_assign_ids
42770             ,x_return_status                => l_return_status
42771             ,x_msg_count                    => l_msg_count
42772             ,x_msg_data                     => l_msg_data
42773              );
42774            END IF;
42775        EXCEPTION
42776            WHEN OTHERS then
42777                 fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
42778                                         p_procedure_name => 'BULK_OUTDENT_TASKS_LITE',
42779                                         p_error_text     => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
42780            RAISE FND_API.G_EXC_ERROR;
42781        END;
42782      if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42783        x_msg_count := FND_MSG_PUB.count_msg;
42784        if x_msg_count = 1 then
42785          pa_interface_utils_pub.get_messages
42786          (p_encoded        => FND_API.G_TRUE,
42787           p_msg_index      => 1,
42788           p_msg_count      => l_msg_count,
42789           p_msg_data       => l_msg_data,
42790           p_data           => l_data,
42791           p_msg_index_out  => l_msg_index_out);
42792           x_msg_data := l_data;
42793        end if;
42794        raise FND_API.G_EXC_ERROR;
42795      end if;
42796      END IF;  --<<l_wp_type>>
42797   END IF; --<<l_lowest_task_flag1>>
42798 --bug 3301192
42799 
42800   --bug 4149392
42801   PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
42802   --end bug 4149392
42803 
42804   x_return_status := FND_API.G_RET_STS_SUCCESS;
42805 
42806   IF (p_commit = FND_API.G_TRUE) THEN
42807     COMMIT;
42808   END IF;
42809 
42810   IF (p_debug_mode = 'Y') THEN
42811     pa_debug.debug('PA_PROJECT_PUB.BULK_OUTDENT_TASKS_LITE END');
42812   END IF;
42813 
42814   		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42815 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
42816 		END IF;
42817 
42818 EXCEPTION
42819   when FND_API.G_EXC_ERROR then
42820     if p_commit = FND_API.G_TRUE then
42821       rollback to BULK_OUTDENT_TASKS_LITE;
42822     end if;
42823 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42824 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
42825 		END IF;
42826 		x_return_status := FND_API.G_RET_STS_ERROR;
42827 	    FND_MSG_PUB.Count_And_Get
42828         (   p_count    =>  x_msg_count  ,
42829             p_data    =>  x_msg_data  );
42830   when FND_API.G_EXC_UNEXPECTED_ERROR then
42831     if p_commit = FND_API.G_TRUE then
42832       rollback to BULK_OUTDENT_TASKS_LITE;
42833     end if;
42834     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
42835     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
42836                             p_procedure_name => 'BULK_OUTDENT_TASKS_LITE',
42837                             p_error_text     => SUBSTRB(SQLERRM,1,240));
42838 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42839 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
42840 		END IF;
42841   when OTHERS then
42842     if p_commit = FND_API.G_TRUE then
42843       rollback to BULK_OUTDENT_TASKS_LITE;
42844     end if;
42845     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
42846     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
42847                             p_procedure_name => 'BULK_OUTDENT_TASKS_LITE',
42848                             p_error_text     => SUBSTRB(SQLERRM,1,240));
42849 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42850 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
42851 		END IF;
42852 		FND_MSG_PUB.Count_And_Get
42853         (   p_count    =>  x_msg_count  ,
42854             p_data    =>  x_msg_data  );
42855     raise;
42856 
42857 END BULK_OUTDENT_TASKS_LITE;
42858 
42859 -- Added new wrapper API for 14556729
42860 PROCEDURE Bulk_Delete_Task ( p_api_version_number    IN  NUMBER     := 1.0
42861                        ,p_commit                IN  VARCHAR2   := FND_API.G_FALSE
42862                        ,p_init_msg_list         IN   VARCHAR2  := FND_API.G_FALSE
42863                        ,p_msg_count             OUT NOCOPY NUMBER
42864                        ,p_msg_data              OUT NOCOPY VARCHAR2
42865                        ,p_return_status         OUT NOCOPY VARCHAR2
42866                        ,p_pm_product_code       IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42867                        ,p_pm_project_reference  IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42868                        ,p_pa_project_id         IN   NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
42869                        ,p_pm_task_reference     IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42870                        ,p_pa_task_id            IN   NUMBER    := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
42871                        ,p_cascaded_delete_flag  IN   VARCHAR2  := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42872                        ,p_project_id            OUT NOCOPY NUMBER
42873                        ,p_task_id               OUT NOCOPY NUMBER
42874                        ,p_task_version_id       IN   NUMBER     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
42875                        ,p_structure_type        IN   VARCHAR2   := 'FINANCIAL'
42876                        ,p_process_mode          IN   VARCHAR2   := 'ONLINE'
42877 					   ,p_structure_updates_flag IN  VARCHAR2   := 'Y'
42878  )
42879 IS
42880 l_structure_type VARCHAR2(2000);
42881 l_process_mode   VARCHAR2(2000);
42882 l_structure_version_id NUMBER;
42883 message varchar2(2000);
42884 t_str varchar2(1);
42885 BEGIN
42886 
42887 	    /* Added below block to ensure that the new API's are controlled by Dev*/
42888 	begin
42889 			select 'x' into  t_str
42890 			from pji_system_parameters
42891 			where name = 'BULK_LITE'
42892 			and value = 'Y';
42893 
42894 	exception
42895 		when no_data_found  then
42896 		    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42897                               p_msg_name => 'PA_LITE_API_CANT_USE');
42898             RAISE FND_API.G_EXC_ERROR;
42899 		when others  then
42900 			raise;
42901 	end;
42902 
42903 	l_structure_type:=p_structure_type;
42904 	l_process_mode:=p_process_mode;
42905 
42906 	IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_pa_project_id),' ') <> 'SHARE_FULL'
42907        OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id),'N') = 'Y' THEN
42908          PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42909                               p_msg_name => 'PA_CANT_USE_LITE_API');
42910          RAISE FND_API.G_EXC_ERROR;
42911     END IF;
42912 
42913 	PA_PROJECT_PUB.G_PROJECT_ID:=p_pa_project_id;
42914 	l_structure_version_id :=PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_pa_project_id);
42915 
42916 			-- Set the G_ROLLUP_FLAG based on profile options
42917 	PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
42918 	IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42919 			PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_pa_project_id,'DELETE',p_msg_data,p_return_status);
42920 			IF p_return_status <> 'S'
42921 			THEN
42922 			    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42923                               p_msg_name => p_msg_data);
42924 				RAISE  FND_API.G_EXC_ERROR;
42925 			ELSE
42926 				PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_pa_project_id,l_structure_version_id,'DELETE');
42927 			    PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_pa_project_id,p_pa_task_id,l_structure_version_id,'DELETE');
42928 			END IF;
42929 	END IF;
42930 
42931 
42932 	-- Call the existing API
42933 	DELETE_TASK(
42934 		 p_api_version_number
42935 		,p_commit
42936 		,p_init_msg_list
42937 		,p_msg_count
42938 		,p_msg_data
42939 		,p_return_status
42940 		,p_pm_product_code
42941 		,p_pm_project_reference
42942 		,p_pa_project_id
42943 		,p_pm_task_reference
42944 		,p_pa_task_id
42945 		,p_cascaded_delete_flag
42946 		,p_project_id
42947 		,p_task_id
42948 		,p_task_version_id
42949 		,l_structure_type
42950 		,l_process_mode
42951 		,p_structure_updates_flag
42952 		);
42953 
42954 
42955 	PA_PROJECT_PUB.G_PROJECT_ID:=NULL;
42956 
42957 	IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42958 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_pa_project_id);
42959 	END IF;
42960 
42961 EXCEPTION
42962 		WHEN FND_API.G_EXC_ERROR THEN
42963 			p_return_status := FND_API.G_RET_STS_ERROR ;
42964 			FND_MSG_PUB.Count_And_Get
42965 			(   p_count    =>  p_msg_count  ,
42966 				p_data    =>  p_msg_data  );
42967 		    IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42968 				PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_pa_project_id);
42969 		    END IF;
42970 
42971         WHEN OTHERS THEN
42972         p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
42973 		p_msg_count := FND_MSG_PUB.count_msg;
42974         p_project_id := NULL ;
42975         p_task_id := NULL;
42976 		PA_PROJECT_PUB.G_PROJECT_ID:=NULL;
42977 		IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42978 			PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_pa_project_id);
42979 		END IF;
42980 		IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
42981             FND_MSG_PUB.add_exc_msg
42982         ( p_pkg_name    => G_PKG_NAME
42983         , p_procedure_name  => 'Bulk_Delete_Task'  );
42984         END IF;
42985 		FND_MSG_PUB.Count_And_Get
42986         (   p_count    =>  p_msg_count  ,
42987             p_data    =>  p_msg_data  );
42988 END Bulk_Delete_Task;
42989 
42990 procedure STRUCTURE_ROLLUP (
42991 			 p_api_version                IN    NUMBER   :=1.0,
42992 			 p_init_msg_list              IN    VARCHAR2 :=FND_API.G_TRUE,
42993 			 p_commit                     IN    VARCHAR2 :=FND_API.G_FALSE,
42994 			 p_validate_only              IN    VARCHAR2 :=FND_API.G_TRUE,
42995 			 p_validation_level           IN    NUMBER   :=FND_API.G_VALID_LEVEL_FULL,
42996 			 p_calling_module             IN    VARCHAR2 :='SELF_SERVICE',
42997 			 p_debug_mode                 IN    VARCHAR2 :='N',
42998 			 p_max_msg_count              IN    NUMBER   :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
42999 			 p_structure_version_id       IN    NUMBER   := NULL,
43000 			 p_project_id                 IN    NUMBER   := NULL,
43001 			 p_as_of_date                 IN    DATE     := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
43002 			 p_structure_type             IN    VARCHAR2 := 'WORKPLAN',
43003 			 p_entire_structure_flag      IN    VARCHAR2 := 'Y',
43004 			 x_return_status              OUT   NOCOPY VARCHAR2,
43005 			 x_msg_count                  OUT   NOCOPY NUMBER,
43006 			 x_msg_data                   OUT   NOCOPY VARCHAR2)
43007 IS
43008   l_structure_version_id   pa_proj_elem_ver_structure.element_version_id%TYPE;
43009   l_rollup_as_of_date      date;
43010   l_msg_count              NUMBER;
43011   l_msg_data               VARCHAR2(2000);
43012   l_return_status          VARCHAR2(1);
43013   l_api_version            CONSTANT NUMBER      := 1.0;
43014   l_api_name               CONSTANT VARCHAR(30) := 'STRUCTURE_ROLLUP';
43015   l_rollup_method          pa_proj_progress_attr.task_weight_basis_code%TYPE;
43016 
43017   CURSOR c_get_task_weight_method(c_project_id NUMBER, c_structure_type VARCHAR2)
43018   IS
43019   SELECT task_weight_basis_code
43020   FROM pa_proj_progress_attr
43021   WHERE project_id = c_project_id
43022   AND structure_type = c_structure_type;
43023   message varchar2(2000);
43024   t_str varchar2(1);
43025 
43026 BEGIN
43027   pa_debug.init_err_stack ('PA_PROJECT_PUB.STRUCTURE_ROLLUP');
43028 
43029   IF (p_debug_mode = 'Y') THEN
43030     pa_debug.debug('PA_PROJECT_PUB.STRUCTURE_ROLLUP begin');
43031   END IF;
43032 
43033   IF (p_commit = FND_API.G_TRUE) THEN
43034     savepoint STRUCTURE_ROLLUP;
43035   END IF;
43036   /* Added below block to ensure that the new API's are controlled by Dev*/
43037 	begin
43038 			select 'x' into  t_str
43039 			from pji_system_parameters
43040 			where name = 'BULK_LITE'
43041 			and value = 'Y';
43042 
43043 	exception
43044 		when no_data_found  then
43045 		    PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43046                               p_msg_name => 'PA_LITE_API_CANT_USE');
43047             RAISE FND_API.G_EXC_ERROR;
43048 		when others  then
43049 
43050 			raise;
43051 	end;
43052 
43053 
43054   IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
43055     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
43056   END IF;
43057 
43058   IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE))  THEN
43059     FND_MSG_PUB.initialize;
43060   END IF;
43061 
43062   If p_as_of_date IS NULL OR p_as_of_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
43063   then
43064       l_rollup_as_of_date := sysdate;
43065   else
43066       l_rollup_as_of_date := p_as_of_date;
43067   end if;
43068 
43069   IF p_project_id is not null and p_structure_version_id is not null
43070   then
43071      PA_TASK_PVT1.Defer_Calc_Task_Weigthage (
43072 		 p_init_msg_list             => p_init_msg_list
43073 		,p_commit                    => FND_API.G_FALSE
43074 		,p_project_id                => p_project_id
43075 		,p_parent_struct_ver_id      => p_structure_version_id
43076 		,x_return_status             => l_return_status
43077 		,x_msg_count                 => l_msg_count
43078 		,x_msg_data                  => l_msg_data
43079 	 );
43080 	 IF l_return_status <> 'S' THEN
43081 	   PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43082 						   p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43083 	   RAISE FND_API.G_EXC_ERROR;
43084 	 END IF;
43085 
43086 	 PA_PROJECT_STRUCTURE_PVT1.REFRESH_STRUCTURE_VERSION
43087        ( p_project_id                    => p_project_id
43088         ,p_structure_version_id          => p_structure_version_id
43089         ,x_return_status                 => l_return_status
43090         ,x_msg_count                     => l_msg_count
43091         ,x_msg_data                      => l_msg_data
43092        );
43093 	 IF l_return_status <> 'S' THEN
43094           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43095                                p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43096           RAISE FND_API.G_EXC_ERROR;
43097 	 END IF;
43098 
43099      OPEN c_get_task_weight_method(p_project_id, p_structure_type);
43100      FETCH c_get_task_weight_method INTO l_rollup_method;
43101      CLOSE c_get_task_weight_method;
43102 
43103 	 PA_PROGRESS_PVT.DEFER_ROLLUP_PVT(
43104                  p_init_msg_list             => p_init_msg_list
43105                 ,p_commit                    => FND_API.G_FALSE
43106                 ,p_calling_module            => 'AMG'
43107                 ,p_project_id                => p_project_id
43108                 ,p_structure_version_id      => p_structure_version_id
43109                 ,p_as_of_date                => trunc(l_rollup_as_of_date)
43110                 ,p_rollup_entire_wbs         => p_entire_structure_flag
43111                 ,p_structure_type            => p_structure_type
43112 				,p_wp_rollup_method          => l_rollup_method
43113 				,p_fin_rollup_method         => l_rollup_method
43114                 ,x_return_status             => l_return_status
43115                 ,x_msg_count                 => l_msg_count
43116                 ,x_msg_data                  => l_msg_data);
43117 
43118 	 IF l_return_status <> 'S' THEN
43119           PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43120                                p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43121           RAISE FND_API.G_EXC_ERROR;
43122      END IF;
43123 
43124 	 UPDATE PA_PROJ_ELEMENT_VERSIONS SET DEFER_CODE=null where project_id=p_project_id
43125 	 and DEFER_CODE is not null AND parent_structure_version_id=p_structure_version_id;
43126 	 --Added for bug 16444969
43127          begin
43128                 delete from PA_PJI_PROJ_EVENTS_LOG where event_type = 'DEFER_ROLLUP'
43129                 and event_object = p_project_id and attribute4=p_structure_version_id;
43130          EXCEPTION
43131          when OTHERS then
43132                 null;
43133          end;
43134 
43135 	 IF(p_commit=FND_API.G_TRUE) THEN
43136 			commit;
43137 	 END IF;
43138 
43139   else
43140       for i in (select event_object, event_id, attribute4 from PA_PJI_PROJ_EVENTS_LOG where event_type = 'DEFER_ROLLUP')
43141       loop
43142           PA_TASK_PVT1.Defer_Calc_Task_Weigthage (
43143 			 p_init_msg_list             => p_init_msg_list
43144 			,p_commit                    => FND_API.G_FALSE
43145 			,p_project_id                => i.event_object
43146 			,p_parent_struct_ver_id      => i.attribute4
43147 			,x_return_status             => l_return_status
43148 			,x_msg_count                 => l_msg_count
43149 			,x_msg_data                  => l_msg_data
43150 		   );
43151 		   IF l_return_status <> 'S' THEN
43152 			  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43153 								   p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43154 			  RAISE FND_API.G_EXC_ERROR;
43155 		   END IF;
43156 
43157 		 PA_PROJECT_STRUCTURE_PVT1.REFRESH_STRUCTURE_VERSION
43158 		 ( p_project_id                    => i.event_object
43159 		  ,p_structure_version_id          => i.attribute4
43160 		  ,x_return_status                 => l_return_status
43161 		  ,x_msg_count                     => l_msg_count
43162 		  ,x_msg_data                      => l_msg_data
43163 		  );
43164 		  IF l_return_status <> 'S' THEN
43165 			  PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43166 								   p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43167 			  RAISE FND_API.G_EXC_ERROR;
43168 		  END IF;
43169 
43170 	      OPEN c_get_task_weight_method(i.event_object, p_structure_type);
43171           FETCH c_get_task_weight_method INTO l_rollup_method;
43172           CLOSE c_get_task_weight_method;
43173 
43174 		  PA_PROGRESS_PVT.DEFER_ROLLUP_PVT(
43175                  p_init_msg_list             => p_init_msg_list
43176                 ,p_commit                    => FND_API.G_FALSE
43177                 ,p_calling_module            => 'AMG'
43178                 ,p_project_id                => i.event_object
43179                 ,p_structure_version_id      => i.attribute4
43180                 ,p_as_of_date                => trunc(l_rollup_as_of_date)
43181                 ,p_rollup_entire_wbs         => p_entire_structure_flag
43182                 ,p_structure_type            => p_structure_type
43183 				,p_wp_rollup_method          => l_rollup_method
43184 				,p_fin_rollup_method         => l_rollup_method
43185                 ,x_return_status             => l_return_status
43186                 ,x_msg_count                 => l_msg_count
43187                 ,x_msg_data                  => l_msg_data);
43188 
43189 		 IF l_return_status <> 'S' THEN
43190              PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43191                                p_msg_name => 'PA_ERROR_REFRESHING_STRUCTURE');
43192              RAISE FND_API.G_EXC_ERROR;
43193 		 END IF;
43194 
43195 		 UPDATE PA_PROJ_ELEMENT_VERSIONS SET DEFER_CODE=null where project_id=i.event_object
43196 	     and DEFER_CODE is not null AND parent_structure_version_id=i.attribute4;
43197 
43198 
43199 
43200 
43201 		   delete from PA_PJI_PROJ_EVENTS_LOG where event_type = 'DEFER_ROLLUP' and event_id = i.event_id
43202 		   and event_object = i.event_object;
43203 
43204 		   IF(p_commit=FND_API.G_TRUE) THEN
43205 				commit;
43206 				SAVEPOINT STRUCTURE_ROLLUP;
43207 		   END IF;
43208 
43209       end loop;
43210   end if;
43211   x_return_status := FND_API.G_RET_STS_SUCCESS;
43212   IF (p_debug_mode = 'Y') THEN
43213     pa_debug.debug('PA_PROJECT_PUB.STRUCTURE_ROLLUP END');
43214   END IF;
43215       if p_commit = FND_API.G_TRUE then
43216 		COMMIT;
43217     end if;
43218 EXCEPTION
43219   when FND_API.G_EXC_ERROR then
43220     if p_commit = FND_API.G_TRUE then
43221       rollback to STRUCTURE_ROLLUP;
43222     end if;
43223     x_return_status := FND_API.G_RET_STS_ERROR;
43224 	FND_MSG_PUB.Count_And_Get
43225         (   p_count    =>  x_msg_count  ,
43226             p_data    =>  x_msg_data  );
43227   when FND_API.G_EXC_UNEXPECTED_ERROR then
43228     if p_commit = FND_API.G_TRUE then
43229       rollback to STRUCTURE_ROLLUP;
43230     end if;
43231     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
43232     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
43233                             p_procedure_name => 'STRUCTURE_ROLLUP',
43234                             p_error_text     => SUBSTRB(SQLERRM,1,240));
43235   when OTHERS then
43236     if p_commit = FND_API.G_TRUE then
43237       rollback to STRUCTURE_ROLLUP;
43238     end if;
43239     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
43240     fnd_msg_pub.add_exc_msg(p_pkg_name       => 'PA_PROJECT_PUB',
43241                             p_procedure_name => 'STRUCTURE_ROLLUP',
43242                             p_error_text     => SUBSTRB(SQLERRM,1,240));
43243 	FND_MSG_PUB.Count_And_Get
43244         (   p_count    =>  x_msg_count  ,
43245             p_data    =>  x_msg_data  );
43246     --raise; /*commented for bug#13923366*/
43247 end STRUCTURE_ROLLUP;
43248 
43249 --Added below 2 new API for CBS RBS 16627046
43250 	/*
43251 This api will be  used to add multiple cost codes to multiple tasks for a single project.
43252 We need to ensure p_task_cost_code_in is passed with either proj_element_id or element number
43253 and cost_code / cbs_element_id to add the same to corresponding element.
43254 p_structure_type should be either WORKPLAN or FINANCIAL.
43255  * @param p_api_version_number API standard: version number
43256  * @rep:paraminfo {@rep:required}
43257  * @param p_commit API standard (default = F): indicates if the transaction will be committed
43258  * @rep:paraminfo {@rep:precision 1}
43259  * @param p_init_msg_list API standard (default = F): indicates if message stack will be initialized
43260  * @rep:paraminfo {@rep:precision 1}
43261  * @param x_msg_count API standard: number of error messages
43262  * @rep:paraminfo {@rep:required}
43263  * @param x_msg_data API standard: error message
43264  * @rep:paraminfo {@rep:precision 2000} {@rep:required}
43265  * @param x_return_status API standard: return status of the API (success/failure/unexpected error)
43266  * @rep:paraminfo {@rep:precision 1}
43267  * @param p_pm_product_code The identifier of the external project management system
43268  * from which the project is imported
43269  * @param p_pm_project_reference The reference code that uniquely identifies the project in the external system
43270  * @param p_pa_project_id The unique identifier of the project
43271  * @rep:paraminfo {@rep:required}
43272   * @param p_structure_type represents the structure type workplan or financial
43273  * @rep:paraminfo {@rep:required}
43274    * @param p_task_cost_code_in is record type which hold task and cost code details
43275  * @rep:paraminfo {@rep:required}
43276  */
43277 
43278 PROCEDURE ADD_COST_CODE_TO_TASK (
43279       p_api_version                     IN   NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
43280     , p_init_msg_list                   IN   VARCHAR2         := FND_API.G_FALSE
43281     , p_commit                          IN   VARCHAR2         := FND_API.G_FALSE
43282     , p_pa_project_id           				IN   NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
43283     , p_pm_product_code         				IN   VARCHAR2         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43284  		, p_pm_project_reference        		IN   VARCHAR2         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43285  		, p_task_cost_code_in               IN   TASK_COST_CODE_TBL
43286  		, p_structure_type                  IN   VARCHAR2         := 'FINANCIAL'
43287     , x_msg_count                       OUT  NOCOPY  NUMBER
43288     , x_msg_data                        OUT  NOCOPY VARCHAR2
43289     , x_return_status                   OUT  NOCOPY VARCHAR2
43290      )
43291 
43292 IS
43293 l_return_status varchar2(100);
43294 
43295 l_debug_mode varchar2(1) :='N';
43296 	l_Proj_Element_Id_tbl    	SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43297 	l_Cbs_Element_Id_tbl		SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43298 
43299 	l_project_id Number :=p_pa_project_id;
43300 	l_cbs_enabled_flag varchar2(1) :='N';
43301 	l_count Number :=0;
43302 
43303 Cursor C1(c_proj_id Number) IS
43304 Select NVL(CBS_ENABLE_FLAG,'N')
43305 FROM PA_PROJECTS_ALL
43306 WHERE PROJECT_ID=c_proj_id;
43307 
43308 Cursor C2(c_proj_id Number , c_number varchar2) IS
43309 Select proj_element_id
43310 From pa_proj_elements
43311 Where project_id=c_proj_id
43312 and  element_number=c_number;
43313 
43314 Cursor C3(c_proj_id Number , c_number varchar2) IS
43315 Select Task_id
43316 From pa_Tasks
43317 Where project_id=c_proj_id
43318 and  task_number=c_number;
43319 
43320 Cursor check_task_exists_wp(c_proj_id Number ,c_task_id Number) IS
43321 Select Count(1)
43322 From pa_proj_elements
43323 Where project_id=c_proj_id
43324 and  proj_element_id=c_task_id;
43325 
43326 Cursor check_task_exists_fp(c_proj_id Number ,c_task_id Number) IS
43327 Select Count(1)
43328 From pa_Tasks
43329 Where project_id=c_proj_id
43330 and  task_id=c_task_id;
43331 
43332 Cursor Check_cost_code_valid(c_proj_id Number ,c_cbs_lem_id Number) IS
43333 SELECT COUNT(1)
43334 FROM PA_PROJECTS_ALL PA,PA_RBS_ELEMENTS PRE
43335 WHERE PA.CBS_VERSION_ID=PRE.RBS_VERSION_ID
43336 AND PA.PROJECT_ID=c_proj_id
43337 AND PRE.RBS_ELEMENT_ID=c_cbs_lem_id;
43338 
43339 l_task_cost_code_in TASK_COST_CODE_TBL := p_task_cost_code_in;
43340 
43341 
43342 duplicate Varchar2(1);
43343 j Number;
43344 counter Number;
43345 lp_Proj_Element_Id_tbl    	SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43346 lp_Cbs_Element_Id_tbl		SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43347 
43348 
43349 
43350 
43351 BEGIN
43352 	  pa_debug.init_err_stack ('PA_PROJECT_PUB.ADD_COST_CODE_TO_TASK');
43353 
43354 	  IF (l_debug_mode = 'Y') THEN
43355 		pa_debug.debug('PA_PROJECT_PUB.ADD_COST_CODE_TO_TASK begin');
43356 	  END IF;
43357 	IF p_pa_project_id is not null then
43358 			l_project_id:=p_pa_project_id;
43359 	ELSE
43360 		PA_PROJECT_PVT.Convert_pm_projref_to_id
43361 			(        p_pm_project_reference =>      p_pm_project_reference
43362 					 ,  p_pa_project_id     =>      p_pa_project_id
43363 					 ,  p_out_project_id    =>      l_project_id
43364 					 ,  p_return_status     =>      l_return_status
43365 			);
43366 	END IF;
43367 
43368 	OPEN c1(l_project_id);
43369 	Fetch c1 into l_cbs_enabled_flag;
43370 	CLOSE C1;
43371 
43372 	If l_cbs_enabled_flag <> 'Y' THEN
43373 		PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43374 							,p_msg_name       => 'PA_CBS_PRJ_NOT_CBS'
43375 							);
43376 		x_return_status := FND_API.G_RET_STS_ERROR;
43377 		RAISE FND_API.G_EXC_ERROR;
43378 
43379 	END IF;
43380 
43381 	  if p_task_cost_code_in.count > 0 then
43382 		IF (p_commit = FND_API.G_TRUE) THEN
43383 			savepoint ADD_COST_CODE_TO_TASK;
43384 		END IF;
43385 
43386 		-- Add validations here
43387 		--l_task_cost_code_in := p_task_cost_code_in MULTISET UNION DISTINCT p_task_cost_code_in;
43388 
43389 		  for i in	p_task_cost_code_in.first..p_task_cost_code_in.last  loop
43390 				l_Proj_Element_Id_tbl.extend;
43391 				l_Cbs_Element_Id_tbl.extend;
43392 
43393 				l_Proj_Element_Id_tbl(i) := p_task_cost_code_in(i).pa_task_id;
43394 				l_Cbs_Element_Id_tbl(i) :=p_task_cost_code_in(i).cbs_element_id;
43395 
43396 						IF p_task_cost_code_in(i).cbs_element_id IS NULL OR
43397 							   p_task_cost_code_in(i).cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
43398 
43399 							   l_Cbs_Element_Id_tbl(i) := PA_ALTERNATE_TASK_PVT.convert_cost_code_to_id(
43400 													 p_task_cost_code_in(i).cost_code ,p_pa_project_id );
43401 								IF 	l_Cbs_Element_Id_tbl(i) is NULL	THEN
43402 										PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43403 																 ,p_msg_name       => 'PA_CBS_COST_CODE_ID_REQ'
43404 																 ,p_token1 => 'TASK'
43405 																 ,p_value1 =>l_Proj_Element_Id_tbl(i)
43406 																);
43407 											x_return_status := FND_API.G_RET_STS_ERROR;
43408 											X_Msg_Data := 'PA_CBS_COST_CODE_ID_REQ';
43409 											X_Msg_Count := 1;
43410 											ROLLBACK;
43411 											RAISE FND_API.G_EXC_ERROR;
43412 								ELSE
43413 										OPEN Check_cost_code_valid(l_project_id,l_Cbs_Element_Id_tbl(i));
43414 										FETCH Check_cost_code_valid into l_count;
43415 										CLOSE Check_cost_code_valid;
43416 
43417 										if l_count = 0 Then
43418 											PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43419 																 ,p_msg_name       => 'PA_CBS_COST_CODE_INVALID'
43420 																 ,p_token1 => 'COST_CODE'
43421 																 ,p_value1 =>p_task_cost_code_in(i).cost_code
43422 																);
43423 											x_return_status := FND_API.G_RET_STS_ERROR;
43424 											X_Msg_Data := 'PA_CBS_COST_CODE_ID_REQ';
43425 											X_Msg_Count := 1;
43426 											ROLLBACK;
43427 											RAISE FND_API.G_EXC_ERROR;
43428 										ENd If;
43429 
43430 								END IF;
43431 						END IF;
43432 
43433 				---Validate Task details
43434 
43435 				IF p_structure_type = 'FINACIAL' THEN
43436 					IF l_Proj_Element_Id_tbl(i) is null Then
43437 
43438 							  OPEN C3(l_project_id,p_task_cost_code_in(i).pa_task_number);
43439 							  FETCH C3 into l_Proj_Element_Id_tbl(i);
43440 							  Close C3;
43441 					END If;
43442 
43443 					OPEN check_task_exists_fp(l_project_id,l_Proj_Element_Id_tbl(i));
43444 					FETCH check_task_exists_fp into l_count;
43445 					CLOSE check_task_exists_fp;
43446 
43447 				ELSE
43448 					IF l_Proj_Element_Id_tbl(i) is null Then
43449 
43450 							  OPEN C2(l_project_id,p_task_cost_code_in(i).pa_task_number);
43451 							  FETCH C2 into l_Proj_Element_Id_tbl(i);
43452 							  Close C2;
43453 					END If;
43454 
43455 					OPEN check_task_exists_wp(l_project_id,l_Proj_Element_Id_tbl(i));
43456 					FETCH check_task_exists_wp into l_count;
43457 					CLOSE check_task_exists_wp;
43458 
43459 				END IF;
43460 
43461 				IF l_Proj_Element_Id_tbl(i) is null Then
43462 														PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43463 																 ,p_msg_name       => 'PA_CBS_TASK_DETAILS_REQ'
43464 																);
43465 											x_return_status := FND_API.G_RET_STS_ERROR;
43466 											X_Msg_Data := 'PA_CBS_TASK_DETAILS_REQ';
43467 											X_Msg_Count := 1;
43468 											ROLLBACK;
43469 											RAISE FND_API.G_EXC_ERROR;
43470 
43471 				END IF;
43472 				If l_count = 0 Then
43473 					PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43474 										,p_msg_name       => 'PA_CBS_TASK_INVALID'
43475 										,p_token1 => 'TASK'
43476 										,p_value1 =>l_Proj_Element_Id_tbl(i)
43477 										);
43478 					x_return_status := FND_API.G_RET_STS_ERROR;
43479 							X_Msg_Data := 'PA_CBS_TASK_INVALID';
43480 							X_Msg_Count := 1;
43481 							ROLLBACK;
43482 					RAISE FND_API.G_EXC_ERROR;
43483 
43484 				END If;
43485 
43486 		  end loop;
43487 		  -- Below for loop will remove the duplicate records 16798970
43488 		  If l_Proj_Element_Id_tbl.Count > 0 Then
43489 		  counter :=1;
43490 		    for i in l_Proj_Element_Id_tbl.first..l_Proj_Element_Id_tbl.last loop
43491 
43492 				j:=lp_Proj_Element_Id_tbl.Count;
43493 				duplicate:='N';
43494 				while j>=1 loop
43495 					if l_Proj_Element_Id_tbl(i)=lp_Proj_Element_Id_tbl(j) and
43496 					   l_Cbs_Element_Id_tbl(i)=lp_Cbs_Element_Id_tbl(j) Then
43497 						 duplicate:='Y';
43498 						 j:=1;-- to come out of while loop
43499 					end if;
43500 					j:=j-1;
43501 				end loop;
43502 
43503 				If duplicate = 'N' Then
43504 					lp_Proj_Element_Id_tbl.extend;
43505 					lp_Cbs_Element_Id_tbl.extend;
43506 					lp_Proj_Element_Id_tbl(counter):=l_Proj_Element_Id_tbl(i);
43507 					lp_Cbs_Element_Id_tbl(counter) :=l_Cbs_Element_Id_tbl(i);
43508 					counter:=counter+1;
43509 				End if;
43510 
43511 			end loop;
43512 
43513 		  end if;
43514 
43515 		  PA_ALTERNATE_TASK_PVT.Create_Alt_Task(
43516 					p_Proj_Element_Id    	=> lp_Proj_Element_Id_tbl,
43517 					p_Cbs_Element_Id		=>lp_Cbs_Element_Id_tbl,
43518 					X_Return_Status => X_Return_Status,
43519 					X_Msg_Data =>X_Msg_Data,
43520 					X_Msg_Count=>X_Msg_Count);
43521 
43522 		IF X_Return_Status = 'S' THEN
43523 					If p_commit=FND_API.G_TRUE then
43524 					  commit;
43525 					end if;
43526 		END IF;
43527 	  end if;
43528 EXCEPTION
43529 
43530 		When FND_API.G_EXC_ERROR Then
43531 		FND_MSG_PUB.Count_And_Get
43532         (   p_count    =>  x_msg_count  ,
43533             p_data    =>  x_msg_data  );
43534 		X_Return_Status := 'E';
43535 		ROLLBACK;
43536 
43537 
43538 		When Others Then
43539 		FND_MSG_PUB.Count_And_Get
43540         (   p_count    =>  x_msg_count  ,
43541             p_data    =>  x_msg_data  );
43542 		X_Return_Status := 'E';
43543 		ROLLBACK;
43544 
43545 END ADD_COST_CODE_TO_TASK;
43546 
43547 /*
43548 This api will be  used to delete multiple cost codes assigned to multiple tasks for a single project.
43549 We need to ensure p_task_cost_code_in is passed with either proj_element_id or element number
43550 and cost_code / cbs_element_id to add the same to corresponding element.
43551 p_structure_type should be either WORKPLAN or FINANCIAL.
43552  * @param p_api_version_number API standard: version number
43553  * @rep:paraminfo {@rep:required}
43554  * @param p_commit API standard (default = F): indicates if the transaction will be committed
43555  * @rep:paraminfo {@rep:precision 1}
43556  * @param p_init_msg_list API standard (default = F): indicates if message stack will be initialized
43557  * @rep:paraminfo {@rep:precision 1}
43558  * @param x_msg_count API standard: number of error messages
43559  * @rep:paraminfo {@rep:required}
43560  * @param x_msg_data API standard: error message
43561  * @rep:paraminfo {@rep:precision 2000} {@rep:required}
43562  * @param x_return_status API standard: return status of the API (success/failure/unexpected error)
43563  * @rep:paraminfo {@rep:precision 1}
43564  * @param p_pm_product_code The identifier of the external project management system
43565  * from which the project is imported
43566  * @param p_pm_project_reference The reference code that uniquely identifies the project in the external system
43567  * @param p_pa_project_id The unique identifier of the project
43568  * @rep:paraminfo {@rep:required}
43569   * @param p_structure_type represents the structure type workplan or financial
43570  * @rep:paraminfo {@rep:required}
43571    * @param p_task_cost_code_in is record type which hold task and cost code details
43572  * @rep:paraminfo {@rep:required}
43573 */
43574 
43575 
43576 PROCEDURE DELETE_COST_CODE_FROM_TASK (
43577       p_api_version                     IN   NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
43578     , p_init_msg_list                   IN   VARCHAR2         := FND_API.G_FALSE
43579     , p_commit                          IN   VARCHAR2         := FND_API.G_FALSE
43580     , p_pa_project_id           				IN   NUMBER           := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
43581     , p_pm_product_code         				IN   VARCHAR2         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43582  		, p_pm_project_reference        		IN   VARCHAR2         := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43583     , p_task_cost_code_in               IN   TASK_COST_CODE_TBL
43584     , p_structure_type                  IN   VARCHAR2         := 'FINANCIAL'
43585     , x_msg_count                       OUT  NOCOPY  NUMBER
43586     , x_msg_data                        OUT  NOCOPY VARCHAR2
43587     , x_return_status                   OUT  NOCOPY VARCHAR2
43588      )
43589 IS
43590 l_return_status varchar2(100);
43591 
43592 l_debug_mode varchar2(1) :='N';
43593 	l_Proj_Element_Id_tbl    	SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43594 	l_Cbs_Element_Id_tbl		SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43595 	 l_Alt_Task_Id_tbl    	 	 		SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43596 
43597 	l_project_id Number :=p_pa_project_id;
43598 	l_cbs_enabled_flag varchar2(1) :='N';
43599 	l_count Number :=0;
43600 
43601 Cursor C1(c_proj_id Number) IS
43602 Select NVL(CBS_ENABLE_FLAG,'N')
43603 FROM PA_PROJECTS_ALL
43604 WHERE PROJECT_ID=c_proj_id;
43605 
43606 Cursor C2(c_proj_id Number , c_number varchar2) IS
43607 Select proj_element_id
43608 From pa_proj_elements
43609 Where project_id=c_proj_id
43610 and  element_number=c_number;
43611 
43612 Cursor C3(c_proj_id Number , c_number varchar2) IS
43613 Select Task_id
43614 From pa_Tasks
43615 Where project_id=c_proj_id
43616 and  task_number=c_number;
43617 
43618 Cursor check_task_exists_wp(c_proj_id Number ,c_task_id Number) IS
43619 Select Count(1)
43620 From pa_proj_elements
43621 Where project_id=c_proj_id
43622 and  proj_element_id=c_task_id;
43623 
43624 Cursor check_task_exists_fp(c_proj_id Number ,c_task_id Number) IS
43625 Select Count(1)
43626 From pa_Tasks
43627 Where project_id=c_proj_id
43628 and  task_id=c_task_id;
43629 
43630 Cursor Check_cost_code_valid(c_proj_id Number ,c_cbs_lem_id Number) IS
43631 SELECT COUNT(1)
43632 FROM PA_PROJECTS_ALL PA,PA_RBS_ELEMENTS PRE
43633 WHERE PA.CBS_VERSION_ID=PRE.RBS_VERSION_ID
43634 AND PA.PROJECT_ID=c_proj_id
43635 AND PRE.RBS_ELEMENT_ID=c_cbs_lem_id;
43636 
43637 
43638 Cursor Get_alt_Task(c_task_id Number ,c_cbs_lem_id Number) IS
43639 SELECT ALT_TASK_ID
43640 FROM PA_ALTERNATE_TASKS
43641 WHERE PROJ_ELEMENT_ID=c_task_id and CBS_ELEMENT_ID=c_cbs_lem_id;
43642 
43643 
43644 BEGIN
43645 	  pa_debug.init_err_stack ('PA_PROJECT_PUB.DELETE_COST_CODE_FROM_TASK');
43646 
43647 	  IF (l_debug_mode = 'Y') THEN
43648 		pa_debug.debug('PA_PROJECT_PUB.DELETE_COST_CODE_FROM_TASK begin');
43649 	  END IF;
43650 	IF p_pa_project_id is not null then
43651 		l_project_id:=p_pa_project_id;
43652 	ELSE
43653 	PA_PROJECT_PVT.Convert_pm_projref_to_id
43654         (        p_pm_project_reference =>      p_pm_project_reference
43655                  ,  p_pa_project_id     =>      p_pa_project_id
43656                  ,  p_out_project_id    =>      l_project_id
43657                  ,  p_return_status     =>      l_return_status
43658         );
43659 	END IF;
43660 
43661 	OPEN c1(l_project_id);
43662 	Fetch c1 into l_cbs_enabled_flag;
43663 	CLOSE C1;
43664 
43665 	If l_cbs_enabled_flag <> 'Y' THEN
43666 		PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43667 							,p_msg_name       => 'PA_CBS_PRJ_NOT_CBS'
43668 							);
43669 		x_return_status := FND_API.G_RET_STS_ERROR;
43670 		RAISE FND_API.G_EXC_ERROR;
43671 
43672 	END IF;
43673 
43674 	  if p_task_cost_code_in.count > 0 then
43675 		IF (p_commit = FND_API.G_TRUE) THEN
43676 			savepoint ADD_COST_CODE_TO_TASK;
43677 		END IF;
43678 
43679 		-- Add validations here
43680 
43681 		  for i in	p_task_cost_code_in.first..p_task_cost_code_in.last  loop
43682 				l_Proj_Element_Id_tbl.extend;
43683 				l_Cbs_Element_Id_tbl.extend;
43684 				l_alt_task_id_tbl.extend;
43685 
43686 				l_Proj_Element_Id_tbl(i) := p_task_cost_code_in(i).pa_task_id;
43687 				l_Cbs_Element_Id_tbl(i) :=p_task_cost_code_in(i).cbs_element_id;
43688 
43689 						IF p_task_cost_code_in(i).cbs_element_id IS NULL OR
43690 							   p_task_cost_code_in(i).cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
43691 
43692 							   l_Cbs_Element_Id_tbl(i) := PA_ALTERNATE_TASK_PVT.convert_cost_code_to_id(
43693 													 p_task_cost_code_in(i).cost_code ,p_pa_project_id );
43694 								IF 	l_Cbs_Element_Id_tbl(i) is NULL	THEN
43695 										PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43696 																 ,p_msg_name       => 'PA_CBS_COST_CODE_ID_REQ'
43697 																 ,p_token1 => 'TASK'
43698 																 ,p_value1 =>l_Proj_Element_Id_tbl(i)
43699 																);
43700 											x_return_status := FND_API.G_RET_STS_ERROR;
43701 											X_Msg_Data := 'PA_CBS_COST_CODE_ID_REQ';
43702 											X_Msg_Count := 1;
43703 											ROLLBACK;
43704 											RAISE FND_API.G_EXC_ERROR;
43705 								ELSE
43706 										OPEN Check_cost_code_valid(l_project_id,l_Cbs_Element_Id_tbl(i));
43707 										FETCH Check_cost_code_valid into l_count;
43708 										CLOSE Check_cost_code_valid;
43709 
43710 										if l_count = 0 Then
43711 											PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43712 																 ,p_msg_name       => 'PA_CBS_COST_CODE_INVALID'
43713 																 ,p_token1 => 'COST_CODE'
43714 																 ,p_value1 =>p_task_cost_code_in(i).cost_code
43715 																);
43716 											x_return_status := FND_API.G_RET_STS_ERROR;
43717 											X_Msg_Data := 'PA_CBS_COST_CODE_ID_REQ';
43718 											X_Msg_Count := 1;
43719 											ROLLBACK;
43720 											RAISE FND_API.G_EXC_ERROR;
43721 										ENd If;
43722 
43723 								END IF;
43724 						END IF;
43725 
43726 				---Validate Task details
43727 
43728 				IF p_structure_type = 'FINACIAL' THEN
43729 					IF l_Proj_Element_Id_tbl(i) is null Then
43730 
43731 							  OPEN C3(l_project_id,p_task_cost_code_in(i).pa_task_number);
43732 							  FETCH C3 into l_Proj_Element_Id_tbl(i);
43733 							  Close C3;
43734 					END If;
43735 
43736 					OPEN check_task_exists_fp(l_project_id,l_Proj_Element_Id_tbl(i));
43737 					FETCH check_task_exists_fp into l_count;
43738 					CLOSE check_task_exists_fp;
43739 
43740 				ELSE
43741 					IF l_Proj_Element_Id_tbl(i) is null Then
43742 
43743 							  OPEN C2(l_project_id,p_task_cost_code_in(i).pa_task_number);
43744 							  FETCH C2 into l_Proj_Element_Id_tbl(i);
43745 							  Close C2;
43746 					END If;
43747 
43748 					OPEN check_task_exists_wp(l_project_id,l_Proj_Element_Id_tbl(i));
43749 					FETCH check_task_exists_wp into l_count;
43750 					CLOSE check_task_exists_wp;
43751 
43752 				END IF;
43753 
43754 				IF l_Proj_Element_Id_tbl(i) is null Then
43755 														PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43756 																 ,p_msg_name       => 'PA_CBS_TASK_DETAILS_REQ'
43757 																);
43758 											x_return_status := FND_API.G_RET_STS_ERROR;
43759 											X_Msg_Data := 'PA_CBS_TASK_DETAILS_REQ';
43760 											X_Msg_Count := 1;
43761 											ROLLBACK;
43762 											RAISE FND_API.G_EXC_ERROR;
43763 
43764 				END IF;
43765 				If l_count = 0 Then
43766 					PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43767 										,p_msg_name       => 'PA_CBS_TASK_INVALID'
43768 										,p_token1 => 'TASK'
43769 										,p_value1 =>l_Proj_Element_Id_tbl(i)
43770 										);
43771 					x_return_status := FND_API.G_RET_STS_ERROR;
43772 							X_Msg_Data := 'PA_CBS_TASK_INVALID';
43773 							X_Msg_Count := 1;
43774 							ROLLBACK;
43775 					RAISE FND_API.G_EXC_ERROR;
43776 
43777 				END If;
43778 
43779 				--Get the Alternate Tasks
43780 				l_alt_task_id_tbl(i) :=null;
43781 				Open Get_alt_Task(l_Proj_Element_Id_tbl(i),l_Cbs_Element_Id_tbl(i));
43782 				Fetch Get_alt_Task into l_alt_task_id_tbl(i);
43783 				Close Get_alt_Task;
43784 
43785 				IF l_alt_task_id_tbl(i) is null then
43786 									PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43787 										,p_msg_name       => 'PA_CBS_INVALID_ALT_TASK'
43788 										,p_token1 => 'TASK'
43789 										,p_value1 =>l_Proj_Element_Id_tbl(i)
43790 										,p_token2 => 'COST_CODE_ID'
43791 										,p_value2 =>l_Cbs_Element_Id_tbl(i)
43792 										);
43793 					x_return_status := FND_API.G_RET_STS_ERROR;
43794 							X_Msg_Data := 'PA_CBS_INVALID_ALT_TASK';
43795 							X_Msg_Count := 1;
43796 							ROLLBACK;
43797 					RAISE FND_API.G_EXC_ERROR;
43798 
43799 				END IF;
43800 
43801 		  end loop;
43802 
43803 		  PA_ALTERNATE_TASK_PVT.Delete_Alt_Task(
43804 					p_Alt_Task_Id =>l_alt_task_id_tbl,
43805 					X_Return_Status => X_Return_Status,
43806 					X_Msg_Data =>X_Msg_Data,
43807 					X_Msg_Count=>X_Msg_Count);
43808 
43809 		IF X_Return_Status = 'S' THEN
43810 					If p_commit=FND_API.G_TRUE then
43811 					  commit;
43812 					end if;
43813 		END IF;
43814 	  end if;
43815 EXCEPTION
43816 		When FND_API.G_EXC_ERROR Then
43817 		FND_MSG_PUB.Count_And_Get
43818         (   p_count    =>  x_msg_count  ,
43819             p_data    =>  x_msg_data  );
43820 		X_Return_Status := 'E';
43821 		ROLLBACK;
43822 
43823 		When Others Then
43824 		FND_MSG_PUB.Count_And_Get
43825         (   p_count    =>  x_msg_count  ,
43826             p_data    =>  x_msg_data  );
43827 		X_Return_Status := 'E';
43828 		ROLLBACK;
43829 
43830 END DELETE_COST_CODE_FROM_TASK;
43831 
43832 end PA_PROJECT_PUB;