[Home] [Help]
PACKAGE BODY: APPS.PA_PROJECT_PUB
Source
1 PACKAGE BODY pa_project_pub AS
2 /* $Header: PAPMPRPB.pls 120.75.12010000.20 2009/02/12 13:52:52 kjai ship $ */
3 --Global constants to be used in error messages
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'PA_PROJECT_PUB';
5 G_PROJECT_CODE CONSTANT VARCHAR2(7) := 'PROJECT';
6 G_CUSTOMER_CODE CONSTANT VARCHAR2(8) := 'CUSTOMER';
7 G_KEY_MEMBER CONSTANT VARCHAR2(10) := 'KEY_MEMBER';
8 G_CLASS_CATEGORY_CODE CONSTANT VARCHAR2(14) := 'CLASS_CATEGORY';
9 G_TASK_CODE CONSTANT VARCHAR2(4) := 'TASK';
10 -- anlee org role changes
11 G_ORG_ROLE CONSTANT VARCHAR2(10) := 'ORG_ROLE';
12 --Added by rtarway for FP.M Mapping
13 G_PROJECT_SHARING_TYPE VARCHAR2(250);
14 --Added by rtarway for FP.M Mapping
15 --PACKAGE GLOBAL to be used during updates -------------------------------------------
16 G_USER_ID CONSTANT NUMBER := FND_GLOBAL.user_id;
17 G_LOGIN_ID CONSTANT NUMBER := FND_GLOBAL.login_id;
18
19 l_pm_product_code VARCHAR2(30) := 'Z'; /*for bug 2413400 a new variable defined.*/
20 /* increased the lenght for bug 2665656 */
21
22 -- PACKAGE CURSORS -------------------------------------------------------------------------
23 --needed to get the field values associated to a particular project_type
24
25 CURSOR l_project_type_csr
26 (p_project_type pa_project_types.project_type%type)
27 IS
28 SELECT *
29 FROM pa_project_types
30 WHERE project_type = p_project_type;
31
32 --needed to get the field values associated to a particular project
33
34 CURSOR l_project_csr
35 (p_pa_project_id pa_projects.project_id%type)
36 IS
37 SELECT *
38 FROM pa_projects p
39 WHERE p.project_id = p_pa_project_id;
40
41 /*new cursor for bug no 2413400*/
42 Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
43 Is
44 Select 'X'
45 from pa_lookups
46 where lookup_type='PM_PRODUCT_CODE'
47 and lookup_code = p_pm_product_code;
48
49 --FP.M Changes by rtarway for Mapping and Set Financial Task
50 --This cursor gets the record version number from pa_tasks for the passed task version id
51 CURSOR c_get_pa_record_version_number (l_task_version_id NUMBER , l_project_id NUMBER)
52 IS
53 SELECT
54 allTasks.record_version_number
55
56 FROM
57 PA_TASKS allTasks,
58 pa_proj_element_versions elever
59 WHERE
60 elever.element_version_id = l_task_version_id
61 AND
62 elever.project_id = l_project_id
63 AND elever.proj_element_id = allTasks.task_id
64 AND allTasks.project_id = elever.project_id;
65 --End FP.M Changes by rtarway for Mapping and Set Financial Task
66
67 --
68 -- ================================================
69 --
70 --Name: Create_Project
71 --Type: Procedure
72 --Description: This procedure can be used to create a project on basis
73 -- of an existing project or template.
74 --
75 --Called subprograms: pa_project_core1.copy_project
76 --
77 --
78 --
79 --History:
80 -- 31-JUL-1996 L. de Werker Created
81 -- 04-MAR-1997 L. de Werker - workflow enabling added
82 --
83 -- 22-DEC-97 jwhite - Added OUT-parameter p_workflow_started
84 -- for workflow.
85 -- 19-JAN-01 anlee - Added l_team_template_id, l_country_code,
86 -- l_region, and l_city params for team template
87 -- 09-MAY-02 Maansari - Project Structure Integration
88 -- - Added call to PA_PROJ_TASK_STRUC.COPY_STRUCTURE api.
89 -- 19-may-2003 sramesh -Fixed the bug 2910972.Defaulting of the key member start
90 -- date
91 -- 15-jul-2003 sramesh -- Added the code for bug 2982057.
92 -- Changed the logic to populate the long_task_name
93 -- with task_name when the long_task_name is null.
94 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
95 -- dependency_type and lag days to tasks and create dependencies.
96 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
97 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
98 -- 03-Mar-04 Puneet 3435905 FP M Changes for Deliverables : Start
99 -- 17-Jun-2004 Avaithia 3683732 : Provided Default Values for p_class_categories and p_key_members parameters
100 -- In Create_Project and Update_Project API
101 -- 11-Dec-2005 Sunkalya Bug 4870305: Modified create_project. Passed pm_product_code
102 -- parameter to the call to function check_unique_project_reference.Changes Tagged.
103 -- 12-Feb-2009 KJai Bug 7830143 : In Procedure Create_project, called PA_MOAC_UTILS.SET_POLICY_CONTEXT() to set context.
104 --
105 PROCEDURE Create_Project
106 (
107 p_api_version_number IN NUMBER
108 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
109 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
110 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
111 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
112 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
113 ,p_workflow_started OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
114 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
115 ,p_op_validate_flag IN VARCHAR2 := 'Y' --added by rtarway 4218977
116 ,p_project_in IN project_in_rec_type
117 ,p_project_out OUT NOCOPY project_out_rec_type /*Added the nocopy check for bug 2674619*/
118 /* Added for tracking bug - add customers */
119 ,p_customers_in IN pa_project_pub.customer_tbl_type := G_customers_in_tbl
120 /* Added Default Value for p_class_categories and p_key_members */
121 ,p_key_members IN project_role_tbl_type := G_key_members_in_tbl
122 ,p_class_categories IN class_category_tbl_type := G_class_categories_in_tbl
123 ,p_tasks_in IN task_in_tbl_type
124 ,p_tasks_out OUT NOCOPY task_out_tbl_type /*added the nocopy check for the bug 2674619*/
125 -- anlee org role changes
126 ,p_org_roles IN project_role_tbl_type := G_org_roles_in_tbl
127 --project structures
128 ,p_structure_in IN structure_in_rec_type := G_structure_in_rec
129 -- ,p_structure_out OUT structure_out_rec_type := G_structure_out_rec
130 ,p_ext_attr_tbl_in IN PA_EXT_ATTR_TABLE_TYPE := G_ext_attr_in_tbl -- <EA added parameter for Ext Attr/>
131 --project structures
132 --FP M : deliverables
133 ,p_deliverables_in IN deliverable_in_tbl_type := G_deliverables_in_tbl -- 3435905 passing default value
134 -- ,p_deliverables_out OUT NOCOPY deliverable_out_tbl_type -- 3435905 removed
135 ,p_deliverable_actions_in IN action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default value
136 -- ,p_deliverable_actions_out OUT NOCOPY action_out_tbl_type -- 3435905 removed
137 --FP M : deliverables
138 )
139 IS
140
141 --needed to get the overridable fields for this project template source
142
143 CURSOR l_override_fields_csr
144 (p_pa_source_template_id NUMBER)
145 IS
146 SELECT DISTINCT *
147 FROM pa_override_fields_v pof
148 WHERE pof.pa_source_template_id = p_pa_source_template_id;
149
150
151 -- 4363092 TCA changes, replaced RA views with HZ tables
152 -- commented out below cursor as it is not used anywhere
153 --needed to default the address_id to that of the primary customer
154 /*
155 CURSOR l_address_csr
156 (p_customer_id NUMBER)
157 IS
158 SELECT a.address_id
159 FROM ra_addresses a
160 , ra_site_uses su
161 WHERE a.customer_id = p_customer_id
162 AND a.address_id = su.address_id
163 AND nvl(su.status,'A') = 'A'
164 AND su.site_use_code = 'SHIP_TO'
165 AND su.primary_flag = 'Y';
166 */
167 -- 4363092 end
168
169 --needed for validation of distribution rule
170 CURSOR l_source_project_type_csr (p_source_template_id IN NUMBER )IS
171 SELECT project_type
172 FROM pa_projects
173 WHERE project_id = p_source_template_id;
174
175 CURSOR l_get_wf_status_csr (l_project_id IN NUMBER)
176 IS
177 SELECT wf_status_code
178 FROM pa_projects
179 WHERE project_id = l_project_id;
180
181 -- IC and Multi National Currency changes Starts ...
182
183 Cursor l_customer_csr (p_customer_id NUMBER)
184 Is
185 Select inv_currency_code,
186 inv_rate_type,
187 inv_rate_date,
188 inv_exchange_rate,
189 allow_inv_user_rate_type_flag,
190 bill_another_project_flag,
191 receiver_task_id
192 From pa_project_customers
193 Where customer_id = p_customer_id;
194
195 -- IC and Multi National Currency changes Ends ...
196
197 -- below cursor added for bug 2254661
198 Cursor l_temp_flag_csr(p_proj_id NUMBER)
199 Is
200 select NVL(template_flag,'N')
201 from pa_projects
202 where project_id = p_proj_id;
203
204 -- 5182868 Added below cursor to validate template for effectiveness
205
206 Cursor l_temp_eff_flag_csr(p_proj_id NUMBER)
207 Is
208 select 'N'
209 from pa_projects_all
210 where project_id = p_proj_id
211 and template_flag = 'Y'
212 and ((nvl(trunc(template_start_date_active), trunc(sysdate)) > trunc(sysdate)) or
213 (nvl(trunc(template_end_date_active), trunc(sysdate)) < trunc(sysdate)));
214
215 l_temp_eff_flag VARCHAR2(1) := 'Y'; -- added local variable
216
217 -- 5182868 end
218
219 /* added the below cursor for bug 3000981 */
220 CURSOR cur_pa_impl
221 IS
222 SELECT default_rate_type
223 FROM pa_implementations;
224
225 TYPE override_fields_tbl_type IS TABLE OF l_override_fields_csr%rowtype
226 INDEX BY BINARY_INTEGER;
227
228 l_api_name CONSTANT VARCHAR2(30) := 'create_project';
229
230 l_return_status VARCHAR2(1);
231 l_copy_task_flag VARCHAR2(1) := 'N'; --used by copy_project
232 l_copy_budget_flag VARCHAR2(1) := 'N'; --idem
233 l_use_override_flag VARCHAR2(1) := 'Y'; --idem
234 l_copy_assignment_flag VARCHAR2(1) := 'N';
235 l_template_flag VARCHAR2(1) := 'N'; --idem
236 l_err_code NUMBER(15);
237 l_err_stage VARCHAR2(2000);
238 l_err_stack VARCHAR2(2000);
239 i NUMBER := 0; --counter
240 j NUMBER := 0; --counter
241 l_is_overridable BOOLEAN := FALSE;
242 l_project_type_rec pa_project_types%rowtype;
243 l_project_rec pa_projects%rowtype;
244 l_project_in_rec project_in_rec_type;
245 l_override_fields_rec l_override_fields_csr%rowtype;
246 l_override_fields_tab override_fields_tbl_type;
247 l_key_members project_role_tbl_type;
248 -- anlee org role changes
249 l_org_roles project_role_tbl_type;
250 l_class_categories class_category_tbl_type;
251 l_project_id NUMBER;
252 l_task_id NUMBER;
253 l_wbs_level NUMBER := 1;
254 l_top_task_id NUMBER;
255 l_parent_task_id NUMBER;
256 l_address_id NUMBER;
257 l_task_in_rec task_in_rec_type;
258 l_bill_to_address_id NUMBER := NULL; --Initialized to NULL for Bug 3911782
259 l_ship_to_address_id NUMBER := NULl; --Initialized to NULL for Bug 3911782
260 l_bill_to_contact_id NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : Bug 4633405
261 l_ship_to_contact_id NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : Bug 4633405
262 l_source_project_type VARCHAR2(80);
263 l_project_start_date DATE;
264 l_project_completion_date DATE;
265 l_msg_count NUMBER ;
266 l_msg_data VARCHAR2(2000);
267 l_function_allowed VARCHAR2(1);
268 l_resp_id NUMBER := 0;
269 l_proj_num_numeric NUMBER;
270 l_attribute_category VARCHAR2(30);
271 l_attribute1 VARCHAR2(150);
272 l_attribute2 VARCHAR2(150);
273 l_attribute3 VARCHAR2(150);
274 l_attribute4 VARCHAR2(150);
275 l_attribute5 VARCHAR2(150);
276 l_attribute6 VARCHAR2(150);
277 l_attribute7 VARCHAR2(150);
278 l_attribute8 VARCHAR2(150);
279 l_attribute9 VARCHAR2(150);
280 l_attribute10 VARCHAR2 (150);
281 l_team_template_id NUMBER;
282 l_country_code VARCHAR2(2);
283 l_region VARCHAR2(240);
284 l_city VARCHAR2(80);
285 --Sakthi
286 l_agreement_currency VARCHAR2(10);
287 l_agreement_amount NUMBER;
288 l_agreement_org_id NUMBER;
289 --Sakthi
290 -- Tax Code changes starts ...
291 l_output_tax_code VARCHAR2(30);
292 l_retention_tax_code VARCHAR2(30);
293 -- Tax Code changes ends ...
294
295 -- CC and Multi National Currency Starts ...
296 -- Project ...
297 l_project_currency_code VARCHAR2(15);
298 l_allow_cross_charge_flag VARCHAR2(1);
299 l_project_rate_date DATE;
300 l_project_rate_type VARCHAR2(30);
301 l_cc_process_labor_flag VARCHAR2(1);
302 l_labor_tp_schedule_id NUMBER;
303 l_labor_tp_fixed_date DATE;
304 l_cc_process_nl_flag VARCHAR2(1);
305 l_nl_tp_schedule_id NUMBER;
306 l_nl_tp_fixed_date DATE;
307 l_cc_tax_task_id NUMBER;
308 -- Customer ...
309 l_inv_currency_code VARCHAR2(15);
310 l_inv_rate_type VARCHAR2(30);
311 l_inv_rate_date DATE;
312 l_inv_exchange_rate NUMBER;
313 l_allow_inv_rate_type_fg VARCHAR2(1);
314 l_bill_another_prj_flag VARCHAR2(1);
315 l_receiver_task_id NUMBER;
316 -- CC and Multi National Currency Ends ...
317
318 -- ORM Changes Starts here ...
319
320 l_role_list_id NUMBER;
321 l_work_type_id NUMBER;
322 l_calendar_id NUMBER;
323 l_location_id NUMBER;
324 l_probability_member_id NUMBER;
325 l_project_value NUMBER;
326 l_expected_approval_date DATE;
327 l_cost_job_group_id NUMBER;
328 l_bill_job_group_id NUMBER;
329
330 -- ORM Changes Ends here ...
331
332 l_emp_bill_rate_schedule_id NUMBER;
333 l_job_bill_rate_schedule_id NUMBER;
334
335 -- opportunity value changes
336 -- anlee
337 l_opp_value_currency_code VARCHAR2(15);
338 -- end of opportunity value changes
339 --Priority Code in quick entry
340 l_priority_code VARCHAR2(30);
341 l_security_level NUMBER;
342
343 l_project_number_out VARCHAR2(30);
344 l_actual_start_date DATE;
345 l_actual_finish_date DATE;
346 l_early_start_date DATE;
347 l_early_finish_date DATE;
348 l_late_start_date DATE;
349 l_late_finish_date DATE;
350 l_scheduled_start_date DATE;
351 l_scheduled_finish_date DATE;
352 l_out_start_date DATE;
353 l_out_completion_date DATE;
354 l_error_code NUMBER;
355 l_error_message VARCHAR2(100);
356 l_relationship_type VARCHAR2(30);
357 l_wf_status_code VARCHAR2(30);
358 l_create_project_number VARCHAR2(25);
359
360
361 --used for starting approve_project workflow
362 l_workflow_is_used VARCHAR2(1);
363 l_start_wf_automatically VARCHAR2(1);
364 p_multiple_task_msg VARCHAR2(1) := 'T';
365 l_class_code_categories NUMBER;
366 l_key_member NUMBER;
367 --below two variables added for bug 2254661
368 l_created_from_proj_id NUMBER;
369 l_temp_flag VARCHAR2(1);
370 --end 2254661
371 --anlee org role changes
372 l_org_role NUMBER;
373 l_party_id NUMBER;
374 l_project_party_id NUMBER;
375 l_resource_id NUMBER;
376 l_wf_item_type VARCHAR2(30);
377 l_wf_type VARCHAR2(30);
378 l_wf_party_process VARCHAR2(30);
379 l_assignment_id NUMBER;
380 l_end_date_active DATE;
381
382 CURSOR l_check_org_csr(c_customer_id IN NUMBER) IS
383 SELECT PARTY_ID
384 FROM PA_CUSTOMERS_V
385 WHERE CUSTOMER_ID = c_customer_id
386 AND PARTY_TYPE = 'ORGANIZATION';
387
388 --Project Structures
389 l_structure_in_rec structure_in_rec_type;
390 v_task_id NUMBER;
391 v_parent_task_id NUMBER;
392 l_amg_segment1 VARCHAR2(25);
393 l_amg_task_number VARCHAR2(50);
394 l_task_version_id NUMBER;
395 l_delta NUMBER;
396 --Project Structures
397
398 --proj conn
399 v_first_index NUMBER;
400 l_ref_task_id NUMBER;
401 --proj conn
402
403 -- <EA>
404 l_failed_row_id_list VARCHAR2(32767);
405 l_errorcode VARCHAR2(150);
406 -- </EA>
407
408 --Bug 2931183
409 l_debug_mode varchar2(1);
410 g_module_name VARCHAR2(100) := 'pa.plsql.CREATE_PROJECT';
411
412 /* Bug 3077676 */
413 l_cust_acc_rel_code pa_implementations.cust_acc_rel_code%TYPE;
414 CURSOR get_cust_acc_rel_code IS
415 Select cust_acc_rel_code
416 From pa_implementations;
417
418 -- FP-M Bug # 3301192
419 l_d_task_ver_id NUMBER;
420 l_d_task_id NUMBER;
421 l_d_structure_version_id NUMBER;
422 l_d_loop_count NUMBER;
423
424 l_deliverable_id NUMBER; -- 3435905
425 i_actn NUMBER := 0; -- 3435905
426
427 --Begin Add by rtarway for FP.M Set Financial Task Changes
428 l_patask_record_version_number NUMBER;
429 --End Add by rtarway for FP.M Set Financial Task Changes
430
431 --Bug 3279981
432 CURSOR cur_get_orig_tt_cust_flag( c_project_id IN NUMBER ) IS
433 SELECT enable_top_task_customer_flag
434 FROM pa_projects_all
435 WHERE project_id = c_project_id ;
436
437 l_orig_def_tt_flag VARCHAR2(1);
438 l_cust_bill_split NUMBER;
439 l_def_tt_cust_flag VARCHAR2(1);
440 l_en_top_task_customer_flag VARCHAR2(1);
441 l_en_top_task_inv_mth_flag VARCHAR2(1);
442
443
444
445 --Bug 3279981
446 l_dup_name_flag VARCHAR2(1); --bug 2450064
447
448 l1 number;
449 l2 varchar2(1);
450 l3 number;
451 l4 varchar2(1);
452
453 l_in_customer_id NUMBER; -- Added for the bug 3825528
454
455 l_bug_wp_enabled VARCHAR2(1); -- Bug 4146369
456 l_bug_fp_enabled VARCHAR2(1); -- Bug 4146369
457
458 /* Start of code for bug #2111806 */
459
460 -- Start of Bug fix 4878696
461 -- Commented this cursor for Performance Bug 4878696
462 -- CURSOR c_prj(c_project_id IN NUMBER ) IS
463 -- select project_system_status_code
464 -- ,project_type_class_code
465 -- from pa_projects_v
466 -- where project_id = c_project_id;
467
468 -- Added the following cursor instead of the commented one as above for Performance Bug 4878696
469 CURSOR c_prj(c_project_id IN NUMBER ) IS
470 select PROJECT_SYSTEM_STATUS_CODE , PROJECT_TYPE_CLASS_CODE
471 from pa_projects_all ppa,pa_project_statuses pps,pa_project_types ppt
472 where ppa.project_id = c_project_id
473 and ppa.PROJECT_STATUS_CODE = pps.PROJECT_STATUS_CODE
474 and ppa.PROJECT_TYPE = ppt.PROJECT_TYPE
475 and pps.STATUS_TYPE = 'PROJECT'
476 and ppt.ORG_ID= ppa.ORG_ID ;
477
478 -- End of Bug fix 4878696
479
480 CURSOR c_prj_count(c_project_id IN NUMBER ) IS
481 select count(*)
482 from pa_project_players
483 where project_id = c_project_id
484 and project_role_type='PROJECT MANAGER';
485
486 l_proj_status pa_projects_all.project_status_code%TYPE;
487 l_proj_type_class pa_project_types_all.project_type_class_code%TYPE;
488 l_prj_mgr_count NUMBER;
489 /* End of code for bug #2111806. */
490
491 -- 4193743 Added below local variables
492 l_bill_to_customer_id NUMBER;
493 l_ship_to_customer_id NUMBER;
494 l_enable_top_task_cust_flag VARCHAR2(1) := 'N'; --added for tracking bug by aditi
495 l_project_relationship_code PA_PROJECT_CUSTOMERS.PROJECT_RELATIONSHIP_CODE%TYPE; --Variable added by aditi for tracking bug
496
497 -- 5191417 Added below cursor to validate priority_code
498
499 l_valid_prio_code VARCHAR2(1) := 'N';
500
501 CURSOR priority_code_csr(p_priority_code IN VARCHAR2) IS
502 Select
503 'Y'
504 from
505 pa_lookups
506 where
507 lookup_type = 'PA_PROJECT_PRIORITY_CODE'
508 and lookup_code = p_priority_code ;
509
510 -- 5191417 end
511
512 -- Bug#5191699. Added the cursor and the local variable below for validating
513 -- project security level.This can be either 'Enterprise' or 'Secured'.
514
515 l_check_sec_level VARCHAR2(1) := 'N';
516
517 CURSOR cur_check_sec_level(p_proj_sec_level IN VARCHAR2 ) IS
518 SELECT 'Y' FROM
519 dual
520 WHERE EXISTS
521 (SELECT NULL FROM pa_lookups
522 WHERE
523 lookup_type = 'PA_PROJECT_ACCESS_LEVEL' AND
524 lookup_code = p_proj_sec_level
525 );
526 -- End of code changes for Bug#5191699 in declare section
527
528 --Bug#5191521. Added the cursor and the local variable below for validating
529 -- probability member id.
530
531 l_check_prob_id VARCHAR2(1) := 'N';
532
533 CURSOR cur_validate_prob_member( p_project_id IN NUMBER ,p_probability_member_id IN NUMBER )
534 IS
535 SELECT 'Y' FROM dual
536 WHERE EXISTS
537 (
538 SELECT
539 NULL
540 FROM
541 pa_probability_members ppm,
542 pa_projects pp,
543 pa_project_types ppt
544 WHERE
545 pp.project_type = ppt.project_type AND
546 pp.org_id = ppt.org_id AND
547 ppt.probability_list_id = ppm.probability_list_id AND
548 pp.project_id = p_project_id AND
549 ppm.probability_member_id = p_probability_member_id AND
550 trunc(sysdate) BETWEEN ppm.start_date_active AND nvl(ppm.end_date_active,trunc(sysdate))
551 );
552 --End of code changes for Bug#5191521 in declare section
553
554
555 --sunkalya:federal bug#5511353
556 l_date_eff_funds_flag VARCHAR2(1);
557 l_orig_date_eff_funds_flag VARCHAR2(1);
558 CURSOR get_date_eff_funds_flag( c_project_id IN NUMBER )
559 IS
560 SELECT
561 nvl(DATE_EFF_FUNDS_CONSUMPTION,'N')
562 FROM
563 pa_projects_all
564 WHERE project_id = c_project_id ;
565
566 /* 7508661 : EnC : Start */
567
568 l_ar_rec_notify_flag VARCHAR2(1);
569 l_orig_ar_rec_notify_flag VARCHAR2(1);
570
571 CURSOR get_ar_rec_notify_flag( c_project_id IN NUMBER )
572 IS
573 SELECT
574 nvl(AR_REC_NOTIFY_FLAG,'N')
575 FROM
576 pa_projects_all
577 WHERE project_id = c_project_id ;
578
579 l_auto_release_pwp_inv VARCHAR2(1);
580 l_orig_auto_release_pwp_inv VARCHAR2(1);
581
582 CURSOR get_auto_release_pwp_inv( c_project_id IN NUMBER )
583 IS
584 SELECT
585 nvl(AUTO_RELEASE_PWP_INV,'Y')
586 FROM
587 pa_projects_all
588 WHERE project_id = c_project_id ;
589
590 /* 7508661 : EnC : End */
591
592 CURSOR cur_enable_funds_flag(p_project_id IN VARCHAR2)
593 IS
594 SELECT 'Y'
595 FROM
596 pa_projects_all p,
597 pa_project_types_all pt
598 WHERE
599 p.project_id = p_project_id AND
600 pt.project_type_class_code = 'CONTRACT' AND
601 p.project_type = pt.project_type AND
602 pt.CC_PRVDR_FLAG = 'N' AND
603 p.org_id = pt.org_id;
604
605
606 l_enable_funds_flag VARCHAR2(1);
607
608 /* CURSOR cur_rev_inv(p_project_id IN VARCHAR2)
609 IS
610 SELECT 'Y'
611 FROM dual
612 WHERE EXISTS
613 (SELECT NULL
614 FROM
615 pa_draft_revenues r
616 WHERE
617 r.project_id = p_project_id
618 )
619 OR EXISTS
620 (SELECT NULL
621 FROM
622 pa_draft_invoices i
623 WHERE
624 i.project_id = p_project_id
625 );
626 l_chk_rev_inv_flag VARCHAR2(1) := NULL;
627
628 */
629 CURSOR chk_task_level_funding(p_project_id IN VARCHAR2)
630 IS
631 SELECT 'Y'
632 FROM sys.dual
633 WHERE exists
634 ( select 1
635 from pa_summary_project_fundings
636 where project_id = p_project_id
637 and task_id is not null
638 );
639
640 l_chk_task_level_funding VARCHAR2(1) := NULL;
641
642 CURSOR count_cust(p_project_id IN VARCHAR2)
643 IS
644 SELECT count(*)
645 FROM pa_project_customers
646 WHERE project_id = p_project_id;
647
648 l_count_cust VARCHAR2(1) := NULL;
649
650 --sunkalya:federal bug#5511353
651
652 /* Adding new cursor for bug 6408593 */
653
654 CURSOR c_prj_key_role_type(c_key_role_meaning IN VARCHAR) IS
655 select project_role_type
656 from pa_project_role_types_vl
657 where meaning like c_key_role_meaning;
658
659 /*Added for bug 7830143*/
660 CURSOR c_get_org_id(c_project_id NUMBER) IS
661 select org_id
662 from pa_projects_all
663 where project_id = c_project_id;
664
665 l_org_id NUMBER ;
666 /*Added for bug 7830143*/
667
668 BEGIN
669
670 -- Standard begin of API savepoint
671
672 SAVEPOINT create_project_pub;
673
674 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
675 -- Standard call to check for call compatibility.
676
677
678 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
679 p_api_version_number ,
680 l_api_name ,
681 G_PKG_NAME )
682 THEN
683
684 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
685
686 END IF;
687
688
689 l_resp_id := FND_GLOBAL.Resp_id;
690
691
692 --Bug#5559292
693
694 G_PROJECT_NUMBER_GEN_MODE := PA_PROJECT_UTILS.GetProjNumMode;
695 G_PROJECT_NUMBER_TYPE := PA_PROJECT_UTILS.GetProjNumType;
696
697 --Bug#5559292
698
699
700 -- Actions performed using the APIs would be subject to
701 -- function security. If the responsibility does not allow
702 -- such functions to be executed, the API should not proceed further
703 -- since the user does not have access to such functions
704
705 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := null; --bug 2471668 ( not in the project context )
706
707 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
708 (p_api_version_number => p_api_version_number,
709 p_responsibility_id => l_resp_id,
710 p_function_name => 'PA_PM_CREATE_PROJECT',
711 p_msg_count => l_msg_count,
712 p_msg_data => l_msg_data,
713 p_return_status => l_return_status,
714 p_function_allowed => l_function_allowed
715 );
716
717
718 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
719 THEN
720 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
721
722 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
723 THEN
724 RAISE FND_API.G_EXC_ERROR;
725 END IF;
726 IF l_function_allowed = 'N' THEN
727 pa_interface_utils_pub.map_new_amg_msg
728 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
729 ,p_msg_attribute => 'CHANGE'
730 ,p_resize_flag => 'Y'
731 ,p_msg_context => 'GENERAL'
732 ,p_attribute1 => ''
733 ,p_attribute2 => ''
734 ,p_attribute3 => ''
735 ,p_attribute4 => ''
736 ,p_attribute5 => '');
737 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
738 RAISE FND_API.G_EXC_ERROR;
739 END IF;
740
741
742 -- Initialize the message table if requested.
743
744 IF FND_API.TO_BOOLEAN( p_init_msg_list )
745 THEN
746
747 FND_MSG_PUB.initialize;
748
749 END IF;
750
751 -- Set API return status to success
752
753 p_return_status := FND_API.G_RET_STS_SUCCESS;
754 p_project_out.return_status := FND_API.G_RET_STS_SUCCESS;
755
756 -- 22-DEC-97, jwhite:
757 -- Initialize New OUT-parameter to indicate workflow status
758
759 -- Set Worflow Started Status -------------------------------------------------
760
761 p_workflow_started := 'N';
762 -- ------------------------------------------------------------------------------------
763
764
765
766 --Move incoming project record to a local project record
767 --Needs to be done to change incoming values to default values
768
769 l_project_in_rec := p_project_in;
770
771 --project structures
772 l_structure_in_rec := p_structure_in;
773 --project structures
774
775 --Added by rtarway for BUG 3703440, 3717026: Populate Global Structure Type Record
776 G_structure_in_rec.pa_project_id := l_structure_in_rec.pa_project_id;
777 G_structure_in_rec.structure_type := l_structure_in_rec.structure_type;
778 G_structure_in_rec.structure_version_name := l_structure_in_rec.structure_version_name;
779 G_structure_in_rec.structure_version_id := l_structure_in_rec.structure_version_id;
780 G_structure_in_rec.DESCRIPTION := l_structure_in_rec.DESCRIPTION;
781 --End Add by rtarway for BUG 3703440, 3717026
782
783
784
785 -- CHECK FOR MANDATORY FIELDS
786 -- check whether mandatory incoming parameters exist
787 -- some of the fields for projects are checked by procedure COPY_PROJECT
788 --bug 2841158
789 -- IF p_pm_product_code IS NULL
790 -- OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
791 IF p_pm_product_code IS NOT NULL
792 AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
793 --bug 2841158
794 THEN
795
796 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
797 THEN
798 pa_interface_utils_pub.map_new_amg_msg
799 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
800 ,p_msg_attribute => 'CHANGE'
801 ,p_resize_flag => 'N'
802 ,p_msg_context => 'GENERAL'
803 ,p_attribute1 => ''
804 ,p_attribute2 => ''
805 ,p_attribute3 => ''
806 ,p_attribute4 => ''
807 ,p_attribute5 => '');
808 END IF;
809 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
810 p_return_status := FND_API.G_RET_STS_ERROR;
811 RAISE FND_API.G_EXC_ERROR;
812 END IF;
813
814 --bug 2841158
815 IF p_pm_product_code <> 'WORKPLAN'
816 AND p_pm_product_code IS NOT NULL
817 AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
818 THEN
819 --bug 2841158
820 /*added for bug no :2413400*/
821 OPEN p_product_code_csr (p_pm_product_code);
822 FETCH p_product_code_csr INTO l_pm_product_code;
823 CLOSE p_product_code_csr;
824
825 IF l_pm_product_code <> 'X'
826 THEN
827
828 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
829 THEN
830 pa_interface_utils_pub.map_new_amg_msg
831 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
832 ,p_msg_attribute => 'CHANGE'
833 ,p_resize_flag => 'N'
834 ,p_msg_context => 'GENERAL'
835 ,p_attribute1 => ''
836 ,p_attribute2 => ''
837 ,p_attribute3 => ''
838 ,p_attribute4 => ''
839 ,p_attribute5 => '');
840 END IF;
841 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
842 p_return_status := FND_API.G_RET_STS_ERROR;
843 RAISE FND_API.G_EXC_ERROR;
844 END IF;
845 END IF; --bug 2841158
846
847 IF l_project_in_rec.pm_project_reference IS NULL
848 OR l_project_in_rec.pm_project_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
849 THEN
850
851 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
852 THEN
853 pa_interface_utils_pub.map_new_amg_msg
854 ( p_old_message_code => 'PA_PROJECT_REF_IS_MISSING'
855 ,p_msg_attribute => 'CHANGE'
856 ,p_resize_flag => 'N'
857 ,p_msg_context => 'PROJ'
858 ,p_attribute1 => l_project_in_rec.pm_project_reference
859 ,p_attribute2 => ''
860 ,p_attribute3 => ''
861 ,p_attribute4 => ''
862 ,p_attribute5 => '');
863 END IF;
864 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
865 p_return_status := FND_API.G_RET_STS_ERROR;
866 RAISE FND_API.G_EXC_ERROR;
867 END IF;
868
869 IF l_project_in_rec.project_name IS NULL
870 OR l_project_in_rec.project_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
871 THEN
872
873 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
874 THEN
875 pa_interface_utils_pub.map_new_amg_msg
876 ( p_old_message_code => 'PA_PROJECT_NAME_IS_MISSING'
877 ,p_msg_attribute => 'CHANGE'
878 ,p_resize_flag => 'N'
879 ,p_msg_context => 'PROJ'
880 ,p_attribute1 => l_project_in_rec.pm_project_reference
881 ,p_attribute2 => ''
882 ,p_attribute3 => ''
883 ,p_attribute4 => ''
884 ,p_attribute5 => '');
885 END IF;
886 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
887 p_return_status := FND_API.G_RET_STS_ERROR;
888 RAISE FND_API.G_EXC_ERROR;
889 END IF;
890
891 -- Ensure that Project name is unique
892
893 IF pa_project_utils.check_unique_project_name
894 (l_project_in_rec.project_name,
895 NULL ) = 0 THEN
896 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
897 THEN
898 pa_interface_utils_pub.map_new_amg_msg
899 ( p_old_message_code => 'PA_PR_EPR_PROJ_NAME_NOT_UNIQUE'
900 ,p_msg_attribute => 'CHANGE'
901 ,p_resize_flag => 'Y'
902 ,p_msg_context => 'ADDP'
903 ,p_attribute1 => l_project_in_rec.pm_project_reference
904 ,p_attribute2 => ''
905 ,p_attribute3 => ''
906 ,p_attribute4 => ''
907 ,p_attribute5 => '');
908 END IF;
909 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
910 p_return_status := FND_API.G_RET_STS_ERROR;
911 RAISE FND_API.G_EXC_ERROR;
912 /*Adding for the bug 2450064*/
913 ELSE
914 pjm_seiban_pkg.project_name_dup(l_project_in_rec.project_name,l_dup_name_flag);
915
916 IF l_dup_name_flag = 'Y' THEN
917 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
918 THEN
919 pa_interface_utils_pub.map_new_amg_msg
920 ( p_old_message_code => 'PA_SEIBAN_NAME_NOT_UNIQUE'
921 ,p_msg_attribute => 'CHANGE'
922 ,p_resize_flag => 'Y'
923 ,p_msg_context => 'ADDP'
924 ,p_attribute1 => l_project_in_rec.pm_project_reference
925 ,p_attribute2 => ''
926 ,p_attribute3 => ''
927 ,p_attribute4 => ''
928 ,p_attribute5 => '');
929 END IF;
930 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
931 p_return_status := FND_API.G_RET_STS_ERROR;
932 RAISE FND_API.G_EXC_ERROR;
933 END IF;
934 /*Adding for the bug 2450064*/
935 END IF;
936
937 -- Bug#2638968 Ensure that Long name is unique
938 IF l_project_in_rec.long_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
939 AND l_project_in_rec.long_name IS NOT NULL THEN
940 IF pa_project_utils.check_unique_long_name
941 (l_project_in_rec.long_name,
942 NULL ) = 0 THEN
943 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
944 THEN
945 pa_interface_utils_pub.map_new_amg_msg
946 ( p_old_message_code => 'PA_PR_EPR_LONG_NAME_NOT_UNIQUE'
947 ,p_msg_attribute => 'CHANGE'
948 ,p_resize_flag => 'Y'
949 ,p_msg_context => 'ADDP'
950 ,p_attribute1 => l_project_in_rec.pm_project_reference
951 ,p_attribute2 => ''
952 ,p_attribute3 => ''
953 ,p_attribute4 => ''
954 ,p_attribute5 => '');
955 END IF;
956 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
957 p_return_status := FND_API.G_RET_STS_ERROR;
958 RAISE FND_API.G_EXC_ERROR;
959 END IF;
960 END IF;
961
962 -- bug#3014919: Ensure Project Reference is unique
963 IF l_project_in_rec.pm_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
964 AND l_project_in_rec.pm_project_reference IS NOT NULL THEN
965 IF pa_project_utils.check_unique_project_reference
966 (l_project_in_rec.pm_project_reference,
967 p_pm_product_code, -- added for bug 4870305
968 NULL ) = 0
969 THEN
970 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
971 THEN
972 pa_interface_utils_pub.map_new_amg_msg
973 ( p_old_message_code => 'PA_PROJECT_REF_NOT_UNIQUE'
974 ,p_msg_attribute => 'CHANGE'
975 ,p_resize_flag => 'Y'
976 ,p_msg_context => 'ADDP'
977 ,p_attribute1 => l_project_in_rec.pm_project_reference
978 ,p_attribute2 => ''
979 ,p_attribute3 => ''
980 ,p_attribute4 => ''
981 ,p_attribute5 => '');
982 END IF;
983 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
984 p_return_status := FND_API.G_RET_STS_ERROR;
985 RAISE FND_API.G_EXC_ERROR;
986 END IF;
987 END IF;
988
989 -- Check for implementation defined Project number generation mode
990 -- If project number generation is manual then input project
991 -- reference would be copied to project number
992 -- Hence, need to ensure that this is unique
993 -- First check whether a project number is passed.If so , use that
994 -- else use the project reference
995
996 IF (l_project_in_rec.pa_project_number IS NOT NULL AND
997 l_project_in_rec.pa_project_number <>
998 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
999 l_create_project_number := l_project_in_rec.pa_project_number;
1000 ELSE
1001 l_create_project_number := l_project_in_rec.pm_project_reference;
1002 END IF;
1003
1004
1005 IF G_PROJECT_NUMBER_GEN_MODE = 'MANUAL' THEN
1006 IF pa_project_utils.check_unique_project_number
1007 (l_create_project_number,
1008 NULL ) = 0 THEN
1009 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1010 pa_interface_utils_pub.map_new_amg_msg
1011 ( p_old_message_code => 'PA_PR_EPR_PROJ_NUM_NOT_UNIQUE'
1012 ,p_msg_attribute => 'CHANGE'
1013 ,p_resize_flag => 'Y'
1014 ,p_msg_context => 'ADDP'
1015 ,p_attribute1 => l_project_in_rec.pm_project_reference
1016 ,p_attribute2 => ''
1017 ,p_attribute3 => ''
1018 ,p_attribute4 => ''
1019 ,p_attribute5 => '');
1020 END IF;
1021 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1022 p_return_status := FND_API.G_RET_STS_ERROR;
1023 RAISE FND_API.G_EXC_ERROR;
1024 /*Adding for the bug 2450064*/
1025 ELSE
1026 pjm_seiban_pkg.project_number_dup(l_create_project_number,l_dup_name_flag);
1027
1028 IF l_dup_name_flag = 'Y' THEN
1029 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1030 THEN
1031 pa_interface_utils_pub.map_new_amg_msg
1032 ( p_old_message_code => 'PA_SEIBAN_NUM_NOT_UNIQUE'
1033 ,p_msg_attribute => 'CHANGE'
1034 ,p_resize_flag => 'Y'
1035 ,p_msg_context => ' '
1036 ,p_attribute1 => l_project_in_rec.pm_project_reference
1037 ,p_attribute2 => ''
1038 ,p_attribute3 => ''
1039 ,p_attribute4 => ''
1040 ,p_attribute5 => '');
1041 END IF;
1042 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1043 p_return_status := FND_API.G_RET_STS_ERROR;
1044 RAISE FND_API.G_EXC_ERROR;
1045 END IF;
1046 /*Adding for the bug 2450064*/
1047 END IF;
1048 -- Check for project number being numeric if project number type is
1049 -- defined as numeric
1050
1051 BEGIN
1052 IF G_PROJECT_NUMBER_TYPE = 'NUMERIC' THEN
1053 l_proj_num_numeric :=
1054 TO_NUMBER(l_create_project_number);
1055 END IF;
1056 EXCEPTION
1057 WHEN VALUE_ERROR THEN
1058 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1059 pa_interface_utils_pub.map_new_amg_msg
1060 ( p_old_message_code => 'PA_PR_NUMERIC_NUM_REQ'
1061 ,p_msg_attribute => 'CHANGE'
1062 ,p_resize_flag => 'N'
1063 ,p_msg_context => 'PROJ'
1064 ,p_attribute1 => l_project_in_rec.pm_project_reference
1065 ,p_attribute2 => ''
1066 ,p_attribute3 => ''
1067 ,p_attribute4 => ''
1068 ,p_attribute5 => '');
1069 END IF;
1070 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1071 p_return_status := FND_API.G_RET_STS_ERROR;
1072 RAISE FND_API.G_EXC_ERROR;
1073 END ;
1074 END IF;
1075
1076 IF l_project_in_rec.created_from_project_id IS NULL
1077 OR l_project_in_rec.created_from_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1078 THEN
1079
1080 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1081 THEN
1082 pa_interface_utils_pub.map_new_amg_msg
1083 ( p_old_message_code => 'PA_SOURCE_TEMPLATE_IS_MISSING'
1084 ,p_msg_attribute => 'CHANGE'
1085 ,p_resize_flag => 'Y'
1086 ,p_msg_context => 'PROJ'
1087 ,p_attribute1 => l_project_in_rec.pm_project_reference
1088 ,p_attribute2 => ''
1089 ,p_attribute3 => ''
1090 ,p_attribute4 => ''
1091 ,p_attribute5 => '');
1092 END IF;
1093 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1094 RAISE FND_API.G_EXC_ERROR;
1095 END IF;
1096
1097 -- mandatory fields for tasks is checked here
1098
1099 /*Added for bug 7830143*/
1100 OPEN c_get_org_id(l_project_in_rec.created_from_project_id);
1101 FETCH c_get_org_id INTO l_org_id;
1102 CLOSE c_get_org_id;
1103
1104 IF NVL(PA_MOAC_UTILS.GET_CURRENT_ORG_ID,-1234) <> l_org_id THEN
1105 PA_MOAC_UTILS.SET_POLICY_CONTEXT('S', l_org_id);
1106 END IF;
1107 /*Added for bug 7830143*/
1108
1109 -- code addition for bug 2254661 starts
1110 Open l_temp_flag_csr(l_project_in_rec.created_from_project_id);
1111 FETCH l_temp_flag_csr INTO l_temp_flag;
1112 IF l_temp_flag_csr%NOTFOUND
1113 THEN
1114 CLOSE l_temp_flag_csr;
1115 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1116 THEN
1117 pa_interface_utils_pub.map_new_amg_msg
1118 ( p_old_message_code => 'PA_SOURCE_TEMPLATE_INVALID'
1119 ,p_msg_attribute => 'CHANGE'
1120 ,p_resize_flag => 'N'
1121 ,p_msg_context => 'PROJ'
1122 ,p_attribute1 => l_project_in_rec.pm_project_reference
1123 ,p_attribute2 => ''
1124 ,p_attribute3 => ''
1125 ,p_attribute4 => ''
1126 ,p_attribute5 => '');
1127 END IF;
1128 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1129 RAISE FND_API.G_EXC_ERROR;
1130 END IF;
1131 CLOSE l_temp_flag_csr;
1132
1133 if l_temp_flag = 'Y' then
1134
1135 -- 5182868 Validate the template for effectiveness
1136
1137 Open l_temp_eff_flag_csr(l_project_in_rec.created_from_project_id);
1138 FETCH l_temp_eff_flag_csr INTO l_temp_eff_flag;
1139 CLOSE l_temp_eff_flag_csr;
1140
1141 -- if template is inactive then throw error message
1142
1143 IF l_temp_eff_flag = 'N' THEN
1144
1145 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1146
1147 pa_utils.add_message
1148 (
1149 p_app_short_name => 'PA'
1150 ,p_msg_name => 'PA_TEMPLATE_NOT_ACTIVE'
1151 );
1152
1153 END IF;
1154
1155 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1156 RAISE FND_API.G_EXC_ERROR;
1157
1158 END IF;
1159
1160 -- 5182868 end
1161
1162 l_created_from_proj_id := l_project_in_rec.created_from_project_id;
1163 else
1164 select created_from_project_id into l_created_from_proj_id
1165 from pa_projects_all
1166 where project_id = l_project_in_rec.created_from_project_id;
1167 end if;
1168 --code addition for bug 2254661 ends
1169
1170
1171 --CHECK FOR OVERRIDABILITY
1172 --get all the overridable fields for this project template source
1173 --changed the argument to the cursor below for bug 2254661
1174 OPEN l_override_fields_csr(l_created_from_proj_id);
1175 i := 0;
1176 LOOP
1177 i := i + 1;
1178 FETCH l_override_fields_csr INTO l_override_fields_rec;
1179 EXIT WHEN l_override_fields_csr%NOTFOUND;
1180 l_override_fields_tab(i) := l_override_fields_rec;
1181
1182 END LOOP;
1183 i := 0;
1184 CLOSE l_override_fields_csr;
1185
1186 ----dbms_output.put_line('Checking for Customer Overridability');
1187 --example of how to check for overridability
1188 /*
1189 ELSE
1190 l_is_overridable := FALSE;
1191 i := l_override_fields_tab.first;
1192 WHILE i IS NOT NULL LOOP
1193 IF l_override_fields_tab(i).pa_field_name = 'DESCRIPTION'
1194 THEN
1195 l_is_overridable := TRUE;
1196 EXIT;
1197 END IF;
1198 i := l_override_fields_tab.next(i);
1199 END LOOP;
1200
1201 IF NOT l_is_overridable
1202 THEN
1203 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1204 THEN
1205 FND_MESSAGE.SET_NAME('PA','PA_DESCRIPTION_NOT_OVERRIDABLE');
1206 FND_MSG_PUB.add;
1207 END IF;
1208
1209 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1210 RAISE FND_API.G_EXC_ERROR;
1211 END IF;
1212 */
1213 /* Code below is added for Customer Issue tracking bug. Customer Can still continue to project_in_rec_type to insert customers
1214 or can use the new record type for the same. However he cannot use both together in the same script*/
1215 ----dbms_output.put_line('Checking for Customer Overridability -- print till here ');
1216 ----dbms_output.put_line('value of l_project_in_rec.customer_id'||l_project_in_rec.customer_id);
1217 ------dbms_output.put_line('value of p_customers_in(1).customer_id'||p_customers_in(1).customer_id);
1218
1219 i := p_customers_in.first;
1220 ----dbms_output.put_line('value of i'||i);
1221 IF NOT(p_customers_in.exists(i)) THEN
1222 If l_project_in_rec.customer_id IS NOT NULL Then
1223 l_in_customer_id := l_project_in_rec.customer_id;
1224 l_bill_to_customer_id := l_project_in_rec.bill_to_customer_id;
1225 l_ship_to_customer_id := l_project_in_rec.ship_to_customer_id;
1226 l_bill_to_address_id := l_project_in_rec.bill_to_address_id;
1227 l_ship_to_address_id := l_project_in_rec.ship_to_address_id;
1228
1229 /* commenting this code for Bug#5517655 */
1230 /*
1231 If l_project_in_rec.project_relationship_code IS NULL OR l_project_in_rec.project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1232 Then
1233
1234
1235 l_project_relationship_code := 'Primary';
1236
1237 Else
1238
1239
1240 l_project_relationship_code := l_project_in_rec.project_relationship_code;
1241
1242 End If;
1243
1244 */ -- End of commenting for Bug#5517655
1245
1246 l_cust_bill_split := 100; --default contribution for any customer that is being created
1247 l_enable_top_task_cust_flag := l_project_in_rec.enable_top_task_customer_flag;
1248 End If;
1249 ElSIF p_customers_in(i).customer_id IS NOT NULL then
1250 ------dbms_output.put_line('Comes in this loop');
1251 l_in_customer_id := p_customers_in(1).customer_id;
1252 l_bill_to_customer_id:=p_customers_in(1).bill_to_customer_id;
1253 l_ship_to_customer_id:=p_customers_in(1).ship_to_customer_id;
1254 l_bill_to_address_id :=p_customers_in(1).bill_to_address_id;
1255 l_ship_to_address_id :=p_customers_in(1).ship_to_address_id;
1256
1257 /* commenting this code for Bug#5517655 */
1258 /*
1259 If p_customers_in(1).PROJECT_RELATIONSHIP_CODE IS NULL OR p_customers_in(1).PROJECT_RELATIONSHIP_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1260 Then
1261
1262 l_project_relationship_code := 'Primary';
1263 Else
1264
1265 l_project_relationship_code := p_customers_in(1).PROJECT_RELATIONSHIP_CODE;
1266 End If;
1267 */ -- End of commenting for Bug#5517655
1268 l_cust_bill_split := p_customers_in(1).Customer_Bill_Split;
1269 End If;
1270
1271 ----dbms_output.put_line('value of l_in_customer_id'||l_in_customer_id);
1272 ----dbms_output.put_line('value of l_bill_to_customer_id'||l_bill_to_customer_id);
1273 ----dbms_output.put_line('value of l_ship_to_customer_id'||l_ship_to_customer_id);
1274 ----dbms_output.put_line('value of l_bill_to_address_id'||l_bill_to_address_id);
1275 ----dbms_output.put_line('value of l_ship_to_address_id'||l_ship_to_address_id);
1276 ----dbms_output.put_line('value of l_project_relationship_code'||l_project_relationship_code);
1277 ----dbms_output.put_line('value of l_cust_bill_split'||l_cust_bill_split);
1278
1279 /* End of code changes for tracking bug */
1280
1281 /*Start Code for Bug 6408593 */
1282
1283 l_key_members := p_key_members;
1284
1285 i := l_key_members.first;
1286 WHILE i IS NOT NULL LOOP
1287 IF(l_key_members(i).project_role_meaning <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1288 THEN
1289 OPEN c_prj_key_role_type(l_key_members(i).project_role_meaning);
1290 FETCH c_prj_key_role_type INTO l_key_members(i).project_role_type;
1291 CLOSE c_prj_key_role_type;
1292 END IF;
1293 i := l_key_members.next(i);
1294 END LOOP;
1295 /*End Code for Bug 6408593 */
1296
1297 /* code added for the bug#1891621, starts here */
1298 i := l_override_fields_tab.first;
1299
1300 WHILE i IS NOT NULL LOOP
1301 IF l_override_fields_tab(i).mandatory_flag = 'Y' THEN
1302 IF l_override_fields_tab(i).pa_field_name = 'CARRYING_OUT_ORGANIZATION_ID' THEN
1303 IF l_project_in_rec.carrying_out_organization_id IS NULL
1304 OR l_project_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1305 THEN
1306
1307 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1308 THEN
1309 pa_interface_utils_pub.map_new_amg_msg
1310 ( p_old_message_code => 'PA_ORGANIZATION_ID_IS_NULL'
1311 ,p_msg_attribute => 'CHANGE'
1312 ,p_resize_flag => 'N'
1313 ,p_msg_context => 'PROJ'
1314 ,p_attribute1 => l_project_in_rec.pm_project_reference
1315 ,p_attribute2 => 'Organization'
1316 ,p_attribute3 => ''
1317 ,p_attribute4 => ''
1318 ,p_attribute5 => '');
1319 END IF;
1320 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1321 p_return_status := FND_API.G_RET_STS_ERROR;
1322 RAISE FND_API.G_EXC_ERROR;
1323
1324 END IF;
1325
1326 ELSIF l_override_fields_tab(i).pa_field_name = 'CLASSIFICATION' THEN
1327
1328 l_class_categories := p_class_categories;
1329 j := l_class_categories.first;
1330
1331 IF j IS NULL THEN
1332
1333 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1334 THEN
1335 pa_interface_utils_pub.map_new_amg_msg
1336 ( p_old_message_code => 'PA_CLASSIFICATION_IS_NULL'
1337 ,p_msg_attribute => 'CHANGE'
1338 ,p_resize_flag => 'N'
1339 ,p_msg_context => 'PROJ'
1340 ,p_attribute1 => l_project_in_rec.pm_project_reference
1341 ,p_attribute2 => ''
1342 ,p_attribute3 => ''
1343 ,p_attribute4 => ''
1344 ,p_attribute5 => '');
1345 END IF;
1346 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1347 p_return_status := FND_API.G_RET_STS_ERROR;
1348 RAISE FND_API.G_EXC_ERROR;
1349
1350 END IF;
1351
1352 l_class_code_categories := 0;
1353
1354 WHILE j IS NOT NULL LOOP
1355 IF upper(l_override_fields_tab(i).type) = upper(l_class_categories(j).class_category)
1356 AND l_class_categories(j).class_code IS NOT NULL
1357 THEN
1358 l_class_code_categories := 1;
1359 -- check whether the class category and class code combination is a valid one
1360 IF pa_project_pvt.check_class_code_valid(l_class_categories(j).class_category,
1361 l_class_categories(j).class_code) = 'N'
1362 THEN
1363 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1364 THEN
1365 pa_interface_utils_pub.map_new_amg_msg
1366 ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
1367 ,p_msg_attribute => 'CHANGE'
1368 ,p_resize_flag => 'N'
1369 ,p_msg_context => 'PROJ'
1370 ,p_attribute1 => l_project_in_rec.pm_project_reference
1371 ,p_attribute2 => ''
1372 ,p_attribute3 => ''
1373 ,p_attribute4 => ''
1374 ,p_attribute5 => '');
1375 END IF;
1376 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1377 p_return_status := FND_API.G_RET_STS_ERROR;
1378 RAISE FND_API.G_EXC_ERROR;
1379 END IF;
1380
1381 EXIT;
1382 END IF;
1383 j := l_class_categories.next(j);
1384 END LOOP;
1385
1386 IF l_class_code_categories <> 1
1387 THEN
1388 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1389 THEN
1390 pa_interface_utils_pub.map_new_amg_msg
1391 ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
1392 ,p_msg_attribute => 'CHANGE'
1393 ,p_resize_flag =>'N' --'Y'is Replaced with 'N';bug#1891621
1394 ,p_msg_context => 'PROJ'
1395 ,p_attribute1 => l_project_in_rec.pm_project_reference
1396 ,p_attribute2 => ''
1397 ,p_attribute3 => ''
1398 ,p_attribute4 => ''
1399 ,p_attribute5 => '');
1400 END IF;
1401 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1402 p_return_status := FND_API.G_RET_STS_ERROR;
1403 RAISE FND_API.G_EXC_ERROR;
1404 END IF;
1405 ELSIF l_override_fields_tab(i).pa_field_name = 'COMPLETION_DATE' THEN
1406 IF l_project_in_rec.completion_date IS NULL
1407 OR l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1408 THEN
1409
1410 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1411 THEN
1412 pa_interface_utils_pub.map_new_amg_msg
1413 ( p_old_message_code => 'PA_COMPLETION_DATE_IS_NULL'
1414 ,p_msg_attribute => 'CHANGE'
1415 ,p_resize_flag => 'N'
1416 ,p_msg_context => 'PROJ'
1417 ,p_attribute1 => l_project_in_rec.pm_project_reference
1418 ,p_attribute2 => ''
1419 ,p_attribute3 => ''
1420 ,p_attribute4 => ''
1421 ,p_attribute5 => '');
1422 END IF;
1423 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1424 p_return_status := FND_API.G_RET_STS_ERROR;
1425 RAISE FND_API.G_EXC_ERROR;
1426
1427 END IF;
1428
1429 ELSIF l_override_fields_tab(i).pa_field_name = 'START_DATE' THEN
1430 IF l_project_in_rec.start_date IS NULL
1431 OR l_project_in_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1432 THEN
1433
1434 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1435 THEN
1436 pa_interface_utils_pub.map_new_amg_msg
1437 ( p_old_message_code => 'PA_START_DATE_IS_NULL'
1438 ,p_msg_attribute => 'CHANGE'
1439 ,p_resize_flag => 'N'
1440 ,p_msg_context => 'PROJ'
1441 ,p_attribute1 => l_project_in_rec.pm_project_reference
1442 ,p_attribute2 => ''
1443 ,p_attribute3 => ''
1444 ,p_attribute4 => ''
1445 ,p_attribute5 => '');
1446 END IF;
1447 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1448 p_return_status := FND_API.G_RET_STS_ERROR;
1449 RAISE FND_API.G_EXC_ERROR;
1450
1451 END IF;
1452 ELSIF l_override_fields_tab(i).pa_field_name = 'CUSTOMER_NAME' THEN
1453 /* Code commented for tracking bug
1454 IF l_project_in_rec.customer_id IS NULL
1455 OR l_project_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1456 /* Code added for tracking bug by aditi */
1457 ----dbms_output.put_line('value of l_in_customer_id'||l_in_customer_id);
1458 IF l_in_customer_id IS NULL
1459 OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1460 /* End of Code changes */
1461 THEN
1462 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1463 THEN
1464 pa_interface_utils_pub.map_new_amg_msg
1465 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
1466 ,p_msg_attribute => 'CHANGE'
1467 ,p_resize_flag => 'N'
1468 ,p_msg_context => 'PROJ'
1469 ,p_attribute1 => l_project_in_rec.pm_project_reference
1470 ,p_attribute2 => ''
1471 ,p_attribute3 => ''
1472 ,p_attribute4 => ''
1473 ,p_attribute5 => '');
1474 END IF;
1475 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1476 p_return_status := FND_API.G_RET_STS_ERROR;
1477 RAISE FND_API.G_EXC_ERROR;
1478
1479 END IF;
1480
1481 --Customer Account relationship Changes:
1482
1483 ELSIF l_override_fields_tab(i).pa_field_name = 'BILL_TO_CUSTOMER' THEN
1484 /* Code commented for tracking bug
1485 IF l_project_in_rec.bill_to_customer_id IS NULL
1486 OR l_project_in_rec.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1487 /* Code added for tracking bug by aditi */
1488 IF l_bill_to_customer_id IS NULL
1489 OR l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1490 /* End of Code changes */
1491 THEN
1492
1493 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1494 THEN
1495 pa_interface_utils_pub.map_new_amg_msg
1496 ( p_old_message_code => 'PA_BILL_TO_CUST_ID_IS_NULL'
1497 ,p_msg_attribute => 'CHANGE'
1498 ,p_resize_flag => 'N'
1499 ,p_msg_context => 'PROJ'
1500 ,p_attribute1 => l_project_in_rec.pm_project_reference
1501 ,p_attribute2 => ''
1502 ,p_attribute3 => ''
1503 ,p_attribute4 => ''
1504 ,p_attribute5 => '');
1505 END IF;
1506 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1507 p_return_status := FND_API.G_RET_STS_ERROR;
1508 RAISE FND_API.G_EXC_ERROR;
1509
1510 END IF;
1511
1512 ELSIF l_override_fields_tab(i).pa_field_name = 'SHIP_TO_CUSTOMER' THEN
1513 /* Code commented for tracking bug
1514 IF l_project_in_rec.ship_to_customer_id IS NULL
1515 OR l_project_in_rec.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1516 /* Code added for tracking bug by aditi */
1517 IF l_ship_to_customer_id IS NULL
1518 OR l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1519 /* End of Code changes */
1520 THEN
1521
1522 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1523 THEN
1524 pa_interface_utils_pub.map_new_amg_msg
1525 ( p_old_message_code => 'PA_SHIP_TO_CUST_ID_IS_NULL'
1526 ,p_msg_attribute => 'CHANGE'
1527 ,p_resize_flag => 'N'
1528 ,p_msg_context => 'PROJ'
1529 ,p_attribute1 => l_project_in_rec.pm_project_reference
1530 ,p_attribute2 => ''
1531 ,p_attribute3 => ''
1532 ,p_attribute4 => ''
1533 ,p_attribute5 => '');
1534 END IF;
1535 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1536 p_return_status := FND_API.G_RET_STS_ERROR;
1537 RAISE FND_API.G_EXC_ERROR;
1538
1539 END IF;
1540
1541 ----dbms_output.put_line('Overriding bill to cst and ship to cst');
1542
1543 ELSIF l_override_fields_tab(i).pa_field_name = 'DESCRIPTION' THEN
1544 IF l_project_in_rec.description IS NULL
1545 OR l_project_in_rec.description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1546 THEN
1547
1548 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1549 THEN
1550 pa_interface_utils_pub.map_new_amg_msg
1551 ( p_old_message_code => 'PA_DESCRIPTION_IS_NULL'
1552 ,p_msg_attribute => 'CHANGE'
1553 ,p_resize_flag => 'N'
1554 ,p_msg_context => 'PROJ'
1555 ,p_attribute1 => l_project_in_rec.pm_project_reference
1556 ,p_attribute2 => ''
1557 ,p_attribute3 => ''
1558 ,p_attribute4 => ''
1559 ,p_attribute5 => '');
1560 END IF;
1561 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1562 p_return_status := FND_API.G_RET_STS_ERROR;
1563 RAISE FND_API.G_EXC_ERROR;
1564
1565 END IF;
1566
1567 ELSIF l_override_fields_tab(i).pa_field_name = 'KEY_MEMBER' THEN
1568
1569 -- l_key_members := p_key_members; Commented for Bug 6408593
1570 j := l_key_members.first;
1571
1572 IF j IS NULL THEN
1573
1574 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1575 THEN
1576 pa_interface_utils_pub.map_new_amg_msg
1577 ( p_old_message_code => 'PA_KEY_MEMBER_IS_NULL'
1578 ,p_msg_attribute => 'CHANGE'
1579 ,p_resize_flag => 'N'
1580 ,p_msg_context => 'PROJ'
1581 ,p_attribute1 => l_project_in_rec.pm_project_reference
1582 ,p_attribute2 => ''
1583 ,p_attribute3 => ''
1584 ,p_attribute4 => ''
1585 ,p_attribute5 => '');
1586 END IF;
1587 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1588 p_return_status := FND_API.G_RET_STS_ERROR;
1589 RAISE FND_API.G_EXC_ERROR;
1590
1591 END IF;
1592
1593 l_key_member := 0;
1594
1595 WHILE j IS NOT NULL LOOP
1596 IF upper(l_override_fields_tab(i).type) = upper(l_key_members(j).project_role_type)
1597 AND l_key_members(j).person_id IS NOT NULL
1598 THEN
1599 l_key_member := 1;
1600 EXIT;
1601 END IF;
1602 j := l_key_members.next(j);
1603 END LOOP;
1604
1605 IF l_key_member <> 1
1606 THEN
1607 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1608 THEN
1609 pa_interface_utils_pub.map_new_amg_msg
1610 ( p_old_message_code => 'PA_KEY_MEMBER_IS_NULL'
1611 ,p_msg_attribute => 'CHANGE'
1612 ,p_resize_flag => 'N'
1613 ,p_msg_context => 'PROJ'
1614 ,p_attribute1 => l_project_in_rec.pm_project_reference
1615 ,p_attribute2 => ''
1616 ,p_attribute3 => ''
1617 ,p_attribute4 => ''
1618 ,p_attribute5 => '');
1619 END IF;
1620 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1621 p_return_status := FND_API.G_RET_STS_ERROR;
1622 RAISE FND_API.G_EXC_ERROR;
1623 END IF;
1624
1625 ELSIF l_override_fields_tab(i).pa_field_name = 'DISTRIBUTION_RULE' THEN
1626 IF l_project_in_rec.distribution_rule IS NULL
1627 OR l_project_in_rec.distribution_rule = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1628 THEN
1629
1630 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1631 THEN
1632 pa_interface_utils_pub.map_new_amg_msg
1633 ( p_old_message_code => 'PA_DISTRIBUTION_RULE_NULL'
1634 ,p_msg_attribute => 'CHANGE'
1635 ,p_resize_flag => 'N'
1636 ,p_msg_context => 'PROJ'
1637 ,p_attribute1 => l_project_in_rec.pm_project_reference
1638 ,p_attribute2 => ''
1639 ,p_attribute3 => ''
1640 ,p_attribute4 => ''
1641 ,p_attribute5 => '');
1642 END IF;
1643 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1644 p_return_status := FND_API.G_RET_STS_ERROR;
1645 RAISE FND_API.G_EXC_ERROR;
1646
1647 END IF;
1648
1649 ELSIF l_override_fields_tab(i).pa_field_name = 'PROJECT_STATUS_CODE' THEN
1650 IF l_project_in_rec.project_status_code IS NULL
1651 OR l_project_in_rec.project_status_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1652 THEN
1653 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1654 THEN
1655 pa_interface_utils_pub.map_new_amg_msg
1656 ( p_old_message_code => 'PA_PRJ_STATUS_CODE_IS_NULL'
1657 ,p_msg_attribute => 'CHANGE'
1658 ,p_resize_flag => 'N'
1659 ,p_msg_context => 'PROJ'
1660 ,p_attribute1 => l_project_in_rec.pm_project_reference
1661 ,p_attribute2 => ''
1662 ,p_attribute3 => ''
1663 ,p_attribute4 => ''
1664 ,p_attribute5 => '');
1665 END IF;
1666 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1667 p_return_status := FND_API.G_RET_STS_ERROR;
1668 RAISE FND_API.G_EXC_ERROR;
1669
1670 END IF;
1671
1672 ELSIF l_override_fields_tab(i).pa_field_name = 'PUBLIC_SECTOR_FLAG' THEN
1673 IF l_project_in_rec.public_sector_flag IS NULL
1674 OR l_project_in_rec.public_sector_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1675 THEN
1676
1677 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1678 THEN
1679 pa_interface_utils_pub.map_new_amg_msg
1680 ( p_old_message_code => 'PA_PUB_SECTOR_FLAG_IS_NULL'
1681 ,p_msg_attribute => 'CHANGE'
1682 ,p_resize_flag => 'N'
1683 ,p_msg_context => 'PROJ'
1684 ,p_attribute1 => l_project_in_rec.pm_project_reference
1685 ,p_attribute2 => ''
1686 ,p_attribute3 => ''
1687 ,p_attribute4 => ''
1688 ,p_attribute5 => '');
1689 END IF;
1690 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1691 p_return_status := FND_API.G_RET_STS_ERROR;
1692 RAISE FND_API.G_EXC_ERROR;
1693
1694 END IF;
1695
1696 ELSIF l_override_fields_tab(i).pa_field_name = 'TEAM_TEMPLATE_ID' THEN
1697 IF l_project_in_rec.team_template_id IS NULL
1698 OR l_project_in_rec.team_template_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1699 THEN
1700
1701 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1702 THEN
1703 pa_interface_utils_pub.map_new_amg_msg
1704 ( p_old_message_code => 'PA_TEAM_TMPLT_ID_IS_NULL'
1705 ,p_msg_attribute => 'CHANGE'
1706 ,p_resize_flag => 'N'
1707 ,p_msg_context => 'PROJ'
1708 ,p_attribute1 => l_project_in_rec.pm_project_reference
1709 ,p_attribute2 => ''
1710 ,p_attribute3 => ''
1711 ,p_attribute4 => ''
1712 ,p_attribute5 => '');
1713 END IF;
1714 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1715 p_return_status := FND_API.G_RET_STS_ERROR;
1716 RAISE FND_API.G_EXC_ERROR;
1717
1718 END IF;
1719
1720 ELSIF l_override_fields_tab(i).pa_field_name = 'COUNTRY' THEN
1721 IF l_project_in_rec.country_code IS NULL
1722 OR l_project_in_rec.country_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1723 THEN
1724
1725 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1726 THEN
1727 pa_interface_utils_pub.map_new_amg_msg
1728 ( p_old_message_code => 'PA_COUNTRY_CODE_IS_NULL'
1729 ,p_msg_attribute => 'CHANGE'
1730 ,p_resize_flag => 'N'
1731 ,p_msg_context => 'PROJ'
1732 ,p_attribute1 => l_project_in_rec.pm_project_reference
1733 ,p_attribute2 => ''
1734 ,p_attribute3 => ''
1735 ,p_attribute4 => ''
1736 ,p_attribute5 => '');
1737 END IF;
1738 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1739 p_return_status := FND_API.G_RET_STS_ERROR;
1740 RAISE FND_API.G_EXC_ERROR;
1741
1742 END IF;
1743
1744 ELSIF l_override_fields_tab(i).pa_field_name = 'STATE_REGION' THEN
1745 IF l_project_in_rec.region IS NULL
1746 OR l_project_in_rec.region = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1747 THEN
1748
1749 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1750 THEN
1751 pa_interface_utils_pub.map_new_amg_msg
1752 ( p_old_message_code => 'PA_REGION_IS_NULL'
1753 ,p_msg_attribute => 'CHANGE'
1754 ,p_resize_flag => 'N'
1755 ,p_msg_context => 'PROJ'
1756 ,p_attribute1 => l_project_in_rec.pm_project_reference
1757 ,p_attribute2 => ''
1758 ,p_attribute3 => ''
1759 ,p_attribute4 => ''
1760 ,p_attribute5 => '');
1761 END IF;
1762 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1763 p_return_status := FND_API.G_RET_STS_ERROR;
1764 RAISE FND_API.G_EXC_ERROR;
1765
1766 END IF;
1767
1768 ELSIF l_override_fields_tab(i).pa_field_name = 'CITY' THEN
1769 IF l_project_in_rec.city IS NULL
1770 OR l_project_in_rec.city = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1771 THEN
1772
1773 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1774 THEN
1775 pa_interface_utils_pub.map_new_amg_msg
1776 ( p_old_message_code => 'PA_CITY_IS_NULL'
1777 ,p_msg_attribute => 'CHANGE'
1778 ,p_resize_flag => 'N'
1779 ,p_msg_context => 'PROJ'
1780 ,p_attribute1 => l_project_in_rec.pm_project_reference
1781 ,p_attribute2 => ''
1782 ,p_attribute3 => ''
1783 ,p_attribute4 => ''
1784 ,p_attribute5 => '');
1785 END IF;
1786 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1787 p_return_status := FND_API.G_RET_STS_ERROR;
1788 RAISE FND_API.G_EXC_ERROR;
1789
1790 END IF;
1791
1792 ELSIF l_override_fields_tab(i).pa_field_name = 'EXPECTED_APPROVAL_DATE' THEN
1793 IF l_project_in_rec.expected_approval_date IS NULL
1794 OR l_project_in_rec.expected_approval_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1795 THEN
1796
1797 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1798 THEN
1799 pa_interface_utils_pub.map_new_amg_msg
1800 ( p_old_message_code => 'PA_EXP_APPR_DATE_IS_NULL'
1801 ,p_msg_attribute => 'CHANGE'
1802 ,p_resize_flag => 'N'
1803 ,p_msg_context => 'PROJ'
1804 ,p_attribute1 => l_project_in_rec.pm_project_reference
1805 ,p_attribute2 => ''
1806 ,p_attribute3 => ''
1807 ,p_attribute4 => ''
1808 ,p_attribute5 => '');
1809 END IF;
1810 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1811 p_return_status := FND_API.G_RET_STS_ERROR;
1812 RAISE FND_API.G_EXC_ERROR;
1813
1814 END IF;
1815
1816 ELSIF l_override_fields_tab(i).pa_field_name = 'PROBABILITY_MEMBER_ID' THEN
1817 IF l_project_in_rec.probability_member_id IS NULL
1818 OR l_project_in_rec.probability_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1819 THEN
1820
1821 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1822 THEN
1823 pa_interface_utils_pub.map_new_amg_msg
1824 ( p_old_message_code => 'PA_PROB_MEMBER_ID_IS_NULL'
1825 ,p_msg_attribute => 'CHANGE'
1826 ,p_resize_flag => 'N'
1827 ,p_msg_context => 'PROJ'
1828 ,p_attribute1 => l_project_in_rec.pm_project_reference
1829 ,p_attribute2 => ''
1830 ,p_attribute3 => ''
1831 ,p_attribute4 => ''
1832 ,p_attribute5 => '');
1833 END IF;
1834 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1835 p_return_status := FND_API.G_RET_STS_ERROR;
1836 RAISE FND_API.G_EXC_ERROR;
1837
1838 END IF;
1839
1840 ELSIF l_override_fields_tab(i).pa_field_name = 'PROJECT_VALUE' THEN
1841 IF l_project_in_rec.project_value IS NULL
1842 OR l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1843 THEN
1844
1845 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1846 THEN
1847 pa_interface_utils_pub.map_new_amg_msg
1848 ( p_old_message_code => 'PA_PROJECT_VALUE_IS_NULL'
1849 ,p_msg_attribute => 'CHANGE'
1850 ,p_resize_flag => 'N'
1851 ,p_msg_context => 'PROJ'
1852 ,p_attribute1 => l_project_in_rec.pm_project_reference
1853 ,p_attribute2 => ''
1854 ,p_attribute3 => ''
1855 ,p_attribute4 => ''
1856 ,p_attribute5 => '');
1857 END IF;
1858 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1859 p_return_status := FND_API.G_RET_STS_ERROR;
1860 RAISE FND_API.G_EXC_ERROR;
1861
1862 END IF;
1863
1864 -- anlee opportunity value changes
1865 ELSIF l_override_fields_tab(i).pa_field_name = 'OPP_VALUE_CURRENCY_CODE' THEN
1866 IF l_project_in_rec.project_value IS NULL
1867 OR l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1868 THEN
1869
1870 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1871 THEN
1872 pa_interface_utils_pub.map_new_amg_msg
1873 ( p_old_message_code => 'PA_OPP_CURR_CODE_IS_NULL'
1874 ,p_msg_attribute => 'CHANGE'
1875 ,p_resize_flag => 'N'
1876 ,p_msg_context => 'PROJ'
1877 ,p_attribute1 => l_project_in_rec.pm_project_reference
1878 ,p_attribute2 => ''
1879 ,p_attribute3 => ''
1880 ,p_attribute4 => ''
1881 ,p_attribute5 => '');
1882 END IF;
1883 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1884 p_return_status := FND_API.G_RET_STS_ERROR;
1885 RAISE FND_API.G_EXC_ERROR;
1886
1887 END IF;
1888
1889 -- anlee org role changes
1890 ELSIF l_override_fields_tab(i).pa_field_name = 'ORG_ROLE' THEN
1891
1892 l_org_roles := p_org_roles;
1893 j := l_org_roles.first;
1894
1895 IF j IS NULL THEN
1896
1897 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1898 THEN
1899 pa_interface_utils_pub.map_new_amg_msg
1900 ( p_old_message_code => 'PA_ORG_ROLE_IS_NULL'
1901 ,p_msg_attribute => 'CHANGE'
1902 ,p_resize_flag => 'N'
1903 ,p_msg_context => 'PROJ'
1904 ,p_attribute1 => l_project_in_rec.pm_project_reference
1905 ,p_attribute2 => ''
1906 ,p_attribute3 => ''
1907 ,p_attribute4 => ''
1908 ,p_attribute5 => '');
1909 END IF;
1910 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1911 p_return_status := FND_API.G_RET_STS_ERROR;
1912 RAISE FND_API.G_EXC_ERROR;
1913
1914 END IF;
1915
1916 l_org_role := 0;
1917
1918 WHILE j IS NOT NULL LOOP
1919 IF upper(l_override_fields_tab(i).type) = upper(l_org_roles(j).project_role_type)
1920 AND l_org_roles(j).person_id IS NOT NULL
1921 THEN
1922 l_org_role := 1;
1923 EXIT;
1924 END IF;
1925 j := l_org_roles.next(j);
1926 END LOOP;
1927
1928 IF l_org_role <> 1
1929 THEN
1930 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1931 THEN
1932 pa_interface_utils_pub.map_new_amg_msg
1933 ( p_old_message_code => 'PA_ORG_ROLE_IS_NULL'
1934 ,p_msg_attribute => 'CHANGE'
1935 ,p_resize_flag => 'N'
1936 ,p_msg_context => 'PROJ'
1937 ,p_attribute1 => l_project_in_rec.pm_project_reference
1938 ,p_attribute2 => ''
1939 ,p_attribute3 => ''
1940 ,p_attribute4 => ''
1941 ,p_attribute5 => '');
1942 END IF;
1943 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1944 p_return_status := FND_API.G_RET_STS_ERROR;
1945 RAISE FND_API.G_EXC_ERROR;
1946 END IF;
1947
1948 /* Added this code for bug#2672646 if Long Name is an Quick Entry Field */
1949
1950 ELSIF l_override_fields_tab(i).pa_field_name = 'LONG_NAME' THEN
1951 IF l_project_in_rec.long_name IS NULL
1952 OR l_project_in_rec.long_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1953 THEN
1954 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1955 THEN
1956 pa_interface_utils_pub.map_new_amg_msg
1957 ( p_old_message_code => 'PA_PRJ_LONG_NAME_IS_NULL'
1958 ,p_msg_attribute => 'CHANGE'
1959 ,p_resize_flag => 'N'
1960 ,p_msg_context => 'PROJ'
1961 ,p_attribute1 => l_project_in_rec.pm_project_reference
1962 ,p_attribute2 => ''
1963 ,p_attribute3 => ''
1964 ,p_attribute4 => ''
1965 ,p_attribute5 => '');
1966 END IF;
1967 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1968 p_return_status := FND_API.G_RET_STS_ERROR;
1969 RAISE FND_API.G_EXC_ERROR;
1970 END IF;
1971
1972 /* End of code added for bug#2672646 */
1973
1974 END IF; /* l_override_fields_tab(i).pa_field_name */
1975 END IF; /* mandatory_flag = 'Y' */
1976 i := l_override_fields_tab.next(i);
1977 END LOOP;
1978
1979 /* code added for the bug#1891621, ends here */
1980
1981
1982 /* Bug#2672646 - If long name is passed as null or has default value, then we must default to the project name,
1983 This if loop will succeed only if long name is not a mandatory quick entry field, otherwise error
1984 would have been given above itself
1985 Start of code for bug#2672646 */
1986
1987 IF l_project_in_rec.long_name IS NULL
1988 OR l_project_in_rec.long_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1989 THEN
1990 l_project_in_rec.long_name := l_project_in_rec.project_name;
1991 END IF;
1992
1993 /* End of code for bug#2672646 */
1994
1995 -- Need to get the project type of the source template, to validate
1996 -- distribution rule
1997 -- Validates the ID of the source template as well.
1998
1999 OPEN l_source_project_type_csr(l_project_in_rec.created_from_project_id);
2000 FETCH l_source_project_type_csr INTO l_source_project_type;
2001
2002 IF l_source_project_type_csr%NOTFOUND
2003 THEN
2004 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2005 THEN
2006 pa_interface_utils_pub.map_new_amg_msg
2007 ( p_old_message_code => 'PA_SOURCE_TEMPLATE_INVALID'
2008 ,p_msg_attribute => 'CHANGE'
2009 ,p_resize_flag => 'N'
2010 ,p_msg_context => 'PROJ'
2011 ,p_attribute1 => l_project_in_rec.pm_project_reference
2012 ,p_attribute2 => ''
2013 ,p_attribute3 => ''
2014 ,p_attribute4 => ''
2015 ,p_attribute5 => '');
2016 END IF;
2017
2018 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
2019 CLOSE l_source_project_type_csr;
2020 RAISE FND_API.G_EXC_ERROR;
2021 END IF;
2022
2023 CLOSE l_source_project_type_csr;
2024
2025 IF l_project_in_rec.distribution_rule <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2026 AND l_project_in_rec.distribution_rule IS NOT NULL
2027 THEN
2028 IF pa_project_pvt.check_valid_dist_rule
2029 (l_source_project_type,
2030 l_project_in_rec.distribution_rule,
2031 l_project_in_rec.enable_top_task_inv_mth_flag ) = 'N' --Bug 3279981
2032 THEN
2033 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2034 THEN
2035 pa_interface_utils_pub.map_new_amg_msg
2036 ( p_old_message_code => 'PA_INVALID_DIST_RULE'
2037 ,p_msg_attribute => 'CHANGE'
2038 ,p_resize_flag => 'N'
2039 ,p_msg_context => 'PROJ'
2040 ,p_attribute1 => l_project_in_rec.pm_project_reference
2041 ,p_attribute2 => ''
2042 ,p_attribute3 => ''
2043 ,p_attribute4 => ''
2044 ,p_attribute5 => '');
2045 END IF;
2046
2047 RAISE FND_API.G_EXC_ERROR;
2048 END IF;
2049 END IF;
2050
2051 IF l_project_in_rec.carrying_out_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2052 AND l_project_in_rec.carrying_out_organization_id IS NOT NULL
2053 THEN
2054 IF pa_project_pvt.check_valid_org
2055 (l_project_in_rec.carrying_out_organization_id) = 'N'
2056 THEN
2057 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2058 THEN
2059 pa_interface_utils_pub.map_new_amg_msg
2060 ( p_old_message_code => 'PA_INVALID_ORG'
2061 ,p_msg_attribute => 'CHANGE'
2062 ,p_resize_flag => 'N'
2063 ,p_msg_context => 'PROJ'
2064 ,p_attribute1 => l_project_in_rec.pm_project_reference
2065 ,p_attribute2 => ''
2066 ,p_attribute3 => ''
2067 ,p_attribute4 => ''
2068 ,p_attribute5 => '');
2069 END IF;
2070
2071 RAISE FND_API.G_EXC_ERROR;
2072 END IF;
2073 END IF;
2074
2075 l_project_start_date := l_project_in_rec.start_date;
2076 l_project_completion_date := l_project_in_rec.completion_date;
2077
2078 -- completion date can be specified only if there is a start date
2079 IF l_project_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2080 AND ( l_project_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2081 OR l_project_start_date IS NULL )
2082 THEN
2083 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2084 THEN
2085 pa_interface_utils_pub.map_new_amg_msg
2086 ( p_old_message_code => 'PA_PR_START_DATE_NEEDED'
2087 ,p_msg_attribute => 'CHANGE'
2088 ,p_resize_flag => 'N'
2089 ,p_msg_context => 'PROJ'
2090 ,p_attribute1 => l_project_in_rec.pm_project_reference
2091 ,p_attribute2 => ''
2092 ,p_attribute3 => ''
2093 ,p_attribute4 => ''
2094 ,p_attribute5 => '');
2095 END IF;
2096 RAISE FND_API.G_EXC_ERROR;
2097 END IF;
2098
2099 -- completion date cannot be less than start date
2100 IF l_project_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2101 AND l_project_start_date IS NOT NULL
2102 AND l_project_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2103 AND l_project_completion_date IS NOT NULL
2104 AND l_project_completion_date < l_project_start_date
2105 THEN
2106
2107 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2108 THEN
2109
2110 -- 5182972 Commented below code , which was throwing wrong error message
2111 /*
2112 pa_interface_utils_pub.map_new_amg_msg
2113 ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
2114 ,p_msg_attribute => 'CHANGE'
2115 ,p_resize_flag => 'N'
2116 ,p_msg_context => 'PROJ'
2117 ,p_attribute1 => l_project_in_rec.pm_project_reference
2118 ,p_attribute2 => ''
2119 ,p_attribute3 => ''
2120 ,p_attribute4 => ''
2121 ,p_attribute5 => '');
2122 */
2123
2124 -- Added below code which throws correct error message
2125 pa_utils.add_message
2126 (
2127 p_app_short_name => 'PA'
2128 ,p_msg_name => 'PA_SU_INVALID_DATES'
2129 );
2130
2131 -- 5182972 end
2132 END IF;
2133
2134 RAISE FND_API.G_EXC_ERROR;
2135 END IF;
2136 /*
2137 IF l_project_in_rec.actual_start_date IS NULL OR
2138 l_project_in_rec.actual_start_date =
2139 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2140 l_actual_start_date := NULL;
2141 ELSE
2142 l_actual_start_date := l_project_in_rec.actual_start_date;
2143 END IF;
2144
2145 IF l_project_in_rec.actual_finish_date IS NULL OR
2146 l_project_in_rec.actual_finish_date =
2147 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2148 l_actual_finish_date := NULL;
2149 ELSE
2150 l_actual_finish_date := l_project_in_rec.actual_finish_date;
2151 END IF;
2152 */
2153
2154 l_actual_start_date := null;
2155 l_actual_finish_date := null;
2156 --Task progress changes. These dates will be passed from task progress
2157
2158 IF l_project_in_rec.early_start_date IS NULL OR
2159 l_project_in_rec.early_start_date =
2160 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2161 l_early_start_date := NULL;
2162 ELSE
2163 l_early_start_date := l_project_in_rec.early_start_date;
2164 END IF;
2165
2166
2167 IF l_project_in_rec.early_start_date IS NULL OR
2168 l_project_in_rec.early_start_date =
2169 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2170 l_early_start_date := NULL;
2171 ELSE
2172 l_early_start_date := l_project_in_rec.early_start_date;
2173 END IF;
2174
2175
2176 IF l_project_in_rec.early_finish_date IS NULL OR
2177 l_project_in_rec.early_finish_date =
2178 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2179 l_early_finish_date := NULL;
2180 ELSIF l_early_start_date IS NOT NULL THEN
2181 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
2182 IF l_project_in_rec.early_finish_date < l_early_start_date THEN
2183
2184 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2185
2186 pa_utils.add_message
2187 (
2188 p_app_short_name => 'PA'
2189 ,p_msg_name => 'PA_SU_INVALID_DATES'
2190 );
2191
2192 END IF;
2193
2194 RAISE FND_API.G_EXC_ERROR;
2195 END IF;
2196 l_early_finish_date := l_project_in_rec.early_finish_date;
2197
2198 ELSE --End of Logic added to check whether the finish date is earlier than the start date.Bug#5185673
2199 l_early_finish_date := l_project_in_rec.early_finish_date;
2200 END IF;
2201
2202
2203 IF l_project_in_rec.late_start_date IS NULL OR
2204 l_project_in_rec.late_start_date =
2205 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2206 l_late_start_date := NULL;
2207 ELSE
2208 l_late_start_date := l_project_in_rec.late_start_date;
2209 END IF;
2210
2211 IF l_project_in_rec.late_finish_date IS NULL OR
2212 l_project_in_rec.late_finish_date =
2213 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2214 l_late_finish_date := NULL;
2215 ELSIF l_late_start_date IS NOT NULL THEN
2216 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
2217 IF l_project_in_rec.late_finish_date < l_late_start_date THEN
2218
2219 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2220
2221 pa_utils.add_message
2222 (
2223 p_app_short_name => 'PA'
2224 ,p_msg_name => 'PA_SU_INVALID_DATES'
2225 );
2226
2227 END IF;
2228
2229 RAISE FND_API.G_EXC_ERROR;
2230 END IF;
2231 l_late_finish_date := l_project_in_rec.late_finish_date;
2232 ELSE --End of Logic added to check whether the finish date is earlier than the start date.Bug#5185673
2233 l_late_finish_date := l_project_in_rec.late_finish_date;
2234 END IF;
2235
2236 IF l_project_in_rec.scheduled_start_date IS NULL OR
2237 l_project_in_rec.scheduled_start_date =
2238 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2239 l_scheduled_start_date := NULL;
2240 ELSE
2241 l_scheduled_start_date := l_project_in_rec.scheduled_start_date;
2242 END IF;
2243
2244 IF l_project_in_rec.scheduled_finish_date IS NULL OR
2245 l_project_in_rec.scheduled_finish_date =
2246 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2247 l_scheduled_finish_date := NULL;
2248 ELSE
2249 l_scheduled_finish_date := l_project_in_rec.scheduled_finish_date;
2250 END IF;
2251
2252 -- Call the client extension to override the default values for
2253 -- project start/completion dates
2254
2255 PA_Client_Extn_PM.customize_dates (
2256 p_pm_project_reference => l_project_in_rec.pm_project_reference,
2257 p_pm_product_code => p_pm_product_code,
2258 p_in_start_date => l_project_in_rec.start_date,
2259 p_in_completion_date => l_project_in_rec.completion_date,
2260 p_actual_start_date => l_actual_start_date,
2261 p_actual_finish_date => l_actual_finish_date,
2262 p_early_start_date => l_early_start_date,
2263 p_early_finish_date => l_early_finish_date,
2264 p_late_start_date => l_late_start_date,
2265 p_late_finish_date => l_late_finish_date,
2266 p_scheduled_start_date => l_scheduled_start_date,
2267 p_scheduled_finish_date => l_scheduled_finish_date,
2268 p_out_start_date => l_out_start_date,
2269 p_out_completion_date => l_out_completion_date,
2270 p_error_code => l_error_code,
2271 p_error_message => l_error_message );
2272
2273 IF l_error_code <> 0 THEN
2274 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2275 pa_interface_utils_pub.map_new_amg_msg
2276 ( p_old_message_code => 'PA_ERROR_IN_CLIENT_EXTN'
2277 ,p_msg_attribute => 'CHANGE'
2278 ,p_resize_flag => 'N'
2279 ,p_msg_context => 'PROJ'
2280 ,p_attribute1 => l_project_in_rec.pm_project_reference
2281 ,p_attribute2 => ''
2282 ,p_attribute3 => ''
2283 ,p_attribute4 => ''
2284 ,p_attribute5 => '');
2285 END IF;
2286 RAISE FND_API.G_EXC_ERROR;
2287 END IF;
2288
2289
2290 -- Check to ensure that the dates returned by the API are valid
2291 -- the out completion date cannot be less than out start date
2292 IF l_out_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2293 AND l_out_start_date IS NOT NULL
2294 AND l_out_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2295 AND l_out_completion_date IS NOT NULL
2296 AND l_out_completion_date < l_out_start_date
2297 THEN
2298 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2299 THEN
2300
2301 -- 5182972 Commented below code , which was throwing wrong error message
2302 /*
2303 pa_interface_utils_pub.map_new_amg_msg
2304 ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
2305 ,p_msg_attribute => 'CHANGE'
2306 ,p_resize_flag => 'N'
2307 ,p_msg_context => 'PROJ'
2308 ,p_attribute1 => l_project_in_rec.pm_project_reference
2309 ,p_attribute2 => ''
2310 ,p_attribute3 => ''
2311 ,p_attribute4 => ''
2312 ,p_attribute5 => '');
2313 */
2314
2315 -- Added below code which throws correct error message
2316 pa_utils.add_message
2317 (
2318 p_app_short_name => 'PA'
2319 ,p_msg_name => 'PA_SU_INVALID_DATES'
2320 );
2321
2322 -- 5182972 end
2323 END IF;
2324
2325 RAISE FND_API.G_EXC_ERROR;
2326 END IF;
2327
2328 --Since this is an insert API (and not an update API),
2329 --all missing incoming parameters will be defaulted to NULL
2330
2331 IF l_project_in_rec.description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2332 THEN l_project_in_rec.description := NULL;
2333 END IF;
2334
2335 IF l_project_in_rec.project_status_code =
2336 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2337 OR l_project_in_rec.project_status_code IS NULL THEN
2338 l_project_in_rec.project_status_code :=
2339 pa_project_stus_utils.Get_Default_Starting_Status
2340 (x_project_type => l_source_project_type);
2341 ELSE
2342 IF pa_project_pvt.check_valid_project_status
2343 ( p_project_status => l_project_in_rec.project_status_code ) = 'N'
2344 THEN
2345 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2346 THEN
2347 pa_interface_utils_pub.map_new_amg_msg
2348 ( p_old_message_code => 'PA_PROJECT_STATUS_INVALID'
2349 ,p_msg_attribute => 'CHANGE'
2350 ,p_resize_flag => 'N'
2351 ,p_msg_context => 'PROJ'
2352 ,p_attribute1 => l_project_in_rec.pm_project_reference
2353 ,p_attribute2 => ''
2354 ,p_attribute3 => ''
2355 ,p_attribute4 => ''
2356 ,p_attribute5 => '');
2357 END IF;
2358 RAISE FND_API.G_EXC_ERROR;
2359 END IF;
2360 IF pa_project_stus_utils.Is_Starting_Status
2361 (l_project_in_rec.project_status_code) = 'N' THEN
2362 pa_interface_utils_pub.map_new_amg_msg
2363 ( p_old_message_code => 'PA_NOT_STARTING_STATUS'
2364 ,p_msg_attribute => 'CHANGE'
2365 ,p_resize_flag => 'N'
2366 ,p_msg_context => 'PROJ'
2367 ,p_attribute1 => l_project_in_rec.pm_project_reference
2368 ,p_attribute2 => ''
2369 ,p_attribute3 => ''
2370 ,p_attribute4 => ''
2371 ,p_attribute5 => '');
2372 RAISE FND_API.G_EXC_ERROR;
2373 END IF;
2374
2375 END IF;
2376
2377
2378 IF l_project_in_rec.distribution_rule = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2379 THEN l_project_in_rec.distribution_rule := NULL;
2380 END IF;
2381
2382
2383 IF l_project_in_rec.public_sector_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2384 OR l_project_in_rec.public_sector_flag IS NULL
2385 THEN l_project_in_rec.public_sector_flag := NULL;
2386 ELSE
2387 IF l_project_in_rec.public_sector_flag NOT IN ('Y','N')
2388 THEN
2389 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2390 THEN
2391 pa_interface_utils_pub.map_new_amg_msg
2392 ( p_old_message_code => 'PA_PUBLIC_SECTOR_INVALID'
2393 ,p_msg_attribute => 'CHANGE'
2394 ,p_resize_flag => 'N'
2395 ,p_msg_context => 'PROJ'
2396 ,p_attribute1 => l_project_in_rec.pm_project_reference
2397 ,p_attribute2 => ''
2398 ,p_attribute3 => ''
2399 ,p_attribute4 => ''
2400 ,p_attribute5 => '');
2401 END IF;
2402 RAISE FND_API.G_EXC_ERROR;
2403 END IF;
2404 END IF;
2405
2406 --When descriptive flex fields are not passed set them to NULL
2407
2408 IF l_project_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2409 THEN
2410 l_attribute_category := NULL;
2411 ELSE
2412 l_attribute_category := l_project_in_rec.attribute_category;
2413 END IF;
2414 IF l_project_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2415 THEN
2416 l_attribute1 := NULL;
2417 ELSE
2418 l_attribute1 := l_project_in_rec.attribute1;
2419 END IF;
2420 IF l_project_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2421 THEN
2422 l_attribute2 := NULL;
2423 ELSE
2424 l_attribute2 := l_project_in_rec.attribute2;
2425 END IF;
2426 IF l_project_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2427 THEN
2428 l_attribute3 := NULL;
2429 ELSE
2430 l_attribute3 := l_project_in_rec.attribute3;
2431 END IF;
2432 IF l_project_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2433 THEN
2434 l_attribute4 := NULL;
2435 ELSE
2436 l_attribute4 := l_project_in_rec.attribute4;
2437 END IF;
2438
2439 IF l_project_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2440 THEN
2441 l_attribute5 := NULL;
2442 ELSE
2443 l_attribute5 := l_project_in_rec.attribute5;
2444
2445 END IF;
2446
2447 IF l_project_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2448 THEN
2449 l_attribute6 := NULL;
2450 ELSE
2451 l_attribute6 := l_project_in_rec.attribute6;
2452 END IF;
2453
2454 IF l_project_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2455 THEN
2456 l_attribute7 := NULL;
2457 ELSE
2458 l_attribute7 := l_project_in_rec.attribute7;
2459 END IF;
2460
2461 IF l_project_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2462 THEN
2463 l_attribute8 := NULL;
2464 ELSE
2465 l_attribute8 := l_project_in_rec.attribute8;
2466 END IF;
2467 IF l_project_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2468 THEN
2469 l_attribute9 := NULL;
2470 ELSE
2471 l_attribute9 := l_project_in_rec.attribute9;
2472 END IF;
2473 IF l_project_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2474 THEN
2475 l_attribute10 := NULL;
2476 ELSE
2477 l_attribute10 := l_project_in_rec.attribute10;
2478 END IF;
2479
2480 -- Team template parameters
2481 IF l_project_in_rec.team_template_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2482 THEN
2483 l_team_template_id := NULL;
2484 ELSE
2485 l_team_template_id := l_project_in_rec.team_template_id;
2486 END IF;
2487 IF l_project_in_rec.country_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2488 THEN
2489 l_country_code := NULL;
2490 ELSE
2491 l_country_code := l_project_in_rec.country_code;
2492 END IF;
2493 IF l_project_in_rec.region = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2494 THEN
2495 l_region := NULL;
2496 ELSE
2497 l_region := l_project_in_rec.region;
2498 END IF;
2499 IF l_project_in_rec.city = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2500 THEN
2501 l_city := NULL;
2502 ELSE
2503 l_city := l_project_in_rec.city;
2504 END IF;
2505
2506 -- Tax Code changes starts ...
2507
2508 IF l_project_in_rec.output_tax_code =
2509 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2510 THEN
2511 l_output_tax_code := NULL;
2512 ELSE
2513 l_output_tax_code := l_project_in_rec.output_tax_code;
2514 END IF;
2515
2516 IF l_project_in_rec.retention_tax_code =
2517 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2518 THEN
2519 l_retention_tax_code := NULL;
2520 ELSE
2521 l_retention_tax_code := l_project_in_rec.retention_tax_code;
2522 END IF;
2523
2524 -- Tax Code changes Ends ...
2525
2526 -- IC AND Multi National Currency Changes starts here ...
2527
2528 IF l_project_in_rec.project_currency_code =
2529 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2530 --Bugfix 2293158 issue 2 --Start
2531 /* Changing AND to OR and IS NOT NULL condition to IS NULL as The if condition has to be true
2532 when l_project_in_rec.project_currency_code is NULL or the default G_PA_MISS_ CHAR */
2533 /* AND */
2534 OR l_project_in_rec.project_currency_code IS NULL /* NOT NULL */
2535 --Bugfix 2293158 issue 2 --end.
2536 THEN
2537 --Bugfix 2293158 issue 1 --Start
2538 -- l_project_currency_code := 'USD';
2539 l_project_currency_code := pa_multi_currency.get_acct_currency_code;
2540 --Bugfix 2293158 issue 1 --End
2541 ELSE
2542 l_project_currency_code := l_project_in_rec.project_currency_code;
2543 END IF;
2544
2545 IF l_project_in_rec.allow_cross_charge_flag =
2546 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2547 THEN
2548 l_allow_cross_charge_flag := 'N';
2549 ELSE
2550 l_allow_cross_charge_flag := l_project_in_rec.allow_cross_charge_flag;
2551 END IF;
2552
2553 IF l_project_in_rec.project_rate_date =
2554 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2555 THEN
2556 l_project_rate_date := NULL;
2557 ELSE
2558 l_project_rate_date := l_project_in_rec.project_rate_date;
2559 END IF;
2560
2561 IF l_project_in_rec.project_rate_type =
2562 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2563 THEN
2564 l_project_rate_type := NULL;
2565 ELSE
2566 l_project_rate_type := l_project_in_rec.project_rate_type;
2567 END IF;
2568
2569 IF l_project_in_rec.cc_process_labor_flag =
2570 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2571 THEN
2572 l_cc_process_labor_flag := 'N';
2573 ELSE
2574 l_cc_process_labor_flag := l_project_in_rec.cc_process_labor_flag;
2575 END IF;
2576
2577 IF l_project_in_rec.labor_tp_schedule_id =
2578 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2579 THEN
2580 l_labor_tp_schedule_id := NULL;
2581 ELSE
2582 l_labor_tp_schedule_id := l_project_in_rec.labor_tp_schedule_id;
2583 END IF;
2584
2585 IF l_project_in_rec.labor_tp_fixed_date =
2586 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2587 THEN
2588 l_labor_tp_fixed_date := NULL;
2589 ELSE
2590 l_labor_tp_fixed_date := l_project_in_rec.labor_tp_fixed_date;
2591 END IF;
2592
2593 IF l_project_in_rec.cc_process_nl_flag =
2594 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2595 THEN
2596 l_cc_process_nl_flag := 'N';
2597 ELSE
2598 l_cc_process_nl_flag := l_project_in_rec.cc_process_nl_flag;
2599 END IF;
2600
2601 IF l_project_in_rec.nl_tp_schedule_id =
2602 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2603 THEN
2604 l_nl_tp_schedule_id := NULL;
2605 ELSE
2606 l_nl_tp_schedule_id := l_project_in_rec.nl_tp_schedule_id;
2607 END IF;
2608
2609 IF l_project_in_rec.nl_tp_fixed_date =
2610 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2611 THEN
2612 l_nl_tp_fixed_date := NULL;
2613 ELSE
2614 l_nl_tp_fixed_date := l_project_in_rec.nl_tp_fixed_date;
2615 END IF;
2616
2617 IF l_project_in_rec.cc_tax_task_id =
2618 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2619 THEN
2620 l_cc_tax_task_id := NULL;
2621 ELSE
2622 l_cc_tax_task_id := l_project_in_rec.cc_tax_task_id;
2623 END IF;
2624
2625 -- IC and Multi National Currency Changes Ends here ...
2626
2627 -- ORM Code change starts here ...
2628
2629 IF l_project_in_rec.role_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2630 THEN
2631 l_role_list_id := NULL;
2632 ELSE
2633 l_role_list_id := l_project_in_rec.role_list_id;
2634 END IF;
2635
2636 IF l_project_in_rec.work_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2637 THEN
2638 -- If work type attribute change to NOT Null, we need to call default API here.
2639 l_work_type_id := NULL;
2640 ELSE
2641 l_work_type_id := l_project_in_rec.work_type_id;
2642 END IF;
2643
2644 IF l_project_in_rec.calendar_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2645 THEN
2646 l_calendar_id := NULL;
2647 ELSE
2648 l_calendar_id := l_project_in_rec.calendar_id;
2649 END IF;
2650
2651 IF l_project_in_rec.location_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2652 THEN
2653 l_location_id := NULL;
2654 ELSE
2655 l_location_id := l_project_in_rec.location_id;
2656 END IF;
2657
2658 IF ( nvl(l_project_in_rec.probability_member_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
2659 THEN
2660 l_probability_member_id := NULL;
2661 ELSE
2662 --Bug#5191521 included validation for probability_member_id
2663
2664 OPEN cur_validate_prob_member( l_project_in_rec.created_from_project_id,l_project_in_rec.probability_member_id);
2665 FETCH cur_validate_prob_member INTO l_check_prob_id;
2666 CLOSE cur_validate_prob_member;
2667
2668 IF l_check_prob_id ='Y' THEN
2669
2670 l_probability_member_id := l_project_in_rec.probability_member_id;
2671 ELSE
2672 l_probability_member_id := NULL;
2673 END IF;
2674 -- ENd of changes for Bug#5191521.
2675
2676 END IF;
2677
2678 IF l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2679 THEN
2680 l_project_value := NULL;
2681
2682 ELSE
2683 --Added for bug 5214431
2684 IF l_project_in_rec.project_value IS NOT NULL AND l_project_in_rec.project_value < 0 THEN
2685 PA_UTILS.ADD_MESSAGE
2686 ( p_app_short_name => 'PA'
2687 ,p_msg_name => 'PA_INVLD_OPPORTUNITY_VALUE');
2688 RAISE FND_API.G_EXC_ERROR;
2689 ELSE
2690 l_project_value := l_project_in_rec.project_value;
2691 END IF;
2692 END IF;
2693
2694
2695 IF l_project_in_rec.expected_approval_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2696 THEN
2697 l_expected_approval_date := NULL;
2698 ELSE
2699 l_expected_approval_date := l_project_in_rec.expected_approval_date;
2700 END IF;
2701
2702 IF l_project_in_rec.cost_job_group_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2703 THEN
2704 l_cost_job_group_id := NULL;
2705 ELSE
2706 l_cost_job_group_id := l_project_in_rec.cost_job_group_id;
2707 END IF;
2708
2709 IF l_project_in_rec.bill_job_group_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2710 THEN
2711 l_bill_job_group_id := NULL;
2712 ELSE
2713 l_bill_job_group_id := l_project_in_rec.bill_job_group_id;
2714 END IF;
2715
2716 -- ORM Code change ends here ...
2717
2718 -- Bug 6144566: Changes start
2719 -- Bug 6144566: Introduced MCB related validations
2720
2721 IF l_project_in_rec.multi_currency_billing_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2722 OR l_project_in_rec.multi_currency_billing_flag IS NULL THEN
2723 l_project_in_rec.multi_currency_billing_flag :=null;
2724 ELSE
2725 IF l_project_in_rec.multi_currency_billing_flag = 'Y' THEN
2726 -- do MCB related validations
2727
2728 -- Project Currency related attributes
2729 IF l_project_in_rec.PROJECT_BIL_RATE_TYPE is NULL
2730 OR l_project_in_rec.PROJECT_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PROJ_RATE_TYPE_INV_AMG:The project exchage rate type is invalid
2731 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2732 FND_MESSAGE.SET_NAME('PA','PA_PROJ_RATE_TYPE_INV_AMG');
2733 FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
2734 FND_MSG_PUB.ADD;
2735 RAISE FND_API.G_EXC_ERROR;
2736 END IF;
2737 ELSE
2738 IF l_project_in_rec.PROJECT_BIL_RATE_TYPE = 'User' THEN
2739 IF l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE is NULL
2740 OR l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2741 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PC_AMG:Project Exchange Rate cannot be null when project rate type is User.
2742 FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PC_AMG');
2743 FND_MSG_PUB.ADD;
2744 RAISE FND_API.G_EXC_ERROR;
2745 END IF;
2746 END IF;
2747 ELSE -- non-User type
2748 IF l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE is NULL
2749 OR l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2750
2751 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2752 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2753 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
2754 FND_MSG_PUB.ADD;
2755 RAISE FND_API.G_EXC_ERROR;
2756 END IF;
2757 ELSE
2758 IF l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE = 'Fixed Date' THEN
2759 IF l_project_in_rec.PROJECT_BIL_RATE_DATE is NULL
2760 OR l_project_in_rec.PROJECT_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2761 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2762 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2763 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
2764 FND_MSG_PUB.ADD;
2765 RAISE FND_API.G_EXC_ERROR;
2766 END IF;
2767 END IF;
2768 END IF;
2769 END IF;
2770 END IF;
2771 END IF;
2772
2773 -- Project Functional Currency related attributes
2774 IF l_project_in_rec.PROJFUNC_BIL_RATE_TYPE is NULL
2775 OR l_project_in_rec.PROJFUNC_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PFC_RATE_TYPE_INV_AMG:The project functional exchage rate type is invalid
2776 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2777 FND_MESSAGE.SET_NAME('PA','PA_PFC_RATE_TYPE_INV_AMG');
2778 FND_MSG_PUB.ADD;
2779 RAISE FND_API.G_EXC_ERROR;
2780 END IF;
2781 ELSE
2782 IF l_project_in_rec.PROJFUNC_BIL_RATE_TYPE = 'User' THEN
2783 IF l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE is NULL
2784 OR l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2785 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PF_AMG:Project Functional Exchange Rate cannot be null when project functional rate type is User.
2786 FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PF_AMG');
2787 FND_MSG_PUB.ADD;
2788 RAISE FND_API.G_EXC_ERROR;
2789 END IF;
2790 END IF;
2791
2792 ELSE -- non-User type
2793 IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE is NULL
2794 OR l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2795 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2796 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2797 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
2798 FND_MSG_PUB.ADD;
2799 RAISE FND_API.G_EXC_ERROR;
2800 END IF;
2801 ELSE
2802 IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE = 'Fixed Date' THEN
2803 IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE is NULL
2804 OR l_project_in_rec.PROJFUNC_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2805 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2806 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2807 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
2808 FND_MSG_PUB.ADD;
2809 RAISE FND_API.G_EXC_ERROR;
2810 END IF;
2811 END IF;
2812 END IF;
2813 END IF;
2814 END IF;
2815 END IF;
2816
2817
2818 -- Funding Currency related attributes
2819 IF l_project_in_rec.FUNDING_RATE_TYPE is NULL
2820 OR l_project_in_rec.FUNDING_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_FUND_RATE_TYPE_INV_AMG:The funding exchage rate type is invalid
2821 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2822 FND_MESSAGE.SET_NAME('PA','PA_FUND_RATE_TYPE_INV_AMG');
2823 FND_MSG_PUB.ADD;
2824 RAISE FND_API.G_EXC_ERROR;
2825 END IF;
2826 ELSE
2827 IF l_project_in_rec.FUNDING_RATE_TYPE = 'User' THEN
2828 IF l_project_in_rec.FUNDING_EXCHANGE_RATE is NULL
2829 OR l_project_in_rec.FUNDING_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2830 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCHANGE_RATE_NULL:Exchange rate cannot be null when rate type is User.
2831 FND_MESSAGE.SET_NAME('PA','PA_EXCHANGE_RATE_NULL');
2832 FND_MSG_PUB.ADD;
2833 RAISE FND_API.G_EXC_ERROR;
2834 END IF;
2835 END IF;
2836
2837 ELSE -- non-User type
2838 IF l_project_in_rec.FUNDING_RATE_DATE_CODE is NULL
2839 OR l_project_in_rec.FUNDING_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2840 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2841 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2842 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
2843 FND_MSG_PUB.ADD;
2844 RAISE FND_API.G_EXC_ERROR;
2845 END IF;
2846 ELSE
2847 IF l_project_in_rec.FUNDING_RATE_DATE_CODE = 'Fixed Date' THEN
2848 IF l_project_in_rec.FUNDING_RATE_DATE is NULL
2849 OR l_project_in_rec.FUNDING_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2850 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2851 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2852 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
2853 FND_MSG_PUB.ADD;
2854 RAISE FND_API.G_EXC_ERROR;
2855 END IF;
2856 END IF;
2857 END IF;
2858 END IF;
2859 END IF;
2860 END IF;
2861
2862 ELSE -- MCB flag is not 'Y'
2863 -- set all currency conversion attributes to NULL
2864
2865 l_project_in_rec.PROJECT_BIL_RATE_TYPE := NULL;
2866 l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE := NULL;
2867 l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE := NULL;
2868 l_project_in_rec.PROJECT_BIL_RATE_DATE := NULL;
2869
2870 l_project_in_rec.PROJFUNC_BIL_RATE_TYPE := NULL;
2871 l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE := NULL;
2872 l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE := NULL;
2873 l_project_in_rec.PROJFUNC_BIL_RATE_DATE := NULL;
2874
2875 l_project_in_rec.FUNDING_RATE_TYPE := NULL;
2876 l_project_in_rec.FUNDING_EXCHANGE_RATE := NULL;
2877 l_project_in_rec.FUNDING_RATE_DATE_CODE := NULL;
2878 l_project_in_rec.FUNDING_RATE_DATE := NULL;
2879
2880 END IF;
2881 END IF;
2882
2883 -- Bug 6144566: Changes end
2884
2885 IF l_project_in_rec.emp_bill_rate_schedule_id =
2886 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2887 THEN
2888 l_emp_bill_rate_schedule_id := NULL;
2889 ELSE
2890 l_emp_bill_rate_schedule_id := l_project_in_rec.emp_bill_rate_schedule_id;
2891 END IF;
2892
2893 IF l_project_in_rec.job_bill_rate_schedule_id =
2894 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2895 THEN
2896 l_job_bill_rate_schedule_id := NULL;
2897 ELSE
2898 l_job_bill_rate_schedule_id := l_project_in_rec.job_bill_rate_schedule_id;
2899 END IF;
2900
2901 IF l_project_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2902 THEN l_project_in_rec.carrying_out_organization_id := NULL;
2903 END IF;
2904
2905
2906 IF l_project_in_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2907 THEN l_project_in_rec.start_date := NULL;
2908 END IF;
2909
2910
2911 IF l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2912 THEN l_project_in_rec.completion_date := NULL;
2913 END IF;
2914
2915
2916 --added to remove bug# 604762 : Ashia Bagai - 9-jan-98
2917 IF l_out_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE Then
2918 l_out_start_date := NULL ;
2919 END IF ;
2920
2921 IF l_out_completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE Then
2922 l_out_completion_date := NULL ;
2923 END IF ;
2924
2925 --end of addition to remove bug# 604762
2926
2927 -- opportunity value changes
2928 -- anlee
2929 IF l_project_in_rec.opp_value_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2930 THEN
2931 l_opp_value_currency_code := NULL;
2932 ELSE
2933 l_opp_value_currency_code := l_project_in_rec.opp_value_currency_code;
2934 END IF;
2935
2936 --Priority code
2937
2938 IF l_project_in_rec.priority_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2939 THEN
2940 l_priority_code := NULL;
2941 ELSE
2942 l_priority_code := l_project_in_rec.priority_code;
2943 END IF;
2944
2945 -- 5191417 validate l_priority_code for valid value
2946
2947 IF l_priority_code IS NOT NULL THEN
2948
2949 OPEN priority_code_csr(l_priority_code);
2950 FETCH priority_code_csr into l_valid_prio_code;
2951 CLOSE priority_code_csr;
2952
2953 -- if not valid throw , error message
2954
2955 IF l_valid_prio_code = 'N' THEN
2956
2957 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2958
2959 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
2960 ,p_msg_name => 'PA_INVALID_PRIORITY_CODE');
2961
2962 l_return_status := FND_API.G_RET_STS_ERROR;
2963
2964 RAISE FND_API.G_EXC_ERROR;
2965
2966 END IF;
2967
2968 END IF;
2969
2970 END IF;
2971
2972 -- 5191417 end
2973
2974 IF l_project_in_rec.security_level = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2975
2976 l_security_level := NULL;
2977 ELSE
2978 --Modified this else part for security level validations.Bug#5191699.
2979 --If the user passes an invalid value or if the user passes explicitly as null,
2980 --we need to handle that as,
2981 --security level is mandatory parameter and cant be null and it can take values only
2982 --from the lookup.Hence we update with default value 'Enterprise'.
2983
2984 OPEN cur_check_sec_level(l_project_in_rec.security_level);
2985 FETCH cur_check_sec_level INTO l_check_sec_level;
2986 CLOSE cur_check_sec_level;
2987
2988 IF l_check_sec_level = 'Y' THEN
2989 -- Not null and a Valid value has been passed
2990 l_security_level := l_project_in_rec.security_level;
2991 ELSE
2992 -- Either null has been explicitly passed or invalid value
2993 -- is passed. Then update it with default value of 'Enterprise'
2994 -- as this will be always present and cant be deleted or end dated.
2995
2996 l_security_level := 1; --1 lookup_code corresponds to 'Enterprise'.
2997 END IF;
2998 --End if code changes for Bug#5191699.
2999 END IF;
3000 /*Addtion started for bug 3825528*/
3001 /* Code added for tracking bug by aditi */
3002 -- --dbms_output.put_line('value of p_customers_in(1).customer_id'||p_customers_in(1).customer_id);
3003 IF l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3004 /* End of Code changes */
3005 -- IF l_project_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM Commented for tracking bug
3006 THEN
3007 l_in_customer_id := NULL;
3008 -- ELSE
3009 -- l_in_customer_id := l_project_in_rec.customer_id;
3010 END IF;
3011 ----dbms_output.put_line('value of l_in_customer_id at the end '||l_in_customer_id);
3012 /*Addtion ends for bug 3825528*/
3013
3014
3015
3016 --sunkalya:federal changes bug#5511353
3017
3018 OPEN get_date_eff_funds_flag(l_project_in_rec.created_from_project_id);
3019 FETCH get_date_eff_funds_flag INTO l_orig_date_eff_funds_flag;
3020 CLOSE get_date_eff_funds_flag;
3021
3022 OPEN get_ar_rec_notify_flag(l_project_in_rec.created_from_project_id); -- 7508661 : EnC : Added
3023 FETCH get_ar_rec_notify_flag INTO l_orig_ar_rec_notify_flag;
3024 CLOSE get_ar_rec_notify_flag;
3025
3026 OPEN get_auto_release_pwp_inv(l_project_in_rec.created_from_project_id); -- 7508661 : EnC : Added
3027 FETCH get_auto_release_pwp_inv INTO l_orig_auto_release_pwp_inv;
3028 CLOSE get_auto_release_pwp_inv;
3029
3030 OPEN cur_get_orig_tt_cust_flag(l_project_in_rec.created_from_project_id);
3031 FETCH cur_get_orig_tt_cust_flag INTO l_orig_def_tt_flag;
3032 CLOSE cur_get_orig_tt_cust_flag;
3033
3034
3035 IF (l_project_in_rec.date_eff_funds_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3036 (l_project_in_rec.date_eff_funds_flag IS NULL)
3037 THEN
3038
3039 l_date_eff_funds_flag := NULL;
3040
3041 ELSE
3042
3043 OPEN cur_enable_funds_flag(l_project_in_rec.created_from_project_id);
3044 FETCH cur_enable_funds_flag INTO l_enable_funds_flag;
3045 CLOSE cur_enable_funds_flag;
3046
3047 /*
3048 OPEN cur_rev_inv(l_project_in_rec.created_from_project_id);
3049 FETCH cur_rev_inv INTO l_chk_rev_inv_flag;
3050 CLOSE cur_rev_inv;
3051 */
3052 IF nvl(l_enable_funds_flag,'N')='N' AND l_project_in_rec.date_eff_funds_flag ='Y' THEN
3053
3054 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3055 ,p_msg_name => 'PA_FUNDS_FLAG_CANT_ENABLED'
3056 );
3057
3058 l_return_status := FND_API.G_RET_STS_ERROR;
3059
3060 RAISE FND_API.G_EXC_ERROR;
3061 END IF;
3062 /*
3063 IF nvl(l_chk_rev_inv_flag,'N') ='Y' AND l_project_in_rec.date_eff_funds_flag <> l_orig_date_eff_funds_flag THEN
3064
3065 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3066 ,p_msg_name => 'PA_FUNDS_FLAG_NOT_UPDATBL'
3067 );
3068
3069 l_return_status := FND_API.G_RET_STS_ERROR;
3070
3071 RAISE FND_API.G_EXC_ERROR;
3072 END IF;
3073 */
3074 l_date_eff_funds_flag := l_project_in_rec.date_eff_funds_flag;
3075 END IF;
3076 --sunkalya:federal changes bug#5511353
3077
3078
3079 /* 7508661 : EnC : Start */
3080
3081 IF (l_project_in_rec.ar_rec_notify_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3082 (l_project_in_rec.ar_rec_notify_flag IS NULL)
3083 THEN
3084 l_ar_rec_notify_flag := 'N';
3085 ELSE
3086 l_ar_rec_notify_flag := l_orig_ar_rec_notify_flag;
3087 END IF;
3088
3089 IF (l_project_in_rec.auto_release_pwp_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3090 (l_project_in_rec.auto_release_pwp_inv IS NULL)
3091 THEN
3092 l_auto_release_pwp_inv := 'Y';
3093 ELSE
3094 l_auto_release_pwp_inv := l_orig_auto_release_pwp_inv;
3095 END IF;
3096
3097 /* 7508661 : EnC : End */
3098
3099
3100 --Bug 3279981 Review
3101 IF (l_project_in_rec.enable_top_task_customer_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3102 (p_project_in.enable_top_task_customer_flag IS NULL) --Added or condition for bug 4762153
3103 THEN
3104 l_en_top_task_customer_flag := NULL;
3105 ELSE
3106 IF l_project_in_rec.enable_top_task_customer_flag IN ('Y','N') THEN
3107 -- Function Security Check
3108 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3109 ( p_api_version_number => p_api_version_number,
3110 p_responsibility_id => l_resp_id,
3111 p_function_name => 'PA_PAXPREPR_CUST_TOP_TASK',
3112 p_msg_count => l_msg_count,
3113 p_msg_data => l_msg_data,
3114 p_return_status => l_return_status,
3115 p_function_allowed => l_function_allowed);
3116 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3117 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3118 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3119 RAISE FND_API.G_EXC_ERROR;
3120 END IF;
3121
3122 IF l_function_allowed = 'N' THEN
3123 pa_interface_utils_pub.map_new_amg_msg
3124 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3125 ,p_msg_attribute => 'CHANGE'
3126 ,p_resize_flag => 'Y'
3127 ,p_msg_context => 'GENERAL'
3128 ,p_attribute1 => ''
3129 ,p_attribute2 => ''
3130 ,p_attribute3 => ''
3131 ,p_attribute4 => ''
3132 ,p_attribute5 => '');
3133 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3134 RAISE FND_API.G_EXC_ERROR;
3135 END IF;
3136 ELSE
3137 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3138 pa_interface_utils_pub.map_new_amg_msg
3139 ( p_old_message_code => 'PA_TOP_TASK_CUST_FLAG_INVALID'
3140 ,p_msg_attribute => 'NOCHANGE' -- Changed to NOCHANGE for Bug 4762153
3141 ,p_resize_flag => 'N'
3142 ,p_msg_context => 'PROJ'
3143 ,p_attribute1 => l_project_in_rec.pm_project_reference
3144 ,p_attribute2 => ''
3145 ,p_attribute3 => ''
3146 ,p_attribute4 => ''
3147 ,p_attribute5 => '');
3148 END IF;
3149 RAISE FND_API.G_EXC_ERROR;
3150 END IF;
3151 l_en_top_task_customer_flag := l_project_in_rec.enable_top_task_customer_flag;
3152 END IF;
3153
3154 IF l_project_in_rec.enable_top_task_inv_mth_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3155 l_en_top_task_inv_mth_flag := NULL;
3156 ELSE
3157 IF l_project_in_rec.enable_top_task_inv_mth_flag IN ('Y','N') THEN
3158 -- Function Security Check
3159 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3160 ( p_api_version_number => p_api_version_number,
3161 p_responsibility_id => l_resp_id,
3162 p_function_name => 'PA_PAXPREPR_INV_MTH_TOP_TASK',
3163 p_msg_count => l_msg_count,
3164 p_msg_data => l_msg_data,
3165 p_return_status => l_return_status,
3166 p_function_allowed => l_function_allowed);
3167 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3168 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3169 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3170 RAISE FND_API.G_EXC_ERROR;
3171 END IF;
3172
3173 IF l_function_allowed = 'N' THEN
3174 pa_interface_utils_pub.map_new_amg_msg
3175 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3176 ,p_msg_attribute => 'CHANGE'
3177 ,p_resize_flag => 'Y'
3178 ,p_msg_context => 'GENERAL'
3179 ,p_attribute1 => ''
3180 ,p_attribute2 => ''
3181 ,p_attribute3 => ''
3182 ,p_attribute4 => ''
3183 ,p_attribute5 => '');
3184 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3185 RAISE FND_API.G_EXC_ERROR;
3186 END IF;
3187 ELSE
3188 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3189 pa_interface_utils_pub.map_new_amg_msg
3190 ( p_old_message_code => 'PA_TT_INV_MTH_FLAG_INVALID'
3191 ,p_msg_attribute => 'CHANGE'
3192 ,p_resize_flag => 'N'
3193 ,p_msg_context => 'PROJ'
3194 ,p_attribute1 => l_project_in_rec.pm_project_reference
3195 ,p_attribute2 => ''
3196 ,p_attribute3 => ''
3197 ,p_attribute4 => ''
3198 ,p_attribute5 => '');
3199 END IF;
3200 RAISE FND_API.G_EXC_ERROR;
3201 END IF;
3202 l_en_top_task_inv_mth_flag := l_project_in_rec.enable_top_task_inv_mth_flag;
3203 END IF;
3204 --Bug 3279981 Review
3205
3206 --PROJECT
3207 --create a new project using a template or other project as basis
3208 ----dbms_output.put_line('before calling Copy_Project');
3209 pa_project_core1.copy_project (
3210 x_orig_project_id => l_project_in_rec.created_from_project_id
3211 ,x_project_name => RTRIM(l_project_in_rec.project_name)
3212 ,x_long_name => RTRIM(l_project_in_rec.long_name)
3213 ,x_project_number => RTRIM(l_create_project_number)
3214 ,x_description => RTRIM(l_project_in_rec.description)
3215 ,x_project_type => NULL --project_type is always defaulted from template
3216 ,x_project_status_code => l_project_in_rec.project_status_code
3217 ,x_distribution_rule => l_project_in_rec.distribution_rule
3218 ,x_public_sector_flag => l_project_in_rec.public_sector_flag
3219 ,x_organization_id => l_project_in_rec.carrying_out_organization_id
3220 ,x_start_date => l_out_start_date
3221 ,x_completion_date => l_out_completion_date
3222 ,x_probability_member_id => l_probability_member_id
3223 ,x_project_value => l_project_value
3224 ,x_expected_approval_date => l_expected_approval_date
3225 --Sakthi MCB
3226 ,x_agreement_currency => l_agreement_currency
3227 ,x_agreement_amount => l_agreement_amount
3228 ,x_agreement_org_id => l_agreement_org_id
3229 --Sakthi MCB
3230 ,x_copy_task_flag => l_copy_task_flag
3231 ,x_copy_budget_flag => l_copy_budget_flag
3232 ,x_use_override_flag => l_use_override_flag
3233 ,x_copy_assignment_flag => l_copy_assignment_flag
3234 ,x_template_flag => l_template_flag
3235 ,x_project_id => l_project_id
3236 ,x_err_code => l_err_code
3237 ,x_err_stage => l_err_stage
3238 ,x_err_stack => l_err_stack
3239 ,x_new_project_number => l_project_number_out
3240 ,x_pm_product_code => p_pm_product_code
3241 ,x_pm_project_reference => RTRIM(l_project_in_rec.pm_project_reference)
3242 ,x_attribute_category => RTRIM(l_attribute_category)
3243 ,x_attribute1 => RTRIM(l_attribute1)
3244 ,x_attribute2 => RTRIM(l_attribute2)
3245 ,x_attribute3 => RTRIM(l_attribute3)
3246 ,x_attribute4 => RTRIM(l_attribute4)
3247 ,x_attribute5 => RTRIM(l_attribute5)
3248 ,x_attribute6 => RTRIM(l_attribute6)
3249 ,x_attribute7 => RTRIM(l_attribute7)
3250 ,x_attribute8 => RTRIM(l_attribute8)
3251 ,x_attribute9 => RTRIM(l_attribute9)
3252 ,x_attribute10 => RTRIM(l_attribute10)
3253 ,x_actual_start_date => l_actual_start_date
3254 ,x_actual_finish_date => l_actual_finish_date
3255 ,x_early_start_date => l_early_start_date
3256 ,x_early_finish_date => l_early_finish_date
3257 ,x_late_start_date => l_late_start_date
3258 ,x_late_finish_date => l_late_finish_date
3259 ,x_scheduled_start_date => l_scheduled_start_date
3260 ,x_scheduled_finish_date => l_scheduled_finish_date
3261 ,x_team_template_id => l_team_template_id
3262 ,x_country_code => l_country_code
3263 ,x_region => l_region
3264 ,x_city => l_city
3265 -- anlee opportunity changes
3266 ,x_opp_value_currency_code => l_opp_value_currency_code
3267 ,x_org_project_copy_flag => 'N'
3268 ,x_priority_code => l_priority_code
3269 ,x_security_level => l_security_level
3270 ,x_customer_id => l_in_customer_id --Modified for bug 3825528 l_project_in_rec.customer_id Bug no 3106256
3271 --Bug 3279981 Review FP_M development
3272 ,p_en_top_task_cust_flag => l_en_top_task_customer_flag
3273 ,p_en_top_task_inv_mth_flag => l_en_top_task_inv_mth_flag
3274 ,p_date_eff_funds_flag => l_date_eff_funds_flag --sunkalya:federal changes bug#5511353
3275 ,p_ar_rec_notify_flag => l_ar_rec_notify_flag -- 7508661 : EnC
3276 ,p_auto_release_pwp_inv => l_auto_release_pwp_inv -- 7508661 : EnC
3277 );
3278
3279 IF l_err_code > 0
3280 then
3281 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3282
3283 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3284 THEN
3285
3286 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3287 THEN
3288
3289 pa_interface_utils_pub.map_new_amg_msg('PA_COPY_PROJECT_FAILED','CHANGE','N',
3290 'PROJ',l_project_in_rec.pm_project_reference,
3291 '','','','');
3292 ELSE
3293
3294
3295 pa_interface_utils_pub.map_new_amg_msg(l_err_stage,'CHANGE','Y',
3296 'PROJ',l_project_in_rec.pm_project_reference,
3297 '','','','');
3298 END IF;
3299
3300 END IF;
3301
3302 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3303 RAISE FND_API.G_EXC_ERROR;
3304
3305 ELSIF l_err_code < 0
3306 then
3307
3308 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3309
3310 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3311 THEN
3312 pa_interface_utils_pub.map_new_amg_msg('PA_COPY_PROJECT_FAILED','CHANGE','N',
3313 'PROJ',l_project_in_rec.pm_project_reference,
3314 '','','','');
3315 /* Added the following code for bug 3725338 */
3316 FND_MESSAGE.SET_NAME('PA','PA_UNEXPECTED_ERR_AMG');
3317 FND_MESSAGE.SET_TOKEN('ORAERR', l_err_stage);
3318 FND_MSG_PUB.add;
3319 /* Code addition ended for bug 3725338 */
3320 END IF;
3321
3322 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3323 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3324
3325 end IF;
3326
3327 /* Not required anymore since they are passed as input to copy project
3328 UPDATE pa_projects
3329 SET pm_project_reference = l_project_in_rec.pm_project_reference
3330 , pm_product_code = p_pm_product_code
3331 WHERE project_id = l_project_id;
3332 */
3333
3334 --get the values associated to the project
3335 OPEN l_project_csr(l_project_id);
3336 FETCH l_project_csr INTO l_project_rec;
3337 CLOSE l_project_csr;
3338
3339 -- ADD CUSTOMERS
3340 -- add overridable Primary Customers and their contacts
3341
3342 /* IF l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3343 AND l_project_in_rec.customer_id IS NOT NULL */ --commented for tracking bug
3344 IF l_in_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3345 AND l_in_customer_id IS NOT NULL
3346
3347 THEN
3348
3349 l_is_overridable := FALSE;
3350 i := l_override_fields_tab.first;
3351 WHILE i IS NOT NULL LOOP
3352
3353
3354 IF l_override_fields_tab(i).pa_field_name = 'CUSTOMER_NAME'
3355 THEN
3356 l_is_overridable := TRUE;
3357 l_project_relationship_code := l_override_fields_tab(i).type; --introduced for Bug#5517655
3358 --l_relationship_type := l_override_fields_tab(i).type; commented for Bug#5517655
3359 EXIT;
3360 END IF;
3361 i := l_override_fields_tab.next(i);
3362 END LOOP;
3363
3364 IF NOT l_is_overridable
3365 THEN
3366 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3367 THEN
3368 pa_interface_utils_pub.map_new_amg_msg
3369 ( p_old_message_code => 'PA_CUSTOMER_NOT_OVERRIDABLE'
3370 ,p_msg_attribute => 'CHANGE'
3371 ,p_resize_flag => 'Y'
3372 ,p_msg_context => 'PROJ'
3373 ,p_attribute1 => l_project_in_rec.pm_project_reference
3374 ,p_attribute2 => ''
3375 ,p_attribute3 => ''
3376 ,p_attribute4 => ''
3377 ,p_attribute5 => '');
3378 END IF;
3379
3380 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3381 RAISE FND_API.G_EXC_ERROR;
3382
3383 END IF;
3384
3385 /*Customer Account Relationship Changes*/
3386 IF l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3387 AND l_bill_to_customer_id IS NOT NULL
3388 THEN
3389
3390 l_is_overridable := FALSE;
3391 i := l_override_fields_tab.first;
3392 WHILE i IS NOT NULL LOOP
3393
3394
3395 IF l_override_fields_tab(i).pa_field_name = 'BILL_TO_CUSTOMER'
3396 THEN
3397 l_is_overridable := TRUE;
3398 EXIT;
3399 END IF;
3400 i := l_override_fields_tab.next(i);
3401 END LOOP;
3402
3403 IF NOT l_is_overridable
3404 THEN
3405 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3406 THEN
3407 pa_interface_utils_pub.map_new_amg_msg
3408 ( p_old_message_code => 'PA_BILL_TO_NOT_OVERRIDABLE'
3409 ,p_msg_attribute => 'CHANGE'
3410 ,p_resize_flag => 'Y'
3411 ,p_msg_context => 'PROJ'
3412 ,p_attribute1 => l_project_in_rec.pm_project_reference
3413 ,p_attribute2 => ''
3414 ,p_attribute3 => ''
3415 ,p_attribute4 => ''
3416 ,p_attribute5 => '');
3417 END IF;
3418
3419 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3420 RAISE FND_API.G_EXC_ERROR;
3421
3422 END IF;
3423 END IF;
3424
3425 IF l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3426 AND l_ship_to_customer_id IS NOT NULL
3427 THEN
3428
3429 l_is_overridable := FALSE;
3430 i := l_override_fields_tab.first;
3431 WHILE i IS NOT NULL LOOP
3432
3433
3434 IF l_override_fields_tab(i).pa_field_name = 'SHIP_TO_CUSTOMER'
3435 THEN
3436 l_is_overridable := TRUE;
3437 EXIT;
3438 END IF;
3439 i := l_override_fields_tab.next(i);
3440 END LOOP;
3441
3442 IF NOT l_is_overridable
3443 THEN
3444 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3445 THEN
3446 pa_interface_utils_pub.map_new_amg_msg
3447 ( p_old_message_code => 'PA_SHIP_TO_NOT_OVERRIDABLE'
3448 ,p_msg_attribute => 'CHANGE'
3449 ,p_resize_flag => 'Y'
3450 ,p_msg_context => 'PROJ'
3451 ,p_attribute1 => l_project_in_rec.pm_project_reference
3452 ,p_attribute2 => ''
3453 ,p_attribute3 => ''
3454 ,p_attribute4 => ''
3455 ,p_attribute5 => '');
3456 END IF;
3457
3458 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3459 RAISE FND_API.G_EXC_ERROR;
3460
3461 END IF;
3462 END IF;
3463 ----dbms_output.put_line('Does the control come till here');
3464 /*Customer account relationship changes */
3465 /* Tracking bug ..customer code added in a loop */
3466 i := p_customers_in.first;
3467 ----dbms_output.put_line('value of i'||i);
3468 IF p_customers_in.exists(i) THEN
3469 ----dbms_output.put_line('if CUSTOMER ARE PASSED TO CREATE_PROJECT ');
3470 ----dbms_output.put_line('Value of p_project_in.customer_id'||p_customers_in(i).customer_id);
3471
3472 /*
3473 These assignments have already been done
3474 l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
3475 l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
3476 --added for bug 3911782
3477 l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
3478 l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
3479 l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
3480 l_cust_bill_split := p_customers_in(i).Customer_Bill_Split; */
3481 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3482 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3483 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3484 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3485 --changes end for Bug 3911782
3486 IF p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3487 /* Commented the below code for Bug#5517655 */
3488
3489 /*IF p_customers_in(i).project_relationship_code IS NULL OR
3490 p_customers_in(i).project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
3491 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3492 THEN
3493 pa_utils.add_message
3494 ( p_app_short_name => 'PA'-- new message for AA TRACKING
3495 ,p_msg_name => 'PA_RELATIONSHIP_CODE_REQD'
3496 ,p_token1 => 'PROJECT_NAME'
3497 ,p_value1 => l_project_rec.segment1
3498 ,p_token2 => 'CUSTOMER_ID'
3499 ,p_value2 => p_customers_in(i).customer_id
3500 );
3501 END IF;
3502 RAISE FND_API.G_EXC_ERROR;
3503 END IF;
3504 */ --End of commenting for Bug#5517655
3505
3506 IF p_customers_in(i).CUSTOMER_BILL_SPLIT IS NULL OR
3507 p_customers_in(i).CUSTOMER_BILL_SPLIT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
3508 l_cust_bill_split := 100; --Default it to 100
3509 END If;
3510 /* End of tracking changes */
3511 END IF;
3512 /* Code added for tracking bug */
3513 ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
3514 If (p_customers_in(i).CONTACT_ID IS NOT NULL) AND (p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3515 then
3516 ----dbms_output.put_line('is this fired');
3517
3518 IF (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE IS NULL) OR (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )THEN
3519 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3520 THEN
3521 pa_utils.add_message
3522 ( p_app_short_name => 'PA'-- new message for tracking bug
3523 ,p_msg_name => 'PA_CONTACT_TYPE_REQD'
3524 ,p_token1 => 'PROJECT_NAME'
3525 ,p_value1 => l_project_in_rec.pm_project_reference
3526 ,p_token2 => 'CUSTOMER_ID'
3527 ,p_value2 => p_customers_in(i).customer_id
3528 ,p_token3 => 'CONTACT_ID'
3529 ,p_value3 => p_customers_in(i).CONTACT_ID
3530 );
3531 END IF;
3532 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3533 p_return_status := FND_API.G_RET_STS_ERROR;
3534 RAISE FND_API.G_EXC_ERROR;
3535 END IF;
3536 end if;
3537 ----dbms_output.put_line('Error is hrown soon after this');
3538 If p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
3539 l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
3540 l_ship_to_contact_id := NULL; -- Bug 5622539
3541 ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
3542 l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
3543 l_bill_to_contact_id := NULL; -- Bug 5622539
3544 Else
3545 l_bill_to_contact_id := NULL;
3546 l_ship_to_contact_id := NULL;
3547 End If;
3548 /** end of chnages for tracking bug by aditi **/
3549 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
3550 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
3551 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
3552
3553 /* Code changes end for tracking bug */
3554 If (l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3555 OR (l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3556 OR (p_customers_in(1).CONTACT_ID IS NOT NULL AND p_customers_in(1).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)--added for tracking bug by aditi
3557
3558 --bug 3716805
3559 THEN
3560 If l_in_customer_id IS NULL OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3561 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3562 THEN
3563 pa_interface_utils_pub.map_new_amg_msg
3564 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
3565 ,p_msg_attribute => 'CHANGE'
3566 ,p_resize_flag => 'N'
3567 ,p_msg_context => 'PROJ'
3568 ,p_attribute1 => l_project_in_rec.pm_project_reference
3569 ,p_attribute2 => ''
3570 ,p_attribute3 => ''
3571 ,p_attribute4 => ''
3572 ,p_attribute5 => '');
3573 END IF;
3574 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3575 p_return_status := FND_API.G_RET_STS_ERROR;
3576 RAISE FND_API.G_EXC_ERROR;
3577 end if;
3578
3579 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
3580 END if; -- end here
3581 -------------------------------------------------------------------------------------------
3582 ----dbms_output.put_line('before calling get_customer_info');
3583 ----dbms_output.put_line('If project_in_rec_type is there - then control will directl come here');
3584
3585
3586 If (l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3587 OR (l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3588
3589 --bug 3716805
3590 THEN
3591 If l_in_customer_id IS NULL OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3592 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3593 THEN
3594 pa_interface_utils_pub.map_new_amg_msg
3595 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
3596 ,p_msg_attribute => 'CHANGE'
3597 ,p_resize_flag => 'N'
3598 ,p_msg_context => 'PROJ'
3599 ,p_attribute1 => l_project_in_rec.pm_project_reference
3600 ,p_attribute2 => ''
3601 ,p_attribute3 => ''
3602 ,p_attribute4 => ''
3603 ,p_attribute5 => '');
3604 END IF;
3605 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3606 p_return_status := FND_API.G_RET_STS_ERROR;
3607 RAISE FND_API.G_EXC_ERROR;
3608 end if;
3609
3610 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
3611
3612
3613 /* Bug 3077676 Begin */
3614
3615 -- Not adding this error message in get_customer_info as that is called from lot of other places too
3616 -- and it would be a risk changing that.
3617
3618 OPEN get_cust_acc_rel_code;
3619 FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
3620 CLOSE get_cust_acc_rel_code;
3621 -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
3622 -- relations ship code is N.
3623 /* CODE COMMENTED FOR TRACKING BUG
3624 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
3625 l_project_in_rec.customer_id IS NOT NULL AND l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
3626 ((l_project_in_rec.bill_to_customer_id IS NOT NULL AND l_project_in_rec.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3627 l_project_in_rec.customer_id <> l_project_in_rec.bill_to_customer_id
3628 ) or
3629 (
3630 l_project_in_rec.ship_to_customer_id IS NOT NULL AND l_project_in_rec.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3631 l_project_in_rec.customer_id <> l_project_in_rec.ship_to_customer_id
3632 ))
3633 THEN
3634 pa_interface_utils_pub.map_new_amg_msg
3635 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3636 ,p_msg_attribute => 'CHANGE'
3637 ,p_resize_flag => 'Y'
3638 ,p_msg_context => 'PROJ'
3639 ,p_attribute1 => l_project_in_rec.pm_project_reference
3640 ,p_attribute2 => ''
3641 ,p_attribute3 => ''
3642 ,p_attribute4 => ''
3643 ,p_attribute5 => '');
3644 RAISE FND_API.G_EXC_ERROR;
3645 END IF; */
3646 /* Code added for tracking bug */
3647 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
3648 l_in_customer_id IS NOT NULL AND l_in_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
3649 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3650 l_in_customer_id <> l_bill_to_customer_id
3651 ) or
3652 (
3653 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3654 l_in_customer_id <> l_ship_to_customer_id
3655 ))
3656 THEN
3657 pa_interface_utils_pub.map_new_amg_msg
3658 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3659 ,p_msg_attribute => 'CHANGE'
3660 ,p_resize_flag => 'Y'
3661 ,p_msg_context => 'PROJ'
3662 ,p_attribute1 => l_project_in_rec.pm_project_reference
3663 ,p_attribute2 => ''
3664 ,p_attribute3 => ''
3665 ,p_attribute4 => ''
3666 ,p_attribute5 => '');
3667 RAISE FND_API.G_EXC_ERROR;
3668 END IF;
3669
3670 /* End of part 1 tracking */
3671
3672
3673 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done above.
3674 IF NVL(l_cust_acc_rel_code,'N') ='N'
3675 AND l_project_in_rec.customer_id IS NOT NULL AND l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3676 AND l_project_in_rec.bill_to_customer_id IS NOT NULL AND l_project_in_rec.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3677 AND l_project_in_rec.ship_to_customer_id IS NOT NULL AND l_project_in_rec.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3678 AND l_project_in_rec.customer_id <> l_project_in_rec.bill_to_customer_id
3679 AND l_project_in_rec.customer_id <> l_project_in_rec.ship_to_customer_id
3680 THEN
3681 pa_interface_utils_pub.map_new_amg_msg
3682 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3683 ,p_msg_attribute => 'CHANGE'
3684 ,p_resize_flag => 'Y'
3685 ,p_msg_context => 'PROJ'
3686 ,p_attribute1 => l_project_in_rec.pm_project_reference
3687 ,p_attribute2 => ''
3688 ,p_attribute3 => ''
3689 ,p_attribute4 => ''
3690 ,p_attribute5 => '');
3691 RAISE FND_API.G_EXC_ERROR;
3692
3693 END IF;
3694 */
3695 /* Bug 3077676 End */
3696
3697 -- 4193743 IF bill_to_cutomer_id and ship_to_customer_id are not passed set it to NULL
3698 -- as get_customer_info relies on NULL value not the PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3699 -- Using the local variables l_ship_to_customer_id and l_bill_to_customer_id for further processing
3700 /* The code below is being commented by aditi for tracking bug..these assignmentd have already been made
3701 at the begiinning of the customers addition code
3702
3703 IF l_project_in_rec.bill_to_customer_id IS NOT NULL AND
3704 l_project_in_rec.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3705 THEN
3706 l_bill_to_customer_id := NULL;
3707 ELSE
3708 -- if value is passed assign it to local variable
3709 l_bill_to_customer_id := l_project_in_rec.bill_to_customer_id; -- 4193743 review comment
3710 END IF;
3711
3712 IF l_project_in_rec.ship_to_customer_id IS NOT NULL AND
3713 l_project_in_rec.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3714 THEN
3715 l_ship_to_customer_id := NULL;
3716 ELSE
3717 -- if value is passed assign it to local variable
3718 l_ship_to_customer_id := l_project_in_rec.ship_to_customer_id; -- 4193743 review comment
3719 END IF;
3720
3721 -- 4193743 end */
3722
3723 /* Start of changes for bug 5482997 */
3724
3725 IF l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3726 l_bill_to_customer_id := NULL;
3727 END IF;
3728
3729 IF l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3730 l_ship_to_customer_id := NULL;
3731 END IF;
3732
3733 /* End of changes for bug 5482997 */
3734
3735
3736 ----dbms_output.put_line('Before CALLING get_cstomer_info');
3737 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3738 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3739 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3740 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3741 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3742 ----dbms_output.put_line('Value of l_bill_to_contact_id'||l_bill_to_contact_id);
3743 ----dbms_output.put_line('Value of l_ship_to_contact_id'||l_ship_to_contact_id);
3744 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3745
3746 /* Bug 5731766 This code was moved to before get_customer_info call
3747 We need to bypass call get_customer_info if l_proj_type_class
3748 is 'contract'.*/
3749 IF l_project_id IS NOT NULL THEN
3750 OPEN c_prj(l_project_id);
3751 FETCH c_prj INTO l_proj_status, l_proj_type_class;
3752 CLOSE c_prj;
3753 END IF;
3754
3755 --if condition introduced for bug 5731766
3756 --dbms_output.put_line('Value of l_source_project_type '||l_proj_type_class);
3757 If nvl(l_proj_type_class,'NONE') = 'CONTRACT' then
3758 pa_customer_info.get_customer_info( X_project_ID => l_project_id --CAR changes
3759 ,X_Customer_Id => l_in_customer_id -- l_project_in_rec.customer_id tracking
3760 ,X_Bill_To_Customer_Id => l_bill_to_customer_id -- 4193743 l_project_in_rec.bill_to_customer_id -- car changes
3761 ,X_Ship_To_Customer_Id => l_ship_to_customer_id -- 4193743 l_project_in_rec.ship_to_customer_id -- car changes
3762 ,X_Bill_To_Address_Id => l_bill_to_address_id
3763 ,X_Ship_To_Address_Id => l_ship_to_address_id
3764 ,X_Bill_To_Contact_Id => l_bill_to_contact_id
3765 ,X_Ship_To_Contact_Id => l_ship_to_contact_id
3766 ,X_Err_Code => l_err_code
3767 ,X_Err_Stage => l_err_stage
3768 ,X_Err_Stack => l_err_stack
3769 ,p_calling_module => 'AMG' --added for Bug#4770535
3770 );
3771
3772
3773 ----dbms_output.put_line('AFTER calling get_customer_info l_err_code'||l_err_code);
3774 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3775 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3776 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3777 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3778 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3779 ----dbms_output.put_line('Value of l_bill_to_contact_id'||l_bill_to_contact_id);
3780 ----dbms_output.put_line('Value of l_ship_to_contact_id'||l_ship_to_contact_id);
3781 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3782 -- For this API,error code 10 is a warning.Anything above 10 is an error
3783 IF l_err_code > 10
3784 THEN
3785
3786 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3787 THEN
3788
3789 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3790 THEN
3791 pa_interface_utils_pub.map_new_amg_msg
3792 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
3793 ,p_msg_attribute => 'CHANGE'
3794 ,p_resize_flag => 'Y'
3795 ,p_msg_context => 'PROJ'
3796 ,p_attribute1 => l_project_in_rec.pm_project_reference
3797 ,p_attribute2 => ''
3798 ,p_attribute3 => ''
3799 ,p_attribute4 => ''
3800 ,p_attribute5 => '');
3801 ELSE
3802 pa_interface_utils_pub.map_new_amg_msg
3803 ( p_old_message_code => l_err_stage
3804 ,p_msg_attribute => 'CHANGE'
3805 ,p_resize_flag => 'Y'
3806 ,p_msg_context => 'PROJ'
3807 ,p_attribute1 => l_project_in_rec.pm_project_reference
3808 ,p_attribute2 => ''
3809 ,p_attribute3 => ''
3810 ,p_attribute4 => ''
3811 ,p_attribute5 => '');
3812 END IF;
3813
3814 END IF;
3815
3816 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3817 RAISE FND_API.G_EXC_ERROR;
3818
3819 ELSIF l_err_code < 0
3820 THEN
3821
3822 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3823 THEN
3824 pa_interface_utils_pub.map_new_amg_msg
3825 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
3826 ,p_msg_attribute => 'CHANGE'
3827 ,p_resize_flag => 'Y'
3828 ,p_msg_context => 'PROJ'
3829 ,p_attribute1 => l_project_in_rec.pm_project_reference
3830 ,p_attribute2 => ''
3831 ,p_attribute3 => ''
3832 ,p_attribute4 => ''
3833 ,p_attribute5 => '');
3834 END IF;
3835
3836 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3837 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3838 END IF;
3839 end if; --bug 5731766
3840 --bug 5731766
3841 If l_bill_to_customer_id is null then
3842 l_bill_to_customer_id := l_in_customer_id;
3843 end if;
3844
3845 If l_ship_to_customer_id is null then
3846 l_ship_to_customer_id := l_in_customer_id;
3847 end if;
3848 --bug 5731766
3849
3850 -- IC and Multi National Currency Changes starts here ...
3851
3852 /* commented for bug 3000981*/
3853 /* OPEN l_customer_csr (l_project_in_rec.customer_id);
3854 FETCH l_customer_csr INTO l_inv_currency_code,
3855 l_inv_rate_type,
3856 l_inv_rate_date,
3857 l_inv_exchange_rate,
3858 l_allow_inv_rate_type_fg,
3859 l_bill_another_prj_flag,
3860 l_receiver_task_id;
3861 CLOSE l_customer_csr;
3862 */
3863 /* commented till here for bug 3000981*/
3864
3865 /* added for bug 3000981*/
3866 OPEN cur_pa_impl;
3867 FETCH cur_pa_impl INTO l_inv_rate_type;
3868 CLOSE cur_pa_impl;
3869 /* added till for bug 3000981*/
3870
3871
3872 -- IC and Multi National Currency Changes ends here ...
3873
3874 -- Removed because of the ALL OR NOTHING decision
3875 -- --only create customer when there is a billing and shipping address
3876 -- IF l_err_code <> 20
3877 -- THEN
3878
3879 -- Bug 3279981
3880 -- Set the values of customer bill split and default top task customer flag colums based on
3881 -- whether the top task customer flag is checked or not
3882
3883 --sunkalya federal changes. Bug#5511353
3884
3885 IF l_project_in_rec.enable_top_task_customer_flag = 'Y' OR l_project_in_rec.date_eff_funds_flag ='Y' THEN
3886
3887 l_cust_bill_split := null;
3888
3889 IF (l_project_in_rec.enable_top_task_customer_flag = 'Y') THEN
3890
3891 l_def_tt_cust_flag := 'Y';
3892 ELSE
3893 l_def_tt_cust_flag := 'N';
3894 END IF;
3895
3896 ELSIF l_project_in_rec.enable_top_task_customer_flag = 'N' AND l_project_in_rec.date_eff_funds_flag ='N' THEN
3897 l_cust_bill_split := 100;
3898 l_def_tt_cust_flag := 'N';
3899
3900 ELSIF l_project_in_rec.enable_top_task_customer_flag ='N' OR l_project_in_rec.date_eff_funds_flag ='N' THEN
3901
3902 IF l_project_in_rec.enable_top_task_customer_flag ='N' THEN
3903 IF l_orig_date_eff_funds_flag ='Y' THEN
3904 l_cust_bill_split := null;
3905 l_def_tt_cust_flag := 'N';
3906 ELSE
3907 l_cust_bill_split := 100;
3908 l_def_tt_cust_flag := 'N';
3909 END IF;
3910 ELSIF l_project_in_rec.date_eff_funds_flag ='N' THEN
3911 IF l_orig_def_tt_flag ='Y' THEN
3912 l_cust_bill_split := null;
3913 l_def_tt_cust_flag := 'Y';
3914 ELSE
3915 l_cust_bill_split := 100;
3916 l_def_tt_cust_flag := 'N';
3917 END IF;
3918 END IF;
3919
3920 ELSIF l_orig_def_tt_flag = 'Y' OR l_orig_date_eff_funds_flag ='Y' THEN
3921
3922 l_cust_bill_split := null;
3923
3924 IF l_orig_def_tt_flag = 'Y' THEN
3925 l_def_tt_cust_flag := 'Y';
3926 END IF;
3927 ELSE
3928
3929 l_cust_bill_split := 100;
3930 l_def_tt_cust_flag := 'N';
3931
3932 END IF;
3933 --sunkalya:federal changes bug#5511353
3934 ----dbms_output.put_line('Before Calling create_customer_contacts');
3935
3936 pa_customer_info.create_customer_contacts
3937 ( l_project_id
3938 ,l_in_customer_id -- l_project_in_rec.customer_id
3939 ,l_project_relationship_code -- l_relationship_type tracking
3940 --Bug 3279981
3941 --,100
3942 ,l_cust_bill_split
3943 ,l_bill_to_customer_id -- 4193743 l_project_in_rec.bill_to_customer_id -- car changes
3944 ,l_ship_to_customer_id -- 4193743 l_project_in_rec.ship_to_customer_id -- car changes
3945 ,l_bill_to_address_id
3946 ,l_ship_to_address_id
3947 ,l_bill_to_contact_id
3948 ,l_ship_to_contact_id
3949 --bug 2293158
3950 --,nvl(l_inv_currency_code, l_project_currency_code)
3951 ,l_project_currency_code -- bug 3000981
3952 ,l_inv_rate_type
3953 ,l_inv_rate_date
3954 ,l_inv_exchange_rate
3955 ,l_allow_inv_rate_type_fg
3956 ,l_bill_another_prj_flag
3957 ,l_receiver_task_id
3958 ,l_def_tt_cust_flag --Bug 3279981
3959 ,fnd_global.user_id
3960 ,fnd_global.login_id
3961 ,l_err_code
3962 ,l_err_stage
3963 ,l_err_stack );
3964 ----dbms_output.put_line('After Calling create_customer_contacts l_err_code'||l_err_code);
3965
3966
3967 IF l_err_code > 0
3968 THEN
3969
3970 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3971 THEN
3972
3973 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3974 THEN
3975 pa_interface_utils_pub.map_new_amg_msg
3976 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
3977 ,p_msg_attribute => 'CHANGE'
3978 ,p_resize_flag => 'N'
3979 ,p_msg_context => 'PROJ'
3980 ,p_attribute1 => l_project_in_rec.pm_project_reference
3981 ,p_attribute2 => ''
3982 ,p_attribute3 => ''
3983 ,p_attribute4 => ''
3984 ,p_attribute5 => '');
3985 ELSE
3986 pa_interface_utils_pub.map_new_amg_msg
3987 ( p_old_message_code => l_err_stage
3988 ,p_msg_attribute => 'CHANGE'
3989 ,p_resize_flag => 'N'
3990 ,p_msg_context => 'PROJ'
3991 ,p_attribute1 => l_project_in_rec.pm_project_reference
3992 ,p_attribute2 => ''
3993 ,p_attribute3 => ''
3994 ,p_attribute4 => ''
3995 ,p_attribute5 => '');
3996 END IF;
3997
3998 END IF;
3999
4000 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4001 RAISE FND_API.G_EXC_ERROR;
4002
4003 ELSIF l_err_code < 0
4004 THEN
4005
4006 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4007 THEN
4008 pa_interface_utils_pub.map_new_amg_msg
4009 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
4010 ,p_msg_attribute => 'CHANGE'
4011 ,p_resize_flag => 'N'
4012 ,p_msg_context => 'PROJ'
4013 ,p_attribute1 => l_project_in_rec.pm_project_reference
4014 ,p_attribute2 => ''
4015 ,p_attribute3 => ''
4016 ,p_attribute4 => ''
4017 ,p_attribute5 => '');
4018 END IF;
4019
4020 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4021 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4022 END IF;
4023 --END if;
4024
4025 --Call copy retention after all customers are created.
4026 DECLARE
4027 BEGIN
4028 pa_retention_util.copy_retention_setup (
4029 p_fr_project_id => l_project_in_rec.created_from_project_id
4030 ,p_to_project_id => l_project_id
4031 ,p_fr_date => l_project_rec.start_date
4032 ,p_to_date => l_project_rec.completion_date
4033 ,x_return_status => l_return_status
4034 ,x_msg_count => l_msg_count
4035 ,x_msg_data => l_msg_data);
4036
4037 l_msg_count := FND_MSG_PUB.count_msg;
4038 IF l_msg_count > 0 THEN
4039 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4040 RAISE FND_API.G_EXC_ERROR;
4041 END IF;
4042 END;
4043 --End copy retention changes.
4044
4045 -- END IF; --l_err_code <> 20
4046
4047 -- anlee org role changes
4048 -- create a project party if the added customer is an organization
4049 l_party_id := null;
4050 l_project_party_id := null;
4051 OPEN l_check_org_csr(l_in_customer_id);
4052 FETCH l_check_org_csr INTO l_party_id;
4053 IF l_check_org_csr%NOTFOUND then
4054 l_party_id := null;
4055 END IF;
4056 CLOSE l_check_org_csr;
4057
4058 if l_party_id is not null then
4059
4060 PA_PROJECT_PARTIES_PUB.CREATE_PROJECT_PARTY(
4061 p_validate_only => FND_API.G_FALSE
4062 , p_object_id => l_project_id
4063 , p_OBJECT_TYPE => 'PA_PROJECTS'
4064 , p_project_role_id => 100
4065 , p_project_role_type => 'CUSTOMER_ORG'
4066 , p_RESOURCE_TYPE_ID => 112
4067 , p_resource_source_id => l_party_id
4068 , p_start_date_active => null
4069 , p_calling_module => 'FORM'
4070 , p_project_id => l_project_id
4071 , p_project_end_date => null
4072 , p_end_date_active => l_end_date_active
4073 , x_project_party_id => l_project_party_id
4074 , x_resource_id => l_resource_id
4075 , x_wf_item_type => l_wf_item_type
4076 , x_wf_type => l_wf_type
4077 , x_wf_process => l_wf_party_process
4078 , x_assignment_id => l_assignment_id
4079 , x_return_status => l_return_status
4080 , x_msg_count => l_msg_count
4081 , x_msg_data => l_msg_data );
4082
4083 l_msg_count := FND_MSG_PUB.count_msg;
4084 IF l_msg_count > 0 THEN
4085 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4086 RAISE FND_API.G_EXC_ERROR;
4087 END IF;
4088
4089 -- Add the new project party ID to the customers row
4090 UPDATE PA_PROJECT_CUSTOMERS
4091 SET project_party_id = l_project_party_id
4092 WHERE project_id = l_project_id
4093 AND customer_id = l_in_customer_id; -- l_project_in_rec.customer_id; Tracking
4094 end if;
4095
4096 END IF; --customer exists
4097 /*
4098
4099 --Sunkalya federal. Bug#5511353
4100 OPEN count_cust(l_project_id);
4101 FETCH count_cust INTO l_count_cust;
4102 CLOSE count_cust;
4103
4104 OPEN chk_task_level_funding(l_project_id);
4105 FETCH chk_task_level_funding INTO l_chk_task_level_funding;
4106 CLOSE chk_task_level_funding;
4107
4108
4109 IF l_count_cust > 1 AND
4110 l_chk_task_level_funding = 'Y' AND
4111 l_project_in_rec.date_eff_funds_flag = 'N' AND
4112 l_orig_date_eff_funds_flag= 'Y' AND
4113 (
4114 l_project_in_rec.enable_top_task_customer_flag = 'N' OR
4115 (
4116 nvl(l_project_in_rec.enable_top_task_customer_flag,
4117 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
4118 l_orig_def_tt_flag = 'N'
4119 )
4120 )
4121 THEN
4122 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4123 ,p_msg_name => 'PA_TASK_FUNDING_EXIST'
4124 );
4125
4126 l_return_status := FND_API.G_RET_STS_ERROR;
4127
4128 RAISE FND_API.G_EXC_ERROR;
4129
4130 END IF;
4131 --Sunkalya federal. Bug#5511353
4132
4133 */
4134
4135 -- KEY_MEMBER
4136 -- add overridable Key Members
4137
4138 -- l_key_members := p_key_members; Commented for Bug 6408593
4139
4140 i := l_key_members.first;
4141
4142 IF l_key_members.exists(i)
4143 THEN
4144
4145 --checking for overridability is done in the called procedure add_key_members
4146
4147 WHILE i IS NOT NULL LOOP
4148
4149 /*Commented the below code for the bug 2910972 since the defaulting is handled in the
4150 pa_project_parties_pub.create_project_party when a null value is passed*/
4151
4152 /*IF l_key_members(i).start_date IS NULL
4153 OR l_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4154 THEN IF l_project_rec.start_date IS NULL
4155 OR l_project_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4156 THEN l_key_members(i).start_date := trunc(sysdate);
4157 ELSE l_key_members(i).start_date := l_project_rec.start_date;
4158 END IF;
4159 END IF;*/
4160
4161 /*Bug#2910972-Adding the below code*/
4162
4163 IF l_key_members(i).start_date =
4164 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4165 THEN
4166 l_key_members(i).start_date := NULL;
4167 END IF;
4168
4169 /*
4170 -- Not required.Key member end date can be left blank.Otherwise poses
4171 -- problems with security,since a key member has to be currently active
4172 -- to be able to update a project and defaulting the end date to the
4173 -- project's end date would result in inability to update projects
4174 -- with earlier completion dates
4175
4176 IF l_key_members(i).end_date IS NULL
4177 OR l_key_members(i).end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4178 THEN IF l_project_rec.completion_date IS NULL
4179 OR l_project_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4180 THEN l_key_members(i).end_date := NULL;
4181 ELSE l_key_members(i).end_date := l_project_rec.completion_date;
4182 END IF;
4183 END IF;
4184 */
4185 IF l_key_members(i).end_date =
4186 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
4187 l_key_members(i).end_date := NULL;
4188 END IF;
4189
4190 i := l_key_members.next(i);
4191
4192 END LOOP;
4193
4194 pa_project_pvt.add_key_members(l_return_status
4195 ,l_project_in_rec.created_from_project_id
4196 ,l_project_id
4197 ,l_key_members
4198 );
4199
4200 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4201 THEN
4202 p_project_out.return_status := l_return_status;
4203 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4204
4205 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4206 THEN
4207 p_project_out.return_status := l_return_status;
4208 RAISE FND_API.G_EXC_ERROR;
4209 END IF;
4210
4211 /* Start of code for bug #2111806
4212 Call the check_manager_date_range to check if the Project
4213 Manager exists for the complete duration of the Project. */
4214
4215 pa_project_check_pvt.check_manager_date_range(p_project_id => l_project_id
4216 ,p_return_status => l_return_status);
4217
4218 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4219 THEN
4220 p_project_out.return_status := l_return_status;
4221 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4222
4223 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4224 THEN
4225 p_project_out.return_status := l_return_status;
4226 RAISE FND_API.G_EXC_ERROR;
4227 END IF;
4228 /* End of code for bug #2111806 */
4229
4230 END IF;
4231
4232 /* Start of code for bug #2111806
4233 Throw an error if there are no Project Managers assigned.
4234 This has to be thrown irrespective of whether there are any Key Member records
4235 being passed or not. So, it cannot be done in the above IF condition. */
4236
4237
4238 /* Bug 5731766 This code was moved to before get_customer_info call
4239 We need to bypass call get_customer_info if l_proj_type_class
4240 is 'contract'.
4241 IF l_project_id IS NOT NULL THEN
4242 OPEN c_prj(l_project_id);
4243 FETCH c_prj INTO l_proj_status, l_proj_type_class;
4244 CLOSE c_prj;
4245 END IF;
4246 */
4247 /* The check has to be done only for an Approved Contract Type project. */
4248 IF (nvl(l_proj_type_class,'NONE') = 'CONTRACT' AND
4249 nvl(l_proj_status,'UNAPPROVED') = 'APPROVED') THEN
4250 OPEN c_prj_count(l_project_id);
4251 FETCH c_prj_count INTO l_prj_mgr_count;
4252 CLOSE c_prj_count;
4253 IF l_prj_mgr_count = 0 THEN
4254 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4255 pa_utils.add_message
4256 ( p_app_short_name => 'PA'
4257 ,p_msg_name => 'PA_PR_INSUF_PROJ_MGR'
4258 );
4259 RAISE FND_API.G_EXC_ERROR;
4260 END IF;
4261 END IF;
4262 END IF;
4263 /* End of code for bug #2111806 */
4264
4265 -- anlee org role changes
4266 -- ORG_ROLE
4267 -- add overridable Org Roles
4268
4269 l_org_roles := p_org_roles;
4270
4271 i := l_org_roles.first;
4272
4273 IF l_org_roles.exists(i)
4274 THEN
4275
4276 --checking for overridability is done in the called procedure add_org_roles
4277
4278 WHILE i IS NOT NULL LOOP
4279
4280 IF l_org_roles(i).start_date IS NULL
4281 OR l_org_roles(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4282 THEN IF l_project_rec.start_date IS NULL
4283 OR l_project_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4284 THEN l_org_roles(i).start_date := trunc(sysdate);
4285 ELSE l_org_roles(i).start_date := l_project_rec.start_date;
4286 END IF;
4287 END IF;
4288
4289 IF l_org_roles(i).end_date =
4290 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
4291 l_org_roles(i).end_date := NULL;
4292 END IF;
4293
4294 i := l_org_roles.next(i);
4295
4296 END LOOP;
4297
4298 pa_project_pvt.add_org_roles(l_return_status
4299 ,l_project_in_rec.created_from_project_id
4300 ,l_project_id
4301 ,l_org_roles
4302 );
4303
4304 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4305 THEN
4306 p_project_out.return_status := l_return_status;
4307 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4308
4309 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4310 THEN
4311 p_project_out.return_status := l_return_status;
4312 RAISE FND_API.G_EXC_ERROR;
4313 END IF;
4314
4315 END IF;
4316
4317
4318 --CLASS_CATEGORY
4319 --add overidable Class Categories
4320
4321
4322 i := p_class_categories.first;
4323
4324 IF p_class_categories.exists(i)
4325 THEN
4326
4327 --checking for overridability is done in the called procedure add_class_categories
4328
4329 pa_project_pvt.add_class_categories(l_return_status
4330 ,l_project_in_rec.created_from_project_id
4331 ,l_project_id
4332 ,p_class_categories
4333 );
4334
4335 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4336 THEN
4337 p_project_out.return_status := l_return_status;
4338 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4339
4340 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4341 THEN
4342 p_project_out.return_status := l_return_status;
4343 RAISE FND_API.G_EXC_ERROR;
4344 END IF;
4345
4346 END IF;
4347
4348
4349 -- need to understand feature of p_multiple_task_msg := 'F';
4350
4351 --Project Structure Integration
4352 --This creates the
4353 /* not required as
4354 l_delta := PA_PROJ_TASK_STRUC_PUB.get_proj_dates_delta(
4355 l_project_in_rec.created_from_project_id
4356 ,l_out_start_date );
4357 */
4358
4359 /*--bug 2805602 we dont this anymore as copy project will take care of creating structures only
4360 PA_PROJ_TASK_STRUC_PUB.COPY_STRUCTURE(
4361 p_dest_project_id => l_project_id
4362 ,p_src_project_id => l_project_in_rec.created_from_project_id
4363 ,p_delta => l_delta
4364 ,p_copy_task_flag => 'N'
4365 ,x_msg_count => l_msg_count
4366 ,x_msg_data => l_msg_data
4367 ,x_return_status => l_return_status );
4368
4369 --The following code is copied from create_project_party call above.
4370 l_msg_count := FND_MSG_PUB.count_msg;
4371 IF l_msg_count > 0 THEN
4372 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4373 RAISE FND_API.G_EXC_ERROR;
4374 END IF;
4375 */
4376
4377 --Project Connect 4.0
4378 PA_PROJECT_PVT.get_structure_version(
4379 p_project_id => l_project_id
4380 ,p_structure_versions_out => g_struc_out_tbl
4381 );
4382
4383 --Project Connect 4.0
4384
4385 --syns up pa_proj_elements with pa_tasks
4386 /* not required this anymore
4387
4388 --Clean up first the unwanted tasks that are created by copy_structure in pa_proj_elements
4389 --although they had not been created in pa_tasks.
4390
4391 PA_PROJ_TASK_STRUC_PUB.Clean_unwanted_tasks(
4392 p_project_id => l_project_id
4393 ,x_msg_count => l_msg_count
4394 ,x_msg_data => l_msg_data
4395 ,x_return_status => l_return_status
4396 );
4397
4398 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4399 THEN
4400 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4401
4402 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4403 THEN
4404 RAISE FND_API.G_EXC_ERROR;
4405 END IF;
4406 */
4407
4408 --Project Structure Integration
4409
4410 --bug 2738747 --create project api. Here ther is actually no pupose of this call
4411 G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
4412 G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
4413 G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
4414 --bug 2738747
4415
4416 G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
4417 --Begin Add by rtarway FP.M changes for mapping
4418 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
4419 --End Add by rtarway FP.M changes for mapping
4420
4421 --TASK
4422 --add tasks to the just created project
4423
4424 --ISSUE
4425 --Where do I get the info about automatic numbering for SEGMENT1
4426
4427 -- l_structure_type := p_structure_in.structure_type;
4428
4429 i := p_tasks_in.first;
4430
4431 v_first_index := i; --proj conn
4432
4433 -- Bug 4146369 : Added following condition so that the error comes if user has passed tasks
4434 -- and when both the structures are disbaled in the source project.
4435 -- If we do not raise error here, then user will get Invalid Paramters passed error
4436 -- which will not make much sense to users.
4437 l_bug_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( l_project_in_rec.created_from_project_id );
4438 l_bug_fp_enabled := PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( l_project_in_rec.created_from_project_id );
4439
4440 IF l_bug_wp_enabled = 'N' AND l_bug_fp_enabled = 'N' AND p_tasks_in.exists(i)
4441 THEN
4442 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4443 p_msg_name =>'PA_WRONG_STR_TYPE_AMG'); -- 'PA_TASKS_NOT_ALLOWD_AMG' -- It is decided to use the same message in this case too
4444 -- Workplan or Financial Structures must be enabled at source project/template level in order to enter Tasks.
4445 RAISE FND_API.G_EXC_ERROR ;
4446 ELSIF l_bug_wp_enabled = 'Y' AND l_bug_fp_enabled = 'N' AND p_tasks_in.exists(i) AND l_structure_in_rec.structure_type = 'FINANCIAL'
4447 THEN
4448 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4449 p_msg_name => 'PA_WRONG_STR_TYPE_AMG' );
4450 -- Please enter the correct structure type or enable the Workplan/Financial structure at the source project/template level.
4451 RAISE FND_API.G_EXC_ERROR ;
4452 ELSIF l_bug_wp_enabled = 'N' AND l_bug_fp_enabled = 'Y' AND p_tasks_in.exists(i) AND l_structure_in_rec.structure_type = 'WORKPLAN'
4453 THEN
4454 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4455 p_msg_name => 'PA_WRONG_STR_TYPE_AMG' );
4456 -- Please enter the correct structure type or enable the Workplan/Financial structure at the source project/template level.
4457 RAISE FND_API.G_EXC_ERROR ;
4458 END IF;
4459
4460 IF p_tasks_in.exists(i)
4461 --Project Structures
4462 AND l_structure_in_rec.structure_type = 'FINANCIAL'
4463 --Project Structures
4464 THEN
4465
4466 --Inserting tasks will be done in 2 steps
4467 --1> an INSERT step to get a task_id linked to task_reference
4468 --2> and then an UPDATE step to get the appropriate parent id and toptask id.
4469 --This second step will also be used to default data from parents to children.
4470
4471 --get the project_type_class_code and service_code associated to the project_type
4472
4473 OPEN l_project_type_csr(l_project_rec.project_type);
4474 FETCH l_project_type_csr INTO l_project_type_rec;
4475 CLOSE l_project_type_csr;
4476
4477
4478 --ROUND TRIP 1
4479
4480 WHILE i IS NOT NULL LOOP
4481
4482 --initialize return status to success
4483 p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
4484
4485 l_task_in_rec := p_tasks_in(i);
4486
4487 pa_project_pvt.validate_billing_info (
4488 p_project_id =>l_project_id, -- Added for Bug 5643876
4489 p_project_class_code =>l_project_type_rec.project_type_class_code,
4490 p_in_task_rec =>l_task_in_rec,
4491 p_return_status =>l_return_status
4492 );
4493
4494
4495 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4496 THEN
4497 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4498
4499 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4500 THEN
4501 p_multiple_task_msg := 'F';
4502 -- RAISE FND_API.G_EXC_ERROR;
4503 END IF;
4504
4505 -- Actions performed using the APIs would be subject to
4506 -- function security. If the responsibility does not allow
4507 -- such functions to be executed, the API should not proceed further
4508 -- since the user does not have access to such functions
4509
4510 -- Function security procedure check whether user have the
4511 -- privilege to add task or not
4512
4513 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
4514 --above before checking for create_project function.
4515
4516 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
4517 (p_api_version_number => p_api_version_number,
4518 p_responsibility_id => l_resp_id,
4519 p_function_name => 'PA_PM_ADD_TASK',
4520 p_msg_count => l_msg_count,
4521 p_msg_data => l_msg_data,
4522 p_return_status => l_return_status,
4523 p_function_allowed => l_function_allowed);
4524
4525
4526 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4527 THEN
4528 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4529
4530 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4531 THEN
4532 p_multiple_task_msg := 'F';
4533 -- RAISE FND_API.G_EXC_ERROR;
4534 END IF;
4535
4536 IF l_function_allowed = 'N' THEN
4537 pa_interface_utils_pub.map_new_amg_msg
4538 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
4539 ,p_msg_attribute => 'CHANGE'
4540 ,p_resize_flag => 'Y'
4541 ,p_msg_context => 'GENERAL'
4542 ,p_attribute1 => ''
4543 ,p_attribute2 => ''
4544 ,p_attribute3 => ''
4545 ,p_attribute4 => ''
4546 ,p_attribute5 => '');
4547 p_return_status := FND_API.G_RET_STS_ERROR;
4548 p_multiple_task_msg := 'F';
4549 -- RAISE FND_API.G_EXC_ERROR;
4550 END IF;
4551
4552 /*Code added for bug 2982057*/
4553
4554 IF l_task_in_rec.long_task_name IS NULL
4555 OR l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4556 THEN
4557 l_task_in_rec.long_task_name := l_task_in_rec.task_name;
4558 ELSE
4559 l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
4560 END IF;
4561
4562 /*Code addition for bug 2982057 ends*/
4563
4564 pa_project_pvt.add_task_round_one(l_return_status
4565 ,l_project_rec
4566 ,l_task_in_rec
4567 ,l_project_type_rec.project_type_class_code
4568 ,l_project_type_rec.service_type_code
4569 ,l_task_id);
4570
4571 -- assign the appropriate values to the task out record
4572 p_tasks_out(i).return_status := l_return_status;
4573 p_tasks_out(i).pa_task_id := l_task_id;
4574 p_tasks_out(i).pm_task_reference := l_task_in_rec.pm_task_reference;
4575
4576 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4577 THEN
4578 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4579
4580 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4581 THEN
4582 p_multiple_task_msg := 'F';
4583 -- RAISE FND_API.G_EXC_ERROR;
4584 END IF;
4585
4586 i := p_tasks_in.next(i);
4587
4588 END LOOP;
4589
4590 --ROUND TRIP 2
4591
4592 i := p_tasks_in.first;
4593
4594 WHILE i IS NOT NULL LOOP
4595
4596 --move the incoming record to a local record
4597 l_task_in_rec := p_tasks_in(i);
4598
4599 --get the unique task ID for this task
4600 l_task_id := p_tasks_out(i).pa_task_id;
4601
4602 pa_project_pvt.add_task_round_two(l_return_status
4603 ,l_project_rec
4604 ,l_task_id
4605 ,l_task_in_rec
4606 --project structures
4607 ,null
4608 ,p_tasks_in
4609 ,p_tasks_out
4610 ,l_task_version_id
4611 ,'N' -- Bug 2931183 p_create_task_structure param.
4612 -- distinguishes bulk calling context.
4613 --project structures
4614 );
4615
4616 -- assign the return_status to the task out record
4617 p_tasks_out(i).return_status := l_return_status;
4618 p_tasks_out(i).task_version_id := l_task_version_id;
4619
4620 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4621 THEN
4622 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4623
4624 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4625 THEN
4626 p_multiple_task_msg := 'F';
4627 -- RAISE FND_API.G_EXC_ERROR;
4628 END IF;
4629
4630 --move to next task in task pl/sql table
4631 i := p_tasks_in.next(i);
4632
4633 END LOOP;
4634
4635 --Project Structures
4636 ELSIF p_tasks_in.exists(i)
4637 AND l_structure_in_rec.structure_type = 'WORKPLAN'
4638 THEN
4639
4640 IF G_WP_STR_EXISTS = 'N' OR
4641 G_IS_WP_SEPARATE_FROM_FN = 'N' --bug 2876703 --create project
4642 THEN
4643 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4644 THEN
4645 pa_interface_utils_pub.map_new_amg_msg
4646 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
4647 ,p_msg_attribute => 'CHANGE'
4648 ,p_resize_flag => 'N'
4649 ,p_msg_context => 'GENERAL'
4650 ,p_attribute1 => ''
4651 ,p_attribute2 => ''
4652 ,p_attribute3 => ''
4653 ,p_attribute4 => ''
4654 ,p_attribute5 => '');
4655 END IF;
4656 RAISE FND_API.G_EXC_ERROR;
4657 END IF;
4658
4659 -- Actions performed using the APIs would be subject to
4660 -- function security. If the responsibility does not allow
4661 -- such functions to be executed, the API should not proceed further
4662 -- since the user does not have access to such functions
4663
4664 -- Function security procedure check whether user have the
4665 -- privilege to add task or not
4666
4667 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
4668 --above before checking for create_project function.
4669
4670 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
4671 (p_api_version_number => p_api_version_number,
4672 p_responsibility_id => l_resp_id,
4673 p_function_name => 'PA_PM_ADD_TASK',
4674 p_msg_count => l_msg_count,
4675 p_msg_data => l_msg_data,
4676 p_return_status => l_return_status,
4677 p_function_allowed => l_function_allowed);
4678
4679
4680 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4681 THEN
4682 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4683
4684 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4685 THEN
4686 p_multiple_task_msg := 'F';
4687 RAISE FND_API.G_EXC_ERROR;
4688 END IF;
4689
4690 IF l_function_allowed = 'N' THEN
4691 pa_interface_utils_pub.map_new_amg_msg
4692 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
4693 ,p_msg_attribute => 'CHANGE'
4694 ,p_resize_flag => 'Y'
4695 ,p_msg_context => 'GENERAL'
4696 ,p_attribute1 => ''
4697 ,p_attribute2 => ''
4698 ,p_attribute3 => ''
4699 ,p_attribute4 => ''
4700 ,p_attribute5 => '');
4701 p_return_status := FND_API.G_RET_STS_ERROR;
4702 p_multiple_task_msg := 'F';
4703 RAISE FND_API.G_EXC_ERROR;
4704 END IF;
4705 /*
4706 FP K one off Bug 2931183
4707 Commenting out this loop. Instead of this processing, we will call process_task_structure_bulk
4708 API which needs to be called only once.
4709
4710
4711
4712 WHILE i IS NOT NULL LOOP
4713
4714 --initialize return status to success
4715 p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
4716
4717 l_task_in_rec := p_tasks_in(i);
4718
4719 IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
4720 AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
4721 THEN
4722 v_parent_task_id := l_task_in_rec.pa_parent_task_id;
4723 ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4724 AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
4725 THEN
4726 --convert pm_parent_task_reference to parent_task_id.
4727 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
4728 PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
4729 p_pm_parent_task_reference => l_task_in_rec.pm_parent_task_reference
4730 ,p_project_id => l_project_id
4731 ,x_parent_task_id => v_parent_task_id
4732 ,x_return_status => l_return_status
4733 );
4734
4735 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4736 THEN
4737 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4738 THEN
4739 pa_interface_utils_pub.map_new_amg_msg
4740 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
4741 ,p_msg_attribute => 'CHANGE'
4742 ,p_resize_flag => 'N'
4743 ,p_msg_context => 'TASK'
4744 ,p_attribute1 => l_amg_segment1
4745 ,p_attribute2 => l_amg_task_number
4746 ,p_attribute3 => ''
4747 ,p_attribute4 => ''
4748 ,p_attribute5 => '');
4749 END IF;
4750 RAISE FND_API.G_EXC_ERROR;
4751 END IF;
4752
4753 ELSE
4754 v_parent_task_id := null;
4755 END IF;
4756
4757 --proj conn
4758 IF i = v_first_index
4759 THEN
4760 l_ref_task_id := null;
4761 ELSE
4762 l_ref_task_id := v_task_id;
4763 END IF;
4764 --proj conn
4765
4766 PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
4767 p_project_id => l_project_id
4768 ,p_task_id => l_task_in_rec.pa_task_id
4769 ,p_parent_task_id => v_parent_task_id
4770 ,p_ref_task_id => l_ref_task_id --proj conn
4771 ,p_task_number => l_task_in_rec.pa_task_number
4772 ,p_task_name => l_task_in_rec.long_task_name --bug 2833194
4773 ,p_task_description => l_task_in_rec.task_description
4774 ,p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id
4775 ,p_calling_module => 'AMG'
4776 ,p_structure_type => l_structure_in_rec.structure_type
4777 ,p_OBLIGATION_START_DATE => l_task_in_rec.OBLIGATION_START_DATE
4778 ,p_OBLIGATION_FINISH_DATE => l_task_in_rec.OBLIGATION_FINISH_DATE
4779 ,p_ESTIMATED_START_DATE => l_task_in_rec.ESTIMATED_START_DATE
4780 ,p_ESTIMATED_FINISH_DATE => l_task_in_rec.ESTIMATED_FINISH_DATE
4781 ,p_BASELINE_START_DATE => l_task_in_rec.BASELINE_START_DATE
4782 ,p_BASELINE_FINISH_DATE => l_task_in_rec.BASELINE_FINISH_DATE
4783 ,p_CLOSED_DATE => l_task_in_rec.CLOSED_DATE
4784 ,p_WQ_UOM_CODE => l_task_in_rec.WQ_UOM_CODE
4785 ,p_WQ_ITEM_CODE => l_task_in_rec.WQ_ITEM_CODE
4786 ,p_STATUS_CODE => l_task_in_rec.STATUS_CODE
4787 ,p_WF_STATUS_CODE => l_task_in_rec.WF_STATUS_CODE
4788 ,p_PM_SOURCE_CODE => p_PM_product_code
4789 ,p_PRIORITY_CODE => l_task_in_rec.PRIORITY_CODE
4790 ,p_MILESTONE_FLAG => l_task_in_rec.MILESTONE_FLAG
4791 ,p_CRITICAL_FLAG => l_task_in_rec.CRITICAL_FLAG
4792 ,p_INC_PROJ_PROGRESS_FLAG => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
4793 ,p_LINK_TASK_FLAG => l_task_in_rec.LINK_TASK_FLAG
4794 ,p_CALENDAR_ID => l_task_in_rec.CALENDAR_ID
4795 ,p_PLANNED_EFFORT => l_task_in_rec.PLANNED_EFFORT
4796 ,p_DURATION => l_task_in_rec.DURATION
4797 ,p_PLANNED_WORK_QUANTITY => l_task_in_rec.PLANNED_WORK_QUANTITY
4798 ,p_TASK_TYPE => l_task_in_rec.TASK_TYPE
4799 ,p_actual_start_date => l_task_in_rec.actual_start_date
4800 ,p_actual_finish_date => l_task_in_rec.actual_finish_date
4801 ,p_early_start_date => l_task_in_rec.early_start_date
4802 ,p_early_finish_date => l_task_in_rec.early_finish_date
4803 ,p_late_start_date => l_task_in_rec.late_start_date
4804 ,p_late_finish_date => l_task_in_rec.late_finish_date
4805 ,p_scheduled_start_date => l_task_in_rec.scheduled_start_date
4806 ,p_scheduled_finish_date => l_task_in_rec.scheduled_finish_date
4807 ,P_PM_SOURCE_reference => l_task_in_rec.pm_task_reference
4808 ,p_location_id => l_task_in_rec.address_id
4809 ,p_manager_person_id => l_task_in_rec.task_manager_person_id
4810 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
4811 ,p_ext_act_duration => l_task_in_rec.ext_act_duration
4812 ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
4813 ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
4814 -- (End venkat) new params for bug #3450684 -------------------------------------------------
4815 ,x_task_version_id => l_task_version_id
4816 ,x_task_id => v_task_id
4817 ,x_msg_count => l_msg_count
4818 ,x_msg_data => l_msg_data
4819 ,x_return_status => l_return_status
4820 );
4821
4822 -- assign the appropriate values to the task out record
4823 p_tasks_out(i).return_status := l_return_status;
4824 p_tasks_out(i).pa_task_id := v_task_id;
4825 p_tasks_out(i).task_version_id := l_task_version_id;
4826 p_tasks_out(i).pm_task_reference := l_task_in_rec.pm_task_reference;
4827
4828 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4829 THEN
4830 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4831
4832 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4833 THEN
4834 p_multiple_task_msg := 'F';
4835 RAISE FND_API.G_EXC_ERROR;
4836 END IF;
4837
4838 i := p_tasks_in.next(i);
4839
4840 END LOOP;
4841
4842 FP K one off Bug 2931183
4843 */
4844 --Project Structures
4845
4846 END IF; --p_tasks_in.exists(i)
4847
4848 -- Bug 5622539
4849 pa_project_pvt.validate_data(
4850 p_calling_context => 'CREATE_PROJECT',
4851 p_project_id => l_project_id,
4852 x_msg_count => l_msg_count,
4853 x_msg_data => l_msg_data,
4854 x_return_status => l_return_status
4855 );
4856 p_return_status := l_return_status;
4857
4858 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4859 THEN
4860 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4861
4862 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4863 THEN
4864 RAISE FND_API.G_EXC_ERROR;
4865 END IF;
4866
4867 -- Made the following changes for post FP K one off. Bug 2931183
4868 -- Performance changes.
4869 IF l_debug_mode = 'Y' THEN
4870 pa_debug.g_err_stage := 'Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
4871 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
4872 END IF;
4873
4874 --Set the global variable G_OP_VALIDATE_FLAG.
4875 --BUG 4218977
4876 G_OP_VALIDATE_FLAG := p_op_validate_flag;
4877
4878 PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK
4879 ( p_api_version_number => p_api_version_number
4880 ,p_commit => FND_API.G_FALSE --p_commit : Bug 3668424: passing p_commit as FND_API.G_FALSE
4881 ,p_project_id => l_project_id -- Changed during UT.
4882 ,p_source_project_id => l_project_in_rec.created_from_project_id --ADUT. Included this new param.
4883 ,p_pm_product_code => p_pm_product_code
4884 ,p_structure_type => p_structure_in.structure_type
4885 ,p_tasks_in_tbl => p_tasks_in
4886 ,p_wp_str_exists => G_WP_STR_EXISTS
4887 ,p_is_wp_separate_from_fn => G_IS_WP_SEPARATE_FROM_FN
4888 ,p_is_wp_versioning_enabled => G_IS_WP_VERSIONING_ENABLED
4889 ,p_structure_version_id => null
4890 ,p_process_mode => l_project_in_rec.process_mode -- PA L Changes 3010538
4891 ,px_tasks_out_tbl => p_tasks_out
4892 ,x_return_status => p_return_status
4893 ,x_msg_count => p_msg_count
4894 ,x_msg_data => p_msg_data
4895 );
4896
4897 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4898 IF l_debug_mode = 'Y' THEN
4899 pa_debug.g_err_stage := 'Errors in PROCESS_TASK_STRUCTURE_BULK ' ;
4900 pa_debug.write(g_module_name,pa_debug.g_err_stage,4);
4901 END IF;
4902 p_multiple_task_msg := 'F';
4903 END IF;
4904
4905 IF l_debug_mode = 'Y' THEN
4906 pa_debug.g_err_stage := 'Returned from PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
4907 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
4908 END IF;
4909
4910 /* Post FP K one off. Bug 2931183
4911 Commenting this code as this is done in PA_PROJ_TASK_STRUC_PUB.process_task_structure_bulk.
4912 --bug 2732895 --create_project
4913 IF ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
4914 ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND l_structure_in_rec.structure_type = 'WORKPLAN' ) --should not call fif tasks are added to financial structure version
4915 THEN
4916 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
4917 p_tasks_in => p_tasks_out
4918 ,p_task_version_id => null
4919 ,x_msg_count => l_msg_count
4920 ,x_msg_data => l_msg_data
4921 ,x_return_status => l_return_status
4922 );
4923
4924 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4925 THEN
4926 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4927
4928 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4929 THEN
4930 p_multiple_task_msg := 'F';
4931 RAISE FND_API.G_EXC_ERROR;
4932 END IF;
4933
4934 --bug 2856033
4935
4936 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
4937 p_tasks_in => p_tasks_out
4938 ,p_task_version_id => null
4939 ,p_project_id => l_project_id
4940 ,P_structure_version_id => null
4941 ,x_msg_count => l_msg_count
4942 ,x_msg_data => l_msg_data
4943 ,x_return_status => l_return_status
4944 );
4945
4946 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4947 THEN
4948 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4949
4950 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4951 THEN
4952 p_multiple_task_msg := 'F';
4953 RAISE FND_API.G_EXC_ERROR;
4954 END IF;
4955
4956 --bug 2856033
4957
4958 END IF;
4959 --bug 2732895
4960 Post FP K one off. Bug 2931183
4961 */
4962 IF p_multiple_task_msg = 'F'
4963 THEN
4964 RAISE FND_API.G_EXC_ERROR;
4965 END IF;
4966
4967 -- FP-M Bug # 3301192 --create project
4968 l_d_loop_count := p_tasks_in.first;
4969 WHILE l_d_loop_count IS NOT NULL LOOP
4970 l_task_in_rec := p_tasks_in(l_d_loop_count);
4971
4972 /*PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_project_out.pa_project_id
4973 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
4974 ,p_out_task_id => l_d_task_id
4975 ,p_return_status => l_return_status);*/
4976
4977 --Begin Comment by rtarway for FP.M Changes,
4978 --This call is redundant because Task Id is already available,
4979 --Also CONVERT_PM_TASKREF_TO_ID will fail is Spilt_mapping
4980 -- p_project_out.pa_project_id is not available till this point. Should be replaced by following.
4981 -- l_d_task_id := p_tasks_out(l_d_loop_count).pa_task_id;
4982
4983 --Commented by rtarway FP.M Changes for Mapping
4984 --IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(p_project_out.pa_project_id) = 'Y') THEN
4985 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
4986
4987 --maansari5/18 replaced api call CONVERT_PM_TASKREF_TO_ID to CONVERT_PM_TASKREF_TO_ID_all
4988 IF l_d_task_id IS NULL AND
4989 l_task_in_rec.pm_task_reference IS NOT NULL AND
4990 l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4991 THEN
4992 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id
4993 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
4994 ,p_structure_type => p_structure_in.structure_type
4995 ,p_out_task_id => l_d_task_id
4996 ,p_return_status => l_return_status);
4997
4998 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4999 THEN
5000 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5001 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5002 THEN
5003 p_multiple_task_msg := 'F';
5004 RAISE FND_API.G_EXC_ERROR;
5005 END IF;
5006 END IF;
5007 --maansari5/18
5008
5009 --Set the global variable G_OP_VALIDATE_FLAG before going for dependence validation.
5010
5011 IF NVL(PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED,'N') = 'Y'
5012 THEN
5013 l_d_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
5014 ELSE
5015 l_d_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID( l_project_id, 'WORKPLAN');
5016 END IF;
5017
5018 l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_d_structure_version_id
5019 ,p_task_id => l_d_task_id);
5020
5021 pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
5022 ,p_delimeter => l_task_in_rec.pred_delimiter
5023 ,p_task_version_Id => l_d_task_ver_id
5024 ,x_return_status => l_return_status
5025 ,x_msg_count => l_msg_count
5026 ,x_msg_data => l_msg_data);
5027
5028 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5029 THEN
5030 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5031 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5032 THEN
5033 p_multiple_task_msg := 'F';
5034 RAISE FND_API.G_EXC_ERROR;
5035 END IF;
5036 l_d_task_id := null;
5037
5038 END IF;
5039 l_d_loop_count := p_tasks_in.next(l_d_loop_count);
5040 END LOOP;
5041 -- Check to see if WF had been enabled by Copy projects
5042 -- If so, then need to commit.
5043
5044 OPEN l_get_wf_status_csr (l_project_id);
5045 FETCH l_get_wf_status_csr INTO l_wf_status_code;
5046 CLOSE l_get_wf_status_csr;
5047
5048 p_project_out.pa_project_id := l_project_id;
5049 p_project_out.pa_project_number := l_project_number_out;
5050
5051 -- Need to commit if either workflow had been started
5052 -- or p_commit was TRUE
5053
5054 -- 22-DEC-97, jwhite ----------------------------------------------------------
5055 -- Added new OUT-paramter p_workflow_started
5056
5057 IF (l_wf_status_code = 'IN_ROUTE' )
5058 THEN
5059 p_workflow_started := 'Y';
5060 END IF;
5061 -- -----------------------------------------------------------------------------------
5062
5063 --<EA Add Project/Task level Extensible Attributes>
5064
5065 i := p_ext_attr_tbl_in.first;
5066
5067 IF p_ext_attr_tbl_in.exists(i)
5068 THEN
5069 PA_USER_ATTR_PUB.Process_User_Attrs_Data(
5070 p_ext_attr_data_table => p_ext_attr_tbl_in,
5071 p_project_id => l_project_id,
5072 p_structure_type => l_structure_in_rec.structure_type,
5073 x_failed_row_id_list => l_failed_row_id_list,
5074 x_errorcode => l_errorcode,
5075 x_msg_count => l_msg_count,
5076 x_msg_data => l_msg_data,
5077 x_return_status => l_return_status );
5078
5079 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5080 THEN
5081 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5082 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5083 THEN
5084 RAISE FND_API.G_EXC_ERROR;
5085 END IF;
5086 END IF;
5087 --</EA Add Project/Task level Extensible Attributes>
5088 --Begin Add by rtarway for set financial task
5089
5090 IF (G_PROJECT_SHARING_TYPE='SHARE_PARTIAL' AND l_structure_in_rec.structure_type = 'FINANCIAL' )
5091 THEN
5092 i := p_tasks_in.first();
5093
5094 WHILE i IS NOT NULL LOOP
5095 --Initialize the return status to success
5096 p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
5097 l_task_in_rec := p_tasks_in(i);
5098 l_patask_record_version_number := NULL;
5099 --No Function Security Check required
5100
5101 --Get record version number from pa_tasks table
5102 OPEN c_get_pa_record_version_number ( p_tasks_out(i).task_version_id , l_project_id);
5103 FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
5104 CLOSE c_get_pa_record_version_number;
5105
5106 --If the record version Number is null, initialize it to 1 , considering in create project, It will be new record
5107 IF (l_patask_record_version_number IS NULL)
5108 THEN l_patask_record_version_number := 1;
5109 END IF;
5110
5111 IF (
5112 l_task_in_rec.financial_task_flag IS NOT NULL
5113 AND
5114 l_task_in_rec.financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5115 )
5116 THEN
5117
5118 PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
5119 (
5120 p_api_version => p_api_version_number
5121 , p_init_msg_list => FND_API.G_FALSE
5122 , p_commit => FND_API.G_FALSE--BUG 3766967
5123 , p_calling_module => 'AMG'
5124 , p_debug_mode => FND_API.G_TRUE
5125 , p_task_version_id => p_tasks_out(i).task_version_id
5126 , p_checked_flag => l_task_in_rec.financial_task_flag
5127 , p_record_version_number => l_patask_record_version_number
5128 , p_project_id => l_project_id
5129 , p_published_version_exists => G_Published_version_exists
5130 , x_return_status => l_return_status
5131 , x_msg_count => l_msg_count
5132 , x_msg_data => l_msg_data
5133 );
5134
5135 -- Populating the appropriate values in task out records
5136 p_tasks_out(i).return_status := l_return_status;
5137 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5138 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5139 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5140 RAISE FND_API.G_EXC_ERROR;
5141 END IF;
5142 END IF;
5143 i := p_tasks_in.next(i);
5144 END LOOP;
5145 END IF;
5146 --End Set Financial Task Changes
5147 --End Add by rtarway FP.M Changes for Set Financial Tasks
5148
5149 --Begin Add by rtarway FP.M Changes for Mapping
5150 --Add the call to create mapping
5151 IF (G_PROJECT_SHARING_TYPE='SPLIT_MAPPING' AND l_structure_in_rec.structure_type = 'WORKPLAN' )
5152 THEN
5153 i := p_tasks_in.first();
5154 WHILE i IS NOT NULL LOOP
5155 --Initialize the return status to success
5156 l_return_status := FND_API.G_RET_STS_SUCCESS;
5157 l_task_in_rec := p_tasks_in(i);
5158
5159 --No Function Security Check required
5160 --Call the create_mapping only id p_mapped_task_reference or p_mapped_task_id is passed
5161 IF (
5162 ( p_tasks_in(i).mapped_task_id IS NOT NULL AND p_tasks_in(i).mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
5163 OR
5164 ( p_tasks_in(i).mapped_task_reference IS NOT NULL AND p_tasks_in(i).mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5165 )
5166 THEN
5167 pa_project_pub.create_mapping
5168 (
5169 p_api_version => p_api_version_number
5170 , p_init_msg_list => FND_API.G_FALSE
5171 , p_commit => FND_API.G_FALSE--bug 3766967
5172 , p_debug_mode => FND_API.G_TRUE
5173 , p_project_id => l_project_id
5174 , p_proj_source_reference => null
5175 , p_wkp_structure_version_id => l_d_structure_version_id
5176 , p_wkp_task_id => p_tasks_out(i).pa_task_id--Since the tasks are already created , this will have task Ids
5177 , px_mapped_task_id => p_tasks_in(i).mapped_task_id
5178 , p_mapped_task_reference => p_tasks_in(i).mapped_task_reference
5179 , x_return_status => l_return_status
5180 , x_msg_count => l_msg_count
5181 , x_msg_data => l_msg_data
5182 );
5183 -- Populating the appropriate values in task out records
5184 p_tasks_out(i).return_status := l_return_status;
5185 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5186 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5187 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5188 RAISE FND_API.G_EXC_ERROR;
5189 END IF;
5190 END IF;
5191 i := p_tasks_in.next(i);
5192 END LOOP;
5193 END IF;
5194 --End Create Mapping
5195 --End Add by rtarway FP.M Changes for Mapping
5196
5197 ------ 3435905 : FP M : Deliverables Changes For AMG Start-----------
5198
5199 -- 3700247, added code to check for source template/project deliverable is enabled or not
5200 -- if deliverable is enabled for source, call enable_deliverable api to enable deliverable for target project
5201 -- if deliverable is not enabled for source and for target deliverables are loaded, throw error message
5202
5203 G_DLVR_STRUCTURE_ENABLED := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_in_rec.created_from_project_id);
5204
5205 IF l_debug_mode = 'Y' THEN
5206 pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
5207 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
5208 END IF;
5209
5210 i := p_deliverables_in.first();
5211
5212 IF ( G_DLVR_STRUCTURE_ENABLED = 'Y' ) THEN
5213 Pa_Deliverable_Utils.enable_deliverable(
5214 p_api_version => p_api_version_number
5215 , p_init_msg_list => FND_API.G_FALSE
5216 , p_commit => FND_API.G_FALSE--bug 3766967
5217 , p_debug_mode => l_debug_mode
5218 , p_validate_only => FND_API.G_FALSE
5219 , p_project_id => l_project_id
5220 , x_return_status => l_return_status
5221 , x_msg_count => l_msg_count
5222 , x_msg_data => l_msg_data
5223 );
5224
5225 -- 3700247 Added code to validate return status after enable_deliverabl call
5226 -- if return status is not 'S', raise the exception
5227
5228 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5229 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5230 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5231 RAISE FND_API.G_EXC_ERROR;
5232 END IF;
5233
5234 ELSE
5235 IF i IS NOT NULL THEN
5236 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
5237 ,p_msg_name => 'PA_DLV_STRUCTURE_DISABLED');
5238 l_return_status := FND_API.G_RET_STS_ERROR;
5239 RAISE FND_API.G_EXC_ERROR;
5240 END IF;
5241 END IF;
5242
5243 WHILE i IS NOT NULL LOOP
5244 l_deliverable_id := null;
5245
5246 -- A call to Create_Deliverables api creates one deliverable and its
5247 -- assoicated actions.
5248
5249 -- Invoking the Create Deliverable API
5250 Pa_Project_Pub.create_deliverable
5251 ( p_api_version => p_api_version_number
5252 , p_init_msg_list => p_init_msg_list
5253 -- 3735792, passing p_commit as false to next level api calls
5254 , p_commit => FND_API.G_FALSE
5255 , x_return_status => l_return_status
5256 , p_deliverable_name => p_deliverables_in(i).deliverable_name
5257 , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
5258 , p_deliverable_type_id => p_deliverables_in(i).deliverable_type_id
5259 , p_deliverable_owner_id => p_deliverables_in(i).deliverable_owner_id
5260 , p_description => p_deliverables_in(i).description
5261 , p_status_code => p_deliverables_in(i).status_code
5262 , p_due_date => p_deliverables_in(i).due_date
5263 , p_completion_date => p_deliverables_in(i).completion_date
5264 , p_progress_weight => p_deliverables_in(i).progress_weight
5265 , px_deliverable_id => l_deliverable_id
5266 , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
5267 -- for bug# 3729250
5268 -- , p_carrying_out_org_id => p_deliverables_in(i).carrying_out_org_id
5269 , p_task_id => p_deliverables_in(i).task_id
5270 , p_task_source_reference => p_deliverables_in(i).task_source_reference
5271 , p_project_id => l_project_id
5272 , p_proj_source_reference => null
5273 , p_action_in_tbl => p_deliverable_actions_in
5274 -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
5275 -- , x_action_out_tbl => p_deliverable_actions_out
5276 , x_action_out_tbl => G_deliverable_actions_out_tbl
5277 , p_item_id => p_deliverables_in(i).item_id --Added for bug 3630378
5278 , p_inventory_org_id => p_deliverables_in(i).inventory_org_id
5279 , p_quantity => p_deliverables_in(i).quantity
5280 , p_uom_code => p_deliverables_in(i).uom_code
5281 -- for bug# 3729250
5282 -- , p_item_description => p_deliverables_in(i).item_description
5283 , p_unit_price => p_deliverables_in(i).unit_price
5284 , p_unit_number => p_deliverables_in(i).unit_number
5285 , p_currency_code => p_deliverables_in(i).currency_code
5286 , p_pm_source_code => p_pm_product_code /* Bug no. 3651113 */
5287 , x_msg_count => l_msg_count
5288 , x_msg_data => l_msg_data
5289 );
5290
5291 G_deliverables_out_tbl(i).return_status := l_return_status;
5292 G_deliverables_out_tbl(i).deliverable_id := l_deliverable_id;
5293
5294 -- Populating the appropriate values in deliverables out records
5295
5296 -- 3435905 return status and deliverable id is directly assigned to
5297 -- global deliverable table
5298 -- removed the p_deliverables_out parameter and added global table
5299 -- p_deliverables_out(i).return_status := l_return_status;
5300 -- p_deliverables_out(i).deliverable_id := l_deliverable_id;
5301
5302 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5303 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5304 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5305 RAISE FND_API.G_EXC_ERROR;
5306 END IF;
5307
5308 i := p_deliverables_in.next(i);
5309
5310 END LOOP;
5311
5312 ------ 3435905 : FP M : Deliverables Changes For AMG END-----------
5313 --4218977, rtarway, unset this global variable upon successfull completion of create project
5314 G_OP_VALIDATE_FLAG := null;
5315 IF (FND_API.to_boolean( p_commit ) OR
5316 l_wf_status_code = 'IN_ROUTE' )
5317 THEN
5318 COMMIT WORK;
5319 END IF;
5320
5321
5322 EXCEPTION
5323 WHEN FND_API.G_EXC_ERROR
5324 THEN
5325
5326 ROLLBACK TO create_project_pub;
5327
5328 -- Bug 7335526
5329 IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5330 PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name => 'PA_PROJECTS',
5331 p_user_id => FND_GLOBAL.USER_ID,
5332 p_unique_number => to_number(l_project_number_out));
5333 END IF;
5334
5335 --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5336 G_OP_VALIDATE_FLAG := null;
5337 p_return_status := FND_API.G_RET_STS_ERROR;
5338
5339 FND_MSG_PUB.Count_And_Get
5340 ( p_count => p_msg_count ,
5341 p_data => p_msg_data );
5342
5343 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
5344 THEN
5345 ROLLBACK TO create_project_pub;
5346
5347 -- Bug 7335526
5348 IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5349 PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name => 'PA_PROJECTS',
5350 p_user_id => FND_GLOBAL.USER_ID,
5351 p_unique_number => to_number(l_project_number_out));
5352 END IF;
5353
5354 --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5355 G_OP_VALIDATE_FLAG := null;
5356 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5357
5358 FND_MSG_PUB.Count_And_Get
5359 ( p_count => p_msg_count ,
5360 p_data => p_msg_data );
5361
5362 WHEN OTHERS
5363 THEN
5364 ROLLBACK TO create_project_pub;
5365
5366 -- Bug 7335526
5367 IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5368 PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name => 'PA_PROJECTS',
5369 p_user_id => FND_GLOBAL.USER_ID,
5370 p_unique_number => to_number(l_project_number_out));
5371 END IF;
5372
5373 --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5374 G_OP_VALIDATE_FLAG := null;
5375 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5376
5377 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5378 THEN
5379 FND_MSG_PUB.add_exc_msg
5380 ( p_pkg_name => G_PKG_NAME
5381 , p_procedure_name => l_api_name );
5382
5383 END IF;
5384
5385 FND_MSG_PUB.Count_And_Get
5386 ( p_count => p_msg_count ,
5387 p_data => p_msg_data );
5388
5389 END create_project;
5390
5391 --------------------------------------------------------------------------------
5392 --Name: add_task
5393 --Type: Procedure
5394 --Description: This procedure adds a task to a OP project, when this is allowed.
5395 --
5396 --
5397 --
5398 --Called subprograms: check_add_subtask_ok
5399 --
5400 --
5401 --
5402 --History:
5403 -- 28-AUG-1996 L. de Werker Created
5404 -- 28-NOV-1996 L. de Werker Added 11 parameters for descriptive flexfields
5405 -- 10-DEC-1996 L. de Werker Added parameter p_address_id
5406 -- 27-MAY-1999 ODEO Added parameter p_pa_parent_task_id *O
5407 --
5408 -- 09-MAY-02 Maansari - Project Structure Integration
5409 -- - Added call to PA_PROJ_TASK_STRUC.CREATE_DEFAULT_TASK_STRUCTURE api.
5410 -- 17-APR-2002 amksingh Bug 2316713 initialized the
5411 -- l_task_in_rec.pa_parent_task_id with the Appropriate
5412 -- parent_task_id.
5413 -- 15-jul-2003 sramesh -- Added the code for bug 2982057.
5414 -- Changed the logic to populate the long_task_name
5415 -- with task_name when the long_task_name is null.
5416 -- 31-Jul-2003 Amit Bug 3075623 : Added condition in add_task to throw error
5417 -- if no ref task id is passed
5418 -- 12-Aug-2003 sacgupta Bug 3086001. initialized l_task_in_rec.task_type with the
5419 -- appropriate value.
5420 --
5421 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
5422 -- dependency_type and lag days to tasks and create dependencies.
5423 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
5424 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
5425
5426 -- 07-JUL-2004 Rakesh Raghavan Bug # 3663166. Modified API: add_task().
5427 -- 09-01-2006 vkadimes Bug 4689326 Modified the customer_id validation part.
5428
5429 PROCEDURE add_task
5430 ( p_api_version_number IN NUMBER
5431 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
5432 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
5433 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
5434 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5435 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5436 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5437 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5438 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5439 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5440 ,p_pa_task_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5441 --Project Structures
5442 ,p_ref_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5443 --Project Structures
5444
5445 ,p_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5446 ,p_long_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5447 ,p_task_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5448 ,p_task_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5449 ,p_task_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5450 ,p_pm_parent_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5451 ,p_pa_parent_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5452 ,p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5453 ,p_carrying_out_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5454 ,p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5455 ,p_task_manager_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5456 ,p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5457 ,p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5458 ,p_ready_to_bill_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5459 ,p_ready_to_distribute_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5460 ,p_limit_to_txn_controls_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5461 ,p_labor_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5462 ,p_labor_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5463 ,p_labor_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5464 ,p_labor_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5465 ,p_nl_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5466 ,p_nl_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5467 ,p_nl_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5468 ,p_nl_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5469 ,p_labor_cost_multiplier_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5470 ,p_cost_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5471 ,p_rev_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5472 ,p_inv_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5473 ,p_cost_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5474 ,p_rev_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5475 ,p_inv_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5476 ,p_labor_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5477 ,p_nl_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5478 ,p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5479 ,p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5480 ,p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5481 ,p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5482 ,p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5483 ,p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5484 ,p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5485 ,p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5486 ,p_tasks_dff IN VARCHAR2 := 'N' --bug 6153503
5487 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5488 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5489 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5490 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5491 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5492 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5493 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5494 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5495 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5496 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5497 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5498 --bug 6153503
5499 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5500 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5501 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5502 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5503 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5504 --end bug 6153503
5505 ,p_allow_cross_charge_flag IN VARCHAR2 :=
5506 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5507 ,p_project_rate_date IN DATE :=
5508 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5509 ,p_project_rate_type IN VARCHAR2 :=
5510 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5511 ,p_cc_process_labor_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5512 ,p_labor_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5513 ,p_labor_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5514 ,p_cc_process_nl_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5515 ,p_nl_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5516 ,p_nl_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5517 ,p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5518 ,p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5519 ,p_emp_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5520 ,p_job_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5521 --Sakthi MCB
5522 ,p_non_lab_std_bill_rt_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5523 ,p_taskfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5524 ,p_taskfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5525 --Sakthi MCB
5526 --Project Structures
5527 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
5528 ,p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5529 ,P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5530 ,P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5531 ,P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5532 ,P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5533 ,P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5534 ,P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5535 ,P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5536 ,P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5537 ,P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5538 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5539 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5540 ,P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5541 ,P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5542 ,P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5543 ,P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5544 ,P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5545 ,P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5546 ,P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5547 ,P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5548 ,P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5549 ,P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5550 ,P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5551 --Project Structures
5552 ,p_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5553 ,p_non_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5554 --PA L changes -- bug 2872708 --Add task
5555 ,p_retirement_cost_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5556 ,p_cint_eligible_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5557 ,p_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5558 --end PA L changes -- bug 2872708
5559 ,p_pa_project_id_out OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
5560 ,p_pa_project_number_out OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5561 ,p_task_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
5562 -- PA L Changes 3010538
5563 ,p_process_mode IN VARCHAR2 := 'ONLINE'
5564 -- FP-M Bug # 3301192
5565 ,p_pred_string IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5566 -- ,p_pred_delimiter VARCHAR2 DEFAULT ','
5567 ,p_pred_delimiter IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5568 -- FP M changes begin (venkat)
5569 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5570 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5571 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5572 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5573 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5574 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5575 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5576 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5577 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5578 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5579 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5580 -- FP M changes end (venkat)
5581 -- FP M changes start (Mapping )
5582 ,p_financial_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5583 ,p_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5584 ,p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5585 -- FP M changes end (Mapping )
5586 ,p_deliverable IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5587 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM -- 3661788 added IN parameter
5588 -- (Begin venkat) Bug #3450684 ------------------------------------------------------------------
5589 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5590 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5591 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5592 -- (End venkat) Bug #3450684 -------------------------------------------------------------------
5593 ,p_op_validate_flag IN VARCHAR2 := 'Y' --added by rtarway for bug 4218977
5594 ,p_structure_updates_flag IN VARCHAR2 := 'Y' --Added for Bug 7264422
5595
5596 )
5597 IS
5598
5599 l_api_name CONSTANT VARCHAR2(30) := 'add_task';
5600 l_return_status VARCHAR2(1);
5601 l_add_subtask_ok_flag VARCHAR2(1);
5602
5603 -- FP-M Bug # 3301192
5604 l_d_task_id NUMBER;
5605 l_d_task_ver_id NUMBER;
5606 l_d_struct_ver_id NUMBER;
5607
5608 --custom parameters
5609 l_project_type_rec pa_project_types%rowtype;
5610 l_project_rec pa_projects%rowtype;
5611 l_task_in_rec task_in_rec_type;
5612 l_project_id pa_projects.project_id%type;
5613 l_task_id pa_tasks.task_id%type;
5614 l_msg_count NUMBER ;
5615 l_msg_data VARCHAR2(2000);
5616 l_function_allowed VARCHAR2(1);
5617 l_resp_id NUMBER := 0;
5618 l_user_id NUMBER := 0;
5619 l_module_name VARCHAR2(80);
5620 l_process_code VARCHAR2(30) ;
5621 l_task_weight_basis_code VARCHAR2(30) ;
5622 l_update_wbs_flag VARCHAR2(1) ;
5623 l_customer_name VARCHAR2(360); -- Added for Bug 4689888 -- Modified to VARCHAR2(360) for bug 5856469
5624 --needed to get the field values associated to a AMG message
5625
5626 CURSOR l_amg_project_csr
5627 (p_pa_project_id pa_projects.project_id%type)
5628 IS
5629 SELECT segment1
5630 FROM pa_projects p
5631 WHERE p.project_id = p_pa_project_id;
5632
5633 --Added for bug 3280610
5634 --needed to get task_id of a task using project_id and task_reference.
5635 CURSOR l_task_ref_to_id_csr
5636 (cp_project_id pa_tasks.project_id%TYPE
5637 ,cp_pm_task_reference pa_tasks.pm_task_reference%TYPE)
5638 IS
5639 SELECT t.task_id
5640 FROM pa_tasks t
5641 WHERE t.project_id = cp_project_id
5642 AND t.pm_task_reference = cp_pm_task_reference;
5643
5644 --Bug 3279981. Fetch project information
5645 CURSOR cur_get_proj_billing_info IS
5646 SELECT enable_top_task_customer_flag, enable_top_task_inv_mth_flag,
5647 revenue_accrual_method, invoice_method, project_type
5648 FROM pa_projects_all
5649 WHERE project_id = p_pa_project_id;
5650
5651 CURSOR cur_check_proj_cust_exist (c_customer_id IN NUMBER ) IS
5652 SELECT 'Y'
5653 FROM pa_project_customers
5654 WHERE project_id = p_pa_project_id
5655 AND customer_id = c_customer_id ;
5656
5657 --Added for bug 3746912
5658 CURSOR cur_get_str_type_from_str_id( c_structure_version_id IN NUMBER ) IS
5659 SELECT pst.structure_type
5660 FROM pa_proj_element_versions ppev
5661 ,pa_proj_structure_types ppst
5662 ,pa_structure_types pst
5663 WHERE ppev.element_version_id = c_structure_version_id
5664 AND ppev.proj_element_id = ppst.proj_element_id
5665 AND ppst.structure_type_id = pst.structure_type_id ;
5666 -- Added This cursor for Bug No 4689326
5667 CURSOR l_cur_customer_name(l_customer_id NUMBER)
5668 IS
5669 SELECT customer_name from PA_CUSTOMERS_V
5670 WHERE customer_id = l_customer_id;
5671
5672 l_str_type VARCHAR2(150);
5673 --End : added for bug 3746912
5674
5675 l_amg_segment1 VARCHAR2(25);
5676 l_amg_task_number VARCHAR2(50);
5677
5678 --Project Structures
5679 l_ref_task_id NUMBER;
5680 l_tasks_in pa_project_pub.task_in_tbl_type; --dummy variables.
5681 l_tasks_out pa_project_pub.task_out_tbl_type ; --dummy variables.
5682 --Project Structures
5683 --bug 2738747
5684 l_structure_type VARCHAR2(25);
5685 --bug 2738747
5686 l_task_version_id NUMBER;
5687
5688 -- Bug 3091798.
5689 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
5690
5691 --bug 3098668
5692 struct_ver_updatable VARCHAR2(1);
5693 l_str_ver_type VARCHAR2(1);
5694 --bug 3098668
5695
5696 -- Bug 3106457
5697 l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
5698 --Begin Add by rtarway For FP.M Changes for Mapping and Set Financial Task
5699 l_patask_record_version_number NUMBER;
5700 --End Add by rtarway For FP.M Changes for Mapping and Set Financial Task
5701 --Bug 3279981 To store the project's flags
5702 l_proj_top_task_customer_flag VARCHAR2(1);
5703 l_proj_top_task_inv_mth_flag VARCHAR2(1);
5704 l_proj_revenue_acc_method VARCHAR2(30);
5705 l_proj_invoice_method VARCHAR2(30);
5706 l_proj_type VARCHAR2(20);
5707 l_dummy VARCHAR2(1);
5708
5709 l_deliverable_id NUMBER := NULL; -- 3661788 added local variable
5710
5711 -- Begin fix for Bug # 4373055.
5712
5713 l_str_ver_id NUMBER:= null;
5714 l_conc_request_id NUMBER := null;
5715 l_message_name VARCHAR2(30) := null;
5716 l_message_type VARCHAR2(30) := null;
5717
5718 -- End fix for Bug # 4373055.
5719
5720 --Added for Bug 6026370
5721 CURSOR l_default_parent_task_csr (c_pa_parent_task_id pa_tasks.task_id%type) IS
5722 SELECT allow_cross_charge_flag,
5723 cc_process_labor_flag,
5724 labor_tp_schedule_id,
5725 labor_tp_fixed_date,
5726 cc_process_nl_flag,
5727 nl_tp_schedule_id,
5728 nl_tp_fixed_date
5729 FROM pa_tasks
5730 WHERE task_id = c_pa_parent_task_id;
5731
5732 --Initializiing all the CC attributes to missing values so that if the new task is top task then values of these CC attibites
5733 --will be populated from project CC attributes in pa_project_pvt.add_task_round_one api
5734 l_allow_cross_charge_flag VARCHAR(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5735 l_cc_process_labor_flag VARCHAR(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5736 l_labor_tp_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
5737 l_labor_tp_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
5738 l_cc_process_nl_flag VARCHAR(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5739 l_nl_tp_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
5740 l_nl_tp_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
5741
5742 --End for Bug 6026370
5743
5744 --bug 6153503
5745 l_validate_dff VARCHAR2(1);
5746 l_attribute_category VARCHAR2(30);
5747 l_attribute1 VARCHAR2(150);
5748 l_attribute2 VARCHAR2(150);
5749 l_attribute3 VARCHAR2(150);
5750 l_attribute4 VARCHAR2(150);
5751 l_attribute5 VARCHAR2(150);
5752 l_attribute6 VARCHAR2(150);
5753 l_attribute7 VARCHAR2(150);
5754 l_attribute8 VARCHAR2(150);
5755 l_attribute9 VARCHAR2(150);
5756 l_attribute10 VARCHAR2(150);
5757 l_attribute11 VARCHAR2(150);
5758 l_attribute12 VARCHAR2(150);
5759 l_attribute13 VARCHAR2(150);
5760 l_attribute14 VARCHAR2(150);
5761 l_attribute15 VARCHAR2(150);
5762
5763 -- Bug 6410745
5764 l_financial_task_flag VARCHAR2(1);
5765 l_share_code VARCHAR2(30);
5766 l_shared VARCHAR(1) := 'N';
5767
5768 BEGIN
5769
5770 -- Standard begin of API savepoint
5771
5772 SAVEPOINT add_task_pub;
5773
5774 -- Standard call to check for call compatibility.
5775
5776 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
5777 p_api_version_number ,
5778 l_api_name ,
5779 G_PKG_NAME )
5780 THEN
5781
5782 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5783
5784 END IF;
5785
5786
5787 -- Initialize the message table if requested.
5788 -- pm_product_code is mandatory
5789
5790 --bug 2841158
5791 -- IF p_pm_product_code IS NULL
5792 -- OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5793 IF p_pm_product_code IS NOT NULL
5794 AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5795 --bug 2841158
5796 THEN
5797
5798 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5799 THEN
5800 pa_interface_utils_pub.map_new_amg_msg
5801 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
5802 ,p_msg_attribute => 'CHANGE'
5803 ,p_resize_flag => 'N'
5804 ,p_msg_context => 'GENERAL'
5805 ,p_attribute1 => ''
5806 ,p_attribute2 => ''
5807 ,p_attribute3 => ''
5808 ,p_attribute4 => ''
5809 ,p_attribute5 => '');
5810 END IF;
5811 RAISE FND_API.G_EXC_ERROR;
5812 END IF;
5813
5814
5815 l_resp_id := FND_GLOBAL.Resp_id;
5816 l_user_id := FND_GLOBAL.User_id;
5817 --l_module_name := p_pm_product_code||'.'||'PA_PM_ADD_TASK';
5818 l_module_name := 'PA_PM_ADD_TASK';
5819
5820 --Moved from below for bug 2471668
5821 -- get the project ID
5822
5823 PA_PROJECT_PVT.Convert_pm_projref_to_id
5824 ( p_pm_project_reference => p_pm_project_reference
5825 , p_pa_project_id => p_pa_project_id
5826 , p_out_project_id => l_project_id
5827 , p_return_status => l_return_status
5828 );
5829
5830
5831 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
5832
5833 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5834
5835 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
5836
5837 RAISE FND_API.G_EXC_ERROR;
5838 END IF;
5839 --Moved from below for bug 2471668
5840
5841 -- Added for bug 3746912, reopened rtarway
5842 --Added initialization code for l_str_type for reopened bug , now l_str_type will always be initialized with passed structure type
5843 --and will be overridden if structure version id is passed.
5844 l_str_type := p_structure_type;
5845
5846 -- Added for bug 3746912
5847 --If the structure version id is passed, it gets priority over the structure type.
5848 --And the structure type should be derived from the version id in such a case
5849 IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
5850 OPEN cur_get_str_type_from_str_id(p_structure_version_id);
5851 FETCH cur_get_str_type_from_str_id INTO l_str_type;
5852 IF cur_get_str_type_from_str_id%NOTFOUND THEN
5853 l_str_type := p_structure_type;
5854 --Foll IF condition added for Bug 3810365
5855 ELSIF 'N' = PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) THEN
5856 l_str_type := 'FINANCIAL';
5857 END IF;
5858 CLOSE cur_get_str_type_from_str_id;
5859 END IF;
5860 -- End : Added for bug 3746912
5861
5862 -- Moved from above for bug 3106457. The customer might pass only the project reference and not the project
5863 -- id. So we should derive the id and use it.
5864 -- PA L Changes 3010538
5865 -- Need not use map new amg msg api here as we donot have context information to be displayed and
5866 -- _AMG messages are not defined.
5867 -- Using PA_UTILS.ADD_MESSAGE
5868 --IF p_structure_type IS NOT NULL THEN Replaced p_structure_type by l_str_type for 3746912
5869 IF l_str_type IS NOT NULL THEN
5870
5871 -- Begin fix for Bug # 4373055.
5872
5873 /*
5874
5875 l_process_code :=
5876 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id --p_pa_project_id 3106457
5877 ,p_structure_type => l_str_type ); --p_structure_type 3746912
5878 IF nvl(l_process_code,'-1') = 'WUP' THEN
5879 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id -- bug 3106457 p_pa_project_id -- Bug 3091798
5880 ,p_structure_type => l_str_type ); --p_structure_type 3746912
5881
5882 PA_UTILS.ADD_MESSAGE
5883 (p_app_short_name => 'PA',
5884 --p_msg_name => 'PA_PS_VD_UPDWBS_PRC_INPROC');
5885 p_msg_name => 'PA_PS_UPDWBS_PRC_INPROC_AMG', -- Bug 3091798. Message includes the request id.
5886 p_token1 => 'REQUESTID',
5887 p_value1 => l_request_id);
5888
5889
5890 RAISE FND_API.G_EXC_ERROR;
5891
5892 ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
5893 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id -- bug 3106457 p_pa_project_id -- Bug 3091798
5894 ,p_structure_type => l_str_type ); --p_structure_type 3746912
5895
5896 PA_UTILS.ADD_MESSAGE
5897 (p_app_short_name => 'PA',
5898 -- p_msg_name => 'PA_PS_VD_UPD_WBS_PRC_ERR');
5899 p_msg_name => 'PA_PS_UPDWBS_PRC_ERR_AMG', -- Bug 3091798. Message includes the request id.
5900 p_token1 => 'REQUESTID',
5901 p_value1 => l_request_id);
5902
5903
5904 RAISE FND_API.G_EXC_ERROR;
5905
5906 END IF;
5907
5908 */
5909
5910 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
5911 p_project_id => l_project_id
5912 , p_structure_type => l_str_type
5913 , p_structure_version_id => null
5914 , p_context => 'UPDATE_AMG'
5915 , x_message_name => l_message_name
5916 , x_message_type => l_message_type
5917 , x_structure_version_id => l_str_ver_id
5918 , x_conc_request_id => l_conc_request_id);
5919
5920
5921 if l_message_name is not null then
5922
5923 PA_UTILS.ADD_MESSAGE(
5924 p_app_short_name => 'PA'
5925 , p_msg_name => l_message_name
5926 , p_token1 => 'REQUESTID'
5927 , p_value1 => l_conc_request_id);
5928
5929 RAISE FND_API.G_EXC_ERROR;
5930 end if;
5931
5932 -- End fix for Bug # 4373055.
5933
5934 END IF ;
5935 -- END IF ;
5936
5937 -- PA L Changes 3010538
5938
5939 -- As part of enforcing project security, which would determine
5940 -- whether the user has the necessary privileges to update the project
5941 -- need to call the pa_security package
5942
5943 pa_security.initialize (X_user_id => l_user_id,
5944 X_calling_module => l_module_name);
5945
5946 -- Actions performed using the APIs would be subject to
5947 -- function security. If the responsibility does not allow
5948 -- such functions to be executed, the API should not proceed further
5949 -- since the user does not have access to such functions
5950
5951 -- Function security procedure check whether user have the
5952 -- privilege to add task or not
5953
5954 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id; --bug 2471668 ( in the project context )
5955
5956 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
5957 (p_api_version_number => p_api_version_number,
5958 p_responsibility_id => l_resp_id,
5959 p_function_name => 'PA_PM_ADD_TASK',
5960 p_msg_count => l_msg_count,
5961 p_msg_data => l_msg_data,
5962 p_return_status => l_return_status,
5963 p_function_allowed => l_function_allowed);
5964
5965 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5966 THEN
5967 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5968
5969 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5970 THEN
5971 RAISE FND_API.G_EXC_ERROR;
5972 END IF;
5973
5974 IF l_function_allowed = 'N' THEN
5975 pa_interface_utils_pub.map_new_amg_msg
5976 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
5977 ,p_msg_attribute => 'CHANGE'
5978 ,p_resize_flag => 'Y'
5979 ,p_msg_context => 'GENERAL'
5980 ,p_attribute1 => ''
5981 ,p_attribute2 => ''
5982 ,p_attribute3 => ''
5983 ,p_attribute4 => ''
5984 ,p_attribute5 => '');
5985 p_return_status := FND_API.G_RET_STS_ERROR;
5986 RAISE FND_API.G_EXC_ERROR;
5987 END IF;
5988
5989 IF FND_API.TO_BOOLEAN( p_init_msg_list )
5990 THEN
5991
5992 FND_MSG_PUB.initialize;
5993
5994 END IF;
5995
5996 -- Set API return status to success
5997
5998 p_return_status := FND_API.G_RET_STS_SUCCESS;
5999
6000
6001 /* Moving this code before calling the security API. Although p_pa_project_id contains the project id but
6002 it is converted and l_project_id is used subsequently.
6003 --bug 2471668
6004 -- get the project ID
6005
6006 PA_PROJECT_PVT.Convert_pm_projref_to_id
6007 ( p_pm_project_reference => p_pm_project_reference
6008 , p_pa_project_id => p_pa_project_id
6009 , p_out_project_id => l_project_id
6010 , p_return_status => l_return_status
6011 );
6012
6013
6014 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6015
6016 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6017
6018 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
6019
6020 RAISE FND_API.G_EXC_ERROR;
6021 END IF;
6022 */
6023
6024 -- Now verify whether project security allows the user to update
6025 -- the project
6026
6027 IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
6028
6029 -- The user does not have query privileges on this project
6030 -- Hence, cannot update the project.Raise error
6031 pa_interface_utils_pub.map_new_amg_msg
6032 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
6033 ,p_msg_attribute => 'CHANGE'
6034 ,p_resize_flag => 'Y'
6035 ,p_msg_context => 'GENERAL'
6036 ,p_attribute1 => ''
6037 ,p_attribute2 => ''
6038 ,p_attribute3 => ''
6039 ,p_attribute4 => ''
6040 ,p_attribute5 => '');
6041 p_return_status := FND_API.G_RET_STS_ERROR;
6042 RAISE FND_API.G_EXC_ERROR;
6043 ELSE
6044 -- If the user has query privileges, then check whether
6045 -- update privileges are also available
6046 IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
6047
6048 -- The user does not have update privileges on this project
6049 -- Hence , raise error
6050
6051 pa_interface_utils_pub.map_new_amg_msg
6052 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
6053 ,p_msg_attribute => 'CHANGE'
6054 ,p_resize_flag => 'Y'
6055 ,p_msg_context => 'GENERAL'
6056 ,p_attribute1 => ''
6057 ,p_attribute2 => ''
6058 ,p_attribute3 => ''
6059 ,p_attribute4 => ''
6060 ,p_attribute5 => '');
6061 p_return_status := FND_API.G_RET_STS_ERROR;
6062 RAISE FND_API.G_EXC_ERROR;
6063 END IF;
6064 END IF;
6065
6066 -- Get segment1 for AMG messages
6067
6068 OPEN l_amg_project_csr( l_project_id );
6069 FETCH l_amg_project_csr INTO l_amg_segment1;
6070 CLOSE l_amg_project_csr;
6071
6072 --bug 2738747 ---Add task
6073 G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
6074 G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
6075 G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
6076 --bug 2738747
6077 G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
6078 G_OP_VALIDATE_FLAG := p_op_validate_flag; --added by rtarway for bug 4218977
6079
6080 --bug 2876703 --Add_task
6081 IF G_IS_WP_SEPARATE_FROM_FN = 'N' AND
6082 l_str_type = 'WORKPLAN' --p_structure_type = 'WORKPLAN' 3746912
6083 THEN
6084 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6085 THEN
6086 pa_interface_utils_pub.map_new_amg_msg
6087 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
6088 ,p_msg_attribute => 'CHANGE'
6089 ,p_resize_flag => 'N'
6090 ,p_msg_context => 'GENERAL'
6091 ,p_attribute1 => ''
6092 ,p_attribute2 => ''
6093 ,p_attribute3 => ''
6094 ,p_attribute4 => ''
6095 ,p_attribute5 => '');
6096 END IF;
6097 RAISE FND_API.G_EXC_ERROR;
6098 END IF;
6099 --bug 2876703
6100
6101 --bug 2738747
6102 IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
6103 AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
6104 AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
6105 AND l_str_type /*p_structure_type 3746912*/= 'FINANCIAL'
6106 THEN
6107 --Change the flow to WORKPLAN
6108 l_structure_type := 'WORKPLAN';
6109
6110 ELSE
6111 l_structure_type := l_str_type; --p_structure_type 3746912
6112 END IF;
6113 --bug 2738747
6114
6115 /* Though it does not matter but for clarity should only be done for Financial
6116 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6117 (p_task_number=> p_task_name
6118 ,p_task_reference => p_pm_task_reference
6119 ,p_task_id => '');
6120 */
6121
6122 --check for parent task,when no parent task is given,the new task will become a
6123 --top task and a top task can alway be added.
6124 --modified to allow creation of sub-task for a parent not create through AMG
6125 --A non AMG created task could have its pm_parent_task_reference NULL. *O
6126
6127 --project structure
6128 --This validation should be done for only FINANCIAL structrues
6129 --IF p_structure_type = 'FINANCIAL' bug 2738747
6130 IF l_structure_type = 'FINANCIAL' --bug 2738747
6131 THEN
6132 --project structure
6133
6134 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6135 (p_task_number=> p_task_name
6136 ,p_task_reference => p_pm_task_reference
6137 ,p_task_id => '');
6138
6139 IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
6140 (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
6141 THEN
6142
6143 check_add_subtask_ok( p_api_version_number => p_api_version_number
6144 ,p_init_msg_list => FND_API.G_FALSE
6145 ,p_msg_data => p_msg_data
6146 ,p_msg_count => p_msg_count
6147 ,p_return_status => l_return_status
6148 ,p_project_id => l_project_id
6149 ,p_pm_project_reference => NULL
6150 ,p_task_id => p_pa_parent_task_id
6151 ,p_pm_task_reference => p_pm_parent_task_reference
6152 ,p_add_subtask_ok_flag => l_add_subtask_ok_flag );
6153
6154 END IF;
6155
6156 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6157 THEN
6158 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6159
6160 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6161 THEN
6162
6163 RAISE FND_API.G_EXC_ERROR;
6164 END IF;
6165
6166 IF l_add_subtask_ok_flag <> 'Y'
6167 then
6168 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6169 THEN
6170 pa_interface_utils_pub.map_new_amg_msg
6171 ( p_old_message_code => 'PA_TASK_CAN_NOT_BE_ADDED'
6172 ,p_msg_attribute => 'CHANGE'
6173 ,p_resize_flag => 'N'
6174 ,p_msg_context => 'TASK'
6175 ,p_attribute1 => l_amg_segment1
6176 ,p_attribute2 => l_amg_task_number
6177 ,p_attribute3 => ''
6178 ,p_attribute4 => ''
6179 ,p_attribute5 => '');
6180 END IF;
6181
6182 RAISE FND_API.G_EXC_ERROR;
6183
6184 end IF;
6185
6186 END IF; --<<l_structrue_type = 'FINANCIAL' >>
6187
6188 -- Bug 3279981. FP_M Changes for customer and invoice method at top task
6189 -- Validate and set invoice method and customer id for the task
6190 OPEN cur_get_proj_billing_info;
6191 FETCH cur_get_proj_billing_info INTO l_proj_top_task_customer_flag, l_proj_top_task_inv_mth_flag,
6192 l_proj_revenue_acc_method, l_proj_invoice_method, l_proj_type;
6193 CLOSE cur_get_proj_billing_info;
6194
6195 IF 'Y' = l_proj_top_task_inv_mth_flag
6196 AND p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6197 IF pa_project_pvt.check_valid_dist_rule
6198 ( l_proj_type,
6199 l_proj_revenue_acc_method||'/'||p_invoice_method,
6200 l_proj_top_task_inv_mth_flag ) = 'N' THEN
6201 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6202 pa_interface_utils_pub.map_new_amg_msg
6203 ( p_old_message_code => 'PA_INV_TASK_INVOICE_METHOD' -- 4146813 changed error message code
6204 ,p_msg_attribute => 'CHANGE'
6205 ,p_resize_flag => 'N'
6206 ,p_msg_context => 'TASK'
6207 ,p_attribute1 => p_invoice_method
6208 ,p_attribute2 => ''
6209 ,p_attribute3 => ''
6210 ,p_attribute4 => ''
6211 ,p_attribute5 => '');
6212 END IF;
6213 RAISE FND_API.G_EXC_ERROR;
6214 ELSE
6215 l_task_in_rec.invoice_method := p_invoice_method;
6216 END IF;
6217 ELSE
6218 l_task_in_rec.invoice_method := NULL;
6219 END IF;
6220
6221 IF 'Y' = l_proj_top_task_customer_flag THEN
6222 -- If condition is changed for Bug Number 4689326
6223 IF p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6224 OPEN cur_check_proj_cust_exist(p_customer_id);
6225 FETCH cur_check_proj_cust_exist INTO l_dummy;
6226 IF cur_check_proj_cust_exist%NOTFOUND THEN
6227 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6228 /*Commented for Bug Number 4689326
6229 pa_interface_utils_pub.map_new_amg_msg
6230 ( p_old_message_code => 'PA_INVALID_TASK_CUSTOMER'
6231 ,p_msg_attribute => 'CHANGE'
6232 ,p_resize_flag => 'N'
6233 ,p_msg_context => 'TASK'
6234 ,p_attribute1 => p_customer_id
6235 ,p_attribute2 => ''
6236 ,p_attribute3 => ''
6237 ,p_attribute4 => ''
6238 ,p_attribute5 => '');*/
6239 -- Start of Bug Number 4689326
6240 OPEN l_cur_customer_name(p_customer_id);
6241 FETCH l_cur_customer_name INTO l_customer_name;
6242 CLOSE l_cur_customer_name;
6243 IF (l_customer_name IS NULL OR l_customer_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6244 -- Checking whether the specified customer exits or not
6245 pa_interface_utils_pub.map_new_amg_msg
6246 ( p_old_message_code => 'PA_CUSTOMER_NOT_EXIST'
6247 ,p_msg_attribute => 'CHANGE'
6248 ,p_resize_flag => 'N'
6249 ,p_msg_context => 'GENERAL'
6250 ,p_attribute1 => ''
6251 ,p_attribute2 => ''
6252 ,p_attribute3 => ''
6253 ,p_attribute4 => ''
6254 ,p_attribute5 => '');
6255 ELSE
6256 PA_UTILS.ADD_MESSAGE
6257 (p_app_short_name => 'PA',
6258 p_msg_name => 'PA_INVALID_PROJECT_CUSTOMER',
6259 p_token1 => 'CUSTOMER_NAME',
6260 p_value1 => l_customer_name
6261 );
6262 END IF;
6263 -- End of Bug Number 4689326.
6264 END IF;
6265 CLOSE cur_check_proj_cust_exist;
6266 RAISE FND_API.G_EXC_ERROR;
6267 ELSE
6268 l_task_in_rec.customer_id := p_customer_id;
6269 CLOSE cur_check_proj_cust_exist;
6270 END IF;
6271 ELSE
6272 -- Added for Bug Number 4689326
6273 -- Start of Bug Number 4689326
6274 IF p_customer_id IS NULL THEN
6275 pa_interface_utils_pub.map_new_amg_msg
6276 ( p_old_message_code => 'PA_INVALID_CUST'
6277 ,p_msg_attribute => 'CHANGE'
6278 ,p_resize_flag => 'N'
6279 ,p_msg_context => 'GENERAL'
6280 ,p_attribute1 => ''
6281 ,p_attribute2 => ''
6282 ,p_attribute3 => ''
6283 ,p_attribute4 => ''
6284 ,p_attribute5 => '');
6285 RAISE FND_API.G_EXC_ERROR;
6286 ELSE
6287 l_task_in_rec.customer_id :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM; -- when the customer_id is Miss Num we are passing Miss num to add_task_roundone.
6288 END IF;
6289 -- End of Bug Number 4689326
6290 END IF;
6291 ELSE
6292 l_task_in_rec.customer_id := NULL;
6293 END IF;
6294
6295 --Binding the incoming parameters to the local task record
6296 l_task_in_rec.pm_task_reference := p_pm_task_reference;
6297 IF p_pa_task_number IS NULL OR
6298 p_pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6299 l_task_in_rec.pa_task_number := p_pm_task_reference;
6300 ELSE
6301 l_task_in_rec.pa_task_number := p_pa_task_number;
6302 END IF;
6303 l_task_in_rec.pa_task_id := NULL;
6304 l_task_in_rec.task_name := p_task_name;
6305 -- l_task_in_rec.long_task_name := p_long_task_name;
6306 /* Commented the above line of code for bug 2982057 and add the below code*/
6307 IF p_long_task_name IS NULL
6308 OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6309 THEN
6310 l_task_in_rec.long_task_name := p_task_name;
6311 ELSE
6312 l_task_in_rec.long_task_name := p_long_task_name;
6313 END IF;
6314 /* Code addition for bug 2982057 ends*/
6315 l_task_in_rec.task_description := p_task_description;
6316 l_task_in_rec.task_start_date := p_task_start_date;
6317 l_task_in_rec.task_completion_date := p_task_completion_date;
6318 l_task_in_rec.pa_parent_task_id := p_pa_parent_task_id; -- Added for Bug2316713
6319 l_task_in_rec.pm_parent_task_reference := p_pm_parent_task_reference;
6320 l_task_in_rec.address_id := p_address_id;
6321 l_task_in_rec.carrying_out_organization_id := p_carrying_out_organization_id;
6322 l_task_in_rec.service_type_code := p_service_type_code;
6323 l_task_in_rec.task_manager_person_id := p_task_manager_person_id;
6324 l_task_in_rec.billable_flag := p_billable_flag;
6325 l_task_in_rec.chargeable_flag := p_chargeable_flag;
6326 l_task_in_rec.ready_to_bill_flag := p_ready_to_bill_flag;
6327 l_task_in_rec.ready_to_distribute_flag := p_ready_to_distribute_flag;
6328 l_task_in_rec.limit_to_txn_controls_flag := p_limit_to_txn_controls_flag;
6329 l_task_in_rec.labor_bill_rate_org_id := p_labor_bill_rate_org_id;
6330 l_task_in_rec.labor_std_bill_rate_schdl := p_labor_std_bill_rate_schdl;
6331 l_task_in_rec.labor_schedule_fixed_date := p_labor_schedule_fixed_date;
6332 l_task_in_rec.labor_schedule_discount := p_labor_schedule_discount;
6333 l_task_in_rec.non_labor_bill_rate_org_id := p_nl_bill_rate_org_id;
6334 l_task_in_rec.non_labor_std_bill_rate_schdl := p_nl_std_bill_rate_schdl;
6335 l_task_in_rec.non_labor_schedule_fixed_date := p_nl_schedule_fixed_date;
6336 l_task_in_rec.non_labor_schedule_discount := p_nl_schedule_discount;
6337 l_task_in_rec.labor_cost_multiplier_name := p_labor_cost_multiplier_name;
6338 l_task_in_rec.cost_ind_rate_sch_id := p_cost_ind_rate_sch_id;
6339 l_task_in_rec.rev_ind_rate_sch_id := p_rev_ind_rate_sch_id;
6340 l_task_in_rec.inv_ind_rate_sch_id := p_inv_ind_rate_sch_id;
6341 l_task_in_rec.cost_ind_sch_fixed_date := p_cost_ind_sch_fixed_date;
6342 l_task_in_rec.rev_ind_sch_fixed_date := p_rev_ind_sch_fixed_date;
6343 l_task_in_rec.inv_ind_sch_fixed_date := p_inv_ind_sch_fixed_date;
6344 l_task_in_rec.labor_sch_type := p_labor_sch_type;
6345 l_task_in_rec.non_labor_sch_type := p_nl_sch_type;
6346 l_task_in_rec.actual_start_date := p_actual_start_date;
6347 l_task_in_rec.actual_finish_date := p_actual_finish_date;
6348 l_task_in_rec.early_start_date := p_early_start_date;
6349 l_task_in_rec.early_finish_date := p_early_finish_date;
6350 l_task_in_rec.late_start_date := p_late_start_date;
6351 l_task_in_rec.late_finish_date := p_late_finish_date;
6352 l_task_in_rec.scheduled_start_date := p_scheduled_start_date;
6353 l_task_in_rec.scheduled_finish_date := p_scheduled_finish_date;
6354 l_task_in_rec.tasks_dff := p_tasks_dff; --bug 6153503
6355 l_task_in_rec.attribute_category := p_attribute_category;
6356 l_task_in_rec.attribute1 := p_attribute1;
6357 l_task_in_rec.attribute2 := p_attribute2;
6358 l_task_in_rec.attribute3 := p_attribute3;
6359 l_task_in_rec.attribute4 := p_attribute4;
6360 l_task_in_rec.attribute5 := p_attribute5;
6361 l_task_in_rec.attribute6 := p_attribute6;
6362 l_task_in_rec.attribute7 := p_attribute7;
6363 l_task_in_rec.attribute8 := p_attribute8;
6364 l_task_in_rec.attribute9 := p_attribute9;
6365 l_task_in_rec.attribute10 := p_attribute10;
6366 --bug 6153503
6367 l_task_in_rec.attribute11 := p_attribute11;
6368 l_task_in_rec.attribute12 := p_attribute12;
6369 l_task_in_rec.attribute13 := p_attribute13;
6370 l_task_in_rec.attribute14 := p_attribute14;
6371 l_task_in_rec.attribute15 := p_attribute15;
6372
6373 IF l_task_in_rec.tasks_dff = 'Y' THEN
6374 l_validate_dff := 'N';
6375 l_attribute_category := null;
6376 l_attribute1 := null;
6377 l_attribute2 := null;
6378 l_attribute3 := null;
6379 l_attribute4 := null;
6380 l_attribute5 := null;
6381 l_attribute6 := null;
6382 l_attribute7 := null;
6383 l_attribute8 := null;
6384 l_attribute9 := null;
6385 l_attribute10 := null;
6386 l_attribute11 := null;
6387 l_attribute12 := null;
6388 l_attribute13 := null;
6389 l_attribute14 := null;
6390 l_attribute15 := null;
6391
6392 ELSIF l_task_in_rec.tasks_dff = 'N' THEN
6393
6394 l_validate_dff := 'Y';
6395 l_attribute_category := l_task_in_rec.attribute_category;
6396 l_attribute1 := l_task_in_rec.attribute1;
6397 l_attribute2 := l_task_in_rec.attribute2;
6398 l_attribute3 := l_task_in_rec.attribute3;
6399 l_attribute4 := l_task_in_rec.attribute4;
6400 l_attribute5 := l_task_in_rec.attribute5;
6401 l_attribute6 := l_task_in_rec.attribute6;
6402 l_attribute7 := l_task_in_rec.attribute7;
6403 l_attribute8 := l_task_in_rec.attribute8;
6404 l_attribute9 := l_task_in_rec.attribute9;
6405 l_attribute10 := l_task_in_rec.attribute10;
6406 l_attribute11 := l_task_in_rec.attribute11;
6407 l_attribute12 := l_task_in_rec.attribute12;
6408 l_attribute13 := l_task_in_rec.attribute13;
6409 l_attribute14 := l_task_in_rec.attribute14;
6410 l_attribute15 := l_task_in_rec.attribute15;
6411 END IF;
6412 --end bug 6153503
6413
6414 l_task_in_rec.task_type := p_task_type; -- Added for bug 3086001
6415
6416 --bug 3281110
6417 l_task_in_rec.retirement_cost_flag := p_retirement_cost_flag;
6418 l_task_in_rec.cint_eligible_flag := p_cint_eligible_flag;
6419 l_task_in_rec.cint_stop_date := p_cint_stop_date;
6420 --bug 3281110
6421
6422 -- FP-M Bug # 3301192
6423 l_task_in_rec.pred_string := p_pred_string;
6424 l_task_in_rec.pred_delimiter := p_pred_delimiter;
6425
6426 --Added for Bug 6026370
6427 IF p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6428 OPEN l_default_parent_task_csr( p_pa_parent_task_id );
6429 FETCH l_default_parent_task_csr
6430 INTO l_allow_cross_charge_flag,
6431 l_cc_process_labor_flag,
6432 l_labor_tp_schedule_id,
6433 l_labor_tp_fixed_date,
6434 l_cc_process_nl_flag,
6435 l_nl_tp_schedule_id,
6436 l_nl_tp_fixed_date;
6437 CLOSE l_default_parent_task_csr;
6438 END IF;
6439 -- Changes End for Bug 6026370
6440
6441 -- IC AND Multi National Currency Changes Starts Here ...
6442 IF p_allow_cross_charge_flag IS NULL THEN --Added null condition for Bug 6026370
6443
6444 l_task_in_rec.allow_cross_charge_flag := 'N';
6445
6446 ELSIF p_allow_cross_charge_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6447 -- l_task_in_rec.allow_cross_charge_flag := 'N'; -- Bug 6026370
6448 l_task_in_rec.allow_cross_charge_flag := l_allow_cross_charge_flag; -- Bug 6026370
6449
6450 ELSE
6451 l_task_in_rec.allow_cross_charge_flag := p_allow_cross_charge_flag;
6452 END IF;
6453
6454 l_task_in_rec.project_rate_type := p_project_rate_type;
6455 l_task_in_rec.project_rate_date := p_project_rate_date;
6456
6457 /* Commented for Bug 6026370
6458 IF p_cc_process_labor_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6459 THEN
6460 l_task_in_rec.cc_process_labor_flag := 'N';
6461 ELSE
6462 l_task_in_rec.cc_process_labor_flag := p_cc_process_labor_flag;
6463 END IF;
6464
6465 IF p_cc_process_nl_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6466 THEN
6467 l_task_in_rec.cc_process_nl_flag := 'N';
6468 ELSE
6469 l_task_in_rec.cc_process_nl_flag := p_cc_process_nl_flag;
6470 END IF;
6471 */
6472
6473 -- Added for Bug 6026370
6474 IF p_cc_process_labor_flag IS NULL THEN
6475 l_task_in_rec.cc_process_labor_flag := 'N';
6476 l_labor_tp_schedule_id := NULL;
6477 l_labor_tp_fixed_date := NULL;
6478 ELSIF p_cc_process_labor_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6479 -- l_task_in_rec.cc_process_labor_flag := 'N'; -- Bug 6026370
6480 l_task_in_rec.cc_process_labor_flag := l_cc_process_labor_flag; -- Bug 6026370
6481 ELSE
6482 l_task_in_rec.cc_process_labor_flag := p_cc_process_labor_flag;
6483 IF p_cc_process_labor_flag = 'Y' THEN
6484 IF (p_labor_tp_schedule_id IS NULL OR p_labor_tp_schedule_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6485 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6486 pa_interface_utils_pub.map_new_amg_msg
6487 ( p_old_message_code => 'PA_TASK_LAB_TP_SCH_MAND'
6488 ,p_msg_attribute => 'CHANGE'
6489 ,p_resize_flag => 'N'
6490 ,p_msg_context => 'TASK'
6491 ,p_attribute1 => ''
6492 ,p_attribute2 => ''
6493 ,p_attribute3 => ''
6494 ,p_attribute4 => ''
6495 ,p_attribute5 => '');
6496 END IF;
6497 RAISE FND_API.G_EXC_ERROR;
6498 ELSE
6499 /*As of now we are not doing the basic validation check for p_labor_tp_schedule_id */
6500 l_labor_tp_schedule_id := p_labor_tp_schedule_id;
6501 IF p_labor_tp_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6502 l_labor_tp_fixed_date := NULL;
6503 ELSE
6504 l_labor_tp_fixed_date := p_labor_tp_fixed_date;
6505 END IF;
6506 END IF;
6507 ELSE
6508 --- If we pass p_cc_process_labor_flag = 'N' then we will not honor the values passed in
6509 -- p_labor_tp_schedule_id and p_labor_tp_fixed_date
6510 l_labor_tp_schedule_id := NULL;
6511 l_labor_tp_fixed_date := NULL;
6512 END IF;
6513 END IF;
6514
6515 -- End Bug 6026370
6516
6517 -- Added for Bug 6026370
6518 IF p_cc_process_nl_flag IS NULL THEN
6519 l_task_in_rec.cc_process_nl_flag := 'N';
6520 l_nl_tp_schedule_id := NULL;
6521 l_nl_tp_fixed_date := NULL;
6522 ELSIF p_cc_process_nl_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6523 -- l_task_in_rec.cc_process_labor_flag := 'N'; -- Bug 6026370
6524 l_task_in_rec.cc_process_nl_flag := l_cc_process_nl_flag; -- Bug 6026370
6525 ELSE
6526 l_task_in_rec.cc_process_nl_flag := p_cc_process_nl_flag;
6527 IF p_cc_process_nl_flag = 'Y' THEN
6528 IF p_nl_tp_schedule_id IS NULL OR p_nl_tp_schedule_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6529 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6530 pa_interface_utils_pub.map_new_amg_msg
6531 ( p_old_message_code => 'PA_TASK_NL_TP_SCH_MAND'
6532 ,p_msg_attribute => 'CHANGE'
6533 ,p_resize_flag => 'N'
6534 ,p_msg_context => 'TASK'
6535 ,p_attribute1 => ''
6536 ,p_attribute2 => ''
6537 ,p_attribute3 => ''
6538 ,p_attribute4 => ''
6539 ,p_attribute5 => '');
6540 END IF;
6541 RAISE FND_API.G_EXC_ERROR;
6542 ELSE
6543 /*As of now we are not doing the basic validation check for p_nl_tp_schedule_id */
6544 l_nl_tp_schedule_id := p_nl_tp_schedule_id;
6545 IF p_nl_tp_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6546 l_nl_tp_fixed_date := NULL;
6547 ELSE
6548 l_nl_tp_fixed_date := p_nl_tp_fixed_date;
6549 END IF;
6550 END IF;
6551 ELSE
6552 --- If we pass p_cc_process_nl_flag = 'N' then we will not honor the values passed in
6553 -- p_nl_tp_schedule_id and p_nl_tp_fixed_date
6554 l_nl_tp_schedule_id := NULL;
6555 l_nl_tp_fixed_date := NULL;
6556 END IF;
6557 END IF;
6558 -- End Bug 6026370
6559
6560 --Project Structures
6561 IF p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6562 THEN
6563 l_ref_task_id := null;
6564 ELSE
6565 l_ref_task_id := p_ref_task_id;
6566 END IF;
6567 --Project Structures
6568 -- For bug 3280610 Commented the below code and added code for
6569 -- if l_ref_task_id is not passed then we pass parent Task id instead of throwing an error message
6570 -- Bug 3075623 : Added following condition to throw error if no ref task id
6571 -- IF (( (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
6572 -- (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
6573 -- AND l_ref_task_id is null ) THEN
6574 -- PA_UTILS.ADD_MESSAGE
6575 -- (p_app_short_name => 'PA',
6576 -- p_msg_name => 'PA_PS_INV_REF_TASK_ID');
6577 --
6578 -- RAISE FND_API.G_EXC_ERROR;
6579 -- END IF;
6580 IF l_ref_task_id is null THEN
6581
6582 IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6583
6584 l_ref_task_id := p_pa_parent_task_id;
6585
6586 ELSIF (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6587
6588 --Begin change by rtarway for BUG 3661788, use Convert_pm_taskref_to_id_all to get task id instead of using l_task_ref_to_id_csr
6589 --OPEN l_task_ref_to_id_csr(l_project_id,p_pm_parent_task_reference);
6590 --FETCH l_task_ref_to_id_csr INTO l_ref_task_id;
6591 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
6592 (
6593 p_pa_project_id => l_project_id ,
6594 p_structure_type => l_structure_type,
6595 p_pm_task_reference => p_pm_parent_task_reference ,
6596 p_out_task_id => l_ref_task_id,
6597 p_return_status => l_return_status
6598 );
6599
6600 --changed by rtarway for BUG 3661788
6601 --IF l_task_ref_to_id_csr%NOTFOUND
6602 IF (l_return_status <> 'S')
6603 THEN
6604 --rtarway , 3661788, comment close command
6605 --CLOSE l_task_ref_to_id_csr;
6606 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6607 THEN
6608 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6609 (p_task_number=> p_task_name
6610 ,p_task_reference => p_pm_task_reference
6611 ,p_task_id => '');
6612
6613 pa_interface_utils_pub.map_new_amg_msg
6614 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
6615 ,p_msg_attribute => 'CHANGE'
6616 ,p_resize_flag => 'N'
6617 ,p_msg_context => 'TASK'
6618 ,p_attribute1 => l_amg_segment1
6619 ,p_attribute2 => l_amg_task_number
6620 ,p_attribute3 => ''
6621 ,p_attribute4 => ''
6622 ,p_attribute5 => '');
6623 END IF;
6624 RAISE FND_API.G_EXC_ERROR;
6625 END IF;
6626 --rtarway , 3661788, comment close command
6627 --CLOSE l_task_ref_to_id_csr;
6628 END IF;
6629 END IF;
6630 -- End for changes done for bug 3280610
6631
6632 /*Commented for Bug 6026370
6633 l_task_in_rec.labor_tp_schedule_id := p_labor_tp_schedule_id;
6634 l_task_in_rec.labor_tp_fixed_date := p_labor_tp_fixed_date;
6635 l_task_in_rec.nl_tp_schedule_id := p_labor_tp_schedule_id;
6636 l_task_in_rec.nl_tp_fixed_date := p_labor_tp_fixed_date;*/
6637
6638 --Added for Bug 6026370
6639 l_task_in_rec.labor_tp_schedule_id := l_labor_tp_schedule_id;
6640 l_task_in_rec.labor_tp_fixed_date := l_labor_tp_fixed_date;
6641 l_task_in_rec.nl_tp_schedule_id := l_nl_tp_schedule_id;
6642 l_task_in_rec.nl_tp_fixed_date := l_nl_tp_fixed_date;
6643 l_task_in_rec.receive_project_invoice_flag := p_receive_project_invoice_flag;
6644 l_task_in_rec.work_type_id := p_work_type_id;
6645 l_task_in_rec.emp_bill_rate_schedule_id := p_emp_bill_rate_schedule_id;
6646 l_task_in_rec.job_bill_rate_schedule_id := p_job_bill_rate_schedule_id;
6647
6648 -- IC AND Multi National Currency Changes Ends Here ...
6649
6650 --Sakthi MCB
6651
6652 l_task_in_rec.non_lab_std_bill_rt_sch_id := p_non_lab_std_bill_rt_sch_id;
6653 l_task_in_rec.taskfunc_cost_rate_type := p_taskfunc_cost_rate_type;
6654 l_task_in_rec.taskfunc_cost_rate_date := p_taskfunc_cost_rate_date;
6655
6656 --Sakthi MCB
6657
6658 l_task_in_rec.labor_disc_reason_code := p_labor_disc_reason_code;
6659 l_task_in_rec.non_labor_disc_reason_code := p_non_labor_disc_reason_code;
6660
6661 -- (begin venkat) new params for bug #3450684 ------------------------
6662 l_task_in_rec.ext_act_duration := p_ext_act_duration;
6663 l_task_in_rec.ext_remain_duration := p_ext_remain_duration;
6664 l_task_in_rec.ext_sch_duration := p_ext_sch_duration;
6665 -- (end venkat) new params for bug #3450684 ---------------------------
6666
6667 -- set the new params - bug #3654243 ----------------------------------------------
6668 G_tasks_in_tbl(G_tasks_tbl_count).base_percent_comp_deriv_code := p_base_percent_comp_deriv_code;
6669 G_tasks_in_tbl(G_tasks_tbl_count).sch_tool_tsk_type_code := p_sch_tool_tsk_type_code;
6670 G_tasks_in_tbl(G_tasks_tbl_count).constraint_type_code := p_constraint_type_code;
6671 G_tasks_in_tbl(G_tasks_tbl_count).constraint_date := p_constraint_date;
6672 G_tasks_in_tbl(G_tasks_tbl_count).free_slack := p_free_slack;
6673 G_tasks_in_tbl(G_tasks_tbl_count).total_slack := p_total_slack;
6674 G_tasks_in_tbl(G_tasks_tbl_count).effort_driven_flag := p_effort_driven_flag;
6675 G_tasks_in_tbl(G_tasks_tbl_count).level_assignments_flag := p_level_assignments_flag;
6676 G_tasks_in_tbl(G_tasks_tbl_count).invoice_method := p_invoice_method;
6677 G_tasks_in_tbl(G_tasks_tbl_count).customer_id := p_customer_id;
6678 G_tasks_in_tbl(G_tasks_tbl_count).gen_etc_source_code := p_gen_etc_source_code;
6679 -- set the new params - bug #3654243 -------------------------------------------------
6680
6681 --Bug 6410745 Changes done to set default value for financial task flag.
6682 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(l_project_id);
6683 l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id);
6684
6685 IF l_shared = 'Y'
6686 THEN
6687 If l_Share_Code = 'SHARE_PARTIAL' then
6688 l_financial_task_flag := NVL(p_financial_task_flag,'N');
6689 Else
6690 l_financial_task_flag := 'Y';
6691 End If;
6692 ELSE
6693 If l_structure_type = 'WORKPLAN' THEN
6694 l_financial_task_flag := 'N';
6695 Else
6696 l_financial_task_flag := 'Y';
6697 End If;
6698 End IF;
6699
6700 IF l_financial_task_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6701 PA_UTILS.ADD_MESSAGE('PA', 'PA_AMG_RES_INV_PARAMS',
6702 'INVALID_PARAMS', 'FINANCIAL_TASK_FLAG');
6703 RAISE FND_API.G_EXC_ERROR;
6704 End If;
6705 --Bug 6410745 End Changes
6706
6707 --Begin Add by rtarway for FP.M Set Financial Task and Mapping
6708 l_task_in_rec.financial_task_flag := l_financial_task_flag; --Bug 6410745
6709 l_task_in_rec.mapped_task_id := p_mapped_task_id;
6710 l_task_in_rec.mapped_task_reference := p_mapped_task_reference;
6711 --End Add by rtarway For FP.M set financial task and Mapping
6712 --project structure
6713 --FINANCIAL structrues
6714
6715 IF l_structure_type = 'FINANCIAL' --bug 2738747
6716 THEN
6717 --project structure
6718
6719
6720 --Inserting a task will be done in 2 steps
6721 --1> an INSERT step to get a task_id linked to task_reference
6722 --2> and then an UPDATE step to get the appropriate parent id and toptask id.
6723 --This second step will also be used to default data from parents to children.
6724
6725 --get the values associated to the project
6726 OPEN l_project_csr(l_project_id);
6727 FETCH l_project_csr INTO l_project_rec;
6728 CLOSE l_project_csr;
6729
6730 --get the project_type_class_code and service_code associated to the project_type
6731
6732 OPEN l_project_type_csr(l_project_rec.project_type);
6733 FETCH l_project_type_csr INTO l_project_type_rec;
6734 CLOSE l_project_type_csr;
6735
6736
6737 --ROUND TRIP 1
6738
6739
6740 pa_project_pvt.add_task_round_one(p_return_status => l_return_status
6741 ,p_project_rec => l_project_rec
6742 ,p_task_rec => l_task_in_rec
6743 ,p_project_type_class_code => l_project_type_rec.project_type_class_code
6744 ,p_service_type_code => l_project_type_rec.service_type_code
6745 ,p_task_id => l_task_id);
6746
6747 -- assign the return_status to the out parameter
6748 p_return_status := l_return_status;
6749
6750 --ISSUE
6751 --return the related task Reference as well?
6752
6753
6754 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6755 THEN
6756 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6757
6758 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6759 THEN
6760 RAISE FND_API.G_EXC_ERROR;
6761 END IF;
6762
6763 --we need to update to pm_product_code because it will be inherited
6764 --from the project in add_task_round_one
6765
6766 UPDATE pa_tasks
6767 SET pm_product_code = p_pm_product_code
6768 WHERE task_id = l_task_id;
6769
6770
6771 --ROUND TRIP 2
6772
6773 pa_project_pvt.add_task_round_two(p_return_status => l_return_status
6774 ,p_project_rec => l_project_rec
6775 ,p_task_id => l_task_id
6776 ,p_task_rec => l_task_in_rec
6777 --Project structures
6778 ,p_ref_task_id => l_ref_task_id
6779 ,p_tasks_in => l_tasks_in
6780 ,p_tasks_out => l_tasks_out
6781 ,p_task_version_id => l_task_version_id
6782 --Project structures
6783 );
6784
6785 -- assign the return_status to the out parameter
6786 p_return_status := l_return_status;
6787
6788 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6789 THEN
6790 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6791
6792 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6793 THEN
6794 RAISE FND_API.G_EXC_ERROR;
6795 END IF;
6796 --ELSIF p_structure_type = 'WORKPLAN'
6797 ELSIF l_structure_type = 'WORKPLAN' --bug 2738747
6798 THEN
6799
6800 IF G_WP_STR_EXISTS = 'N'
6801 THEN
6802 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6803 THEN
6804 pa_interface_utils_pub.map_new_amg_msg
6805 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
6806 ,p_msg_attribute => 'CHANGE'
6807 ,p_resize_flag => 'N'
6808 ,p_msg_context => 'GENERAL'
6809 ,p_attribute1 => ''
6810 ,p_attribute2 => ''
6811 ,p_attribute3 => ''
6812 ,p_attribute4 => ''
6813 ,p_attribute5 => '');
6814 END IF;
6815 RAISE FND_API.G_EXC_ERROR;
6816 END IF;
6817
6818 IF ( p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
6819 p_structure_version_id IS NULL )
6820 THEN
6821 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6822 THEN
6823 pa_interface_utils_pub.map_new_amg_msg
6824 ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
6825 ,p_msg_attribute => 'CHANGE'
6826 ,p_resize_flag => 'N'
6827 ,p_msg_context => 'GENERAL'
6828 ,p_attribute1 => ''
6829 ,p_attribute2 => ''
6830 ,p_attribute3 => ''
6831 ,p_attribute4 => ''
6832 ,p_attribute5 => '');
6833 END IF;
6834 RAISE FND_API.G_EXC_ERROR;
6835 --bug 3098668
6836 ELSE
6837 l_str_ver_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id,l_structure_type);
6838 struct_ver_updatable := PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable(p_structure_version_id);
6839 IF (struct_ver_updatable IS NULL OR
6840 struct_ver_updatable = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
6841 struct_ver_updatable = 'N' OR
6842 NVL( l_str_ver_type, 'N' ) = 'N' )
6843 THEN
6844 -- add error message to stack and throw exception
6845 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6846 THEN
6847 pa_interface_utils_pub.map_new_amg_msg
6848 ( p_old_message_code => 'PA_STRUCT_VER_NO_UPDATE'
6849 ,p_msg_attribute => 'CHANGE'
6850 ,p_resize_flag => 'N'
6851 ,p_msg_context => 'GENERAL'
6852 ,p_attribute1 => ''
6853 ,p_attribute2 => ''
6854 ,p_attribute3 => ''
6855 ,p_attribute4 => ''
6856 ,p_attribute5 => '');
6857 END IF;
6858 RAISE FND_API.G_EXC_ERROR;
6859 END IF;
6860 --bug 3098668
6861 END IF;
6862
6863 -- FP-M Bug # 3301192 --add_task
6864 /*
6865 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_pa_project_id
6866 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
6867 ,p_out_task_id => l_d_task_id
6868 ,p_return_status => l_return_status);
6869 */
6870
6871 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(p_pa_project_id) = 'Y') THEN
6872
6873 IF l_d_task_id IS NULL AND l_task_in_rec.pm_task_reference IS NOT NULL AND
6874 l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6875 THEN
6876
6877 /* Start commenting out the following code for issue in bug # 3663166.
6878
6879 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => p_pa_project_id
6880 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
6881 ,p_out_task_id => l_d_task_id
6882 ,p_return_status => l_return_status);
6883
6884 End commenting out the following code for issue in bug # 3663166.*/
6885
6886
6887 /* Start adding code for issue in bug # 3663166. */
6888
6889 l_d_task_id := l_task_id;
6890
6891 /* End adding code for issue in bug # 3663166. */
6892
6893 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6894 THEN
6895 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6896
6897 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6898 THEN
6899 RAISE FND_API.G_EXC_ERROR;
6900 END IF;
6901
6902 END IF;
6903
6904 IF p_structure_version_id IS NULL OR p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6905 THEN
6906 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id) = 'Y') THEN
6907 l_d_struct_ver_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(p_pa_project_id);
6908 ELSE
6909 l_d_struct_ver_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(p_pa_project_id, 'WORKPLAN');
6910 END IF;
6911 ELSE
6912 l_d_struct_ver_id := p_structure_version_id;
6913 END IF;
6914
6915 l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_d_struct_ver_id
6916 ,p_task_id => l_d_task_id);
6917
6918 pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
6919 ,p_delimeter => l_task_in_rec.pred_delimiter
6920 ,p_task_version_Id => l_d_task_ver_id
6921 ,x_return_status => l_return_status
6922 ,x_msg_count => l_msg_count
6923 ,x_msg_data => l_msg_data);
6924
6925 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6926 THEN
6927 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6928
6929 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6930 THEN
6931 RAISE FND_API.G_EXC_ERROR;
6932 END IF;
6933 l_d_task_id := null;
6934
6935 END IF;
6936
6937 l_task_in_rec.OBLIGATION_START_DATE := p_OBLIGATION_START_DATE;
6938 l_task_in_rec.OBLIGATION_FINISH_DATE := p_OBLIGATION_FINISH_DATE;
6939 l_task_in_rec.ESTIMATED_START_DATE := p_ESTIMATED_START_DATE;
6940 l_task_in_rec.ESTIMATED_FINISH_DATE := p_ESTIMATED_FINISH_DATE;
6941 l_task_in_rec.BASELINE_START_DATE := p_BASELINE_START_DATE;
6942 l_task_in_rec.BASELINE_FINISH_DATE := p_BASELINE_FINISH_DATE;
6943 l_task_in_rec.CLOSED_DATE := p_CLOSED_DATE;
6944 l_task_in_rec.WQ_UOM_CODE := p_WQ_UOM_CODE;
6945 l_task_in_rec.WQ_ITEM_CODE := p_WQ_ITEM_CODE;
6946 l_task_in_rec.STATUS_CODE := p_STATUS_CODE;
6947 l_task_in_rec.WF_STATUS_CODE := p_WF_STATUS_CODE;
6948 l_task_in_rec.PM_SOURCE_CODE := p_pm_product_code;
6949 l_task_in_rec.PRIORITY_CODE := p_PRIORITY_CODE;
6950 l_task_in_rec.MILESTONE_FLAG := p_MILESTONE_FLAG;
6951 l_task_in_rec.CRITICAL_FLAG := p_CRITICAL_FLAG;
6952 l_task_in_rec.INC_PROJ_PROGRESS_FLAG := p_INC_PROJ_PROGRESS_FLAG;
6953 l_task_in_rec.LINK_TASK_FLAG := p_LINK_TASK_FLAG;
6954 l_task_in_rec.CALENDAR_ID := p_CALENDAR_ID;
6955 --Bug No 3802240
6956 IF ( p_PLANNED_EFFORT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_PLANNED_EFFORT IS NOT NULL )
6957 THEN
6958 l_task_in_rec.PLANNED_EFFORT := null;
6959 ELSE
6960 l_task_in_rec.PLANNED_EFFORT := p_PLANNED_EFFORT;
6961 END IF;
6962 -- l_task_in_rec.PLANNED_EFFORT := p_PLANNED_EFFORT; --Bug No 3802240
6963 l_task_in_rec.DURATION := p_DURATION;
6964 l_task_in_rec.PLANNED_WORK_QUANTITY := p_PLANNED_WORK_QUANTITY;
6965 l_task_in_rec.TASK_TYPE := p_TASK_TYPE;
6966 l_task_in_rec.actual_start_date := p_actual_start_date;
6967 l_task_in_rec.actual_finish_date := p_actual_finish_date;
6968 l_task_in_rec.early_start_date := p_early_start_date;
6969 l_task_in_rec.early_finish_date := p_early_finish_date;
6970 l_task_in_rec.late_start_date := p_late_start_date;
6971 l_task_in_rec.late_finish_date := p_late_finish_date;
6972 l_task_in_rec.scheduled_start_date := p_scheduled_start_date;
6973 l_task_in_rec.scheduled_finish_date := p_scheduled_finish_date;
6974 l_task_in_rec.PM_task_reference := p_pm_task_reference;
6975
6976 PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
6977 p_project_id => l_project_id
6978 ,p_task_id => l_task_in_rec.pa_task_id
6979 ,p_parent_task_id => l_task_in_rec.pa_parent_task_id
6980 ,p_ref_task_id => l_ref_task_id --proj conn
6981 ,p_task_number => l_task_in_rec.pa_task_number
6982 ,p_task_name => l_task_in_rec.long_task_name --bug 2833194
6983 ,p_task_description => l_task_in_rec.task_description
6984 ,p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id
6985 ,p_calling_module => 'AMG'
6986 ,p_structure_type => l_structure_type --bug 2738747
6987 ,p_OBLIGATION_START_DATE => l_task_in_rec.OBLIGATION_START_DATE
6988 ,p_OBLIGATION_FINISH_DATE => l_task_in_rec.OBLIGATION_FINISH_DATE
6989 ,p_ESTIMATED_START_DATE => l_task_in_rec.ESTIMATED_START_DATE
6990 ,p_ESTIMATED_FINISH_DATE => l_task_in_rec.ESTIMATED_FINISH_DATE
6991 ,p_BASELINE_START_DATE => l_task_in_rec.BASELINE_START_DATE
6992 ,p_BASELINE_FINISH_DATE => l_task_in_rec.BASELINE_FINISH_DATE
6993 ,p_CLOSED_DATE => l_task_in_rec.CLOSED_DATE
6994 ,p_WQ_UOM_CODE => l_task_in_rec.WQ_UOM_CODE
6995 ,p_WQ_ITEM_CODE => l_task_in_rec.WQ_ITEM_CODE
6996 ,p_STATUS_CODE => l_task_in_rec.STATUS_CODE
6997 ,p_WF_STATUS_CODE => l_task_in_rec.WF_STATUS_CODE
6998 ,p_PM_SOURCE_CODE => l_task_in_rec.PM_source_CODE
6999 ,p_PRIORITY_CODE => l_task_in_rec.PRIORITY_CODE
7000 ,p_MILESTONE_FLAG => l_task_in_rec.MILESTONE_FLAG
7001 ,p_CRITICAL_FLAG => l_task_in_rec.CRITICAL_FLAG
7002 ,p_INC_PROJ_PROGRESS_FLAG => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
7003 ,p_LINK_TASK_FLAG => l_task_in_rec.LINK_TASK_FLAG
7004 ,p_CALENDAR_ID => l_task_in_rec.CALENDAR_ID
7005 ,p_PLANNED_EFFORT => l_task_in_rec.PLANNED_EFFORT
7006 ,p_DURATION => l_task_in_rec.DURATION
7007 ,p_PLANNED_WORK_QUANTITY => l_task_in_rec.PLANNED_WORK_QUANTITY
7008 ,p_TASK_TYPE => l_task_in_rec.TASK_TYPE
7009 ,p_actual_start_date => l_task_in_rec.actual_start_date
7010 ,p_actual_finish_date => l_task_in_rec.actual_finish_date
7011 ,p_early_start_date => l_task_in_rec.early_start_date
7012 ,p_early_finish_date => l_task_in_rec.early_finish_date
7013 ,p_late_start_date => l_task_in_rec.late_start_date
7014 ,p_late_finish_date => l_task_in_rec.late_finish_date
7015 ,p_scheduled_start_date => l_task_in_rec.scheduled_start_date
7016 ,p_scheduled_finish_date => l_task_in_rec.scheduled_finish_date
7017 ,P_PM_SOURCE_reference => l_task_in_rec.pm_task_reference
7018 ,p_location_id => l_task_in_rec.address_id
7019 ,p_manager_person_id => l_task_in_rec.task_manager_person_id
7020 , p_structure_version_id => p_structure_version_id --Bug 3098668
7021 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
7022 ,p_ext_act_duration => l_task_in_rec.ext_act_duration
7023 ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
7024 ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
7025 -- (End venkat) new params for bug #3450684 -------------------------------------------------
7026 ,p_financial_task_flag => l_task_in_rec.financial_task_flag --Bug 4482903
7027 --bug 6153503
7028 ,p_validate_dff => l_validate_dff
7029 ,p_attribute_category => l_attribute_category
7030 ,p_attribute1 => l_attribute1
7031 ,p_attribute2 => l_attribute2
7032 ,p_attribute3 => l_attribute3
7033 ,p_attribute4 => l_attribute4
7034 ,p_attribute5 => l_attribute5
7035 ,p_attribute6 => l_attribute6
7036 ,p_attribute7 => l_attribute7
7037 ,p_attribute8 => l_attribute8
7038 ,p_attribute9 => l_attribute9
7039 ,p_attribute10 => l_attribute10
7040 ,p_attribute11 => l_attribute11
7041 ,p_attribute12 => l_attribute12
7042 ,p_attribute13 => l_attribute13
7043 ,p_attribute14 => l_attribute14
7044 ,p_attribute15 => l_attribute15
7045 --end bug 6153503
7046 ,x_task_version_id => l_task_version_id
7047 ,x_task_id => l_task_id
7048 ,x_msg_count => l_msg_count
7049 ,x_msg_data => l_msg_data
7050 ,x_return_status => l_return_status
7051 );
7052
7053 p_return_status := l_return_status;
7054
7055 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7056 THEN
7057 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7058
7059 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7060 THEN
7061 RAISE FND_API.G_EXC_ERROR;
7062 END IF;
7063
7064 END IF; --<< n_structure_type >>
7065
7066 p_task_id := l_task_id;
7067 p_pa_project_id_out := l_project_rec.project_id;
7068 p_pa_project_number_out := l_project_rec.segment1; --this is the project_number field in PA_PROJECTS
7069
7070 --Begin Add by rtarway FP.M Development
7071 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
7072 IF (G_PROJECT_SHARING_TYPE='SPLIT_MAPPING' AND l_structure_type = 'WORKPLAN' ) THEN
7073 IF (
7074 ( l_task_in_rec.mapped_task_id IS NOT NULL AND l_task_in_rec.mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
7075 OR
7076 ( l_task_in_rec.mapped_task_reference IS NOT NULL AND l_task_in_rec.mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7077 )
7078 THEN
7079
7080 pa_project_pub.create_mapping
7081 (
7082 p_api_version => p_api_version_number
7083 , p_init_msg_list => FND_API.G_FALSE
7084 , p_commit => FND_API.G_FALSE--bug 3766967
7085 , p_debug_mode => FND_API.G_TRUE
7086 , p_project_id => l_project_id
7087 , p_proj_source_reference => null
7088 , p_wkp_structure_version_id => p_structure_version_id
7089 , p_wkp_task_id => l_task_id--Since the tasks are already created , this will have task Ids
7090 , px_mapped_task_id => l_task_in_rec.mapped_task_id
7091 , p_mapped_task_reference => l_task_in_rec.mapped_task_reference
7092 , x_return_status => l_return_status
7093 , x_msg_count => l_msg_count
7094 , x_msg_data => l_msg_data
7095
7096 );
7097 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7098 THEN
7099 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7100
7101 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7102 THEN
7103 RAISE FND_API.G_EXC_ERROR;
7104 END IF;
7105 END IF;
7106 END IF;
7107 IF (G_PROJECT_SHARING_TYPE = 'SHARE_PARTIAL' and l_structure_type /*p_structure_type 3746912*/= 'FINANCIAL') THEN
7108 --Get the task Version Id
7109 --l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id, l_task_id);
7110 OPEN c_get_pa_record_version_number ( l_task_version_id , l_project_id);
7111 FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
7112 CLOSE c_get_pa_record_version_number;
7113 IF
7114 (p_financial_task_flag IS NOT NULL AND p_financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7115 THEN
7116 PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
7117 (
7118 p_api_version => p_api_version_number
7119 , p_init_msg_list => FND_API.G_FALSE
7120 , p_commit => FND_API.G_FALSE--bug 3766967
7121 , p_calling_module => 'AMG'
7122 , p_debug_mode => FND_API.G_TRUE
7123 , p_task_version_id => l_task_version_id
7124 , p_checked_flag => p_financial_task_flag
7125 , p_record_version_number => l_patask_record_version_number
7126 , p_project_id => l_project_id
7127 , p_published_version_exists => G_Published_version_exists
7128 , x_return_status => l_return_status
7129 , x_msg_count => l_msg_count
7130 , x_msg_data => l_msg_data
7131 );
7132 -- Added for 4537865 : Check for Return Status after API call
7133 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7134 THEN
7135 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7136
7137 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7138 THEN
7139 RAISE FND_API.G_EXC_ERROR;
7140 END IF;
7141 END IF;
7142 END IF;
7143 --End Add by rtarway FP.M Development
7144
7145 --bug 2732895 --Add_Task
7146
7147 IF ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
7148 ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y'
7149 AND l_structure_type /*p_structure_type 3746912*/ = 'WORKPLAN' ) --should not call if new task is added to FINANCIAL structure version
7150 THEN
7151
7152 --bug 2856033
7153
7154 -- The rollup of dates must be completed before we do
7155 -- the task weightage calculation.
7156
7157 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
7158 p_tasks_in => l_tasks_out --null if called for one task
7159 ,p_task_version_id => l_task_version_id
7160 ,p_project_id => l_project_id
7161 ,P_structure_version_id => null
7162 ,x_msg_count => l_msg_count
7163 ,x_msg_data => l_msg_data
7164 ,x_return_status => l_return_status
7165 );
7166
7167 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7168 THEN
7169 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7170
7171 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7172 THEN
7173 RAISE FND_API.G_EXC_ERROR;
7174 END IF;
7175 --bug 2856033
7176
7177 l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_pa_project_id) ;
7178
7179 -- PA L Changes 3010538
7180 -- In new model PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings
7181 -- needs to be called only when task weight basis code is
7182 -- MANUAL.
7183 IF nvl(l_task_weight_basis_code,'-1') = 'MANUAL' THEN
7184
7185 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
7186 p_tasks_in => l_tasks_out --null if called for one task
7187 ,p_task_version_id => l_task_version_id
7188 ,x_msg_count => l_msg_count
7189 ,x_msg_data => l_msg_data
7190 ,x_return_status => l_return_status
7191 );
7192
7193 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7194 THEN
7195 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7196
7197 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7198 THEN
7199 RAISE FND_API.G_EXC_ERROR;
7200 END IF;
7201 END IF ;
7202 -- PA L Changes 3010538
7203 END IF;
7204 --bug 2732895
7205
7206 -- This block has been added for the bug 3106457 to derive the structure version id.
7207 declare
7208 cursor cur_str_ver(c_task_version_id pa_proj_element_versions.element_version_id%TYPE)
7209 is
7210 select parent_structure_version_id
7211 from pa_proj_element_versions
7212 where element_version_id = c_task_version_id;
7213 begin
7214 open cur_str_ver(l_task_version_id);
7215 fetch cur_str_ver into l_structure_version_id;
7216 close cur_str_ver;
7217 end;
7218
7219 -- PA L Changes 3010538
7220
7221 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
7222 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
7223 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
7224 PA_PROJECT_PUB.G_Published_version_exists = 'N')
7225 THEN
7226
7227 /* Starts added for Bug# 7264422 */
7228 IF (nvl(p_structure_updates_flag, 'Y') = 'N') THEN
7229 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
7230 ( p_calling_context => 'AMG'
7231 ,p_project_id => l_project_id
7232 ,p_structure_version_id => l_structure_version_id
7233 ,p_update_wbs_flag => 'Y'
7234 ,x_return_status => l_return_status
7235 ,x_msg_count => l_msg_count
7236 ,x_msg_data => l_msg_data);
7237
7238 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7239 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7240 end if;
7241
7242 ELSE
7243 /* Ends added for Bug# 7264422 */
7244
7245 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id -- bug 3106457 p_pa_project_id
7246 ,p_structure_version_id => l_structure_version_id); -- bug 3106457 p_structure_version_id ) ;
7247
7248 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
7249 IF p_process_mode = 'ONLINE' THEN
7250
7251 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
7252 ,p_project_id => l_project_id -- bug 3106457 p_pa_project_id
7253 ,p_structure_version_id => l_structure_version_id -- bug 3106457 p_structure_version_id
7254 ,x_return_status => l_return_status
7255 ,x_msg_count => l_msg_count
7256 ,x_msg_data => l_msg_data ) ;
7257
7258 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7259 THEN
7260 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7261 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7262 THEN
7263 RAISE FND_API.G_EXC_ERROR;
7264 END IF;
7265 ELSIF p_process_mode = 'CONCURRENT' THEN
7266
7267 PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE' -- Bug 6842218 'CON_UPDATE'
7268 ,p_project_id => l_project_id -- bug 3106457 p_pa_project_id
7269 ,p_structure_version_id => l_structure_version_id -- bug 3106457 p_structure_version_id
7270 ,x_return_status => l_return_status
7271 ,x_msg_count => l_msg_count
7272 ,x_msg_data => l_msg_data ) ;
7273
7274 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7275 THEN
7276 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7277 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7278 THEN
7279 RAISE FND_API.G_EXC_ERROR;
7280 END IF;
7281
7282
7283 END IF ;
7284 END IF ;
7285 END IF; /* Added for Bug# 7264422 */
7286 END IF ;
7287
7288 -- PA L Changes 3010538
7289 -- Commented by rtarway, for BUG 3661788 and 3665745, Changed If Condition
7290 -- IF (p_deliverable IS NOT NULL OR p_Deliverable <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7291
7292 -- 3661788 If deliverable id or deliverable reference is passed , validate it and convert deliverable reference
7293 -- to deliverable id, if required
7294
7295 IF ( ( p_deliverable_id IS NOT NULL AND p_deliverable_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
7296 ( p_deliverable IS NOT NULL AND p_deliverable <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) ) THEN
7297
7298 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
7299 ( p_deliverable_reference => p_deliverable
7300 , p_deliverable_id => p_deliverable_id
7301 , p_project_id => l_project_id
7302 , p_out_deliverable_id => l_deliverable_id
7303 , p_return_status => l_return_status
7304 );
7305
7306 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7307 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7308 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
7309 RAISE FND_API.G_EXC_ERROR;
7310 END IF;
7311
7312 -- 3661788 pass validated deliverable id to association api
7313
7314 pa_project_pub.ASSOCIATE_DLV_TO_TASK (
7315 p_api_version => p_api_version_number
7316 , p_init_msg_list => p_init_msg_list
7317 -- 3735792, passing p_commit as false to next level api calls
7318 , p_commit => FND_API.G_FALSE
7319 , p_debug_mode => 'Y'
7320 , p_pm_source_code => p_pm_product_code
7321 , p_project_id => l_project_id
7322 , p_task_id => l_task_id
7323 , p_deliverable_id => l_deliverable_id -- 3661788 changed from p_deliverable to l_deliverable_id
7324 , x_return_status => l_return_status
7325 , x_msg_count => l_msg_count
7326 , x_msg_data => l_msg_data
7327 );
7328
7329 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7330 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7331 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
7332 RAISE FND_API.G_EXC_ERROR;
7333 END IF;
7334 END IF;
7335
7336 IF FND_API.to_boolean( p_commit )
7337 THEN
7338 COMMIT;
7339 END IF;
7340 --Unset this gloabl variable upon sucessfull completion
7341 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7342
7343 EXCEPTION
7344
7345 WHEN FND_API.G_EXC_ERROR
7346 THEN
7347 ROLLBACK TO add_task_pub;
7348 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7349 p_return_status := FND_API.G_RET_STS_ERROR;
7350
7351 -- Added for 4537865
7352 p_pa_project_id_out := NULL ;
7353 p_pa_project_number_out := NULL ;
7354 p_task_id := NULL ;
7355 -- End : 4537865
7356
7357 FND_MSG_PUB.Count_And_Get
7358 ( p_count => p_msg_count ,
7359 p_data => p_msg_data );
7360
7361 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7362 THEN
7363 ROLLBACK TO add_task_pub;
7364 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7365 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7366
7367 -- Added for 4537865
7368 p_pa_project_id_out := NULL ;
7369 p_pa_project_number_out := NULL ;
7370 p_task_id := NULL ;
7371 -- End : 4537865
7372
7373 FND_MSG_PUB.Count_And_Get
7374 ( p_count => p_msg_count ,
7375 p_data => p_msg_data );
7376
7377 WHEN OTHERS THEN
7378 ROLLBACK TO add_task_pub;
7379 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7380 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7381
7382 -- Added for 4537865
7383 p_pa_project_id_out := NULL ;
7384 p_pa_project_number_out := NULL ;
7385 p_task_id := NULL ;
7386 -- End : 4537865
7387
7388 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7389 THEN
7390 FND_MSG_PUB.add_exc_msg
7391 ( p_pkg_name => G_PKG_NAME
7392 , p_procedure_name => l_api_name );
7393
7394 END IF;
7395
7396 FND_MSG_PUB.Count_And_Get
7397 ( p_count => p_msg_count ,
7398 p_data => p_msg_data );
7399
7400 END add_task;
7401
7402
7403 -----------------------------------------------------------------------------------------
7404 --Name: delete_task
7405 --Type: Procedure
7406 --Description: This procedure delete a task from a project when this is allowed.
7407 -- It either deletes only this task, and moves the children up, OR
7408 -- it deletes this tasks and all his children, depending on
7409 -- the cascaded_delete_flag.
7410 --
7411 --
7412 --Called subprograms: check_delete_task_ok
7413 --
7414 --
7415 --
7416 --History:
7417 -- 21-AUG-1996 L. de Werker Created
7418 -- 06-DEC-1996 L. de Werker Added locking mechanism.
7419 --
7420 --
7421 PROCEDURE delete_task ( p_api_version_number IN NUMBER := 1.0 -- for bug# 3802319
7422 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
7423 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
7424 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7425 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
7426 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
7427 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7428 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7429 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7430 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7431 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7432 ,p_cascaded_delete_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7433 ,p_project_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7434 ,p_task_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7435 ,p_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7436 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
7437 ,p_process_mode IN VARCHAR2 := 'ONLINE'
7438 ,p_structure_updates_flag IN VARCHAR2 := 'Y'
7439 )
7440 IS
7441
7442 l_return_status VARCHAR2(1); --bug 2471668
7443 l_project_id NUMBER; --bug 2471668
7444 l_structure_type VARCHAR2(25) := p_structure_type; -- <Bug#2886014/>
7445 l_update_wbs_flag VARCHAR2(1) ;
7446 l_structure_version_id NUMBER ;
7447
7448 -- Bug 3010538
7449 l_process_code pa_lookups.lookup_code%TYPE;
7450
7451 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
7452
7453 -- Bug 3106457. Obtain the structure version id give the task version id.
7454 cursor cur_str_ver(c_task_version_id pa_proj_element_versions.element_version_id%TYPE)
7455 is
7456 select parent_structure_version_id
7457 from pa_proj_element_versions
7458 where element_version_id = c_task_version_id;
7459
7460 -- Begin fix for Bug # 4373055.
7461
7462 l_str_ver_id NUMBER:= null;
7463 l_conc_request_id NUMBER := null;
7464 l_message_name VARCHAR2(30) := null;
7465 l_message_type VARCHAR2(30) := null;
7466
7467 -- End fix for Bug # 4373055.
7468
7469 BEGIN
7470
7471 p_return_status := FND_API.G_RET_STS_SUCCESS ; -- 4537865 (Initialize p_return_status to Success)
7472 --bug 2471668.
7473 --We need to call this API here toget the corrct project id. This is also
7474 --called from the private API. But I discussed with Sakthi and he is ok to ca ll this
7475 --twice once here and second time in private API. The idea is to make the adv anced security changes
7476 --only in public APIs.
7477
7478 PA_PROJECT_PVT.Convert_pm_projref_to_id
7479 ( p_pm_project_reference => p_pm_project_reference
7480 , p_pa_project_id => p_pa_project_id
7481 , p_out_project_id => l_project_id
7482 , p_return_status => l_return_status
7483 );
7484
7485
7486 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7487
7488 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7489 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
7490 RAISE FND_API.G_EXC_ERROR;
7491 END IF;
7492
7493 PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id; --bug 2471668 ( in the project context )
7494 --end of bug 24771668
7495
7496 IF p_structure_type = 'WORKPLAN'
7497 THEN
7498 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
7499 PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) = 'N' -- 2876703 --delete_task
7500 THEN
7501 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7502 THEN
7503 pa_interface_utils_pub.map_new_amg_msg
7504 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
7505 ,p_msg_attribute => 'CHANGE'
7506 ,p_resize_flag => 'N'
7507 ,p_msg_context => 'GENERAL'
7508 ,p_attribute1 => ''
7509 ,p_attribute2 => ''
7510 ,p_attribute3 => ''
7511 ,p_attribute4 => ''
7512 ,p_attribute5 => '');
7513 END IF;
7514 RAISE FND_API.G_EXC_ERROR;
7515 END IF;
7516
7517 IF p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7518 OR p_task_version_id IS NULL
7519 THEN
7520 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7521 THEN
7522 pa_interface_utils_pub.map_new_amg_msg
7523 ( p_old_message_code => 'PA_PS_TSK_VER_REQ_WP'
7524 ,p_msg_attribute => 'CHANGE'
7525 ,p_resize_flag => 'N'
7526 ,p_msg_context => 'GENERAL'
7527 ,p_attribute1 => ''
7528 ,p_attribute2 => ''
7529 ,p_attribute3 => ''
7530 ,p_attribute4 => ''
7531 ,p_attribute5 => '');
7532 END IF;
7533 RAISE FND_API.G_EXC_ERROR;
7534 END IF;
7535
7536 -- Bug 3106457. Derive the structure version id from the task version id.
7537 open cur_str_ver(p_task_version_id);
7538 fetch cur_str_ver into l_structure_version_id;
7539 close cur_str_ver;
7540
7541 ELSIF p_structure_type = 'FINANCIAL' THEN -- Obtain the structure version id. Bug 3106457.
7542 IF p_task_version_id IS NULL
7543 OR p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3174639
7544 THEN
7545 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
7546 ELSE
7547 open cur_str_ver(p_task_version_id);
7548 fetch cur_str_ver into l_structure_version_id;
7549 close cur_str_ver;
7550 END IF;
7551 END IF; --<< p_structure_type >>
7552
7553 -- <Bug#2886014>
7554 -- If the following criteria is satisfied,
7555 -- switch flow to WORKPLAN
7556 -- i) Workplan is enabled;
7557 -- ii) Structure is SHARED;
7558 -- iii) Published version exists;
7559 G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
7560 G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
7561 G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
7562
7563 IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
7564 AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
7565 AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
7566 AND p_structure_type = 'FINANCIAL'
7567 THEN
7568 --Change the flow to WORKPLAN
7569 l_structure_type := 'WORKPLAN';
7570 END IF;
7571 -- </Bug#2886014>
7572
7573
7574 -- Check for the status of the process before deleting the task.
7575 -- PA L Changes 3010538
7576
7577 IF p_structure_type is not NULL THEN
7578
7579 -- Begin fix for Bug # 4373055.
7580
7581 /*
7582
7583 l_process_code :=
7584 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id --Bug 3091798.
7585 ,p_structure_type => p_structure_type );
7586
7587 IF nvl(l_process_code,'-1') = 'WUP' THEN
7588 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id -- Bug 3091798
7589 ,p_structure_type => p_structure_type );
7590
7591 PA_UTILS.ADD_MESSAGE
7592 (p_app_short_name => 'PA',
7593 -- p_msg_name => 'PA_PS_VD_UPDWBS_PRC_INPROC');
7594 p_msg_name => 'PA_PS_UPDWBS_PRC_INPROC_AMG', -- Bug 3091798. Message includes the request id.
7595 p_token1 => 'REQUESTID',
7596 p_value1 => l_request_id);
7597
7598 RAISE FND_API.G_EXC_ERROR;
7599
7600 ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
7601 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id --Bug 3091798
7602 ,p_structure_type => p_structure_type );
7603
7604 PA_UTILS.ADD_MESSAGE
7605 (p_app_short_name => 'PA',
7606 -- p_msg_name => 'PA_PS_VD_UPD_WBS_PRC_ERR');
7607 p_msg_name => 'PA_PS_UPDWBS_PRC_ERR_AMG', -- Bug 3091798. Message includes the request id.
7608 p_token1 => 'REQUESTID',
7609 p_value1 => l_request_id);
7610
7611 RAISE FND_API.G_EXC_ERROR;
7612
7613 END IF;
7614
7615 */
7616
7617 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
7618 p_project_id => l_project_id
7619 , p_structure_type => p_structure_type
7620 , p_structure_version_id => null
7621 , p_context => 'UPDATE_AMG'
7622 , x_message_name => l_message_name
7623 , x_message_type => l_message_type
7624 , x_structure_version_id => l_str_ver_id
7625 , x_conc_request_id => l_conc_request_id);
7626
7627
7628 if l_message_name is not null then
7629
7630 PA_UTILS.ADD_MESSAGE(
7631 p_app_short_name => 'PA'
7632 , p_msg_name => l_message_name
7633 , p_token1 => 'REQUESTID'
7634 , p_value1 => l_conc_request_id);
7635
7636 RAISE FND_API.G_EXC_ERROR;
7637 end if;
7638
7639 -- End fix for Bug # 4373055.
7640
7641
7642 END IF ;
7643
7644 /* This is buggy.... Bug 3106457
7645 -- Obtain the structure version id before deleting the task.
7646 -- Bug 3010538
7647 BEGIN
7648 SELECT parent_structure_version_id
7649 INTO l_structure_version_id
7650 FROM pa_proj_element_versions
7651 WHERE element_version_id = p_task_version_id ;
7652 EXCEPTION
7653 WHEN NO_DATA_FOUND THEN
7654 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7655 END ;
7656 */
7657
7658 pa_project_pvt.delete_task1
7659 ( p_api_version_number => p_api_version_number
7660 ,p_commit => FND_API.G_FALSE--bug 3766967
7661 ,p_init_msg_list => p_init_msg_list
7662 ,p_msg_count => p_msg_count
7663 ,p_msg_data => p_msg_data
7664 ,p_return_status => p_return_status
7665 ,p_pm_product_code => p_pm_product_code
7666 ,p_pm_project_reference => p_pm_project_reference
7667 ,p_pa_project_id => p_pa_project_id
7668 ,p_pm_task_reference => p_pm_task_reference
7669 ,p_pa_task_id => p_pa_task_id
7670 ,p_cascaded_delete_flag => p_cascaded_delete_flag
7671 ,p_project_id => p_project_id
7672 ,p_task_id => p_task_id
7673 ,p_task_version_id => p_task_version_id
7674 ,p_structure_type => l_structure_type -- </Bug#2886014>
7675 );
7676
7677 -- PA L Changes 3010538
7678
7679 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
7680 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
7681 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
7682 PA_PROJECT_PUB.G_Published_version_exists = 'N')
7683 THEN
7684
7685 -- Fetch the structure version id for the task version id.
7686
7687 -- PA L Changes 3010538
7688
7689 -- Bug 7390781
7690 IF (nvl(p_structure_updates_flag, 'Y') = 'Y') THEN
7691
7692 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id --Bug 3106457 p_pa_project_id
7693 ,p_structure_version_id => l_structure_version_id ) ;
7694
7695 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
7696 IF p_process_mode = 'ONLINE' THEN
7697
7698 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
7699 ,p_project_id => l_project_id --Bug 3106457 p_pa_project_id
7700 ,p_structure_version_id => l_structure_version_id
7701 ,x_return_status => p_return_status
7702 ,x_msg_count => p_msg_count
7703 ,x_msg_data => p_msg_data ) ;
7704
7705 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7706 THEN
7707 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7708 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
7709 THEN
7710 RAISE FND_API.G_EXC_ERROR;
7711 END IF;
7712 ELSIF p_process_mode = 'CONCURRENT' THEN
7713
7714 PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
7715 ,p_project_id => l_project_id -- Bug 3106457 p_pa_project_id
7716 ,p_structure_version_id => l_structure_version_id
7717 ,x_return_status => p_return_status
7718 ,x_msg_count => p_msg_count
7719 ,x_msg_data => p_msg_data ) ;
7720
7721 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7722 THEN
7723 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7724 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
7725 THEN
7726 RAISE FND_API.G_EXC_ERROR;
7727 END IF;
7728
7729
7730 END IF ;
7731 END IF ;
7732 END IF;
7733 END IF ;
7734
7735 -- PA L Changes 3010538
7736
7737 EXCEPTION
7738 WHEN FND_API.G_EXC_ERROR
7739 THEN
7740 p_return_status := FND_API.G_RET_STS_ERROR;
7741 p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7742
7743 p_project_id := NULL ; -- 4537865
7744 p_task_id := NULL; -- 4537865
7745
7746 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7747 THEN
7748
7749 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7750 p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7751
7752 p_project_id := NULL ; -- 4537865
7753 p_task_id := NULL; -- 4537865
7754
7755 WHEN OTHERS THEN
7756 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7757 p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7758
7759 p_project_id := NULL ; -- 4537865
7760 p_task_id := NULL; -- 4537865
7761
7762 END delete_task;
7763
7764
7765 --------------------------------------------------------------------------------
7766 --Name: init_project
7767 --Type: Procedure
7768 --Description: This procedure can be used to initialize the global PL/SQL
7769 -- tables that are used by a LOAD/EXECUTE/FETCH cycle.
7770 --
7771 --
7772 --Called subprograms:
7773 --
7774 --
7775 --
7776 --History:
7777 -- 16-AUG-1996 L. de Werker Created
7778 -- 30-AUG-1996 L. de Werker Parameterlist removed.
7779 -- 10-JAN-1997 L. de Werker Changed name from INIT_CREATE_PROJECT to INIT_PROJECT
7780 --
7781 PROCEDURE init_project
7782
7783 IS
7784
7785 BEGIN
7786
7787 FND_MSG_PUB.Initialize;
7788
7789 -- Initialize global table and record types
7790
7791 G_project_in_rec := G_project_in_null_rec;
7792 G_key_members_in_tbl.delete;
7793 G_deliverables_in_tbl.delete;
7794 G_deliverable_actions_in_tbl.delete; --bug 343590
7795 G_class_categories_in_tbl.delete; --bug 343590
7796 G_tasks_in_tbl.delete;
7797 -- anlee org role changes
7798 G_org_roles_in_tbl.delete;
7799
7800 G_key_members_tbl_count := 0;
7801 G_deliverables_in_tbl_count := 0; --bug 343590
7802 G_dlvr_actions_in_tbl_count := 0; --bug 343590
7803 G_class_categories_tbl_count := 0;
7804 G_tasks_tbl_count := 0;
7805 -- anlee org role changes
7806 G_org_roles_tbl_count := 0;
7807
7808 G_project_out_rec := G_project_out_null_rec;
7809 G_tasks_out_tbl.delete;
7810 --Project Connect 4.0
7811 G_struc_out_tbl.delete;
7812 --Project Connect 4.0
7813
7814 -- <EA Extensible Attributes changes>
7815 G_ext_attr_in_tbl.delete;
7816 G_ext_attr_tbl_count := 0;
7817 -- </EA Extensible Attributes changes>
7818 --Bug#3646465. Clear the Task assignment tables.
7819 PA_TASK_ASSIGNMENTS_PUB.init_task_assignments;
7820 END init_project;
7821
7822
7823 --------------------------------------------------------------------------------
7824 --Name: load_project
7825 --Type: Procedure
7826 --Description: This procedure can be used to move the project related
7827 -- parameters from the client side to a record on the server side
7828 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
7829 --
7830 --Called subprograms:
7831 --
7832 --
7833 --
7834 --History:
7835 -- 19-AUG-1996 L. de Werker Created
7836
7837 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
7838 -- 28-NOV-1996 L. de Werker Added 11 parameters for descriptive flexfields
7839 --
7840 --
7841
7842 PROCEDURE load_project
7843 ( p_api_version_number IN NUMBER
7844 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
7845 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
7846 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7847 ,p_pa_project_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7848 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7849 ,p_project_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7850 ,p_long_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7851 ,p_created_from_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7852 ,p_carrying_out_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7853 ,p_public_sector_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7854 ,p_project_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7855 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7856 ,p_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7857 ,p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7858 ,p_distribution_rule IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7859 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7860 ,p_project_relationship_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7861 ,p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7862 ,p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7863 ,p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7864 ,p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7865 ,p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7866 ,p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7867 ,p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7868 ,p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7869 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7870 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7871 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7872 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7873 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7874 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7875 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7876 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7877 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7878 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7879 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7880 ,p_output_tax_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7881 ,p_retention_tax_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7882 ,p_project_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7883 ,p_allow_cross_charge_flag IN VARCHAR2 :=
7884 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7885 ,p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7886 ,p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7887 ,p_cc_process_labor_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7888 ,p_labor_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7889 ,p_labor_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7890 ,p_cc_process_nl_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7891 ,p_nl_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7892 ,p_nl_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7893 ,p_cc_tax_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7894 ,p_role_list_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7895 ,p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7896 ,p_calendar_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7897 ,p_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7898 ,p_probability_member_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7899 ,p_project_value IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7900 ,p_expected_approval_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7901 ,p_cost_job_group_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7902 ,p_bill_job_group_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7903 ,p_emp_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7904 ,p_job_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7905 --Sakthi MCB
7906 ,p_invproc_currency_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7907 ,p_revproc_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7908 ,p_project_bil_rate_date_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7909 ,p_project_bil_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7910 ,p_project_bil_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7911 ,p_project_bil_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7912 ,p_projfunc_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7913 ,p_projfunc_bil_rate_date_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7914 ,p_projfunc_bil_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7915 ,p_projfunc_bil_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7916 ,p_projfunc_bil_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7917 ,p_funding_rate_date_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7918 ,p_funding_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7919 ,p_funding_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7920 ,p_funding_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7921 ,p_baseline_funding_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7922 ,p_multi_currency_billing_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7923 ,p_competence_match_wt IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7924 ,p_availability_match_wt IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7925 ,p_job_level_match_wt IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7926 ,p_enable_automated_search IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7927 ,p_search_min_availability IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7928 ,p_search_org_hier_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7929 ,p_search_starting_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7930 ,p_search_country_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7931 ,p_min_cand_score_reqd_for_nom IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7932 ,p_max_num_of_sys_nom_cand IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7933 ,p_non_lab_std_bill_rt_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7934 ,p_search_country_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7935 ,p_inv_by_bill_trans_curr_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7936 ,p_projfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7937 ,p_projfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7938 --Sakthi MCB
7939 --Sakthi Structure
7940 ,p_assign_precedes_task IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7941 ,p_split_cost_from_wokplan_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7942 ,p_split_cost_from_bill_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7943 --Sakthi Structure
7944 --Advertisement
7945 ,p_adv_action_set_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7946 ,p_start_adv_action_set_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7947 --Advertisement
7948 --Project Setup
7949 ,p_priority_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7950 --Project Setup
7951 --Retention
7952 ,p_retn_billing_inv_format_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7953 ,p_retn_accounting_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7954 --Retention
7955 -- anlee opportunity changes
7956 ,p_opp_value_currency_code VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7957 -- anlee
7958 -- patchset K changes
7959 ,p_revaluate_funding_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7960 ,p_include_gains_losses_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7961 -- msundare
7962 ,p_security_level IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7963 ,p_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7964 ,p_non_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7965 -- End of changes
7966 --PA L changes -- bug 2872708 --load_project
7967 ,p_asset_allocation_method VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7968 ,p_capital_event_processing VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7969 ,p_cint_rate_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7970 ,p_cint_eligible_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7971 ,p_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
7972 --end PA L changes -- bug 2872708
7973 -- car changes
7974 ,p_bill_To_Customer_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug 3728734
7975 ,p_ship_To_Customer_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug 3728734
7976 -- car changes
7977 -- PA L Changes 3010538
7978 ,p_process_mode VARCHAR2 :='ONLINE'
7979 -- FP M changes begin (venkat)
7980 ,p_sys_program_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7981 , p_allow_multi_program_rollup IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Bug # 5072032.
7982 ,p_enable_top_task_cust_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7983 ,p_enable_top_task_inv_mth_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7984 ,p_projfunc_attr_for_ar_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7985 -- FP M changes end (venkat)
7986 ,p_ar_rec_notify_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 7508661 : EnC
7987 ,p_auto_release_pwp_inv IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 7508661 : EnC
7988 )
7989
7990 IS
7991
7992 l_api_name CONSTANT VARCHAR2(30) := 'load_project';
7993
7994
7995 BEGIN
7996
7997 -- Standard begin of API savepoint
7998
7999 SAVEPOINT load_project_pub;
8000
8001 -- Standard call to check for call compatibility.
8002
8003 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
8004 p_api_version_number ,
8005 l_api_name ,
8006 G_PKG_NAME )
8007 THEN
8008
8009 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8010
8011 END IF;
8012
8013 -- Initialize the message table if requested.
8014
8015 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8016 THEN
8017
8018 FND_MSG_PUB.initialize;
8019
8020 END IF;
8021
8022 -- Set API return status to success
8023
8024 p_return_status := FND_API.G_RET_STS_SUCCESS;
8025
8026 -- assign incoming parameters to the fields of global project record
8027
8028 G_project_in_rec.pa_project_id := p_pa_project_id;
8029 G_project_in_rec.pa_project_number := p_pa_project_number;
8030 -- G_project_in_rec.pm_project_reference := p_pm_project_reference;
8031 G_project_in_rec.pm_project_reference := substrb(p_pm_project_reference,1,25); -- modified for bug 4998328
8032 G_project_in_rec.project_name := p_project_name;
8033 G_project_in_rec.long_name := p_long_name;
8034 G_project_in_rec.created_from_project_id := p_created_from_project_id;
8035 G_project_in_rec.carrying_out_organization_id := p_carrying_out_organization_id;
8036 G_project_in_rec.public_sector_flag := p_public_sector_flag;
8037 G_project_in_rec.project_status_code := p_project_status_code;
8038 G_project_in_rec.description := p_description;
8039 G_project_in_rec.start_date := p_start_date;
8040 G_project_in_rec.completion_date := p_completion_date;
8041 G_project_in_rec.distribution_rule := p_distribution_rule;
8042 G_project_in_rec.customer_id := p_customer_id;
8043 G_project_in_rec.project_relationship_code := p_project_relationship_code;
8044 G_project_in_rec.actual_start_date := p_actual_start_date;
8045 G_project_in_rec.actual_finish_date := p_actual_finish_date;
8046 G_project_in_rec.early_start_date := p_early_start_date;
8047 G_project_in_rec.early_finish_date := p_early_finish_date;
8048 G_project_in_rec.late_start_date := p_late_start_date;
8049 G_project_in_rec.late_finish_date := p_late_finish_date;
8050 G_project_in_rec.scheduled_start_date :=
8051 p_scheduled_start_date;
8052 G_project_in_rec.scheduled_finish_date :=
8053 p_scheduled_finish_date;
8054 G_project_in_rec.attribute_category := p_attribute_category;
8055 G_project_in_rec.attribute1 := p_attribute1;
8056 G_project_in_rec.attribute2 := p_attribute2;
8057 G_project_in_rec.attribute3 := p_attribute3;
8058 G_project_in_rec.attribute4 := p_attribute4;
8059 G_project_in_rec.attribute5 := p_attribute5;
8060 G_project_in_rec.attribute6 := p_attribute6;
8061 G_project_in_rec.attribute7 := p_attribute7;
8062 G_project_in_rec.attribute8 := p_attribute8;
8063 G_project_in_rec.attribute9 := p_attribute9;
8064 G_project_in_rec.attribute10 := p_attribute10;
8065
8066 -- Tax Code Changes starts ...
8067
8068 G_project_in_rec.output_tax_code := p_output_tax_code;
8069 G_project_in_rec.output_tax_code := p_retention_tax_code;
8070
8071 -- IC and Multi National Currency changes Starts ...
8072
8073 G_project_in_rec.project_currency_code := p_project_currency_code;
8074 G_project_in_rec.allow_cross_charge_flag := p_allow_cross_charge_flag;
8075 G_project_in_rec.project_rate_date := p_project_rate_date;
8076 G_project_in_rec.project_rate_type := p_project_rate_type;
8077
8078 G_project_in_rec.cc_process_labor_flag := p_cc_process_labor_flag;
8079 G_project_in_rec.labor_tp_schedule_id := p_labor_tp_schedule_id;
8080 G_project_in_rec.labor_tp_fixed_date := p_labor_tp_fixed_date;
8081 G_project_in_rec.cc_process_nl_flag := p_cc_process_nl_flag;
8082 G_project_in_rec.nl_tp_schedule_id := p_nl_tp_schedule_id;
8083 G_project_in_rec.nl_tp_fixed_date := p_nl_tp_fixed_date;
8084 G_project_in_rec.cc_tax_task_id := p_cc_tax_task_id;
8085
8086 -- IC and Multi National Currency changes Ends ...
8087
8088 -- ORM Code change starts here ...
8089
8090 G_project_in_rec.role_list_id := p_role_list_id;
8091 G_project_in_rec.work_type_id := p_work_type_id;
8092 G_project_in_rec.calendar_id := p_calendar_id;
8093 G_project_in_rec.probability_member_id := p_probability_member_id;
8094 G_project_in_rec.project_value := p_project_value;
8095 G_project_in_rec.expected_approval_date := p_expected_approval_date;
8096 G_project_in_rec.cost_job_group_id := p_cost_job_group_id;
8097 G_project_in_rec.bill_job_group_id := p_bill_job_group_id;
8098
8099 -- ORM Code change ends here ...
8100
8101 G_project_in_rec.emp_bill_rate_schedule_id := p_emp_bill_rate_schedule_id;
8102 G_project_in_rec.job_bill_rate_schedule_id := p_job_bill_rate_schedule_id;
8103
8104 --Sakthi MCB
8105 G_project_in_rec.competence_match_wt := p_competence_match_wt;
8106 G_project_in_rec.availability_match_wt := p_availability_match_wt;
8107 G_project_in_rec.job_level_match_wt := p_job_level_match_wt;
8108 G_project_in_rec.enable_automated_search := p_enable_automated_search;
8109 G_project_in_rec.search_min_availability := p_search_min_availability;
8110 G_project_in_rec.search_org_hier_id := p_search_org_hier_id;
8111 G_project_in_rec.search_starting_org_id := p_search_starting_org_id;
8112 G_project_in_rec.search_country_code := p_search_country_code;
8113 G_project_in_rec.min_cand_score_reqd_for_nom := p_min_cand_score_reqd_for_nom;
8114 G_project_in_rec.non_lab_std_bill_rt_sch_id := p_non_lab_std_bill_rt_sch_id;
8115 G_project_in_rec.invproc_currency_type := p_invproc_currency_type;
8116 G_project_in_rec.revproc_currency_code := p_revproc_currency_code;
8117 G_project_in_rec.project_bil_rate_date_code := p_project_bil_rate_date_code;
8118 G_project_in_rec.project_bil_rate_type := p_project_bil_rate_type;
8119 G_project_in_rec.project_bil_rate_date := p_project_bil_rate_date;
8120 G_project_in_rec.project_bil_exchange_rate := p_project_bil_exchange_rate;
8121 G_project_in_rec.projfunc_currency_code := p_projfunc_currency_code;
8122 G_project_in_rec.projfunc_bil_rate_date_code := p_projfunc_bil_rate_date_code;
8123 G_project_in_rec.projfunc_bil_rate_type := p_projfunc_bil_rate_type;
8124 G_project_in_rec.projfunc_bil_rate_date := p_projfunc_bil_rate_date;
8125 G_project_in_rec.projfunc_bil_exchange_rate := p_projfunc_bil_exchange_rate;
8126 G_project_in_rec.funding_rate_date_code := p_funding_rate_date_code;
8127 G_project_in_rec.funding_rate_type := p_funding_rate_type;
8128 G_project_in_rec.funding_rate_date := p_funding_rate_date;
8129 G_project_in_rec.funding_exchange_rate := p_funding_exchange_rate;
8130 G_project_in_rec.baseline_funding_flag := p_baseline_funding_flag;
8131 G_project_in_rec.projfunc_cost_rate_type := p_projfunc_cost_rate_type;
8132 G_project_in_rec.projfunc_cost_rate_date := p_projfunc_cost_rate_date;
8133 G_project_in_rec.inv_by_bill_trans_curr_flag := p_inv_by_bill_trans_curr_flag;
8134 G_project_in_rec.multi_currency_billing_flag := p_multi_currency_billing_flag;
8135 --Sakthi MCB
8136 --Sakthi Structure
8137 G_project_in_rec.assign_precedes_task := p_assign_precedes_task;
8138 G_project_in_rec.split_cost_from_workplan_flag := p_split_cost_from_wokplan_flag;
8139 G_project_in_rec.split_cost_from_bill_flag := p_split_cost_from_bill_flag;
8140 --Sakthi Structure
8141 --Advertisement
8142 G_project_in_rec.adv_action_set_id := p_adv_action_set_id;
8143 G_project_in_rec.start_adv_action_set_flag := p_start_adv_action_set_flag;
8144 --Advertisement
8145 --Project Setup
8146 G_project_in_rec.priority_code := p_priority_code;
8147 --Project Setup
8148 --Retention
8149 G_project_in_rec.retn_billing_inv_format_id := p_retn_billing_inv_format_id;
8150 G_project_in_rec.retn_accounting_flag := p_retn_accounting_flag;
8151 --Retention
8152
8153 -- anlee opportunity changes
8154 G_project_in_rec.opp_value_currency_code := p_opp_value_currency_code;
8155
8156 -- anlee
8157 -- patchset K changes
8158 G_project_in_rec.revaluate_funding_flag := p_revaluate_funding_flag;
8159 G_project_in_rec.include_gains_losses_flag := p_include_gains_losses_flag;
8160 -- msundare
8161 G_project_in_rec.security_level := p_security_level;
8162 G_project_in_rec.labor_disc_reason_code := p_labor_disc_reason_code;
8163 G_project_in_rec.non_labor_disc_reason_code := p_non_labor_disc_reason_code;
8164 -- End of changes
8165
8166 --PA L Changes 2872708
8167 G_project_in_rec.asset_allocation_method := p_asset_allocation_method;
8168 G_project_in_rec.capital_event_processing := p_capital_event_processing;
8169 G_project_in_rec.cint_rate_sch_id := p_cint_rate_sch_id;
8170 G_project_in_rec.cint_eligible_flag := p_cint_eligible_flag;
8171 G_project_in_rec.cint_stop_date := p_cint_stop_date;
8172 --PA L Changes 2872708
8173
8174 --CAR changes: bug 2943284
8175 G_project_in_rec.Bill_to_customer_id :=P_bill_to_customer_id;
8176 G_project_in_rec.Ship_to_customer_id :=P_Ship_To_customer_id;
8177
8178 -- PA L Changes 3010538
8179 G_project_in_rec.process_mode :=p_process_mode ;
8180
8181 -- FP_M changes begin (venkat)
8182 G_project_in_rec.sys_program_flag := p_sys_program_flag;
8183 G_project_in_rec.allow_multi_program_rollup := p_allow_multi_program_rollup; -- Bug # 5072032.
8184
8185 -- FP_M changes end (venkat)
8186 --Bug 3279981. FP_M Project setup changes
8187 G_project_in_rec.enable_top_task_customer_flag := p_enable_top_task_cust_flag ;
8188 G_project_in_rec.enable_top_task_inv_mth_flag := p_enable_top_task_inv_mth_flag ;
8189 --Bug 3279981. FP_M Project setup changes
8190 G_project_in_rec.ar_rec_notify_flag := p_ar_rec_notify_flag ;
8191 G_project_in_rec.auto_release_pwp_inv := p_auto_release_pwp_inv ;
8192
8193 EXCEPTION
8194
8195 WHEN FND_API.G_EXC_ERROR
8196 THEN
8197 ROLLBACK TO load_project_pub;
8198
8199 p_return_status := FND_API.G_RET_STS_ERROR;
8200
8201
8202 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8203 THEN
8204 ROLLBACK TO load_project_pub;
8205
8206 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8207
8208
8209 WHEN OTHERS THEN
8210 ROLLBACK TO load_project_pub;
8211
8212 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8213
8214 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8215 THEN
8216 FND_MSG_PUB.add_exc_msg
8217 ( p_pkg_name => G_PKG_NAME
8218 , p_procedure_name => l_api_name );
8219
8220 END IF;
8221
8222
8223 END load_project;
8224
8225
8226 --------------------------------------------------------------------------------
8227 --Name: load_key_member
8228 --Type: Procedure
8229 --Description: This procedure can be used to move a key member
8230 -- from the client side to a PL/SQL table on the server side
8231 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8232 --
8233 --Called subprograms:
8234 --
8235 --
8236 --
8237 --History:
8238 -- 19-AUG-1996 L. de Werker Created
8239 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
8240 --
8241
8242 PROCEDURE load_key_member
8243 ( p_api_version_number IN NUMBER
8244 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8245 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8246 ,p_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8247 ,p_project_role_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8248 ,p_project_role_meaning IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added for Bug 6408593
8249 ,p_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8250 ,p_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE )
8251
8252 IS
8253
8254 l_api_name CONSTANT VARCHAR2(30) := 'load_key_member';
8255 i NUMBER;
8256
8257
8258 BEGIN
8259
8260 -- Standard begin of API savepoint
8261
8262 SAVEPOINT load_key_member_pub;
8263
8264 -- Standard call to check for call compatibility.
8265
8266 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
8267 p_api_version_number ,
8268 l_api_name ,
8269 G_PKG_NAME )
8270 THEN
8271
8272 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8273
8274 END IF;
8275
8276 -- Initialize the message table if requested.
8277
8278 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8279 THEN
8280
8281 FND_MSG_PUB.initialize;
8282
8283 END IF;
8284
8285 -- Set API return status to success
8286
8287 p_return_status := FND_API.G_RET_STS_SUCCESS;
8288
8289 -- Load the table only if a valid person id is passed
8290
8291 IF (p_person_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8292 (p_person_id IS NOT NULL) THEN
8293
8294 -- assign a value to the global counter for this table
8295 G_key_members_tbl_count := G_key_members_tbl_count + 1;
8296 -- assign incoming parameters to the global table fields
8297 G_key_members_in_tbl(G_key_members_tbl_count).person_id := p_person_id;
8298 G_key_members_in_tbl(G_key_members_tbl_count).project_role_type
8299 := p_project_role_type;
8300 G_key_members_in_tbl(G_key_members_tbl_count).project_role_meaning
8301 := p_project_role_meaning; --Added for bug 6408593
8302 G_key_members_in_tbl(G_key_members_tbl_count).start_date := p_start_date;
8303 G_key_members_in_tbl(G_key_members_tbl_count).end_date := p_end_date;
8304
8305 END IF;
8306
8307
8308 EXCEPTION
8309
8310 WHEN FND_API.G_EXC_ERROR
8311 THEN
8312 ROLLBACK TO load_key_member_pub;
8313
8314 p_return_status := FND_API.G_RET_STS_ERROR;
8315
8316
8317 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8318 THEN
8319 ROLLBACK TO load_key_member_pub;
8320
8321 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8322
8323
8324 WHEN OTHERS THEN
8325 ROLLBACK TO load_key_member_pub;
8326
8327 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8328
8329 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8330 THEN
8331 FND_MSG_PUB.add_exc_msg
8332 ( p_pkg_name => G_PKG_NAME
8333 , p_procedure_name => l_api_name );
8334
8335 END IF;
8336
8337
8338 END load_key_member;
8339
8340
8341 -- anlee org role changes
8342 --------------------------------------------------------------------------------
8343 --Name: load_org_role
8344 --Type: Procedure
8345 --Description: This procedure can be used to move an org role
8346 -- from the client side to a PL/SQL table on the server side
8347 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8348 --
8349 --Called subprograms:
8350 --
8351 --
8352 --
8353 --History:
8354 -- 20-MAR-2002 anlee Created
8355
8356 PROCEDURE load_org_role
8357 ( p_api_version_number IN NUMBER
8358 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8359 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8360 ,p_resource_source_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8361 ,p_project_role_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8362 ,p_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8363 ,p_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE )
8364
8365 IS
8366
8367 l_api_name CONSTANT VARCHAR2(30) := 'load_org_role';
8368 i NUMBER;
8369
8370
8371 BEGIN
8372
8373 -- Standard begin of API savepoint
8374
8375 SAVEPOINT load_org_role_pub;
8376
8377 -- Standard call to check for call compatibility.
8378
8379 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
8380 p_api_version_number ,
8381 l_api_name ,
8382 G_PKG_NAME )
8383 THEN
8384
8385 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8386
8387 END IF;
8388
8389 -- Initialize the message table if requested.
8390
8391 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8392 THEN
8393
8394 FND_MSG_PUB.initialize;
8395
8396 END IF;
8397
8398 -- Set API return status to success
8399
8400 p_return_status := FND_API.G_RET_STS_SUCCESS;
8401
8402 -- Load the table only if a valid resource source id is passed
8403
8404 IF (p_resource_source_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8405 (p_resource_source_id IS NOT NULL) THEN
8406
8407 -- assign a value to the global counter for this table
8408 G_org_roles_tbl_count := G_org_roles_tbl_count + 1;
8409 -- assign incoming parameters to the global table fields
8410 G_org_roles_in_tbl(G_org_roles_tbl_count).person_id := p_resource_source_id;
8411 G_org_roles_in_tbl(G_org_roles_tbl_count).project_role_type
8412 := p_project_role_type;
8413 G_org_roles_in_tbl(G_org_roles_tbl_count).start_date := p_start_date;
8414 G_org_roles_in_tbl(G_org_roles_tbl_count).end_date := p_end_date;
8415
8416 END IF;
8417
8418
8419 EXCEPTION
8420
8421 WHEN FND_API.G_EXC_ERROR
8422 THEN
8423 ROLLBACK TO load_org_role_pub;
8424
8425 p_return_status := FND_API.G_RET_STS_ERROR;
8426
8427
8428 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8429 THEN
8430 ROLLBACK TO load_org_role_pub;
8431
8432 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8433
8434
8435 WHEN OTHERS THEN
8436 ROLLBACK TO load_org_role_pub;
8437
8438 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8439
8440 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8441 THEN
8442 FND_MSG_PUB.add_exc_msg
8443 ( p_pkg_name => G_PKG_NAME
8444 , p_procedure_name => l_api_name );
8445
8446 END IF;
8447
8448
8449 END load_org_role;
8450
8451
8452
8453 --------------------------------------------------------------------------------
8454 --Name: load_class_category
8455 --Type: Procedure
8456 --Description: This procedure can be used to move a class category
8457 -- from the client side to a PL/SQL table on the server side
8458 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8459 --
8460 --Called subprograms:
8461 --
8462 --
8463 --
8464 --History:
8465 -- 19-AUG-1996 L. de Werker Created
8466 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
8467 --
8468
8469 PROCEDURE load_class_category
8470 ( p_api_version_number IN NUMBER
8471 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8472 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8473 ,p_class_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8474 ,p_class_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8475 ,p_new_class_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added for Bug 7028230
8476 ,p_code_percentage IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
8477
8478 IS
8479
8480 l_api_name CONSTANT VARCHAR2(30) := 'load_class_categories';
8481 i NUMBER;
8482 l_code_percentage NUMBER;
8483 l_new_class_code VARCHAR2(30); -- Added for Bug 7028230
8484
8485 BEGIN
8486
8487 -- Standard begin of API savepoint
8488
8489 SAVEPOINT load_class_category_pub;
8490
8491 -- Standard call to check for call compatibility.
8492
8493 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
8494 p_api_version_number ,
8495 l_api_name ,
8496 G_PKG_NAME )
8497 THEN
8498
8499 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8500
8501 END IF;
8502
8503 -- Initialize the message table if requested.
8504
8505 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8506 THEN
8507
8508 FND_MSG_PUB.initialize;
8509
8510 END IF;
8511
8512 -- Set API return status to success
8513
8514 p_return_status := FND_API.G_RET_STS_SUCCESS;
8515
8516 -- Load the table only if a valid class category id is passed
8517
8518 IF (p_class_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
8519 (p_class_category IS NOT NULL )
8520 AND (p_class_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
8521 (p_class_code IS NOT NULL ) THEN
8522
8523 -- assign a value to the global counter for this table
8524 G_class_categories_tbl_count := G_class_categories_tbl_count + 1;
8525
8526 if p_code_percentage = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
8527 l_code_percentage := NULL;
8528 else
8529 l_code_percentage := p_code_percentage;
8530 end if;
8531
8532 /* Added for Bug 7028230 */
8533 if p_new_class_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
8534 l_code_percentage := NULL;
8535 else
8536 l_new_class_code := p_new_class_code;
8537 end if;
8538
8539 -- assign incoming parameters to the global table fields
8540 G_class_categories_in_tbl(G_class_categories_tbl_count).class_category
8541 := p_class_category;
8542 G_class_categories_in_tbl(G_class_categories_tbl_count).class_code
8543 := p_class_code;
8544 G_class_categories_in_tbl(G_class_categories_tbl_count).code_percentage
8545 := l_code_percentage;
8546 /* Added for Bug 7028230 */
8547 G_class_categories_in_tbl(G_class_categories_tbl_count).new_class_code := l_new_class_code;
8548
8549 END IF;
8550
8551
8552 EXCEPTION
8553
8554 WHEN FND_API.G_EXC_ERROR
8555 THEN
8556 ROLLBACK TO load_class_category_pub;
8557
8558 p_return_status := FND_API.G_RET_STS_ERROR;
8559
8560
8561 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8562 THEN
8563 ROLLBACK TO load_class_category_pub;
8564
8565 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8566
8567
8568 WHEN OTHERS THEN
8569 ROLLBACK TO load_class_category_pub;
8570
8571 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8572
8573 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8574 THEN
8575 FND_MSG_PUB.add_exc_msg
8576 ( p_pkg_name => G_PKG_NAME
8577 , p_procedure_name => l_api_name );
8578
8579 END IF;
8580
8581 END load_class_category;
8582
8583 --------------------------------------------------------------------------------
8584 --Name: load_task
8585 --Type: Procedure
8586 --Description: This procedure can be used to move a task
8587 -- from the client side to a PL/SQL table on the server side
8588 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8589 --
8590 --Called subprograms:
8591 --
8592 --
8593 --
8594 --History:
8595 -- 19-AUG-1996 L. de Werker Created
8596 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
8597 -- 28-NOV-1996 L. de Werker Added 11 parameters for descriptive flexfields
8598 -- 10-DEC-1996 L. de Werker Added parameter p_pa_parent_task_id
8599 -- Added parameter p_address_id
8600 -- 15-JUL-2003 sramesh Commented a code for bug 2982057
8601 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
8602 -- dependency_type and lag days to tasks and create dependencies.
8603 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
8604 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
8605 -- 19-FEB-2004 Rakesh Raghavan Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK.
8606 -- 05-APR-2004 Rakesh Raghavan Progress Management Changes. Bug # 3420093.
8607
8608 PROCEDURE load_task
8609 ( p_api_version_number IN NUMBER
8610 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8611 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8612 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8613 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8614 ,p_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8615 ,p_long_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8616 ,p_pa_task_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8617 ,p_task_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8618 ,p_task_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8619 ,p_task_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8620 ,p_pm_parent_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8621 ,p_pa_parent_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8622 ,p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8623 ,p_carrying_out_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8624 ,p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8625 ,p_task_manager_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8626 ,p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8627 ,p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8628 ,p_ready_to_bill_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8629 ,p_ready_to_distribute_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8630 ,p_limit_to_txn_controls_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8631 ,p_labor_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8632 ,p_labor_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8633 ,p_labor_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8634 ,p_labor_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8635 ,p_nl_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8636 ,p_nl_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8637 ,p_nl_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8638 ,p_nl_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8639 ,p_labor_cost_multiplier_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8640 ,p_cost_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8641 ,p_rev_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8642 ,p_inv_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8643 ,p_cost_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8644 ,p_rev_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8645 ,p_inv_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8646 ,p_labor_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8647 ,p_nl_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8648 , p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8649 , p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8650 , p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8651 , p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8652 , p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8653 , p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8654 , p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8655 , p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8656 ,p_tasks_dff IN VARCHAR2 := 'N' --bug 6153503
8657 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8658 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8659 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8660 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8661 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8662 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8663 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8664 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8665 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8666 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8667 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8668 --bug 6153503
8669 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8670 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8671 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8672 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8673 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8674 --end bug 6153503
8675 ,p_allow_cross_charge_flag IN VARCHAR2 :=
8676 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8677 ,p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8678 ,p_project_rate_type IN VARCHAR2 :=
8679 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8680 ,p_cc_process_labor_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8681 ,p_labor_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8682 ,p_labor_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8683 ,p_cc_process_nl_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8684 ,p_nl_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8685 ,p_nl_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8686 ,p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8687 ,p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8688 ,p_emp_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8689 ,p_job_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8690 --Sakthi MCB
8691 ,p_non_lab_std_bill_rt_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8692 ,p_taskfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8693 ,p_taskfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8694 --Sakthi MCB
8695 ,p_display_sequence IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8696 ,p_wbs_level IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8697 --Project Structure
8698 ,P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8699 ,P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8700 ,P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8701 ,P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8702 ,P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8703 ,P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8704 ,P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8705 ,P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8706 ,P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8707 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8708 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8709 ,P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8710 ,P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8711 ,P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8712 ,P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8713 ,P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8714 ,P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8715 ,P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8716 ,P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8717 ,P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8718 ,P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8719 ,P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8720 --Project Structure
8721 ,p_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8722 ,p_non_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8723 --PA L changes -- bug 2872708
8724 ,p_retirement_cost_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8725 ,p_cint_eligible_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8726 ,p_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8727 --end PA L changes -- bug 2872708
8728 -- FP-M Bug # 3301192
8729 ,p_pred_string VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8730 -- ,p_pred_delimiter VARCHAR2 DEFAULT ','
8731 ,p_pred_delimiter IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8732 -- FP M changes begin (venkat)
8733 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8734 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8735 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8736 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8737 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8738 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8739 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8740 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8741 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8742 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8743 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8744 -- FP M changes end (venkat)
8745 -- FP M changes start (Mapping )
8746 ,p_financial_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8747 ,p_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8748 ,p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8749 -- FP M changes end (Mapping )
8750 ,p_deliverable IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8751 ,p_deliverable_id IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM -- 3661788 Added IN parameter
8752 -- (begin venkat) new params for bug #3450684 --------------------------------------
8753 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
8754 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
8755 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
8756 -- (end venkat) new params for bug #3450684 ----------------------------------------
8757
8758 -- Progress Management Changes. Bug # 3420093.
8759 ,p_etc_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8760 ,p_percent_complete IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8761 -- Progress Management Changes. Bug # 3420093.
8762
8763 )
8764 IS
8765
8766 l_api_name CONSTANT VARCHAR2(30) := 'load_task';
8767 i NUMBER;
8768
8769
8770 BEGIN
8771
8772 -- Standard begin of API savepoint
8773
8774 SAVEPOINT load_task_pub;
8775
8776 -- Standard call to check for call compatibility.
8777
8778 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
8779 p_api_version_number ,
8780 l_api_name ,
8781 G_PKG_NAME )
8782 THEN
8783
8784 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8785
8786 END IF;
8787
8788 -- Initialize the message table if requested.
8789
8790 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8791 THEN
8792
8793 FND_MSG_PUB.initialize;
8794
8795 END IF;
8796
8797 -- Set API return status to success
8798
8799 p_return_status := FND_API.G_RET_STS_SUCCESS;
8800
8801
8802 -- assign a value to the global counter for this table
8803 G_tasks_tbl_count := G_tasks_tbl_count + 1;
8804
8805
8806 -- assign incoming parameters to the global table fields
8807 --!!not needed G_tasks_in_tbl(G_tasks_tbl_count).pm_project_reference := p_pm_project_reference;
8808 G_tasks_in_tbl(G_tasks_tbl_count).pm_task_reference := p_pm_task_reference;
8809 -- Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK.
8810 G_tasks_in_tbl(G_tasks_tbl_count).task_name := substrb(p_task_name,1,240); --Bug 6193314
8811 --bug 2874207
8812 /* Commented the code for bug 2982057 and handling it in create_project and update_project
8813 IF p_long_task_name IS NULL OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8814 THEN
8815 G_tasks_in_tbl(G_tasks_tbl_count).long_task_name := p_task_name;
8816 ELSE
8817 */
8818 --As part of bug 2982057, there were changes done in create_proejct, update project apis which
8819 --copies the long task name from this global variable. If user passes long_task_name
8820 --then we need the following line be uncommented.
8821
8822 G_tasks_in_tbl(G_tasks_tbl_count).long_task_name := p_long_task_name;
8823
8824 -- END IF;
8825 --bug 2874207
8826 -- Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK
8827
8828 G_tasks_in_tbl(G_tasks_tbl_count).pa_task_number := substrb(p_pa_task_number,1,100); --Bug 6193314
8829
8830
8831
8832 G_tasks_in_tbl(G_tasks_tbl_count).task_description := substrb(p_task_description,1,250); -- Fix for Bug # 4513291.
8833 G_tasks_in_tbl(G_tasks_tbl_count).task_start_date := p_task_start_date;
8834 G_tasks_in_tbl(G_tasks_tbl_count).task_completion_date := p_task_completion_date;
8835 G_tasks_in_tbl(G_tasks_tbl_count).pm_parent_task_reference := p_pm_parent_task_reference;
8836 G_tasks_in_tbl(G_tasks_tbl_count).pa_parent_task_id := p_pa_parent_task_id;
8837 G_tasks_in_tbl(G_tasks_tbl_count).address_id := p_address_id;
8838 G_tasks_in_tbl(G_tasks_tbl_count).carrying_out_organization_id := p_carrying_out_organization_id;
8839 G_tasks_in_tbl(G_tasks_tbl_count).service_type_code := p_service_type_code;
8840 G_tasks_in_tbl(G_tasks_tbl_count).task_manager_person_id := p_task_manager_person_id;
8841 G_tasks_in_tbl(G_tasks_tbl_count).billable_flag := p_billable_flag;
8842 G_tasks_in_tbl(G_tasks_tbl_count).chargeable_flag := p_chargeable_flag;
8843 G_tasks_in_tbl(G_tasks_tbl_count).ready_to_bill_flag := p_ready_to_bill_flag;
8844 G_tasks_in_tbl(G_tasks_tbl_count).ready_to_distribute_flag := p_ready_to_distribute_flag;
8845 G_tasks_in_tbl(G_tasks_tbl_count).limit_to_txn_controls_flag := p_limit_to_txn_controls_flag;
8846 G_tasks_in_tbl(G_tasks_tbl_count).labor_bill_rate_org_id := p_labor_bill_rate_org_id;
8847 G_tasks_in_tbl(G_tasks_tbl_count).labor_std_bill_rate_schdl := p_labor_std_bill_rate_schdl;
8848 G_tasks_in_tbl(G_tasks_tbl_count).labor_schedule_fixed_date := p_labor_schedule_fixed_date;
8849 G_tasks_in_tbl(G_tasks_tbl_count).labor_schedule_discount := p_labor_schedule_discount;
8850 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_bill_rate_org_id := p_nl_bill_rate_org_id;
8851 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_std_bill_rate_schdl := p_nl_std_bill_rate_schdl;
8852 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_schedule_fixed_date := p_nl_schedule_fixed_date;
8853 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_schedule_discount := p_nl_schedule_discount;
8854 G_tasks_in_tbl(G_tasks_tbl_count).labor_cost_multiplier_name := p_labor_cost_multiplier_name;
8855 G_tasks_in_tbl(G_tasks_tbl_count).cost_ind_rate_sch_id := p_cost_ind_rate_sch_id;
8856 G_tasks_in_tbl(G_tasks_tbl_count).rev_ind_rate_sch_id := p_rev_ind_rate_sch_id;
8857 G_tasks_in_tbl(G_tasks_tbl_count).inv_ind_rate_sch_id := p_inv_ind_rate_sch_id;
8858 G_tasks_in_tbl(G_tasks_tbl_count).cost_ind_sch_fixed_date := p_cost_ind_sch_fixed_date;
8859 G_tasks_in_tbl(G_tasks_tbl_count).rev_ind_sch_fixed_date := p_rev_ind_sch_fixed_date;
8860 G_tasks_in_tbl(G_tasks_tbl_count).inv_ind_sch_fixed_date := p_inv_ind_sch_fixed_date;
8861 G_tasks_in_tbl(G_tasks_tbl_count).labor_sch_type := p_labor_sch_type;
8862 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_sch_type := p_nl_sch_type;
8863 G_tasks_in_tbl(G_tasks_tbl_count).pa_task_id := p_pa_task_id;
8864 G_tasks_in_tbl(G_tasks_tbl_count).actual_start_date :=
8865 p_actual_start_date;
8866 G_tasks_in_tbl(G_tasks_tbl_count).actual_finish_date :=
8867 p_actual_finish_date;
8868 G_tasks_in_tbl(G_tasks_tbl_count).early_start_date :=
8869 p_early_start_date;
8870 G_tasks_in_tbl(G_tasks_tbl_count).early_finish_date :=
8871 p_early_finish_date;
8872 G_tasks_in_tbl(G_tasks_tbl_count).late_start_date :=
8873 p_late_start_date;
8874 G_tasks_in_tbl(G_tasks_tbl_count).late_finish_date :=
8875 p_late_finish_date;
8876 G_tasks_in_tbl(G_tasks_tbl_count).scheduled_start_date :=
8877 p_scheduled_start_date;
8878 G_tasks_in_tbl(G_tasks_tbl_count).scheduled_finish_date :=
8879 p_scheduled_finish_date;
8880 G_tasks_in_tbl(G_tasks_tbl_count).tasks_dff :=p_tasks_dff; --bug 6153503
8881 G_tasks_in_tbl(G_tasks_tbl_count).attribute_category :=
8882 p_attribute_category;
8883 G_tasks_in_tbl(G_tasks_tbl_count).attribute1 :=
8884 p_attribute1;
8885 G_tasks_in_tbl(G_tasks_tbl_count).attribute2 :=
8886 p_attribute2;
8887 G_tasks_in_tbl(G_tasks_tbl_count).attribute3 :=
8888 p_attribute3;
8889 G_tasks_in_tbl(G_tasks_tbl_count).attribute4 :=
8890 p_attribute4;
8891 G_tasks_in_tbl(G_tasks_tbl_count).attribute5 :=
8892 p_attribute5;
8893 G_tasks_in_tbl(G_tasks_tbl_count).attribute6 :=
8894 p_attribute6;
8895 G_tasks_in_tbl(G_tasks_tbl_count).attribute7 :=
8896 p_attribute7;
8897 G_tasks_in_tbl(G_tasks_tbl_count).attribute8 :=
8898 p_attribute8;
8899 G_tasks_in_tbl(G_tasks_tbl_count).attribute9 :=
8900 p_attribute9;
8901 G_tasks_in_tbl(G_tasks_tbl_count).attribute10 :=
8902 p_attribute10;
8903 --bug 6153503
8904 G_tasks_in_tbl(G_tasks_tbl_count).attribute11 :=
8905 p_attribute11;
8906 G_tasks_in_tbl(G_tasks_tbl_count).attribute12 :=
8907 p_attribute12;
8908 G_tasks_in_tbl(G_tasks_tbl_count).attribute13 :=
8909 p_attribute13;
8910 G_tasks_in_tbl(G_tasks_tbl_count).attribute14 :=
8911 p_attribute14;
8912 G_tasks_in_tbl(G_tasks_tbl_count).attribute15 :=
8913 p_attribute15;
8914 --end bug 6153503
8915
8916 -- IC and Multi National Currency changes Starts ...
8917
8918 G_tasks_in_tbl(G_tasks_tbl_count).allow_cross_charge_flag :=
8919 p_allow_cross_charge_flag;
8920 G_tasks_in_tbl(G_tasks_tbl_count).project_rate_type :=
8921 p_project_rate_type;
8922 G_tasks_in_tbl(G_tasks_tbl_count).project_rate_date :=
8923 p_project_rate_date;
8924 G_tasks_in_tbl(G_tasks_tbl_count).cc_process_labor_flag :=
8925 p_cc_process_labor_flag;
8926 G_tasks_in_tbl(G_tasks_tbl_count).labor_tp_schedule_id :=
8927 p_labor_tp_schedule_id;
8928 G_tasks_in_tbl(G_tasks_tbl_count).labor_tp_fixed_date :=
8929 p_labor_tp_fixed_date;
8930 G_tasks_in_tbl(G_tasks_tbl_count).cc_process_nl_flag :=
8931 p_cc_process_nl_flag;
8932 G_tasks_in_tbl(G_tasks_tbl_count).nl_tp_schedule_id :=
8933 p_nl_tp_schedule_id;
8934 G_tasks_in_tbl(G_tasks_tbl_count).nl_tp_fixed_date :=
8935 p_nl_tp_fixed_date;
8936 G_tasks_in_tbl(G_tasks_tbl_count).receive_project_invoice_flag :=
8937 p_receive_project_invoice_flag;
8938 G_tasks_in_tbl(G_tasks_tbl_count).work_type_id :=
8939 p_work_type_id;
8940 G_tasks_in_tbl(G_tasks_tbl_count).emp_bill_rate_schedule_id :=
8941 p_emp_bill_rate_schedule_id;
8942 G_tasks_in_tbl(G_tasks_tbl_count).job_bill_rate_schedule_id :=
8943 p_job_bill_rate_schedule_id;
8944
8945 -- IC and Multi National Currency changes Ends ...
8946
8947 --Sakthi MCB
8948
8949 G_tasks_in_tbl(G_tasks_tbl_count).non_lab_std_bill_rt_sch_id :=
8950 p_non_lab_std_bill_rt_sch_id;
8951 G_tasks_in_tbl(G_tasks_tbl_count).taskfunc_cost_rate_type :=
8952 p_taskfunc_cost_rate_type;
8953 G_tasks_in_tbl(G_tasks_tbl_count).taskfunc_cost_rate_date :=
8954 p_taskfunc_cost_rate_date;
8955
8956 --Sakthi MCB
8957 G_tasks_in_tbl(G_tasks_tbl_count).display_sequence :=
8958 p_display_sequence;
8959 G_tasks_in_tbl(G_tasks_tbl_count).wbs_level :=
8960 p_wbs_level;
8961
8962 --Project Structures
8963 G_tasks_in_tbl(G_tasks_tbl_count).OBLIGATION_START_DATE := P_OBLIGATION_START_DATE;
8964 G_tasks_in_tbl(G_tasks_tbl_count).OBLIGATION_FINISH_DATE := P_OBLIGATION_FINISH_DATE;
8965 G_tasks_in_tbl(G_tasks_tbl_count).ESTIMATED_START_DATE := P_ESTIMATED_START_DATE;
8966 G_tasks_in_tbl(G_tasks_tbl_count).ESTIMATED_FINISH_DATE := P_ESTIMATED_FINISH_DATE;
8967 G_tasks_in_tbl(G_tasks_tbl_count).BASELINE_START_DATE := P_BASELINE_START_DATE;
8968 G_tasks_in_tbl(G_tasks_tbl_count).BASELINE_FINISH_DATE := P_BASELINE_FINISH_DATE;
8969 G_tasks_in_tbl(G_tasks_tbl_count).CLOSED_DATE := P_CLOSED_DATE;
8970 G_tasks_in_tbl(G_tasks_tbl_count).WQ_UOM_CODE := P_WQ_UOM_CODE;
8971 G_tasks_in_tbl(G_tasks_tbl_count).WQ_ITEM_CODE := P_WQ_ITEM_CODE;
8972 G_tasks_in_tbl(G_tasks_tbl_count).STATUS_CODE := P_STATUS_CODE;
8973 G_tasks_in_tbl(G_tasks_tbl_count).WF_STATUS_CODE := P_WF_STATUS_CODE;
8974 G_tasks_in_tbl(G_tasks_tbl_count).PM_SOURCE_CODE := P_PM_SOURCE_CODE;
8975 G_tasks_in_tbl(G_tasks_tbl_count).PRIORITY_CODE := P_PRIORITY_CODE;
8976 G_tasks_in_tbl(G_tasks_tbl_count).MILESTONE_FLAG := P_MILESTONE_FLAG;
8977 G_tasks_in_tbl(G_tasks_tbl_count).CRITICAL_FLAG := P_CRITICAL_FLAG;
8978 G_tasks_in_tbl(G_tasks_tbl_count).INC_PROJ_PROGRESS_FLAG := P_INC_PROJ_PROGRESS_FLAG;
8979 G_tasks_in_tbl(G_tasks_tbl_count).LINK_TASK_FLAG := P_LINK_TASK_FLAG;
8980 G_tasks_in_tbl(G_tasks_tbl_count).CALENDAR_ID := P_CALENDAR_ID;
8981 G_tasks_in_tbl(G_tasks_tbl_count).PLANNED_EFFORT := P_PLANNED_EFFORT;
8982 G_tasks_in_tbl(G_tasks_tbl_count).DURATION := P_DURATION;
8983 G_tasks_in_tbl(G_tasks_tbl_count).PLANNED_WORK_QUANTITY := P_PLANNED_WORK_QUANTITY;
8984 G_tasks_in_tbl(G_tasks_tbl_count).TASK_TYPE := P_TASK_TYPE;
8985 --Project Structures
8986 G_tasks_in_tbl(G_tasks_tbl_count).labor_disc_reason_code := p_labor_disc_reason_code;
8987 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_disc_reason_code := p_non_labor_disc_reason_code;
8988
8989 --PA L changes bug 2872708
8990 G_tasks_in_tbl(G_tasks_tbl_count).retirement_cost_flag := p_retirement_cost_flag;
8991 G_tasks_in_tbl(G_tasks_tbl_count).cint_eligible_flag := p_cint_eligible_flag;
8992 G_tasks_in_tbl(G_tasks_tbl_count).cint_stop_date := p_cint_stop_date;
8993
8994 -- FP-M Bug # 3301192
8995 G_tasks_in_tbl(G_tasks_tbl_count).pred_string := p_pred_string;
8996 G_tasks_in_tbl(G_tasks_tbl_count).pred_delimiter := p_pred_delimiter;
8997 --Bug 3279981 FP_M customer and invoice method at top task
8998 G_tasks_in_tbl(G_tasks_tbl_count).invoice_method := p_invoice_method;
8999 G_tasks_in_tbl(G_tasks_tbl_count).customer_id := p_customer_id;
9000 --SMukka
9001 G_tasks_in_tbl(G_tasks_tbl_count).financial_task_flag :=p_financial_task_flag;
9002 G_tasks_in_tbl(G_tasks_tbl_count).mapped_task_id :=p_mapped_task_id;
9003 G_tasks_in_tbl(G_tasks_tbl_count).mapped_task_reference:=p_mapped_task_reference;
9004 G_tasks_in_tbl(G_tasks_tbl_count).deliverable :=p_deliverable;
9005 -- 3661788 Assinging deliverable id
9006 G_tasks_in_tbl(G_tasks_tbl_count).deliverable_id :=p_deliverable_id;
9007 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
9008 G_tasks_in_tbl(G_tasks_tbl_count).ext_act_duration := p_ext_act_duration;
9009 G_tasks_in_tbl(G_tasks_tbl_count).ext_remain_duration := p_ext_remain_duration;
9010 G_tasks_in_tbl(G_tasks_tbl_count).ext_sch_duration := p_ext_sch_duration;
9011 -- (end venkat) new params for bug #3450684 -------------------------------------------------
9012
9013 -- set the new params - bug #3654243 ----------------------------------------------
9014 G_tasks_in_tbl(G_tasks_tbl_count).base_percent_comp_deriv_code := p_base_percent_comp_deriv_code;
9015 G_tasks_in_tbl(G_tasks_tbl_count).sch_tool_tsk_type_code := p_sch_tool_tsk_type_code;
9016 G_tasks_in_tbl(G_tasks_tbl_count).constraint_type_code := p_constraint_type_code;
9017 G_tasks_in_tbl(G_tasks_tbl_count).constraint_date := p_constraint_date;
9018 G_tasks_in_tbl(G_tasks_tbl_count).free_slack := p_free_slack;
9019 G_tasks_in_tbl(G_tasks_tbl_count).total_slack := p_total_slack;
9020 G_tasks_in_tbl(G_tasks_tbl_count).effort_driven_flag := p_effort_driven_flag;
9021 G_tasks_in_tbl(G_tasks_tbl_count).level_assignments_flag := p_level_assignments_flag;
9022 G_tasks_in_tbl(G_tasks_tbl_count).invoice_method := p_invoice_method;
9023 G_tasks_in_tbl(G_tasks_tbl_count).customer_id := p_customer_id;
9024 G_tasks_in_tbl(G_tasks_tbl_count).gen_etc_source_code := p_gen_etc_source_code;
9025 -- set the new params - bug #3654243 -------------------------------------------------
9026
9027 pa_debug.write('load_tasks','p_etc_effort'||p_etc_effort,3);
9028 pa_debug.write('load_tasks','p_percent_complete'||p_percent_complete,3);
9029
9030 -- Progress Management Changes. Bug # 3420093.
9031 G_tasks_in_tbl(G_tasks_tbl_count).etc_effort := p_etc_effort;
9032 G_tasks_in_tbl(G_tasks_tbl_count).percent_complete := p_percent_complete;
9033 -- Progress Management Changes. Bug # 3420093.
9034
9035 EXCEPTION
9036
9037 WHEN FND_API.G_EXC_ERROR
9038 THEN
9039 ROLLBACK TO load_task_pub;
9040
9041 p_return_status := FND_API.G_RET_STS_ERROR;
9042
9043
9044 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9045 THEN
9046 ROLLBACK TO load_task_pub;
9047
9048 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9049
9050
9051 WHEN OTHERS THEN
9052 ROLLBACK TO load_task_pub;
9053
9054 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9055
9056 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9057 THEN
9058 FND_MSG_PUB.add_exc_msg
9059 ( p_pkg_name => G_PKG_NAME
9060 , p_procedure_name => l_api_name );
9061
9062 END IF;
9063
9064 END load_task;
9065
9066
9067 --------------------------------------------------------------------------------
9068 --Name: execute_create_project
9069 --Type: Procedure
9070 --Description: This procedure can be used to create a project
9071 -- using global PL/SQL tables.
9072 --
9073 --Called subprograms:
9074 --
9075 --
9076 --
9077 --History:
9078 -- 19-AUG-1996 L. de Werker Created
9079 -- 22-DEC-97 jwhite - Added OUT-parameter p_workflow_started
9080 -- for workflow.
9081 --
9082
9083 PROCEDURE execute_create_project
9084 ( p_api_version_number IN NUMBER
9085 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9086 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
9087 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9088 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9089 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9090 ,p_workflow_started OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9091 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9092 ,p_op_validate_flag IN VARCHAR2 := 'Y'--added by rtarway, 4218977
9093 ,p_pa_project_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9094 ,p_pa_project_number OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9095 )
9096
9097 IS
9098
9099 l_api_name CONSTANT VARCHAR2(30) := 'execute_create_project';
9100
9101 i NUMBER;
9102 l_return_status VARCHAR2(1);
9103 l_err_stage VARCHAR2(120);
9104
9105 BEGIN
9106
9107 -- Standard begin of API savepoint
9108
9109 SAVEPOINT execute_create_project_pub;
9110
9111 -- Standard call to check for call compatibility.
9112
9113 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
9114 p_api_version_number ,
9115 l_api_name ,
9116 G_PKG_NAME )
9117 THEN
9118
9119 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9120
9121 END IF;
9122
9123 -- Initialize the message table if requested.
9124
9125 IF FND_API.TO_BOOLEAN( p_init_msg_list )
9126 THEN
9127
9128 FND_MSG_PUB.initialize;
9129
9130 END IF;
9131
9132
9133 -- Set API return status to success
9134
9135 p_return_status := FND_API.G_RET_STS_SUCCESS;
9136
9137 create_project( p_api_version_number => p_api_version_number
9138 ,p_commit => FND_API.G_FALSE
9139 ,p_init_msg_list => FND_API.G_FALSE
9140 ,p_msg_count => p_msg_count
9141 ,p_msg_data => p_msg_data
9142 ,p_return_status => l_return_status
9143 ,p_workflow_started => p_workflow_started
9144 ,p_pm_product_code => p_pm_product_code
9145 ,p_op_validate_flag => p_op_validate_flag--added by rtarway 4218977
9146 ,p_project_in => g_project_in_rec
9147 ,p_project_out => g_project_out_rec
9148 ,p_key_members => g_key_members_in_tbl
9149 ,p_class_categories => g_class_categories_in_tbl
9150 ,p_tasks_in => g_tasks_in_tbl
9151 ,p_tasks_out => g_tasks_out_tbl
9152 -- anlee org role changes
9153 ,p_org_roles => g_org_roles_in_tbl
9154 ,p_structure_in => G_structure_in_rec
9155 --bug 3096203
9156 ,p_ext_attr_tbl_in => G_ext_attr_in_tbl
9157 --bug 3096203
9158 --FP M : deliverables
9159 ,p_deliverables_in => G_deliverables_in_tbl
9160 -- ,p_deliverables_out => G_deliverables_out_tbl
9161 ,p_deliverable_actions_in => G_deliverable_actions_in_tbl
9162 -- ,p_deliverable_actions_out => G_deliverable_actions_out_tbl
9163 --FP M : deliverables
9164 );
9165
9166
9167 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
9168 THEN
9169
9170 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9171
9172 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
9173 THEN
9174
9175 RAISE FND_API.G_EXC_ERROR;
9176 END IF;
9177
9178 --assign appropriate values to outgoing parameters
9179 IF g_project_out_rec.pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
9180 p_pa_project_id := NULL;
9181 ELSE
9182 p_pa_project_id := g_project_out_rec.pa_project_id;
9183 END IF;
9184 IF g_project_out_rec.pa_project_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9185 p_pa_project_number := NULL;
9186 ELSE
9187 p_pa_project_number := g_project_out_rec.pa_project_number;
9188 END IF;
9189
9190 IF FND_API.to_boolean( p_commit )
9191 THEN
9192 COMMIT;
9193 END IF;
9194
9195
9196 EXCEPTION
9197
9198 WHEN FND_API.G_EXC_ERROR
9199 THEN
9200 ROLLBACK TO execute_create_project_pub;
9201
9202 p_return_status := FND_API.G_RET_STS_ERROR;
9203
9204 -- 4537865
9205 p_workflow_started := NULL ;
9206 p_pa_project_id := NULL ;
9207 p_pa_project_number := NULL ;
9208 -- 4537865
9209
9210 FND_MSG_PUB.Count_And_Get
9211 ( p_count => p_msg_count ,
9212 p_data => p_msg_data );
9213
9214 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9215 THEN
9216 ROLLBACK TO execute_create_project_pub;
9217
9218 -- 4537865
9219 p_workflow_started := NULL ;
9220 p_pa_project_id := NULL ;
9221 p_pa_project_number := NULL ;
9222 -- 4537865
9223
9224 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9225
9226 FND_MSG_PUB.Count_And_Get
9227 ( p_count => p_msg_count ,
9228 p_data => p_msg_data );
9229
9230 WHEN OTHERS THEN
9231 ROLLBACK TO execute_create_project_pub;
9232
9233 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9234
9235 -- 4537865
9236 p_workflow_started := NULL ;
9237 p_pa_project_id := NULL ;
9238 p_pa_project_number := NULL ;
9239 -- 4537865
9240
9241 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9242 THEN
9243 FND_MSG_PUB.add_exc_msg
9244 ( p_pkg_name => G_PKG_NAME
9245 , p_procedure_name => l_api_name );
9246
9247 END IF;
9248
9249 FND_MSG_PUB.Count_And_Get
9250 ( p_count => p_msg_count ,
9251 p_data => p_msg_data );
9252
9253 END execute_create_project;
9254
9255 --------------------------------------------------------------------------------
9256 --Name: fetch_task
9257 --Type: Procedure
9258 --Description: This procedure can be used to get the task related output data
9259 -- to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
9260 --
9261 --Called subprograms:
9262 --
9263 --
9264 --
9265 --History:
9266 -- 19-AUG-1996 L. de Werker Created
9267 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
9268 --
9269
9270 PROCEDURE fetch_task
9271 ( p_api_version_number IN NUMBER
9272 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
9273 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9274 ,p_task_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9275 ,p_pa_task_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9276 ,p_pm_task_reference OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9277 ,p_task_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9278 )
9279 IS
9280
9281 l_api_name CONSTANT VARCHAR2(30) := 'fetch_task';
9282 l_index NUMBER;
9283 i NUMBER;
9284
9285 BEGIN
9286
9287 -- Standard begin of API savepoint
9288
9289 SAVEPOINT fetch_task_pub;
9290
9291 -- Standard call to check for call compatibility.
9292
9293 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
9294 p_api_version_number ,
9295 l_api_name ,
9296 G_PKG_NAME )
9297 THEN
9298
9299 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9300
9301 END IF;
9302
9303 -- Initialize the message table if requested.
9304
9305 IF FND_API.TO_BOOLEAN( p_init_msg_list )
9306 THEN
9307
9308 FND_MSG_PUB.initialize;
9309
9310 END IF;
9311
9312 -- Set API return status to success
9313
9314 p_return_status := FND_API.G_RET_STS_SUCCESS;
9315
9316 -- Check Task index value, when they don't provide an index we will error out
9317 IF p_task_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9318 OR p_task_index IS NULL
9319 THEN
9320 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9321 THEN
9322 pa_interface_utils_pub.map_new_amg_msg
9323 ( p_old_message_code => 'PA_INDEX_NOT_PROVIDED'
9324 ,p_msg_attribute => 'CHANGE'
9325 ,p_resize_flag => 'N'
9326 ,p_msg_context => 'GENERAL'
9327 ,p_attribute1 => ''
9328 ,p_attribute2 => ''
9329 ,p_attribute3 => ''
9330 ,p_attribute4 => ''
9331 ,p_attribute5 => '');
9332 END IF;
9333
9334 p_return_status := FND_API.G_RET_STS_ERROR;
9335 RAISE FND_API.G_EXC_ERROR;
9336 ELSE
9337 l_index := p_task_index;
9338 END IF;
9339 If G_Tasks_out_tbl.exists(l_index) THEN
9340 -- assign global table fields to the outgoing parameter
9341 -- we don't want to return the big number G_PA_MISS_NUM
9342
9343 IF G_tasks_out_tbl(l_index).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9344 THEN
9345 p_pa_task_id := NULL;
9346 ELSE
9347
9348 p_pa_task_id := G_tasks_out_tbl(l_index).pa_task_id;
9349
9350 END IF;
9351
9352 p_pm_task_reference := G_tasks_out_tbl(l_index).pm_task_reference;
9353 p_task_return_status := G_tasks_out_tbl(l_index).return_status;
9354
9355 END IF;
9356
9357 EXCEPTION
9358
9359 WHEN FND_API.G_EXC_ERROR
9360 THEN
9361 ROLLBACK TO fetch_task_pub;
9362
9363 p_return_status := FND_API.G_RET_STS_ERROR;
9364
9365 -- 4537865
9366 p_pa_task_id := NULL ;
9367 p_pm_task_reference := NULL ;
9368 p_task_return_status := FND_API.G_RET_STS_ERROR ;
9369 -- 4537865
9370
9371
9372 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9373 THEN
9374 ROLLBACK TO fetch_task_pub;
9375
9376 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9377
9378 -- 4537865
9379 p_pa_task_id := NULL ;
9380 p_pm_task_reference := NULL ;
9381 p_task_return_status := FND_API.G_RET_STS_ERROR ;
9382 -- 4537865
9383
9384
9385 WHEN OTHERS THEN
9386 ROLLBACK TO fetch_task_pub;
9387
9388 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9389
9390 -- 4537865
9391 p_pa_task_id := NULL ;
9392 p_pm_task_reference := NULL ;
9393 p_task_return_status := FND_API.G_RET_STS_ERROR ;
9394 -- 4537865
9395
9396 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9397 THEN
9398 FND_MSG_PUB.add_exc_msg
9399 ( p_pkg_name => G_PKG_NAME
9400 , p_procedure_name => l_api_name );
9401
9402 END IF;
9403
9404
9405 END fetch_task;
9406
9407 --------------------------------------------------------------------------------
9408 --Name: clear_project
9409 --Type: Procedure
9410 --Description: This procedure can be used to clear the global PL/SQL
9411 -- tables that are used by a LOAD/EXECUTE/FETCH cycle.
9412 --
9413 --
9414 --Called subprograms: init_project
9415 --
9416 --
9417 --
9418 --History:
9419 -- 20-AUG-1996 L. de Werker Created
9420 -- 30-AUG-1996 L. de Werker Parameterlist removed.
9421 -- 10-JAN-1997 L. de Werker Changed name from CLEAR_CREATE_PROJECT to CLEAR_PROJECT
9422 --
9423 PROCEDURE clear_project
9424
9425 IS
9426
9427 l_api_name CONSTANT VARCHAR2(30) := 'clear_project';
9428
9429 BEGIN
9430
9431
9432 init_project;
9433
9434
9435 END clear_project;
9436
9437 --------------------------------------------------------------------------------
9438 --Name: Update_Project
9439 --Type: Procedure
9440 --Description: This procedure can be used to update a project
9441 --
9442 --
9443 --Called subprograms: PA_PROJECT_STUS_UTILS.Check_Wf_Enabled
9444 --
9445 --
9446 --
9447 --History:
9448 -- 31-JUL-1996 R. Krishnamurthy - Created
9449 -- 03-DEC-1996 L. de Werker - Debugged errors + added checking of NULL values.
9450 -- 05-DEC-1996 L. de Werker - Added WHO columns update in dynamic SQL string
9451 -- 06-DEC-1996 L. de Werker - Added locking mechanism
9452 -- 30-SEP-97 jwhite - Workflow had been added in XX-AUG-97. I made
9453 -- fixes as per unit testing.
9454 -- 22-DEC-97 jwhite - Added OUT-parameter p_workflow_started
9455 -- for workflow.
9456 -- 03-MAY-2000 Rakesh Raghavan - Fixed Bug # 1289156.
9457 -- 12-JUL-2000 Mohnish
9458 -- added code for ROLE BASED SECURITY:
9459 -- added the call to PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY
9460 -- 19-JUL-2000 Mohnish incorporated PA_PROJECT_PARTIES_PUB API changes
9461 -- 23-MAY-2002 MAansari Added call to create_default_task_structure
9462 -- 15-MAR-2003 SRAMESH - Added an OR condition for the bug 2846478
9463 -- in the before the update_project_party call in
9464 -- the procedure CHECK_FOR_ONE_MANAGER_PVT.
9465 -- 26-MAR-2003 SRAMESH - Added calls for the the procedures Check_Schedule_type and Validate_Schedule_Values.
9466 -- the procedure update_project
9467 -- - Also added the update statements for the columns
9468 -- LABOR_SCHEDULE_FIXED_DATE , LABOR_SCHEDULE_DISCOUNT, NON_LABOR_STD_BILL_RATE_SCHDL
9469 -- NON_LABOR_BILL_RATE_ORG_ID, NON_LABOR_SCHEDULE_FIXED_DATE, NON_LABOR_SCHEDULE_DISCOUNT
9470 -- REV_IND_RATE_SCH_ID, INV_IND_RATE_SCH_ID, REV_IND_SCH_FIXED_DATE, INV_IND_SCH_FIXED_DATE
9471 -- Default value for p_structure_type is financial
9472 --Logic used to derive the struture version id
9473 -- If p_structure_type is financial then
9474 -- If Split case then
9475 -- Get the version id of the published structure
9476 -- If no published structure Then
9477 -- Get the version id of the Working Structure
9478 -- IF Shared case and Versioning disabled then
9479 -- Get the version id of the published structure
9480 -- If no published structure Then
9481 -- Get the version id of the Working Structure
9482 -- IF Shared case and versioning enabled but no published version exists then
9483 -- Get the version id of the Working Structure
9484 -- IF Shared case and versioning enabled and published version exists then
9485 -- populate the l_structure_type as 'WORKPLAN'
9486 --Else IF p_structure_type is WORKPLAN then
9487 -- IF Shared case Then
9488 -- Throw an error PA_PS_WP_NOT_SEP_FN
9489 -- IF Split Case and Versioning disabled then
9490 -- Get the version id of the published structure
9491 -- IF Split Case and Versioning Enabled then
9492 -- IF No working versions then
9493 -- create a working version
9494 -- Else
9495 -- get the version id of the last updated working version
9496 -- IF Unable to get version Id
9497 -- Throw an error PA_PS_STRUC_VER_REQ
9498 --End if
9499 -- 19-may-2003 sramesh -Fixed the bug 2910972.Defaulting of the key member start
9500 -- date
9501 -- 10-jun-2003 sramesh -Fixed the bug 2891513.Added the conditions before the update statement
9502 -- of revaluate_funding_flag and include_gains_losses_flag in the
9503 -- update_project API.
9504 -- 15-jul-2003 sramesh -- Added the code for bug 2982057.
9505 -- Changed the logic to populate the long_task_name
9506 -- with task_name when the long_task_name is null.
9507 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
9508 -- dependency_type and lag days to tasks and create dependencies.
9509 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
9510 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
9511 -- 17-Mar-2006 sunkalya - Bug#5210872.Modified the update logic for
9512 -- the parameter 'probability_member_id'.Change tagged with Bug#5210872.
9513 -- 18-May-2006 vkadimes - Bug 5188246 Added validation for output_tax_code and retention_tax_code .
9514 -- Changes are tagged with Bug No.
9515 PROCEDURE Update_Project
9516 ( p_api_version_number IN NUMBER
9517 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9518 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
9519 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9520 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9521 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9522 ,p_workflow_started OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9523 ,p_pm_product_code IN VARCHAR2
9524 ,p_op_validate_flag IN varchar2 := 'Y'
9525 ,p_project_in IN pa_project_pub.project_in_rec_type
9526 ,p_project_out OUT NOCOPY pa_project_pub.project_out_rec_type /*added the nocopy check for the 2674619*/
9527 /* Added for tracking bug - add customers */
9528 ,p_customers_in IN pa_project_pub.customer_tbl_type := G_customers_in_tbl
9529 /* Added Default Value for p_key_members and p_class_categories*/
9530 ,p_key_members IN pa_project_pub.project_role_tbl_type := G_key_members_in_tbl
9531 ,p_class_categories IN pa_project_pub.class_category_tbl_type := G_class_categories_in_tbl
9532 ,p_tasks_in IN pa_project_pub.task_in_tbl_type
9533 ,p_tasks_out OUT NOCOPY pa_project_pub.task_out_tbl_type /*added the nocopy check for the bug 2674619*/
9534 -- anlee org role changes
9535 ,p_org_roles IN pa_project_pub.project_role_tbl_type := G_org_roles_in_tbl
9536 --project structures
9537 ,p_structure_in IN structure_in_rec_type := G_structure_in_rec
9538 ,p_ext_attr_tbl_in IN PA_EXT_ATTR_TABLE_TYPE := G_ext_attr_in_tbl
9539 -- ,p_structure_out OUT structure_out_rec_type
9540 ,p_pass_entire_structure IN VARCHAR2 := 'N' -- Added for bug 3548473 : Bug 3627124
9541 -- If user passes entire strucutre in p_structure_in rec type, p_pass_entire_structure should be set to 'Y'.
9542 --project structures
9543 --FP M : deliverables
9544 ,p_deliverables_in IN deliverable_in_tbl_type := G_deliverables_in_tbl -- 3435905 passing default
9545 -- ,p_deliverables_out OUT NOCOPY deliverable_out_tbl_type -- 3435905 removed out parameter
9546 ,p_deliverable_actions_in IN action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
9547 -- ,p_deliverable_actions_out OUT NOCOPY action_out_tbl_type -- 3435905 removed out parameter
9548 --FP M : deliverables
9549 ,p_update_mode IN VARCHAR2 := 'PA_UPD_WBS_ATTR' --rtarway, for DHI ER, BUG 4413568 --bug 4534919
9550 ) IS
9551
9552 -- Added for bug 5222506
9553 CURSOR l_cur_calendar_id(l_calendar_id NUMBER) IS
9554 SELECT 'Y' FROM jtf_calendars_vl WHERE
9555 trunc(nvl(end_date_active, sysdate)) >= trunc(sysdate)
9556 AND calendar_id= l_calendar_id;
9557
9558 -- Added for Bug 5225146
9559 CURSOR l_cur_project_rate_type (l_project_rate_type VARCHAR )IS
9560 SELECT 'Y' FROM pa_conversion_types_v
9561 WHERE conversion_type <> 'User' AND user_conversion_type = l_project_rate_type;
9562
9563 -- Added for Bug 5188246
9564 CURSOR l_cur_retention_tax_code (l_retention_tax_code VARCHAR ) IS
9565 SELECT 'Y' FROM pa_output_tax_code_setup_v
9566 WHERE tax_code = l_retention_tax_code;
9567 --needed to get default data of a project using it's ID
9568 CURSOR l_project_csr
9569 (l_pa_project_id NUMBER)
9570 IS
9571 SELECT *
9572 FROM pa_projects p
9573 WHERE p.project_id = l_pa_project_id;
9574
9575 /**************************************
9576 ** The following cursor l_get_org_csr is not used anywhere in this
9577 package. So commenting this cursor for changes made for
9578 Non-mergable to Mergable View . ***
9579 ***************************************
9580
9581 CURSOR l_get_org_csr (l_org_id NUMBER )
9582
9583 IS
9584 SELECT organization_id
9585 FROM pa_organizations_project_v
9586 WHERE organization_id = l_org_id
9587 AND active_flag = 'N';
9588
9589 ****************************************/
9590
9591 CURSOR l_get_dist_rule_csr (l_dist_rule VARCHAR2, l_project_type VARCHAR2)
9592 IS
9593 SELECT 'x'
9594 FROM pa_project_type_distributions d
9595 WHERE d.project_type = l_project_type
9596 AND d.distribution_rule = l_dist_rule;
9597
9598 CURSOR l_min_task_start_date_csr (l_project_id NUMBER) IS
9599 SELECT MIN(start_date)
9600 FROM pa_tasks
9601 WHERE project_id = l_project_id
9602 AND start_date IS NOT NULL;
9603
9604 CURSOR l_max_task_end_date_csr (l_project_id NUMBER) IS
9605 SELECT MAX(completion_date)
9606 FROM pa_tasks
9607 WHERE project_id = l_project_id
9608 AND completion_date IS NOT NULL;
9609
9610 --needed to get the project_type_class_code and service_type_code associated
9611 --with the project_type
9612
9613 CURSOR l_project_type_csr
9614 (p_pa_project_id NUMBER)
9615 IS
9616 SELECT pt.project_type_class_code
9617 , pt.service_type_code
9618 , pt.revaluate_funding_flag /*Bug 2891513 : selecting the columns revaluate_funding_flag and include_gains_losses_flag*/
9619 , pt.include_gains_losses_flag
9620 FROM pa_project_types pt
9621 , pa_projects p
9622 WHERE p.project_type = pt.project_type
9623 AND p.project_id = p_pa_project_id;
9624
9625 --needed to check whether given project number is unique
9626 CURSOR l_project_number_unique_csr( p_project_number VARCHAR2)
9627 IS
9628 SELECT 'x'
9629 FROM pa_projects_all
9630 WHERE segment1 = p_project_number;
9631
9632 --needed to check whether given project name is unique
9633 CURSOR l_project_name_unique_csr( p_project_name VARCHAR2)
9634 IS
9635 SELECT 'x'
9636 FROM pa_projects_all
9637 WHERE name = p_project_name;
9638
9639 --needed to check whether given long name is unique
9640 CURSOR l_long_name_unique_csr( p_long_name VARCHAR2)
9641 IS
9642 SELECT 'x'
9643 FROM pa_projects_all
9644 WHERE long_name = p_long_name;
9645
9646 /* Modidified the cursor l_key_member_csr to add start_date_active as logical
9647 primary key */
9648 CURSOR l_key_member_csr (l_project_id NUMBER,l_person_id NUMBER,
9649 l_role_type VARCHAR2 ,
9650 l_start_date_active DATE)
9651 IS
9652 SELECT pa_project_players.* --,rowid /*rowid id commented for bug 1939295 */
9653 FROM pa_project_players
9654 WHERE project_id = l_project_id
9655 AND person_id = l_person_id
9656 AND project_role_type = l_role_type
9657 AND start_date_active = l_start_date_active;
9658
9659 /*Customer Account Relationships -CAR changes*/
9660
9661 Cursor Cur_Customer(x_project_id NUMBER,l_customer_id in number) IS
9662 Select pa_project_customers.*
9663 From pa_project_customers
9664 where project_id=x_project_id
9665 and customer_id=l_customer_id;
9666
9667 /*CAR changes end*/
9668
9669
9670 CURSOR l_class_categories_csr (l_project_id NUMBER,
9671 l_class_category VARCHAR2 )
9672 IS
9673 SELECT class_code
9674 FROM pa_project_classes
9675 WHERE project_id = l_project_id
9676 AND class_category = l_class_category;
9677
9678 CURSOR l_get_task_csr (l_project_id NUMBER,l_pm_task_reference VARCHAR2) IS
9679 SELECT task_id FROM
9680 pa_tasks
9681 WHERE project_id = l_project_id
9682 AND pm_task_reference = l_pm_task_reference;
9683
9684 --needed to get the data of the project manager that might conflict with this new project manager
9685
9686 CURSOR l_project_man_current_csr (p_project_id NUMBER, p_start_date DATE )
9687 IS
9688 SELECT person_id,
9689 start_date_active,
9690 end_date_active
9691 FROM pa_project_players
9692 WHERE project_id = p_project_id
9693 AND project_role_type = 'PROJECT MANAGER'
9694 AND nvl(end_date_active,p_start_date) >= p_start_date;
9695
9696
9697 /* bug 4541103
9698 CURSOR l_lock_rows_csr( p_project_id NUMBER)
9699 IS
9700 SELECT 'x'
9701 FROM pa_projects p
9702 WHERE p.project_id = p_project_id
9703 FOR UPDATE OF p.project_id NOWAIT;
9704 */
9705
9706 -- anlee org role changes
9707
9708 -- 3693229 start
9709 -- for peformance fix changed the below cursor definition
9710 -- earlier select was quering on view
9711 -- now, select is directly retrieving the data from the tables
9712 -- for more detail please refer bug
9713 /*
9714 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9715 l_role_type VARCHAR2 )
9716 IS
9717 SELECT *
9718 FROM pa_project_parties_v
9719 WHERE project_id = l_project_id
9720 AND resource_source_id = l_resource_source_id
9721 AND project_role_type = l_role_type
9722 AND party_type = 'ORGANIZATION';
9723 */
9724
9725 -- 4656866 commented below cursor
9726
9727 /*
9728 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9729 l_role_type VARCHAR2 )
9730 IS
9731 SELECT
9732 ppp.project_party_id PROJECT_PARTY_ID,
9733 ppp.object_id OBJECT_ID,
9734 ppp.object_type OBJECT_TYPE,
9735 ppp.project_id PROJECT_ID,
9736 ppp.resource_id RESOURCE_ID,
9737 ppp.resource_type_id RESOURCE_TYPE_ID,
9738 ppp.resource_source_id RESOURCE_SOURCE_ID,
9739 hzo.party_name RESOURCE_SOURCE_NAME,
9740 ppp.project_role_id PROJECT_ROLE_ID,
9741 pprt.project_role_type PROJECT_ROLE_TYPE,
9742 pprt.meaning PROJECT_ROLE_MEANING,
9743 pprt.role_party_class ROLE_PARTY_CLASS,
9744 ppp.start_date_active START_DATE_ACTIVE,
9745 ppp.end_date_active END_DATE_ACTIVE,
9746 ppp.scheduled_flag SCHEDULED_FLAG,
9747 ppp.record_version_number RECORD_VERSION_NUMBER,
9748 ppa.start_date PROJECT_START_DATE,
9749 ppa.completion_date PROJECT_END_DATE,
9750 ppp.grant_id GRANT_ID,
9751 -999 ASSIGNMENT_ID,
9752 -999 ASSIGN_RECORD_VERSION_NUMBER,
9753 'N' PENDING_APPROVAL,
9754 -999 ORGANIZATION_ID,
9755 NULL ORGANIZATION_NAME,
9756 hzcp.phone_area_code || decode(hzcp.phone_number,NULL,NULL,decode(hzcp.phone_area_code,NULL,hzcp.phone_number,'-' || hzcp.phone_number) ) || decode(hzcp.phone_extension,NULL,NULL,'+' || hzcp.phone_extension) PHONE_NUMBER,
9757 hzo.email_address EMAIL_ADDRESS,
9758 NULL JOB_TITLE,
9759 'ORGANIZATION' PARTY_TYPE,
9760 PA_PROJECT_PARTIES_UTILS.ACTIVE_PARTY(PPP.START_DATE_ACTIVE,PPP.END_DATE_ACTIVE) ACTIVE,
9761 NULL USER_NAME,
9762 -999 USER_ID,
9763 ppp.resource_source_id RESOURCE_PARTY_ID
9764 FROM pa_project_parties ppp,
9765 pa_projects_all ppa,
9766 pa_project_role_types_vl pprt,
9767 hz_parties hzo,
9768 hz_contact_points hzcp
9769 WHERE ppp.resource_type_id = 112
9770 AND ppp.project_id = ppa.project_id
9771 AND ppp.project_role_id = pprt.project_role_id
9772 AND ppp.resource_source_id = hzo.party_id
9773 AND hzo.party_type = 'ORGANIZATION'
9774 AND hzcp.owner_table_name (+)= 'HZ_PARTIES'
9775 AND hzcp.owner_table_id (+)= hzo.party_id
9776 AND hzcp.contact_point_type (+)= 'PHONE'
9777 AND hzcp.phone_line_type (+)= 'GEN'
9778 AND hzcp.primary_flag (+)= 'Y'
9779 and PPA.project_id = l_project_id
9780 AND PPP.resource_source_id = l_resource_source_id
9781 AND PPRT.project_role_type = l_role_type;
9782 */
9783
9784 -- Added same cursor with changed select query , removed hz_contact_points references
9785 -- using hz_parties columns for primary phone number details
9786 -- ( like primary_phone_area_code , primary_phone_number , primary_phone_extension )
9787 -- for more refer bug description
9788
9789 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9790 l_role_type VARCHAR2 )
9791 IS
9792 SELECT
9793 ppp.project_party_id PROJECT_PARTY_ID,
9794 ppp.object_id OBJECT_ID,
9795 ppp.object_type OBJECT_TYPE,
9796 ppp.project_id PROJECT_ID,
9797 ppp.resource_id RESOURCE_ID,
9798 ppp.resource_type_id RESOURCE_TYPE_ID,
9799 ppp.resource_source_id RESOURCE_SOURCE_ID,
9800 hzo.party_name RESOURCE_SOURCE_NAME,
9801 ppp.project_role_id PROJECT_ROLE_ID,
9802 pprt.project_role_type PROJECT_ROLE_TYPE,
9803 pprt.meaning PROJECT_ROLE_MEANING,
9804 pprt.role_party_class ROLE_PARTY_CLASS,
9805 ppp.start_date_active START_DATE_ACTIVE,
9806 ppp.end_date_active END_DATE_ACTIVE,
9807 ppp.scheduled_flag SCHEDULED_FLAG,
9808 ppp.record_version_number RECORD_VERSION_NUMBER,
9809 ppa.start_date PROJECT_START_DATE,
9810 ppa.completion_date PROJECT_END_DATE,
9811 ppp.grant_id GRANT_ID,
9812 -999 ASSIGNMENT_ID,
9813 -999 ASSIGN_RECORD_VERSION_NUMBER,
9814 'N' PENDING_APPROVAL,
9815 -999 ORGANIZATION_ID,
9816 NULL ORGANIZATION_NAME,
9817 hzo.primary_phone_area_code || decode(hzo.primary_phone_number,NULL,NULL,decode(hzo.primary_phone_area_code,NULL,hzo.primary_phone_number,'-' || hzo.primary_phone_number) )
9818 || decode(hzo.primary_phone_extension,NULL,NULL,'+' || hzo.primary_phone_extension) PHONE_NUMBER,
9819 hzo.email_address EMAIL_ADDRESS,
9820 NULL JOB_TITLE,
9821 'ORGANIZATION' PARTY_TYPE,
9822 PA_PROJECT_PARTIES_UTILS.ACTIVE_PARTY(PPP.START_DATE_ACTIVE,PPP.END_DATE_ACTIVE) ACTIVE,
9823 NULL USER_NAME,
9824 -999 USER_ID,
9825 ppp.resource_source_id RESOURCE_PARTY_ID
9826 FROM pa_project_parties ppp,
9827 pa_projects_all ppa,
9828 pa_project_role_types_vl pprt,
9829 hz_parties hzo
9830 WHERE ppp.resource_type_id = 112
9831 AND ppp.project_id = ppa.project_id
9832 AND ppp.project_role_id = pprt.project_role_id
9833 AND ppp.resource_source_id = hzo.party_id
9834 AND hzo.party_type = 'ORGANIZATION'
9835 and PPA.project_id = l_project_id
9836 AND PPP.resource_source_id = l_resource_source_id
9837 AND PPRT.project_role_type = l_role_type;
9838
9839 -- 4656866 end
9840
9841 -- 3693229 end
9842
9843 --Cursor to get the current published version when structure type and project id is known
9844 CURSOR cur_struc_ver_fin(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
9845 IS
9846 SELECT c.element_version_id
9847 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
9848 ,pa_proj_elem_ver_structure d
9849 WHERE c.project_id = c_project_id
9850 AND a.structure_type_id = b.structure_type_id
9851 AND b.proj_element_id = c.proj_element_id
9852 AND a.structure_type = c_structure_type
9853 AND d.project_id = c.project_id
9854 AND d.element_version_id = c.element_version_id
9855 AND d.status_code = 'STRUCTURE_PUBLISHED'
9856 AND d.latest_eff_published_flag = 'Y';
9857
9858 --Cursor to get the working version when structure type and project id is known
9859 CURSOR cur_struc_ver_wp(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
9860 IS
9861 SELECT c.element_version_id
9862 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
9863 ,pa_proj_elem_ver_structure d
9864 WHERE c.project_id = c_project_id
9865 AND a.structure_type_id = b.structure_type_id
9866 AND b.proj_element_id = c.proj_element_id
9867 AND a.structure_type = c_structure_type
9868 AND d.project_id = c.project_id
9869 AND d.element_version_id = c.element_version_id
9870 AND d.status_code = 'STRUCTURE_WORKING';
9871
9872 -- Cursor to get the Project's System Status Code Bug 3611598
9873 CURSOR c_project_sys_status_code IS
9874 SELECT project_system_status_code
9875 FROM PA_PROJECT_STATUSES sta,PA_PROJECTS_ALL pa
9876 WHERE pa.project_id = p_project_in.pa_project_id
9877 AND sta.project_status_code = pa.project_status_code;
9878
9879 TYPE deferred_tasks_rec IS RECORD
9880 (task_index NUMBER);
9881
9882 TYPE deferred_tasks_tbl_typ IS TABLE OF deferred_tasks_rec
9883 INDEX BY BINARY_INTEGER;
9884
9885 l_dummy_calendar_id VARCHAR2(1) := 'N' ; -- Added for bug 5222506
9886 l_dummy_project_rate_type VARCHAR2(1) :='N'; -- Added For bug 5225146
9887 l_dummy_cur_retention_tax_code VARCHAR2(1) :='N';
9888 l_dummy_cur_output_tax_code VARCHAR2(1) :='N'; -- Added For Bug 5188246.
9889 l_status_code PA_PROJECT_STATUSES.project_system_status_code%TYPE; -- Bug 3611598
9890 l_deferred_tasks_index_tbl deferred_tasks_tbl_typ;
9891
9892 l_project_rec pa_projects%ROWTYPE;
9893 l_project_in_rec pa_project_pub.project_in_rec_type;
9894 l_temp_org_id NUMBER;
9895 l_temp VARCHAR2(1);
9896
9897 l_api_name CONSTANT VARCHAR2(30):= 'update_project';
9898 j NUMBER;
9899 i NUMBER;
9900
9901 l_tasks_out pa_project_pub.task_out_tbl_type;
9902 l_return_status VARCHAR2(1);
9903
9904 l_err_code NUMBER := 0;
9905 l_err_stage VARCHAR2(2000);
9906 l_err_stack VARCHAR2(2000);
9907 l_dummy VARCHAR2(1);
9908
9909 l_project_id NUMBER ;
9910 l_task_id NUMBER ;
9911 l_cursor INTEGER;
9912 --l_statement VARCHAR2(2000); --bug 2955326
9913 l_statement VARCHAR2(30000); --bug 2955326
9914 l_rows INTEGER;
9915 l_project_start_date DATE;
9916 l_project_completion_date DATE;
9917 l_max_task_date DATE;
9918 l_min_task_date DATE;
9919
9920 l_deferred_new_tasks_tbl pa_project_pub.task_in_tbl_type;
9921 l_deferred_tasks_count NUMBER := 0;
9922 l_added_task_tbl pa_project_pub.task_in_tbl_type;
9923 l_task_id_tbl pa_project_pub.task_out_tbl_type;
9924 l_count NUMBER;
9925 l_task_rec pa_project_pub.task_in_rec_type;
9926 l_project_type_class_code pa_project_types.project_type_class_code%type;
9927 l_service_type_code pa_project_types.service_type_code%type;
9928
9929 l_key_members_tbl pa_project_pub.project_role_tbl_type;
9930 l_key_members_in_rec pa_project_pub.project_role_rec_type;
9931 l_key_members_current_rec l_key_member_csr%ROWTYPE;
9932 l_key_members_rec l_key_member_csr%ROWTYPE;
9933 l_project_man_current_rec l_project_man_current_csr%ROWTYPE;
9934
9935 /*Customer account relationships */
9936
9937 Cur_Customer_rec Cur_Customer%ROWTYPE;
9938 l_bill_to_customer_id Number;
9939 l_ship_to_customer_id Number;
9940 l_bill_to_address_id NUMBER := NULL; --Initialized to NULL for Bug 3911782
9941 l_ship_to_address_id NUMBER := NULL; --Initialized to NULL for Bug 3911782
9942 l_bill_to_contact_id NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : BUg 4153629
9943 l_ship_to_contact_id NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : BUg 4153629
9944 /* Variables sadded for tracking bug */
9945 l_project_relationship_code PA_PROJECT_CUSTOMERS.PROJECT_RELATIONSHIP_CODE%TYPE;
9946 l_customer_bill_split PA_PROJECT_CUSTOMERS.CUSTOMER_BILL_SPLIT%TYPE;
9947 l_customer_id NUMBER;
9948 l_msg_index_out NUMBER;
9949 tot_contribution NUMBER;
9950 /* Variables sadded for tracking bug */
9951 /* Variables added for tracking bug 4153629*/
9952 l_bill_another_project_flag VARCHAR2(1);
9953 l_receiver_task_id NUMBER;
9954 /* Variables added for tracking bug 4153629*/
9955 /*CAR changes ends*/
9956
9957
9958 -- anlee org role changes
9959 l_org_roles_tbl pa_project_pub.project_role_tbl_type;
9960 l_org_roles_in_rec pa_project_pub.project_role_rec_type;
9961 l_org_roles_current_rec l_org_role_csr%ROWTYPE;
9962 l_org_roles_rec l_org_role_csr%ROWTYPE;
9963
9964 l_class_categories_tbl pa_project_pub.class_category_tbl_type ;
9965 l_temp_start_date DATE;
9966 l_temp_end_date DATE;
9967 l_update_yes_flag VARCHAR2(1) := 'N';
9968 l_out_pa_task_id NUMBER;
9969 l_out_pm_task_reference VARCHAR2(30);
9970 l_update_start_date_flag VARCHAR2(1);
9971 l_update_end_date_flag VARCHAR2(1);
9972 l_class_code VARCHAR2(30);
9973 l_msg_count NUMBER ;
9974 l_msg_data VARCHAR2(2000);
9975 l_function_allowed VARCHAR2(1);
9976 l_resp_id NUMBER := 0;
9977 l_user_id NUMBER := 0;
9978 l_module_name VARCHAR2(80) := 'PA_PM_UPDATE_PROJECT';
9979 l_proceed_with_update_flag VARCHAR2(1);
9980 l_array_index NUMBER := 0;
9981 l_temp_i NUMBER := 0;
9982 l_orig_index NUMBER := 0;
9983 l_text VARCHAR2(500);
9984 l_verify_ok_flag VARCHAR2(1);
9985 l_wf_enabled_flag VARCHAR2(1);
9986 l_err_msg_count NUMBER := 0;
9987 l_warnings_only_flag VARCHAR2(1);
9988 l_project_status_changed VARCHAR2(1) := 'N';
9989 l_closing_project VARCHAR2(1) := 'N';
9990 l_reopening_project VARCHAR2(1) := 'N';
9991 l_wf_status_code VARCHAR2(30) := 'IN_ROUTE';
9992 l_proj_num_numeric NUMBER;
9993 l_wf_type VARCHAR2(250);
9994 l_wf_item_type VARCHAR2(250);
9995 l_wf_process VARCHAR2(250);
9996 l_assignment_id NUMBER;
9997 l_task_id_out NUMBER := 0;
9998 l_amg_task_number VARCHAR2(50);
9999 l_org_func_security VARCHAR2(1); /* Bug#1968394 */
10000
10001 -- FP-M Bug # 3301192
10002 l_d_task_id NUMBER;
10003 l_d_task_ver_id NUMBER;
10004 l_d_struct_ver_id NUMBER;
10005 l_d_loop_count NUMBER;
10006 l_task_in_rec task_in_rec_type;
10007
10008 /*Variables added for bug 2802984*/
10009
10010 l_out_labor_sch_type VARCHAR2(1);
10011 l_out_nl_labor_sch_type VARCHAR2(1);
10012 l_rev_rate_sch_type VARCHAR2(1);
10013 l_inv_rate_sch_type VARCHAR2(1);
10014 l_std_bill_rate_schedule VARCHAR2(40);
10015
10016 /*Bug# 2891513 : Added the local variables*/
10017 l_revaluate_funding VARCHAR2(1);
10018 l_include_gains_and_losses VARCHAR2(1);
10019 /*Variables added for bug 2802984 ends*/
10020
10021 --added by rtarway FP.M Devlopment
10022 l_patask_record_version_number NUMBER;
10023 --added by rtarway FP.M Devlopment
10024 --needed to get the field values associated to a AMG message
10025
10026 CURSOR l_amg_project_csr
10027 (p_pa_project_id pa_projects.project_id%type)
10028 IS
10029 SELECT segment1
10030 FROM pa_projects p
10031 WHERE p.project_id = p_pa_project_id;
10032
10033 l_amg_segment1 VARCHAR2(25);
10034
10035 p_multiple_task_msg VARCHAR2(1) := 'T';
10036 x_return_status VARCHAR2(255);
10037 x_msg_count NUMBER;
10038 x_msg_data VARCHAR2(2000);
10039 V_COMPLETION_DATE DATE;
10040 v_null_char VARCHAR2(1):=to_char(NULL);
10041
10042 --Project Structures
10043 v_first_index NUMBER;
10044 v_last_index NUMBER;
10045 v_ref_task_id NUMBER;
10046 v_parent_task_id NUMBER;
10047 v_task_id NUMBER;
10048 l_structure_version_id NUMBER;
10049 l_structure_id NUMBER;
10050 l_task_version_id NUMBER;
10051 --Project Structures
10052
10053 -- anlee
10054 -- Added for intermedia search
10055 l_ctx_proj_name VARCHAR2(30);
10056 l_ctx_proj_number VARCHAR2(25);
10057 l_ctx_long_name VARCHAR2(240);
10058 l_ctx_desc VARCHAR2(250);
10059 l_ctx_update_flag VARCHAR2(1);
10060 -- End of changes
10061
10062 --bug 2738747
10063 l_structure_type VARCHAR2(25);
10064 --bug 2738747
10065
10066 --<Bug#2881768/>
10067 struct_ver_updatable VARCHAR(1);
10068
10069 --For Bug 2931183
10070 l_update_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
10071 l_debug_mode varchar2(1);
10072
10073 -- <EA>
10074 l_failed_row_id_list VARCHAR2(32767);
10075 l_errorcode VARCHAR2(150);
10076 -- </EA>
10077
10078 --bug 2955326
10079 l_b_segment1_flag VARCHAR2(1) := 'N';
10080 l_b_proj_name_flag VARCHAR2(1) := 'N';
10081 l_b_long_name_flag VARCHAR2(1) := 'N';
10082 l_b_pm_proj_ref_flag VARCHAR2(1) := 'N';
10083 l_b_co_org_id_flag VARCHAR2(1) := 'N';
10084 l_b_pub_sec_flag VARCHAR2(1) := 'N';
10085 l_b_dist_rule_flag VARCHAR2(1) := 'N';
10086 l_b_desc_flag VARCHAR2(1) := 'N';
10087 l_b_start_date_flag VARCHAR2(1) := 'N';
10088 l_b_comp_date_flag VARCHAR2(1) := 'N';
10089 l_b_early_sd_flag VARCHAR2(1) := 'N';
10090 l_b_early_fd_flag VARCHAR2(1) := 'N';
10091 l_b_late_sd_flag VARCHAR2(1) := 'N';
10092 l_b_late_fd_flag VARCHAR2(1) := 'N';
10093 l_b_sch_sd_flag VARCHAR2(1) := 'N';
10094 l_b_sch_fd_flag VARCHAR2(1) := 'N';
10095 l_b_attr_cat_flag VARCHAR2(1) := 'N';
10096 l_b_attr1_flag VARCHAR2(1) := 'N';
10097 l_b_attr2_flag VARCHAR2(1) := 'N';
10098 l_b_attr3_flag VARCHAR2(1) := 'N';
10099 l_b_attr4_flag VARCHAR2(1) := 'N';
10100 l_b_attr5_flag VARCHAR2(1) := 'N';
10101 l_b_attr6_flag VARCHAR2(1) := 'N';
10102 l_b_attr7_flag VARCHAR2(1) := 'N';
10103 l_b_attr8_flag VARCHAR2(1) := 'N';
10104 l_b_attr9_flag VARCHAR2(1) := 'N';
10105 l_b_attr10_flag VARCHAR2(1) := 'N';
10106 l_b_output_tx_code_flag VARCHAR2(1) := 'N';
10107 l_b_ret_tx_code_flag VARCHAR2(1) := 'N';
10108 l_b_proj_cur_code_flag VARCHAR2(1) := 'N';
10109 l_b_allow_x_chg_flag VARCHAR2(1) := 'N';
10110 l_b_proj_rt_date_flag VARCHAR2(1) := 'N';
10111 l_b_proj_rt_tp_flag VARCHAR2(1) := 'N';
10112 l_cc_proc_lb_flag VARCHAR2(1) := 'N';
10113 l_b_lb_tp_sch_id_flag VARCHAR2(1) := 'N';
10114 l_b_lb_tp_fixed_dt_flag VARCHAR2(1) := 'N';
10115 l_b_cc_proc_nl_flag VARCHAR2(1) := 'N';
10116 l_b_nl_tp_sch_id_flag VARCHAR2(1) := 'N';
10117 l_b_nl_tp_fx_dt_flag VARCHAR2(1) := 'N';
10118 l_b_role_list_id_flag VARCHAR2(1) := 'N';
10119 l_b_work_type_id_flag VARCHAR2(1) := 'N';
10120 l_b_cal_id_flag VARCHAR2(1) := 'N';
10121 l_b_loc_id_flag VARCHAR2(1) := 'N';
10122 l_b_prob_memb_id_flag VARCHAR2(1) := 'N';
10123 l_b_proj_value_flag VARCHAR2(1) := 'N';
10124 l_b_exp_apprv_dt_flag VARCHAR2(1) := 'N';
10125 l_b_cst_jb_gp_id_flag VARCHAR2(1) := 'N';
10126 l_b_bill_jb_gp_id_flag VARCHAR2(1) := 'N';
10127 l_b_emp_bill_rt_sch_id_flag VARCHAR2(1) := 'N';
10128 l_b_jb_bill_rt_sch_id_flag VARCHAR2(1) := 'N';
10129 l_b_comp_mtch_wt_flag VARCHAR2(1) := 'N';
10130 l_b_avail_mtch_wt_flag VARCHAR2(1) := 'N';
10131 l_b_jb_lvl_mt_wt_flag VARCHAR2(1) := 'N';
10132 l_b_search_min_avail_flag VARCHAR2(1) := 'N';
10133 l_b_srch_org_hier_id_flag VARCHAR2(1) := 'N';
10134 l_b_srch_st_org_id_flag VARCHAR2(1) := 'N';
10135 l_b_min_can_sc_req_for_nom VARCHAR2(1) := 'N';
10136 /* l_b_nn_lb_std_bl_rt_sch_id_f VARCHAR2(1) := 'N'; Commented for bug #4630836 */
10137 l_b_proj_bil_xch_rt_flag VARCHAR2(1) := 'N';
10138 l_b_pjfnc_bil_xch_rt_flag VARCHAR2(1) := 'N';
10139 l_b_fnding_xch_rt_flag VARCHAR2(1) := 'N';
10140 l_b_enable_auto_srch_flag VARCHAR2(1) := 'N';
10141 l_b_srch_cntry_code_flag VARCHAR2(1) := 'N';
10142 l_b_invproc_crncy_tp_flag VARCHAR2(1) := 'N';
10143 l_b_revproc_crncy_cd_flag VARCHAR2(1) := 'N';
10144 l_b_prj_bil_rt_dt_code_flag VARCHAR2(1) := 'N';
10145 l_b_proj_bil_rt_tp_flag VARCHAR2(1) := 'N';
10146 l_b_prjfnc_crncy_code_flag VARCHAR2(1) := 'N';
10147 l_b_prjfnc_bil_rt_dt_cd_f VARCHAR2(1) := 'N';
10148 l_b_prjfnc_bil_rt_tp_flag VARCHAR2(1) := 'N';
10149 l_b_fndng_rt_dt_cd_flag VARCHAR2(1) := 'N';
10150 l_b_fnding_rt_type_flag VARCHAR2(1) := 'N';
10151 l_b_bsln_fnding_flag VARCHAR2(1) := 'N';
10152 l_b_prjfnc_cst_rt_tp_flag VARCHAR2(1) := 'N';
10153 l_b_inv_bill_txn_cur_flag VARCHAR2(1) := 'N';
10154 l_b_multi_crncy_bil_flag VARCHAR2(1) := 'N';
10155 l_b_prj_bil_rt_dt_flag VARCHAR2(1) := 'N';
10156 l_b_prjfnc_bil_rt_dt_flag VARCHAR2(1) := 'N';
10157 l_b_fnding_rt_dt_flag VARCHAR2(1) := 'N';
10158 l_b_prjfnc_cst_rt_dt_flag VARCHAR2(1) := 'N';
10159 l_b_asgn_prec_tsk_flag VARCHAR2(1) := 'N';
10160 l_b_splt_cst_fm_wp_flag VARCHAR2(1) := 'N';
10161 l_b_splt_cst_fm_bill_flag VARCHAR2(1) := 'N';
10162 l_b_adv_act_set_id_flag VARCHAR2(1) := 'N';
10163 l_b_st_adv_act_set_flag VARCHAR2(1) := 'N';
10164 l_b_pri_code_flag VARCHAR2(1) := 'N';
10165 l_b_retn_bil_inv_fmt_id_flg VARCHAR2(1) := 'N';
10166 l_b_retn_acnt_flag VARCHAR2(1) := 'N';
10167 l_b_reval_fndng_flag VARCHAR2(1) := 'N';
10168 l_b_sec_lvl_flag VARCHAR2(1) := 'N';
10169 l_b_lbr_disc_rsn_code_flg VARCHAR2(1) := 'N';
10170 l_b_nn_lbr_disc_rsn_cd_flg VARCHAR2(1) := 'N';
10171 l_b_inc_gn_los_flag VARCHAR2(1) := 'N';
10172
10173 l_b_lb_sch_tp_fg VARCHAR2(1) := 'N';
10174 l_b_nn_lb_sch_tp_fg VARCHAR2(1) := 'N';
10175 l_b_emp_bill_rt_sch_id_fg2 VARCHAR2(1) := 'N';
10176 l_b_jb_bill_rt_sch_id_fg2 VARCHAR2(1) := 'N';
10177 l_b_lb_sch_fx_dt_fg VARCHAR2(1) := 'N';
10178 l_b_lb_sch_dsct_fg VARCHAR2(1) := 'N';
10179 l_b_lb_disc_rn_cd_fg2 VARCHAR2(1) := 'N';
10180 l_b_rv_ind_rt_sch_id_fg VARCHAR2(1) := 'N';
10181 l_b_inv_ind_rt_sch_id_fg VARCHAR2(1) := 'N';
10182 l_b_ind_sch_fx_dt_fg VARCHAR2(1) := 'N';
10183 l_b_inv_ind_sch_fx_dt_fg VARCHAR2(1) := 'N';
10184 l_b_nn_lb_bill_rt_org_id_fg VARCHAR2(1) := 'N';
10185 l_b_n_lb_st_bl_rt_sc_id_fg2 VARCHAR2(1) := 'N';
10186 l_b_nn_lb_sch_fx_dt_fg VARCHAR2(1) := 'N';
10187 l_b_nn_lb_sch_dst_fg VARCHAR2(1) := 'N';
10188 l_b_n_lb_disc_rsn_cd_fg2 VARCHAR2(1) := 'N';
10189 l_b_as_alloc_mth_fg VARCHAR2(1) := 'N';
10190 l_b_cp_evt_proc_fg VARCHAR2(1) := 'N';
10191 l_b_cint_rt_sch_id_fg VARCHAR2(1) := 'N';
10192 l_b_cint_elg_fg VARCHAR2(1) := 'N';
10193 l_b_cint_stp_dt_fg VARCHAR2(1) := 'N';
10194 --end bug 2955326
10195 l_update_task_structure VARCHAR2(1) := 'N'; -- Added for Bug 3548473 : 3627124
10196 l_ref_task_id NUMBER := null; -- aditi added for Bug 3801314 : 3627124
10197 l_update_wbs_flag VARCHAR2(1) := 'N'; -- Added for Bug #3931805
10198 -- Bug 3075609. In update project context it is possible
10199 -- that we can create a new structure version when already some
10200 -- working versions exist. This is true in split workplan context.
10201 -- This info will be passed to the process_task_structure_bulk api
10202 -- through this variable.
10203 l_create_task_versions_only VARCHAR2(1) := 'N';
10204 -- Bug 6248841
10205 l_b_cc_tax_task_id VARCHAR2(1) := 'N';
10206 l_cc_tax_task_numb PA_TASKS.TASK_NUMBER%TYPE;
10207
10208 /* Bug 3077676 */
10209 l_cust_acc_rel_code pa_implementations.cust_acc_rel_code%TYPE;
10210 CURSOR get_cust_acc_rel_code IS
10211 Select cust_acc_rel_code
10212 From pa_implementations;
10213
10214 l_deliverable_id NUMBER; -- 3435905
10215 -- 3773373 removed below local variable usage
10216 -- i_dlvr NUMBER := 0; -- 3435905
10217 i_actn NUMBER := 0; -- 3435905
10218 l_dlvr_dml_action VARCHAR2(30) := null ; -- 3435905
10219 l_unique_flag VARCHAR2(1) := null ; -- 3435905
10220 l_is_wp_seperate_from_fn VARCHAR2(1) := 'N'; -- Added for Bug#3451073
10221
10222 ---------------------- FP_M changes begin (venkat) 1 ---------------------------
10223
10224 ----Comment ---- l_sys_program_flag VARCHAR2(1) := 'N'; --------------------
10225 l_b_sys_program_flag_fg VARCHAR2(1) := 'N'; -- Bug # 5072032.
10226 l_b_allow_multi_prog_rollup_fg VARCHAR2(1) := 'N'; -- Bug # 5072032.
10227
10228 l_enable_top_task_cust_flag VARCHAR2(1) := 'N';
10229 l_enable_top_task_inv_mth_flag VARCHAR2(1) := 'N';
10230 l_projfunc_attr_for_ar_flag VARCHAR2(1) :='N';
10231
10232 --------------------- FP_M changes end (venkat) ---------------------------------
10233
10234 /* Start of code for bug #2111806 */
10235 -- Start of Bug fix 4878696
10236 -- Commented this cursor for Performance Bug 4878696
10237 -- CURSOR c_prj(c_project_id IN NUMBER ) IS
10238 -- select project_system_status_code
10239 -- ,project_type_class_code
10240 -- from pa_projects_v
10241 -- where project_id = c_project_id;
10242
10243 -- Added the following cursor instead of the commented one as above for Performance Bug 4878696
10244 CURSOR c_prj(c_project_id IN NUMBER ) IS
10245 select PROJECT_SYSTEM_STATUS_CODE , PROJECT_TYPE_CLASS_CODE
10246 from pa_projects_all ppa,pa_project_statuses pps,pa_project_types ppt
10247 where ppa.project_id = c_project_id
10248 and ppa.PROJECT_STATUS_CODE = pps.PROJECT_STATUS_CODE
10249 and ppa.PROJECT_TYPE = ppt.PROJECT_TYPE
10250 and pps.STATUS_TYPE = 'PROJECT'
10251 and ppt.ORG_ID= ppa.ORG_ID ;
10252
10253 -- End of Bug fix 4878696
10254
10255 CURSOR c_prj_count(c_project_id IN NUMBER ) IS
10256 select count(*)
10257 from pa_project_players
10258 where project_id = c_project_id
10259 and project_role_type='PROJECT MANAGER';
10260
10261 l_proj_status pa_projects_all.project_status_code%TYPE;
10262 l_proj_type_class pa_project_types_all.project_type_class_code%TYPE;
10263 l_prj_mgr_count NUMBER;
10264 /* End of code for bug #2111806. */
10265
10266 l_old_cust_top_task_flag varchar2(1); -- 4188765 Added local variable
10267 l_old_date_eff_funds_flag varchar2(1); -- sunkalya federal Bug#5511353
10268
10269 -- Start of Addition for bug 4191009.
10270 CURSOR l_code_percentage_csr (l_project_id NUMBER,
10271 l_class_category VARCHAR2,
10272 l_class_code VARCHAR2 )
10273 IS
10274 SELECT code_percentage
10275 FROM pa_project_classes
10276 WHERE project_id = l_project_id
10277 AND class_category = l_class_category
10278 AND class_code = l_class_code;
10279
10280 TYPE class_code_tbl_type IS TABLE OF pa_project_classes.class_code%type
10281 INDEX BY BINARY_INTEGER;
10282
10283 class_code_tbl class_code_tbl_type;
10284 l_code_percentage pa_project_classes.code_percentage%type;
10285
10286 -- END of Addition for bug 4191009.
10287
10288 -- 5348726 :: Start of Addition for bug#5294891.
10289 CURSOR c_get_class_code_id(l_class_category VARCHAR2,
10290 l_class_code VARCHAR2 )
10291 IS
10292 SELECT class_code_id
10293 FROM PA_CLASS_CODES
10294 WHERE class_category = l_class_category
10295 AND class_code = l_class_code;
10296
10297 l_old_class_code_id pa_class_codes.class_code_id%type;
10298 l_new_class_code_id pa_class_codes.class_code_id%type;
10299 -- END of Addition for bug# 5294891.
10300
10301 -- for opportunity value changes
10302 -- adarora --Changes BEGIN for Bug 4473105
10303 l_expected_approval_date DATE;
10304 l_projfunc_currency_code VARCHAR2(15);
10305 l_project_currency_code VARCHAR2(15);
10306 l_opportunity_value NUMBER;
10307 l_opp_value_currency_code VARCHAR2(15);
10308
10309
10310 CURSOR l_get_details_for_opp_csr (c_project_id IN NUMBER) IS
10311 SELECT expected_approval_date, projfunc_currency_code, project_currency_code
10312 FROM pa_projects
10313 WHERE project_id = c_project_id;
10314
10315 CURSOR l_get_details_for_opp_csr2 (c_project_id IN NUMBER) IS
10316 SELECT opportunity_value, opp_value_currency_code
10317 FROM pa_project_opp_attrs
10318 WHERE project_id = c_project_id;
10319
10320 --Changes END for Bug 4473105
10321
10322 -- Begin Bug # 4582750.
10323
10324 l_x_return_status VARCHAR2(255);
10325 l_x_msg_count NUMBER;
10326 l_x_msg_data VARCHAR2(2000);
10327 l_prev_locked_status VARCHAR2(1) := null;
10328
10329 -- End Bug # 4582750.
10330 l_valid_proj_flag BOOLEAN := false; --tracking
10331 l_error_msg_code VARCHAR2(200);
10332
10333 -- Bug # 4329284.
10334
10335 cursor cur_proj_name (c_project_id NUMBER) is
10336 select ppa.name
10337 from pa_projects_all ppa
10338 where ppa.project_id = c_project_id;
10339
10340 cursor cur_prog_name (c_project_id NUMBER) is
10341 select ppa.name
10342 from pa_projects_all ppa, pa_object_relationships por
10343 where ppa.project_id = por.object_id_to2
10344 and por.object_id_to2 = c_project_id
10345 and por.relationship_type in ('LW','LF')
10346 union all
10347 select ppa.name
10348 from pa_projects_all ppa, pa_object_relationships por
10349 where ppa.project_id = por.object_id_from2
10350 and por.object_id_from2 = c_project_id
10351 and por.relationship_type in ('LW','LF');
10352
10353 l_proj_name VARCHAR2(30);
10354 l_prog_name VARCHAR2(30);
10355
10356 -- Bug # 4329284.
10357
10358 --Bug#5131471. Added the following cursors and the local variables --Sunkalya
10359
10360 CURSOR cur_customer_status(l_customer_id number)
10361 IS
10362 SELECT Nvl(cust_acct.status,'A')
10363 FROM hz_parties party,
10364 hz_cust_accounts cust_acct
10365 WHERE
10366 cust_acct.party_id = party.party_id AND
10367 cust_acct.cust_account_id = l_customer_id;
10368
10369 l_cust_status VARCHAR2(1) := null;
10370 --End of code change for Bug#5131471.
10371
10372 -- 5191417 Added below cursor to validate priority_code
10373
10374 l_valid_prio_code VARCHAR2(1) := 'N';
10375
10376 CURSOR priority_code_csr(p_priority_code IN VARCHAR2) IS
10377 Select
10378 'Y'
10379 from
10380 pa_lookups
10381 where
10382 lookup_type = 'PA_PROJECT_PRIORITY_CODE'
10383 and lookup_code = p_priority_code ;
10384
10385 -- 5191417 end
10386
10387 -- Bug#5191699. Added the cursor and the local variable below for validating
10388 -- project security level.This can be either 'Enterprise' or 'Secured'.
10389
10390 l_check_sec_level VARCHAR2(1) := 'N';
10391
10392 CURSOR cur_check_sec_level(p_proj_sec_level IN VARCHAR2 ) IS
10393 SELECT 'Y' FROM
10394 dual
10395 WHERE EXISTS
10396 (SELECT NULL FROM pa_lookups
10397 WHERE
10398 lookup_type = 'PA_PROJECT_ACCESS_LEVEL' AND
10399 lookup_code = p_proj_sec_level
10400 );
10401 -- End of code changes for Bug#5191699 in declare section
10402
10403
10404 --Bug#5191521. Added the cursor and the local variable below for validating
10405 -- probability member id.
10406
10407 l_check_prob_id VARCHAR2(1) := 'N';
10408
10409 CURSOR cur_validate_prob_member( p_project_id IN NUMBER ,p_probability_member_id IN NUMBER )
10410 IS
10411 SELECT 'Y' FROM dual
10412 WHERE EXISTS
10413 (
10414 SELECT
10415 NULL
10416 FROM
10417 pa_probability_members ppm,
10418 pa_projects pp,
10419 pa_project_types ppt
10420 WHERE
10421 pp.project_type = ppt.project_type AND
10422 pp.org_id = ppt.org_id AND
10423 ppt.probability_list_id = ppm.probability_list_id AND
10424 pp.project_id = p_project_id AND
10425 ppm.probability_member_id = p_probability_member_id AND
10426 trunc(sysdate) BETWEEN ppm.start_date_active AND nvl(ppm.end_date_active,trunc(sysdate))
10427 );
10428 --End of code changes for Bug#5191521 in declare section
10429
10430 --Bug#5222248. The following cursor and local vairable are added for validating the work type id passed
10431
10432 CURSOR cur_check_work_type(p_project_id IN NUMBER ,p_work_type_id IN NUMBER ) IS
10433 SELECT
10434 'Y'
10435 FROM
10436 pa_work_types_vl pwt,
10437 pa_projects pp,
10438 pa_project_types ppt
10439 WHERE
10440 trunc(sysdate) BETWEEN pwt.start_date_active AND nvl(pwt.end_date_active,trunc(SYSDATE)) AND
10441 pp.project_type = ppt.project_type AND
10442 pp.org_id = ppt.org_id AND
10443 pwt.billable_capitalizable_flag = Decode(ppt.project_type_class_code,'INDIRECT', 'N', pwt.billable_capitalizable_flag) AND
10444 pp.project_id = p_project_id AND
10445 pwt.work_type_id = p_work_type_id;
10446
10447 l_check_work_type VARCHAR2(1) := 'N';
10448
10449 --Bug#5222248.
10450
10451 --Bug#5188931. Added the following cursors and local variables for validating project currency code
10452
10453 CURSOR cur_check_cur_code(p_currency_code IN VARCHAR2 )
10454 IS
10455 SELECT
10456 'Y'
10457 FROM
10458 fnd_currencies_vl
10459 WHERE
10460 NVL(enabled_flag, 'Y') = 'Y' AND
10461 SYSDATE BETWEEN NVL(start_date_active,SYSDATE) AND
10462 NVL(end_date_active, SYSDATE) AND
10463 currency_code = p_currency_code;
10464
10465 CURSOR cur_check_prvdr_flag(p_project_id IN NUMBER )
10466 IS
10467 SELECT
10468 ppt.cc_prvdr_flag
10469 FROM
10470 pa_projects pp,
10471 pa_project_types ppt
10472 WHERE
10473 pp.project_type = ppt.project_type AND
10474 pp.org_id = ppt.org_id AND --this condition is not mandatory
10475 pp.project_id = p_project_id;
10476
10477 l_check_cur_code_flag VARCHAR2(1) := 'N';
10478 l_allow_update_flag VARCHAR2(1) := 'Y';
10479 l_prvdr_flag VARCHAR2(1);
10480
10481 --Bug#5188931.
10482
10483 --This cursor is introduced for Bug#5196996 to validate the role type passed thru key member record
10484
10485 CURSOR l_project_role_types_csr (p_role_type IN VARCHAR2,p_project_id IN number)
10486 IS
10487 select 'x'
10488 from pa_project_role_types_v roles,
10489 pa_role_controls controls,
10490 pa_projects_all proj
10491 where proj.project_id=p_project_id
10492 and proj.ROLE_LIST_ID is null
10493 and roles.project_role_id=controls.project_role_id
10494 and roles.PROJECT_ROLE_TYPE=p_role_type
10495 and controls.role_control_code='ALLOW_AS_PROJ_MEMBER'
10496 and trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate)
10497 union all
10498 select 'x'
10499 from pa_project_role_types_v roles,
10500 pa_role_controls controls,
10501 pa_projects_all proj,
10502 pa_role_list_members prlm
10503 where proj.project_id=p_project_id
10504 and proj.ROLE_LIST_ID =prlm.role_list_id
10505 and prlm.project_role_id = roles.project_role_id
10506 and roles.project_role_id=controls.project_role_id
10507 and roles.PROJECT_ROLE_TYPE=p_role_type
10508 and controls.role_control_code='ALLOW_AS_PROJ_MEMBER'
10509 and trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate);
10510
10511 --Bug#5196996
10512
10513 l_cc_process_labor_flag varchar2(1) ; /* Added for Bug 5395048 */
10514 l_cc_process_nl_flag varchar2(1) ; /* Added for Bug 5395048 */
10515
10516 --sunkalya federal bug#5511353
10517
10518 CURSOR cur_enable_funds_flag(p_project_id IN VARCHAR2)
10519 IS
10520 SELECT 'Y'
10521 FROM
10522 pa_projects_all p,
10523 pa_project_types_all pt
10524 WHERE
10525 p.project_id = p_project_id AND
10526 pt.project_type_class_code = 'CONTRACT' AND
10527 p.project_type = pt.project_type AND
10528 pt.CC_PRVDR_FLAG = 'N' AND
10529 pt.org_id = p.org_id;
10530
10531 l_enable_funds_flag VARCHAR2(1);
10532 l_date_eff_funds_flag VARCHAR2(1) := NULL;
10533
10534 l_ar_rec_notify_flag VARCHAR2(1) := NULL; -- 7508661 : EnC
10535 l_auto_release_pwp_inv VARCHAR2(1) := NULL; -- 7508661 : EnC
10536
10537 CURSOR cur_rev_inv(p_project_id IN VARCHAR2)
10538 IS
10539 SELECT 'Y'
10540 FROM dual
10541 WHERE EXISTS
10542 (SELECT NULL
10543 FROM
10544 pa_draft_revenues r
10545 WHERE
10546 r.project_id = p_project_id
10547 )
10548 OR EXISTS
10549 (SELECT NULL
10550 FROM
10551 pa_draft_invoices i
10552 WHERE
10553 i.project_id = p_project_id
10554 );
10555 l_chk_rev_inv_flag VARCHAR2(1) := NULL;
10556
10557
10558 CURSOR chk_task_level_funding(p_project_id IN VARCHAR2)
10559 IS
10560 SELECT 'Y'
10561 FROM dual
10562 WHERE exists
10563 ( select 1
10564 from pa_summary_project_fundings
10565 where project_id = p_project_id
10566 and task_id is not null
10567 );
10568
10569 l_chk_task_level_funding VARCHAR2(1) := NULL;
10570
10571 CURSOR count_cust(p_project_id IN VARCHAR2)
10572 IS
10573 SELECT count(*)
10574 FROM pa_project_customers
10575 WHERE project_id = p_project_id;
10576
10577 l_count_cust VARCHAR2(1) := NULL;
10578
10579 --sunkalya federal bug#5511353
10580
10581
10582 --bug#5554475
10583
10584 CURSOR cur_pa_impl
10585 IS
10586 SELECT default_rate_type
10587 FROM pa_implementations;
10588
10589 l_ALLOW_INV_USER_RATE_FLAG VARCHAR2(1) ;
10590 l_INV_RATE_DATE DATE;
10591 l_INV_RATE_TYPE VARCHAR2 (256) ;
10592 l_USER_INV_RATE_TYPE VARCHAR2 (256) ;
10593 l_INV_CURRENCY_CODE VARCHAR (15) ;
10594 l_INV_EXCHANGE_RATE NUMBER ;
10595 l_mcb_flag varchar2(1);
10596 l_cc_prvdr_flag varchar2(1);
10597
10598 --bug#5554475
10599
10600 l_default_top_task_cust_flag varchar2(1); --bug 5554578
10601
10602 BEGIN
10603
10604 SAVEPOINT Update_project_pub;
10605
10606 IF FND_API.TO_BOOLEAN( p_init_msg_list )
10607 THEN
10608 FND_MSG_PUB.Initialize;
10609 END IF;
10610
10611 --4218977, rtarway
10612 --we need to set this parameter only when called in AMG/MSP and not in publish flow
10613 --dbms_output.put_line('p_project_in.project_relationship_code'||p_project_in.project_relationship_code);
10614 if (p_pm_product_code <> 'WORKPLAN') then
10615 G_OP_VALIDATE_FLAG := p_op_validate_flag ;
10616 G_TASK_STR_UPDATE_MODE := p_update_mode ; -- DHI ER , rtarway BUG 4413568
10617 end if;
10618
10619 -- Standard call to check for call compatibility.
10620 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
10621 p_api_version_number ,
10622 l_api_name ,
10623 G_PKG_NAME )
10624 THEN
10625 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10626 END IF;
10627
10628 p_return_status := FND_API.G_RET_STS_SUCCESS;
10629
10630 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
10631
10632 -- <Bug#2881768>
10633 -- If structure_version_id has been provided
10634 -- check to see if this version is updatable
10635 -- if not, then throw error and return
10636
10637 l_structure_version_id := p_structure_in.structure_version_id;
10638
10639 --3703440, rtarway
10640 G_structure_in_rec.pa_project_id := p_structure_in.pa_project_id;
10641 G_structure_in_rec.structure_type := p_structure_in.structure_type;
10642 G_structure_in_rec.structure_version_name := p_structure_in.structure_version_name;
10643 G_structure_in_rec.structure_version_id := p_structure_in.structure_version_id;
10644 G_structure_in_rec.DESCRIPTION := p_structure_in.DESCRIPTION;
10645
10646
10647 --bug 4619824
10648 IF l_debug_mode = 'Y' THEN
10649 pa_debug.g_err_stage := 'Checking if the project is a program project';
10650 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10651 END IF;
10652
10653 IF p_pm_product_code IS NOT NULL
10654 AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10655 AND p_pm_product_code <> 'WORKPLAN' --bug 4621311
10656 AND PA_RELATIONSHIP_UTILS.Check_subproject_link_exists( p_project_in.pa_project_id ) = 'Y'
10657 AND p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added the condition for Bug 7248969
10658 AND p_tasks_in.count > 0 -- Added the condition for Bug 7248969
10659 THEN
10660 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10661 p_msg_name => 'PA_PS_CANT_UPDATE_PROG_PRJ');
10662 RAISE FND_API.G_EXC_ERROR;
10663 END IF;
10664 --end bug 4619824
10665
10666 IF l_debug_mode = 'Y' THEN
10667 pa_debug.g_err_stage := 'Calling PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable' || p_structure_in.structure_version_id;
10668 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10669 END IF;
10670
10671 IF ( l_structure_version_id IS NOT NULL AND l_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
10672 THEN
10673
10674 --bug 4538849
10675
10676 -- Begin Bug # 4582750.
10677
10678 l_prev_locked_status := PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,l_structure_version_id);
10679
10680 if ( l_prev_locked_status = 'O' ) then
10681
10682 -- End Bug # 4582750.
10683
10684 --if yes, raise error.
10685 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10686 p_msg_name => 'PA_STR_LOCKED_BY_OTHER');
10687 RAISE FND_API.G_EXC_ERROR;
10688
10689 -- Begin Bug # 4582750.
10690
10691 elsif ( l_prev_locked_status = 'N' ) then
10692
10693 if (p_update_mode = 'PA_UPD_WBS_ATTR') and (p_pm_product_code <> 'WORKPLAN') then -- Bug # 4758888.
10694
10695 IF l_debug_mode = 'Y' THEN
10696 pa_debug.g_err_stage := 'Before calling pa_project_structure_utils.lock_unlock_wp_str_autonomous for LOCKING'||
10697 'p_project_in.pa_project_id='||p_project_in.pa_project_id||
10698 '-l_structure_version_id='||l_structure_version_id;
10699 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10700 END IF;
10701
10702 pa_project_structure_utils.lock_unlock_wp_str_autonomous
10703 (p_project_id => p_project_in.pa_project_id
10704 ,p_structure_version_id => p_structure_in.structure_version_id
10705 ,p_lock_status_code => 'LOCKED'
10706 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
10707 ,x_return_status => l_x_return_status
10708 ,x_msg_count => l_x_msg_count
10709 ,x_msg_data => l_x_msg_data);
10710
10711 IF l_debug_mode = 'Y' THEN
10712 pa_debug.g_err_stage := 'After calling pa_project_structure_utils.lock_unlock_wp_str_autonomous for LOCKING'||
10713 'l_x_return_status='||l_x_return_status;
10714 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10715 END IF;
10716
10717 IF l_x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
10718 THEN
10719 p_project_out.return_status := l_x_return_status;
10720 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10721
10722 ELSIF l_x_return_status = FND_API.G_RET_STS_ERROR
10723 THEN
10724 p_project_out.return_status := l_x_return_status;
10725 RAISE FND_API.G_EXC_ERROR;
10726 END IF;
10727
10728 end if;
10729
10730 -- End Bug # 4582750.
10731
10732 end if;
10733 --end bug 4538849
10734
10735 struct_ver_updatable := PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable(l_structure_version_id);
10736
10737 IF l_debug_mode = 'Y' THEN
10738 pa_debug.g_err_stage := 'struct_ver_updatable='||struct_ver_updatable;
10739 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10740 END IF;
10741
10742 IF (struct_ver_updatable IS NULL OR struct_ver_updatable = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10743 OR struct_ver_updatable = 'N')
10744 THEN
10745 -- add error message to stack and throw exception
10746 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10747 THEN
10748 pa_interface_utils_pub.map_new_amg_msg
10749 ( p_old_message_code => 'PA_STRUCT_VER_NO_UPDATE'
10750 ,p_msg_attribute => 'CHANGE'
10751 ,p_resize_flag => 'N'
10752 ,p_msg_context => 'GENERAL'
10753 ,p_attribute1 => ''
10754 ,p_attribute2 => ''
10755 ,p_attribute3 => ''
10756 ,p_attribute4 => ''
10757 ,p_attribute5 => '');
10758 END IF;
10759 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
10760 RAISE FND_API.G_EXC_ERROR;
10761 /* bug 4538849
10762 --bug 4413568, DHI ER, rtarway
10763 ELSIF (struct_ver_updatable = 'Y') THEN
10764 -- structure version is locked by another user check must be done in both update modes. bug 4519809
10765 --IF (p_update_mode = 'PA_UPD_TASK_ATTR') THEN --bug 4534919
10766 --Check if str version is locked by another user
10767 if ( PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,l_structure_version_id) = 'O' ) then
10768 --if yes, raise error.
10769 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10770 p_msg_name => 'PA_STR_LOCKED_BY_OTHER');
10771 RAISE FND_API.G_EXC_ERROR;
10772 end if;
10773 --END IF;
10774 */
10775 END IF;
10776 END IF;
10777 l_structure_version_id := null;
10778 -- </Bug#2881768>
10779
10780 --Organization Forecasting.
10781 --Do not allow updating an org project
10782 IF PA_FP_ORG_FCST_UTILS.check_org_project(
10783 p_project_id => p_project_in.pa_project_id
10784 ,x_return_status => l_return_status
10785 ,x_err_code => l_err_code
10786 ) = 'Y'
10787 THEN
10788 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10789 THEN
10790 pa_interface_utils_pub.map_new_amg_msg
10791 ( p_old_message_code => 'PA_CANT_UPD_ORG_PRJ'
10792 ,p_msg_attribute => 'CHANGE'
10793 ,p_resize_flag => 'N'
10794 ,p_msg_context => 'GENERAL'
10795 ,p_attribute1 => ''
10796 ,p_attribute2 => ''
10797 ,p_attribute3 => ''
10798 ,p_attribute4 => ''
10799 ,p_attribute5 => '');
10800 END IF;
10801
10802 -- PA_UTILS.ADD_MESSAGE('PA', 'PA_ORG_FC_CANT_UPD_ORG_PRJ');
10803 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
10804 RAISE FND_API.G_EXC_ERROR;
10805 END IF;
10806 --Organization Forecasting.
10807 --Do not allow updating an org project
10808
10809 -- 22-DEC-97, jwhite:
10810 -- Initialize New OUT-parameter to indicate workflow status
10811
10812 -- Set Worflow Started Status -------------------------------------------------
10813
10814 p_workflow_started := 'N';
10815 -- ------------------------------------------------------------------------------------
10816
10817
10818 -- pm_product_code is mandatory
10819
10820 --bug 2841158
10821 -- IF ( p_pm_product_code IS NULL
10822 -- OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10823 IF ( p_pm_product_code IS NOT NULL
10824 AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
10825 --bug 284115
10826 AND p_pm_product_code <> 'WORKPLAN' --bug 2665656
10827 THEN
10828
10829 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10830 THEN
10831 pa_interface_utils_pub.map_new_amg_msg
10832 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
10833 ,p_msg_attribute => 'CHANGE'
10834 ,p_resize_flag => 'N'
10835 ,p_msg_context => 'GENERAL'
10836 ,p_attribute1 => ''
10837 ,p_attribute2 => ''
10838 ,p_attribute3 => ''
10839 ,p_attribute4 => ''
10840 ,p_attribute5 => '');
10841 END IF;
10842 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
10843 RAISE FND_API.G_EXC_ERROR;
10844 END IF;
10845
10846 --bug 2841158
10847 IF p_pm_product_code <> 'WORKPLAN'
10848 AND p_pm_product_code IS NOT NULL
10849 AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10850 THEN
10851 --bug 2841158
10852
10853 /*added for bug no :2413400*/
10854 OPEN p_product_code_csr (p_pm_product_code);
10855 FETCH p_product_code_csr INTO l_pm_product_code;
10856 CLOSE p_product_code_csr;
10857
10858 IF l_pm_product_code <> 'X'
10859 AND p_pm_product_code <> 'WORKPLAN' --bug 2665656
10860 THEN
10861
10862 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
10863 THEN
10864 pa_interface_utils_pub.map_new_amg_msg
10865 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
10866 ,p_msg_attribute => 'CHANGE'
10867 ,p_resize_flag => 'N'
10868 ,p_msg_context => 'GENERAL'
10869 ,p_attribute1 => ''
10870 ,p_attribute2 => ''
10871 ,p_attribute3 => ''
10872 ,p_attribute4 => ''
10873 ,p_attribute5 => '');
10874 END IF;
10875 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
10876 p_return_status := FND_API.G_RET_STS_ERROR;
10877 RAISE FND_API.G_EXC_ERROR;
10878 END IF;
10879 END IF; --bug 2841158
10880
10881 l_resp_id := FND_GLOBAL.Resp_id;
10882 l_user_id := FND_GLOBAL.User_id;
10883 --l_module_name := p_pm_product_code||'.'||'PA_PM_UPDATE_PROJECT';
10884 l_module_name := 'PA_PM_UPDATE_PROJECT';
10885
10886 --bug 2665656
10887 IF NVL( p_pm_product_code, 'WORKPLAN' ) = 'WORKPLAN'
10888 THEN
10889 l_pm_product_code := null;
10890 END IF;
10891 --bug 2665656
10892
10893
10894 --Moved this code here before calling security check to get project id in l_project_i d
10895 --bug 2471668
10896 -- convert pm_project_reference to id
10897
10898 IF l_debug_mode = 'Y' THEN
10899 pa_debug.g_err_stage := 'Performing ref to id conversion...';
10900 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10901 END IF;
10902
10903
10904 Pa_project_pvt.Convert_pm_projref_to_id (
10905 p_pm_project_reference => p_project_in.pm_project_reference,
10906 p_pa_project_id => p_project_in.pa_project_id,
10907 p_out_project_id => l_project_id,
10908 p_return_status => l_return_status );
10909
10910
10911 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
10912 THEN
10913 p_project_out.return_status := l_return_status;
10914 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10915
10916 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
10917 THEN
10918 p_project_out.return_status := l_return_status;
10919 RAISE FND_API.G_EXC_ERROR;
10920 END IF;
10921 --bug 2471668
10922
10923
10924 IF l_debug_mode = 'Y' THEN
10925 pa_debug.g_err_stage := 'Performing security check...';
10926 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10927 END IF;
10928
10929 -- As part of enforcing project security, which would determine
10930 -- whether the user has the necessary privileges to update the project
10931 -- need to call the pa_security package
10932
10933 pa_security.initialize (X_user_id => l_user_id,
10934 X_calling_module => l_module_name);
10935
10936 -- Actions performed using the APIs would be subject to
10937 -- function security. If the responsibility does not allow
10938 -- such functions to be executed, the API should not proceed further
10939 -- since the user does not have access to such functions
10940
10941 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id; --bug 2471668 ( in the project context )
10942
10943 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
10944 (p_api_version_number => p_api_version_number,
10945 p_responsibility_id => l_resp_id,
10946 p_function_name => 'PA_PM_UPDATE_PROJECT',
10947 p_msg_count => l_msg_count,
10948 p_msg_data => l_msg_data,
10949 p_return_status => l_return_status,
10950 p_function_allowed => l_function_allowed );
10951
10952
10953 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
10954 THEN
10955 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10956
10957 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
10958 THEN
10959 RAISE FND_API.G_EXC_ERROR;
10960 END IF;
10961 IF l_function_allowed = 'N' THEN
10962 pa_interface_utils_pub.map_new_amg_msg
10963 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
10964 ,p_msg_attribute => 'CHANGE'
10965 ,p_resize_flag => 'Y'
10966 ,p_msg_context => 'GENERAL'
10967 ,p_attribute1 => ''
10968 ,p_attribute2 => ''
10969 ,p_attribute3 => ''
10970 ,p_attribute4 => ''
10971 ,p_attribute5 => '');
10972 p_return_status := FND_API.G_RET_STS_ERROR;
10973 RAISE FND_API.G_EXC_ERROR;
10974 END IF;
10975
10976
10977 /* Moving this code before doing security check for bug 2471668
10978 -- convert pm_project_reference to id
10979
10980 Pa_project_pvt.Convert_pm_projref_to_id (
10981 p_pm_project_reference => p_project_in.pm_project_reference,
10982 p_pa_project_id => p_project_in.pa_project_id,
10983 p_out_project_id => l_project_id,
10984 p_return_status => l_return_status );
10985
10986
10987 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
10988 THEN
10989 p_project_out.return_status := l_return_status;
10990 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10991
10992 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
10993 THEN
10994 p_project_out.return_status := l_return_status;
10995 RAISE FND_API.G_EXC_ERROR;
10996 END IF;
10997 */ --bug 2471668
10998
10999 -- Get segment1 for AMG messages
11000
11001 OPEN l_amg_project_csr( l_project_id );
11002 FETCH l_amg_project_csr INTO l_amg_segment1;
11003 CLOSE l_amg_project_csr;
11004
11005
11006 -- Now verify whether project security allows the user to update
11007 -- project
11008
11009 IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
11010
11011 -- The user does not have query privileges on this project
11012 -- Hence, cannot update the project.Raise error
11013 pa_interface_utils_pub.map_new_amg_msg
11014 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
11015 ,p_msg_attribute => 'CHANGE'
11016 ,p_resize_flag => 'Y'
11017 ,p_msg_context => 'GENERAL'
11018 ,p_attribute1 => ''
11019 ,p_attribute2 => ''
11020 ,p_attribute3 => ''
11021 ,p_attribute4 => ''
11022 ,p_attribute5 => '');
11023 p_return_status := FND_API.G_RET_STS_ERROR;
11024 RAISE FND_API.G_EXC_ERROR;
11025 ELSE
11026 -- If the user has query privileges, then check whether
11027 -- update privileges are also available
11028 IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
11029
11030 -- The user does not have update privileges on this project
11031 -- Hence , raise error
11032 pa_interface_utils_pub.map_new_amg_msg
11033 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
11034 ,p_msg_attribute => 'CHANGE'
11035 ,p_resize_flag => 'Y'
11036 ,p_msg_context => 'GENERAL'
11037 ,p_attribute1 => ''
11038 ,p_attribute2 => ''
11039 ,p_attribute3 => ''
11040 ,p_attribute4 => ''
11041 ,p_attribute5 => '');
11042 p_return_status := FND_API.G_RET_STS_ERROR;
11043 RAISE FND_API.G_EXC_ERROR;
11044 END IF;
11045 END IF;
11046
11047 -- Lock this project and it's tasks for update
11048 -- bug 4541103 OPEN l_lock_rows_csr( l_project_id );
11049
11050 -- Need to get the current project data
11051
11052 OPEN l_project_csr (l_project_id);
11053 FETCH l_project_csr INTO l_project_rec;
11054 CLOSE l_project_csr;
11055
11056 -- 4188765 , setting customer top task flag db value in local variable
11057 l_old_cust_top_task_flag := l_project_rec.enable_top_task_customer_flag;
11058 l_old_date_eff_funds_flag := l_project_rec.date_eff_funds_consumption; --sunkalya federal Bug#5511353
11059
11060 -- anlee
11061 -- Added for intermedia search
11062 l_ctx_proj_name := l_project_rec.name;
11063 l_ctx_proj_number := l_project_rec.segment1;
11064 l_ctx_long_name := l_project_rec.long_name;
11065 l_ctx_desc := l_project_rec.description;
11066 l_ctx_update_flag := 'N';
11067 -- End of changes
11068
11069 --bug 2738747 --update project
11070 G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
11071 G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
11072 G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
11073 --bug 2738747
11074 G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
11075
11076 IF l_debug_mode = 'Y' THEN
11077 pa_debug.g_err_stage := 'G_Published_version_exists='||G_Published_version_exists;
11078 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11079 pa_debug.g_err_stage := 'G_IS_WP_SEPARATE_FROM_FN='||G_IS_WP_SEPARATE_FROM_FN;
11080 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11081 pa_debug.g_err_stage := 'G_IS_WP_VERSIONING_ENABLED='||G_IS_WP_VERSIONING_ENABLED;
11082 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11083 pa_debug.g_err_stage := 'G_WP_STR_EXISTS='||G_WP_STR_EXISTS;
11084 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11085 END IF;
11086
11087
11088 --bug 2876703 --update_project
11089 IF G_IS_WP_SEPARATE_FROM_FN = 'N' AND
11090 p_structure_in.structure_type = 'WORKPLAN'
11091 THEN
11092 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11093 THEN
11094 pa_interface_utils_pub.map_new_amg_msg
11095 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
11096 ,p_msg_attribute => 'CHANGE'
11097 ,p_resize_flag => 'N'
11098 ,p_msg_context => 'GENERAL'
11099 ,p_attribute1 => ''
11100 ,p_attribute2 => ''
11101 ,p_attribute3 => ''
11102 ,p_attribute4 => ''
11103 ,p_attribute5 => '');
11104 END IF;
11105 RAISE FND_API.G_EXC_ERROR;
11106 END IF;
11107 --bug 2876703
11108
11109 -- "Change Project Currency" changes By avaithia for Bug 3912783
11110 -- << Start >>
11111 -- Functionality :-
11112 -- If Project Currency is changed ,then we should check whether this Project has any subprojects
11113 -- (or) whether this Project is a subproject of some other project
11114 -- If any of the above two is true ,then the Project Currency Change should not be allowed .
11115
11116 -- Note : In the following "IF" statement ,it may look like "the case where project_currency_code is passed as NULL
11117 -- is not taken care of" . But existing code already takes care of this scenario (l_b_proj_cur_code value logic)
11118
11119 -- This flag is set as 'Y' Only if the passed value is not null
11120 -- And dbms bind will happen for this project currency code ,Only if the l_b_proj_cur_code value is 'Y'
11121
11122 IF ( p_project_in.project_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11123 AND ( p_project_in.project_currency_code IS NOT NULL)
11124 THEN
11125 IF nvl(p_project_in.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11126 <> nvl(l_project_rec.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11127 THEN
11128 IF PA_RELATIONSHIP_UTILS.Check_link_exists(l_project_id) = 'Y'
11129 THEN
11130 -- Throw Error Message
11131 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11132 THEN
11133
11134 -- Bug # 4329284.
11135
11136 /*
11137 pa_interface_utils_pub.map_new_amg_msg
11138 (p_old_message_code => 'PA_PS_PRJ_CURR_LNK_ERR'
11139 ,p_msg_attribute => 'CHANGE'
11140 ,p_resize_flag => 'N'
11141 ,p_msg_context => 'GENERAL'
11142 ,p_attribute1 => ''
11143 ,p_attribute2 => ''
11144 ,p_attribute3 => ''
11145 ,p_attribute4 => ''
11146 ,p_attribute5 => '');
11147 */
11148
11149 open cur_proj_name(l_project_id);
11150 fetch cur_proj_name into l_proj_name;
11151 close cur_proj_name;
11152
11153 open cur_prog_name(l_project_id);
11154 fetch cur_prog_name into l_prog_name;
11155 close cur_prog_name;
11156
11157 PA_UTILS.ADD_MESSAGE('PA','PA_PS_PRJ_CURR_LNK_ERR','PROJ',l_proj_name,'PROG',l_prog_name); -- Bug # 4329284.
11158
11159 -- Bug # 4329284.
11160
11161 END IF ;
11162 p_return_status := FND_API.G_RET_STS_ERROR;
11163 RAISE FND_API.G_EXC_ERROR;
11164 END IF ;
11165 END IF ;
11166 END IF ;
11167 -- << End >>
11168 -- "Change Project Currency" changes By avaithia
11169
11170 --bug 2738747
11171 ----dbms_output.put_line('PA_PROJECT_PUB.G_Published_version_exists'||PA_PROJECT_PUB.G_Published_version_exists);
11172 ----dbms_output.put_line('PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN'||PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN);
11173 ----dbms_output.put_line('PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED'||PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED);
11174 ----dbms_output.put_line('p_structure_in.structure_type'||p_structure_in.structure_type);
11175 ----dbms_output.put_line('p_pm_product_code'||p_pm_product_code);
11176 IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
11177 AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
11178 AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
11179 AND p_structure_in.structure_type = 'FINANCIAL'
11180 AND p_pm_product_code <> 'WORKPLAN' --This parameter should be checked bcoz for publishing we want it to syn up with pa_tasks . For publishing p_pm_product_code will have 'WORKPLAN'
11181 THEN
11182 --Change the flow to WORKPLAN
11183 l_structure_type := 'WORKPLAN';
11184
11185
11186 ELSE
11187 l_structure_type := p_structure_in.structure_type;
11188 END IF;
11189 --bug 2738747
11190
11191 IF l_debug_mode = 'Y' THEN
11192 pa_debug.g_err_stage := 'l_structure_type='||l_structure_type;
11193 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11194 END IF;
11195
11196
11197 -- Need to fetch information from pa_project_types
11198
11199 /* Bug# 2891513- Added the variables for l_revaluate_funding and l_include_gains_and_losses */
11200
11201 OPEN l_project_type_csr(l_project_id);
11202 FETCH l_project_type_csr INTO l_project_type_class_code,
11203 l_service_type_code, l_revaluate_funding,l_include_gains_and_losses;
11204 CLOSE l_project_type_csr;
11205
11206 IF l_debug_mode = 'Y' THEN
11207 pa_debug.g_err_stage := 'Preparing to update project level data...';
11208 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11209 END IF;
11210
11211
11212
11213 l_update_yes_flag := 'N';
11214 l_statement := 'UPDATE PA_PROJECTS SET ';
11215
11216 --PROJECT NUMBER
11217 -- Check for implementation defined Project number generation mode
11218 -- If project number generation is automatic then ignore the input
11219 -- project number ,since it cannot be modified.Hence,the following
11220 -- checks will be done only if the mode was 'MANUAL'
11221
11222 IF G_PROJECT_NUMBER_GEN_MODE = 'MANUAL' THEN
11223 IF p_project_in.pa_project_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11224 AND p_project_in.pa_project_number IS NOT NULL
11225 THEN
11226 IF p_project_in.pa_project_number <> l_project_rec.segment1
11227 THEN
11228 pa_project_utils.change_proj_num_ok
11229 (l_project_id,
11230 l_err_code,
11231 l_err_stage,
11232 l_err_stack );
11233 IF l_err_code > 0
11234 THEN
11235
11236 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11237 THEN
11238 IF NOT pa_project_pvt.check_valid_message (l_err_stage)
11239 THEN
11240 pa_interface_utils_pub.map_new_amg_msg
11241 ( p_old_message_code => 'PA_CANT_CHANGE_PROJ_NUM'
11242 ,p_msg_attribute => 'CHANGE'
11243 ,p_resize_flag => 'N'
11244 ,p_msg_context => 'PROJ'
11245 ,p_attribute1 => l_project_rec.segment1
11246 ,p_attribute2 => ''
11247 ,p_attribute3 => ''
11248 ,p_attribute4 => ''
11249 ,p_attribute5 => '');
11250 ELSE
11251 pa_interface_utils_pub.map_new_amg_msg
11252 ( p_old_message_code => l_err_stage
11253 ,p_msg_attribute => 'CHANGE'
11254 ,p_resize_flag => 'N'
11255 ,p_msg_context => 'PROJ'
11256 ,p_attribute1 => l_project_rec.segment1
11257 ,p_attribute2 => ''
11258 ,p_attribute3 => ''
11259 ,p_attribute4 => ''
11260 ,p_attribute5 => '');
11261 END IF;
11262 END IF;
11263
11264 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11265
11266 RAISE FND_API.G_EXC_ERROR;
11267
11268 ELSIF l_err_code < 0
11269 THEN
11270
11271 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11272
11273 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11274 END IF;
11275 -- BEGIN MSP interface patch
11276
11277 -- Check for project number being numeric if project number type is
11278 -- defined as numeric
11279
11280 BEGIN
11281 IF G_PROJECT_NUMBER_TYPE = 'NUMERIC' THEN
11282 l_proj_num_numeric :=
11283 TO_NUMBER(p_project_in.pa_project_number);
11284 END IF;
11285 EXCEPTION
11286 WHEN VALUE_ERROR THEN
11287 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11288 THEN
11289 pa_interface_utils_pub.map_new_amg_msg
11290 ( p_old_message_code => 'PA_PR_NUMERIC_NUM_REQ'
11291 ,p_msg_attribute => 'CHANGE'
11292 ,p_resize_flag => 'N'
11293 ,p_msg_context => 'PROJ'
11294 ,p_attribute1 => l_project_rec.segment1
11295 ,p_attribute2 => ''
11296 ,p_attribute3 => ''
11297 ,p_attribute4 => ''
11298 ,p_attribute5 => '');
11299 END IF;
11300 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11301 p_return_status := FND_API.G_RET_STS_ERROR;
11302 RAISE FND_API.G_EXC_ERROR;
11303 END ;
11304
11305 -- END MSP interface patch -- Ensure that l_proj_num_numeric is defined
11306
11307 OPEN l_project_number_unique_csr( p_project_in.pa_project_number );
11308 FETCH l_project_number_unique_csr INTO l_DUMMY;
11309
11310 IF l_project_number_unique_csr%FOUND
11311 THEN
11312 CLOSE l_project_number_unique_csr;
11313
11314 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11315 THEN
11316 pa_interface_utils_pub.map_new_amg_msg
11317 ( p_old_message_code => 'PA_PR_EPR_PROJ_NUM_NOT_UNIQUE'
11318 ,p_msg_attribute => 'CHANGE'
11319 ,p_resize_flag => 'Y'
11320 ,p_msg_context => 'MODP'
11321 ,p_attribute1 => l_project_rec.segment1
11322 ,p_attribute2 => ''
11323 ,p_attribute3 => ''
11324 ,p_attribute4 => ''
11325 ,p_attribute5 => '');
11326 END IF;
11327
11328 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11329
11330 RAISE FND_API.G_EXC_ERROR;
11331 END IF;
11332
11333 CLOSE l_project_number_unique_csr;
11334
11335 --bug 2955326
11336 /*
11337 l_statement := l_statement ||
11338 ' SEGMENT1 = '||''''||
11339 RTRIM(p_project_in.pa_project_number)||''''||',';
11340 */
11341 l_statement := l_statement ||
11342 ' SEGMENT1 = :segment1,';
11343 l_b_segment1_flag := 'Y';
11344 --end bug 2955326
11345 l_update_yes_flag := 'Y';
11346
11347 -- anlee
11348 -- added for intermedia search
11349 l_ctx_proj_number := RTRIM(p_project_in.pa_project_number);
11350 l_ctx_update_flag := 'Y';
11351 -- End of changes
11352
11353 END IF;
11354 END IF;
11355 END IF;
11356
11357 --PROJECT NAME
11358
11359 IF p_project_in.project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11360 AND p_project_in.project_name IS NOT NULL
11361 THEN
11362 IF p_project_in.project_name <> l_project_rec.name
11363 THEN
11364
11365 OPEN l_project_name_unique_csr( p_project_in.project_name );
11366 FETCH l_project_name_unique_csr INTO l_dummy;
11367
11368 IF l_project_name_unique_csr%FOUND
11369 THEN
11370 CLOSE l_project_name_unique_csr;
11371
11372 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11373 THEN
11374 pa_interface_utils_pub.map_new_amg_msg
11375 ( p_old_message_code => 'PA_PR_EPR_PROJ_NAME_NOT_UNIQUE'
11376 ,p_msg_attribute => 'CHANGE'
11377 ,p_resize_flag => 'Y'
11378 ,p_msg_context => 'MODP'
11379 ,p_attribute1 => l_project_rec.segment1
11380 ,p_attribute2 => ''
11381 ,p_attribute3 => ''
11382 ,p_attribute4 => ''
11383 ,p_attribute5 => '');
11384 END IF;
11385
11386 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11387
11388 RAISE FND_API.G_EXC_ERROR;
11389 END IF;
11390
11391 CLOSE l_project_name_unique_csr;
11392
11393 --bug 2955326
11394 /*
11395 l_statement := l_statement ||
11396 ' NAME = '||''''||
11397 RTRIM(p_project_in.project_name)||''''||',' ;
11398 */
11399 l_statement := l_statement ||
11400 ' NAME = :project_name, ';
11401 l_b_proj_name_flag := 'Y';
11402 --end bug 2955326
11403 l_update_yes_flag := 'Y';
11404
11405 -- anlee
11406 -- Added for intermedia search
11407 l_ctx_proj_name := RTRIM(p_project_in.project_name);
11408 l_ctx_update_flag := 'Y';
11409 -- End of changes
11410 END IF;
11411 END IF;
11412
11413 --LONG NAME
11414
11415 IF p_project_in.long_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11416 AND p_project_in.long_name IS NOT NULL
11417 THEN
11418 IF p_project_in.long_name <> l_project_rec.long_name
11419 THEN
11420
11421 OPEN l_long_name_unique_csr( p_project_in.long_name );
11422 FETCH l_long_name_unique_csr INTO l_dummy;
11423
11424 IF l_long_name_unique_csr%FOUND
11425 THEN
11426 CLOSE l_long_name_unique_csr;
11427
11428 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11429 THEN
11430 pa_interface_utils_pub.map_new_amg_msg
11431 ( p_old_message_code => 'PA_PR_EPR_LONG_NAME_NOT_UNIQUE'
11432 ,p_msg_attribute => 'CHANGE'
11433 ,p_resize_flag => 'Y'
11434 ,p_msg_context => 'MODP'
11435 ,p_attribute1 => l_project_rec.segment1
11436 ,p_attribute2 => ''
11437 ,p_attribute3 => ''
11438 ,p_attribute4 => ''
11439 ,p_attribute5 => '');
11440 END IF;
11441
11442 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11443
11444 RAISE FND_API.G_EXC_ERROR;
11445 END IF;
11446
11447 CLOSE l_long_name_unique_csr;
11448
11449 --bug 2955326
11450 /*
11451 l_statement := l_statement ||
11452 ' LONG_NAME = '||''''||
11453 RTRIM(p_project_in.long_name)||''''||',' ;
11454 */
11455 l_statement := l_statement ||
11456 ' LONG_NAME = :long_name,';
11457 l_b_long_name_flag := 'Y';
11458 --end bug 2955326
11459 l_update_yes_flag := 'Y';
11460
11461 -- anlee
11462 -- Added for intermedia search
11463 l_ctx_long_name := RTRIM(p_project_in.long_name);
11464 l_ctx_update_flag := 'Y';
11465 -- End of changes
11466 END IF;
11467 END IF;
11468
11469
11470 IF p_project_in.pm_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11471 AND nvl(p_project_in.pm_project_reference,
11472 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11473 <> nvl(l_project_rec.pm_project_reference,
11474 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
11475 AND p_project_in.pm_project_reference IS NOT NULL THEN
11476 --bug 2955326
11477 /*
11478 l_statement := l_statement ||
11479 ' PM_PROJECT_REFERENCE = '||''''||
11480 RTRIM(p_project_in.pm_project_reference)||''''||',';
11481 */
11482 l_statement := l_statement ||
11483 ' PM_PROJECT_REFERENCE = :pm_project_reference ,';
11484 l_b_pm_proj_ref_flag := 'Y';
11485 --end bug 2955326
11486 l_update_yes_flag := 'Y';
11487
11488 END IF;
11489
11490 --CARRYING_OUT_ORGANIZATION_ID
11491 IF p_project_in.carrying_out_organization_id
11492 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11493 AND p_project_in.carrying_out_organization_id IS NOT NULL THEN
11494 IF p_project_in.carrying_out_organization_id <>
11495 l_project_rec.carrying_out_organization_id THEN
11496 -- check whether this is a valid organization
11497 IF pa_project_pvt.check_valid_org
11498 (p_project_in.carrying_out_organization_id) = 'N' THEN
11499 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11500 THEN
11501 pa_interface_utils_pub.map_new_amg_msg
11502 ( p_old_message_code => 'PA_INVALID_ORG'
11503 ,p_msg_attribute => 'CHANGE'
11504 ,p_resize_flag => 'N'
11505 ,p_msg_context => 'PROJ'
11506 ,p_attribute1 => l_project_rec.segment1
11507 ,p_attribute2 => ''
11508 ,p_attribute3 => ''
11509 ,p_attribute4 => ''
11510 ,p_attribute5 => '');
11511 END IF;
11512 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11513 RAISE FND_API.G_EXC_ERROR;
11514 END IF;
11515
11516 -- Code Added for the bug#1968394
11517 -- Test the function security for Org changes
11518 --
11519 IF (fnd_function.test('PA_PAXPREPR_UPDATE_ORG') = TRUE) THEN
11520 l_org_func_security := 'Y';
11521 ELSE
11522 l_org_func_security := 'N';
11523 END IF;
11524
11525
11526 pa_project_utils2.validate_attribute_change(
11527 X_Context => 'ORGANIZATION_VALIDATION'
11528 ,X_insert_update_mode => NULL
11529 ,X_calling_module => 'UPDATE_PROJECT'
11530 ,X_project_id => l_project_id
11531 ,X_task_id => NULL
11532 ,X_old_value =>
11533 To_char(l_project_rec.carrying_out_organization_id)
11534 ,X_new_value =>
11535 To_char(p_project_in.carrying_out_organization_id)
11536 ,X_project_type => l_project_rec.project_type
11537 ,X_project_start_date => l_project_rec.start_date
11538 ,X_project_end_date => l_project_rec.completion_date
11539 ,X_public_sector_flag => l_project_rec.public_sector_flag
11540 ,X_task_manager_person_id => NULL
11541 ,X_Service_type => NULL
11542 ,X_task_start_date => NULL
11543 ,X_task_end_date => NULL
11544 ,X_entered_by_user_id => FND_GLOBAL.USER_ID
11545 ,X_attribute_category => l_project_rec.attribute_category
11546 ,X_attribute1 => l_project_rec.attribute1
11547 ,X_attribute2 => l_project_rec.attribute2
11548 ,X_attribute3 => l_project_rec.attribute3
11549 ,X_attribute4 => l_project_rec.attribute4
11550 ,X_attribute5 => l_project_rec.attribute5
11551 ,X_attribute6 => l_project_rec.attribute6
11552 ,X_attribute7 => l_project_rec.attribute7
11553 ,X_attribute8 => l_project_rec.attribute8
11554 ,X_attribute9 => l_project_rec.attribute9
11555 ,X_attribute10 => l_project_rec.attribute10
11556 ,X_pm_product_code => l_project_rec.pm_product_code
11557 ,X_pm_project_reference => l_project_rec.pm_project_reference
11558 ,X_pm_task_reference => NULL
11559 -- ,X_functional_security_flag => NULL /*bug#1968394 */
11560 ,X_functional_security_flag => l_org_func_security /*bug#1968394 */
11561 ,x_warnings_only_flag => l_warnings_only_flag --bug3134205
11562 ,X_err_code => l_err_code
11563 ,X_err_stage => l_err_stage
11564 ,X_err_stack => l_err_stack );
11565
11566 IF l_err_code > 0 THEN
11567 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
11568 IF NOT pa_project_pvt.check_valid_message (l_err_stage) THEN
11569 pa_interface_utils_pub.map_new_amg_msg
11570 ( p_old_message_code => 'PA_PR_CANT_CHG_PROJ_TYPE'
11571 ,p_msg_attribute => 'CHANGE'
11572 ,p_resize_flag => 'N'
11573 ,p_msg_context => 'PROJ'
11574 ,p_attribute1 => l_project_rec.segment1
11575 ,p_attribute2 => ''
11576 ,p_attribute3 => ''
11577 ,p_attribute4 => ''
11578 ,p_attribute5 => '');
11579 ELSE
11580 pa_interface_utils_pub.map_new_amg_msg
11581 ( p_old_message_code => l_err_stage
11582 ,p_msg_attribute => 'CHANGE'
11583 ,p_resize_flag => 'N'
11584 ,p_msg_context => 'PROJ'
11585 ,p_attribute1 => l_project_rec.segment1
11586 ,p_attribute2 => ''
11587 ,p_attribute3 => ''
11588 ,p_attribute4 => ''
11589 ,p_attribute5 => '');
11590 END IF;
11591 END IF;
11592 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11593 RAISE FND_API.G_EXC_ERROR;
11594 ELSIF l_err_code < 0 THEN
11595 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11596 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11597 END IF;
11598
11599 --bug 2955326
11600 /*
11601 l_statement := l_statement || ' CARRYING_OUT_ORGANIZATION_ID = ' ||
11602 TO_CHAR(p_project_in.carrying_out_organization_id)||',';
11603 */
11604 l_statement := l_statement || ' CARRYING_OUT_ORGANIZATION_ID = :carrying_out_org_id ,';
11605 l_b_co_org_id_flag := 'Y';
11606 --end bug 2955326
11607 l_update_yes_flag := 'Y';
11608
11609 END IF; -- IF p_project_in.carrying_out_organization_id <>
11610 -- PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11611 END IF; -- IF p_project_in.carrying_out_organization_id <>
11612 -- l_project_rec.carrying_out_organization_id
11613
11614 --PUBLIC_SECTOR_FLAG
11615
11616 IF p_project_in.public_sector_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11617 AND p_project_in.public_sector_flag IS NOT NULL --NULL will be ignored
11618 THEN
11619 IF p_project_in.public_sector_flag <> l_project_rec.public_sector_flag
11620 THEN
11621
11622 IF p_project_in.public_sector_flag NOT IN ('Y','N')
11623 THEN
11624 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11625 THEN
11626 pa_interface_utils_pub.map_new_amg_msg
11627 ( p_old_message_code => 'PA_PUBLIC_SECTOR_INVALID'
11628 ,p_msg_attribute => 'CHANGE'
11629 ,p_resize_flag => 'N'
11630 ,p_msg_context => 'PROJ'
11631 ,p_attribute1 => l_project_rec.segment1
11632 ,p_attribute2 => ''
11633 ,p_attribute3 => ''
11634 ,p_attribute4 => ''
11635 ,p_attribute5 => '');
11636 END IF;
11637
11638 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11639 RAISE FND_API.G_EXC_ERROR;
11640 END IF;
11641
11642 --bug 2955326
11643 /*
11644 l_statement := l_statement ||
11645 ' PUBLIC_SECTOR_FLAG = '||''''||
11646 p_project_in.public_sector_flag||''''||',';
11647
11648 */
11649 l_statement := l_statement ||
11650 ' PUBLIC_SECTOR_FLAG = :public_sector_flag ,';
11651 l_b_pub_sec_flag := 'Y';
11652 --end bug 2955326
11653 l_update_yes_flag := 'Y';
11654 END IF;
11655 END IF;
11656
11657 --DISTRIBUTION_RULE
11658
11659 IF p_project_in.distribution_rule <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11660 OR p_project_in.distribution_rule IS NULL
11661 THEN
11662
11663 IF p_project_in.distribution_rule IS NULL
11664 AND l_project_type_class_code = 'CONTRACT'
11665 THEN
11666
11667 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11668 THEN
11669 pa_interface_utils_pub.map_new_amg_msg
11670 ( p_old_message_code => 'PA_CONTRACT_DIST_RULE_NULL'
11671 ,p_msg_attribute => 'CHANGE'
11672 ,p_resize_flag => 'N'
11673 ,p_msg_context => 'PROJ'
11674 ,p_attribute1 => l_project_rec.segment1
11675 ,p_attribute2 => ''
11676 ,p_attribute3 => ''
11677 ,p_attribute4 => ''
11678 ,p_attribute5 => '');
11679 END IF;
11680
11681 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11682 RAISE FND_API.G_EXC_ERROR;
11683 ELSE
11684
11685 IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11686 <> nvl(l_project_rec.distribution_rule, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11687
11688 THEN
11689
11690 -- Verify whether the dist rule is a valid one
11691 IF pa_project_pvt.check_valid_dist_rule
11692 (l_project_rec.project_type,
11693 p_project_in.distribution_rule,
11694 p_project_in.enable_top_task_inv_mth_flag ) = 'N' --Bug 3279981
11695 THEN
11696 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11697 THEN
11698 pa_interface_utils_pub.map_new_amg_msg
11699 ( p_old_message_code => 'PA_INVALID_DIST_RULE'
11700 ,p_msg_attribute => 'CHANGE'
11701 ,p_resize_flag => 'N'
11702 ,p_msg_context => 'PROJ'
11703 ,p_attribute1 => l_project_rec.segment1
11704 ,p_attribute2 => ''
11705 ,p_attribute3 => ''
11706 ,p_attribute4 => ''
11707 ,p_attribute5 => '');
11708 END IF;
11709
11710 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11711 RAISE FND_API.G_EXC_ERROR;
11712 END IF;
11713
11714 pa_project_utils.check_dist_rule_chg_ok ( l_project_id,
11715 l_project_rec.distribution_rule,
11716 p_project_in.distribution_rule,
11717 l_err_code,
11718 l_err_stage,
11719 l_err_stack );
11720
11721 IF l_err_code > 0
11722 THEN
11723
11724 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11725 THEN
11726 IF NOT pa_project_pvt.check_valid_message (l_err_stage)
11727 THEN
11728 pa_interface_utils_pub.map_new_amg_msg
11729 ( p_old_message_code => 'PA_CANT_CHANGE_DIST_RULE'
11730 ,p_msg_attribute => 'CHANGE'
11731 ,p_resize_flag => 'N'
11732 ,p_msg_context => 'PROJ'
11733 ,p_attribute1 => l_project_rec.segment1
11734 ,p_attribute2 => ''
11735 ,p_attribute3 => ''
11736 ,p_attribute4 => ''
11737 ,p_attribute5 => '');
11738 ELSE
11739 pa_interface_utils_pub.map_new_amg_msg
11740 ( p_old_message_code => l_err_stage
11741 ,p_msg_attribute => 'CHANGE'
11742 ,p_resize_flag => 'N'
11743 ,p_msg_context => 'PROJ'
11744 ,p_attribute1 => l_project_rec.segment1
11745 ,p_attribute2 => ''
11746 ,p_attribute3 => ''
11747 ,p_attribute4 => ''
11748 ,p_attribute5 => '');
11749 END IF;
11750 END IF;
11751
11752 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11753 RAISE FND_API.G_EXC_ERROR;
11754
11755 ELSIF l_err_code < 0
11756 THEN
11757
11758 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11759 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11760 END IF;
11761
11762 --bug 2955326
11763 /*
11764 l_statement := l_statement ||
11765 ' DISTRIBUTION_RULE = '||''''||
11766 p_project_in.distribution_rule||''''||',';
11767 */
11768 l_statement := l_statement ||
11769 ' DISTRIBUTION_RULE = :dist_rule ,';
11770 --Bug 3279981 Review
11771 l_statement := l_statement ||' REVENUE_ACCRUAL_METHOD = :rev_acc_mth ,';
11772 l_statement := l_statement ||' INVOICE_METHOD = :inv_mth ,';
11773
11774 l_b_dist_rule_flag := 'Y';
11775 --end bug 2955326
11776 l_update_yes_flag := 'Y';
11777 END IF;
11778 END IF;
11779 END IF;
11780
11781 --DESCRIPTION
11782
11783 IF p_project_in.description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11784 OR p_project_in.description IS NULL
11785 THEN
11786 IF nvl(p_project_in.description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11787 <> nvl(l_project_rec.description, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11788 THEN
11789 --bug 2955326
11790 /*
11791 l_statement := l_statement ||
11792 ' DESCRIPTION = '||''''||
11793 RTRIM(p_project_in.description)||''''||',';
11794 */
11795 l_statement := l_statement ||
11796 ' DESCRIPTION = :descrp ,';
11797 l_b_desc_flag := 'Y';
11798 --end bug 2955326
11799 l_update_yes_flag := 'Y';
11800
11801 -- anlee
11802 -- Added for intermedia search
11803 l_ctx_desc := RTRIM(p_project_in.description);
11804 l_ctx_update_flag := 'Y';
11805 -- End of changes
11806 END IF;
11807 END IF;
11808
11809 --PROJECT_STATUS_CODE
11810
11811 IF p_project_in.project_status_code <>
11812 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11813 AND p_project_in.project_status_code IS NOT NULL --NULL will be ignored
11814 THEN
11815 IF p_project_in.project_status_code <>
11816 l_project_rec.project_status_code THEN
11817 IF pa_project_pvt.check_valid_project_status
11818 (p_project_status => p_project_in.project_status_code ) = 'N'
11819 THEN
11820 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
11821 pa_interface_utils_pub.map_new_amg_msg
11822 ( p_old_message_code => 'PA_PROJECT_STATUS_INVALID'
11823 ,p_msg_attribute => 'CHANGE'
11824 ,p_resize_flag => 'N'
11825 ,p_msg_context => 'PROJ'
11826 ,p_attribute1 => l_project_rec.segment1
11827 ,p_attribute2 => ''
11828 ,p_attribute3 => ''
11829 ,p_attribute4 => ''
11830 ,p_attribute5 => '');
11831 END IF;
11832 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11833 RAISE FND_API.G_EXC_ERROR;
11834 END IF;
11835
11836 -- special case for update to and from 'CLOSED'
11837 IF Pa_project_stus_utils.is_project_status_closed
11838 (p_project_in.project_status_code) = 'Y' THEN
11839 l_closing_project := 'Y';
11840 l_project_status_changed := 'Y';
11841 ELSIF Pa_project_stus_utils.is_project_status_closed
11842 (l_project_rec.project_status_code) = 'Y' THEN
11843 l_reopening_project := 'Y';
11844 l_project_status_changed := 'Y';
11845 ELSE
11846 l_project_status_changed := 'Y';
11847 END IF;
11848 END IF;
11849 END IF;
11850
11851 --PROJECT_START_DATE and PROJECT_COMPLETION_DATE
11852
11853 l_project_start_date := p_project_in.start_date;
11854 l_project_completion_date := p_project_in.completion_date;
11855
11856 -- Bug 7520570: Do not update project dates when the flow is from MSP for the workplan structure
11857 IF p_pm_product_code = 'MSPROJECT' AND p_structure_in.structure_type = 'WORKPLAN' THEN
11858 l_project_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
11859 l_project_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
11860 END IF;
11861
11862 -- Bug 503976 Project Completion is set to default g_miss_date ... Starts
11863
11864 IF l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
11865 THEN l_project_in_rec.completion_date := NULL;
11866 END IF;
11867
11868 -- Bug 503976 Project Completion is set to default g_miss_date ... Ends
11869
11870 pa_project_pvt.check_start_end_date
11871 (p_old_start_date => l_project_rec.start_date
11872 ,p_new_start_date => l_project_start_date
11873 ,p_old_end_date => l_project_rec.completion_date
11874 ,p_new_end_date => l_project_completion_date
11875 ,p_update_start_date_flag => l_update_start_date_flag
11876 ,p_update_end_date_flag => l_update_end_date_flag
11877 ,p_return_status => l_return_status );
11878
11879 /*--Bug 6511907 PJR Date Validation Enhancement ----- Start--*/
11880 /*-- Validating Project Start and Completion Date against
11881 Resource Request/Assignments Min Start and Max End dates --*/
11882
11883 Declare
11884 l_validate VARCHAR2(10);
11885 l_start_date_status VARCHAR2(10);
11886 l_end_date_status VARCHAR2(10);
11887 Begin
11888 If l_project_start_date is not null or l_project_completion_date is not null then
11889
11890 PA_PROJECT_DATES_UTILS.Validate_Project_Dates
11891 (l_project_id, l_project_start_date, l_project_completion_date,
11892 l_validate, l_start_date_status, l_end_date_status);
11893
11894 If l_validate = 'Y' and l_start_date_status = 'I' Then
11895
11896 pa_utils.add_message
11897 ( p_app_short_name => 'PA'
11898 ,p_msg_name => 'PA_PROJ_DATE_START_ERROR'
11899 ,p_token1 => ''
11900 ,p_value1 => ''
11901 ,p_token2 => ''
11902 ,p_value2 => ''
11903 ,p_token3 => ''
11904 ,p_value3 => ''
11905 );
11906
11907 RAISE FND_API.G_EXC_ERROR;
11908 End If;
11909
11910 If l_validate = 'Y' and l_end_date_status = 'I' Then
11911
11912 pa_utils.add_message
11913 ( p_app_short_name => 'PA'
11914 ,p_msg_name => 'PA_PROJ_DATE_FINISH_ERROR'
11915 ,p_token1 => ''
11916 ,p_value1 => ''
11917 ,p_token2 => ''
11918 ,p_value2 => ''
11919 ,p_token3 => ''
11920 ,p_value3 => ''
11921 );
11922
11923 RAISE FND_API.G_EXC_ERROR;
11924 End If;
11925 End If;
11926 End;
11927
11928 /*--Bug 6511907 PJR Date Validation Enhancement ----- End--*/
11929 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11930 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11931 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11932 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
11933 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11934 RAISE FND_API.G_EXC_ERROR;
11935 END IF;
11936
11937 -- Checking of valid project start and end date is done after adding and updating the tasks,
11938 -- since dates of tasks might change to be within the project begin and end date.
11939
11940
11941 IF l_update_start_date_flag = 'Y'
11942 THEN
11943 --bug 2955326
11944 /*
11945 l_statement := l_statement ||
11946 ' START_DATE = to_date('''||
11947 to_char(l_project_start_date,'YYYY/MM/DD')||
11948 ''', ''YYYY/MM/DD''),';
11949 */
11950 l_statement := l_statement ||
11951 ' START_DATE = :start_date ,';
11952 l_b_start_date_flag := 'Y';
11953 --end bug 2955326
11954 l_update_yes_flag := 'Y';
11955 END IF;
11956
11957 IF l_update_end_date_flag = 'Y'
11958 THEN
11959 --bug 2955326
11960 /*
11961 l_statement := l_statement ||
11962 ' COMPLETION_DATE = to_date('''||
11963 to_char(l_project_completion_date,'YYYY/MM/DD')||
11964 ''', ''YYYY/MM/DD''),';
11965 */
11966 l_statement := l_statement ||
11967 ' COMPLETION_DATE = :comp_date ,';
11968 l_b_comp_date_flag := 'Y';
11969 --end bug 2955326
11970 l_update_yes_flag := 'Y';
11971 END IF;
11972
11973 -- Update other date fields which are maintained only in the external system
11974
11975 -- update Actual start date and actual finish date
11976
11977 /* Task progress changes : Actual start date should be updated from task progress and ignored from AMG
11978 IF (p_project_in.actual_start_date IS NOT NULL AND
11979 p_project_in.actual_start_date <>
11980 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
11981 NVL(l_project_rec.actual_start_date,
11982 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
11983 p_project_in.actual_start_date THEN
11984
11985 l_statement := l_statement ||
11986 ' ACTUAL_START_DATE = to_date('''||
11987 to_char(p_project_in.actual_start_date,'YYYY/MM/DD')||
11988 ''', ''YYYY/MM/DD''),';
11989
11990
11991 l_update_yes_flag := 'Y';
11992 END IF;
11993
11994
11995 IF (p_project_in.actual_finish_date IS NOT NULL AND
11996 p_project_in.actual_finish_date <>
11997 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
11998 NVL(l_project_rec.actual_finish_date,
11999 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12000 p_project_in.actual_finish_date THEN
12001
12002 l_statement := l_statement ||
12003 ' ACTUAL_FINISH_DATE = to_date('''||
12004 to_char(p_project_in.actual_finish_date,'YYYY/MM/DD')||
12005 ''', ''YYYY/MM/DD''),';
12006 l_update_yes_flag := 'Y';
12007 END IF;
12008 */
12009
12010 -- update early start date and early finish date
12011 IF (p_project_in.early_start_date IS NOT NULL AND
12012 p_project_in.early_start_date <>
12013 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12014 NVL(l_project_rec.early_start_date,
12015 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12016 p_project_in.early_start_date THEN
12017 --bug 2955326
12018 /*
12019 l_statement := l_statement ||
12020 ' EARLY_START_DATE = to_date('''||
12021 to_char(p_project_in.early_start_date,'YYYY/MM/DD')||
12022 ''', ''YYYY/MM/DD''),';
12023 */
12024 l_statement := l_statement ||
12025 ' EARLY_START_DATE = :early_start_date ,';
12026 l_b_early_sd_flag := 'Y';
12027 --end bug 2955326
12028 l_update_yes_flag := 'Y';
12029 END IF;
12030
12031 IF (p_project_in.early_finish_date IS NOT NULL AND
12032 p_project_in.early_finish_date <>
12033 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12034 NVL(l_project_rec.early_finish_date,
12035 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12036 p_project_in.early_finish_date THEN
12037 --bug 2955326
12038 /*
12039 l_statement := l_statement ||
12040 ' EARLY_FINISH_DATE = to_date('''||
12041 to_char(p_project_in.early_finish_date,'YYYY/MM/DD')||
12042 ''', ''YYYY/MM/DD''),';
12043 */
12044 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
12045 IF p_project_in.early_start_date IS NOT NULL AND p_project_in.early_start_date <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12046
12047 IF p_project_in.early_finish_date < p_project_in.early_start_date THEN
12048
12049 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12050
12051 pa_utils.add_message
12052 (
12053 p_app_short_name => 'PA'
12054 ,p_msg_name => 'PA_SU_INVALID_DATES'
12055 );
12056
12057 END IF;
12058
12059 RAISE FND_API.G_EXC_ERROR;
12060 END IF;
12061 l_statement := l_statement ||
12062 ' EARLY_FINISH_DATE = :early_finish_date ,';
12063 l_b_early_fd_flag := 'Y';
12064 l_update_yes_flag := 'Y';
12065
12066 ELSIF l_project_rec.early_start_date IS NOT NULL THEN
12067
12068 IF p_project_in.early_finish_date < l_project_rec.early_start_date THEN
12069
12070 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12071
12072 pa_utils.add_message
12073 (
12074 p_app_short_name => 'PA'
12075 ,p_msg_name => 'PA_SU_INVALID_DATES'
12076 );
12077
12078 END IF;
12079
12080 RAISE FND_API.G_EXC_ERROR;
12081 END IF;
12082 l_statement := l_statement ||
12083 ' EARLY_FINISH_DATE = :early_finish_date ,';
12084 l_b_early_fd_flag := 'Y';
12085 l_update_yes_flag := 'Y';
12086 ELSE
12087
12088 l_statement := l_statement ||
12089 ' EARLY_FINISH_DATE = :early_finish_date ,';
12090 l_b_early_fd_flag := 'Y';
12091 --end bug 2955326
12092 l_update_yes_flag := 'Y';
12093
12094 END IF; --End of Logic added for Bug#5185673
12095 END IF;
12096
12097 -- update Late start date and Late finish date
12098
12099 IF (p_project_in.late_start_date IS NOT NULL AND
12100 p_project_in.late_start_date <>
12101 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12102 NVL(l_project_rec.late_start_date,
12103 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12104 p_project_in.late_start_date THEN
12105 --bug 2955326
12106 /*
12107 l_statement := l_statement ||
12108 ' LATE_START_DATE = to_date('''||
12109 to_char(p_project_in.late_start_date,'YYYY/MM/DD')||
12110 ''', ''YYYY/MM/DD''),';
12111 */
12112
12113 l_statement := l_statement ||
12114 ' LATE_START_DATE = :late_start_date ,';
12115 l_b_late_sd_flag := 'Y';
12116 --end bug 2955326
12117 l_update_yes_flag := 'Y';
12118 END IF;
12119
12120
12121 IF (p_project_in.late_finish_date IS NOT NULL AND
12122 p_project_in.late_finish_date <>
12123 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12124 NVL(l_project_rec.late_finish_date,
12125 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12126 p_project_in.late_finish_date THEN
12127 --bug 2955326
12128 /*
12129 l_statement := l_statement ||
12130 ' LATE_FINISH_DATE = to_date('''||
12131 to_char(p_project_in.late_finish_date,'YYYY/MM/DD')||
12132 ''', ''YYYY/MM/DD''),';
12133 */
12134 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
12135 IF p_project_in.late_start_date IS NOT NULL AND p_project_in.late_start_date <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12136
12137 IF p_project_in.late_finish_date < p_project_in.late_start_date THEN
12138
12139 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12140
12141 pa_utils.add_message
12142 (
12143 p_app_short_name => 'PA'
12144 ,p_msg_name => 'PA_SU_INVALID_DATES'
12145 );
12146
12147 END IF;
12148
12149 RAISE FND_API.G_EXC_ERROR;
12150 END IF;
12151 l_statement := l_statement ||
12152 ' LATE_FINISH_DATE = :late_finish_date ,';
12153 l_b_late_fd_flag := 'Y';
12154 l_update_yes_flag := 'Y';
12155 ELSIF l_project_rec.late_start_date IS NOT NULL THEN
12156 IF p_project_in.late_finish_date < l_project_rec.late_start_date THEN
12157
12158 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12159
12160 pa_utils.add_message
12161 (
12162 p_app_short_name => 'PA'
12163 ,p_msg_name => 'PA_SU_INVALID_DATES'
12164 );
12165
12166 END IF;
12167
12168 RAISE FND_API.G_EXC_ERROR;
12169 END IF;
12170 l_statement := l_statement ||
12171 ' LATE_FINISH_DATE = :late_finish_date ,';
12172 l_b_late_fd_flag := 'Y';
12173 l_update_yes_flag := 'Y';
12174 ELSE
12175 l_statement := l_statement ||
12176 ' LATE_FINISH_DATE = :late_finish_date ,';
12177 l_b_late_fd_flag := 'Y';
12178 --end bug 2955326
12179 l_update_yes_flag := 'Y';
12180
12181 END IF; --End of Logic added for Bug#5185673.
12182 END IF;
12183
12184
12185 -- update scheduled start date and scheduled finish date
12186
12187 IF (p_project_in.scheduled_start_date IS NOT NULL AND
12188 p_project_in.scheduled_start_date <>
12189 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12190 NVL(l_project_rec.scheduled_start_date,
12191 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12192 p_project_in.scheduled_start_date THEN
12193 --bug 2955326
12194 /*
12195 l_statement := l_statement ||
12196 ' SCHEDULED_START_DATE = to_date('''||
12197 to_char(p_project_in.scheduled_start_date,'YYYY/MM/DD')||
12198 ''', ''YYYY/MM/DD''),';
12199
12200 */
12201 l_statement := l_statement ||
12202 ' SCHEDULED_START_DATE = :sch_start_date ,';
12203 l_b_sch_sd_flag := 'Y';
12204 --end bug 2955326
12205 l_update_yes_flag := 'Y';
12206 END IF;
12207
12208
12209 IF (p_project_in.scheduled_finish_date IS NOT NULL AND
12210 p_project_in.scheduled_finish_date <>
12211 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12212 NVL(l_project_rec.scheduled_finish_date,
12213 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12214 p_project_in.scheduled_finish_date THEN
12215 --bug 2955326
12216 /*
12217 l_statement := l_statement ||
12218 ' SCHEDULED_FINISH_DATE = to_date('''||
12219 to_char(p_project_in.scheduled_finish_date,'YYYY/MM/DD')||
12220 ''', ''YYYY/MM/DD''),';
12221 */
12222 l_statement := l_statement ||
12223 ' SCHEDULED_FINISH_DATE = :sch_finish_date ,';
12224 l_b_sch_fd_flag := 'Y';
12225 --end bug 2955326
12226 l_update_yes_flag := 'Y';
12227 END IF;
12228
12229 -- Check if any of the df columns have changed (attribute1 to attribute10)
12230 -- 04/11/97
12231 -- Bug 7277032
12232
12233 IF p_project_in.attribute_category <>
12234 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12235 OR p_project_in.attribute_category IS NULL THEN
12236 IF NVL(p_project_in.attribute_category,
12237 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12238 <> NVL(l_project_rec.attribute_category,
12239 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
12240 --bug 2955326
12241 /*
12242 l_statement := l_statement ||
12243 ' ATTRIBUTE_CATEGORY = '||''''||
12244 RTRIM(p_project_in.attribute_category)||''''||',';
12245 */
12246 l_statement := l_statement ||
12247 ' ATTRIBUTE_CATEGORY = :attr_cat ,';
12248 l_b_attr_cat_flag := 'Y';
12249 --end bug 2955326
12250 l_update_yes_flag := 'Y';
12251 END IF;
12252 END IF;
12253
12254 -- Bug 7277032
12255 IF p_project_in.attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12256 OR p_project_in.attribute1 IS NULL THEN
12257 IF NVL(p_project_in.attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12258 <> NVL(l_project_rec.attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12259 THEN
12260 --bug 2955326
12261 /*
12262 l_statement := l_statement ||
12263 ' ATTRIBUTE1 = '||''''||
12264 RTRIM(p_project_in.attribute1)||''''||',';
12265 */
12266 l_statement := l_statement ||
12267 ' ATTRIBUTE1 = :attr1 ,';
12268 l_b_attr1_flag := 'Y';
12269 --end bug 2955326
12270 l_update_yes_flag := 'Y';
12271 END IF;
12272 END IF;
12273
12274 -- Bug 7277032
12275 IF p_project_in.attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12276 OR p_project_in.attribute2 IS NULL THEN
12277 IF NVL(p_project_in.attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12278 <> NVL(l_project_rec.attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12279 THEN
12280 --bug 2955326
12281 /*
12282 l_statement := l_statement ||
12283 ' ATTRIBUTE2 = '||''''||
12284 RTRIM(p_project_in.attribute2)||''''||',';
12285 */
12286 l_statement := l_statement ||
12287 ' ATTRIBUTE2 = :attr2 ,';
12288 l_b_attr2_flag := 'Y';
12289 --end bug 2955326
12290 l_update_yes_flag := 'Y';
12291 END IF;
12292 END IF;
12293
12294 -- Bug 7277032
12295 IF p_project_in.attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12296 OR p_project_in.attribute3 IS NULL THEN
12297 IF NVL(p_project_in.attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12298 <> NVL(l_project_rec.attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12299 THEN
12300 --bug 2955326
12301 /*
12302 l_statement := l_statement ||
12303 ' ATTRIBUTE3 = '||''''||
12304 RTRIM(p_project_in.attribute3)||''''||',';
12305 */
12306 l_statement := l_statement ||
12307 ' ATTRIBUTE3 = :attr3 ,';
12308 l_b_attr3_flag := 'Y';
12309 --end bug 2955326
12310 l_update_yes_flag := 'Y';
12311 END IF;
12312 END IF;
12313
12314 -- Bug 7277032
12315 IF p_project_in.attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12316 OR p_project_in.attribute4 IS NULL THEN
12317 IF NVL(p_project_in.attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12318 <> NVL(l_project_rec.attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12319 THEN
12320 --bug 2955326
12321 /*
12322 l_statement := l_statement ||
12323 ' ATTRIBUTE4 = '||''''||
12324 RTRIM(p_project_in.attribute4)||''''||',';
12325 */
12326 l_statement := l_statement ||
12327 ' ATTRIBUTE4 = :attr4 ,';
12328 l_b_attr4_flag := 'Y';
12329 --end bug 2955326
12330 l_update_yes_flag := 'Y';
12331 END IF;
12332 END IF;
12333
12334 -- Bug 7277032
12335 IF p_project_in.attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12336 OR p_project_in.attribute5 IS NULL THEN
12337 IF NVL(p_project_in.attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12338 <> NVL(l_project_rec.attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12339 THEN
12340 --bug 2955326
12341 /*
12342 l_statement := l_statement ||
12343 ' ATTRIBUTE5 = '||''''||
12344 RTRIM(p_project_in.attribute5)||''''||',';
12345 */
12346 l_statement := l_statement ||
12347 ' ATTRIBUTE5 = :attr5 ,';
12348 l_b_attr5_flag := 'Y';
12349 --end bug 2955326
12350 l_update_yes_flag := 'Y';
12351 END IF;
12352 END IF;
12353
12354 -- Bug 7277032
12355 IF p_project_in.attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12356 OR p_project_in.attribute6 IS NULL THEN
12357 IF NVL(p_project_in.attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12358 <> NVL(l_project_rec.attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12359 THEN
12360 --bug 2955326
12361 /*
12362 l_statement := l_statement ||
12363 ' ATTRIBUTE6 = '||''''||
12364 RTRIM(p_project_in.attribute6)||''''||',';
12365 */
12366 l_statement := l_statement ||
12367 ' ATTRIBUTE6 = :attr6 ,';
12368 l_b_attr6_flag := 'Y';
12369 --end bug 2955326
12370 l_update_yes_flag := 'Y';
12371 END IF;
12372 END IF;
12373
12374 -- Bug 7277032
12375 IF p_project_in.attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12376 OR p_project_in.attribute7 IS NULL THEN
12377 IF NVL(p_project_in.attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12378 <> NVL(l_project_rec.attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12379 THEN
12380 --bug 2955326
12381 /*
12382 l_statement := l_statement ||
12383 ' ATTRIBUTE7 = '||''''||
12384 RTRIM(p_project_in.attribute7)||''''||',';
12385 */
12386 l_statement := l_statement ||
12387 ' ATTRIBUTE7 = :attr7 ,';
12388 l_b_attr7_flag := 'Y';
12389 --end bug 2955326
12390 l_update_yes_flag := 'Y';
12391 END IF;
12392 END IF;
12393
12394 -- Bug 7277032
12395 IF p_project_in.attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12396 OR p_project_in.attribute8 IS NULL THEN
12397 IF NVL(p_project_in.attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12398 <> NVL(l_project_rec.attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12399 THEN
12400 --bug 2955326
12401 /*
12402 l_statement := l_statement ||
12403 ' ATTRIBUTE8 = '||''''||
12404 RTRIM(p_project_in.attribute8)||''''||',';
12405 */
12406 l_statement := l_statement ||
12407 ' ATTRIBUTE8 = :attr8 ,';
12408 l_b_attr8_flag := 'Y';
12409 --end bug 2955326
12410 l_update_yes_flag := 'Y';
12411 END IF;
12412 END IF;
12413
12414 -- Bug 7277032
12415 IF p_project_in.attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12416 OR p_project_in.attribute9 IS NULL THEN
12417 IF NVL(p_project_in.attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12418 <> NVL(l_project_rec.attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12419 THEN
12420 --bug 2955326
12421 /*
12422 l_statement := l_statement ||
12423 ' ATTRIBUTE9 = '||''''||
12424 RTRIM(p_project_in.attribute9)||''''||',';
12425 */
12426 l_statement := l_statement ||
12427 ' ATTRIBUTE9 = :attr9 ,';
12428 l_b_attr9_flag := 'Y';
12429 --end bug 2955326
12430 l_update_yes_flag := 'Y';
12431 END IF;
12432 END IF;
12433
12434 -- Bug 7277032
12435 IF p_project_in.attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12436 OR p_project_in.attribute10 IS NULL THEN
12437 IF NVL(p_project_in.attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12438 <> NVL(l_project_rec.attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12439 THEN
12440 --bug 2955326
12441 /*
12442 l_statement := l_statement ||
12443 ' ATTRIBUTE10 = '||''''||
12444 RTRIM(p_project_in.attribute10)||''''||',';
12445 */
12446 l_statement := l_statement ||
12447 ' ATTRIBUTE10 = :attr10 ,';
12448 l_b_attr10_flag := 'Y';
12449 --end bug 2955326
12450 l_update_yes_flag := 'Y';
12451 END IF;
12452 END IF;
12453
12454 -- Tax Code Changes Starts here ...
12455
12456 --Bug 4606925: Modified below condition so that output_tax_code can be updated to null
12457 IF ((p_project_in.output_tax_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12458 AND p_project_in.output_tax_code IS NOT NULL) OR (p_project_in.output_tax_code IS NULL)) THEN
12459 IF NVL(p_project_in.output_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12460 <> NVL(l_project_rec.output_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12461 THEN
12462 --bug 2955326
12463 /*
12464 l_statement := l_statement ||
12465 ' OUTPUT_TAX_CODE = '||''''||
12466 RTRIM(p_project_in.output_tax_code)||''''||',';
12467 */ -- Added for 5188246
12468 IF p_project_in.output_tax_code IS NOT NULL THEN
12469
12470 OPEN l_cur_retention_tax_code(p_project_in.output_tax_code);
12471 FETCH l_cur_retention_tax_code INTO l_dummy_cur_output_tax_code;
12472 CLOSE l_cur_retention_tax_code;
12473
12474 IF l_dummy_cur_output_tax_code <> 'Y' THEN
12475 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12476 p_msg_name => 'PA_INVLD_OUTPUT_TAX_CODE');
12477
12478 p_return_status := FND_API.G_RET_STS_ERROR;
12479 RAISE FND_API.G_EXC_ERROR;
12480
12481 END IF;
12482
12483
12484 END IF ;
12485 -- End of 5188246
12486 l_statement := l_statement ||
12487 ' OUTPUT_TAX_CODE = :output_tx_code ,';
12488 l_b_output_tx_code_flag := 'Y';
12489 --end bug 2955326
12490 l_update_yes_flag := 'Y';
12491 END IF;
12492 END IF;
12493
12494 --Bug 4606925: Modified below condition so that retention_tax_code can be updated to null
12495 IF ((p_project_in.retention_tax_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12496 AND p_project_in.retention_tax_code IS NOT NULL) OR (p_project_in.retention_tax_code IS NULL)) THEN
12497 IF NVL(p_project_in.retention_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12498 <> NVL(l_project_rec.retention_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12499 THEN
12500 --bug 2955326
12501 /*
12502 l_statement := l_statement ||
12503 ' RETENTION_TAX_CODE = '||''''||
12504 RTRIM(p_project_in.retention_tax_code)||''''||',';
12505 */ -- Added for Bug 5188246
12506 IF p_project_in.retention_tax_code IS NOT NULL THEN
12507
12508 OPEN l_cur_retention_tax_code(p_project_in.retention_tax_code);
12509 FETCH l_cur_retention_tax_code INTO l_dummy_cur_retention_tax_code;
12510 CLOSE l_cur_retention_tax_code;
12511
12512 IF l_dummy_cur_retention_tax_code <> 'Y' THEN
12513 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12514 p_msg_name => 'PA_INVLD_RETENTION_TAX_CODE');
12515
12516 p_return_status := FND_API.G_RET_STS_ERROR;
12517 RAISE FND_API.G_EXC_ERROR;
12518
12519 END IF;
12520
12521
12522 END IF ;
12523 -- End of Bug 5188246.
12524 l_statement := l_statement ||
12525 ' RETENTION_TAX_CODE = :ret_tx_code ,';
12526 l_b_ret_tx_code_flag := 'Y';
12527 --end bug 2955326
12528 l_update_yes_flag := 'Y';
12529 END IF;
12530 END IF;
12531
12532 -- IC and Multi National Currency changes Starts ...
12533 -- Bug#5188931
12534 IF (p_project_in.project_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_project_in.project_currency_code IS NULL) THEN
12535
12536 IF NVL(p_project_in.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.project_currency_code,
12537 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
12538
12539 -- Added the following Logic here to validate passed currency code.Bug#5188931
12540 -- Checking whether passed currency code is a valid value and not a junk value
12541 OPEN cur_check_cur_code( p_project_in.project_currency_code );
12542 FETCH cur_check_cur_code INTO l_check_cur_code_flag;
12543 CLOSE cur_check_cur_code;
12544
12545 IF (l_check_cur_code_flag = 'Y') THEN
12546
12547 --This means the currency code passed is not null and valid. Hence validate whether update is allowed.
12548
12549 --1. Check whether bill intercompany invoices flag is checked at the project type level
12550 OPEN cur_check_prvdr_flag(p_project_in.pa_project_id);
12551 FETCH cur_check_prvdr_flag INTO l_prvdr_flag;
12552 CLOSE cur_check_prvdr_flag;
12553
12554 IF l_prvdr_flag ='Y' THEN
12555 l_allow_update_flag := 'N';
12556
12557
12558 --2. Check whether project value ,funding ,event,expenditure item, budget transaction exist
12559 --If any one of these exist, then the update should not be allowed. The check for existence of
12560 --sub projects is not done here as this has been already done above thru Bug#3912783.
12561
12562 ELSIF ( NVL( pa_multi_currency_billing.check_mcb_trans_exist ( p_project_in.pa_project_id ), 'N' ) = 'Y' OR
12563 l_project_rec.project_value IS NOT NULL OR
12564 PA_IMPL_OPTIONS_PUB.check_budget_trans_exists( p_project_in.pa_project_id ) = 'Y'
12565 ) THEN
12566
12567 l_allow_update_flag := 'N';
12568 END IF;
12569
12570 IF l_allow_update_flag = 'N' THEN
12571
12572 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12573
12574 pa_utils.add_message
12575 (
12576 p_app_short_name => 'PA'
12577 ,p_msg_name => 'PA_CURR_CODE_NOT_UPDATBL'
12578 );
12579
12580 END IF;
12581
12582 RAISE FND_API.G_EXC_ERROR;
12583 ELSE
12584
12585 --bug 2955326
12586 /*
12587 l_statement := l_statement ||
12588 ' PROJECT_CURRENCY_CODE = '||''''||
12589 RTRIM(p_project_in.project_currency_code)||''''||',';
12590 */
12591 l_statement := l_statement ||
12592 ' PROJECT_CURRENCY_CODE = :proj_cur_code ,';
12593 l_b_proj_cur_code_flag := 'Y';
12594 --end bud 2955326
12595 l_update_yes_flag := 'Y';
12596 END IF;
12597
12598 ELSE
12599
12600 --invalid currency code has been passed hence throw error
12601 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12602
12603 pa_utils.add_message
12604 (
12605 p_app_short_name => 'PA'
12606 ,p_msg_name => 'PA_INVALID_PROJ_CURR_CODE'
12607 );
12608
12609 END IF;
12610
12611 RAISE FND_API.G_EXC_ERROR;
12612 END IF;
12613
12614 END IF;
12615
12616 END IF; --End of changes Bug#5188931
12617
12618 IF p_project_in.allow_cross_charge_flag <>
12619 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12620 AND p_project_in.allow_cross_charge_flag IS NOT NULL THEN
12621 IF NVL(p_project_in.allow_cross_charge_flag,
12622 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12623 <> NVL(l_project_rec.allow_cross_charge_flag,
12624 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12625 THEN
12626 --bug 2955326
12627 /*
12628 l_statement := l_statement ||
12629 ' ALLOW_CROSS_CHARGE_FLAG = '||''''||
12630 RTRIM(p_project_in.allow_cross_charge_flag)||''''||',';
12631 */
12632 l_statement := l_statement ||
12633 ' ALLOW_CROSS_CHARGE_FLAG = :allow_x_chg_flag ,';
12634 l_b_allow_x_chg_flag := 'Y';
12635 --end bug 2955326
12636 l_update_yes_flag := 'Y';
12637 END IF;
12638 END IF;
12639
12640 IF p_project_in.project_rate_date <>
12641 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12642 AND p_project_in.project_rate_date IS NOT NULL THEN
12643 IF NVL(p_project_in.project_rate_date,
12644 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12645 <> NVL(l_project_rec.project_rate_date,
12646 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12647 THEN
12648 --bug 2955326
12649 /*
12650 l_statement := l_statement ||
12651 ' PROJECT_RATE_DATE = to_date('''||
12652 to_char(p_project_in.project_rate_date,'YYYY/MM/DD')||
12653 ''', ''YYYY/MM/DD''),';
12654 */
12655 l_statement := l_statement ||
12656 ' PROJECT_RATE_DATE = :proj_rt_date ,';
12657 l_b_proj_rt_date_flag := 'Y';
12658 --end bug 2955326
12659 l_update_yes_flag := 'Y';
12660 END IF;
12661 END IF;
12662
12663 --dbms_output.put_line('p_project_in.project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ' || p_project_in.project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
12664 IF ((p_project_in.project_rate_type <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12665 AND p_project_in.project_rate_type IS NOT NULL )
12666 OR p_project_in.project_rate_type IS NULL ) THEN-- changed this if condition for bug no 5225146
12667
12668 IF NVL(p_project_in.project_rate_type,
12669 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12670 <> NVL(l_project_rec.project_rate_type,
12671 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12672 THEN
12673 --bug 2955326
12674 /*
12675 l_statement := l_statement ||
12676 ' PROJECT_RATE_TYPE = '||''''||
12677 RTRIM(p_project_in.project_rate_type)||''''||',';
12678 */
12679 -- Added for bug 5225146
12680 IF p_project_in.project_rate_type IS NOT NULL THEN
12681
12682 OPEN l_cur_project_rate_type(p_project_in.project_rate_type);
12683 FETCH l_cur_project_rate_type INTO l_dummy_project_rate_type;
12684 CLOSE l_cur_project_rate_type;
12685
12686 IF l_dummy_project_rate_type <> 'Y' THEN
12687
12688 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12689 p_msg_name => 'PA_INVLD_PROJ_RATE_TYPE');
12690 p_return_status := FND_API.G_RET_STS_ERROR;
12691 RAISE FND_API.G_EXC_ERROR;
12692 END IF ;
12693 END IF ;
12694
12695 l_statement := l_statement ||
12696 ' PROJECT_RATE_TYPE = :proj_rt_tp ,';
12697 l_b_proj_rt_tp_flag := 'Y';
12698 --bug 2955326
12699 l_update_yes_flag := 'Y';
12700 END IF;
12701 END IF;
12702
12703 IF p_project_in.cc_process_labor_flag <>
12704 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12705 AND p_project_in.cc_process_labor_flag IS NOT NULL THEN
12706 IF NVL(p_project_in.cc_process_labor_flag,
12707 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12708 <> NVL(l_project_rec.cc_process_labor_flag,
12709 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12710 THEN
12711 --bug 2955326
12712 /*
12713 l_statement := l_statement ||
12714 ' CC_PROCESS_LABOR_FLAG = '||''''||
12715 RTRIM(p_project_in.cc_process_labor_flag)||''''||',';
12716 */
12717 l_statement := l_statement ||
12718 ' CC_PROCESS_LABOR_FLAG = :cc_proc_lb_flag ,';
12719 l_cc_proc_lb_flag := 'Y';
12720 --end bug 2955326
12721 l_update_yes_flag := 'Y';
12722 END IF;
12723 END IF;
12724
12725 -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
12726 IF ( (p_project_in.labor_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12727 AND p_project_in.labor_tp_schedule_id IS NOT NULL) OR
12728 (p_project_in.labor_tp_schedule_id IS NULL) )
12729 THEN
12730 -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
12731 IF ( (p_project_in.labor_tp_schedule_id <> NVL(l_project_rec.labor_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
12732 OR (p_project_in.labor_tp_schedule_id IS NULL) )
12733 THEN
12734 --bug 2955326
12735 /*
12736 l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = ' ||
12737 TO_CHAR(p_project_in.labor_tp_schedule_id)||',';
12738 */
12739
12740 l_cc_process_labor_flag := p_project_in.cc_process_labor_flag; /* Added for Bug 5395048 */
12741 l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = :lb_tp_sch_id ,';
12742 l_b_lb_tp_sch_id_flag := 'Y'; -- added for Bug 5395048
12743 l_update_yes_flag := 'Y';
12744
12745 -- 5402979 :: Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
12746 -- we need to set the project cross charge process labor flag to 'N'
12747 IF p_project_in.labor_tp_schedule_id IS NULL THEN
12748 l_cc_process_labor_flag := 'N';
12749
12750 IF l_cc_proc_lb_flag = 'N' THEN
12751 l_statement := l_statement ||
12752 ' CC_PROCESS_LABOR_FLAG = :cc_proc_lb_flag ,';
12753 END IF;
12754
12755 l_cc_proc_lb_flag := 'Y';
12756 l_update_yes_flag := 'Y';
12757 END IF;
12758 -- code changes end for Bug 5395048
12759
12760 END IF;
12761 END IF;
12762
12763 IF p_project_in.labor_tp_fixed_date <>
12764 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12765 AND p_project_in.labor_tp_fixed_date IS NOT NULL THEN
12766 IF NVL(p_project_in.labor_tp_fixed_date,
12767 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12768 <> NVL(l_project_rec.labor_tp_fixed_date,
12769 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12770 THEN
12771 --bug 2955326
12772 /*
12773 l_statement := l_statement ||
12774 ' LABOR_TP_FIXED_DATE = to_date('''||
12775 to_char(p_project_in.labor_tp_fixed_date,'YYYY/MM/DD')||
12776 ''', ''YYYY/MM/DD''),';
12777 */
12778 l_statement := l_statement ||
12779 ' LABOR_TP_FIXED_DATE = :lb_tp_fixed_dt ,';
12780 l_b_lb_tp_fixed_dt_flag := 'Y';
12781 --end bug 2955326
12782 l_update_yes_flag := 'Y';
12783 END IF;
12784 END IF;
12785
12786 IF p_project_in.cc_process_nl_flag <>
12787 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12788 AND p_project_in.cc_process_nl_flag IS NOT NULL THEN
12789 IF NVL(p_project_in.cc_process_nl_flag,
12790 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12791 <> NVL(l_project_rec.cc_process_nl_flag,
12792 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12793 THEN
12794 --bug 2955326
12795 /*
12796 l_statement := l_statement ||
12797 ' CC_PROCESS_NL_FLAG = '||''''||
12798 RTRIM(p_project_in.cc_process_nl_flag)||''''||',';
12799 */
12800 l_statement := l_statement ||
12801 ' CC_PROCESS_NL_FLAG = :cc_proc_nl_flag ,';
12802 l_b_cc_proc_nl_flag := 'Y';
12803 --end bug 2955326
12804 l_update_yes_flag := 'Y';
12805 END IF;
12806 END IF;
12807
12808 IF ( (p_project_in.nl_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12809 AND p_project_in.nl_tp_schedule_id IS NOT NULL)
12810 OR (p_project_in.nl_tp_schedule_id IS NULL) )
12811 THEN
12812 IF ((p_project_in.nl_tp_schedule_id <> NVL(l_project_rec.nl_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
12813 OR (p_project_in.nl_tp_schedule_id IS NULL))
12814 THEN
12815 --bug 2955326
12816 /*
12817 l_statement := l_statement || ' NL_TP_SCHEDULE_ID = ' ||
12818 TO_CHAR(p_project_in.nl_tp_schedule_id)||',';
12819 */
12820 l_cc_process_nl_flag := p_project_in.cc_process_nl_flag; /* Added for Bug 5395048 */
12821 l_statement := l_statement || ' NL_TP_SCHEDULE_ID = :nl_tp_sch_id ,';
12822 l_b_nl_tp_sch_id_flag := 'Y';
12823 --bug 2955326
12824 l_update_yes_flag := 'Y';
12825
12826 -- Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
12827 -- we need to set the project cross charge process labor flag to 'N'
12828 IF p_project_in.nl_tp_schedule_id IS NULL THEN
12829 l_cc_process_nl_flag := 'N';
12830
12831 IF l_b_cc_proc_nl_flag = 'N' THEN
12832 l_statement := l_statement ||
12833 ' CC_PROCESS_NL_FLAG = :cc_proc_nl_flag ,';
12834 END IF;
12835
12836 l_b_cc_proc_nl_flag := 'Y';
12837 l_update_yes_flag := 'Y';
12838 END IF;
12839 -- Code changes end for Bug 5395048
12840 END IF;
12841 END IF;
12842
12843 IF p_project_in.nl_tp_fixed_date <>
12844 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12845 AND p_project_in.nl_tp_fixed_date IS NOT NULL THEN
12846 IF NVL(p_project_in.nl_tp_fixed_date,
12847 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12848 <> NVL(l_project_rec.nl_tp_fixed_date,
12849 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12850 THEN
12851 --bug 2955326
12852 /*
12853 l_statement := l_statement ||
12854 ' NL_TP_FIXED_DATE = to_date('''||
12855 to_char(p_project_in.nl_tp_fixed_date,'YYYY/MM/DD')||
12856 ''', ''YYYY/MM/DD''),';
12857 */
12858 l_statement := l_statement ||
12859 ' NL_TP_FIXED_DATE = :nl_tp_fx_dt ,';
12860 l_b_nl_tp_fx_dt_flag := 'Y';
12861 --end bug 2955326
12862 l_update_yes_flag := 'Y';
12863 END IF;
12864 END IF;
12865
12866 -- IC and Multi National Currency changes Ends ...
12867
12868 -- ORM Code change starts here ...
12869
12870 IF p_project_in.role_list_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12871 AND p_project_in.role_list_id IS NOT NULL THEN
12872 IF p_project_in.role_list_id <> l_project_rec.role_list_id
12873 THEN
12874 --bug 2955326
12875 /*
12876 l_statement := l_statement || ' ROLE_LIST_ID = ' ||
12877 TO_CHAR(p_project_in.role_list_id)||',';
12878 */
12879 l_statement := l_statement || ' ROLE_LIST_ID = :role_list_id ,';
12880 l_b_role_list_id_flag := 'Y';
12881 --end bug 2955326
12882 l_update_yes_flag := 'Y';
12883 END IF;
12884 END IF;
12885
12886 --Added for bug 5745545
12887 IF nvl(p_project_in.work_type_id,-999) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
12888
12889 IF (nvl(fnd_profile.value('PA_EN_NEW_WORK_TYPE_PROCESS'),'N') = 'Y') OR (nvl(pa_install.is_prm_licensed(),'N') = 'Y' ) THEN
12890
12891 IF p_project_in.work_type_id IS NULL AND (NOT (PA_GMS_API.vert_install)) THEN
12892
12893 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12894 pa_interface_utils_pub.map_new_amg_msg
12895 ( p_old_message_code => 'PA_PR_WORK_TYPE_MANDATORY'
12896 ,p_msg_attribute => 'CHANGE'
12897 ,p_resize_flag => 'Y'
12898 ,p_msg_context => 'PROJ'
12899 ,p_attribute1 => l_project_rec.segment1
12900 ,p_attribute2 => ''
12901 ,p_attribute3 => ''
12902 ,p_attribute4 => ''
12903 ,p_attribute5 => '');
12904 END IF;
12905 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12906 RAISE FND_API.G_EXC_ERROR;
12907 ELSE
12908 IF nvl(p_project_in.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> nvl(l_project_rec.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
12909
12910 --Added the following logic to update the work type id.Bug#5222248
12911 OPEN cur_check_work_type(p_project_in.pa_project_id,p_project_in.work_type_id);
12912 FETCH cur_check_work_type INTO l_check_work_type;
12913 CLOSE cur_check_work_type;
12914
12915 IF l_check_work_type = 'Y' THEN
12916
12917 l_statement := l_statement || ' WORK_TYPE_ID = :work_type_id ,';
12918 l_b_work_type_id_flag := 'Y';
12919 l_update_yes_flag := 'Y';
12920 END IF;
12921 --End of code change for Bug#5222248.
12922 END IF;
12923 END IF;
12924
12925 ELSE -- Null work_type_id is allowed
12926 IF nvl(p_project_in.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> nvl(l_project_rec.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
12927
12928 l_statement := l_statement || ' WORK_TYPE_ID = :work_type_id ,';
12929 l_b_work_type_id_flag := 'Y';
12930 l_update_yes_flag := 'Y';
12931 END IF;
12932 END IF;
12933 END IF;
12934 --End of addition for bug 5745545
12935
12936 IF p_project_in.calendar_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12937 AND p_project_in.calendar_id IS NOT NULL THEN
12938 /* IF p_project_in.calendar_id <> l_project_rec.calendar_id Commented for bug 5620624*/
12939 IF p_project_in.calendar_id <> nvl(l_project_rec.calendar_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --Bug#5620624
12940 THEN
12941 --bug 2955326
12942 /*
12943 l_statement := l_statement || ' CALENDAR_ID = ' ||
12944 TO_CHAR(p_project_in.calendar_id)||',';
12945 */
12946 OPEN l_cur_calendar_id(p_project_in.calendar_id);
12947 FETCH l_cur_calendar_id INTO l_dummy_calendar_id;
12948 CLOSE l_cur_calendar_id ;
12949 -- Added this if condition for 5222506
12950 IF l_dummy_calendar_id = 'Y' THEN
12951 l_statement := l_statement || ' CALENDAR_ID = :cal_id ,';
12952 l_b_cal_id_flag := 'Y';
12953 --end bug 2955326
12954 l_update_yes_flag := 'Y';
12955 END IF ;
12956 -- End of bug 5222506
12957 END IF;
12958 END IF;
12959
12960 IF p_project_in.location_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12961 AND p_project_in.location_id IS NOT NULL THEN
12962 IF p_project_in.location_id <> l_project_rec.location_id
12963 THEN
12964 --bug 2955326
12965 /*
12966 l_statement := l_statement || ' LOCATION_ID = ' ||
12967 TO_CHAR(p_project_in.location_id)||',';
12968 */
12969 l_statement := l_statement || ' LOCATION_ID = :loc_id ,';
12970 l_b_loc_id_flag := 'Y';
12971 --end bug 2955326
12972 l_update_yes_flag := 'Y';
12973 END IF;
12974 END IF;
12975
12976 IF p_project_in.probability_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
12977 AND p_project_in.probability_member_id IS NOT NULL THEN
12978 --Modified the if condition below for Bug#5210872.
12979
12980 IF (p_project_in.probability_member_id <> nvl(l_project_rec.probability_member_id,-99)) THEN
12981
12982 --End of code change for Bug#5210872.
12983 --bug 2955326
12984 /*
12985 l_statement := l_statement || ' PROBABILITY_MEMBER_ID = ' ||
12986 TO_CHAR(p_project_in.probability_member_id)||',';
12987 */
12988
12989 --Bug#5191521.Included validation for probability_member_id below.
12990
12991 OPEN cur_validate_prob_member( p_project_in.pa_project_id,p_project_in.probability_member_id);
12992 FETCH cur_validate_prob_member INTO l_check_prob_id;
12993 CLOSE cur_validate_prob_member;
12994
12995 IF l_check_prob_id ='Y' THEN --only if a valid probability id is passed
12996 --update will be done.Otherwise old value will remain.
12997
12998 l_statement := l_statement || ' PROBABILITY_MEMBER_ID = :prob_memb_id ,';
12999 l_b_prob_memb_id_flag := 'Y';
13000 l_update_yes_flag := 'Y';
13001 ELSE
13002
13003 l_b_prob_memb_id_flag :='N';
13004 END IF;
13005 --End of code change for Bug#5191521.
13006
13007 --end bug 2955326
13008
13009
13010
13011 END IF;
13012 END IF;
13013
13014 IF ((p_project_in.project_value <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13015 AND p_project_in.project_value IS NOT NULL ) OR p_project_in.project_value IS NULL) THEN
13016 IF p_project_in.project_value <> l_project_rec.project_value
13017 THEN
13018 --bug 2955326
13019 /*
13020 l_statement := l_statement || ' PROJECT_VALUE = ' ||
13021 TO_CHAR(p_project_in.project_value)||',';
13022 */--Added for bug 5214431
13023 -- changed from l_project_in_rec.project_value to p_project_in.project_value
13024 IF p_project_in.project_value IS NOT NULL AND p_project_in.project_value < 0 THEN
13025 PA_UTILS.ADD_MESSAGE
13026 ( p_app_short_name => 'PA'
13027 ,p_msg_name => 'PA_INVLD_OPPORTUNITY_VALUE');
13028 RAISE FND_API.G_EXC_ERROR;
13029 END IF;
13030 -- end of bug 5214431.
13031 l_statement := l_statement || ' PROJECT_VALUE = :proj_value ,';
13032 l_b_proj_value_flag := 'Y';
13033 --end bug 2955326
13034 l_update_yes_flag := 'Y';
13035 END IF;
13036 END IF;
13037
13038 IF p_project_in.expected_approval_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13039 AND p_project_in.expected_approval_date IS NOT NULL THEN
13040 IF NVL(p_project_in.expected_approval_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13041 <> NVL(l_project_rec.expected_approval_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13042 THEN
13043 --bug 2955326
13044 /*
13045 l_statement := l_statement || ' EXPECTED_APPROVAL_DATE = to_date('''||
13046 to_char(p_project_in.expected_approval_date,'YYYY/MM/DD')||
13047 ''', ''YYYY/MM/DD''),';
13048 */
13049 l_statement := l_statement || ' EXPECTED_APPROVAL_DATE = :exp_apprv_date ,';
13050 l_b_exp_apprv_dt_flag := 'Y';
13051 --end bug 2955326
13052 l_update_yes_flag := 'Y';
13053 END IF;
13054 END IF;
13055
13056 IF p_project_in.cost_job_group_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13057 AND p_project_in.cost_job_group_id IS NOT NULL THEN
13058 IF p_project_in.cost_job_group_id <> l_project_rec.cost_job_group_id
13059 THEN
13060 --bug 2955326
13061 /*
13062 l_statement := l_statement || ' COST_JOB_BILL_ID = ' ||
13063 TO_CHAR(p_project_in.cost_job_group_id)||',';
13064 */
13065 l_statement := l_statement || ' COST_JOB_BILL_ID = :cst_jb_gp_id ,';
13066 l_b_cst_jb_gp_id_flag := 'Y';
13067 --end bug 2955326
13068 l_update_yes_flag := 'Y';
13069 END IF;
13070 END IF;
13071
13072 IF p_project_in.bill_job_group_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13073 AND p_project_in.bill_job_group_id IS NOT NULL THEN
13074 IF p_project_in.bill_job_group_id <> l_project_rec.bill_job_group_id
13075 THEN
13076 --bug 2955326
13077 /*
13078 l_statement := l_statement || ' BILL_JOB_BILL_ID = ' ||
13079 TO_CHAR(p_project_in.bill_job_group_id)||',';
13080 */
13081 l_statement := l_statement || ' BILL_JOB_GROUP_ID = :bill_jb_gp_id ,'; --Bug 5739298 Changed BILL_JOB_BILL_ID to BILL_JOB_GROUP_ID
13082 l_b_bill_jb_gp_id_flag := 'Y';
13083 --end bug 2955326
13084 l_update_yes_flag := 'Y';
13085 END IF;
13086 END IF;
13087
13088 -- ORM Code change ends here ...
13089 /*Commented the below code for bug 2802984*/
13090 /*IF p_project_in.emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13091 AND p_project_in.emp_bill_rate_schedule_id IS NOT NULL THEN
13092 IF p_project_in.emp_bill_rate_schedule_id <> l_project_rec.emp_bill_rate_schedule_id
13093 THEN
13094 l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = ' ||
13095 TO_CHAR(p_project_in.emp_bill_rate_schedule_id)||',';
13096 l_update_yes_flag := 'Y';
13097 END IF;
13098 END IF;
13099
13100 IF p_project_in.job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13101 AND p_project_in.job_bill_rate_schedule_id IS NOT NULL THEN
13102 IF p_project_in.job_bill_rate_schedule_id <> l_project_rec.job_bill_rate_schedule_id
13103 THEN
13104 l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = ' ||
13105 TO_CHAR(p_project_in.job_bill_rate_schedule_id)||',';
13106 l_update_yes_flag := 'Y';
13107 END IF;
13108 END IF;*/
13109 /*Commenting till here for bug 2802984 */
13110
13111 /* Code for the bug 2802984 starts*/
13112
13113 pa_project_pvt.Check_Schedule_type
13114 (p_pa_task_id => '',
13115 p_pa_project_id => l_project_id,
13116 p_in_labor_sch_type => p_project_in.labor_sch_type,
13117 p_in_nl_sch_type => p_project_in.non_labor_sch_type,
13118 p_task_name => '',
13119 p_pm_task_reference => '',
13120 p_out_labor_sch_type => l_out_labor_sch_type,
13121 p_out_nl_labor_sch_type => l_out_nl_labor_sch_type,
13122 p_return_status => l_return_status
13123 );
13124
13125 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13126 THEN
13127 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13128
13129 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13130 THEN
13131 RAISE FND_API.G_EXC_ERROR;
13132 END IF;
13133
13134
13135 pa_project_pvt.validate_schedule_values
13136 (p_pa_project_id => l_project_id,
13137 p_pa_task_id => '',
13138 p_task_name => '',
13139 p_pm_task_reference => '',
13140 p_lab_db_sch_type => l_project_rec.labor_sch_type,
13141 p_nl_db_sch_type => l_project_rec.non_labor_sch_type,
13142 p_labor_sch_type => l_out_labor_sch_type,
13143 p_nl_sch_type => l_out_nl_labor_sch_type,
13144 p_emp_bill_rate_schedule_id => p_project_in.EMP_BILL_RATE_SCHEDULE_ID,
13145 p_job_bill_rate_schedule_id => p_project_in.JOB_BILL_RATE_SCHEDULE_ID,
13146 p_labor_schedule_fixed_date => p_project_in.LABOR_SCHEDULE_FIXED_DATE,
13147 p_labor_schedule_discount => p_project_in.LABOR_SCHEDULE_DISCOUNT,
13148 p_labor_disc_reason_code => p_project_in.LABOR_DISC_REASON_CODE,
13149 p_nl_bill_rate_org_id => p_project_in.NON_LABOR_BILL_RATE_ORG_ID,
13150 p_non_lab_std_bill_rt_sch_id => p_project_in.NON_LAB_STD_BILL_RT_SCH_ID,
13151 p_nl_schedule_fixed_date => p_project_in.NON_LABOR_SCHEDULE_FIXED_DATE,
13152 p_nl_schedule_discount => p_project_in.NON_LABOR_SCHEDULE_DISCOUNT,
13153 p_non_labor_disc_reason_code => p_project_in.NON_LABOR_DISC_REASON_CODE,
13154 p_rev_ind_rate_sch_id => p_project_in.REV_IND_RATE_SCH_ID,
13155 p_inv_ind_rate_sch_id => p_project_in.INV_IND_RATE_SCH_ID,
13156 p_rev_ind_sch_fixed_date => p_project_in.REV_IND_SCH_FIXED_DATE,
13157 p_inv_ind_sch_fixed_date => p_project_in.INV_IND_SCH_FIXED_DATE,
13158 p_return_status => l_return_status
13159 );
13160
13161
13162 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13163 THEN
13164
13165 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13166
13167 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13168 THEN
13169
13170 RAISE FND_API.G_EXC_ERROR;
13171 END IF;
13172
13173 IF p_project_in.labor_sch_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13174 AND p_project_in.labor_sch_type IS NOT NULL
13175 THEN
13176 IF p_project_in.labor_sch_type <> NVL(l_task_rec.LABOR_SCH_TYPE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13177 THEN
13178 --bug 2955326
13179 /*
13180 l_statement := l_statement ||' LABOR_SCH_TYPE = '||''''||
13181 RTRIM(p_project_in.labor_sch_type)||''''||',';
13182 */
13183 l_statement := l_statement ||' LABOR_SCH_TYPE = :lb_sch_type ,';
13184 l_b_lb_sch_tp_fg := 'Y';
13185 --end bug 2955326
13186 l_update_yes_flag := 'Y';
13187 END IF;
13188 END IF;
13189
13190 IF p_project_in.non_labor_sch_type <>
13191 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13192 AND p_project_in.non_labor_sch_type IS NOT NULL
13193 THEN
13194 IF p_project_in.non_labor_sch_type
13195 <> NVL(l_task_rec.NON_LABOR_SCH_TYPE,
13196 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13197 THEN
13198 --bug 2955326
13199 /*
13200 l_statement := l_statement ||
13201 ' NON_LABOR_SCH_TYPE = '||''''||
13202 RTRIM(p_project_in.non_labor_sch_type)||''''||',';
13203 */
13204 l_statement := l_statement ||
13205 ' NON_LABOR_SCH_TYPE = :nn_lb_sch_tp ,';
13206 l_b_nn_lb_sch_tp_fg := 'Y';
13207 --end bug 2955326
13208 l_update_yes_flag := 'Y';
13209 END IF;
13210 END IF;
13211
13212 IF l_out_labor_sch_type = 'B' THEN
13213
13214 /* Should be able to update null since this is not mandatory*/
13215
13216 IF ((p_project_in.emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13217 AND p_project_in.emp_bill_rate_schedule_id IS NOT NULL) OR (p_project_in.emp_bill_rate_schedule_id IS NULL))
13218 THEN
13219 IF ((p_project_in.emp_bill_rate_schedule_id <>
13220 NVL(l_project_rec.emp_bill_rate_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
13221 OR (p_project_in.emp_bill_rate_schedule_id IS NULL))
13222 THEN
13223 --bug 2955326
13224 /*
13225 l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = ' ||
13226 TO_CHAR(p_project_in.emp_bill_rate_schedule_id)||',';
13227 */
13228 l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = :emp_bill_rt_sch_id2 ,';
13229 l_b_emp_bill_rt_sch_id_fg2 := 'Y';
13230 --end bug 2955326
13231 l_update_yes_flag := 'Y';
13232 END IF;
13233 END IF;
13234
13235 /*
13236 1)Should be able to update null when prm is not licensed.
13237 2) When prm is licensed then it is mandatory.
13238 */
13239
13240 IF ((p_project_in.job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13241 AND p_project_in.job_bill_rate_schedule_id IS NOT NULL)
13242 OR (p_project_in.job_bill_rate_schedule_id is NULL and pa_install.is_prm_licensed = 'N'))
13243 THEN
13244 IF (p_project_in.job_bill_rate_schedule_id <> NVL(l_project_rec.job_bill_rate_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13245 OR (p_project_in.job_bill_rate_schedule_id IS NULL))
13246 THEN
13247 --bug 2955326
13248 /*
13249 l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = ' ||
13250 TO_CHAR(p_project_in.job_bill_rate_schedule_id)||',';
13251 */
13252 l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = :jb_bill_rt_sch_id2,';
13253 l_b_jb_bill_rt_sch_id_fg2 := 'Y';
13254 --end bug 2955326
13255 l_update_yes_flag := 'Y';
13256 END IF;
13257 END IF;
13258
13259 /* Should be able to update null*/
13260
13261 IF ((p_project_in.labor_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13262 AND p_project_in.labor_schedule_fixed_date IS NOT NULL) OR (p_project_in.labor_schedule_fixed_date IS NULL))
13263 THEN
13264 IF (p_project_in.labor_schedule_fixed_date <>
13265 NVL(l_project_rec.labor_schedule_fixed_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13266 OR (l_project_rec.labor_schedule_fixed_date IS NULL))
13267 THEN
13268 --bug 2955326
13269 /*
13270 l_statement := l_statement ||
13271 ' LABOR_SCHEDULE_FIXED_DATE = to_date('''||
13272 to_char(p_project_in.labor_schedule_fixed_date,'YYYY/MM/DD')||
13273 ''', ''YYYY/MM/DD''),';
13274 */
13275 l_statement := l_statement ||
13276 ' LABOR_SCHEDULE_FIXED_DATE = :lb_sch_fx_dt ,';
13277 l_b_lb_sch_fx_dt_fg := 'Y';
13278 --end bug 2955326
13279 l_update_yes_flag := 'Y';
13280 END IF;
13281 END IF;
13282
13283 /* Should be able to update null*/
13284 IF ((p_project_in.labor_schedule_discount <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13285 AND p_project_in.labor_schedule_discount IS NOT NULL)
13286 OR (p_project_in.labor_schedule_discount IS NULL)) THEN
13287 IF ((p_project_in.labor_schedule_discount
13288 <> NVL(l_project_rec.labor_schedule_discount,
13289 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) OR (p_project_in.labor_schedule_discount IS NULL))
13290 THEN
13291 --bug 2955326
13292 /*
13293 l_statement := l_statement ||
13294 ' LABOR_SCHEDULE_DISCOUNT = '||''''||
13295 TO_NUMBER(p_project_in.labor_schedule_discount)||''''||',';
13296 */
13297 l_statement := l_statement ||
13298 ' LABOR_SCHEDULE_DISCOUNT = :lb_sch_dsct ,';
13299 l_b_lb_sch_dsct_fg := 'Y';
13300 --end bug 2955326
13301 l_update_yes_flag := 'Y';
13302 END IF;
13303 END IF;
13304
13305 IF p_project_in.labor_schedule_discount IS NULL THEN
13306 l_statement := l_statement ||
13307 ' LABOR_DISC_REASON_CODE = '''''||',';
13308 l_update_yes_flag := 'Y';
13309 ELSE
13310 IF p_project_in.labor_disc_reason_code <>
13311 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13312 AND p_project_in.labor_disc_reason_code IS NOT NULL
13313 THEN
13314 IF (p_project_in.labor_disc_reason_code
13315 <> NVL(l_project_rec.labor_disc_reason_code,
13316 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
13317 THEN
13318 --bug 2955326
13319 /*
13320 l_statement := l_statement ||
13321 ' LABOR_DISC_REASON_CODE = '||''''||
13322 RTRIM(p_project_in.labor_disc_reason_code)||''''||',';
13323 */
13324 l_statement := l_statement ||
13325 ' LABOR_DISC_REASON_CODE = :lb_disc_rn_cd ,';
13326 l_b_lb_disc_rn_cd_fg2 := 'Y';
13327 --end bug 2955326
13328 l_update_yes_flag := 'Y';
13329 END IF;
13330 END IF;
13331 END IF;
13332
13333 ELSE
13334
13335 l_statement := l_statement ||
13336 ' LABOR_SCHEDULE_FIXED_DATE = '''''||',';
13337
13338 l_statement := l_statement ||
13339 ' LABOR_SCHEDULE_DISCOUNT = '''''||',';
13340
13341 l_statement := l_statement ||
13342 ' LABOR_DISC_REASON_CODE = '''''||',';
13343
13344 l_statement := l_statement ||
13345 ' EMP_BILL_RATE_SCHEDULE_ID = '''''||',';
13346
13347 l_statement := l_statement ||
13348 ' JOB_BILL_RATE_SCHEDULE_ID = '''''||',';
13349
13350
13351 l_update_yes_flag := 'Y';
13352 END IF;
13353
13354 IF l_out_labor_sch_type = 'I' OR l_out_nl_labor_sch_type = 'I' THEN
13355
13356 IF p_project_in.REV_IND_RATE_SCH_ID <>
13357 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13358 AND p_project_in.REV_IND_RATE_SCH_ID IS NOT NULL THEN
13359 IF NVL(p_project_in.REV_IND_RATE_SCH_ID,
13360 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13361 <> NVL(l_project_rec.REV_IND_RATE_SCH_ID,
13362 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13363 THEN
13364 --bug 2955326
13365 /*
13366 l_statement := l_statement ||
13367 ' REV_IND_RATE_SCH_ID = '||''''||
13368 TO_CHAR(p_project_in.REV_IND_RATE_SCH_ID)||''''||',';
13369 */
13370 l_statement := l_statement ||
13371 ' REV_IND_RATE_SCH_ID = :rv_ind_rt_sch_id ,';
13372 l_b_rv_ind_rt_sch_id_fg := 'Y';
13373 --end bug 2955326
13374 l_update_yes_flag := 'Y';
13375 END IF;
13376 END IF;
13377
13378
13379 IF p_project_in.INV_IND_RATE_SCH_ID <>
13380 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13381 AND p_project_in.INV_IND_RATE_SCH_ID IS NOT NULL THEN
13382 IF NVL(p_project_in.INV_IND_RATE_SCH_ID,
13383 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13384 <> NVL(l_project_rec.INV_IND_RATE_SCH_ID,
13385 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13386 THEN
13387 --bug 2955326
13388 /*
13389 l_statement := l_statement ||
13390 ' INV_IND_RATE_SCH_ID = '||''''||
13391 TO_CHAR(p_project_in.INV_IND_RATE_SCH_ID)||''''||',';
13392 */
13393 l_statement := l_statement ||
13394 ' INV_IND_RATE_SCH_ID = :inv_ind_rt_sch_id,';
13395 l_b_inv_ind_rt_sch_id_fg := 'Y';
13396 --end bug 2955326
13397 l_update_yes_flag := 'Y';
13398 END IF;
13399 END IF;
13400
13401 IF p_project_in.REV_IND_RATE_SCH_ID <>
13402 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13403 AND p_project_in.REV_IND_RATE_SCH_ID IS NOT NULL THEN
13404
13405 BEGIN
13406
13407 SELECT ind_rate_schedule_type INTO l_rev_rate_sch_type
13408 FROM pa_ind_rate_schedules
13409 WHERE ind_rate_sch_id = p_project_in.REV_IND_RATE_SCH_ID
13410 AND trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
13411
13412
13413 EXCEPTION
13414 WHEN NO_DATA_FOUND THEN
13415 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13416 THEN
13417 pa_interface_utils_pub.map_new_amg_msg
13418 ( p_old_message_code => 'PA_INVALID_REV_SCH_ID'
13419 ,p_msg_attribute => 'CHANGE'
13420 ,p_resize_flag => 'Y'
13421 ,p_msg_context => 'PROJ'
13422 ,p_attribute1 => l_project_rec.segment1
13423 ,p_attribute2 => ''
13424 ,p_attribute3 => ''
13425 ,p_attribute4 => ''
13426 ,p_attribute5 => '');
13427 END IF;
13428 RAISE FND_API.G_EXC_ERROR;
13429 END;
13430
13431 ELSE
13432
13433 IF l_project_rec.REV_IND_RATE_SCH_ID IS NOT NULL
13434 THEN
13435
13436 SELECT ind_rate_schedule_type INTO l_rev_rate_sch_type
13437 FROM pa_ind_rate_schedules
13438 WHERE ind_rate_sch_id = l_project_rec.REV_IND_RATE_SCH_ID;
13439 -- Bug 3657709
13440 /* AND trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
13441
13442 END IF;
13443
13444 END IF;
13445
13446 IF p_project_in.INV_IND_RATE_SCH_ID <>
13447 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13448 AND p_project_in.INV_IND_RATE_SCH_ID IS NOT NULL THEN
13449
13450 BEGIN
13451
13452 SELECT ind_rate_schedule_type INTO l_inv_rate_sch_type
13453 FROM pa_ind_rate_schedules
13454 WHERE ind_rate_sch_id = p_project_in.INV_IND_RATE_SCH_ID
13455 AND trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
13456
13457
13458 EXCEPTION
13459 WHEN NO_DATA_FOUND THEN
13460 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13461 THEN
13462 pa_interface_utils_pub.map_new_amg_msg
13463 ( p_old_message_code => 'PA_INVALID_INV_SCH_ID'
13464 ,p_msg_attribute => 'CHANGE'
13465 ,p_resize_flag => 'Y'
13466 ,p_msg_context => 'PROJ'
13467 ,p_attribute1 => l_project_rec.segment1
13468 ,p_attribute2 => ''
13469 ,p_attribute3 => ''
13470 ,p_attribute4 => ''
13471 ,p_attribute5 => '');
13472 END IF;
13473 RAISE FND_API.G_EXC_ERROR;
13474 END;
13475
13476 ELSE
13477 IF l_project_rec.INV_IND_RATE_SCH_ID IS NOT NULL
13478 THEN
13479
13480 SELECT ind_rate_schedule_type INTO l_inv_rate_sch_type
13481 FROM pa_ind_rate_schedules
13482 WHERE ind_rate_sch_id = l_project_rec.INV_IND_RATE_SCH_ID;
13483 -- Bug 3657709
13484 /* AND trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
13485
13486 END IF;
13487
13488 END IF;
13489
13490
13491 IF l_rev_rate_sch_type = 'P' AND l_project_rec.REV_IND_SCH_FIXED_DATE IS NOT NULL THEN
13492 l_statement := l_statement ||
13493 ' REV_IND_SCH_FIXED_DATE = '''''||',';
13494 l_update_yes_flag := 'Y';
13495 ELSE
13496 IF ((p_project_in.rev_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13497 AND p_project_in.rev_ind_sch_fixed_date IS NOT NULL) OR (p_project_in.rev_ind_sch_fixed_date IS NULL))
13498 THEN
13499 IF (p_project_in.rev_ind_sch_fixed_date
13500 <> NVL(l_project_rec.rev_ind_sch_fixed_date,
13501 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (l_project_rec.rev_ind_sch_fixed_date IS NULL))
13502 THEN
13503 --bug 2955326
13504 /*
13505 l_statement := l_statement ||
13506 ' rev_ind_sch_fixed_date = to_date('''||
13507 to_char(p_project_in.rev_ind_sch_fixed_date,'YYYY/MM/DD')||
13508 ''', ''YYYY/MM/DD''),';
13509 */
13510 l_statement := l_statement ||
13511 ' rev_ind_sch_fixed_date = :rev_ind_sch_fx_dt ,';
13512 l_b_ind_sch_fx_dt_fg := 'Y';
13513 --end bug 2955326
13514 l_update_yes_flag := 'Y';
13515 END IF;
13516 END IF;
13517 END IF;
13518
13519 IF l_inv_rate_sch_type = 'P' AND l_project_rec.INV_IND_SCH_FIXED_DATE IS NOT NULL
13520 THEN
13521 l_statement := l_statement ||
13522 ' INV_IND_SCH_FIXED_DATE = '''''||',';
13523 l_update_yes_flag := 'Y';
13524 ELSE
13525 IF ((p_project_in.inv_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13526 AND p_project_in.inv_ind_sch_fixed_date IS NOT NULL) OR (p_project_in.inv_ind_sch_fixed_date IS NULL))
13527 THEN
13528 IF (p_project_in.inv_ind_sch_fixed_date
13529 <> NVL(l_project_rec.inv_ind_sch_fixed_date,
13530 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (p_project_in.inv_ind_sch_fixed_date IS NULL))
13531 THEN
13532 --bug 2955326
13533 /*
13534 l_statement := l_statement ||
13535 ' inv_ind_sch_fixed_date = to_date('''||
13536 to_char(p_project_in.inv_ind_sch_fixed_date,'YYYY/MM/DD')||
13537 ''', ''YYYY/MM/DD''),';
13538 */
13539 l_statement := l_statement ||
13540 ' inv_ind_sch_fixed_date = :inv_ind_sch_fx_dt,';
13541 l_b_inv_ind_sch_fx_dt_fg := 'Y';
13542 --end bug 2955326
13543 l_update_yes_flag := 'Y';
13544 END IF;
13545 END IF;
13546 END IF;
13547
13548 ELSE
13549 l_statement := l_statement ||
13550 ' REV_IND_RATE_SCH_ID = '''''||',';
13551
13552
13553 l_statement := l_statement ||
13554 ' INV_IND_RATE_SCH_ID = '''''||',';
13555
13556
13557 l_statement := l_statement ||
13558 ' REV_IND_SCH_FIXED_DATE = '''''||',';
13559
13560 l_statement := l_statement ||
13561 ' INV_IND_SCH_FIXED_DATE = '''''||',';
13562 l_update_yes_flag := 'Y';
13563 END IF;
13564
13565 IF l_out_nl_labor_sch_type = 'B' THEN
13566
13567 IF (p_project_in.non_labor_bill_rate_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13568 AND p_project_in.non_labor_bill_rate_org_id IS NOT NULL)
13569 THEN
13570 IF p_project_in.non_labor_bill_rate_org_id <>
13571 NVL(l_project_rec.non_labor_bill_rate_org_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13572 THEN
13573 --bug 2955326
13574 /*
13575 l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ' ||
13576 TO_CHAR(p_project_in.non_labor_bill_rate_org_id)||',';
13577 */
13578 l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = :nn_lb_bill_rt_org_id,';
13579 l_b_nn_lb_bill_rt_org_id_fg := 'Y';
13580 --bug 2955326
13581 l_update_yes_flag := 'Y';
13582 END IF;
13583 END IF;
13584
13585 IF (p_project_in.non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13586 AND p_project_in.non_lab_std_bill_rt_sch_id IS NOT NULL)
13587 THEN
13588 IF NVL(p_project_in.non_lab_std_bill_rt_sch_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13589 <> NVL(l_project_rec.non_lab_std_bill_rt_sch_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13590 THEN
13591
13592
13593 BEGIN
13594 SELECT std_bill_rate_schedule INTO l_std_bill_rate_schedule
13595 FROM pa_std_bill_rate_schedules_all
13596 WHERE bill_rate_sch_id = p_project_in.non_lab_std_bill_rt_sch_id;
13597
13598 --bug 2955326
13599 /*
13600 l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||''''||
13601 TO_CHAR(p_project_in.non_lab_std_bill_rt_sch_id)||''''||',';
13602 */
13603 /*
13604 l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ' ||''''||
13605 RTRIM(l_std_bill_rate_schedule)||''''||',';
13606 */
13607 l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = :nn_lab_std_bill_rt_sch_id,';
13608 l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = :nn_lb_std_bill_rt_sch,';
13609 l_b_n_lb_st_bl_rt_sc_id_fg2 := 'Y';
13610 --end bug 2955326
13611 l_update_yes_flag := 'Y';
13612 EXCEPTION
13613 WHEN NO_DATA_FOUND THEN
13614 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13615 THEN
13616 pa_interface_utils_pub.map_new_amg_msg
13617 ( p_old_message_code => 'PA_PRJ_NL_SCHEDULE_ID'
13618 ,p_msg_attribute => 'CHANGE'
13619 ,p_resize_flag => 'Y'
13620 ,p_msg_context => 'TASK'
13621 ,p_attribute1 => l_amg_segment1
13622 ,p_attribute2 => l_amg_task_number
13623 ,p_attribute3 => ''
13624 ,p_attribute4 => ''
13625 ,p_attribute5 => '');
13626 END IF;
13627 RAISE FND_API.G_EXC_ERROR;
13628 END;
13629
13630 END IF;
13631 END IF;
13632
13633 /* Should be able to update null*/
13634 IF ((p_project_in.non_labor_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13635 AND p_project_in.non_labor_schedule_fixed_date IS NOT NULL) OR (p_project_in.non_labor_schedule_fixed_date IS NULL))
13636 THEN
13637 IF ((p_project_in.non_labor_schedule_fixed_date
13638 <> NVL(l_project_rec.non_labor_schedule_fixed_date,
13639 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)) OR (p_project_in.non_labor_schedule_fixed_date IS NULL))
13640 THEN
13641 --bug 2955326
13642 /*
13643 l_statement := l_statement ||
13644 ' NON_LABOR_SCHEDULE_FIXED_DATE = to_date('''||
13645 to_char(p_project_in.non_labor_schedule_fixed_date,'YYYY/MM/DD')||
13646 ''', ''YYYY/MM/DD''),';
13647 */
13648 l_statement := l_statement ||
13649 ' NON_LABOR_SCHEDULE_FIXED_DATE = :nn_lb_sch_fx_dt,';
13650 l_b_nn_lb_sch_fx_dt_fg := 'Y';
13651 --end bug 2955326
13652 l_update_yes_flag := 'Y';
13653 END IF;
13654 END IF;
13655
13656 /* Should be able to update null*/
13657 IF ((p_project_in.non_labor_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13658 AND p_project_in.non_labor_schedule_discount IS NOT NULL) OR (p_project_in.non_labor_schedule_discount IS NULL))
13659 THEN
13660 IF (p_project_in.non_labor_schedule_discount <> NVL(l_project_rec.non_labor_disc_reason_code,
13661 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR (p_project_in.non_labor_schedule_discount IS NULL))
13662 THEN
13663 --bug 2955326
13664 /*
13665 l_statement := l_statement ||
13666 ' NON_LABOR_SCHEDULE_DISCOUNT = '||''''||
13667 TO_CHAR(p_project_in.non_labor_schedule_discount)||''''||',';
13668 */
13669 l_statement := l_statement ||
13670 ' NON_LABOR_SCHEDULE_DISCOUNT = :nn_lb_sch_dst ,';
13671 l_b_nn_lb_sch_dst_fg := 'Y';
13672 --end bug 2955326
13673 l_update_yes_flag := 'Y';
13674 END IF;
13675 END IF;
13676
13677 IF p_project_in.non_labor_schedule_discount IS NULL
13678 THEN
13679 l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
13680 l_update_yes_flag := 'Y';
13681 ELSE
13682 IF (p_project_in.non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13683 AND p_project_in.non_labor_disc_reason_code IS NOT NULL)
13684 THEN
13685 IF NVL(p_project_in.non_labor_disc_reason_code,
13686 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13687 <> NVL(l_project_rec.non_labor_disc_reason_code,
13688 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13689 THEN
13690 --bug 2955326
13691 /*
13692 l_statement := l_statement ||
13693 ' NON_LABOR_DISC_REASON_CODE = '||''''||
13694 RTRIM(p_project_in.non_labor_disc_reason_code)||''''||',';
13695 */
13696 l_statement := l_statement ||
13697 ' NON_LABOR_DISC_REASON_CODE = :n_lb_dis_rn_cd,';
13698 l_b_n_lb_disc_rsn_cd_fg2 := 'Y';
13699 --end bug 2955326
13700 l_update_yes_flag := 'Y';
13701 END IF;
13702 END IF;
13703 END IF;
13704
13705 ELSE
13706
13707 l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = '''''||',';
13708
13709 l_statement := l_statement || ' NON_LABOR_SCHEDULE_FIXED_DATE = ''''' ||',';
13710
13711 l_statement := l_statement || ' NON_LABOR_SCHEDULE_DISCOUNT = '''''||',';
13712
13713 l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
13714
13715 l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ''''' ||',';
13716
13717 l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ''''' ||',';
13718 l_update_yes_flag := 'Y';
13719 END IF;
13720
13721 /* Code for the bug 2802984 ends*/
13722
13723 --Sakthi MCB
13724
13725 IF p_project_in.competence_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13726 AND p_project_in.competence_match_wt IS NOT NULL THEN
13727 IF p_project_in.competence_match_wt <> l_project_rec.competence_match_wt
13728 THEN
13729 --bug 2955326
13730 /*
13731 l_statement := l_statement || ' COMPETENCE_MATCH_WT = ' ||
13732 TO_CHAR(p_project_in.competence_match_wt)||',';
13733 */
13734 l_statement := l_statement || ' COMPETENCE_MATCH_WT = :comp_match_wt ,';
13735 l_b_comp_mtch_wt_flag := 'Y';
13736 --end bug 2955326
13737 l_update_yes_flag := 'Y';
13738 END IF;
13739 END IF;
13740
13741 IF p_project_in.availability_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13742 AND p_project_in.availability_match_wt IS NOT NULL THEN
13743 IF p_project_in.availability_match_wt <> l_project_rec.availability_match_wt
13744 THEN
13745 --bug 2955326
13746 /*
13747 l_statement := l_statement || ' AVAILABILITY_MATCH_WT = ' ||
13748 TO_CHAR(p_project_in.availability_match_wt)||',';
13749 */
13750 l_statement := l_statement || ' AVAILABILITY_MATCH_WT = :avail_mtch_wt ,';
13751 l_b_avail_mtch_wt_flag := 'Y';
13752 --end bug 2955326
13753 l_update_yes_flag := 'Y';
13754 END IF;
13755 END IF;
13756
13757 IF p_project_in.job_level_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13758 AND p_project_in.job_level_match_wt IS NOT NULL THEN
13759 IF p_project_in.job_level_match_wt <> l_project_rec.job_level_match_wt
13760 THEN
13761 --bug 2955326
13762 /*
13763 l_statement := l_statement || ' JOB_LEVEL_MATCH_WT = ' ||
13764 TO_CHAR(p_project_in.job_level_match_wt)||',';
13765 */
13766 l_statement := l_statement || ' JOB_LEVEL_MATCH_WT = :jb_lvl_mt_wt ,';
13767 l_b_jb_lvl_mt_wt_flag := 'Y';
13768 --end bug 2955326
13769 l_update_yes_flag := 'Y';
13770 END IF;
13771 END IF;
13772
13773 IF p_project_in.search_min_availability <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13774 AND p_project_in.search_min_availability IS NOT NULL THEN
13775 IF p_project_in.search_min_availability <> l_project_rec.search_min_availability
13776 THEN
13777 --bug 2955326
13778 /*
13779 l_statement := l_statement || ' SEARCH_MIN_AVAILABILITY = ' ||
13780 TO_CHAR(p_project_in.search_min_availability)||',';
13781 */
13782 l_statement := l_statement || ' SEARCH_MIN_AVAILABILITY = :srch_min_avail ,';
13783 l_b_search_min_avail_flag := 'Y';
13784 --end bug 2955326
13785 l_update_yes_flag := 'Y';
13786 END IF;
13787 END IF;
13788
13789 IF p_project_in.search_org_hier_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13790 AND p_project_in.search_org_hier_id IS NOT NULL THEN
13791 IF p_project_in.search_org_hier_id <> l_project_rec.search_org_hier_id
13792 THEN
13793 --bug 2955326
13794 /*
13795 l_statement := l_statement || ' SEARCH_ORG_HIER_ID = ' ||
13796 TO_CHAR(p_project_in.search_org_hier_id)||',';
13797 */
13798 l_statement := l_statement || ' SEARCH_ORG_HIER_ID = :srch_org_hier_id ,';
13799 l_b_srch_org_hier_id_flag := 'Y';
13800 --end bug 2955326
13801 l_update_yes_flag := 'Y';
13802 END IF;
13803 END IF;
13804
13805 IF p_project_in.search_starting_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13806 AND p_project_in.search_starting_org_id IS NOT NULL THEN
13807 IF p_project_in.search_starting_org_id <> l_project_rec.search_starting_org_id
13808 THEN
13809 --bug 2955326
13810 /*
13811 l_statement := l_statement || ' SEARCH_ORG_HIER_ID = ' ||
13812 TO_CHAR(p_project_in.search_starting_org_id)||',';
13813 */
13814 l_statement := l_statement || ' SEARCH_ORG_HIER_ID = :srch_org_hier_id ,';
13815 l_b_srch_st_org_id_flag := 'Y';
13816 --end bug 2955326
13817 l_update_yes_flag := 'Y';
13818 END IF;
13819 END IF;
13820
13821 IF p_project_in.min_cand_score_reqd_for_nom <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13822 AND p_project_in.min_cand_score_reqd_for_nom IS NOT NULL THEN
13823 IF p_project_in.min_cand_score_reqd_for_nom <> l_project_rec.min_cand_score_reqd_for_nom
13824 THEN
13825 --bug 2955326
13826 /*
13827 l_statement := l_statement || ' MIN_CAND_SCORE_REQD_FOR_NOM = ' ||
13828 TO_CHAR(p_project_in.min_cand_score_reqd_for_nom)||',';
13829 */
13830 l_statement := l_statement || ' MIN_CAND_SCORE_REQD_FOR_NOM = :min_can_sc_req_for_nom ,';
13831 l_b_min_can_sc_req_for_nom := 'Y';
13832 --end bug 2955326
13833 l_update_yes_flag := 'Y';
13834 END IF;
13835 END IF;
13836
13837 -- Bug 6144566: Changes start
13838 -- Bug 6144566: Introduced MCB related validations
13839
13840 IF p_project_in.multi_currency_billing_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13841 AND p_project_in.multi_currency_billing_flag IS NOT NULL THEN
13842 IF NVL(p_project_in.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13843 <> NVL(l_project_rec.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
13844 -- if attempting to change MCB flag; check if it can be allowed
13845 IF NVL(pa_multi_currency_billing.check_mcb_trans_exist(p_project_in.pa_project_id),'N') = 'Y'
13846 OR NVL(pa_multi_currency_billing.check_mcb_setup_exists(p_project_in.pa_project_id),'N') = 'Y' THEN
13847 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13848 FND_MESSAGE.SET_NAME('PA','PA_MCB_ALLOW_NO_CHG_AMG'); -- Cannot change MCB flag
13849 FND_MSG_PUB.ADD;
13850 RAISE FND_API.G_EXC_ERROR;
13851 END IF;
13852
13853 END IF;
13854
13855 l_statement := l_statement || ' MULTI_CURRENCY_BILLING_FLAG = :multi_crncy_bil_flag ,';
13856 l_b_multi_crncy_bil_flag := 'Y';
13857 l_update_yes_flag := 'Y';
13858
13859 END IF;
13860
13861 -- do MCB related validations, if MCB flag is 'Y'
13862 IF p_project_in.multi_currency_billing_flag = 'Y' THEN -- do MCB related validations
13863
13864 -- Project Currency related attributes
13865 IF p_project_in.PROJECT_BIL_RATE_TYPE is NULL
13866 OR p_project_in.PROJECT_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PROJ_RATE_TYPE_INV_AMG:The project exchage rate type is invalid
13867 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13868 FND_MESSAGE.SET_NAME('PA','PA_PROJ_RATE_TYPE_INV_AMG');
13869 FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
13870 FND_MSG_PUB.ADD;
13871 RAISE FND_API.G_EXC_ERROR;
13872 END IF;
13873 ELSE
13874 IF p_project_in.PROJECT_BIL_RATE_TYPE = 'User' THEN
13875 IF p_project_in.PROJECT_BIL_EXCHANGE_RATE is NULL
13876 OR p_project_in.PROJECT_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13877 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PC_AMG:Project Exchange Rate cannot be null when project rate type is User.
13878 FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PC_AMG');
13879 FND_MSG_PUB.ADD;
13880 RAISE FND_API.G_EXC_ERROR;
13881 END IF;
13882 END IF;
13883
13884 l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
13885 l_b_proj_bil_xch_rt_flag := 'Y';
13886 l_update_yes_flag := 'Y';
13887
13888 ELSE -- non-User type
13889 IF p_project_in.PROJECT_BIL_RATE_DATE_CODE is NULL
13890 OR p_project_in.PROJECT_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13891
13892 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13893 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
13894 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
13895 FND_MSG_PUB.ADD;
13896 RAISE FND_API.G_EXC_ERROR;
13897 END IF;
13898 ELSE
13899 IF p_project_in.PROJECT_BIL_RATE_DATE_CODE = 'Fixed Date' THEN
13900 IF p_project_in.PROJECT_BIL_RATE_DATE is NULL
13901 OR p_project_in.PROJECT_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13902 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13903 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
13904 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
13905 FND_MSG_PUB.ADD;
13906 RAISE FND_API.G_EXC_ERROR;
13907 END IF;
13908 END IF;
13909 END IF;
13910 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
13911 l_b_prj_bil_rt_dt_flag := 'Y';
13912 l_update_yes_flag := 'Y';
13913 END IF;
13914
13915 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
13916 l_b_prj_bil_rt_dt_code_flag := 'Y';
13917 l_update_yes_flag := 'Y';
13918
13919 END IF;
13920
13921 l_statement := l_statement || ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
13922 l_b_proj_bil_rt_tp_flag := 'Y';
13923 l_update_yes_flag := 'Y';
13924
13925 END IF;
13926
13927
13928 -- Project Functional Currency related attributes
13929 IF p_project_in.PROJFUNC_BIL_RATE_TYPE is NULL
13930 OR p_project_in.PROJFUNC_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PFC_RATE_TYPE_INV_AMG:The project functional exchage rate type is invalid
13931 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13932 FND_MESSAGE.SET_NAME('PA','PA_PFC_RATE_TYPE_INV_AMG');
13933 FND_MSG_PUB.ADD;
13934 RAISE FND_API.G_EXC_ERROR;
13935 END IF;
13936 ELSE
13937 IF p_project_in.PROJFUNC_BIL_RATE_TYPE = 'User' THEN
13938 IF p_project_in.PROJFUNC_BIL_EXCHANGE_RATE is NULL
13939 OR p_project_in.PROJFUNC_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13940 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PF_AMG:Project Functional Exchange Rate cannot be null when project functional rate type is User.
13941 FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PF_AMG');
13942 FND_MSG_PUB.ADD;
13943 RAISE FND_API.G_EXC_ERROR;
13944 END IF;
13945 END IF;
13946
13947 l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
13948 l_b_pjfnc_bil_xch_rt_flag := 'Y';
13949 l_update_yes_flag := 'Y';
13950
13951 ELSE -- non-User type
13952 IF p_project_in.PROJFUNC_BIL_RATE_DATE_CODE is NULL
13953 OR p_project_in.PROJFUNC_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
13954
13955 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13956 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
13957 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
13958 FND_MSG_PUB.ADD;
13959 RAISE FND_API.G_EXC_ERROR;
13960 END IF;
13961 ELSE
13962 IF p_project_in.PROJFUNC_BIL_RATE_DATE_CODE = 'Fixed Date' THEN
13963 IF p_project_in.PROJFUNC_BIL_RATE_DATE is NULL
13964 OR p_project_in.PROJFUNC_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
13965 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13966 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
13967 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
13968 FND_MSG_PUB.ADD;
13969 RAISE FND_API.G_EXC_ERROR;
13970 END IF;
13971 END IF;
13972 END IF;
13973 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
13974 l_b_prjfnc_bil_rt_dt_flag := 'Y';
13975 l_update_yes_flag := 'Y';
13976 END IF;
13977 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
13978 l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
13979 l_update_yes_flag := 'Y';
13980 END IF;
13981
13982 l_statement := l_statement || ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
13983 l_b_prjfnc_bil_rt_tp_flag := 'Y';
13984 l_update_yes_flag := 'Y';
13985
13986 END IF;
13987
13988
13989 -- Funding Currency related attributes
13990 IF p_project_in.FUNDING_RATE_TYPE is NULL
13991 OR p_project_in.FUNDING_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_FUND_RATE_TYPE_INV_AMG:The funding exchage rate type is invalid
13992 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13993 FND_MESSAGE.SET_NAME('PA','PA_FUND_RATE_TYPE_INV_AMG');
13994 FND_MSG_PUB.ADD;
13995 RAISE FND_API.G_EXC_ERROR;
13996 END IF;
13997 ELSE
13998 IF p_project_in.FUNDING_RATE_TYPE = 'User' THEN
13999 IF p_project_in.FUNDING_EXCHANGE_RATE is NULL
14000 OR p_project_in.FUNDING_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14001 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCHANGE_RATE_NULL:Exchange rate cannot be null when rate type is User.
14002 FND_MESSAGE.SET_NAME('PA','PA_EXCHANGE_RATE_NULL');
14003 FND_MSG_PUB.ADD;
14004 RAISE FND_API.G_EXC_ERROR;
14005 END IF;
14006 END IF;
14007 l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14008 l_b_fnding_xch_rt_flag := 'Y';
14009 l_update_yes_flag := 'Y';
14010
14011 ELSE -- non-User type
14012 IF p_project_in.FUNDING_RATE_DATE_CODE is NULL
14013 OR p_project_in.FUNDING_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14014
14015 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14016 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
14017 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
14018 FND_MSG_PUB.ADD;
14019 RAISE FND_API.G_EXC_ERROR;
14020 END IF;
14021 ELSE
14022 IF p_project_in.FUNDING_RATE_DATE_CODE = 'Fixed Date' THEN
14023 IF p_project_in.FUNDING_RATE_DATE is NULL
14024 OR p_project_in.FUNDING_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
14025 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14026 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
14027 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
14028 FND_MSG_PUB.ADD;
14029 RAISE FND_API.G_EXC_ERROR;
14030 END IF;
14031 END IF;
14032 END IF;
14033 l_statement := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14034 l_b_fnding_rt_dt_flag := 'Y';
14035 l_update_yes_flag := 'Y';
14036 END IF;
14037 l_statement := l_statement || ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14038 l_b_fndng_rt_dt_cd_flag := 'Y';
14039 l_update_yes_flag := 'Y';
14040 END IF;
14041
14042 l_statement := l_statement || ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14043 l_b_fnding_rt_type_flag := 'Y';
14044 l_update_yes_flag := 'Y';
14045
14046 END IF;
14047
14048 ELSE -- do no MCB related validations
14049
14050 IF ((p_project_in.project_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14051 AND p_project_in.project_bil_exchange_rate IS NOT NULL)
14052 OR p_project_in.project_bil_exchange_rate IS NULL) THEN
14053 IF NVL(p_project_in.project_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14054 <> NVL(l_project_rec.project_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14055 l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14056 l_b_proj_bil_xch_rt_flag := 'Y';
14057 l_update_yes_flag := 'Y';
14058 END IF;
14059 END IF;
14060
14061 IF ((p_project_in.project_bil_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14062 AND p_project_in.project_bil_rate_date_code IS NOT NULL)
14063 OR p_project_in.project_bil_rate_date_code IS NULL) THEN
14064 IF NVL(p_project_in.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14065 <> NVL(l_project_rec.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14066 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14067 l_b_prj_bil_rt_dt_code_flag := 'Y';
14068 l_update_yes_flag := 'Y';
14069 END IF;
14070 END IF;
14071
14072 IF ((p_project_in.project_bil_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14073 AND p_project_in.project_bil_rate_type IS NOT NULL)
14074 OR p_project_in.project_bil_rate_type IS NULL) THEN
14075 IF NVL(p_project_in.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14076 <> NVL(l_project_rec.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14077 l_statement := l_statement || ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14078 l_b_proj_bil_rt_tp_flag := 'Y';
14079 l_update_yes_flag := 'Y';
14080 END IF;
14081 END IF;
14082
14083 IF ((p_project_in.project_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14084 AND p_project_in.project_bil_rate_date IS NOT NULL)
14085 OR p_project_in.project_bil_rate_date IS NULL) THEN
14086 IF NVL(p_project_in.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14087 <> NVL(l_project_rec.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14088 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14089 l_b_prj_bil_rt_dt_flag := 'Y';
14090 l_update_yes_flag := 'Y';
14091 END IF;
14092 END IF;
14093
14094 IF ((p_project_in.projfunc_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14095 AND p_project_in.projfunc_bil_exchange_rate IS NOT NULL)
14096 OR p_project_in.projfunc_bil_exchange_rate IS NULL) THEN
14097 IF NVL(p_project_in.projfunc_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14098 <> NVL(l_project_rec.projfunc_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14099 l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14100 l_b_pjfnc_bil_xch_rt_flag := 'Y';
14101 l_update_yes_flag := 'Y';
14102 END IF;
14103 END IF;
14104
14105 IF ((p_project_in.projfunc_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14106 AND p_project_in.projfunc_bil_rate_date IS NOT NULL)
14107 OR p_project_in.projfunc_bil_rate_date IS NULL) THEN
14108 IF NVL(p_project_in.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14109 <> NVL(l_project_rec.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14110 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14111 l_b_prjfnc_bil_rt_dt_flag := 'Y';
14112 l_update_yes_flag := 'Y';
14113 END IF;
14114 END IF;
14115
14116 IF ((p_project_in.projfunc_bil_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14117 AND p_project_in.projfunc_bil_rate_date_code IS NOT NULL)
14118 OR p_project_in.projfunc_bil_rate_date_code IS NULL) THEN
14119 IF NVL(p_project_in.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14120 <> NVL(l_project_rec.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14121 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14122 l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14123 l_update_yes_flag := 'Y';
14124 END IF;
14125 END IF;
14126
14127 IF ((p_project_in.projfunc_bil_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14128 AND p_project_in.projfunc_bil_rate_type IS NOT NULL)
14129 OR p_project_in.projfunc_bil_rate_type IS NULL) THEN
14130 IF NVL(p_project_in.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14131 <> NVL(l_project_rec.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14132 l_statement := l_statement || ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14133 l_b_prjfnc_bil_rt_tp_flag := 'Y';
14134 l_update_yes_flag := 'Y';
14135 END IF;
14136 END IF;
14137
14138 IF ((p_project_in.funding_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14139 AND p_project_in.funding_exchange_rate IS NOT NULL)
14140 OR p_project_in.funding_exchange_rate IS NULL) THEN
14141 IF NVL(p_project_in.funding_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <>
14142 NVL(l_project_rec.funding_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14143 l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14144 l_b_fnding_xch_rt_flag := 'Y';
14145 l_update_yes_flag := 'Y';
14146 END IF;
14147 END IF;
14148
14149 IF ((p_project_in.funding_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14150 AND p_project_in.funding_rate_date IS NOT NULL)
14151 OR p_project_in.funding_rate_date IS NULL) THEN
14152 IF NVL(p_project_in.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14153 <> NVL(l_project_rec.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14154 l_statement := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14155 l_b_fnding_rt_dt_flag := 'Y';
14156 l_update_yes_flag := 'Y';
14157 END IF;
14158 END IF;
14159
14160 IF ((p_project_in.funding_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14161 AND p_project_in.funding_rate_date_code IS NOT NULL)
14162 OR p_project_in.funding_rate_date_code IS NULL) THEN
14163 IF NVL(p_project_in.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14164 <> NVL(l_project_rec.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14165 l_statement := l_statement || ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14166 l_b_fndng_rt_dt_cd_flag := 'Y';
14167 l_update_yes_flag := 'Y';
14168 END IF;
14169 END IF;
14170
14171 IF ((p_project_in.funding_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14172 AND p_project_in.funding_rate_type IS NOT NULL)
14173 OR p_project_in.funding_rate_type IS NULL) THEN
14174 IF NVL(p_project_in.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14175 <> NVL(l_project_rec.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14176 l_statement := l_statement || ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14177 l_b_fnding_rt_type_flag := 'Y';
14178 l_update_yes_flag := 'Y';
14179 END IF;
14180 END IF;
14181
14182 END IF;
14183
14184 END IF;
14185
14186 -- Bug 6144566: Changes end
14187
14188 /* Commenting the below code for bug #4630836 as the 'non_lab_std_bill_rt_sch_id' column
14189 is getting updated in the code added as part of the fix for the bug 2802984 and the below
14190 code is causing duplicate column updation error.
14191
14192 IF p_project_in.non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14193 AND p_project_in.non_lab_std_bill_rt_sch_id IS NOT NULL THEN
14194 IF p_project_in.non_lab_std_bill_rt_sch_id <> l_project_rec.non_lab_std_bill_rt_sch_id
14195 THEN
14196 --bug 2955326
14197 --
14198 -- l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||
14199 -- TO_CHAR(p_project_in.non_lab_std_bill_rt_sch_id)||',';
14200 --
14201 l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = :n_lb_std_bill_rt_sch_id ,';
14202 l_b_nn_lb_std_bl_rt_sch_id_f := 'Y';
14203 --end bug 2955326
14204 l_update_yes_flag := 'Y';
14205 END IF;
14206 END IF; */
14207
14208 -- Bug 6144566: Changes start
14209 /*
14210 IF p_project_in.project_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14211 AND p_project_in.project_bil_exchange_rate IS NOT NULL THEN
14212 IF p_project_in.project_bil_exchange_rate <> l_project_rec.project_bil_exchange_rate
14213 THEN
14214 --bug 2955326
14215
14216 l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = ' ||
14217 TO_CHAR(p_project_in.project_bil_exchange_rate)||',';
14218
14219 l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14220 l_b_proj_bil_xch_rt_flag := 'Y';
14221 --end bug 2955326
14222 l_update_yes_flag := 'Y';
14223 END IF;
14224 END IF;
14225
14226 IF p_project_in.projfunc_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14227 AND p_project_in.projfunc_bil_exchange_rate IS NOT NULL THEN
14228 IF p_project_in.projfunc_bil_exchange_rate <> l_project_rec.projfunc_bil_exchange_rate
14229 THEN
14230 --bug 2955326
14231
14232 l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = ' ||
14233 TO_CHAR(p_project_in.projfunc_bil_exchange_rate)||',';
14234
14235 l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14236 l_b_pjfnc_bil_xch_rt_flag := 'Y';
14237 --end bug 2955326
14238 l_update_yes_flag := 'Y';
14239 END IF;
14240 END IF;
14241
14242 IF p_project_in.funding_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14243 AND p_project_in.funding_exchange_rate IS NOT NULL THEN
14244 IF p_project_in.funding_exchange_rate <> l_project_rec.funding_exchange_rate
14245 THEN
14246 --bug 2955326
14247
14248 l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = ' ||
14249 TO_CHAR(p_project_in.funding_exchange_rate)||',';
14250
14251 l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14252 l_b_fnding_xch_rt_flag := 'Y';
14253 --end bug 2955326
14254 l_update_yes_flag := 'Y';
14255 END IF;
14256 END IF;
14257 */
14258 -- Bug 6144566: Changes end
14259
14260 IF p_project_in.enable_automated_search <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14261 AND p_project_in.enable_automated_search IS NOT NULL THEN
14262 IF NVL(p_project_in.enable_automated_search, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14263 <> NVL(l_project_rec.enable_automated_search, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14264 THEN
14265 --bug 2955326
14266 /*
14267 l_statement := l_statement ||
14268 ' ENABLE_AUTOMATED_SEARCH = '||''''||
14269 RTRIM(p_project_in.enable_automated_search)||''''||',';
14270 */
14271 l_statement := l_statement ||
14272 ' ENABLE_AUTOMATED_SEARCH = :enable_auto_srch ,';
14273 l_b_enable_auto_srch_flag := 'Y';
14274 --end bug 2955326
14275 l_update_yes_flag := 'Y';
14276 END IF;
14277 END IF;
14278
14279 IF p_project_in.search_country_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14280 AND p_project_in.search_country_code IS NOT NULL THEN
14281 IF NVL(p_project_in.search_country_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14282 <> NVL(l_project_rec.search_country_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14283 THEN
14284 --bug 2955326
14285 /*
14286 l_statement := l_statement ||
14287 ' SEARCH_COUNTRY_CODE = '||''''||
14288 RTRIM(p_project_in.search_country_code)||''''||',';
14289 */
14290 l_statement := l_statement ||
14291 ' SEARCH_COUNTRY_CODE = :srch_cntry_code ,';
14292 l_b_srch_cntry_code_flag := 'Y';
14293 --end bug 2955326
14294 l_update_yes_flag := 'Y';
14295 END IF;
14296 END IF;
14297
14298 IF p_project_in.invproc_currency_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14299 AND p_project_in.invproc_currency_type IS NOT NULL THEN
14300 IF NVL(p_project_in.invproc_currency_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14301 <> NVL(l_project_rec.invproc_currency_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14302 THEN
14303 --bug 2955326
14304 /*
14305 l_statement := l_statement ||
14306 ' INVPROC_CURRENCY_TYPE = '||''''||
14307 RTRIM(p_project_in.invproc_currency_type)||''''||',';
14308 */
14309 l_statement := l_statement ||
14310 ' INVPROC_CURRENCY_TYPE = :invproc_currency_type ,';
14311 l_b_invproc_crncy_tp_flag := 'Y';
14312 --end bug 2955326
14313 l_update_yes_flag := 'Y';
14314 END IF;
14315 END IF;
14316
14317 IF p_project_in.revproc_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14318 AND p_project_in.revproc_currency_code IS NOT NULL THEN
14319 IF NVL(p_project_in.revproc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14320 <> NVL(l_project_rec.revproc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14321 THEN
14322 --bug 2955326
14323 /*
14324 l_statement := l_statement ||
14325 ' REVPROC_CURRENCY_CODE = '||''''||
14326 RTRIM(p_project_in.revproc_currency_code)||''''||',';
14327 */
14328 l_statement := l_statement ||
14329 ' REVPROC_CURRENCY_CODE = :revproc_currency_code ,';
14330 l_b_revproc_crncy_cd_flag := 'Y';
14331 --end bug 2955326
14332 l_update_yes_flag := 'Y';
14333 END IF;
14334 END IF;
14335
14336 -- Bug 6144566: Changes start
14337 /*
14338 IF p_project_in.project_bil_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14339 AND p_project_in.project_bil_rate_date_code IS NOT NULL THEN
14340 IF NVL(p_project_in.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14341 <> NVL(l_project_rec.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14342 THEN
14343 --bug 2955326
14344
14345 l_statement := l_statement ||
14346 ' PROJECT_BIL_RATE_DATE_CODE = '||''''||
14347 RTRIM(p_project_in.project_bil_rate_date_code)||''''||',';
14348
14349 l_statement := l_statement ||
14350 ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14351 l_b_prj_bil_rt_dt_code_flag := 'Y';
14352 --end bug 2955326
14353 l_update_yes_flag := 'Y';
14354 END IF;
14355 END IF;
14356
14357 IF p_project_in.project_bil_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14358 AND p_project_in.project_bil_rate_type IS NOT NULL THEN
14359 IF NVL(p_project_in.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14360 <> NVL(l_project_rec.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14361 THEN
14362 --bug 2955326
14363
14364 l_statement := l_statement ||
14365 ' PROJECT_BIL_RATE_TYPE = '||''''||
14366 RTRIM(p_project_in.project_bil_rate_type)||''''||',';
14367
14368 l_statement := l_statement ||
14369 ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14370 l_b_proj_bil_rt_tp_flag := 'Y';
14371 --end bug 2955326
14372 l_update_yes_flag := 'Y';
14373 END IF;
14374 END IF;
14375 */
14376 -- Bug 6144566: Changes end
14377
14378 IF p_project_in.projfunc_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14379 AND p_project_in.projfunc_currency_code IS NOT NULL THEN
14380 IF NVL(p_project_in.projfunc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14381 <> NVL(l_project_rec.projfunc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14382 THEN
14383 --bug 2955326
14384 /*
14385 l_statement := l_statement ||
14386 ' PROJFUNC_CURRENCY_CODE = '||''''||
14387 RTRIM(p_project_in.projfunc_currency_code)||''''||',';
14388 */
14389 l_statement := l_statement ||
14390 ' PROJFUNC_CURRENCY_CODE = :prjfnc_currency_code ,';
14391 l_b_prjfnc_crncy_code_flag := 'Y';
14392 --end bug 2955326
14393 l_update_yes_flag := 'Y';
14394 END IF;
14395 END IF;
14396
14397 -- Bug 6144566: Changes start
14398 /*
14399 IF p_project_in.projfunc_bil_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14400 AND p_project_in.projfunc_bil_rate_date_code IS NOT NULL THEN
14401 IF NVL(p_project_in.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14402 <> NVL(l_project_rec.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14403 THEN
14404 --bug 2955326
14405
14406 l_statement := l_statement ||
14407 ' PROJFUNC_BIL_RATE_DATE_CODE = '||''''||
14408 RTRIM(p_project_in.projfunc_bil_rate_date_code)||''''||',';
14409
14410 l_statement := l_statement ||
14411 ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14412 l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14413 --end bug 2955326
14414 l_update_yes_flag := 'Y';
14415 END IF;
14416 END IF;
14417
14418 IF p_project_in.projfunc_bil_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14419 AND p_project_in.projfunc_bil_rate_type IS NOT NULL THEN
14420 IF NVL(p_project_in.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14421 <> NVL(l_project_rec.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14422 THEN
14423 --bug 2955326
14424
14425 l_statement := l_statement ||
14426 ' PROJFUNC_BIL_RATE_TYPE = '||''''||
14427 RTRIM(p_project_in.projfunc_bil_rate_type)||''''||',';
14428
14429 l_statement := l_statement ||
14430 ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14431 l_b_prjfnc_bil_rt_tp_flag := 'Y';
14432 --end bug 2955326
14433 l_update_yes_flag := 'Y';
14434 END IF;
14435 END IF;
14436
14437 IF p_project_in.funding_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14438 AND p_project_in.funding_rate_date_code IS NOT NULL THEN
14439 IF NVL(p_project_in.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14440 <> NVL(l_project_rec.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14441 THEN
14442 --bug 2955326
14443
14444 l_statement := l_statement ||
14445 ' FUNDING_RATE_DATE_CODE = '||''''||
14446 RTRIM(p_project_in.funding_rate_date_code)||''''||',';
14447
14448 l_statement := l_statement ||
14449 ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14450 l_b_fndng_rt_dt_cd_flag := 'Y';
14451 --end bug 2955326
14452 l_update_yes_flag := 'Y';
14453 END IF;
14454 END IF;
14455
14456 IF p_project_in.funding_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14457 AND p_project_in.funding_rate_type IS NOT NULL THEN
14458 IF NVL(p_project_in.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14459 <> NVL(l_project_rec.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14460 THEN
14461 --bug 2955326
14462
14463 l_statement := l_statement ||
14464 ' FUNDING_RATE_TYPE = '||''''||
14465 RTRIM(p_project_in.funding_rate_type)||''''||',';
14466
14467 l_statement := l_statement ||
14468 ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14469 l_b_fnding_rt_type_flag := 'Y';
14470 --end bug 2955326
14471 l_update_yes_flag := 'Y';
14472 END IF;
14473 END IF;
14474 */
14475 -- Bug 6144566: Changes end
14476
14477 IF p_project_in.baseline_funding_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14478 AND p_project_in.baseline_funding_flag IS NOT NULL THEN
14479 IF NVL(p_project_in.baseline_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14480 <> NVL(l_project_rec.baseline_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14481 THEN
14482 --bug 2955326
14483 /*
14484 l_statement := l_statement ||
14485 ' BASELINE_FUNDING_FLAG = '||''''||
14486 RTRIM(p_project_in.baseline_funding_flag)||''''||',';
14487 */
14488 l_statement := l_statement ||
14489 ' BASELINE_FUNDING_FLAG = :bsln_fnding_flag ,';
14490 l_b_bsln_fnding_flag := 'Y';
14491 --end bug 2955326
14492 l_update_yes_flag := 'Y';
14493 END IF;
14494 END IF;
14495
14496 IF p_project_in.projfunc_cost_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14497 AND p_project_in.projfunc_cost_rate_type IS NOT NULL THEN
14498 IF NVL(p_project_in.projfunc_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14499 <> NVL(l_project_rec.projfunc_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14500 THEN
14501 --bug 2955326
14502 /*
14503 l_statement := l_statement ||
14504 ' PROJFUNC_COST_RATE_TYPE = '||''''||
14505 RTRIM(p_project_in.projfunc_cost_rate_type)||''''||',';
14506 */
14507 l_statement := l_statement ||
14508 ' PROJFUNC_COST_RATE_TYPE = :projfnc_cost_rate_type ,';
14509 l_b_prjfnc_cst_rt_tp_flag := 'Y';
14510 --end bug 2955326
14511 l_update_yes_flag := 'Y';
14512 END IF;
14513 END IF;
14514
14515 IF p_project_in.inv_by_bill_trans_curr_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14516 AND p_project_in.inv_by_bill_trans_curr_flag IS NOT NULL THEN
14517 IF NVL(p_project_in.inv_by_bill_trans_curr_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14518 <> NVL(l_project_rec.inv_by_bill_trans_curr_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14519 THEN
14520 --bug 2955326
14521 /*
14522 l_statement := l_statement ||
14523 ' INV_BY_BILL_TRANS_CURR_FLAG = '||''''||
14524 RTRIM(p_project_in.inv_by_bill_trans_curr_flag)||''''||',';
14525 */
14526 l_statement := l_statement ||
14527 ' INV_BY_BILL_TRANS_CURR_FLAG = :inv_by_bil_txn_cur_flag ,';
14528 l_b_inv_bill_txn_cur_flag := 'Y';
14529 --end bug 2955326
14530 l_update_yes_flag := 'Y';
14531 END IF;
14532 END IF;
14533
14534 -- Bug 6144566: Changes start
14535 /*
14536 IF p_project_in.multi_currency_billing_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14537 AND p_project_in.multi_currency_billing_flag IS NOT NULL THEN
14538 IF NVL(p_project_in.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14539 <> NVL(l_project_rec.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14540 THEN
14541 --bug 2955326
14542
14543 l_statement := l_statement ||
14544 ' MULTI_CURRENCY_BILLING_FLAG = '||''''||
14545 RTRIM(p_project_in.multi_currency_billing_flag)||''''||',';
14546
14547 l_statement := l_statement ||
14548 ' MULTI_CURRENCY_BILLING_FLAG = :multi_crncy_bil_flag ,';
14549 l_b_multi_crncy_bil_flag := 'Y';
14550 --end bug 2955326
14551 l_update_yes_flag := 'Y';
14552 END IF;
14553 END IF;
14554
14555 IF p_project_in.project_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14556 AND p_project_in.project_bil_rate_date IS NOT NULL THEN
14557 IF NVL(p_project_in.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14558 <> NVL(l_project_rec.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14559 THEN
14560 --bug 2955326
14561
14562 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE = to_date('''||
14563 to_char(p_project_in.project_bil_rate_date,'YYYY/MM/DD')||
14564 ''', ''YYYY/MM/DD''),';
14565
14566 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14567 l_b_prj_bil_rt_dt_flag := 'Y';
14568 --end bug 2955326
14569 l_update_yes_flag := 'Y';
14570 END IF;
14571 END IF;
14572
14573 IF p_project_in.projfunc_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14574 AND p_project_in.projfunc_bil_rate_date IS NOT NULL THEN
14575 IF NVL(p_project_in.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14576 <> NVL(l_project_rec.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14577 THEN
14578 --bug 2955326
14579
14580 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE = to_date('''||
14581 to_char(p_project_in.projfunc_bil_rate_date,'YYYY/MM/DD')||
14582 ''', ''YYYY/MM/DD''),';
14583
14584 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14585 l_b_prjfnc_bil_rt_dt_flag := 'Y';
14586 --end bug 2955326
14587 l_update_yes_flag := 'Y';
14588 END IF;
14589 END IF;
14590
14591 IF p_project_in.funding_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14592 AND p_project_in.funding_rate_date IS NOT NULL THEN
14593 IF NVL(p_project_in.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14594 <> NVL(l_project_rec.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14595 THEN
14596 --bug 2955326
14597
14598 l_statement := l_statement || ' FUNDING_RATE_DATE = to_date('''||
14599 to_char(p_project_in.funding_rate_date,'YYYY/MM/DD')||
14600 ''', ''YYYY/MM/DD''),';
14601
14602 l_statement := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14603 l_b_fnding_rt_dt_flag := 'Y';
14604 --end bug 2955326
14605 l_update_yes_flag := 'Y';
14606 END IF;
14607 END IF;
14608 */
14609 -- Bug 6144566: Changes end
14610
14611 IF p_project_in.projfunc_cost_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14612 AND p_project_in.projfunc_cost_rate_date IS NOT NULL THEN
14613 IF NVL(p_project_in.projfunc_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14614 <> NVL(l_project_rec.projfunc_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14615 THEN
14616 --bug 2955326
14617 /*
14618 l_statement := l_statement || ' PROJFUNC_COST_RATE_DATE = to_date('''||
14619 to_char(p_project_in.projfunc_cost_rate_date,'YYYY/MM/DD')||
14620 ''', ''YYYY/MM/DD''),';
14621 */
14622 l_statement := l_statement || ' PROJFUNC_COST_RATE_DATE = :prjfnc_cst_rt_date ,';
14623 l_b_prjfnc_cst_rt_dt_flag := 'Y';
14624 --end bug 2955326
14625 l_update_yes_flag := 'Y';
14626 END IF;
14627 END IF;
14628
14629 --Sakthi MCB
14630 --Sakthi Structure
14631 IF p_project_in.assign_precedes_task <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14632 AND p_project_in.assign_precedes_task IS NOT NULL THEN
14633 IF NVL(p_project_in.assign_precedes_task, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14634 <> NVL(l_project_rec.assign_precedes_task, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14635 THEN
14636 --bug 2955326
14637 /*
14638 l_statement := l_statement ||
14639 ' ASSIGN_PRECEDES_TASK = '||''''||
14640 RTRIM(p_project_in.assign_precedes_task)||''''||',';
14641 */
14642 l_statement := l_statement ||
14643 ' ASSIGN_PRECEDES_TASK = :asgn_prec_tsk_flg ,';
14644 l_b_asgn_prec_tsk_flag := 'Y';
14645 --end bug 2955326
14646 l_update_yes_flag := 'Y';
14647 END IF;
14648 END IF;
14649
14650 IF p_project_in.split_cost_from_workplan_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14651 AND p_project_in.split_cost_from_workplan_flag IS NOT NULL THEN
14652 IF NVL(p_project_in.split_cost_from_workplan_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14653 <> NVL(l_project_rec.split_cost_from_workplan_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14654 THEN
14655 --bug 2955326
14656 /*
14657 l_statement := l_statement ||
14658 ' SPLIT_COST_FROM_WORKPLAN_FLAG = '||''''||
14659 RTRIM(p_project_in.split_cost_from_workplan_flag)||''''||',';
14660 */
14661 l_statement := l_statement ||
14662 ' SPLIT_COST_FROM_WORKPLAN_FLAG = :splt_cst_fm_wp_flag ,';
14663 l_b_splt_cst_fm_wp_flag := 'Y';
14664 --end bug 2955326
14665 l_update_yes_flag := 'Y';
14666 END IF;
14667 END IF;
14668
14669 IF p_project_in.split_cost_from_bill_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14670 AND p_project_in.split_cost_from_bill_flag IS NOT NULL THEN
14671 IF NVL(p_project_in.split_cost_from_bill_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14672 <> NVL(l_project_rec.split_cost_from_bill_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14673 THEN
14674 --bug 2955326
14675 /*
14676 l_statement := l_statement ||
14677 ' SPLIT_COST_FROM_BILL_FLAG = '||''''||
14678 RTRIM(p_project_in.split_cost_from_bill_flag)||''''||',';
14679 */
14680 l_statement := l_statement ||
14681 ' SPLIT_COST_FROM_BILL_FLAG = :splt_cst_fm_bill_flag ,';
14682 l_b_splt_cst_fm_bill_flag := 'Y';
14683 --end bug 2955326
14684 l_update_yes_flag := 'Y';
14685 END IF;
14686 END IF;
14687
14688 --Sakthi Structure
14689 --Advertisement
14690
14691 IF p_project_in.adv_action_set_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14692 AND p_project_in.adv_action_set_id IS NOT NULL THEN
14693 IF NVL(p_project_in.adv_action_set_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14694 <> NVL(l_project_rec.adv_action_set_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14695 THEN
14696 --bug 2955326
14697 /*
14698 l_statement := l_statement || ' ADV_ACTION_SET_ID = '||
14699 TO_CHAR(p_project_in.adv_action_set_id)||',';
14700 */
14701 l_statement := l_statement || ' ADV_ACTION_SET_ID = :adv_act_set_id ,';
14702 l_b_adv_act_set_id_flag := 'Y';
14703 --end bug 2955326
14704 l_update_yes_flag := 'Y';
14705 END IF;
14706 END IF;
14707
14708 IF p_project_in.start_adv_action_set_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14709 AND p_project_in.start_adv_action_set_flag IS NOT NULL THEN
14710 IF NVL(p_project_in.start_adv_action_set_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14711 <> NVL(l_project_rec.start_adv_action_set_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14712 THEN
14713 --bug 2955326
14714 /*
14715 l_statement := l_statement ||
14716 ' START_ADV_ACTION_SET_FLAG = '||''''||
14717 RTRIM(p_project_in.start_adv_action_set_flag)||''''||',';
14718 */
14719 l_statement := l_statement ||
14720 ' START_ADV_ACTION_SET_FLAG = :st_adv_act_set_flag ,';
14721 l_b_st_adv_act_set_flag := 'Y';
14722 --end bug 2955326
14723 l_update_yes_flag := 'Y';
14724 END IF;
14725 END IF;
14726
14727 --Advertisement
14728
14729 --Project Setup
14730
14731 IF p_project_in.priority_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14732 AND p_project_in.priority_code IS NOT NULL THEN
14733 IF NVL(p_project_in.priority_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14734 <> NVL(l_project_rec.priority_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14735 THEN
14736 --bug 2955326
14737 /*
14738 l_statement := l_statement ||
14739 ' PRIORITY_CODE = '||''''||
14740 RTRIM(p_project_in.priority_code)||''''||',';
14741 */
14742
14743 -- 5191417 validate passed priority_code value
14744
14745 OPEN priority_code_csr(p_project_in.priority_code);
14746 FETCH priority_code_csr into l_valid_prio_code;
14747 CLOSE priority_code_csr;
14748
14749 -- if not valid, throw error message
14750
14751 IF l_valid_prio_code = 'N' THEN
14752
14753 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14754
14755 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
14756 ,p_msg_name => 'PA_INVALID_PRIORITY_CODE');
14757
14758 l_return_status := FND_API.G_RET_STS_ERROR;
14759
14760 RAISE FND_API.G_EXC_ERROR;
14761
14762 END IF;
14763
14764 END IF;
14765
14766 -- 5191417 end
14767
14768 l_statement := l_statement ||
14769 ' PRIORITY_CODE = :pri_code ,';
14770 l_b_pri_code_flag := 'Y';
14771 --end bug 2955326
14772 l_update_yes_flag := 'Y';
14773 END IF;
14774 END IF;
14775
14776 --Project Setup
14777
14778 --Retention
14779 IF p_project_in.retn_billing_inv_format_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14780 AND p_project_in.retn_billing_inv_format_id IS NOT NULL THEN
14781 IF NVL(p_project_in.retn_billing_inv_format_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14782 <> NVL(l_project_rec.retn_billing_inv_format_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14783 THEN
14784 --bug 2955326
14785 /*
14786 l_statement := l_statement || ' RETN_BILLING_INV_FORMAT_ID = '||
14787 TO_CHAR(p_project_in.retn_billing_inv_format_id)||',';
14788 */
14789 l_statement := l_statement || ' RETN_BILLING_INV_FORMAT_ID = :retn_bil_inv_fmt_id ,';
14790 l_b_retn_bil_inv_fmt_id_flg := 'Y';
14791 --end bug 2955326
14792 l_update_yes_flag := 'Y';
14793 END IF;
14794 END IF;
14795
14796 IF p_project_in.retn_accounting_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14797 AND p_project_in.retn_accounting_flag IS NOT NULL THEN
14798 IF NVL(p_project_in.retn_accounting_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14799 <> NVL(l_project_rec.retn_accounting_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14800 THEN
14801 --bug 2955326
14802 /*
14803 l_statement := l_statement ||
14804 ' RETN_ACCOUNTING_FLAG = '||''''||
14805 RTRIM(p_project_in.retn_accounting_flag)||''''||',';
14806 */
14807 l_statement := l_statement ||
14808 ' RETN_ACCOUNTING_FLAG = :retn_acnt_flag ,';
14809 l_b_retn_acnt_flag := 'Y';
14810 --end bug 2955326
14811 l_update_yes_flag := 'Y';
14812 END IF;
14813 END IF;
14814 --Retention
14815
14816 -- anlee
14817 -- patchset K changes
14818 IF p_project_in.revaluate_funding_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14819 AND p_project_in.revaluate_funding_flag IS NOT NULL THEN
14820 IF NVL(p_project_in.revaluate_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14821 <> NVL(l_project_rec.revaluate_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14822 THEN
14823 /*Bug #2891513 Added the below code for bug 2891513*/
14824 IF p_project_in.include_gains_losses_flag = 'N'
14825 THEN
14826 --bug 2955326
14827 /*
14828 l_statement := l_statement ||
14829 ' revaluate_funding_flag = '||''''||
14830 RTRIM(p_project_in.revaluate_funding_flag)||''''||',';
14831 */
14832 l_statement := l_statement ||
14833 ' revaluate_funding_flag = :reval_fndng_flg ,';
14834 l_b_reval_fndng_flag := 'Y';
14835 --end bug 2955326
14836 l_update_yes_flag := 'Y';
14837 ELSE
14838
14839 IF ((p_project_in.include_gains_losses_flag = 'Y' OR l_project_rec.include_gains_losses_flag ='Y')
14840 AND (p_project_in.revaluate_funding_flag = 'N'))
14841 THEN
14842 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14843 THEN
14844 pa_interface_utils_pub.map_new_amg_msg
14845 ( p_old_message_code => 'PA_CANT_UPDATE_REV_FUN'
14846 ,p_msg_attribute => 'CHANGE'
14847 ,p_resize_flag => 'Y'
14848 ,p_msg_context => 'PROJ'
14849 ,p_attribute1 => l_project_rec.segment1
14850 ,p_attribute2 => ''
14851 ,p_attribute3 => ''
14852 ,p_attribute4 => ''
14853 ,p_attribute5 => '');
14854 END IF;
14855 RAISE FND_API.G_EXC_ERROR;
14856 /*bug 2891513 -Code ends*/
14857 ELSE
14858 l_statement := l_statement ||
14859 ' revaluate_funding_flag = :reval_fndng_flg ,';
14860 l_b_reval_fndng_flag := 'Y';
14861 l_update_yes_flag := 'Y';
14862 END IF;
14863 END IF;
14864 END IF;
14865 END IF;
14866
14867 -- msundare
14868 IF p_project_in.security_level <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14869 AND p_project_in.security_level IS NOT NULL THEN
14870 IF NVL(p_project_in.security_level, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14871 <> NVL(l_project_rec.security_level, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14872 THEN
14873 --bug 2955326
14874 /*
14875 l_statement := l_statement ||
14876 ' security_level = '||''''||
14877 RTRIM(p_project_in.security_level)||''''||',';
14878 */
14879
14880 --Included logic here to validate the Project Security Level
14881 --For Bug#5191699.
14882 --If the user passes an invalid value ,we need to handle that as,
14883 --security level can take values only
14884 --from the lookup.Hence we dont update and the existing value will remain.
14885
14886 OPEN cur_check_sec_level(p_project_in.security_level);
14887 FETCH cur_check_sec_level INTO l_check_sec_level;
14888 CLOSE cur_check_sec_level;
14889
14890 IF l_check_sec_level = 'Y' THEN
14891 -- A Valid value has been passed hecne update
14892
14893 l_statement := l_statement ||
14894 ' security_level = :sec_lvl ,';
14895 l_b_sec_lvl_flag := 'Y';
14896 --end bug 2955326
14897 l_update_yes_flag := 'Y';
14898 ELSE
14899 l_b_sec_lvl_flag := 'N';
14900 END IF; -- End of changes Bug#5191699.
14901 END IF;
14902 END IF;
14903
14904 IF p_project_in.labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14905 AND p_project_in.labor_disc_reason_code IS NOT NULL THEN
14906 IF NVL(p_project_in.labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14907 THEN
14908 --bug 2955326
14909 /*
14910 l_statement := l_statement ||
14911 ' labor_disc_reason_code = '||''''||
14912 RTRIM(p_project_in.labor_disc_reason_code)||''''||',';
14913 */
14914 l_statement := l_statement ||
14915 ' labor_disc_reason_code = :lbr_disc_rsn_code ,';
14916 l_b_lbr_disc_rsn_code_flg := 'Y';
14917 --end bug 2955326
14918 l_update_yes_flag := 'Y';
14919 END IF;
14920 END IF;
14921
14922 IF p_project_in.non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14923 AND p_project_in.labor_disc_reason_code IS NOT NULL THEN
14924 IF NVL(p_project_in.non_labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.non_labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14925 THEN
14926 --bug 2955326
14927 /*
14928 l_statement := l_statement ||
14929 ' non_labor_disc_reason_code = '||''''||
14930 RTRIM(p_project_in.non_labor_disc_reason_code)||''''||',';
14931 */
14932 l_statement := l_statement ||
14933 ' non_labor_disc_reason_code = :nn_lbr_disc_rsn_cd ,';
14934 l_b_nn_lbr_disc_rsn_cd_flg := 'Y';
14935 --end bug 2955326
14936 l_update_yes_flag := 'Y';
14937 END IF;
14938 END IF;
14939
14940 -- End msundare
14941
14942 IF p_project_in.include_gains_losses_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14943 AND p_project_in.include_gains_losses_flag IS NOT NULL THEN
14944 IF NVL(p_project_in.include_gains_losses_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14945 <> NVL(l_project_rec.include_gains_losses_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14946 THEN
14947 /*Added the below condition for bug 2891513*/
14948 IF (l_include_gains_and_losses = 'Y' AND
14949 (p_project_in.revaluate_funding_flag = 'Y' OR l_project_rec.revaluate_funding_flag ='Y'))
14950 THEN
14951 --bug 2955326
14952 /*
14953 l_statement := l_statement ||
14954 ' include_gains_losses_flag = '||''''||
14955 RTRIM(p_project_in.include_gains_losses_flag)||''''||',';
14956 */
14957 l_statement := l_statement ||
14958 ' include_gains_losses_flag = :inc_gn_los_flg ,';
14959 l_b_inc_gn_los_flag := 'Y';
14960 --end bug 2955326
14961 l_update_yes_flag := 'Y';
14962 /*Added the else part of the code for bug 2891513*/
14963 ELSE
14964 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
14965 THEN
14966 pa_interface_utils_pub.map_new_amg_msg
14967 ( p_old_message_code => 'PA_CANT_UPDATE_GAIN_LOSSES'
14968 ,p_msg_attribute => 'CHANGE'
14969 ,p_resize_flag => 'Y'
14970 ,p_msg_context => 'PROJ'
14971 ,p_attribute1 => l_project_rec.segment1
14972 ,p_attribute2 => ''
14973 ,p_attribute3 => ''
14974 ,p_attribute4 => ''
14975 ,p_attribute5 => '');
14976 END IF;
14977 RAISE FND_API.G_EXC_ERROR;
14978 END IF;
14979 END IF;
14980 END IF;
14981
14982 -- End of changes
14983
14984 --PA L Changes bug 2872708
14985 IF p_project_in.asset_allocation_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14986 AND p_project_in.asset_allocation_method IS NOT NULL THEN
14987 IF NVL(p_project_in.asset_allocation_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14988 <> NVL(l_project_rec.asset_allocation_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14989 THEN
14990 --bug 2955326
14991 /*
14992 l_statement := l_statement ||
14993 ' asset_allocation_method = '||''''||
14994 RTRIM(p_project_in.asset_allocation_method)||''''||',';
14995 */
14996
14997 --From patchset L we need to perform vlaidation for all new columns added in AMG also.
14998 --Call validation API here
14999 PA_IMPL_OPTIONS_PUB.check_asset_alloc_method(
15000 p_asset_allocation_method => RTRIM(p_project_in.asset_allocation_method)
15001 ,p_amg_segment1 => l_amg_segment1
15002 ,x_msg_count => l_msg_count
15003 ,x_msg_data => l_msg_data
15004 ,x_return_status => l_return_status
15005 );
15006 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15007 THEN
15008 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15009
15010 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15011 THEN
15012 p_multiple_task_msg := 'F';
15013 RAISE FND_API.G_EXC_ERROR;
15014 END IF;
15015
15016 l_statement := l_statement ||
15017 ' asset_allocation_method = :as_alloc_mth ,';
15018 l_b_as_alloc_mth_fg := 'Y';
15019 --end bug 2955326
15020 l_update_yes_flag := 'Y';
15021 END IF;
15022 END IF;
15023
15024 IF p_project_in.capital_event_processing <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15025 AND p_project_in.capital_event_processing IS NOT NULL THEN
15026 IF NVL(p_project_in.capital_event_processing, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15027 <> NVL(l_project_rec.capital_event_processing, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15028 THEN
15029 --bug 2955326
15030 /*
15031 l_statement := l_statement ||
15032 ' capital_event_processing = '||''''||
15033 RTRIM(p_project_in.capital_event_processing)||''''||',';
15034 */
15035 --Call validation API here
15036 PA_IMPL_OPTIONS_PUB.check_cap_event_method(
15037 p_capital_event_processing => RTRIM(p_project_in.capital_event_processing)
15038 ,p_amg_segment1 => l_amg_segment1
15039 ,x_msg_count => l_msg_count
15040 ,x_msg_data => l_msg_data
15041 ,x_return_status => l_return_status
15042 );
15043 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15044 THEN
15045 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15046
15047 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15048 THEN
15049 p_multiple_task_msg := 'F';
15050 RAISE FND_API.G_EXC_ERROR;
15051 END IF;
15052
15053 l_statement := l_statement ||
15054 ' capital_event_processing = :cp_evt_proc,';
15055 l_b_cp_evt_proc_fg := 'Y';
15056 --end bug 2955326
15057 l_update_yes_flag := 'Y';
15058 END IF;
15059 END IF;
15060
15061 IF p_project_in.cint_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15062 AND p_project_in.cint_rate_sch_id IS NOT NULL THEN
15063 IF NVL(p_project_in.cint_rate_sch_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15064 <> NVL(l_project_rec.cint_rate_sch_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15065 THEN
15066 --bug 2955326
15067 /*
15068 l_statement := l_statement ||
15069 ' cint_rate_sch_id = '||''''||
15070 RTRIM(p_project_in.cint_rate_sch_id)||''''||',';
15071 */
15072 --Call validation API here
15073 PA_IMPL_OPTIONS_PUB.check_cint_schedule(
15074 p_cint_rate_sch_id => p_project_in.cint_rate_sch_id
15075 ,p_amg_segment1 => l_amg_segment1
15076 ,x_msg_count => l_msg_count
15077 ,x_msg_data => l_msg_data
15078 ,x_return_status => l_return_status
15079 );
15080 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15081 THEN
15082 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15083
15084 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15085 THEN
15086 p_multiple_task_msg := 'F';
15087 RAISE FND_API.G_EXC_ERROR;
15088 END IF;
15089
15090 l_statement := l_statement ||
15091 ' cint_rate_sch_id = :cint_rt_sch ,';
15092 l_b_cint_rt_sch_id_fg := 'Y';
15093 --end bug 2955326
15094 l_update_yes_flag := 'Y';
15095 END IF;
15096 END IF;
15097
15098 IF p_project_in.cint_eligible_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15099 AND p_project_in.cint_eligible_flag IS NOT NULL THEN
15100 IF NVL(p_project_in.cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15101 <> NVL(l_project_rec.cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15102 THEN
15103 --bug 2955326
15104 /*
15105 l_statement := l_statement ||
15106 ' cint_eligible_flag = '||''''||
15107 RTRIM(p_project_in.cint_eligible_flag)||''''||',';
15108 */
15109 l_statement := l_statement ||
15110 ' cint_eligible_flag = :cint_elg_fg ,';
15111 l_b_cint_elg_fg := 'Y';
15112 --end bug 2955326
15113 l_update_yes_flag := 'Y';
15114 END IF;
15115 END IF;
15116
15117 IF p_project_in.cint_stop_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
15118 AND p_project_in.cint_stop_date IS NOT NULL THEN
15119 IF NVL(p_project_in.cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
15120 <> NVL(l_project_rec.cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
15121 THEN
15122 --bug 2955326
15123 /*
15124 l_statement := l_statement ||
15125 ' cint_stop_date = '||''''||
15126 RTRIM(p_project_in.cint_stop_date)||''''||',';
15127 */
15128 l_statement := l_statement ||
15129 ' cint_stop_date = :cint_stp_dt ,';
15130 l_b_cint_stp_dt_fg := 'Y';
15131 --end bug 2955326
15132 l_update_yes_flag := 'Y';
15133 END IF;
15134 END IF;
15135 --End PA L changes
15136
15137 ------------------- FP_M changes begin (venkat) 2 -----------------------------------------------
15138
15139 /* ------ Begin Commented for now as the column sys_program_flag not exist in the pa_projects -----
15140
15141 IF (p_project_in.sys_program_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15142 (p_project_in.sys_program_flag IS NOT NULL)
15143 THEN
15144 IF NVL(p_project_in.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15145 NVL(l_project_rec.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15146 THEN
15147 l_statement := l_statement || ' sys_program_flag = :sys_program_flg ,';
15148 l_sys_program_flag := 'Y';
15149 l_update_yes_flag := 'Y';
15150 END IF;
15151 END IF;
15152 ---------------------------------End Comment----------------------------------------------------- */
15153
15154 -- Bug # 5072032.
15155
15156 IF (p_project_in.sys_program_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15157 (p_project_in.sys_program_flag IS NOT NULL)
15158 THEN
15159 IF NVL(p_project_in.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15160 NVL(l_project_rec.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15161 THEN
15162 l_statement := l_statement || ' sys_program_flag = :sys_program_flag ,';
15163 l_b_sys_program_flag_fg := 'Y';
15164 l_update_yes_flag := 'Y';
15165 END IF;
15166 END IF;
15167
15168 IF (p_project_in.allow_multi_program_rollup <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15169 (p_project_in.allow_multi_program_rollup IS NOT NULL)
15170 THEN
15171 IF NVL(p_project_in.allow_multi_program_rollup, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15172 NVL(l_project_rec.allow_multi_program_rollup, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15173 THEN
15174 l_statement := l_statement || ' allow_multi_program_rollup = :allow_multi_program_rollup ,';
15175 l_b_allow_multi_prog_rollup_fg := 'Y';
15176 l_update_yes_flag := 'Y';
15177 END IF;
15178 END IF;
15179
15180 IF l_debug_mode = 'Y' THEN
15181 pa_debug.write(l_module_name,'l_b_sys_program_flag_fg=' || l_b_sys_program_flag_fg,3);
15182 pa_debug.write(l_module_name,'l_b_allow_multi_prog_rollup_fg='||l_b_allow_multi_prog_rollup_fg,3);
15183 END IF;
15184
15185 IF l_b_sys_program_flag_fg = 'Y' OR
15186 l_b_allow_multi_prog_rollup_fg = 'Y'
15187 THEN
15188
15189 IF l_debug_mode = 'Y' THEN
15190 pa_debug.write(l_module_name,'Before Calling SETUP_PROJECT_AS_PROGRAM in Update_Project flow' ,3);
15191 pa_debug.write(l_module_name,'l_project_id='||l_project_id,3);
15192 pa_debug.write(l_module_name,'p_project_in.sys_program_flag='||p_project_in.sys_program_flag,3);
15193 pa_debug.write(l_module_name,'p_project_in.allow_multi_program_rollup='||p_project_in.allow_multi_program_rollup,3);
15194 END IF;
15195
15196 PA_PROJECT_PUB.SETUP_PROJECT_AS_PROGRAM(
15197 p_api_version => p_api_version_number
15198 , p_init_msg_list => p_init_msg_list
15199 , p_commit => p_commit
15200 , p_max_msg_count => p_msg_count
15201 , p_project_id => l_project_id -- Project Id is already derived/converted therfore no need to pass project reference to this API.
15202 , p_sys_program_flag => p_project_in.sys_program_flag
15203 , p_allow_multi_program_rollup => p_project_in.allow_multi_program_rollup
15204 , x_msg_count => l_msg_count
15205 , x_msg_data => l_msg_data
15206 , x_return_status => l_return_status
15207 );
15208
15209 IF l_debug_mode = 'Y' THEN
15210 pa_debug.write(l_module_name,'After Calling SETUP_PROJECT_AS_PROGRAM in Update_Project flow' ,3);
15211 pa_debug.write(l_module_name,'l_project_id='||l_project_id,3);
15212 pa_debug.write(l_module_name,'l_return_status='||l_return_status,3);
15213 END IF;
15214
15215 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15216 THEN
15217 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15218 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15219 THEN
15220 p_multiple_task_msg := 'F';
15221 RAISE FND_API.G_EXC_ERROR;
15222 END IF;
15223
15224 END IF;
15225
15226 -- End of Bug # 5072032.
15227
15228 IF (p_project_in.enable_top_task_customer_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15229 (p_project_in.enable_top_task_customer_flag IS NOT NULL)
15230 THEN
15231 IF NVL(p_project_in.enable_top_task_customer_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15232 NVL(l_project_rec.enable_top_task_customer_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15233 THEN
15234 --Bug 3279981 Review
15235 IF p_project_in.enable_top_task_customer_flag IN ('Y','N') THEN
15236 -- Function Security Check
15237 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
15238 ( p_api_version_number => p_api_version_number,
15239 p_responsibility_id => l_resp_id,
15240 p_function_name => 'PA_PAXPREPR_CUST_TOP_TASK',
15241 p_msg_count => l_msg_count,
15242 p_msg_data => l_msg_data,
15243 p_return_status => l_return_status,
15244 p_function_allowed => l_function_allowed);
15245 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15246 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15247 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
15248 RAISE FND_API.G_EXC_ERROR;
15249 END IF;
15250
15251 IF l_function_allowed = 'N' THEN
15252 pa_interface_utils_pub.map_new_amg_msg
15253 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
15254 ,p_msg_attribute => 'CHANGE'
15255 ,p_resize_flag => 'Y'
15256 ,p_msg_context => 'GENERAL'
15257 ,p_attribute1 => ''
15258 ,p_attribute2 => ''
15259 ,p_attribute3 => ''
15260 ,p_attribute4 => ''
15261 ,p_attribute5 => '');
15262 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15263 RAISE FND_API.G_EXC_ERROR;
15264 END IF;
15265 ELSE
15266 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15267 pa_interface_utils_pub.map_new_amg_msg
15268 ( p_old_message_code => 'PA_TOP_TASK_CUST_FLAG_INVALID'
15269 ,p_msg_attribute => 'NOCHANGE'--Changed to NOCHANGE for Bug- 4762153
15270 ,p_resize_flag => 'N'
15271 ,p_msg_context => 'PROJ'
15272 ,p_attribute1 => l_project_rec.segment1
15273 ,p_attribute2 => ''
15274 ,p_attribute3 => ''
15275 ,p_attribute4 => ''
15276 ,p_attribute5 => '');
15277 END IF;
15278 RAISE FND_API.G_EXC_ERROR;
15279 END IF;
15280
15281 IF ( PA_BILLING_CORE.Update_Top_Task_Cust_Flag( l_project_id ) = 'Y' ) THEN
15282 l_statement := l_statement || ' enable_top_task_customer_flag = :enable_top_task_cust_flg ,';
15283 l_enable_top_task_cust_flag := 'Y';
15284 l_update_yes_flag := 'Y';
15285 ELSE--Added by rtarway for BUG 4168069
15286 --Add the error message in the pl/sql stack and raise exception
15287 PA_UTILS.ADD_MESSAGE(
15288 p_app_short_name => 'PA',
15289 p_msg_name =>'PA_NO_TOP_TASK_CUST_ALLOWED'
15290 );
15291 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15292 RAISE FND_API.G_EXC_ERROR;
15293 END IF;
15294 --Bug 3279981 Review
15295 END IF;
15296 END IF;
15297
15298 IF (p_project_in.enable_top_task_inv_mth_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15299 (p_project_in.enable_top_task_inv_mth_flag IS NOT NULL)
15300 THEN
15301 IF NVL(p_project_in.enable_top_task_inv_mth_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15302 NVL(l_project_rec.enable_top_task_inv_mth_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15303 THEN
15304 --Bug 3279981 Review
15305 IF p_project_in.enable_top_task_inv_mth_flag IN ('Y','N') THEN
15306 -- Function Security Check
15307 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
15308 ( p_api_version_number => p_api_version_number,
15309 p_responsibility_id => l_resp_id,
15310 p_function_name => 'PA_PAXPREPR_INV_MTH_TOP_TASK',
15311 p_msg_count => l_msg_count,
15312 p_msg_data => l_msg_data,
15313 p_return_status => l_return_status,
15314 p_function_allowed => l_function_allowed);
15315 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15316 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15317 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
15318 RAISE FND_API.G_EXC_ERROR;
15319 END IF;
15320
15321 IF l_function_allowed = 'N' THEN
15322 pa_interface_utils_pub.map_new_amg_msg
15323 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
15324 ,p_msg_attribute => 'CHANGE'
15325 ,p_resize_flag => 'Y'
15326 ,p_msg_context => 'GENERAL'
15327 ,p_attribute1 => ''
15328 ,p_attribute2 => ''
15329 ,p_attribute3 => ''
15330 ,p_attribute4 => ''
15331 ,p_attribute5 => '');
15332 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15333 RAISE FND_API.G_EXC_ERROR;
15334 END IF;
15335 ELSE
15336 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15337 pa_interface_utils_pub.map_new_amg_msg
15338 ( p_old_message_code => 'PA_TT_INV_MTH_FLAG_INVALID'
15339 ,p_msg_attribute => 'CHANGE'
15340 ,p_resize_flag => 'N'
15341 ,p_msg_context => 'PROJ'
15342 ,p_attribute1 => l_project_rec.segment1
15343 ,p_attribute2 => ''
15344 ,p_attribute3 => ''
15345 ,p_attribute4 => ''
15346 ,p_attribute5 => '');
15347 END IF;
15348 RAISE FND_API.G_EXC_ERROR;
15349 END IF;
15350
15351 IF ( PA_BILLING_CORE.Update_Top_Task_Inv_Mthd_Flag( l_project_id ) = 'Y'
15352 AND l_project_rec.invoice_method <> 'COST' ) THEN
15353 l_statement := l_statement || ' enable_top_task_inv_mth_flag = :enable_top_task_inv_mth_flg ,';
15354 l_enable_top_task_inv_mth_flag := 'Y';
15355 l_update_yes_flag := 'Y';
15356 ELSE --Added for Bug 4193730
15357 PA_UTILS.ADD_MESSAGE(
15358 p_app_short_name => 'PA',
15359 p_msg_name => 'PA_INV_MTH_TT_NOT_SET'
15360 );
15361 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15362 RAISE FND_API.G_EXC_ERROR;
15363 END IF;
15364 --Bug 3279981 Review
15365 END IF;
15366 END IF;
15367
15368 IF (p_project_in.projfunc_attr_for_ar_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15369 (p_project_in.projfunc_attr_for_ar_flag IS NOT NULL)
15370 THEN
15371 IF NVL(p_project_in.projfunc_attr_for_ar_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15372 NVL(l_project_rec.projfunc_attr_for_ar_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15373 THEN
15374 l_statement := l_statement || ' projfunc_attr_for_ar_flag = :projfunc_attr_for_ar_flg ,';
15375 l_projfunc_attr_for_ar_flag := 'Y';
15376 l_update_yes_flag := 'Y';
15377 END IF;
15378 END IF;
15379
15380 /* Added the following code for Bug 6248841 to update the cc_tax_task_id */
15381
15382 IF (p_project_in.cc_tax_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15383 AND p_project_in.cc_tax_task_id IS NOT NULL)
15384 THEN
15385
15386 BEGIN
15387 SELECT task_number INTO l_cc_tax_task_numb
15388 FROM pa_tasks
15389 WHERE project_id = l_project_id
15390 AND task_id = p_project_in.cc_tax_task_id;
15391
15392 l_statement := l_statement || ' CC_TAX_TASK_ID = :prj_cc_tax_task_id,';
15393 l_b_cc_tax_task_id := 'Y';
15394 l_update_yes_flag := 'Y';
15395 EXCEPTION
15396 WHEN NO_DATA_FOUND THEN
15397 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15398 THEN
15399 pa_interface_utils_pub.map_new_amg_msg
15400 ( p_old_message_code => 'PA_INVALID_TAX_TASK_ID'
15401 ,p_msg_attribute => 'CHANGE'
15402 ,p_resize_flag => 'Y'
15403 ,p_msg_context => 'PROJ'
15404 ,p_attribute1 => l_project_rec.segment1
15405 ,p_attribute2 => ''
15406 ,p_attribute3 => ''
15407 ,p_attribute4 => ''
15408 ,p_attribute5 => '');
15409 END IF;
15410 RAISE FND_API.G_EXC_ERROR;
15411 END;
15412
15413 END IF;
15414
15415 -------------------- FP_M changes end (venkat) ----------------------------------------------
15416
15417 --Sunkalya federal changes bug#5511353
15418
15419
15420 IF (p_project_in.date_eff_funds_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15421 (p_project_in.date_eff_funds_flag IS NOT NULL)
15422 THEN
15423 IF NVL(p_project_in.date_eff_funds_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15424 NVL(l_project_rec.date_eff_funds_consumption, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15425 THEN
15426
15427 OPEN cur_enable_funds_flag(l_project_id);
15428 FETCH cur_enable_funds_flag INTO l_enable_funds_flag;
15429 CLOSE cur_enable_funds_flag;
15430
15431 OPEN cur_rev_inv(l_project_id);
15432 FETCH cur_rev_inv INTO l_chk_rev_inv_flag;
15433 CLOSE cur_rev_inv;
15434
15435 IF nvl(l_enable_funds_flag,'N')='N' AND p_project_in.date_eff_funds_flag ='Y' THEN
15436
15437 PA_UTILS.ADD_MESSAGE(
15438 p_app_short_name => 'PA',
15439 p_msg_name => 'PA_FUNDS_FLAG_CANT_ENABLED'
15440 );
15441 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15442 RAISE FND_API.G_EXC_ERROR;
15443 END IF;
15444
15445 IF nvl(l_chk_rev_inv_flag,'N')= 'Y' THEN
15446
15447 PA_UTILS.ADD_MESSAGE(
15448 p_app_short_name => 'PA',
15449 p_msg_name => 'PA_FUNDS_FLAG_NOT_UPDATBL'
15450 );
15451 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15452 RAISE FND_API.G_EXC_ERROR;
15453 END IF;
15454
15455 l_statement := l_statement || ' date_eff_funds_consumption = :date_eff_funds_consumption ,';
15456 l_date_eff_funds_flag := 'Y';
15457 l_update_yes_flag := 'Y';
15458 END IF;
15459 END IF;
15460
15461 --Sunkalya federal changes bug#5511353
15462
15463 /* 7508661 : EnC : Start */
15464
15465 IF (p_project_in.ar_rec_notify_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15466 (p_project_in.ar_rec_notify_flag IS NOT NULL)
15467 THEN
15468 l_statement := l_statement || ' ar_rec_notify_flag = :ar_rec_notify_flag ,';
15469 l_ar_rec_notify_flag := 'Y';
15470 End If;
15471
15472 IF (p_project_in.auto_release_pwp_inv <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15473 (p_project_in.auto_release_pwp_inv IS NOT NULL)
15474 THEN
15475 l_statement := l_statement || ' auto_release_pwp_inv = :auto_release_pwp_inv ,';
15476 l_auto_release_pwp_inv := 'Y';
15477 End If;
15478
15479 /* 7508661 : EnC : End */
15480
15481 IF l_update_yes_flag = 'Y'
15482 THEN
15483 /* Code commented and added for the bug#1752494, starts here */
15484 /*
15485 l_statement := l_statement ||
15486 ' LAST_UPDATE_DATE = '||''''||
15487 SYSDATE||''''||',';
15488 */
15489 l_statement := l_statement ||
15490 ' LAST_UPDATE_DATE = SYSDATE'||',';
15491
15492 /* Code commented and added for the bug#1752494, ends here */
15493 l_statement := l_statement ||
15494 -- ' LAST_UPDATED_BY = '||G_USER_ID||','; --bug 2955326
15495 ' LAST_UPDATED_BY = :g_usr_id ,'; --bug 2955326
15496
15497 l_statement := l_statement ||
15498 -- ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID; --2955326
15499 ' LAST_UPDATE_LOGIN = :g_login_id'; --bug 2955326
15500
15501 l_statement := l_statement ||
15502 -- ' WHERE PROJECT_ID = '|| TO_CHAR(l_project_id);
15503 ' WHERE PROJECT_ID = :prj_id'; --bug 2955326
15504
15505 l_cursor := dbms_sql.open_cursor;
15506 dbms_sql.parse(l_cursor, l_statement, dbms_sql.native);
15507
15508 --bug 2955326
15509 IF l_b_segment1_flag = 'Y' THEN
15510 DBMS_SQL.BIND_VARIABLE(l_cursor, ':segment1', RTRIM(p_project_in.pa_project_number));
15511 END IF;
15512
15513 IF l_b_proj_name_flag = 'Y' THEN
15514 DBMS_SQL.BIND_VARIABLE(l_cursor, ':project_name', RTRIM(p_project_in.project_name));
15515 END IF;
15516
15517 IF l_b_long_name_flag = 'Y' THEN
15518 DBMS_SQL.BIND_VARIABLE(l_cursor, ':long_name', RTRIM(p_project_in.long_name));
15519 END IF;
15520
15521 IF l_b_pm_proj_ref_flag = 'Y' THEN
15522 DBMS_SQL.BIND_VARIABLE(l_cursor, ':pm_project_reference', RTRIM(p_project_in.pm_project_reference));
15523 END IF;
15524
15525 IF l_b_co_org_id_flag = 'Y' THEN
15526 DBMS_SQL.BIND_VARIABLE(l_cursor, ':carrying_out_org_id', TO_CHAR(p_project_in.carrying_out_organization_id));
15527 END IF;
15528
15529 IF l_b_pub_sec_flag = 'Y' THEN
15530 DBMS_SQL.BIND_VARIABLE(l_cursor, ':public_sector_flag', p_project_in.public_sector_flag);
15531 END IF;
15532
15533 IF l_b_dist_rule_flag = 'Y' THEN
15534 DBMS_SQL.BIND_VARIABLE(l_cursor, ':dist_rule', p_project_in.distribution_rule);
15535 --Bug 3279981 Review. Added two bind variables below
15536 DBMS_SQL.BIND_VARIABLE(l_cursor, ':rev_acc_mth',
15537 substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) );
15538 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_mth',
15539 substr(p_project_in.distribution_rule, instr(p_project_in.distribution_rule,'/')+1) );
15540 END IF;
15541
15542 IF l_b_desc_flag = 'Y' THEN
15543 DBMS_SQL.BIND_VARIABLE(l_cursor, ':descrp', RTRIM(p_project_in.description));
15544 END IF;
15545
15546 IF l_b_start_date_flag = 'Y' THEN
15547 DBMS_SQL.BIND_VARIABLE(l_cursor, ':start_date', l_project_start_date);
15548 END IF;
15549
15550 IF l_b_comp_date_flag = 'Y' THEN
15551 DBMS_SQL.BIND_VARIABLE(l_cursor, ':comp_date', l_project_completion_date);
15552 END IF;
15553
15554 IF l_b_early_sd_flag = 'Y' THEN
15555 DBMS_SQL.BIND_VARIABLE(l_cursor, ':early_start_date', p_project_in.early_start_date);
15556 END IF;
15557
15558 IF l_b_early_fd_flag = 'Y' THEN
15559 DBMS_SQL.BIND_VARIABLE(l_cursor, ':early_finish_date', p_project_in.early_finish_date);
15560 END IF;
15561
15562 IF l_b_late_sd_flag = 'Y' THEN
15563 DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_start_date', p_project_in.late_start_date);
15564 END IF;
15565
15566 IF l_b_late_sd_flag = 'Y' THEN
15567 DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_start_date', p_project_in.late_start_date);
15568 END IF;
15569
15570 IF l_b_late_fd_flag = 'Y' THEN
15571 DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_finish_date', p_project_in.late_finish_date);
15572 END IF;
15573
15574 IF l_b_sch_sd_flag = 'Y' THEN
15575 DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_start_date', p_project_in.scheduled_start_date);
15576 END IF;
15577
15578 IF l_b_sch_fd_flag = 'Y' THEN
15579 DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_finish_date', p_project_in.scheduled_finish_date);
15580 END IF;
15581
15582 IF l_b_attr_cat_flag = 'Y' THEN
15583 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr_cat', RTRIM(p_project_in.attribute_category));
15584 END IF;
15585
15586 IF l_b_attr1_flag = 'Y' THEN
15587 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr1', RTRIM(p_project_in.attribute1));
15588 END IF;
15589
15590 IF l_b_attr2_flag = 'Y' THEN
15591 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr2', RTRIM(p_project_in.attribute2));
15592 END IF;
15593
15594 IF l_b_attr3_flag = 'Y' THEN
15595 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr3', RTRIM(p_project_in.attribute3));
15596 END IF;
15597
15598 IF l_b_attr4_flag = 'Y' THEN
15599 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr4', RTRIM(p_project_in.attribute4));
15600 END IF;
15601
15602 IF l_b_attr5_flag = 'Y' THEN
15603 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr5', RTRIM(p_project_in.attribute5));
15604 END IF;
15605
15606 IF l_b_attr6_flag = 'Y' THEN
15607 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr6', RTRIM(p_project_in.attribute6));
15608 END IF;
15609
15610 IF l_b_attr7_flag = 'Y' THEN
15611 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr7', RTRIM(p_project_in.attribute7));
15612 END IF;
15613
15614 IF l_b_attr8_flag = 'Y' THEN
15615 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr8', RTRIM(p_project_in.attribute8));
15616 END IF;
15617
15618 IF l_b_attr9_flag = 'Y' THEN
15619 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr9', RTRIM(p_project_in.attribute9));
15620 END IF;
15621
15622 IF l_b_attr10_flag = 'Y' THEN
15623 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr10', RTRIM(p_project_in.attribute10));
15624 END IF;
15625
15626 IF l_b_output_tx_code_flag = 'Y' THEN
15627 DBMS_SQL.BIND_VARIABLE(l_cursor, ':output_tx_code', RTRIM(p_project_in.output_tax_code));
15628 END IF;
15629
15630 IF l_b_ret_tx_code_flag = 'Y' THEN
15631 DBMS_SQL.BIND_VARIABLE(l_cursor, ':ret_tx_code', RTRIM(p_project_in.retention_tax_code));
15632 END IF;
15633
15634 IF l_b_proj_cur_code_flag = 'Y' THEN
15635 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_cur_code', RTRIM(p_project_in.project_currency_code));
15636 END IF;
15637
15638 IF l_b_allow_x_chg_flag = 'Y' THEN
15639 DBMS_SQL.BIND_VARIABLE(l_cursor, ':allow_x_chg_flag', RTRIM(p_project_in.allow_cross_charge_flag));
15640 END IF;
15641
15642 IF l_b_proj_rt_date_flag = 'Y' THEN
15643 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_rt_date', p_project_in.project_rate_date);
15644 END IF;
15645
15646 IF l_b_proj_rt_tp_flag = 'Y' THEN
15647 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_rt_tp', RTRIM(p_project_in.project_rate_type));
15648 END IF;
15649
15650 IF l_cc_proc_lb_flag = 'Y' THEN
15651 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_lb_flag', RTRIM(l_cc_process_labor_flag)); -- Changed to local variable for Bug 5395048
15652 END IF;
15653
15654 IF l_b_lb_tp_sch_id_flag = 'Y' THEN
15655 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_tp_sch_id', p_project_in.labor_tp_schedule_id );
15656 END IF;
15657
15658 IF l_b_lb_tp_fixed_dt_flag = 'Y' THEN
15659 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_tp_fixed_dt', p_project_in.labor_tp_fixed_date);
15660 END IF;
15661
15662 IF l_b_cc_proc_nl_flag = 'Y' THEN
15663 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_nl_flag', RTRIM(l_cc_process_nl_flag)); -- Changed to local variable for Bug 5395048
15664 END IF;
15665
15666 IF l_b_nl_tp_sch_id_flag = 'Y' THEN
15667 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_sch_id', p_project_in.nl_tp_schedule_id);
15668 END IF;
15669
15670 IF l_b_nl_tp_fx_dt_flag = 'Y' THEN
15671 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_fx_dt', p_project_in.nl_tp_fixed_date);
15672 END IF;
15673
15674 IF l_b_role_list_id_flag = 'Y' THEN
15675 DBMS_SQL.BIND_VARIABLE(l_cursor, ':role_list_id', p_project_in.role_list_id);
15676 END IF;
15677
15678 IF l_b_work_type_id_flag = 'Y' THEN
15679 DBMS_SQL.BIND_VARIABLE(l_cursor, ':work_type_id', p_project_in.work_type_id);
15680 END IF;
15681
15682 IF l_b_cal_id_flag = 'Y' THEN
15683 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cal_id', p_project_in.calendar_id);
15684 END IF;
15685
15686 IF l_b_loc_id_flag = 'Y' THEN
15687 DBMS_SQL.BIND_VARIABLE(l_cursor, ':loc_id', p_project_in.location_id);
15688 END IF;
15689
15690 IF l_b_prob_memb_id_flag = 'Y' THEN
15691 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prob_memb_id', p_project_in.probability_member_id);
15692 END IF;
15693
15694 IF l_b_proj_value_flag = 'Y' THEN
15695 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_value', p_project_in.project_value);
15696 END IF;
15697
15698 IF l_b_exp_apprv_dt_flag = 'Y' THEN
15699 DBMS_SQL.BIND_VARIABLE(l_cursor, ':exp_apprv_date', p_project_in.expected_approval_date);
15700 END IF;
15701
15702 IF l_b_cst_jb_gp_id_flag = 'Y' THEN
15703 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cst_jb_gp_id', p_project_in.cost_job_group_id);
15704 END IF;
15705
15706 IF l_b_bill_jb_gp_id_flag = 'Y' THEN
15707 DBMS_SQL.BIND_VARIABLE(l_cursor, ':bill_jb_gp_id', p_project_in.bill_job_group_id);
15708 END IF;
15709
15710 IF l_b_emp_bill_rt_sch_id_flag = 'Y' THEN
15711 DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id', p_project_in.emp_bill_rate_schedule_id);
15712 END IF;
15713
15714 IF l_b_jb_bill_rt_sch_id_flag = 'Y' THEN
15715 DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id', p_project_in.job_bill_rate_schedule_id);
15716 END IF;
15717
15718 IF l_b_comp_mtch_wt_flag = 'Y' THEN
15719 DBMS_SQL.BIND_VARIABLE(l_cursor, ':comp_match_wt', p_project_in.competence_match_wt);
15720 END IF;
15721
15722 IF l_b_avail_mtch_wt_flag = 'Y' THEN
15723 DBMS_SQL.BIND_VARIABLE(l_cursor, ':avail_mtch_wt', p_project_in.availability_match_wt);
15724 END IF;
15725
15726 IF l_b_jb_lvl_mt_wt_flag = 'Y' THEN
15727 DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_lvl_mt_wt', p_project_in.job_level_match_wt);
15728 END IF;
15729
15730 IF l_b_search_min_avail_flag = 'Y' THEN
15731 DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_min_avail', p_project_in.search_min_availability);
15732 END IF;
15733
15734 IF l_b_srch_org_hier_id_flag = 'Y' THEN
15735 DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_org_hier_id', p_project_in.search_org_hier_id);
15736 END IF;
15737
15738 IF l_b_srch_st_org_id_flag = 'Y' THEN
15739 DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_org_hier_id', p_project_in.search_starting_org_id);
15740 END IF;
15741
15742 IF l_b_min_can_sc_req_for_nom = 'Y' THEN
15743 DBMS_SQL.BIND_VARIABLE(l_cursor, ':min_can_sc_req_for_nom', p_project_in.min_cand_score_reqd_for_nom);
15744 END IF;
15745
15746 /* Commented the code for bug 4630836:
15747 IF l_b_nn_lb_std_bl_rt_sch_id_f = 'Y' THEN
15748 DBMS_SQL.BIND_VARIABLE(l_cursor, ':n_lb_std_bill_rt_sch_id', p_project_in.non_lab_std_bill_rt_sch_id);
15749 END IF; */
15750
15751 IF l_b_proj_bil_xch_rt_flag = 'Y' THEN
15752 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_xch_rt', p_project_in.project_bil_exchange_rate);
15753 END IF;
15754
15755 IF l_b_pjfnc_bil_xch_rt_flag = 'Y' THEN
15756 DBMS_SQL.BIND_VARIABLE(l_cursor, ':pjfnc_bil_xch_rt', p_project_in.projfunc_bil_exchange_rate);
15757 END IF;
15758
15759 IF l_b_fnding_xch_rt_flag = 'Y' THEN
15760 DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_xch_rt', p_project_in.funding_exchange_rate);
15761 END IF;
15762
15763 IF l_b_enable_auto_srch_flag = 'Y' THEN
15764 DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_auto_srch', p_project_in.enable_automated_search);
15765 END IF;
15766
15767 IF l_b_srch_cntry_code_flag = 'Y' THEN
15768 DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_cntry_code', RTRIM(p_project_in.search_country_code));
15769 END IF;
15770
15771 IF l_b_invproc_crncy_tp_flag = 'Y' THEN
15772 DBMS_SQL.BIND_VARIABLE(l_cursor, ':invproc_currency_type', RTRIM(p_project_in.invproc_currency_type));
15773 END IF;
15774
15775 IF l_b_revproc_crncy_cd_flag = 'Y' THEN
15776 DBMS_SQL.BIND_VARIABLE(l_cursor, ':revproc_currency_code', RTRIM(p_project_in.revproc_currency_code));
15777 END IF;
15778
15779 IF l_b_prj_bil_rt_dt_code_flag = 'Y' THEN
15780 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_rate_date_code', RTRIM(p_project_in.project_bil_rate_date_code));
15781 END IF;
15782
15783 IF l_b_proj_bil_rt_tp_flag = 'Y' THEN
15784 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_rt_type', RTRIM(p_project_in.project_bil_rate_type));
15785 END IF;
15786
15787 IF l_b_prjfnc_crncy_code_flag = 'Y' THEN
15788 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_currency_code', RTRIM(p_project_in.projfunc_currency_code));
15789 END IF;
15790
15791 IF l_b_prjfnc_bil_rt_dt_cd_f = 'Y' THEN
15792 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rt_dt_code', RTRIM(p_project_in.projfunc_bil_rate_date_code));
15793 END IF;
15794
15795 IF l_b_prjfnc_bil_rt_tp_flag = 'Y' THEN
15796 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rate_type', RTRIM(p_project_in.projfunc_bil_rate_type));
15797 END IF;
15798
15799 IF l_b_fndng_rt_dt_cd_flag = 'Y' THEN
15800 DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rate_date_code', RTRIM(p_project_in.funding_rate_date_code));
15801 END IF;
15802
15803 IF l_b_fnding_rt_type_flag = 'Y' THEN
15804 DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rate_type', RTRIM(p_project_in.funding_rate_type));
15805 END IF;
15806
15807 IF l_b_bsln_fnding_flag = 'Y' THEN
15808 DBMS_SQL.BIND_VARIABLE(l_cursor, ':bsln_fnding_flag', RTRIM(p_project_in.baseline_funding_flag));
15809 END IF;
15810
15811 IF l_b_prjfnc_cst_rt_tp_flag = 'Y' THEN
15812 DBMS_SQL.BIND_VARIABLE(l_cursor, ':projfnc_cost_rate_type', RTRIM(p_project_in.projfunc_cost_rate_type));
15813 END IF;
15814
15815 IF l_b_inv_bill_txn_cur_flag = 'Y' THEN
15816 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_by_bil_txn_cur_flag', RTRIM(p_project_in.inv_by_bill_trans_curr_flag));
15817 END IF;
15818
15819 IF l_b_multi_crncy_bil_flag = 'Y' THEN
15820 DBMS_SQL.BIND_VARIABLE(l_cursor, ':multi_crncy_bil_flag', RTRIM(p_project_in.multi_currency_billing_flag));
15821 END IF;
15822
15823 IF l_b_prj_bil_rt_dt_flag = 'Y' THEN
15824 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_bil_rt_date', p_project_in.project_bil_rate_date);
15825 END IF;
15826
15827 IF l_b_prjfnc_bil_rt_dt_flag = 'Y' THEN
15828 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rt_date', p_project_in.projfunc_bil_rate_date);
15829 END IF;
15830
15831 IF l_b_fnding_rt_dt_flag = 'Y' THEN
15832 DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rt_date', p_project_in.funding_rate_date);
15833 END IF;
15834
15835 IF l_b_prjfnc_cst_rt_dt_flag = 'Y' THEN
15836 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_cst_rt_date', p_project_in.projfunc_cost_rate_date);
15837 END IF;
15838
15839 IF l_b_asgn_prec_tsk_flag = 'Y' THEN
15840 DBMS_SQL.BIND_VARIABLE(l_cursor, ':asgn_prec_tsk_flg', RTRIM(p_project_in.assign_precedes_task));
15841 END IF;
15842
15843 IF l_b_splt_cst_fm_wp_flag = 'Y' THEN
15844 DBMS_SQL.BIND_VARIABLE(l_cursor, ':splt_cst_fm_wp_flag', RTRIM(p_project_in.split_cost_from_workplan_flag));
15845 END IF;
15846
15847 IF l_b_splt_cst_fm_bill_flag = 'Y' THEN
15848 DBMS_SQL.BIND_VARIABLE(l_cursor, ':splt_cst_fm_bill_flag', RTRIM(p_project_in.split_cost_from_bill_flag));
15849 END IF;
15850
15851 IF l_b_adv_act_set_id_flag = 'Y' THEN
15852 DBMS_SQL.BIND_VARIABLE(l_cursor, ':adv_act_set_id', p_project_in.adv_action_set_id);
15853 END IF;
15854
15855 IF l_b_st_adv_act_set_flag = 'Y' THEN
15856 DBMS_SQL.BIND_VARIABLE(l_cursor, ':st_adv_act_set_flag', RTRIM(p_project_in.start_adv_action_set_flag));
15857 END IF;
15858
15859 IF l_b_pri_code_flag = 'Y' THEN
15860 DBMS_SQL.BIND_VARIABLE(l_cursor, ':pri_code', RTRIM(p_project_in.priority_code));
15861 END IF;
15862
15863 IF l_b_retn_bil_inv_fmt_id_flg = 'Y' THEN
15864 DBMS_SQL.BIND_VARIABLE(l_cursor, ':retn_bil_inv_fmt_id', TO_CHAR(p_project_in.retn_billing_inv_format_id));
15865 END IF;
15866
15867 IF l_b_retn_acnt_flag = 'Y' THEN
15868 DBMS_SQL.BIND_VARIABLE(l_cursor, ':retn_acnt_flag', RTRIM(p_project_in.retn_accounting_flag));
15869 END IF;
15870
15871 IF l_b_reval_fndng_flag = 'Y' THEN
15872 DBMS_SQL.BIND_VARIABLE(l_cursor, ':reval_fndng_flg', RTRIM(p_project_in.revaluate_funding_flag));
15873 END IF;
15874
15875 IF l_b_sec_lvl_flag = 'Y' THEN
15876 DBMS_SQL.BIND_VARIABLE(l_cursor, ':sec_lvl', RTRIM(p_project_in.security_level));
15877 END IF;
15878
15879 IF l_b_lbr_disc_rsn_code_flg = 'Y' THEN
15880 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_disc_rsn_code', RTRIM(p_project_in.labor_disc_reason_code));
15881 END IF;
15882
15883 IF l_b_nn_lbr_disc_rsn_cd_flg = 'Y' THEN
15884 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lbr_disc_rsn_cd', RTRIM(p_project_in.non_labor_disc_reason_code));
15885 END IF;
15886
15887 IF l_b_inc_gn_los_flag = 'Y' THEN
15888 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inc_gn_los_flg', RTRIM(p_project_in.include_gains_losses_flag));
15889 END IF;
15890
15891
15892 IF l_b_lb_sch_tp_fg = 'Y' THEN
15893 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_type', RTRIM(p_project_in.labor_sch_type));
15894 END IF;
15895
15896 IF l_b_nn_lb_sch_tp_fg = 'Y' THEN
15897 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_tp', RTRIM(p_project_in.non_labor_sch_type));
15898 END IF;
15899
15900 IF l_b_emp_bill_rt_sch_id_fg2 = 'Y' THEN
15901 DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id2', p_project_in.emp_bill_rate_schedule_id);
15902 END IF;
15903
15904 IF l_b_jb_bill_rt_sch_id_fg2 = 'Y' THEN
15905 DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id2', p_project_in.job_bill_rate_schedule_id);
15906 END IF;
15907
15908 IF l_b_lb_sch_fx_dt_fg = 'Y' THEN
15909 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_fx_dt', p_project_in.labor_schedule_fixed_date);
15910 END IF;
15911
15912 IF l_b_lb_sch_dsct_fg = 'Y' THEN
15913 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_dsct', p_project_in.labor_schedule_discount);
15914 END IF;
15915
15916 IF l_b_lb_disc_rn_cd_fg2 = 'Y' THEN
15917 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_disc_rn_cd', RTRIM(p_project_in.labor_disc_reason_code));
15918 END IF;
15919
15920 IF l_b_rv_ind_rt_sch_id_fg = 'Y' THEN
15921 DBMS_SQL.BIND_VARIABLE(l_cursor, ':rv_ind_rt_sch_id', p_project_in.REV_IND_RATE_SCH_ID);
15922 END IF;
15923
15924 IF l_b_inv_ind_rt_sch_id_fg = 'Y' THEN
15925 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_ind_rt_sch_id', p_project_in.INV_IND_RATE_SCH_ID);
15926 END IF;
15927
15928 IF l_b_ind_sch_fx_dt_fg = 'Y' THEN
15929 DBMS_SQL.BIND_VARIABLE(l_cursor, ':rev_ind_sch_fx_dt', p_project_in.rev_ind_sch_fixed_date);
15930 END IF;
15931
15932 IF l_b_inv_ind_sch_fx_dt_fg = 'Y' THEN
15933 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_ind_sch_fx_dt', p_project_in.inv_ind_sch_fixed_date);
15934 END IF;
15935
15936 IF l_b_nn_lb_bill_rt_org_id_fg = 'Y' THEN
15937 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_bill_rt_org_id', p_project_in.non_labor_bill_rate_org_id);
15938 END IF;
15939
15940 IF l_b_n_lb_st_bl_rt_sc_id_fg2 = 'Y' THEN
15941 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lab_std_bill_rt_sch_id', p_project_in.non_lab_std_bill_rt_sch_id);
15942 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_std_bill_rt_sch', RTRIM(l_std_bill_rate_schedule));
15943 END IF;
15944
15945 IF l_b_nn_lb_sch_fx_dt_fg = 'Y' THEN
15946 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_fx_dt', p_project_in.non_labor_schedule_fixed_date);
15947 END IF;
15948
15949 IF l_b_nn_lb_sch_dst_fg = 'Y' THEN
15950 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_dst', p_project_in.non_labor_schedule_discount);
15951 END IF;
15952
15953 IF l_b_n_lb_disc_rsn_cd_fg2 = 'Y' THEN
15954 DBMS_SQL.BIND_VARIABLE(l_cursor, ':n_lb_dis_rn_cd', RTRIM(p_project_in.non_labor_disc_reason_code));
15955 END IF;
15956
15957 IF l_b_as_alloc_mth_fg = 'Y' THEN
15958 DBMS_SQL.BIND_VARIABLE(l_cursor, ':as_alloc_mth', RTRIM(p_project_in.asset_allocation_method));
15959 END IF;
15960
15961 IF l_b_cp_evt_proc_fg = 'Y' THEN
15962 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cp_evt_proc', RTRIM(p_project_in.capital_event_processing));
15963 END IF;
15964
15965 IF l_b_cint_rt_sch_id_fg = 'Y' THEN
15966 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_rt_sch', p_project_in.cint_rate_sch_id);
15967 END IF;
15968
15969 IF l_b_cint_elg_fg = 'Y' THEN
15970 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_elg_fg', RTRIM(p_project_in.cint_eligible_flag));
15971 END IF;
15972
15973 IF l_b_cint_stp_dt_fg = 'Y' THEN
15974 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_stp_dt', p_project_in.cint_stop_date);
15975 END IF;
15976
15977 /* Added for bug 6248841 */
15978 IF l_b_cc_tax_task_id = 'Y' THEN
15979 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_cc_tax_task_id', p_project_in.cc_tax_task_id);
15980 END IF;
15981
15982 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_usr_id', G_USER_ID);
15983 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_login_id', G_LOGIN_ID);
15984 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_id', l_project_id);
15985
15986 --end bug 2955326
15987
15988 -- FP_M changes begin (venkat) 3
15989
15990 -- COMMENT BEGIN --
15991 -------------- Begin Comment : Diable for now as the col sys_program_flag not in pa_projects -------
15992 -- IF l_sys_program_flag = 'Y' THEN
15993 -- DBMS_SQL.BIND_VARIABLE(l_cursor, ':sys_program_flg', RTRIM(p_project_in.sys_program_flag));
15994 -- END IF;
15995 -------------- end Comment : Diable for now as the col sys_program_flag not in pa_projects ---------
15996 -- COMMENT END --
15997
15998 -- Bug # 5072032.
15999
16000 IF l_b_sys_program_flag_fg = 'Y' THEN
16001 DBMS_SQL.BIND_VARIABLE(l_cursor, ':sys_program_flag', RTRIM(p_project_in.sys_program_flag));
16002 END IF;
16003
16004 IF l_b_allow_multi_prog_rollup_fg = 'Y' THEN
16005 DBMS_SQL.BIND_VARIABLE(l_cursor, ':allow_multi_program_rollup', RTRIM(p_project_in.allow_multi_program_rollup));
16006 END IF;
16007
16008 -- End of Bug # 5072032.
16009
16010
16011 IF l_enable_top_task_cust_flag = 'Y' THEN
16012 DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_top_task_cust_flg', RTRIM(p_project_in.enable_top_task_customer_flag));
16013 END IF;
16014
16015 IF l_enable_top_task_inv_mth_flag = 'Y' THEN
16016 DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_top_task_inv_mth_flg', RTRIM(p_project_in.enable_top_task_inv_mth_flag));
16017 END IF;
16018
16019 IF l_projfunc_attr_for_ar_flag = 'Y' THEN
16020 DBMS_SQL.BIND_VARIABLE(l_cursor, ':projfunc_attr_for_ar_flg', RTRIM(p_project_in.projfunc_attr_for_ar_flag));
16021 END IF;
16022
16023 -- FP_M changes end (venkat)
16024
16025 --sunkalya federal bug#5511353
16026 IF l_date_eff_funds_flag = 'Y' THEN
16027 DBMS_SQL.BIND_VARIABLE(l_cursor, ':date_eff_funds_consumption', RTRIM(p_project_in.date_eff_funds_flag));
16028 END IF;
16029
16030 --sunkalya federal bug#5511353
16031
16032 /* 7508661 : EnC : Start */
16033 IF l_ar_rec_notify_flag = 'Y' THEN
16034 DBMS_SQL.BIND_VARIABLE(l_cursor, ':ar_rec_notify_flag', RTRIM(p_project_in.ar_rec_notify_flag));
16035 END IF;
16036
16037 IF l_auto_release_pwp_inv = 'Y' THEN
16038 DBMS_SQL.BIND_VARIABLE(l_cursor, ':auto_release_pwp_inv', RTRIM(p_project_in.auto_release_pwp_inv));
16039 END IF;
16040 /* 7508661 : EnC : End */
16041
16042 l_rows := dbms_sql.execute(l_cursor);
16043
16044 IF dbms_sql.is_open (l_cursor)
16045 THEN
16046 dbms_sql.close_cursor (l_cursor);
16047 END IF;
16048
16049 IF l_debug_mode = 'Y' THEN
16050 pa_debug.g_err_stage := 'Done with updating project level data...';
16051 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16052 END IF;
16053
16054 -- anlee
16055 -- Added for intermedia search
16056 if l_ctx_update_flag = 'Y' then
16057 PA_PROJECT_CTX_SEARCH_PVT.UPDATE_ROW (
16058 p_project_id => l_project_id
16059 ,p_template_flag => l_project_rec.template_flag
16060 ,p_project_name => l_ctx_proj_name
16061 ,p_project_number => l_ctx_proj_number
16062 ,p_project_long_name => l_ctx_long_name
16063 ,p_project_description => l_ctx_desc
16064 ,x_return_status => l_return_status );
16065
16066 IF l_debug_mode = 'Y' THEN
16067 pa_debug.g_err_stage := 'After calling PA_PROJECT_CTX_SEARCH_PVT.UPDATE_ROW l_return_status='||l_return_status;
16068 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16069 END IF;
16070
16071
16072 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16073 THEN
16074 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16075
16076 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16077 THEN
16078 RAISE FND_API.G_EXC_ERROR;
16079 END IF;
16080
16081 end if;
16082 -- End of changes
16083 END IF;
16084 -- Modify opportunity value attributes with values entered in quick entry
16085 --Added By Aditi For Bug 4473105
16086
16087 OPEN l_get_details_for_opp_csr(l_project_id);
16088 FETCH l_get_details_for_opp_csr INTO l_expected_approval_date, l_projfunc_currency_code, l_project_currency_code;
16089 CLOSE l_get_details_for_opp_csr;
16090
16091 OPEN l_get_details_for_opp_csr2(l_project_id);
16092 FETCH l_get_details_for_opp_csr2 INTO l_opportunity_value, l_opp_value_currency_code;
16093 CLOSE l_get_details_for_opp_csr2;
16094
16095 If (p_project_in.project_value IS NOT NULL) AND (p_project_in.project_value <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
16096 Then
16097 l_opportunity_value := p_project_in.project_value;
16098 End if;
16099 If (p_project_in.opp_value_currency_code) IS NOT NULL AND (p_project_in.opp_value_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
16100 Then
16101 l_opp_value_currency_code := p_project_in.opp_value_currency_code;
16102 End if;
16103 If (p_project_in.expected_approval_date IS NOT NULL) AND (p_project_in.expected_approval_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
16104 Then
16105 l_expected_approval_date := p_project_in.expected_approval_date;
16106 End if;
16107
16108 PA_OPPORTUNITY_MGT_PVT.MODIFY_PROJECT_ATTRIBUTES
16109 ( p_project_id => l_project_id
16110 ,p_opportunity_value => l_opportunity_value
16111 ,p_opp_value_currency_code => l_opp_value_currency_code
16112 ,p_expected_approval_date => l_expected_approval_date
16113 ,x_return_status => l_return_status
16114 ,x_msg_count => l_msg_count
16115 ,x_msg_data => l_msg_data);
16116
16117 IF l_debug_mode = 'Y' THEN
16118 pa_debug.g_err_stage := 'After calling PA_OPPORTUNITY_MGT_PVT.MODIFY_PROJECT_ATTRIBUTES l_return_status='||l_return_status;
16119 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16120 END IF;
16121
16122
16123 if l_return_status <> 'S' then
16124 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
16125 p_msg_name => 'PA_ERR_MOD_PROJ_OPP_ATTR');
16126 RAISE FND_API.G_EXC_ERROR;
16127 end if;
16128 -- End of code changes for bug 4473105
16129
16130
16131 --Bug 3279981 Review :
16132 --Perform the various updates for change of revenue accrual method, invoice method, top task invoice method flag
16133 --and also for populating distribution rule's invoice method as 'WORK' internally when top task invoice method flag
16134 --is enabled
16135 DECLARE
16136 --The foll. three variables will hold the valid values for revenue accrual method , invoice method
16137 --and invoice method at top task flag of the project. They will be refreshed with the new values in
16138 --case new values have been passed
16139 l_proj_rev_acc_method VARCHAR2(30) := l_project_rec.revenue_accrual_method;
16140 l_proj_invoice_method VARCHAR2(30) := l_project_rec.invoice_method;
16141 l_proj_top_task_inv_mth_flag VARCHAR2(1) := l_project_rec.enable_top_task_inv_mth_flag;
16142 l_return_status VARCHAR2(10);
16143 l_msg_count NUMBER := 0;
16144 l_msg_data VARCHAR2(2000);
16145 BEGIN
16146 IF p_project_in.enable_top_task_inv_mth_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16147 AND p_project_in.enable_top_task_inv_mth_flag IS NOT NULL
16148 AND p_project_in.enable_top_task_inv_mth_flag <> l_project_rec.enable_top_task_inv_mth_flag THEN
16149 l_proj_top_task_inv_mth_flag := p_project_in.enable_top_task_inv_mth_flag;
16150 END IF;
16151
16152 --The revenue accrual method for the project has changed. Therefore, call the api to default the new revenue accrual
16153 --method to the tasks
16154 IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16155 AND upper( substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) )
16156 <> upper( l_project_rec.revenue_accrual_method ) THEN
16157
16158 l_proj_rev_acc_method := upper( substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) );
16159 pa_top_task_cust_invoice_pvt.Set_Rev_Acc_At_Top_Task( P_API_VERSION => 1.0
16160 , P_INIT_MSG_LIST => 'T'
16161 , P_COMMIT => 'F'
16162 , P_VALIDATE_ONLY => 'F'
16163 , P_VALIDATION_LEVEL => 100
16164 , P_DEBUG_MODE => 'N'
16165 , p_calling_module => 'AMG'
16166 , p_project_id => l_project_id
16167 , p_rev_acc => l_proj_rev_acc_method
16168 , x_return_status => l_return_status
16169 , x_msg_count => l_msg_count
16170 , x_msg_data => l_msg_data );
16171 END IF;
16172
16173 --The invoice method for the project has changed. Call the api to update the invoice method for the tasks only if
16174 --invoice method at top task is unchecked
16175 IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16176 AND upper( substr(p_project_in.distribution_rule,instr(p_project_in.distribution_rule,'/')+1) )
16177 <> upper( l_project_rec.invoice_method ) THEN
16178
16179 l_proj_invoice_method := upper( substr(p_project_in.distribution_rule,instr(p_project_in.distribution_rule,'/')+1) );
16180 IF 'N' = l_proj_top_task_inv_mth_flag THEN
16181 pa_top_task_cust_invoice_pvt.Set_Inv_Mth_At_Top_Task( P_API_VERSION => 1.0
16182 , P_INIT_MSG_LIST => 'T'
16183 , P_COMMIT => 'F'
16184 , P_VALIDATE_ONLY => 'F'
16185 , P_VALIDATION_LEVEL => 100
16186 , P_DEBUG_MODE => 'N'
16187 , p_calling_module => 'AMG'
16188 , p_project_id => l_project_id
16189 , p_inv_mth => l_proj_invoice_method
16190 , x_return_status => l_return_status
16191 , x_msg_count => l_msg_count
16192 , x_msg_data => l_msg_data );
16193 END IF;
16194
16195 END IF;
16196
16197 --IF the invoice method at top task flag has changed from 'Y' to 'N' :
16198 --Update the distribution rule with the correct invoice method, if no distribution rule has been passed
16199 --Call the api to default the invoice method to the tasks
16200 IF 'Y' = l_enable_top_task_inv_mth_flag AND 'N' = p_project_in.enable_top_task_inv_mth_flag THEN
16201 IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
16202 UPDATE pa_projects_all
16203 SET distribution_rule =
16204 substr(distribution_rule,1,instr(distribution_rule,'/')-1)||'/'||l_proj_invoice_method
16205 WHERE project_id = l_project_id;
16206 END IF;
16207 pa_top_task_cust_invoice_pvt.Set_Inv_Mth_At_Top_Task( P_API_VERSION => 1.0
16208 , P_INIT_MSG_LIST => 'T'
16209 , P_COMMIT => 'F'
16210 , P_VALIDATE_ONLY => 'F'
16211 , P_VALIDATION_LEVEL => 100
16212 , P_DEBUG_MODE => 'N'
16213 , p_calling_module => 'AMG'
16214 , p_project_id => l_project_id
16215 , p_inv_mth => l_proj_invoice_method
16216 , x_return_status => l_return_status
16217 , x_msg_count => l_msg_count
16218 , x_msg_data => l_msg_data );
16219 --IF the invoice method at top task flag has changed from 'N' to 'Y' :
16220 --Call the api to set the top task funding level
16221 ELSIF 'Y' = l_enable_top_task_inv_mth_flag AND 'Y' = p_project_in.enable_top_task_inv_mth_flag THEN
16222 pa_top_task_cust_invoice_pvt.set_top_task_funding_level( P_API_VERSION => 1.0
16223 , P_INIT_MSG_LIST => 'T'
16224 , P_COMMIT => 'F'
16225 , P_VALIDATE_ONLY => 'F'
16226 , P_VALIDATION_LEVEL => 100
16227 , P_DEBUG_MODE => 'N'
16228 , p_calling_module => 'AMG'
16229 , p_project_id => l_project_id
16230 , x_return_status => l_return_status
16231 , x_msg_count => l_msg_count
16232 , x_msg_data => l_msg_data );
16233
16234 END IF;
16235
16236 --IF the invoice method at top task flag is checked,
16237 --invoice method of the distribution rule must internally be populated as WORK
16238 IF 'Y' = l_proj_top_task_inv_mth_flag THEN
16239 UPDATE pa_projects_all
16240 SET distribution_rule =
16241 substr(distribution_rule,1,instr(distribution_rule,'/')-1)||'/'||'WORK'
16242 WHERE project_id = l_project_id;
16243 END IF;
16244 END;
16245 --Bug 3279981 Review
16246
16247 --Project Structures
16248 --dbms_output.put_line ('After executing dynamic sql for updating project ');
16249 --Project Structures
16250 -- Bug 3548473 : 3627124 If the parameter p_pass_entire_structure = 'N' and
16251 -- structure_type = 'WORKPLAN' throw an error. For workplan structure, user
16252 -- needs to pass the all tasks in the structure in proper order.
16253 -- Same holds true for SHARED structure also.
16254
16255 --dbms_output.put_line ('p_pass_entire_structure : ' || p_pass_entire_structure);
16256 --dbms_output.put_line ('l_structure_type : ' || l_structure_type);
16257 --dbms_output.put_line ('G_IS_WP_SEPARATE_FROM_FN : ' || G_IS_WP_SEPARATE_FROM_FN);
16258
16259 -- Bug # 5077599.
16260
16261 if (p_update_mode = 'PA_UPD_TASK_ATTR'
16262 and p_pass_entire_structure = 'N'
16263 and (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' )
16264 OR ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND p_structure_in.structure_type = 'WORKPLAN' ))) then
16265
16266 i:= p_tasks_in.first;
16267
16268 while i is not null
16269 loop
16270
16271 if (p_tasks_in(i).pa_task_id is null or p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) then
16272
16273 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16274 THEN
16275 pa_interface_utils_pub.map_new_amg_msg
16276 (p_old_message_code => 'PA_TASK_ID_IS_MISS'-- new message for bug 3548473: 3627124
16277 ,p_msg_attribute => 'CHANGE'
16278 ,p_resize_flag => 'N'
16279 ,p_msg_context => 'PROJ'
16280 ,p_attribute1 => l_project_rec.segment1
16281 ,p_attribute2 => ''
16282 ,p_attribute3 => ''
16283 ,p_attribute4 => ''
16284 ,p_attribute5 => '');
16285 END IF;
16286
16287 p_multiple_task_msg := 'F';
16288 RAISE FND_API.G_EXC_ERROR;
16289 end if;
16290
16291 i := p_tasks_in.next(i);
16292 end loop;
16293
16294 end if;
16295
16296 -- End of Bug # 5077599.
16297
16298 -- 3858251 Added code to check, whether tasks are passed or not
16299
16300 i:= p_tasks_in.first;
16301
16302 IF p_tasks_in.exists(i) THEN
16303 -- 3858251 if tasks are passed to update_project api , then and then only below
16304 -- validation should get called
16305 -- Bug # 5077599.
16306 /*
16307 IF (p_pass_entire_structure = 'N' AND l_structure_type = 'WORKPLAN') OR -- bhaskar
16308 (p_pass_entire_structure = 'N' AND G_IS_WP_SEPARATE_FROM_FN = 'N') THEN
16309 */
16310
16311 IF -- Bug # 5077599.
16312 (p_pass_entire_structure = 'N' AND l_structure_type = 'WORKPLAN' and p_update_mode <> 'PA_UPD_TASK_ATTR') OR -- bhaskar
16313 (p_pass_entire_structure = 'N' AND G_IS_WP_SEPARATE_FROM_FN = 'N' and p_update_mode <> 'PA_UPD_TASK_ATTR') THEN
16314 -- Bug # 5077599.
16315 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16316 THEN
16317 pa_interface_utils_pub.map_new_amg_msg
16318 ( p_old_message_code => 'PA_TASK_STRUCT_NOT_ORDRD'-- new message for bug 3548473: 3627124
16319 ,p_msg_attribute => 'CHANGE'
16320 ,p_resize_flag => 'N'
16321 ,p_msg_context => 'PROJ'
16322 ,p_attribute1 => l_project_rec.segment1
16323 ,p_attribute2 => ''
16324 ,p_attribute3 => ''
16325 ,p_attribute4 => ''
16326 ,p_attribute5 => '');
16327 END IF;
16328
16329 p_multiple_task_msg := 'F';
16330 RAISE FND_API.G_EXC_ERROR;
16331 END IF; -- bug 3548473 : 3627124
16332 END IF;
16333
16334 -- 3858251 end
16335
16336 IF p_pass_entire_structure = 'N' THEN
16337 l_update_task_structure := 'Y';
16338 ELSE
16339 l_update_task_structure := 'N';
16340 END IF; -- bug 3548473 : 3627124
16341
16342 --dbms_output.put_line ('l_update_task_structure : ' || l_update_task_structure);
16343 --dbms_output.put_line ('before calling PA_PROJ_TASK_STRUC_PUB.create_structure ');
16344 --Creating a WORKPLAN structure
16345 IF p_structure_in.structure_type = 'WORKPLAN' --This should only be done for a WORKPLAN structure
16346 THEN
16347 PA_PROJ_TASK_STRUC_PUB.create_structure(
16348 p_project_id => l_project_id
16349 ,p_structure_type =>l_structure_type --BUg 3548473 3627124 aditi
16350 ,p_structure_version_name => p_structure_in.structure_version_name
16351 ,p_description => p_structure_in.description
16352 ,x_structure_id => l_structure_id
16353 ,x_structure_version_id => l_structure_version_id
16354 ,x_msg_count => l_msg_count
16355 ,x_msg_data => l_msg_data
16356 ,x_return_status => l_return_status
16357 );
16358
16359 IF l_debug_mode = 'Y' THEN
16360 pa_debug.g_err_stage := 'After calling PA_PROJ_TASK_STRUC_PUB.create_structure l_return_status='||l_return_status;
16361 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16362 END IF;
16363
16364
16365 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16366 THEN
16367 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16368
16369 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16370 THEN
16371 RAISE FND_API.G_EXC_ERROR;
16372 END IF;
16373
16374 END IF; -- p_structure_in.structure_type = 'WORKPLAN'
16375
16376 IF ( ( ( p_structure_in.structure_version_name IS NOT NULL AND
16377 p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) OR
16378 ( p_structure_in.description IS NOT NULL AND
16379 p_structure_in.description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) AND
16380 ( p_structure_in.structure_version_id IS NOT NULL AND
16381 p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) ) OR
16382 --updating structure version
16383 ( ( p_structure_in.structure_version_name IS NOT NULL AND
16384 p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
16385 ( p_structure_in.structure_version_id IS NULL OR
16386 p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) )
16387 --creating structure version
16388 THEN
16389 IF l_structure_version_id IS NULL
16390 AND NVL( l_project_rec.template_flag,'N') = 'N'
16391 AND NVL( PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(l_project_id), 'N' ) = 'Y'
16392 AND p_pm_product_code <> 'WORKPLAN' -- Bug 2871353
16393 THEN
16394 PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
16395 p_project_id => l_project_id
16396 ,p_structure_type => p_structure_in.structure_type --no need to change this actual parameter for bug 2738747. The API takes care of financial stuff.
16397 ,p_structure_version_name => p_structure_in.structure_version_name
16398 ,p_structure_version_id => p_structure_in.structure_version_id
16399 ,p_description => p_structure_in.description
16400 ,x_structure_version_id => l_structure_version_id
16401 ,x_msg_count => l_msg_count
16402 ,x_msg_data => l_msg_data
16403 ,x_return_status => l_return_status
16404 );
16405
16406 IF l_debug_mode = 'Y' THEN
16407 pa_debug.g_err_stage := 'After calling PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver l_return_status='||l_return_status;
16408 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16409 END IF;
16410
16411
16412 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16413 THEN
16414 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16415
16416 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16417 THEN
16418 RAISE FND_API.G_EXC_ERROR;
16419 END IF;
16420 END IF; --<<structure_version_id is null >>
16421
16422 END IF;
16423 --Project Connect 4.0
16424 IF l_structure_version_id IS NOT NULL
16425 AND p_pm_product_code <> 'WORKPLAN' -- Bug 2871353
16426 THEN
16427 g_struc_out_tbl(1).structure_type := p_structure_in.structure_type; --<Bug#2862350>
16428 --g_struc_out_tbl(1).structure_type := 'WORKPLAN';
16429 g_struc_out_tbl(1).structure_version_id := l_structure_version_id;
16430
16431 -- Bug 3075609.
16432 l_create_task_versions_only := 'Y';
16433
16434 --Call create_tasks_versions_only api to create new task versions for the
16435 --existing tasks and add them to the new structure version.
16436 PA_PROJ_TASK_STRUC_PUB.create_tasks_versions_only(
16437 p_calling_module => 'AMG'
16438 --,p_structure_type => p_structure_in.structure_type --bug 2738747
16439 ,p_structure_type => l_structure_type --bug 2738747
16440 ,p_project_id => l_project_id
16441 ,p_structure_version_id => l_structure_version_id
16442 ,p_pm_product_code => l_pm_product_code
16443 ,p_tasks_in => p_tasks_in
16444 ,x_msg_count => l_msg_count
16445 ,x_msg_data => l_msg_data
16446 ,x_return_status => l_return_status );
16447
16448 IF l_debug_mode = 'Y' THEN
16449 pa_debug.g_err_stage := 'After calling PA_PROJ_TASK_STRUC_PUB.create_tasks_versions_only l_return_status='||l_return_status;
16450 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16451 END IF;
16452
16453
16454 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16455 THEN
16456 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16457
16458 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16459 THEN
16460 RAISE FND_API.G_EXC_ERROR;
16461 END IF;
16462 END IF;
16463 --Project Connect 4.0
16464
16465
16466 -- For bug2931183 Adding to keep a track of structure version id to be updated
16467 IF l_debug_mode = 'Y' THEN
16468 pa_debug.g_err_stage := ' the value of l_structure_type' || l_structure_type;
16469 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16470 END IF;
16471
16472 IF l_structure_version_id IS NULL
16473 THEN
16474 IF (p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16475 p_structure_in.structure_version_id IS NULL) AND (l_structure_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_structure_type IS NOT NULL)
16476 THEN
16477 IF l_structure_type = 'FINANCIAL'
16478 THEN
16479 OPEN cur_struc_ver_fin(l_project_id,'FINANCIAL');
16480 FETCH cur_struc_ver_fin INTO l_update_structure_version_id;
16481 IF cur_struc_ver_fin%NOTFOUND
16482 THEN
16483 OPEN cur_struc_ver_wp(l_project_id,'FINANCIAL');
16484 FETCH cur_struc_ver_wp INTO l_update_structure_version_id;
16485 CLOSE cur_struc_ver_wp;
16486 END IF;
16487 CLOSE cur_struc_ver_fin;
16488 END IF;
16489
16490 ELSE
16491 l_update_structure_version_id := p_structure_in.structure_version_id;
16492 END IF;
16493 ELSE
16494 l_update_structure_version_id := l_structure_version_id;
16495 END IF;
16496
16497 IF l_debug_mode = 'Y' THEN
16498 pa_debug.g_err_stage := ' the value of l_update_structure_version_id' || l_update_structure_version_id;
16499 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16500 END IF;
16501
16502
16503 --Project Structures
16504
16505 -- Since we maybe adding new tasks, need to pass the project record to
16506 -- the Add_task_round_one api. Project may have been updated in the previous lines.
16507 -- Hence need to fetch the updated record once again
16508
16509 OPEN l_project_csr (l_project_id);
16510 FETCH l_project_csr INTO l_project_rec;
16511 CLOSE l_project_csr;
16512
16513
16514 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
16515 pa_project_check_pvt.G_index_counter := 0;
16516 l_deferred_new_tasks_tbl.delete;
16517 l_deferred_tasks_count := 0;
16518 i := p_tasks_in.first;
16519 --project structure
16520 --IF p_structure_in.structure_type = 'FINANCIAL' --bug 2738747
16521 IF l_structure_type = 'FINANCIAL' --bug 2738747
16522 --project structure
16523 THEN
16524
16525 IF p_tasks_in.exists(i)
16526 THEN
16527 G_ParChildTsk_chks_deferred := 'Y';
16528 -- initialize the special global tables and counter set up
16529 -- to handle task number changes
16530
16531 l_is_wp_seperate_from_fn := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Added for Bug#3451073
16532 WHILE i IS NOT NULL LOOP
16533
16534 l_task_id := NULL;
16535
16536 l_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
16537
16538 IF (p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16539 OR p_tasks_in(i).pa_task_id IS NULL )
16540 THEN
16541 IF p_tasks_in(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16542 OR p_tasks_in(i).pm_task_reference IS NULL
16543 THEN
16544 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16545 THEN
16546 pa_interface_utils_pub.map_new_amg_msg
16547 ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
16548 ,p_msg_attribute => 'CHANGE'
16549 ,p_resize_flag => 'N'
16550 ,p_msg_context => 'PROJ'
16551 ,p_attribute1 => l_project_rec.segment1
16552 ,p_attribute2 => ''
16553 ,p_attribute3 => ''
16554 ,p_attribute4 => ''
16555 ,p_attribute5 => '');
16556 END IF;
16557
16558 l_tasks_out(i).return_status := FND_API.G_RET_STS_ERROR ;
16559 p_multiple_task_msg := 'F';
16560 -- RAISE FND_API.G_EXC_ERROR;
16561 ELSE
16562 OPEN l_get_task_csr
16563 (l_project_id,p_tasks_in(i).pm_task_reference);
16564 FETCH l_get_task_csr INTO l_task_id;
16565 CLOSE l_get_task_csr;
16566 END IF;
16567
16568 ELSE --if task_id is given, check it's validity
16569 --pambu1('Check Task ID validity');
16570 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
16571 -- pa_project_pvt.convert_pm_taskref_to_id_all
16572 pa_project_pvt.convert_pm_taskref_to_id_all
16573 (p_pa_project_id => l_project_id
16574 ,p_structure_type => l_structure_type
16575 ,p_pa_task_id => p_tasks_in(i).pa_task_id
16576 ,p_pm_task_reference => NULL
16577 ,p_out_task_id => l_task_id
16578 ,p_return_status => l_return_status );
16579 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16580 THEN
16581 l_tasks_out(i).return_status := l_return_status;
16582 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16583
16584 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16585 THEN
16586 l_tasks_out(i).return_status := l_return_status;
16587 p_multiple_task_msg := 'F';
16588 -- RAISE FND_API.G_EXC_ERROR;
16589 END IF;
16590 END IF;
16591
16592 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
16593 (p_task_number=> p_tasks_in(i).task_name
16594 ,p_task_reference => p_tasks_in(i).pm_task_reference
16595 ,p_task_id => l_task_id);
16596 IF l_task_id IS NULL
16597 THEN
16598
16599 -- Actions performed using the APIs would be subject to
16600 -- function security. If the responsibility does not allow
16601 -- such functions to be executed, the API should not proceed further
16602 -- since the user does not have access to such functions
16603
16604 -- Function security procedure check whether user have the
16605 -- privilege to add task or not
16606
16607 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
16608 --above before checking for update_project function.
16609
16610 --BUG 4413568 DHI ER , rtarway, if p_update_mode is PA_UPD_TASK_ATTR, WBS/FBS hierarchy can not be changed.
16611 --if l_task_id is null, means this is a new task, so we should be raising an error at this point itself
16612 IF ( p_update_mode = 'PA_UPD_TASK_ATTR') THEN
16613 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16614 p_msg_name => 'PA_WBS_CANT_CHANGE');
16615 RAISE FND_API.G_EXC_ERROR;
16616 END IF;
16617
16618 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
16619 (p_api_version_number => p_api_version_number,
16620 p_responsibility_id => l_resp_id,
16621 p_function_name => 'PA_PM_ADD_TASK',
16622 p_msg_count => l_msg_count,
16623 p_msg_data => l_msg_data,
16624 p_return_status => l_return_status,
16625 p_function_allowed => l_function_allowed);
16626
16627 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16628 THEN
16629 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16630
16631 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16632 THEN
16633 p_multiple_task_msg := 'F';
16634 -- RAISE FND_API.G_EXC_ERROR;
16635 END IF;
16636
16637 IF l_function_allowed = 'N' THEN
16638 pa_interface_utils_pub.map_new_amg_msg
16639 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
16640 ,p_msg_attribute => 'CHANGE'
16641 ,p_resize_flag => 'Y'
16642 ,p_msg_context => 'GENERAL'
16643 ,p_attribute1 => ''
16644 ,p_attribute2 => ''
16645 ,p_attribute3 => ''
16646 ,p_attribute4 => ''
16647 ,p_attribute5 => '');
16648 p_return_status := FND_API.G_RET_STS_ERROR;
16649 p_multiple_task_msg := 'F';
16650 -- RAISE FND_API.G_EXC_ERROR;
16651 END IF;
16652
16653 -- check whether the input task number is unique
16654 IF pa_task_utils.check_unique_task_number
16655 (l_project_id, p_tasks_in(i).pa_task_number,NULL) = 0 THEN
16656 -- this means that the task number will not be unique
16657 -- however,the existing task with that task number may get
16658 -- changed during the update process. Hence,we need to process this
16659 -- task only after all tasks have been processed
16660 l_deferred_tasks_count := l_deferred_tasks_count +1;
16661 l_deferred_new_tasks_tbl(l_deferred_tasks_count) := p_tasks_in(i);
16662 l_deferred_tasks_index_tbl(l_deferred_tasks_count).task_index
16663 := i;
16664 -- l_deferred_tasks_index_tbl(l_deferred_tasks_count).task_index );
16665 ELSE
16666 --l_count := i;
16667 IF l_added_task_tbl.exists(1) THEN
16668 l_count := l_added_task_tbl.COUNT + 1;
16669 ELSE
16670 l_count := 1;
16671 END IF;
16672 l_added_task_tbl(l_count) := p_tasks_in(i);
16673 l_task_rec := l_added_task_tbl(l_count);
16674
16675 -- Check whether the Parent_Task_Reference is not null
16676 -- Following checking will allow you to create only sub_tasks
16677 -- under parent task.
16678 -- *O
16679 IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
16680 (p_tasks_in(i).pm_parent_task_reference IS NOT NULL
16681 AND p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
16682 THEN
16683 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
16684 -- pa_project_pvt.convert_pm_taskref_to_id_all
16685 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
16686 ( p_pa_project_id => l_project_id
16687 , p_structure_type => l_structure_type
16688 , p_pa_task_id => p_tasks_in(i).pa_parent_task_id
16689 , p_pm_task_reference => p_tasks_in(i).pm_parent_task_reference
16690 , p_out_task_id => l_task_id_out
16691 , p_return_status => l_return_status );
16692 l_ref_task_id := l_task_id_out; --aditi Added for Bug 3801314 : Bug 3627124
16693 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
16694 THEN
16695
16696 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16697
16698 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR)
16699 THEN
16700 p_multiple_task_msg := 'F';
16701 -- RAISE FND_API.G_EXC_ERROR;
16702 END IF;
16703
16704 PA_TASK_UTILS.Check_Create_Subtask_Ok
16705 ( x_task_id => l_task_id_out
16706 --bug 3010538 , x_validation_mode => 'R' --bug 2947492
16707 , x_err_code => l_err_code
16708 , x_err_stage => l_err_stage
16709 , x_err_stack => l_err_stack );
16710
16711 IF l_err_code <> 0
16712 THEN
16713 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
16714 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
16715 THEN
16716 pa_interface_utils_pub.map_new_amg_msg
16717 ( p_old_message_code => 'PA_CHECK_ADD_SUBTASK_FAILED'
16718 ,p_msg_attribute => 'CHANGE'
16719 ,p_resize_flag => 'Y'
16720 ,p_msg_context => 'ADDT'
16721 ,p_attribute1 => l_project_rec.segment1
16722 ,p_attribute2 => l_amg_task_number
16723 ,p_attribute3 => ''
16724 ,p_attribute4 => ''
16725 ,p_attribute5 => '');
16726 ELSE
16727 pa_interface_utils_pub.map_new_amg_msg
16728 ( p_old_message_code => l_err_stage
16729 ,p_msg_attribute => 'SPLIT'
16730 ,p_resize_flag => 'Y'
16731 ,p_msg_context => 'ADDST'
16732 ,p_attribute1 => l_project_rec.segment1
16733 ,p_attribute2 => l_amg_task_number
16734 ,p_attribute3 => ''
16735 ,p_attribute4 => ''
16736 ,p_attribute5 => '');
16737 END IF;
16738 END IF;
16739 l_tasks_out(i).return_status := FND_API.G_RET_STS_ERROR;
16740 p_multiple_task_msg := 'F';
16741 -- RAISE FND_API.G_EXC_ERROR;
16742
16743 END IF;
16744 END IF;
16745
16746 /* Code addition for bug 2982057 starts */
16747 IF l_task_rec.long_task_name IS NULL OR l_task_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16748 then
16749 l_task_rec.long_task_name := l_task_rec.task_name;
16750 else
16751 l_task_rec.long_task_name :=l_task_rec.long_task_name;
16752 end if;
16753 /* Code addition for bug 2982057 ends */
16754 PA_PROJECT_PVT.add_task_round_one
16755 (p_return_status => l_return_status,
16756 p_project_rec => l_project_rec,
16757 p_task_rec => l_task_rec,
16758 p_project_type_class_code => l_project_type_class_code,
16759 p_service_type_code => l_service_type_code,
16760 p_task_id => l_task_id);
16761 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16762 THEN
16763
16764 l_tasks_out(i).return_status := l_return_status;
16765 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16766
16767 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16768 THEN
16769 l_tasks_out(i).return_status := l_return_status;
16770 p_multiple_task_msg := 'F';
16771 -- RAISE FND_API.G_EXC_ERROR;
16772
16773 END IF;
16774 l_tasks_out(i).pa_task_id := l_task_id;
16775
16776 --used to pass task_id to add_task_round_two API
16777 l_task_id_tbl(l_count).pa_task_id := l_task_id;
16778 END IF;
16779
16780 ELSE -- (if l_task_id is not null, that means this is an
16781 -- existing task. so need to update the task )
16782 -- ---------------------------------------------------------------------------
16783
16784 -- * SPECIAL HANDLING FOR TASK NUMBER CHANGES. THIS IS TO TAKE CARE
16785 -- * OF TASK NUMBER INTERCHANGES . Eg: Task 2.1 being updated to
16786 -- * 2.3 and Task 2.3 being updated to 2.1
16787
16788 -- 1. Get the existing task number -
16789 -- 2. compare existing task number and the incoming task number
16790 -- required inputs task id and task number from the input array
16791 -- 3. If same, proceed with update_task
16792 -- else
16793 -- check whether the new number would be unique
16794 -- If yes, then proceed with the update
16795 -- else, get the task_id and pm_task reference of the
16796 -- original task - the one whose task number is = to the
16797 -- current task's new task number
16798 -- scan the input array to check whether this task's number
16799 -- is also being changed - required input - task array
16800 -- If no, then raise error,since cannot change the number
16801 -- of the current task
16802 -- If yes, then store the index of the current task
16803 -- in a different array and increment a counter - global array
16804 -- Let us call this array Task_Number_Updated_Array
16805 -- Update the task number of the current task as G_PA_MISS_CHAR || counter
16806 -- in the database
16807 -- process the next task in the array
16808
16809 --------------------------------------------------------------------------------
16810 l_proceed_with_update_flag := 'Y';
16811 ----dbms_output.put_line('calling pa_project_pvt.handle_task_number_changes l_task_id'||l_task_id);
16812 ----dbms_output.put_line('value of p_tasks_in(i).pa_task_number'||p_tasks_in(i).pa_task_number);
16813
16814 pa_project_pvt.handle_task_number_change
16815 (p_project_id => l_project_id,
16816 p_task_id => l_task_id,
16817 p_array_cell_number => i,
16818 p_in_task_number => p_tasks_in(i).pa_task_number,
16819 p_in_task_tbl => p_tasks_in,
16820 p_proceed_with_update_flag => l_proceed_with_update_flag,
16821 p_return_status => l_return_status);
16822
16823 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
16824 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16825 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
16826 p_multiple_task_msg := 'F';
16827 -- RAISE FND_API.G_EXC_ERROR;
16828 END IF;
16829 ----dbms_output.put_line('value of l_proceed_with_update_flag'||l_proceed_with_update_flag);
16830 IF l_proceed_with_update_flag = 'Y' THEN
16831
16832 --Project Structures
16833 /** COMMENTED FOR BUG 3841742 :3832333 : This code was assuming that the tasks will
16834 be passed in the correct heirarchy and that the reference task id of the new task being
16835 created was set to the task_id of the most recently created task. This was leading to
16836 the error while updating tasks if the new task had a different top task than the one just
16837 created */
16838 /** v_first_index := p_tasks_in.first;
16839 v_last_index := p_tasks_in.last;
16840
16841 IF i > v_first_index AND
16842 l_tasks_out(i-1).pa_task_id IS NOT NULL AND
16843 l_tasks_out(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16844 THEN
16845 v_ref_task_id := l_tasks_out(i-1).pa_task_id;
16846 ELSIF i > v_first_index AND
16847 p_tasks_in(i-1).pa_task_id IS NOT NULL AND
16848 p_tasks_in(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16849 THEN
16850 v_ref_task_id := p_tasks_in(i-1).pa_task_id;
16851 ELSE
16852 v_ref_task_id := null;
16853 END IF; END OF COMMENTED PART FOR BUG 3841742 :3832333**/
16854 /** ADDED FOR BUG 3841742 : 3832333 :This code will assign parent_task_id to v_ref_task_id
16855 , if parent is not null.Else v_ref_task_id wil be set to null for top tasks.**/
16856 IF ((p_tasks_in(i).pa_parent_task_id IS NOT NULL AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
16857 OR
16858 (p_tasks_in(i).pm_parent_task_reference IS NOT NULL AND p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
16859 AND p_structure_in.structure_type = 'FINANCIAL'
16860
16861 THEN
16862
16863 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
16864 -- pa_project_pvt.convert_pm_taskref_to_id_all
16865 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
16866 ( p_pa_project_id => l_project_id
16867 , p_structure_type => l_structure_type
16868 , p_pa_task_id => p_tasks_in(i).pa_parent_task_id
16869 , p_pm_task_reference => p_tasks_in(i).pm_parent_task_reference
16870 , p_out_task_id => l_task_id_out
16871 , p_return_status => l_return_status );
16872 v_ref_task_id := l_task_id_out; --aditi Added for Bug 3798429: Bug 3801314
16873 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
16874 THEN
16875
16876 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16877
16878 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR)
16879 THEN
16880 p_multiple_task_msg := 'F';
16881 -- RAISE FND_API.G_EXC_ERROR;
16882 END IF;
16883 ELSE
16884 v_ref_task_id := null;
16885 END IF;
16886 /*** CHANGES END FOR BUG 3841742 : 3832333 **/
16887 -- --dbms_output.put_line('value of v_ref_task_id passed : '||v_ref_task_id||' AND for task_id :'||p_tasks_in(i).pa_task_number);
16888 -- --dbms_output.put_line('task etc Effort :'||p_tasks_in(i).etc_effort);
16889 -- --dbms_output.put_line('% complete'||p_tasks_in(i).percent_complete);
16890 --Project Structures
16891 IF l_debug_mode = 'Y' THEN
16892 pa_debug.write(l_module_name,'Calling update Task',3);
16893 pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(i).etc_effort,3);
16894 pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(i).percent_complete,3);
16895 END IF;
16896 ----dbms_output.put_line('value of p_tasks_in(i).pa_task_number before calling update_task'||p_tasks_in(i).pa_task_number);
16897
16898 Update_Task (
16899 p_api_version_number => p_api_version_number,
16900 p_commit => FND_API.G_FALSE,
16901 p_msg_count => p_msg_count,
16902 p_msg_data => p_msg_data,
16903 p_return_status => l_return_status,
16904 p_pm_product_code => p_pm_product_code,
16905 p_pa_project_id => l_project_id,
16906 p_pa_task_id => l_task_id,
16907 --Project Structures
16908 p_ref_task_id => v_ref_task_id,
16909 --Project Structures
16910 p_pm_task_reference => p_tasks_in(i).pm_task_reference,
16911 p_task_number => p_tasks_in(i).pa_task_number,
16912 p_task_name => p_tasks_in(i).task_name,
16913 p_long_task_name => p_tasks_in(i).long_task_name,
16914 p_task_description => p_tasks_in(i).task_description,
16915 p_task_start_date => p_tasks_in(i).task_start_date,
16916 p_task_completion_date => p_tasks_in(i).task_completion_date,
16917 -- Start Fix for Bug # 1289156
16918 p_early_start_date => p_tasks_in(i).early_start_date,
16919 p_early_finish_date => p_tasks_in(i).early_finish_date,
16920 p_late_start_date => p_tasks_in(i).late_start_date,
16921 p_late_finish_date => p_tasks_in(i).late_finish_date,
16922 p_actual_start_date => p_tasks_in(i).actual_start_date,
16923 p_actual_finish_date => p_tasks_in(i).actual_finish_date,
16924 -- End Fix for Bug # 1289156
16925 p_pm_parent_task_reference => p_tasks_in(i).pm_parent_task_reference,
16926 p_pa_parent_task_id => p_tasks_in(i).pa_parent_task_id,
16927 p_address_id => p_tasks_in(i).address_id,
16928 p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id,
16929 p_service_type_code => p_tasks_in(i).service_type_code,
16930 p_task_manager_person_id => p_tasks_in(i).task_manager_person_id,
16931 p_billable_flag => p_tasks_in(i).billable_flag,
16932 p_chargeable_flag => p_tasks_in(i).chargeable_flag,
16933 p_ready_to_bill_flag => p_tasks_in(i).ready_to_bill_flag,
16934 p_ready_to_distribute_flag => p_tasks_in(i).ready_to_distribute_flag,
16935 p_limit_to_txn_controls_flag => p_tasks_in(i).limit_to_txn_controls_flag,
16936 p_labor_bill_rate_org_id => p_tasks_in(i).labor_bill_rate_org_id,
16937 p_labor_std_bill_rate_schdl => p_tasks_in(i).labor_std_bill_rate_schdl,
16938 p_labor_schedule_fixed_date => p_tasks_in(i).labor_schedule_fixed_date,
16939 p_labor_schedule_discount => p_tasks_in(i).labor_schedule_discount,
16940 p_nl_bill_rate_org_id => p_tasks_in(i).non_labor_bill_rate_org_id,
16941 p_nl_std_bill_rate_schdl => p_tasks_in(i).non_labor_std_bill_rate_schdl,
16942 p_nl_schedule_fixed_date => p_tasks_in(i).non_labor_schedule_fixed_date,
16943 p_nl_schedule_discount => p_tasks_in(i).non_labor_schedule_discount,
16944 p_labor_cost_multiplier_name => p_tasks_in(i).labor_cost_multiplier_name,
16945 p_cost_ind_rate_sch_id => p_tasks_in(i).cost_ind_rate_sch_id,
16946 p_rev_ind_rate_sch_id => p_tasks_in(i).rev_ind_rate_sch_id,
16947 p_inv_ind_rate_sch_id => p_tasks_in(i).inv_ind_rate_sch_id,
16948 p_cost_ind_sch_fixed_date => p_tasks_in(i).cost_ind_sch_fixed_date,
16949 p_rev_ind_sch_fixed_date => p_tasks_in(i).rev_ind_sch_fixed_date,
16950 p_inv_ind_sch_fixed_date => p_tasks_in(i).inv_ind_sch_fixed_date,
16951 p_labor_sch_type => p_tasks_in(i).labor_sch_type,
16952 p_nl_sch_type => p_tasks_in(i).non_labor_sch_type,
16953 p_tasks_dff => p_tasks_in(i).tasks_dff, --bug 6153503
16954 p_attribute_category => p_tasks_in(i).attribute_category,
16955 p_attribute1 => p_tasks_in(i).attribute1,
16956 p_attribute2 => p_tasks_in(i).attribute2,
16957 p_attribute3 => p_tasks_in(i).attribute3,
16958 p_attribute4 => p_tasks_in(i).attribute4,
16959 p_attribute5 => p_tasks_in(i).attribute5,
16960 p_attribute6 => p_tasks_in(i).attribute6,
16961 p_attribute7 => p_tasks_in(i).attribute7,
16962 p_attribute8 => p_tasks_in(i).attribute8,
16963 p_attribute9 => p_tasks_in(i).attribute9,
16964 p_attribute10 => p_tasks_in(i).attribute10,
16965 --bug 6153503
16966 p_attribute11 => p_tasks_in(i).attribute11,
16967 p_attribute12 => p_tasks_in(i).attribute12,
16968 p_attribute13 => p_tasks_in(i).attribute13,
16969 p_attribute14 => p_tasks_in(i).attribute14,
16970 p_attribute15 => p_tasks_in(i).attribute15,
16971 p_allow_cross_charge_flag =>
16972 p_tasks_in(i).allow_cross_charge_flag,
16973 p_project_rate_type => p_tasks_in(i).project_rate_type,
16974 p_project_rate_date => p_tasks_in(i).project_rate_date,
16975 p_cc_process_labor_flag => p_tasks_in(i).cc_process_labor_flag,
16976 p_labor_tp_schedule_id => p_tasks_in(i).labor_tp_schedule_id,
16977 p_labor_tp_fixed_date => p_tasks_in(i).labor_tp_fixed_date,
16978 p_cc_process_nl_flag => p_tasks_in(i).cc_process_nl_flag,
16979 p_nl_tp_schedule_id => p_tasks_in(i).nl_tp_schedule_id,
16980 p_nl_tp_fixed_date => p_tasks_in(i).nl_tp_fixed_date,
16981 p_receive_project_invoice_flag =>
16982 p_tasks_in(i).receive_project_invoice_flag,
16983 p_work_type_id => p_tasks_in(i).work_type_id,
16984 p_emp_bill_rate_schedule_id => p_tasks_in(i).emp_bill_rate_schedule_id,
16985 p_job_bill_rate_schedule_id => p_tasks_in(i).job_bill_rate_schedule_id,
16986 --Sakthi MCB
16987 p_non_lab_std_bill_rt_sch_id => p_tasks_in(i).non_lab_std_bill_rt_sch_id,
16988 p_taskfunc_cost_rate_type => p_tasks_in(i).taskfunc_cost_rate_type,
16989 p_taskfunc_cost_rate_date => p_tasks_in(i).taskfunc_cost_rate_date,
16990 --Sakthi MCB
16991 p_labor_disc_reason_code => p_tasks_in(i).labor_disc_reason_code,
16992 p_non_labor_disc_reason_code => p_tasks_in(i).non_labor_disc_reason_code,
16993 --project structures
16994 --bug 2744729, 2740565
16995 p_structure_type => l_structure_type,
16996 p_structure_version_id => p_structure_in.structure_version_id,
16997 P_OBLIGATION_START_DATE => p_tasks_in(i).OBLIGATION_START_DATE,
16998 P_OBLIGATION_FINISH_DATE => p_tasks_in(i).OBLIGATION_FINISH_DATE,
16999 P_ESTIMATED_START_DATE => p_tasks_in(i).ESTIMATED_START_DATE,
17000 P_ESTIMATED_FINISH_DATE => p_tasks_in(i).ESTIMATED_FINISH_DATE,
17001 P_BASELINE_START_DATE => p_tasks_in(i).BASELINE_START_DATE,
17002 P_BASELINE_FINISH_DATE => p_tasks_in(i).BASELINE_FINISH_DATE,
17003 P_CLOSED_DATE => p_tasks_in(i).CLOSED_DATE,
17004 P_WQ_UOM_CODE => p_tasks_in(i).WQ_UOM_CODE,
17005 P_WQ_ITEM_CODE => p_tasks_in(i).WQ_ITEM_CODE,
17006 P_STATUS_CODE => p_tasks_in(i).STATUS_CODE,
17007 P_WF_STATUS_CODE => p_tasks_in(i).WF_STATUS_CODE,
17008 P_PM_SOURCE_CODE => p_tasks_in(i).PM_SOURCE_CODE,
17009 P_PRIORITY_CODE => p_tasks_in(i).PRIORITY_CODE,
17010 P_MILESTONE_FLAG => p_tasks_in(i).MILESTONE_FLAG,
17011 P_CRITICAL_FLAG => p_tasks_in(i).CRITICAL_FLAG,
17012 P_INC_PROJ_PROGRESS_FLAG => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG,
17013 P_LINK_TASK_FLAG => p_tasks_in(i).LINK_TASK_FLAG,
17014 P_CALENDAR_ID => p_tasks_in(i).CALENDAR_ID,
17015 P_PLANNED_EFFORT => p_tasks_in(i).PLANNED_EFFORT,
17016 P_DURATION => p_tasks_in(i).DURATION,
17017 P_PLANNED_WORK_QUANTITY => p_tasks_in(i).PLANNED_WORK_QUANTITY,
17018 P_TASK_TYPE => p_tasks_in(i).TASK_TYPE,
17019 --bug 2856033
17020 p_scheduled_start_date => p_tasks_in(i).scheduled_start_date,
17021 p_scheduled_finish_date => p_tasks_in(i).scheduled_finish_date,
17022 --bug 2744729, 2740565
17023 --Project Structures
17024 --PA L Changes 2872708
17025 p_retirement_cost_flag => p_tasks_in(i).retirement_cost_flag,
17026 p_cint_eligible_flag => p_tasks_in(i).cint_eligible_flag,
17027 p_cint_stop_date => p_tasks_in(i).cint_stop_date,
17028 --End PA L changes 2872708
17029 p_out_pa_task_id => l_out_pa_task_id,
17030 p_out_pm_task_reference => l_out_pm_task_reference,
17031 p_update_task_structure => l_update_task_structure -- for bug 2931183 to indicate bulk structure processing
17032 -- modified p_update_task_structure value for bug 3548473 : Bug 3627124
17033 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
17034 ,p_ext_act_duration => p_tasks_in(i).ext_act_duration
17035 ,p_ext_remain_duration => p_tasks_in(i).ext_remain_duration
17036 ,p_ext_sch_duration => p_tasks_in(i).ext_sch_duration
17037 -- (End venkat) new params for bug #3450684 -------------------------------------------------
17038
17039 -- set the new params - bug #3654243 ----------------------------------------------
17040 ,p_base_percent_comp_deriv_code => p_tasks_in(i).base_percent_comp_deriv_code
17041 ,p_sch_tool_tsk_type_code => p_tasks_in(i).sch_tool_tsk_type_code
17042 ,p_constraint_type_code => p_tasks_in(i).constraint_type_code
17043 ,p_constraint_date => p_tasks_in(i).constraint_date
17044 ,p_free_slack => p_tasks_in(i).free_slack
17045 ,p_total_slack => p_tasks_in(i).total_slack
17046 ,p_effort_driven_flag => p_tasks_in(i).effort_driven_flag
17047 ,p_level_assignments_flag => p_tasks_in(i).level_assignments_flag
17048 ,p_gen_etc_source_code => p_tasks_in(i).gen_etc_source_code
17049 -- set the new params - bug #3654243 -------------------------------------------------
17050
17051
17052 -- For bug 3279981 Review
17053 ,p_invoice_method => p_tasks_in(i).invoice_method
17054 ,p_customer_id => p_tasks_in(i).customer_id
17055 ,p_is_wp_seperate_from_fn => l_is_wp_seperate_from_fn -- Added for bug#3451073
17056 --Added by rtarway, for BUG 3919800
17057 , p_etc_effort => p_tasks_in(i).etc_effort
17058 , p_percent_complete => p_tasks_in(i).percent_complete
17059 --Added by rtarway, for BUG 3919800
17060 ,p_calling_api => 'UPDATE_PROJECT' --Bug # 4199694
17061 );
17062
17063 IF l_debug_mode = 'Y' THEN
17064 pa_debug.g_err_stage := 'After update_task first call...l_return_status=||l_return_status';
17065 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17066 END IF;
17067
17068
17069 ----dbms_output.put_line('Value of return status of update_task' ||l_return_status);
17070
17071 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17072 THEN
17073
17074 l_tasks_out(i).return_status := l_return_status;
17075 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17076
17077 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17078 THEN
17079 l_tasks_out(i).return_status := l_return_status;
17080 p_multiple_task_msg := 'F';
17081 -- RAISE FND_API.G_EXC_ERROR;
17082
17083 END IF;
17084
17085 l_tasks_out(i).pa_task_id := l_task_id;
17086 l_tasks_out(i).pm_task_reference := l_out_pm_task_reference;
17087 END IF; -- If l_proceed_with_update_flag = 'Y'
17088 END IF; -- If l_task_id IS NULL
17089
17090 i := p_tasks_in.next(i);
17091
17092 END LOOP;
17093
17094 END IF;
17095 -- Scan the Task_Number_Updated_Array
17096 -- If there are any records in this array,
17097 -- get the index that is already stored and
17098 -- call update_task for that task
17099 -- For eg: If the 8th and 14th task records had been
17100 -- marked for this special Task number update
17101 -- then call Update_task API for these two task records
17102
17103 --Project Structures
17104 v_first_index := p_tasks_in.first;
17105 v_last_index := p_tasks_in.last;
17106 --Project Structures
17107
17108 IF pa_project_check_pvt.G_index_counter > 0 THEN
17109 IF pa_project_check_pvt.G_task_num_updated_index_tbl.EXISTS (1) THEN
17110 FOR i in 1..pa_project_check_pvt.G_task_num_updated_index_tbl.COUNT LOOP
17111 l_array_index :=
17112 pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_index;
17113
17114 --Project Structures
17115 for j in v_first_index..v_last_index loop
17116 IF pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_id = p_tasks_in(j).pa_task_id AND
17117 j > v_first_index
17118 THEN
17119 v_ref_task_id := p_tasks_in(j-1).pa_task_id;
17120 ELSE
17121 v_ref_task_id := null;
17122 END IF;
17123 end loop;
17124 --Project Structures
17125
17126 IF l_debug_mode = 'Y' THEN
17127 pa_debug.write(l_module_name,'Calling update Task',3);
17128 pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(l_array_index).etc_effort,3);
17129 pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(l_array_index).percent_complete,3);
17130 END IF;
17131 Update_Task (
17132 p_api_version_number => p_api_version_number,
17133 p_commit => FND_API.G_FALSE,
17134 p_msg_count => p_msg_count,
17135 p_msg_data => p_msg_data,
17136 p_return_status => l_return_status,
17137 p_pm_product_code => p_pm_product_code,
17138 p_pa_project_id => l_project_id,
17139 p_pa_task_id =>
17140 pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_id,
17141 --Project Structures
17142 p_ref_task_id => v_ref_task_id,
17143 --Project STRUCTUres
17144 p_pm_task_reference =>
17145 p_tasks_in(l_array_index).pm_task_reference,
17146 p_task_number =>
17147 p_tasks_in(l_array_index).pa_task_number,
17148 p_task_name =>
17149 p_tasks_in(l_array_index).task_name,
17150 p_long_task_name =>
17151 p_tasks_in(l_array_index).long_task_name,
17152 p_task_description =>
17153 p_tasks_in(l_array_index).task_description,
17154 p_task_start_date =>
17155 p_tasks_in(l_array_index).task_start_date,
17156 p_task_completion_date =>
17157 p_tasks_in(l_array_index).task_completion_date,
17158 -- Start Fix for Bug # 1289156
17159 p_early_start_date =>
17160 p_tasks_in(l_array_index).early_start_date,
17161 p_early_finish_date =>
17162 p_tasks_in(l_array_index).early_finish_date,
17163 p_late_start_date =>
17164 p_tasks_in(l_array_index).late_start_date,
17165 p_late_finish_date =>
17166 p_tasks_in(l_array_index).late_finish_date,
17167 p_actual_start_date =>
17168 p_tasks_in(l_array_index).actual_start_date,
17169 p_actual_finish_date =>
17170 p_tasks_in(l_array_index).actual_finish_date,
17171 -- End Fix for Bug # 1289156
17172 p_pm_parent_task_reference =>
17173 p_tasks_in(l_array_index).pm_parent_task_reference,
17174 p_pa_parent_task_id =>
17175 p_tasks_in(l_array_index).pa_parent_task_id,
17176 p_address_id =>
17177 p_tasks_in(l_array_index).address_id,
17178 p_carrying_out_organization_id =>
17179 p_tasks_in(l_array_index).carrying_out_organization_id,
17180 p_service_type_code =>
17181 p_tasks_in(l_array_index).service_type_code,
17182 p_task_manager_person_id =>
17183 p_tasks_in(l_array_index).task_manager_person_id,
17184 p_billable_flag =>
17185 p_tasks_in(l_array_index).billable_flag,
17186 p_chargeable_flag =>
17187 p_tasks_in(l_array_index).chargeable_flag,
17188 p_ready_to_bill_flag =>
17189 p_tasks_in(l_array_index).ready_to_bill_flag,
17190 p_ready_to_distribute_flag =>
17191 p_tasks_in(l_array_index).ready_to_distribute_flag,
17192 p_limit_to_txn_controls_flag =>
17193 p_tasks_in(l_array_index).limit_to_txn_controls_flag,
17194 p_labor_bill_rate_org_id =>
17195 p_tasks_in(l_array_index).labor_bill_rate_org_id,
17196 p_labor_std_bill_rate_schdl =>
17197 p_tasks_in(l_array_index).labor_std_bill_rate_schdl,
17198 p_labor_schedule_fixed_date =>
17199 p_tasks_in(l_array_index).labor_schedule_fixed_date,
17200 p_labor_schedule_discount =>
17201 p_tasks_in(l_array_index).labor_schedule_discount,
17202 p_nl_bill_rate_org_id =>
17203 p_tasks_in(l_array_index).non_labor_bill_rate_org_id,
17204 p_nl_std_bill_rate_schdl =>
17205 p_tasks_in(l_array_index).non_labor_std_bill_rate_schdl,
17206 p_nl_schedule_fixed_date =>
17207 p_tasks_in(l_array_index).non_labor_schedule_fixed_date,
17208 p_nl_schedule_discount =>
17209 p_tasks_in(l_array_index).non_labor_schedule_discount,
17210 p_labor_cost_multiplier_name =>
17211 p_tasks_in(l_array_index).labor_cost_multiplier_name,
17212 p_cost_ind_rate_sch_id =>
17213 p_tasks_in(l_array_index).cost_ind_rate_sch_id,
17214 p_rev_ind_rate_sch_id =>
17215 p_tasks_in(l_array_index).rev_ind_rate_sch_id,
17216 p_inv_ind_rate_sch_id =>
17217 p_tasks_in(l_array_index).inv_ind_rate_sch_id,
17218 p_cost_ind_sch_fixed_date =>
17219 p_tasks_in(l_array_index).cost_ind_sch_fixed_date,
17220 p_rev_ind_sch_fixed_date =>
17221 p_tasks_in(l_array_index).rev_ind_sch_fixed_date,
17222 p_inv_ind_sch_fixed_date =>
17223 p_tasks_in(l_array_index).inv_ind_sch_fixed_date,
17224 p_labor_sch_type =>
17225 p_tasks_in(l_array_index).labor_sch_type,
17226 p_nl_sch_type =>
17227 p_tasks_in(l_array_index).non_labor_sch_type,
17228 p_tasks_dff => p_tasks_in(l_array_index).tasks_dff, --bug 6153503
17229 p_attribute_category =>
17230 p_tasks_in(l_array_index).attribute_category,
17231 p_attribute1 => p_tasks_in(l_array_index).attribute1,
17232 p_attribute2 => p_tasks_in(l_array_index).attribute2,
17233 p_attribute3 => p_tasks_in(l_array_index).attribute3,
17234 p_attribute4 => p_tasks_in(l_array_index).attribute4,
17235 p_attribute5 => p_tasks_in(l_array_index).attribute5,
17236 p_attribute6 => p_tasks_in(l_array_index).attribute6,
17237 p_attribute7 => p_tasks_in(l_array_index).attribute7,
17238 p_attribute8 => p_tasks_in(l_array_index).attribute8,
17239 p_attribute9 => p_tasks_in(l_array_index).attribute9,
17240 p_attribute10 => p_tasks_in(l_array_index).attribute10,
17241 --bug 6153503
17242 p_attribute11 => p_tasks_in(l_array_index).attribute11,
17243 p_attribute12 => p_tasks_in(l_array_index).attribute12,
17244 p_attribute13 => p_tasks_in(l_array_index).attribute13,
17245 p_attribute14 => p_tasks_in(l_array_index).attribute14,
17246 p_attribute15 => p_tasks_in(l_array_index).attribute15,
17247 --Chnaged the index from i to l_array_index for BUG 4016583, rtarway
17248 p_allow_cross_charge_flag => p_tasks_in(l_array_index).allow_cross_charge_flag,
17249 p_project_rate_type => p_tasks_in(l_array_index).project_rate_type,
17250 p_project_rate_date => p_tasks_in(l_array_index).project_rate_date,
17251 p_cc_process_labor_flag => p_tasks_in(l_array_index).cc_process_labor_flag,
17252 p_labor_tp_schedule_id => p_tasks_in(l_array_index).labor_tp_schedule_id,
17253 p_labor_tp_fixed_date => p_tasks_in(l_array_index).labor_tp_fixed_date,
17254 p_cc_process_nl_flag => p_tasks_in(l_array_index).cc_process_labor_flag,
17255 p_nl_tp_schedule_id => p_tasks_in(l_array_index).nl_tp_schedule_id,
17256 p_nl_tp_fixed_date => p_tasks_in(l_array_index).nl_tp_fixed_date,
17257 p_receive_project_invoice_flag => p_tasks_in(l_array_index).receive_project_invoice_flag,
17258 p_work_type_id => p_tasks_in(l_array_index).work_type_id,
17259 p_emp_bill_rate_schedule_id => p_tasks_in(l_array_index).emp_bill_rate_schedule_id,
17260 /* Bug#2802918 - Changed the passing parameter from emp_bill_rate_schedule_id to
17261 job_bill_rate_schedule_id below */
17262 p_job_bill_rate_schedule_id => p_tasks_in(l_array_index).job_bill_rate_schedule_id,
17263 --Sakthi MCB
17264 p_non_lab_std_bill_rt_sch_id => p_tasks_in(l_array_index).non_lab_std_bill_rt_sch_id,
17265 p_taskfunc_cost_rate_type => p_tasks_in(l_array_index).taskfunc_cost_rate_type,
17266 p_taskfunc_cost_rate_date => p_tasks_in(l_array_index).taskfunc_cost_rate_date,
17267 --End Changes for BUG 4016583, rtarway
17268 --Sakthi MCB
17269 p_labor_disc_reason_code => p_tasks_in(l_array_index).labor_disc_reason_code,
17270 p_non_labor_disc_reason_code => p_tasks_in(l_array_index).non_labor_disc_reason_code,
17271 --project structures
17272 --bug 2744729, 2740565
17273 p_structure_type => l_structure_type,
17274 p_structure_version_id => p_structure_in.structure_version_id,
17275 P_OBLIGATION_START_DATE => p_tasks_in(l_array_index).OBLIGATION_START_DATE,
17276 P_OBLIGATION_FINISH_DATE => p_tasks_in(l_array_index).OBLIGATION_FINISH_DATE,
17277 P_ESTIMATED_START_DATE => p_tasks_in(l_array_index).ESTIMATED_START_DATE,
17278
17279 P_ESTIMATED_FINISH_DATE => p_tasks_in(l_array_index).ESTIMATED_FINISH_DATE,
17280 P_BASELINE_START_DATE => p_tasks_in(l_array_index).BASELINE_START_DATE,
17281 P_BASELINE_FINISH_DATE => p_tasks_in(l_array_index).BASELINE_FINISH_DATE,
17282 P_CLOSED_DATE => p_tasks_in(l_array_index).CLOSED_DATE,
17283 P_WQ_UOM_CODE => p_tasks_in(l_array_index).WQ_UOM_CODE,
17284 P_WQ_ITEM_CODE => p_tasks_in(l_array_index).WQ_ITEM_CODE,
17285 P_STATUS_CODE => p_tasks_in(l_array_index).STATUS_CODE,
17286 P_WF_STATUS_CODE => p_tasks_in(l_array_index).WF_STATUS_CODE,
17287 P_PM_SOURCE_CODE => p_tasks_in(l_array_index).PM_SOURCE_CODE,
17288 P_PRIORITY_CODE => p_tasks_in(l_array_index).PRIORITY_CODE,
17289 P_MILESTONE_FLAG => p_tasks_in(l_array_index).MILESTONE_FLAG,
17290 P_CRITICAL_FLAG => p_tasks_in(l_array_index).CRITICAL_FLAG,
17291 P_INC_PROJ_PROGRESS_FLAG => p_tasks_in(l_array_index).INC_PROJ_PROGRESS_FLAG,
17292 P_LINK_TASK_FLAG => p_tasks_in(l_array_index).LINK_TASK_FLAG,
17293 P_CALENDAR_ID => p_tasks_in(l_array_index).CALENDAR_ID,
17294 P_PLANNED_EFFORT => p_tasks_in(l_array_index).PLANNED_EFFORT,
17295 P_DURATION => p_tasks_in(l_array_index).DURATION,
17296 P_PLANNED_WORK_QUANTITY => p_tasks_in(l_array_index).PLANNED_WORK_QUANTITY,
17297 P_TASK_TYPE => p_tasks_in(l_array_index).TASK_TYPE,
17298 --bug 2856033
17299 p_scheduled_start_date => p_tasks_in(l_array_index).scheduled_start_date,
17300 p_scheduled_finish_date => p_tasks_in(l_array_index).scheduled_finish_date,
17301 --bug 2744729, 2740565
17302 --project structures
17303 --Bug 3018061
17304 --PA L Changes 2872708
17305 p_retirement_cost_flag => p_tasks_in(l_array_index).retirement_cost_flag,
17306 p_cint_eligible_flag => p_tasks_in(l_array_index).cint_eligible_flag,
17307 p_cint_stop_date => p_tasks_in(l_array_index).cint_stop_date,
17308 --End PA L changes 2872708
17309 --end Bug 3018061
17310
17311 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
17312 p_ext_act_duration => p_tasks_in(l_array_index).ext_act_duration,
17313 p_ext_remain_duration => p_tasks_in(l_array_index).ext_remain_duration,
17314 p_ext_sch_duration => p_tasks_in(l_array_index).ext_sch_duration,
17315 -- (End venkat) new params for bug #3450684 -------------------------------------------------
17316
17317 -- set the new params - bug #3654243 ----------------------------------------------
17318 p_base_percent_comp_deriv_code => p_tasks_in(l_array_index).base_percent_comp_deriv_code
17319 ,p_sch_tool_tsk_type_code => p_tasks_in(l_array_index).sch_tool_tsk_type_code
17320 ,p_constraint_type_code => p_tasks_in(l_array_index).constraint_type_code
17321 ,p_constraint_date => p_tasks_in(l_array_index).constraint_date
17322 ,p_free_slack => p_tasks_in(l_array_index).free_slack
17323 ,p_total_slack => p_tasks_in(l_array_index).total_slack
17324 ,p_effort_driven_flag => p_tasks_in(l_array_index).effort_driven_flag
17325 ,p_level_assignments_flag => p_tasks_in(l_array_index).level_assignments_flag
17326 ,p_gen_etc_source_code => p_tasks_in(l_array_index).gen_etc_source_code
17327 ,p_invoice_method => p_tasks_in(l_array_index).invoice_method
17328 ,p_customer_id => p_tasks_in(l_array_index).customer_id,
17329 -- set the new params - bug #3654243 -------------------------------------------------
17330
17331
17332 p_out_pa_task_id => l_out_pa_task_id,
17333 p_out_pm_task_reference => l_out_pm_task_reference,
17334 p_update_task_structure => l_update_task_structure, -- for bug 2931183 to indicate bulk structure processing
17335 --Added by rtarway, for BUG 3919800
17336 p_etc_effort => p_tasks_in(l_array_index).etc_effort,
17337 p_percent_complete => p_tasks_in(l_array_index).percent_complete
17338 --Added by rtarway, for BUG 3919800
17339 ,p_calling_api => 'UPDATE_PROJECT' --Bug # 4199694
17340 ); -- modified p_update_task_structure value for bug 3548473 : Bug 3627124
17341
17342 IF l_debug_mode = 'Y' THEN
17343 pa_debug.g_err_stage := 'After update_task second call...l_return_status=||l_return_status';
17344 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17345 END IF;
17346
17347
17348 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
17349 l_tasks_out(l_array_index).return_status := l_return_status;
17350 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17351 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17352 l_tasks_out(l_array_index).return_status := l_return_status;
17353 p_multiple_task_msg := 'F';
17354 -- RAISE FND_API.G_EXC_ERROR;
17355 END IF;
17356 l_tasks_out(l_array_index).pa_task_id := l_out_pa_task_id;
17357 l_tasks_out(l_array_index).pm_task_reference := l_out_pm_task_reference;
17358 END LOOP;
17359 END IF; -- IF pa_project_check_pvt.G_task_num_updated_index_tbl.EXISTS (1)
17360 END IF; -- IF pa_project_check_pvt.G_index_counter > 0
17361
17362 /** Code change begin by aditi for Bug 4120380 **/
17363 /** The code below will update the task_numbers of the tasks passed via update_project script
17364 back to their original value viz. it'll crop the '-' added to aviod the constraint check in
17365 PA_TASKS and PA_PROJ_ELEMENTS. **/
17366
17367 /* bug #5243018: Reverting the fix in bug 4120380.
17368 i := 1;
17369 IF p_tasks_in.exists(i)
17370 THEN
17371 WHILE i IS NOT NULL LOOP
17372 UPDATE pa_tasks
17373 SET task_number = p_tasks_in(i).pa_task_number
17374 WHERE task_number = '-'||p_tasks_in(i).pa_task_number
17375 AND project_id = l_project_id; -- BUG 4174041, rtarway
17376 ----dbms_output.put_line('value of sql%rowcount'||sql%rowcount);
17377 UPDATE pa_proj_elements
17378 SET element_number = p_tasks_in(i).pa_task_number
17379 WHERE element_number = '-'||p_tasks_in(i).pa_task_number
17380 AND project_id = l_project_id; -- BUG 4174041, rtarway
17381 ----dbms_output.put_line('value of recod updates in pa_proj_elements'||sql%rowcount);
17382 i := p_tasks_in.next(i);
17383 END LOOP;
17384 End if;
17385 Revert end bug #5243018 */
17386
17387 /* Code change end by aditi for Bug 4120380 **/
17388
17389 -- Now process the deferred new tasks, since all tasks have been processed
17390
17391 IF l_deferred_tasks_count > 0 THEN
17392 FOR i in 1..l_deferred_new_tasks_tbl.COUNT LOOP
17393 IF l_added_task_tbl.exists(1) THEN
17394 l_count := l_added_task_tbl.COUNT + 1;
17395 ELSE
17396 l_count := 1;
17397 END IF;
17398 l_added_task_tbl(l_count):= l_deferred_new_tasks_tbl(i);
17399 l_task_rec := l_deferred_new_tasks_tbl(i);
17400 l_orig_index := l_deferred_tasks_index_tbl(i).task_index;
17401
17402 -- Actions performed using the APIs would be subject to
17403 -- function security. If the responsibility does not allow
17404 -- such functions to be executed, the API should not proceed further
17405 -- since the user does not have access to such functions
17406
17407 -- Function security procedure check whether user have the
17408 -- privilege to add task or not
17409
17410 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
17411 --above before checking for update_project function.
17412
17413 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
17414 (p_api_version_number => p_api_version_number,
17415 p_responsibility_id => l_resp_id,
17416 p_function_name => 'PA_PM_ADD_TASK',
17417 p_msg_count => l_msg_count,
17418 p_msg_data => l_msg_data,
17419 p_return_status => l_return_status,
17420 p_function_allowed => l_function_allowed);
17421
17422 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17423 THEN
17424 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17425
17426 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17427 THEN
17428 p_multiple_task_msg := 'F';
17429 -- RAISE FND_API.G_EXC_ERROR;
17430 END IF;
17431
17432 IF l_function_allowed = 'N' THEN
17433 pa_interface_utils_pub.map_new_amg_msg
17434 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
17435 ,p_msg_attribute => 'CHANGE'
17436 ,p_resize_flag => 'Y'
17437 ,p_msg_context => 'GENERAL'
17438 ,p_attribute1 => ''
17439 ,p_attribute2 => ''
17440 ,p_attribute3 => ''
17441 ,p_attribute4 => ''
17442 ,p_attribute5 => '');
17443 p_return_status := FND_API.G_RET_STS_ERROR;
17444 p_multiple_task_msg := 'F';
17445 -- RAISE FND_API.G_EXC_ERROR;
17446 END IF;
17447
17448 /* Code addition for bug 2982057 starts */
17449 IF l_task_rec.long_task_name IS NULL OR l_task_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17450 then
17451 l_task_rec.long_task_name := l_task_rec.task_name;
17452 else
17453 l_task_rec.long_task_name :=l_task_rec.long_task_name;
17454 end if;
17455 /* Code addition for bug 2982057 ends */
17456 --DHI ER, bug 4413568
17457 IF ( p_update_mode = 'PA_UPD_TASK_ATTR' ) THEN --bug 4534919
17458 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
17459 p_msg_name => 'PA_WBS_CANT_CHANGE');
17460 RAISE FND_API.G_EXC_ERROR;
17461 END IF;
17462 PA_PROJECT_PVT.add_task_round_one
17463 (p_return_status => l_return_status,
17464 p_project_rec => l_project_rec,
17465 p_task_rec => l_task_rec,
17466 p_project_type_class_code => l_project_type_class_code,
17467 p_service_type_code => l_service_type_code,
17468 p_task_id => l_task_id);
17469
17470 IF l_debug_mode = 'Y' THEN
17471 pa_debug.g_err_stage := 'After PA_PROJECT_PVT.add_task_round_one...l_return_status=||l_return_status';
17472 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17473 END IF;
17474
17475
17476 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
17477
17478 l_tasks_out(l_orig_index).return_status := l_return_status;
17479 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17480
17481 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17482 l_tasks_out(l_orig_index).return_status := l_return_status;
17483 p_multiple_task_msg := 'F';
17484 -- RAISE FND_API.G_EXC_ERROR;
17485 END IF;
17486 l_tasks_out(l_orig_index).pa_task_id := l_task_id;
17487 --used to pass task_id to add_task_round_two API
17488 l_task_id_tbl(l_count).pa_task_id := l_task_id;
17489 END LOOP;
17490
17491 END IF;
17492
17493 -- For all the tasks which were inserted by calling add_task_round_one,
17494 -- need to call add_task_round_two,which would update the parent task
17495 -- information. such tasks are stored in the l_added_task_tbl
17496
17497 i:= l_added_task_tbl.first;
17498
17499 IF l_added_task_tbl.exists(i)
17500 THEN
17501
17502 WHILE i IS NOT NULL LOOP
17503
17504 l_task_rec := l_added_task_tbl(i);
17505
17506 -- Change required here for bug 3548473 : 3627124 (modifying the changes done for bug 2931183) :
17507 /*
17508 1. Check if the user wants to pass the entire struct or single tasks.
17509 2. If pass_entire_struct param is 'Y', let the prog flow be as it is now.
17510 3. If the pass_entire_struct param is 'N', then call PA_PROJECT_PVT.add_task_round_two with
17511 p_create_task_structure => 'Y' parameter.
17512 */
17513 /* The code below was added for Bug 3841742 : 3857419 .This is to ensure that add_task_round_two is called
17514 for all the tasks that have inserted through add_task_round_one for updating wbs_level, top_task_id and
17515 parent_task_id. The code below will default l_ref_task_id to parent_task_id, if the latter is not null
17516 .Else l_ref_task_id will be null*/
17517 /* CHANGES start FOR Bug 3841742 : 3857419 ADITI*/
17518 IF (l_task_rec.pa_parent_task_id IS NOT NULL AND l_task_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
17519 (l_task_rec.pm_parent_task_reference IS NOT NULL
17520 AND l_task_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
17521 THEN
17522 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
17523 -- pa_project_pvt.convert_pm_taskref_to_id_all
17524 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
17525 ( p_pa_project_id => l_project_id
17526 , p_structure_type => l_structure_type
17527 , p_pa_task_id => l_task_rec.pa_parent_task_id
17528 , p_pm_task_reference => l_task_rec.pm_parent_task_reference
17529 , p_out_task_id => l_task_id_out
17530 , p_return_status => l_return_status );
17531 -- --dbms_output.put_line('Value of out task'||l_task_id_out);
17532 l_ref_task_id := l_task_id_out; --aditi Added for Bug 3548473
17533
17534 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
17535 THEN
17536
17537 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17538
17539 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR)
17540 THEN
17541 p_multiple_task_msg := 'F';
17542 -- RAISE FND_API.G_EXC_ERROR;
17543 END IF;
17544 ELSE
17545 l_ref_task_id := null;
17546
17547 END IF;
17548 /* CHANGES end FOR Bug 3841742 : 3857419 ADITI */
17549
17550 -- Bug 7277840 : Update PM_PROJECT_CODE
17551 IF p_pm_product_code <> 'WORKPLAN' AND p_pm_product_code IS NOT NULL
17552 AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17553 THEN
17554 UPDATE pa_tasks
17555 SET pm_product_code = p_pm_product_code
17556 WHERE task_id = l_task_id_tbl(i).pa_task_id;
17557 END IF;
17558
17559
17560 PA_PROJECT_PVT.add_task_round_two
17561 (p_return_status => l_return_status,
17562 p_project_rec => l_project_rec,
17563 p_task_id => l_task_id_tbl(i).pa_task_id,
17564 p_task_rec => l_task_rec,
17565 --project structure
17566 p_ref_task_id => l_ref_task_id,-- aditi changed from null to l_ref_task_id for bug 3801314 : Bug 3627124
17567 p_tasks_in => p_tasks_in,
17568 p_tasks_out => l_tasks_out,
17569 p_task_version_id => l_task_version_id,
17570 p_create_task_structure => l_update_task_structure -- Bug 2931183 distinguishes bulk calling context
17571 --project structure
17572 ); -- modified p_update_task_structure value for bug 3548473 : 3627124
17573
17574 IF l_debug_mode = 'Y' THEN
17575 pa_debug.g_err_stage := 'After calling PA_PROJECT_PVT.add_task_round_two l_return_status='||l_return_status;
17576 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17577 END IF;
17578
17579
17580 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17581 THEN
17582
17583 l_tasks_out(i).return_status := l_return_status;
17584 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17585
17586 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17587 THEN
17588
17589 l_tasks_out(i).return_status := l_return_status;
17590 l_tasks_out(i).task_version_id := l_task_version_id;
17591 p_multiple_task_msg := 'F';
17592 -- RAISE FND_API.G_EXC_ERROR;
17593
17594
17595 END IF;
17596
17597 i := l_added_task_tbl.next(i);
17598
17599 END LOOP;
17600 --Commenting the complete code and moving it below to resolve bug 6016529
17601 -- PROCESS_WBS_UPDATES should get called after all the updation related to task and project is done.
17602 -- so it is moved after call for PROCESS_TASK_STRUCTURE_BULK is done.
17603 /* Bug 6163090
17604
17605 -- Changes start for Bug# 3931805
17606 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
17607 THEN -- publishing flow.
17608 PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
17609 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
17610 PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
17611
17612 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
17613 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
17614 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
17615 PA_PROJECT_PUB.G_Published_version_exists = 'N')
17616 THEN
17617 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
17618 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
17619 ,p_structure_version_id => l_structure_version_id ) ;
17620 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
17621 IF p_project_in.process_mode = 'ONLINE' THEN
17622 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
17623 ,p_project_id => l_project_id
17624 ,p_structure_version_id => l_structure_version_id
17625 ,x_return_status => l_return_status
17626 ,x_msg_count => l_msg_count
17627 ,x_msg_data => l_msg_data ) ;
17628 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17629 THEN
17630 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17631 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17632 THEN
17633 RAISE FND_API.G_EXC_ERROR;
17634 END IF;
17635 ELSIF p_project_in.process_mode = 'CONCURRENT' THEN
17636
17637 PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
17638 ,p_project_id => l_project_id
17639 ,p_structure_version_id => l_structure_version_id
17640 ,x_return_status => l_return_status
17641 ,x_msg_count => l_msg_count
17642 ,x_msg_data => l_msg_data ) ;
17643 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17644 THEN
17645 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17646 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17647 THEN
17648 RAISE FND_API.G_EXC_ERROR;
17649 END IF;
17650 END IF ;
17651 END IF ;
17652 END IF ;
17653 END IF;
17654 -- Changes end for Bug# 3931805
17655 */--Bug 6163090
17656
17657 --bug 3010538 and 3035902
17658 --The following code should be executed when a new task is added
17659 --to a working version( with already existing a published ver ) and
17660 --then its published.
17661 --In other words the code is executed while publishing to sync up with
17662 --pa_tasks. In regular flow for adding new tasks we call this api
17663 --from the wrapper process_task_structure_bulk api.
17664 --
17665 IF l_structure_type = 'FINANCIAL' AND
17666 p_pm_product_code = 'WORKPLAN'
17667 THEN
17668 pa_fp_refresh_elements_pub.set_process_flag_proj(
17669 p_project_id => l_project_id
17670 ,p_request_id => null
17671 ,p_process_code => null
17672 ,p_refresh_required_flag => 'Y'
17673 ,x_return_status => l_return_status
17674 ,x_msg_count => l_msg_count
17675 ,x_msg_data => l_msg_data );
17676
17677 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
17678 RAISE FND_API.G_EXC_ERROR;
17679 end if;
17680 END IF;
17681 --bug 3010538 and 3035902
17682
17683 END IF; --tasks table not empty
17684
17685 --project structure
17686 ELSIF p_tasks_in.exists(i)
17687 --AND p_structure_in.structure_type = 'WORKPLAN' --bug 2738747
17688 AND l_structure_type = 'WORKPLAN' --bug 2738747
17689 THEN
17690
17691 IF G_WP_STR_EXISTS = 'N'
17692 THEN
17693 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17694 THEN
17695 pa_interface_utils_pub.map_new_amg_msg
17696 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
17697 ,p_msg_attribute => 'CHANGE'
17698 ,p_resize_flag => 'N'
17699 ,p_msg_context => 'GENERAL'
17700 ,p_attribute1 => ''
17701 ,p_attribute2 => ''
17702 ,p_attribute3 => ''
17703 ,p_attribute4 => ''
17704 ,p_attribute5 => '');
17705 END IF;
17706 RAISE FND_API.G_EXC_ERROR;
17707 END IF;
17708
17709 v_first_index := i;
17710
17711 IF ( p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
17712 p_structure_in.structure_version_id IS NULL ) AND l_structure_version_id IS NULL
17713 THEN
17714 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17715 THEN
17716 pa_interface_utils_pub.map_new_amg_msg
17717 ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
17718 ,p_msg_attribute => 'CHANGE'
17719 ,p_resize_flag => 'N'
17720 ,p_msg_context => 'GENERAL'
17721 ,p_attribute1 => ''
17722 ,p_attribute2 => ''
17723 ,p_attribute3 => ''
17724 ,p_attribute4 => ''
17725 ,p_attribute5 => '');
17726 END IF;
17727 RAISE FND_API.G_EXC_ERROR;
17728 l_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
17729 ELSIF ( p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
17730 p_structure_in.structure_version_id IS NOT NULL )
17731 THEN
17732 l_structure_version_id := p_structure_in.structure_version_id;
17733 END IF;
17734
17735 --Commented The below loop for bug 2931183 so to do the below done processing in bulk
17736
17737 /* WHILE i IS NOT NULL LOOP
17738
17739 l_task_id := NULL;
17740
17741 l_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
17742
17743 --get the previous task
17744 IF i = v_first_index
17745 THEN
17746 v_ref_task_id := null;
17747 ELSIF (l_tasks_out(i-1).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
17748 l_tasks_out(i-1).pa_task_id IS NULL )
17749 THEN
17750 v_ref_task_id := p_tasks_in(i-1).pa_task_id;
17751 ELSE
17752 v_ref_task_id := l_tasks_out(i-1).pa_task_id;
17753 END IF;
17754
17755 IF (p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17756 OR p_tasks_in(i).pa_task_id IS NULL )
17757 THEN
17758 IF p_tasks_in(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17759 OR p_tasks_in(i).pm_task_reference IS NULL
17760 THEN
17761 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17762 THEN
17763 pa_interface_utils_pub.map_new_amg_msg
17764 ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
17765 ,p_msg_attribute => 'CHANGE'
17766 ,p_resize_flag => 'N'
17767 ,p_msg_context => 'PROJ'
17768 ,p_attribute1 => l_project_rec.segment1
17769 ,p_attribute2 => ''
17770 ,p_attribute3 => ''
17771 ,p_attribute4 => ''
17772 ,p_attribute5 => '');
17773 END IF;
17774 l_tasks_out(i).return_status := FND_API.G_RET_STS_ERROR ;
17775 RAISE FND_API.G_EXC_ERROR;
17776 ELSE
17777 --If pm_task_reference is provided and task id is null then its a create
17778 --create task
17779 /* --get the previous task
17780 IF i = v_first_index
17781 THEN
17782 v_ref_task_id := null;
17783 ELSIF (l_tasks_out(i-1).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
17784 l_tasks_out(i-1).pa_task_id IS NULL )
17785 THEN
17786 v_ref_task_id := p_tasks_in(i-1).pa_task_id;
17787 ELSE
17788 v_ref_task_id := l_tasks_out(i-1).pa_task_id;
17789 END IF;
17790
17791 */
17792
17793 -- Actions performed using the APIs would be subject to
17794 -- function security. If the responsibility does not allow
17795 -- such functions to be executed, the API should not proceed further
17796 -- since the user does not have access to such functions
17797
17798 -- Function security procedure check whether user have the
17799 -- privilege to add task or not
17800
17801 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
17802 --above before checking for update_project function.
17803
17804 /* PA_PM_FUNCTION_SECURITY_PUB.check_function_security
17805 (p_api_version_number => p_api_version_number,
17806 p_responsibility_id => l_resp_id,
17807 p_function_name => 'PA_PM_ADD_TASK',
17808 p_msg_count => l_msg_count,
17809 p_msg_data => l_msg_data,
17810 p_return_status => l_return_status,
17811 p_function_allowed => l_function_allowed);
17812
17813 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17814 THEN
17815 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17816 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17817 THEN
17818 p_multiple_task_msg := 'F';
17819 -- RAISE FND_API.G_EXC_ERROR;
17820 END IF;
17821
17822 IF l_function_allowed = 'N' THEN
17823 pa_interface_utils_pub.map_new_amg_msg
17824 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
17825 ,p_msg_attribute => 'CHANGE'
17826 ,p_resize_flag => 'Y'
17827 ,p_msg_context => 'GENERAL'
17828 ,p_attribute1 => ''
17829 ,p_attribute2 => ''
17830 ,p_attribute3 => ''
17831 ,p_attribute4 => ''
17832 ,p_attribute5 => '');
17833 p_return_status := FND_API.G_RET_STS_ERROR;
17834 p_multiple_task_msg := 'F';
17835 -- RAISE FND_API.G_EXC_ERROR;
17836 END IF;
17837
17838 IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL
17839 AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
17840 THEN
17841 v_parent_task_id := p_tasks_in(i).pa_parent_task_id;
17842 ELSIF (p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17843 AND p_tasks_in(i).pm_parent_task_reference IS NOT NULL)
17844 THEN
17845 --convert pm_parent_task_reference to parent_task_id.
17846 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
17847 PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
17848 p_pm_parent_task_reference => p_tasks_in(i).pm_parent_task_reference
17849 ,p_project_id => l_project_id
17850 ,x_parent_task_id => v_parent_task_id
17851 ,x_return_status => l_return_status
17852 );
17853
17854 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
17855 THEN
17856 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
17857 THEN
17858 pa_interface_utils_pub.map_new_amg_msg
17859 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
17860 ,p_msg_attribute => 'CHANGE'
17861 ,p_resize_flag => 'N'
17862 ,p_msg_context => 'TASK'
17863 ,p_attribute1 => l_amg_segment1
17864 ,p_attribute2 => l_amg_task_number
17865 ,p_attribute3 => ''
17866 ,p_attribute4 => ''
17867 ,p_attribute5 => '');
17868 END IF;
17869 RAISE FND_API.G_EXC_ERROR;
17870 END IF;
17871
17872 ELSE
17873 v_parent_task_id := null;
17874 END IF;
17875
17876 PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
17877 p_project_id => l_project_id
17878 ,p_task_id => p_tasks_in(i).pa_task_id
17879 ,p_parent_task_id => v_parent_task_id
17880 ,p_ref_task_id => v_ref_task_id
17881 ,p_task_number => p_tasks_in(i).pa_task_number
17882 ,p_task_name => p_tasks_in(i).long_task_name --bug 2833194
17883 ,p_task_description => p_tasks_in(i).task_description
17884 ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
17885 ,p_calling_module => 'AMG'
17886 --,p_structure_type => p_structure_in.structure_type --bug 2738747
17887 ,p_structure_type => l_structure_type --bug 2738747
17888 ,p_OBLIGATION_START_DATE => p_tasks_in(i).OBLIGATION_START_DATE
17889 ,p_OBLIGATION_FINISH_DATE => p_tasks_in(i).OBLIGATION_FINISH_DATE
17890 ,p_ESTIMATED_START_DATE => p_tasks_in(i).ESTIMATED_START_DATE
17891 ,p_ESTIMATED_FINISH_DATE => p_tasks_in(i).ESTIMATED_FINISH_DATE
17892 ,p_BASELINE_START_DATE => p_tasks_in(i).BASELINE_START_DATE
17893 ,p_BASELINE_FINISH_DATE => p_tasks_in(i).BASELINE_FINISH_DATE
17894 ,p_CLOSED_DATE => p_tasks_in(i).CLOSED_DATE
17895 ,p_WQ_UOM_CODE => p_tasks_in(i).WQ_UOM_CODE
17896 ,p_WQ_ITEM_CODE => p_tasks_in(i).WQ_ITEM_CODE
17897 ,p_STATUS_CODE => p_tasks_in(i).STATUS_CODE
17898 ,p_WF_STATUS_CODE => p_tasks_in(i).WF_STATUS_CODE
17899 ,p_PM_SOURCE_CODE => l_pm_product_code --bug 2665656
17900 ,p_PRIORITY_CODE => p_tasks_in(i).PRIORITY_CODE
17901 ,p_MILESTONE_FLAG => p_tasks_in(i).MILESTONE_FLAG
17902 ,p_CRITICAL_FLAG => p_tasks_in(i).CRITICAL_FLAG
17903 ,p_INC_PROJ_PROGRESS_FLAG => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
17904 ,p_LINK_TASK_FLAG => p_tasks_in(i).LINK_TASK_FLAG
17905 ,p_CALENDAR_ID => p_tasks_in(i).CALENDAR_ID
17906 ,p_PLANNED_EFFORT => p_tasks_in(i).PLANNED_EFFORT
17907 ,p_DURATION => p_tasks_in(i).DURATION
17908 ,p_PLANNED_WORK_QUANTITY => p_tasks_in(i).PLANNED_WORK_QUANTITY
17909 ,p_TASK_TYPE => p_tasks_in(i).TASK_TYPE
17910 ,p_actual_start_date => p_tasks_in(i).actual_start_date
17911 ,p_actual_finish_date => p_tasks_in(i).actual_finish_date
17912 ,p_early_start_date => p_tasks_in(i).early_start_date
17913 ,p_early_finish_date => p_tasks_in(i).early_finish_date
17914 ,p_late_start_date => p_tasks_in(i).late_start_date
17915 ,p_late_finish_date => p_tasks_in(i).late_finish_date
17916 ,p_scheduled_start_date => p_tasks_in(i).scheduled_start_date
17917 ,p_scheduled_finish_date => p_tasks_in(i).scheduled_finish_date
17918 ,P_PM_SOURCE_reference => p_tasks_in(i).pm_task_reference
17919 ,p_location_id => p_tasks_in(i).address_id
17920 ,p_manager_person_id => p_tasks_in(i).task_manager_person_id
17921 ,p_structure_version_id => l_structure_version_id
17922 ,x_task_version_id => l_task_version_id
17923 ,x_task_id => v_task_id
17924 ,x_msg_count => l_msg_count
17925 ,x_msg_data => l_msg_data
17926 ,x_return_status => l_return_status
17927 );
17928
17929 -- assign the appropriate values to the task out record
17930 l_tasks_out(i).return_status := l_return_status;
17931 l_tasks_out(i).pa_task_id := v_task_id;
17932 l_tasks_out(i).task_version_id := l_task_version_id;
17933 l_tasks_out(i).pm_task_reference := p_tasks_in(i).pm_task_reference;
17934
17935 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17936 THEN
17937 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17938
17939 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17940 THEN
17941 p_multiple_task_msg := 'F';
17942 RAISE FND_API.G_EXC_ERROR;
17943 END IF;
17944
17945 i := p_tasks_in.next(i);
17946
17947 END IF; --<<p_tasks_in(i).pm_task_reference>>
17948 ELSE
17949 --For update, task_id should be provided. See TRM for AMG
17950 --update task
17951
17952 -- Actions performed using the APIs would be subject to
17953 -- function security. If the responsibility does not allow
17954 -- such functions to be executed, the API should not proceed further
17955 -- since the user does not have access to such functions
17956
17957
17958 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
17959 (p_api_version_number => p_api_version_number,
17960 p_responsibility_id => l_resp_id,
17961 p_function_name => 'PA_PM_UPDATE_TASK',
17962 p_msg_count => l_msg_count,
17963 p_msg_data => l_msg_data,
17964 p_return_status => l_return_status,
17965 p_function_allowed => l_function_allowed );
17966
17967 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17968 THEN
17969 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17970
17971 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17972 THEN
17973 RAISE FND_API.G_EXC_ERROR;
17974 END IF;
17975 IF l_function_allowed = 'N' THEN
17976 pa_interface_utils_pub.map_new_amg_msg
17977 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
17978 ,p_msg_attribute => 'CHANGE'
17979 ,p_resize_flag => 'Y'
17980 ,p_msg_context => 'GENERAL'
17981 ,p_attribute1 => ''
17982 ,p_attribute2 => ''
17983 ,p_attribute3 => ''
17984 ,p_attribute4 => ''
17985 ,p_attribute5 => '');
17986 p_return_status := FND_API.G_RET_STS_ERROR;
17987 RAISE FND_API.G_EXC_ERROR;
17988 END IF;
17989
17990 PA_PROJ_TASK_STRUC_PUB.UPDATE_TASK_STRUCTURE(
17991 p_project_id => l_project_id
17992 ,p_task_id => p_tasks_in(i).pa_task_id
17993 ,p_ref_task_id => v_ref_task_id
17994 ,p_task_number => p_tasks_in(i).pa_task_number
17995 ,p_task_name => p_tasks_in(i).long_task_name --bug 2833194
17996 ,p_task_description => p_tasks_in(i).task_description
17997 ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
17998 ,p_calling_module => 'AMG'
17999 --,p_structure_type => p_structure_in.structure_type --bug 2738747
18000 ,p_structure_type => l_structure_type --bug 2738747
18001 ,p_pm_product_code => p_tasks_in(i).PM_SOURCE_CODE
18002 ,p_pm_task_reference => p_tasks_in(i).pm_task_reference
18003 ,p_OBLIGATION_START_DATE => p_tasks_in(i).OBLIGATION_START_DATE
18004 ,p_OBLIGATION_FINISH_DATE => p_tasks_in(i).OBLIGATION_FINISH_DATE
18005 ,p_ESTIMATED_START_DATE => p_tasks_in(i).ESTIMATED_START_DATE
18006 ,p_ESTIMATED_FINISH_DATE => p_tasks_in(i).ESTIMATED_FINISH_DATE
18007 ,p_BASELINE_START_DATE => p_tasks_in(i).BASELINE_START_DATE
18008 ,p_BASELINE_FINISH_DATE => p_tasks_in(i).BASELINE_FINISH_DATE
18009 ,p_CLOSED_DATE => p_tasks_in(i).CLOSED_DATE
18010 ,p_WQ_UOM_CODE => p_tasks_in(i).WQ_UOM_CODE
18011 ,p_WQ_ITEM_CODE => p_tasks_in(i).WQ_ITEM_CODE
18012 ,p_STATUS_CODE => p_tasks_in(i).STATUS_CODE
18013 ,p_WF_STATUS_CODE => p_tasks_in(i).WF_STATUS_CODE
18014 ,p_PRIORITY_CODE => p_tasks_in(i).PRIORITY_CODE
18015 ,p_MILESTONE_FLAG => p_tasks_in(i).MILESTONE_FLAG
18016 ,p_CRITICAL_FLAG => p_tasks_in(i).CRITICAL_FLAG
18017 ,p_INC_PROJ_PROGRESS_FLAG => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
18018 ,p_LINK_TASK_FLAG => p_tasks_in(i).LINK_TASK_FLAG
18019 ,p_CALENDAR_ID => p_tasks_in(i).CALENDAR_ID
18020 ,p_PLANNED_EFFORT => p_tasks_in(i).PLANNED_EFFORT
18021 ,p_DURATION => p_tasks_in(i).DURATION
18022 ,p_PLANNED_WORK_QUANTITY => p_tasks_in(i).PLANNED_WORK_QUANTITY
18023 ,p_TASK_TYPE => p_tasks_in(i).TASK_TYPE
18024 ,p_actual_start_date => p_tasks_in(i).actual_start_date
18025 ,p_actual_finish_date => p_tasks_in(i).actual_finish_date
18026 ,p_early_start_date => p_tasks_in(i).early_start_date
18027 ,p_early_finish_date => p_tasks_in(i).early_finish_date
18028 ,p_late_start_date => p_tasks_in(i).late_start_date
18029 ,p_late_finish_date => p_tasks_in(i).late_finish_date
18030 ,p_scheduled_start_date => p_tasks_in(i).scheduled_start_date
18031 ,p_scheduled_finish_date => p_tasks_in(i).scheduled_finish_date
18032 ,p_location_id => p_tasks_in(i).address_id
18033 ,p_task_manager_id => p_tasks_in(i).task_manager_person_id
18034 ,p_structure_version_id => l_structure_version_id
18035 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
18036 ,p_ext_act_duration => p_tasks_in(i).ext_act_duration
18037 ,p_ext_remain_duration => p_tasks_in(i).ext_remain_duration
18038 ,p_ext_sch_duration => p_tasks_in(i).ext_sch_duration
18039 -- (end venkat) new params for bug #3450684 -------------------------------------------------
18040 ,x_msg_count => l_msg_count
18041 ,x_msg_data => l_msg_data
18042 ,x_return_status => l_return_status
18043 );
18044 -- assign the appropriate values to the task out record
18045 l_tasks_out(i).return_status := l_return_status;
18046 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18047 THEN
18048 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18049
18050 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18051 THEN
18052 p_multiple_task_msg := 'F';
18053 RAISE FND_API.G_EXC_ERROR;
18054 END IF;
18055 l_tasks_out(i).pa_task_id := p_tasks_in(i).pa_task_id;
18056 l_tasks_out(i).pm_task_reference := p_tasks_in(i).pm_task_reference;
18057 i := p_tasks_in.next(i);
18058
18059 END IF;
18060
18061 END LOOP; --<< end WHILE >>
18062 */
18063 END IF;
18064 --project structure
18065
18066 IF p_multiple_task_msg = 'F'
18067 THEN
18068 RAISE FND_API.G_EXC_ERROR;
18069 END IF;
18070
18071 --Added for bug 2931183
18072 IF nvl(p_pm_product_code,'WORKPLAN') <> 'WORKPLAN' AND p_pass_entire_structure = 'Y' -- bug 3548473 : 3627124
18073 THEN
18074 IF l_debug_mode = 'Y' THEN
18075 pa_debug.g_err_stage := 'Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
18076 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18077 END IF;
18078
18079 PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK(
18080 p_api_version_number => p_api_version_number
18081 ,p_commit => FND_API.G_FALSE--bug 3766967
18082 ,p_project_id => l_project_id
18083 ,p_source_project_id => l_project_in_rec.created_from_project_id --ADUT. Included this new param.
18084 ,p_pm_product_code => p_pm_product_code
18085 ,p_structure_type => l_structure_type --for bug 3005458
18086 ,p_tasks_in_tbl => p_tasks_in
18087 ,p_wp_str_exists => G_WP_STR_EXISTS
18088 ,p_is_wp_separate_from_fn => G_IS_WP_SEPARATE_FROM_FN
18089 ,p_is_wp_versioning_enabled => G_IS_WP_VERSIONING_ENABLED
18090 ,p_structure_version_id => l_update_structure_version_id
18091 ,p_process_mode => p_project_in.process_mode -- PA L Changes 3010538
18092 ,p_create_task_versions_only => l_create_task_versions_only -- Bug 3075609
18093 ,px_tasks_out_tbl => l_tasks_out
18094 ,x_return_status => p_return_status
18095 ,x_msg_count => p_msg_count
18096 ,x_msg_data => p_msg_data
18097 );
18098
18099 IF l_debug_mode = 'Y' THEN
18100 pa_debug.g_err_stage := 'After PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK...p_return_status=||p_return_status';
18101 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18102 END IF;
18103
18104
18105 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18106 IF l_debug_mode = 'Y' THEN
18107 pa_debug.g_err_stage := 'Errors in PROCESS_TASK_STRUCTURE_BULK ' ;
18108 pa_debug.write(l_module_name,pa_debug.g_err_stage,4);
18109 END IF;
18110 p_multiple_task_msg := 'F';
18111 RAISE FND_API.G_EXC_ERROR;
18112 END IF;
18113
18114 IF l_debug_mode = 'Y' THEN
18115 pa_debug.g_err_stage := 'Returned from PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
18116 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18117 END IF;
18118 END IF; --for p_pm_product_code is not workplan
18119
18120 -- Bug 6163090 Moved the code here from above
18121 IF l_structure_type = 'FINANCIAL'
18122 THEN
18123 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
18124 THEN -- publishing flow.
18125 PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
18126 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
18127 PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
18128
18129 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
18130 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
18131 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
18132 PA_PROJECT_PUB.G_Published_version_exists = 'N')
18133 THEN
18134 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
18135 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
18136 ,p_structure_version_id => l_structure_version_id ) ;
18137 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
18138 IF p_project_in.process_mode = 'ONLINE' THEN
18139 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
18140 ,p_project_id => l_project_id
18141 ,p_structure_version_id => l_structure_version_id
18142 ,x_return_status => l_return_status
18143 ,x_msg_count => l_msg_count
18144 ,x_msg_data => l_msg_data ) ;
18145 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18146 THEN
18147 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18148 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18149 THEN
18150 RAISE FND_API.G_EXC_ERROR;
18151 END IF;
18152 ELSIF p_project_in.process_mode = 'CONCURRENT' THEN
18153
18154 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
18155 ,p_project_id => l_project_id
18156 ,p_structure_version_id => l_structure_version_id
18157 ,x_return_status => l_return_status
18158 ,x_msg_count => l_msg_count
18159 ,x_msg_data => l_msg_data ) ;
18160 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18161 THEN
18162 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18163 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18164 THEN
18165 RAISE FND_API.G_EXC_ERROR;
18166 END IF;
18167 END IF ;
18168 END IF ;
18169 END IF ;
18170 END IF;
18171 END IF;--l_structure_type
18172 --Bug 6163090
18173
18174
18175
18176 ----Commented The below code for bug 2931183 as the processing will be done in PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK
18177
18178 -- Bug # 5077599.
18179
18180 -- Uncommented the code below.
18181
18182 if (p_update_mode = 'PA_UPD_TASK_ATTR' and p_pass_entire_structure = 'N') then
18183 --bug 2732895 --update_project
18184 IF (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
18185 ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND p_structure_in.structure_type = 'WORKPLAN' ))
18186 AND (p_pm_product_code <> 'WORKPLAN')
18187 --bug 2871308: added condition to by-pass when calling from publish api
18188 --should not call if new task is added to FINANCIAL structure version
18189 THEN
18190 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
18191 p_tasks_in => l_tasks_out
18192 ,p_task_version_id => null
18193 ,x_msg_count => l_msg_count
18194 ,x_msg_data => l_msg_data
18195 ,x_return_status => l_return_status
18196 );
18197
18198 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18199 THEN
18200 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18201
18202 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18203 THEN
18204 p_multiple_task_msg := 'F';
18205 RAISE FND_API.G_EXC_ERROR;
18206 END IF;
18207
18208 --bug 2856033
18209
18210 IF l_structure_version_id IS NULL OR l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18211 THEN
18212
18213 PA_PROJECT_PVT.get_structure_version(
18214 p_project_id => l_project_id
18215 ,p_structure_versions_out => g_struc_out_tbl
18216 );
18217
18218 fetch_structure_version(
18219 p_return_status => l_return_status
18220 ,p_api_version_number => p_api_version_number
18221 ,p_structure_type => p_structure_in.structure_type
18222 ,p_pa_structure_version_id => l_structure_version_id
18223 ,p_struc_return_status => l_return_status
18224 );
18225 END IF;
18226 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
18227 p_tasks_in => l_tasks_out --null if called for one task
18228 ,p_task_version_id => null
18229 ,p_project_id => l_project_id
18230 ,P_structure_version_id => l_structure_version_id
18231 ,x_msg_count => l_msg_count
18232 ,x_msg_data => l_msg_data
18233 ,x_return_status => l_return_status
18234 );
18235
18236 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18237 THEN
18238 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18239
18240 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18241 THEN
18242 p_multiple_task_msg := 'F';
18243 RAISE FND_API.G_EXC_ERROR;
18244 END IF;
18245 --bug 2856033
18246
18247 END IF;
18248
18249 --bug 2732895
18250 end if;
18251
18252 -- End of Bug # 5077599.
18253
18254
18255 IF p_multiple_task_msg = 'F'
18256 THEN
18257 RAISE FND_API.G_EXC_ERROR;
18258 END IF;
18259
18260 p_tasks_out := l_tasks_out;
18261
18262
18263 -- new project start date should be < min(task_start_date)
18264
18265 IF l_update_start_date_flag = 'Y'
18266 --AND p_structure_in.structure_type = 'FINANCIAL' --bug 2729851 --bug 2738747
18267 AND l_structure_type = 'FINANCIAL' --bug 2729851 --bug 2738747
18268 THEN
18269
18270 OPEN l_min_task_start_date_csr (l_project_id);
18271 FETCH l_min_task_start_date_csr INTO l_min_task_date;
18272
18273 IF l_min_task_start_date_csr%FOUND
18274 THEN
18275
18276 IF l_project_start_date IS NOT NULL
18277 AND l_min_task_date IS NOT NULL
18278 THEN
18279
18280 IF l_min_task_date < l_project_start_date
18281 THEN
18282
18283 CLOSE l_min_task_start_date_csr;
18284
18285 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18286 THEN
18287 pa_interface_utils_pub.map_new_amg_msg
18288 ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
18289 ,p_msg_attribute => 'CHANGE'
18290 ,p_resize_flag => 'N'
18291 ,p_msg_context => 'PROJ'
18292 ,p_attribute1 => l_project_rec.segment1
18293 ,p_attribute2 => ''
18294 ,p_attribute3 => ''
18295 ,p_attribute4 => ''
18296 ,p_attribute5 => '');
18297 END IF;
18298 RAISE FND_API.G_EXC_ERROR;
18299
18300 END IF;
18301 END IF;
18302 END IF;
18303
18304 CLOSE l_min_task_start_date_csr;
18305
18306 END IF;
18307
18308 -- new project completion date should be > max(task_start_date)
18309
18310 IF l_update_end_date_flag = 'Y'
18311 --AND p_structure_in.structure_type = 'FINANCIAL' --bug 2729851 --bug 2738747
18312 AND l_structure_type = 'FINANCIAL' --bug 2729851 --bug 2738747
18313 THEN
18314
18315 OPEN l_max_task_end_date_csr (l_project_id);
18316 FETCH l_max_task_end_date_csr INTO l_max_task_date;
18317
18318 IF l_max_task_end_date_csr%FOUND
18319 THEN
18320
18321 IF l_project_completion_date IS NOT NULL
18322 AND l_max_task_date IS NOT NULL
18323 THEN
18324
18325 IF l_max_task_date > l_project_completion_date
18326 THEN
18327
18328 CLOSE l_max_task_end_date_csr;
18329 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
18330
18331 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18332 THEN
18333 /* The FND_AS_UNEXPECTED_ERROR message is being reported from UPDATE_PROJECT API and modified
18334 the following. Replaced the message name from PA_PR_INVALID_COMPLETION_DATE with
18335 PA_PR_INVALID_COMP_DATE (this is limited to 30 characters after appended with '_AMG') and
18336 p_resize flag from 'Y' in the procedure call pa_interface_utils_pub.map_new_amg_msg to 'N'.
18337 Bug#1916735.
18338 */
18339 pa_interface_utils_pub.map_new_amg_msg
18340 ( p_old_message_code => 'PA_PR_INVALID_COMP_DATE'
18341 ,p_msg_attribute => 'CHANGE'
18342 ,p_resize_flag => 'N'
18343 ,p_msg_context => 'PROJ'
18344 ,p_attribute1 => l_project_rec.segment1
18345 ,p_attribute2 => ''
18346 ,p_attribute3 => ''
18347 ,p_attribute4 => ''
18348 ,p_attribute5 => '');
18349 END IF;
18350 RAISE FND_API.G_EXC_ERROR;
18351
18352 END IF;
18353 END IF;
18354 END IF;
18355
18356 CLOSE l_max_task_end_date_csr;
18357
18358 END IF;
18359
18360 -- Call the api to check the task dates
18361
18362 If G_ParChildTsk_chks_deferred = 'Y' THEN
18363 Pa_project_pvt.check_parent_child_task_dates
18364 (p_project_id => l_project_id,
18365 p_return_status => l_return_status );
18366
18367 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
18368 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18369 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
18370 RAISE FND_API.G_EXC_ERROR;
18371 END IF;
18372 G_ParchildTsk_chks_deferred := 'N';
18373 END IF;
18374
18375 --UPDATE key_members
18376
18377 l_count := 0;
18378 j := p_key_members.first;
18379 IF p_key_members.exists(j) THEN
18380
18381 FOR i in 1..p_key_members.COUNT LOOP
18382
18383 /* Code below is added for Bug 3326468. Start_date of key members is now a mandatory field to
18384 Update_project */
18385 IF p_key_members(i).start_date IS NULL OR
18386 p_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
18387 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18388 THEN
18389 pa_utils.add_message
18390 ( p_app_short_name => 'PA'-- new message for bug 3326468
18391 ,p_msg_name => 'PA_KEYMBR_NO_START_DATE'
18392 ,p_token1 => 'PROJECT_NAME'
18393 ,p_value1 => l_project_rec.segment1
18394 ,p_token2 => 'PERSON_ID'
18395 ,p_value2 => p_key_members(i).person_id
18396 ,p_token3 => 'ROLE_TYPE'
18397 ,p_value3 => p_key_members(i).project_role_type
18398 );
18399 END IF;
18400 p_multiple_task_msg := 'F';
18401 RAISE FND_API.G_EXC_ERROR;
18402 END IF;
18403 -- validate the role type introduced for Bug#5196996
18404 OPEN l_project_role_types_csr (p_key_members(i).project_role_type,l_project_id);
18405 FETCH l_project_role_types_csr INTO l_dummy;
18406
18407 IF l_project_role_types_csr%NOTFOUND THEN
18408
18409 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18410 THEN
18411 pa_interface_utils_pub.map_new_amg_msg
18412 ( p_old_message_code => 'PA_INVALID_ROLE_TYPE'
18413 ,p_msg_attribute => 'CHANGE'
18414 ,p_resize_flag => 'N'
18415 ,p_msg_context => 'PROJ'
18416 ,p_attribute1 => l_amg_segment1
18417 ,p_attribute2 => ''
18418 ,p_attribute3 => ''
18419 ,p_attribute4 => ''
18420 ,p_attribute5 => '');
18421 END IF;
18422 CLOSE l_project_role_types_csr;
18423 RAISE FND_API.G_EXC_ERROR;
18424 ELSE
18425 CLOSE l_project_role_types_csr;
18426 END IF;
18427 -- end of changes for Bug#5196996
18428
18429
18430
18431 /* End of Code changes for Bug 3326468 */
18432 OPEN l_key_member_csr(l_project_id,p_key_members(i).person_id,
18433 p_key_members(i).project_role_type ,
18434 p_key_members(i).start_date); --Added for Bug 3326468
18435 FETCH l_key_member_csr INTO l_key_members_rec;
18436 IF l_key_member_csr%NOTFOUND THEN
18437 CLOSE l_key_member_csr;
18438 -- This means this is a new key member
18439 -- add this to the temp table which will be passed
18440 -- to add_key_members
18441 IF p_key_members(i).project_role_type = 'PROJECT MANAGER' THEN
18442 IF (p_key_members(i).end_date <>
18443 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18444 p_key_members(i).start_date <>
18445 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) THEN
18446 IF p_key_members(i).start_date >
18447 p_key_members(i).end_date THEN
18448 IF FND_MSG_PUB.Check_Msg_Level
18449 (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18450 pa_interface_utils_pub.map_new_amg_msg
18451 ( p_old_message_code => 'PA_PR_INVALID_KM_DATES'
18452 ,p_msg_attribute => 'CHANGE'
18453 ,p_resize_flag => 'N'
18454 ,p_msg_context => 'PROJ'
18455 ,p_attribute1 => l_project_rec.segment1
18456 ,p_attribute2 => ''
18457 ,p_attribute3 => ''
18458 ,p_attribute4 => ''
18459 ,p_attribute5 => '');
18460 p_multiple_task_msg := 'F';
18461 -- RAISE FND_API.G_EXC_ERROR;
18462 END IF;
18463 END IF;
18464 END IF;
18465
18466 pa_project_pvt.check_for_one_manager
18467 (l_project_id,
18468 p_key_members(i).person_id,
18469 p_key_members,
18470 p_key_members(i).start_date,
18471 p_key_members(i).end_date,
18472 l_return_status );
18473
18474 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
18475 p_return_status := l_return_status;
18476 p_project_out.return_status := l_return_status;
18477 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18478 END IF;
18479 END IF;
18480 IF l_key_members_tbl.EXISTS(1) THEN
18481 l_count := l_key_members_tbl.COUNT + 1;
18482 ELSE
18483 l_count := 1;
18484 END IF;
18485 l_key_members_tbl(l_count) := p_key_members(i);
18486
18487 /*Commented the below code for the bug 2910972 since the null
18488 value for the start date is handled in the pa_project_parties_pub.create_project_party*/
18489
18490 /*IF l_key_members_tbl(l_count).start_date =
18491 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
18492 l_key_members_tbl(l_count).start_date IS NULL THEN
18493 l_key_members_tbl(l_count).start_date := TRUNC(SYSDATE);
18494 END IF;*/
18495
18496 /*Bug#2910972-Adding the below code*/
18497
18498 IF l_key_members_tbl(l_count).start_date =
18499 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18500 l_key_members_tbl(l_count).start_date := NULL;
18501 END IF;
18502
18503 /*Bug#2910972-End of addition*/
18504
18505 IF l_key_members_tbl(l_count).end_date =
18506 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18507 l_key_members_tbl(l_count).end_date := NULL;
18508 END IF;
18509 ELSE
18510 CLOSE l_key_member_csr;
18511 IF p_key_members(i).start_date <>
18512 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18513 p_key_members(i).start_date IS NOT NULL THEN
18514 IF p_key_members(i).start_date <>
18515 NVL(l_key_members_rec.start_date_active,
18516 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18517 l_temp_start_date := p_key_members(i).start_date;
18518 ELSE
18519 l_temp_start_date := l_key_members_rec.start_date_active;
18520 END IF;
18521 ELSE
18522 l_temp_start_date := l_key_members_rec.start_date_active;
18523 END IF;
18524 IF p_key_members(i).end_date <>
18525 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18526 p_key_members(i).end_date IS NOT NULL THEN
18527 IF p_key_members(i).end_date <>
18528 NVL(l_key_members_rec.end_date_active,
18529 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18530 l_temp_end_date := p_key_members(i).end_date;
18531 ELSE
18532 l_temp_end_date := l_key_members_rec.end_date_active;
18533 END IF;
18534 ELSE
18535 /* Below if condition Added for bug 3234496 */
18536 IF p_key_members(i).project_role_type = 'PROJECT MANAGER' THEN
18537 l_temp_end_date := l_key_members_rec.end_date_active;
18538 ELSE
18539 /* Added code to null out the end date if not proj manager : for bug 3234496 */
18540 If p_key_members(i).end_date is null then
18541 l_temp_end_date := null;
18542 else
18543 l_temp_end_date := l_key_members_rec.end_date_active;
18544 end if;
18545 END IF;
18546 END IF;
18547 IF l_temp_end_date < l_temp_start_date THEN
18548 p_return_status := FND_API.G_RET_STS_ERROR;
18549 IF FND_MSG_PUB.Check_Msg_Level
18550 (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18551 pa_interface_utils_pub.map_new_amg_msg
18552 ( p_old_message_code => 'PA_PR_INVALID_KM_DATES'
18553 ,p_msg_attribute => 'CHANGE'
18554 ,p_resize_flag => 'N'
18555 ,p_msg_context => 'PROJ'
18556 ,p_attribute1 => l_project_rec.segment1
18557 ,p_attribute2 => ''
18558 ,p_attribute3 => ''
18559 ,p_attribute4 => ''
18560 ,p_attribute5 => '');
18561 p_multiple_task_msg := 'F';
18562 END IF;
18563 END IF;
18564 IF (l_temp_start_date <>
18565 NVL(l_key_members_rec.start_date_active,
18566 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18567 OR
18568 (l_temp_end_date <>
18569 NVL(l_key_members_rec.end_date_active,
18570 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18571 /* Added the below OR condition for bug 3234496 */
18572 OR
18573 (l_temp_end_date IS NULL AND l_key_members_rec.end_date_active IS NOT NULL)
18574 THEN
18575 if p_multiple_task_msg <> 'F' then
18576 /*
18577 -- begin OLD code before changes for ROLE BASED SECURITY
18578 UPDATE PA_PROJECT_PLAYERS SET
18579 START_DATE_ACTIVE = l_temp_start_date,
18580 END_DATE_ACTIVE = l_temp_end_date
18581 WHERE ROWID = l_key_members_rec.rowid;
18582 -- end OLD code before changes for ROLE BASED SECURITY
18583 */
18584 -- begin NEW code for ROLE BASED SECURITY
18585 -- updating START_DATE_ACTIVE and END_DATE_ACTIVE of
18586 -- PA_PROJECT_PLAYERS for the rowid in the cursor
18587 SELECT COMPLETION_DATE
18588 INTO v_completion_date
18589 FROM pa_projects p
18590 WHERE p.project_id = l_key_members_rec.project_id;
18591 /*Added the OR condition in the below statement for the bug 2846478*/
18592 if l_key_members_rec.scheduled_flag = 'N' OR l_key_members_rec.scheduled_flag IS NULL
18593 then
18594 PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY(
18595 p_api_version => 1.0 -- p_api_version
18596 , p_init_msg_list => FND_API.G_TRUE -- p_init_msg_list
18597 , p_commit => FND_API.G_FALSE -- p_commit
18598 , p_validate_only => FND_API.G_FALSE -- p_validate_only
18599 , p_validation_level => FND_API.G_VALID_LEVEL_FULL -- p_validation_level
18600 , p_debug_mode => 'N' -- p_debug_mode
18601 , p_object_id => l_key_members_rec.project_id -- p_object_id
18602 , p_OBJECT_TYPE => 'PA_PROJECTS' -- p_OBJECT_TYPE
18603 , p_project_role_id => NULL -------Bug 2100142l_key_members_rec.project_id -- p_project_role_id
18604 , p_project_role_type => l_key_members_rec.project_role_type -- p_project_role_type
18605 , p_resource_type_id => l_key_members_rec.resource_type_id -- p_resource_type_id
18606 , p_resource_source_id => l_key_members_rec.person_id -- p_resource_source_id
18607 , p_resource_name => v_null_char -- p_resource_name
18608 , p_start_date_active => l_temp_start_date -- p_start_date_active
18609 , p_scheduled_flag => 'N' -- p_scheduled_flag
18610 , p_record_version_number => l_key_members_rec.record_version_number -- p_record_version_number
18611 , p_calling_module => 'FORM' -- p_calling_module
18612 , p_project_id => l_key_members_rec.project_id -- p_project_id
18613 , p_project_end_date => v_completion_date -- p_project_end_date
18614 , p_project_party_id => l_key_members_rec.project_party_id -- p_project_party_id
18615 , p_end_date_active => l_temp_end_date -- p_end_date_active
18616 , x_wf_type => l_wf_type
18617 , x_wf_item_type => l_wf_item_type
18618 , x_wf_process => l_wf_process
18619 , x_assignment_id => l_assignment_id
18620 , x_return_status => x_return_status -- x_return_status
18621 , x_msg_count => x_msg_count -- x_msg_count
18622 , x_msg_data => x_msg_data -- x_msg_data
18623 );
18624 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
18625 p_return_status := x_return_status;
18626 p_msg_count := x_msg_count;
18627 p_msg_data := SUBSTR(p_msg_data||x_msg_data,1,2000);
18628 if (x_return_status = FND_API.G_RET_STS_ERROR) then
18629 raise FND_API.G_EXC_UNEXPECTED_ERROR;
18630 else -- (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
18631 raise FND_API.G_EXC_ERROR;
18632 end if;
18633 END IF;
18634 end if;
18635 -- end NEW code for ROLE BASED SECURITY
18636
18637 end if;
18638 END IF;
18639 END IF;
18640 END LOOP;
18641
18642 IF p_multiple_task_msg = 'F'
18643 THEN
18644 RAISE FND_API.G_EXC_ERROR;
18645 END IF;
18646
18647 IF l_key_members_tbl.COUNT > 0 THEN
18648 PA_PROJECT_PVT.add_key_members (
18649 p_return_status =>l_return_status,
18650 p_pa_source_template_id =>l_project_rec.created_from_project_id,
18651 p_project_id =>l_project_id,
18652 p_key_members =>l_key_members_tbl );
18653 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
18654 p_return_status := l_return_status;
18655 p_project_out.return_status := l_return_status;
18656 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18657 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
18658 p_return_status := l_return_status;
18659 p_project_out.return_status := l_return_status;
18660 RAISE FND_API.G_EXC_ERROR;
18661 END IF;
18662 END IF;
18663
18664 /* Start of code for bug #2111806
18665 Call the check_manager_date_range to check if the Project
18666 Manager exists for the complete duration of the Project. */
18667 pa_project_check_pvt.check_manager_date_range(p_project_id => l_project_id
18668 ,p_return_status => l_return_status);
18669
18670 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18671 THEN
18672 p_project_out.return_status := l_return_status;
18673 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18674
18675 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18676 THEN
18677
18678 p_project_out.return_status := l_return_status;
18679 RAISE FND_API.G_EXC_ERROR;
18680 END IF;
18681 /* End of code for bug #2111806 */
18682
18683 END IF;
18684
18685 /* Start of code for bug #2111806
18686 Throw an error if there are no Project Managers assigned.
18687 This has to be thrown irrespective of whether there are any Key Member records
18688 being passed or not. So, it cannot be done in the above IF condition. */
18689 IF l_project_id IS NOT NULL THEN
18690 OPEN c_prj(l_project_id);
18691 FETCH c_prj INTO l_proj_status, l_proj_type_class;
18692 CLOSE c_prj;
18693 END IF;
18694
18695 /* The check has to be done only for an Approved Contract Type project. */
18696 IF (nvl(l_proj_type_class,'NONE') = 'CONTRACT' AND
18697 nvl(l_proj_status,'UNAPPROVED') = 'APPROVED') THEN
18698 OPEN c_prj_count(l_project_id);
18699 FETCH c_prj_count INTO l_prj_mgr_count;
18700 CLOSE c_prj_count;
18701 IF l_prj_mgr_count = 0 THEN
18702 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
18703 pa_utils.add_message
18704 ( p_app_short_name => 'PA'
18705 ,p_msg_name => 'PA_PR_INSUF_PROJ_MGR'
18706 );
18707 RAISE FND_API.G_EXC_ERROR;
18708 END IF;
18709 END IF;
18710 END IF;
18711 /* End of code for bug #2111806 */
18712
18713 -- ----------------------------------------
18714
18715 -- anlee org role changes
18716 -- UPDATE org roles
18717
18718 l_count := 0;
18719 j := p_org_roles.first;
18720 IF p_org_roles.exists(j) THEN
18721
18722 FOR i in 1..p_org_roles.COUNT LOOP
18723 OPEN l_org_role_csr(l_project_id, p_org_roles(i).person_id,
18724 p_org_roles(i).project_role_type );
18725 FETCH l_org_role_csr INTO l_org_roles_rec;
18726 IF l_org_role_csr%NOTFOUND THEN
18727 CLOSE l_org_role_csr;
18728 -- This means this is a new org role
18729 -- add this to the temp table which will be passed
18730 -- to add_org_roles
18731
18732 IF l_org_roles_tbl.EXISTS(1) THEN
18733 l_count := l_org_roles_tbl.COUNT + 1;
18734 ELSE
18735 l_count := 1;
18736 END IF;
18737 l_org_roles_tbl(l_count) := p_org_roles(i);
18738 IF l_org_roles_tbl(l_count).start_date =
18739 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
18740 l_org_roles_tbl(l_count).start_date IS NULL THEN
18741 l_org_roles_tbl(l_count).start_date := TRUNC(SYSDATE);
18742 END IF;
18743 IF l_org_roles_tbl(l_count).end_date =
18744 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18745 l_org_roles_tbl(l_count).end_date := NULL;
18746 END IF;
18747 ELSE
18748 CLOSE l_org_role_csr;
18749 IF p_org_roles(i).start_date <>
18750 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18751 p_org_roles(i).start_date IS NOT NULL THEN
18752 IF p_org_roles(i).start_date <>
18753 NVL(l_org_roles_rec.start_date_active,
18754 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18755 l_temp_start_date := p_org_roles(i).start_date;
18756 ELSE
18757
18758 l_temp_start_date := l_org_roles_rec.start_date_active;
18759 END IF;
18760 ELSE
18761 l_temp_start_date := l_org_roles_rec.start_date_active;
18762 END IF;
18763 IF p_org_roles(i).end_date <>
18764 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18765 p_org_roles(i).end_date IS NOT NULL THEN
18766 IF p_org_roles(i).end_date <>
18767 NVL(l_org_roles_rec.end_date_active,
18768 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18769 l_temp_end_date := p_org_roles(i).end_date;
18770 ELSE
18771 l_temp_end_date := l_org_roles_rec.end_date_active;
18772 END IF;
18773 ELSE
18774 l_temp_end_date := l_org_roles_rec.end_date_active;
18775 END IF;
18776 IF l_temp_end_date < l_temp_start_date THEN
18777 p_return_status := FND_API.G_RET_STS_ERROR;
18778 IF FND_MSG_PUB.Check_Msg_Level
18779 (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18780 pa_interface_utils_pub.map_new_amg_msg
18781 ( p_old_message_code => 'PA_PR_INVALID_OR_DATES'
18782 ,p_msg_attribute => 'CHANGE'
18783 ,p_resize_flag => 'N'
18784 ,p_msg_context => 'PROJ'
18785 ,p_attribute1 => l_project_rec.segment1
18786 ,p_attribute2 => ''
18787 ,p_attribute3 => ''
18788 ,p_attribute4 => ''
18789 ,p_attribute5 => '');
18790 p_multiple_task_msg := 'F';
18791 END IF;
18792 END IF;
18793 IF (l_temp_start_date <>
18794 NVL(l_org_roles_rec.start_date_active,
18795 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18796 OR
18797 (l_temp_end_date <>
18798 NVL(l_org_roles_rec.end_date_active,
18799 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)) THEN
18800 if p_multiple_task_msg <> 'F' then
18801
18802
18803 SELECT COMPLETION_DATE
18804 INTO v_completion_date
18805 FROM pa_projects p
18806 WHERE p.project_id = l_org_roles_rec.project_id;
18807 if l_org_roles_rec.scheduled_flag = 'N'
18808 then
18809 PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY(
18810 p_api_version => 1.0 -- p_api_version
18811 , p_init_msg_list => FND_API.G_TRUE -- p_init_msg_list
18812 , p_commit => FND_API.G_FALSE -- p_commit
18813 , p_validate_only => FND_API.G_FALSE -- p_validate_only
18814 , p_validation_level => FND_API.G_VALID_LEVEL_FULL -- p_validation_level
18815 , p_debug_mode => 'N' -- p_debug_mode
18816 , p_object_id => l_org_roles_rec.project_id -- p_object_id
18817 , p_OBJECT_TYPE => 'PA_PROJECTS' -- p_OBJECT_TYPE
18818 , p_project_role_id => NULL -------Bug 2100142l_key_members_rec.project_id -- p_project_role_id
18819 , p_project_role_type => l_org_roles_rec.project_role_type -- p_project_role_type
18820 , p_resource_type_id => l_org_roles_rec.resource_type_id -- p_resource_type_id
18821 , p_resource_source_id => l_org_roles_rec.resource_source_id -- p_resource_source_id
18822 , p_resource_name => v_null_char -- p_resource_name
18823 , p_start_date_active => l_temp_start_date -- p_start_date_active
18824 , p_scheduled_flag => 'N' -- p_scheduled_flag
18825 , p_record_version_number => l_org_roles_rec.record_version_number -- p_record_version_number
18826 , p_calling_module => 'FORM' -- p_calling_module
18827 , p_project_id => l_org_roles_rec.project_id -- p_project_id
18828 , p_project_end_date => v_completion_date -- p_project_end_date
18829 , p_project_party_id => l_org_roles_rec.project_party_id -- p_project_party_id
18830 , p_end_date_active => l_temp_end_date -- p_end_date_active
18831 , x_wf_type => l_wf_type
18832 , x_wf_item_type => l_wf_item_type
18833 , x_wf_process => l_wf_process
18834 , x_assignment_id => l_assignment_id
18835 , x_return_status => x_return_status -- x_return_status
18836 , x_msg_count => x_msg_count -- x_msg_count
18837 , x_msg_data => x_msg_data -- x_msg_data
18838 );
18839 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
18840 p_return_status := x_return_status;
18841 p_msg_count := x_msg_count;
18842 p_msg_data := SUBSTR(p_msg_data||x_msg_data,1,2000);
18843 if (x_return_status = FND_API.G_RET_STS_ERROR) then
18844 raise FND_API.G_EXC_UNEXPECTED_ERROR;
18845 else -- (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
18846 raise FND_API.G_EXC_ERROR;
18847 end if;
18848 END IF;
18849 end if;
18850
18851 end if;
18852 END IF;
18853 END IF;
18854 END LOOP;
18855
18856 IF p_multiple_task_msg = 'F'
18857 THEN
18858 RAISE FND_API.G_EXC_ERROR;
18859 END IF;
18860
18861 IF l_org_roles_tbl.COUNT > 0 THEN
18862 PA_PROJECT_PVT.add_org_roles (
18863 p_return_status =>l_return_status,
18864 p_pa_source_template_id =>l_project_rec.created_from_project_id,
18865 p_project_id =>l_project_id,
18866 p_org_roles =>l_org_roles_tbl );
18867 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
18868 p_return_status := l_return_status;
18869 p_project_out.return_status := l_return_status;
18870 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18871 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
18872 p_return_status := l_return_status;
18873 p_project_out.return_status := l_return_status;
18874 RAISE FND_API.G_EXC_ERROR;
18875 END IF;
18876 END IF;
18877
18878 END IF;
18879
18880
18881 --UPDATE class_categories
18882
18883 i := p_class_categories.first;
18884
18885 IF p_class_categories.exists(i) THEN
18886
18887 WHILE i IS NOT NULL LOOP
18888
18889 IF (p_class_categories(i).class_category <>
18890 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
18891 (p_class_categories(i).class_category IS NOT NULL )
18892 AND (p_class_categories(i).class_code <>
18893 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
18894 (p_class_categories(i).class_code IS NOT NULL ) THEN
18895
18896 -- Start of Addition for bug 4191009
18897 class_code_tbl.delete();
18898 l_class_code := NULL;
18899 l_code_percentage := NULL;
18900 OPEN l_class_categories_csr (l_project_id,
18901 p_class_categories(i).class_category);
18902 FETCH l_class_categories_csr BULK COLLECT INTO class_code_tbl;
18903
18904 If class_code_tbl.count<1 Then
18905 l_class_categories_tbl(i) := p_class_categories(i);
18906 Else
18907 for j in class_code_tbl.first..class_code_tbl.last Loop
18908 If class_code_tbl.exists(j) then
18909 if class_code_tbl(j) = p_class_categories(i).class_code then
18910 if (p_class_categories(i).new_class_code <>
18911 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
18912 (p_class_categories(i).new_class_code IS NOT NULL ) THEN -- 5348726 Added for bug#5294891
18913 --remove the old class_code
18914 DELETE FROM pa_project_classes
18915 WHERE project_id = l_project_id
18916 AND class_category = p_class_categories(i).class_category
18917 AND class_code = p_class_categories(i).class_code;
18918
18919 OPEN c_get_class_code_id(p_class_categories(i).class_category,
18920 p_class_categories(i).class_code);
18921 fetch c_get_class_code_id into l_old_class_code_id;
18922 close c_get_class_code_id;
18923
18924 OPEN c_get_class_code_id(p_class_categories(i).class_category,
18925 p_class_categories(i).new_class_code);
18926 fetch c_get_class_code_id into l_new_class_code_id;
18927 if c_get_class_code_id%notfound then
18928 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18929 THEN
18930 pa_interface_utils_pub.map_new_amg_msg
18931 ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
18932 ,p_msg_attribute => 'CHANGE'
18933 ,p_resize_flag => 'N'
18934 ,p_msg_context => 'PROJ'
18935 ,p_attribute1 => l_project_rec.segment1
18936 ,p_attribute2 => ''
18937 ,p_attribute3 => ''
18938 ,p_attribute4 => ''
18939 ,p_attribute5 => '');
18940 END IF;
18941 close c_get_class_code_id;
18942 RAISE FND_API.G_EXC_ERROR;
18943 end if;
18944 close c_get_class_code_id;
18945
18946 PA_USER_ATTR_PUB.DELETE_USER_ATTRS_DATA (
18947 p_validate_only => FND_API.G_FALSE
18948 ,p_project_id => l_project_id
18949 ,p_old_classification_id => l_old_class_code_id
18950 ,p_new_classification_id => l_new_class_code_id
18951 ,p_classification_type => 'CLASS_CODE'
18952 ,x_return_status => l_return_status
18953 ,x_msg_count => l_msg_count
18954 ,x_msg_data => l_msg_data );
18955 l_msg_count := FND_MSG_PUB.count_msg;
18956 IF l_msg_count > 0 THEN
18957 x_msg_count := l_msg_count;
18958 x_return_status := 'E';
18959 RAISE FND_API.G_EXC_ERROR;
18960 END IF;
18961 --Add the new class code values to the temp table
18962 l_class_categories_tbl(i) := p_class_categories(i);
18963 l_class_categories_tbl(i).class_code := p_class_categories(i).new_class_code;
18964 else -- 5348726 Added for bug#5294891
18965 OPEN l_code_percentage_csr (l_project_id,
18966 p_class_categories(i).class_category,
18967 p_class_categories(i).class_code);
18968 fetch l_code_percentage_csr into l_code_percentage;
18969 If l_code_percentage = p_class_categories(i).code_percentage then
18970 Null;
18971 Else
18972 --remove the old class_code
18973 DELETE FROM pa_project_classes
18974 WHERE project_id = l_project_id
18975 AND class_category = p_class_categories(i).class_category
18976 AND class_code = p_class_categories(i).class_code;
18977 --and add the new values to the temp table
18978 l_class_categories_tbl(i) := p_class_categories(i);
18979 End if;
18980 CLOSE l_code_percentage_csr;
18981 end if; -- 5348726 Added for bug#5294891
18982 l_class_code := class_code_tbl(j);
18983 exit;
18984 end if;
18985 end if;
18986 end loop;
18987 if l_class_code is null then
18988 l_class_categories_tbl(i) := p_class_categories(i);
18989 end if;
18990 end if;
18991 CLOSE l_class_categories_csr;
18992 -- End of addition for bug 4191009
18993
18994 /* Commented and altered as above for bug 4191009
18995 OPEN l_class_categories_csr (l_project_id,
18996 p_class_categories(i).class_category);
18997 FETCH l_class_categories_csr INTO l_class_code;
18998
18999 IF l_class_categories_csr%NOTFOUND THEN
19000 l_class_categories_tbl(i) := p_class_categories(i);
19001 ELSE
19002 IF l_class_code = p_class_categories(i).class_code THEN
19003 --if new value for class_code is same as old do nothing
19004 NULL;
19005 ELSE
19006 --remove the old class_code
19007 DELETE FROM pa_project_classes
19008 WHERE project_id = l_project_id
19009 AND class_category = p_class_categories(i).class_category
19010 AND class_code = l_class_code;
19011 --and add the new value for class_code to the temp table
19012 l_class_categories_tbl(i) := p_class_categories(i);
19013 END IF;
19014 END IF;
19015
19016 CLOSE l_class_categories_csr;
19017
19018 l_class_code := NULL; Commented till here and altered as above for bug 4191009 */
19019
19020 END IF; -- IF (p_class_categories(i).class_category <>
19021 -- PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19022 i := p_class_categories.next(i);
19023
19024 END LOOP;
19025
19026 END IF; -- IF p_class_categories.exists(i)
19027
19028 i := l_class_categories_tbl.first;
19029
19030 IF l_class_categories_tbl.exists(i)
19031 THEN
19032
19033 PA_PROJECT_PVT.add_class_categories ( p_return_status =>l_return_status
19034 , p_pa_source_template_id =>l_project_rec.created_from_project_id
19035 , p_project_id =>l_project_id
19036 , p_class_categories =>l_class_categories_tbl );
19037
19038 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
19039 THEN
19040
19041 p_project_out.return_status := l_return_status;
19042 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19043
19044 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
19045 THEN
19046
19047 p_project_out.return_status := l_return_status;
19048 RAISE FND_API.G_EXC_ERROR;
19049
19050 END IF;
19051 END IF;
19052
19053 -- bug 4541103 CLOSE l_lock_rows_csr; --FYI: doesn't remove locks
19054 /*Customer Account Relationship Changes update bill to and Ship to customer ID*/
19055
19056 --bug 3716805
19057 ----dbms_output.put_line('Value OF p_project_in.bill_to_customer_id'||p_project_in.bill_to_customer_id);
19058 ----dbms_output.put_line('Value OF p_project_in.ship_to_customer_id'||p_project_in.ship_to_customer_id);
19059 ----dbms_output.put_line('Value OF p_project_in.customer_id'||p_project_in.customer_id);
19060 ----dbms_output.put_line('Value OF p_project_in.bill_to_address_id'||p_project_in.bill_to_address_id);
19061 ----dbms_output.put_line('Value OF p_project_in.ship_to_address_id'||p_project_in.ship_to_address_id);
19062 ------dbms_output.put_line('Value OF p_project_in.bill_to_customer_id'||p_project_in.bill_to_customer_id);
19063
19064 -- Added the following logic for updating the Project Relationship code. Bug#5131471
19065 --Opened the following cursor because thru project record we can update only the attributes of an exsiting customer. We cannot add a new customer
19066 --or over write the existing customer with a totally new customer.
19067
19068 IF ( p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN -- check if the customer passed is not null and not mis num
19069 Open Cur_Customer(l_project_id,p_project_in.customer_id);
19070 Fetch Cur_Customer into Cur_Customer_rec;
19071
19072 IF (Cur_Customer%FOUND) THEN
19073
19074 If (p_project_in.project_relationship_code IS NOT NULL AND p_project_in.project_relationship_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
19075
19076 --dbms_output.put_line('three'||l_check_relationship_flag);
19077 OPEN cur_customer_status(p_project_in.customer_id);
19078 FETCH cur_customer_status INTO l_cust_status;
19079
19080 IF ( cur_customer_status%NOTFOUND ) THEN
19081 --dbms_output.put_line('five'||l_check_relationship_flag);
19082 --passed customer does not exist
19083 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19084 --Changed the error message from PA_CUSTOMER_NOT_EXIST to PA_CUSTOMER_ID_INVALID for Bug#5183150
19085 pa_utils.add_message
19086 ( p_app_short_name => 'PA'
19087 ,p_msg_name => 'PA_CUSTOMER_ID_INVALID'
19088 );
19089 END IF;
19090 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19091 p_return_status := FND_API.G_RET_STS_ERROR;
19092 RAISE FND_API.G_EXC_ERROR;
19093
19094 ELSIF ( cur_customer_status%FOUND ) THEN
19095 --dbms_output.put_line('four'||l_check_relationship_flag);
19096 IF ( l_cust_status = 'I' ) THEN
19097 --customer is not active
19098 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19099 pa_utils.add_message
19100 ( p_app_short_name => 'PA'
19101 ,p_msg_name => 'PA_CUSTOMER_NOT_ACTIVE'
19102 ,p_token1 => 'PROJECT_NAME'
19103 ,p_value1 => l_project_rec.segment1
19104 ,p_token2 => 'CUSTOMER_ID'
19105 ,p_value2 => p_project_in.customer_id
19106 );
19107 END IF;
19108 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19109 p_return_status := FND_API.G_RET_STS_ERROR;
19110 RAISE FND_API.G_EXC_ERROR;
19111
19112 ELSE --customer id is not null and it is valid
19113
19114
19115 UPDATE pa_project_customers
19116 SET
19117 project_relationship_code = p_project_in.project_relationship_code
19118 WHERE
19119 customer_id = p_project_in.customer_id AND
19120 project_id = l_project_id;
19121
19122 END IF;
19123 END IF; -- if cur_customer_status%NOTFOUND
19124 CLOSE cur_customer_status;
19125
19126 END IF; --Project relationship code is not null and not mis num
19127
19128 END IF; --Cur_Customer%FOUND
19129 Close Cur_Customer;
19130
19131 END IF; --customer id is not passed as null or mis num
19132
19133 -- End of logic added for Bug#5131471 for updating the Project Relationship code.
19134
19135 If (p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19136 OR (p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19137 --bug 3716805
19138 THEN
19139 If p_project_in.customer_id IS NULL OR p_project_in.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19140 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19141 THEN
19142 pa_interface_utils_pub.map_new_amg_msg
19143 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
19144 ,p_msg_attribute => 'CHANGE'
19145 ,p_resize_flag => 'N'
19146 ,p_msg_context => 'PROJ'
19147 ,p_attribute1 => l_project_in_rec.pm_project_reference
19148 ,p_attribute2 => ''
19149 ,p_attribute3 => ''
19150 ,p_attribute4 => ''
19151 ,p_attribute5 => '');
19152 END IF;
19153 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19154 p_return_status := FND_API.G_RET_STS_ERROR;
19155 RAISE FND_API.G_EXC_ERROR;
19156 end if;
19157
19158 Open Cur_Customer(l_project_id,p_project_in.customer_id);
19159 Fetch Cur_Customer into Cur_Customer_rec;
19160 Close Cur_Customer;
19161
19162 l_bill_to_customer_id:=p_project_in.bill_to_customer_id;
19163 l_ship_to_customer_id:=p_project_in.ship_to_customer_id;
19164 --added for bug 3911782
19165 l_bill_to_address_id :=p_project_in.bill_to_address_id;
19166 l_ship_to_address_id :=p_project_in.ship_to_address_id;
19167 --changes end for Bug 3911782
19168
19169 /* Bug 3077676 Begin */
19170
19171 -- Not adding this error message in get_customer_info as that is called from lot of other places too
19172 -- and it would be a risk changing that.
19173
19174 OPEN get_cust_acc_rel_code;
19175 FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
19176 CLOSE get_cust_acc_rel_code;
19177 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done below before
19178 calling get_customer_info api.
19179 IF NVL(l_cust_acc_rel_code,'N') ='N'
19180 AND p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19181 AND p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19182 AND p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19183 AND p_project_in.customer_id <> p_project_in.bill_to_customer_id
19184 AND p_project_in.customer_id <> p_project_in.ship_to_customer_id
19185 THEN
19186 pa_interface_utils_pub.map_new_amg_msg
19187 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19188 ,p_msg_attribute => 'CHANGE'
19189 ,p_resize_flag => 'Y'
19190 ,p_msg_context => 'PROJ'
19191 ,p_attribute1 => p_project_in.pm_project_reference
19192 ,p_attribute2 => ''
19193 ,p_attribute3 => ''
19194 ,p_attribute4 => ''
19195 ,p_attribute5 => '');
19196 RAISE FND_API.G_EXC_ERROR;
19197 END IF;
19198 */
19199 /* Bug 3077676 End */
19200
19201 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
19202 If (p_project_in.bill_to_customer_id is null or p_project_in.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19203 and Cur_Customer_rec.bill_to_customer_id is not null Then
19204 l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
19205 --changes for bug 3911782
19206 If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19207 and Cur_Customer_rec.bill_to_address_id is not null Then
19208 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19209 End if;
19210 Else
19211 If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19212 and Cur_Customer_rec.bill_to_address_id is not null Then
19213 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19214 End if;
19215 --changes end for bug 3911782
19216 end if;
19217
19218 If (p_project_in.ship_to_customer_id is null or p_project_in.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19219 and Cur_Customer_rec.ship_to_customer_id is not null Then
19220 l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
19221 --changes for bug 3911782
19222 If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19223 and Cur_Customer_rec.ship_to_address_id is not null Then
19224 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19225 End if;
19226 Else
19227 If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19228 and Cur_Customer_rec.ship_to_address_id is not null Then
19229 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19230 End if;
19231 --changes end for bug 3911782
19232 end if;
19233
19234 -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
19235 -- relations ship code is N.
19236 ----dbms_output.put_line('Value OF p_project_in.bill_to_address_id'||p_project_in.bill_to_address_id);
19237 ----dbms_output.put_line('Value OF p_project_in.ship_to_address_id'||p_project_in.ship_to_address_id);
19238
19239 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
19240 p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
19241 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19242 p_project_in.customer_id <> l_bill_to_customer_id
19243 ) or
19244 (
19245 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19246 p_project_in.customer_id <> l_ship_to_customer_id
19247 ))
19248 THEN
19249 pa_interface_utils_pub.map_new_amg_msg
19250 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19251 ,p_msg_attribute => 'CHANGE'
19252 ,p_resize_flag => 'Y'
19253 ,p_msg_context => 'PROJ'
19254 ,p_attribute1 => l_project_in_rec.pm_project_reference
19255 ,p_attribute2 => ''
19256 ,p_attribute3 => ''
19257 ,p_attribute4 => ''
19258 ,p_attribute5 => '');
19259 RAISE FND_API.G_EXC_ERROR;
19260 END IF;
19261
19262 pa_customer_info.get_customer_info( X_project_ID => l_project_id,
19263 X_Customer_Id => p_project_in.customer_id
19264 ,X_Bill_To_Customer_Id => l_bill_to_customer_id
19265 ,X_Ship_To_Customer_Id => l_ship_to_customer_id
19266 ,X_Bill_To_Address_Id => l_bill_to_address_id
19267 ,X_Ship_To_Address_Id => l_ship_to_address_id
19268 ,X_Bill_To_Contact_Id => l_bill_to_contact_id
19269 ,X_Ship_To_Contact_Id => l_ship_to_contact_id
19270 ,X_Err_Code => l_err_code
19271 ,X_Err_Stage => l_err_stage
19272 ,X_Err_Stack => l_err_stack
19273 ,p_calling_module => 'AMG' --added for bug#4770535
19274 );
19275
19276 --dbms_output.put_line('Value OF l_bill_to_customer_id'||l_bill_to_customer_id);
19277 --dbms_output.put_line('Value OF l_ship_to_customer_id'||l_ship_to_customer_id);
19278 --dbms_output.put_line('Value OF l_bill_to_address_id'||l_bill_to_address_id);
19279 --dbms_output.put_line('Value OF l_ship_to_address_id'||l_ship_to_address_id);
19280 --dbms_output.put_line('Value OF l_bill_to_contact_id'||l_bill_to_contact_id);
19281 --dbms_output.put_line('Value OF l_ship_to_contact_id'||l_ship_to_contact_id);
19282 -- For this API,error code 10 is a warning.Anything above 10 is an error
19283 IF l_err_code > 10
19284 THEN
19285
19286 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19287 THEN
19288
19289 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
19290 THEN
19291 pa_interface_utils_pub.map_new_amg_msg
19292 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19293 ,p_msg_attribute => 'CHANGE'
19294 ,p_resize_flag => 'Y'
19295 ,p_msg_context => 'PROJ'
19296 ,p_attribute1 => l_project_in_rec.pm_project_reference
19297 ,p_attribute2 => ''
19298 ,p_attribute3 => ''
19299 ,p_attribute4 => ''
19300 ,p_attribute5 => '');
19301 ELSE
19302 pa_interface_utils_pub.map_new_amg_msg
19303 ( p_old_message_code => l_err_stage
19304 ,p_msg_attribute => 'CHANGE'
19305 ,p_resize_flag => 'Y'
19306 ,p_msg_context => 'PROJ'
19307 ,p_attribute1 => l_project_in_rec.pm_project_reference
19308 ,p_attribute2 => ''
19309 ,p_attribute3 => ''
19310 ,p_attribute4 => ''
19311 ,p_attribute5 => '');
19312 END IF;
19313
19314 END IF;
19315
19316 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19317 RAISE FND_API.G_EXC_ERROR;
19318
19319 ELSIF l_err_code < 0
19320 THEN
19321
19322 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
19323 THEN
19324 pa_interface_utils_pub.map_new_amg_msg
19325 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19326 ,p_msg_attribute => 'CHANGE'
19327 ,p_resize_flag => 'Y'
19328 ,p_msg_context => 'PROJ'
19329 ,p_attribute1 => l_project_in_rec.pm_project_reference
19330 ,p_attribute2 => ''
19331 ,p_attribute3 => ''
19332 ,p_attribute4 => ''
19333 ,p_attribute5 => '');
19334 END IF;
19335
19336 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19337 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19338 END IF;
19339
19340 /* Update the project customer information */
19341 ----dbms_output.put_line('before update ');
19342 Update Pa_project_customers
19343 Set bill_to_customer_id=l_bill_to_customer_id,
19344 ship_to_customer_id=l_ship_to_customer_id,
19345 Bill_To_Address_Id =l_bill_to_address_id,
19346 Ship_to_address_id =l_ship_to_address_id
19347 where project_id=l_project_id
19348 and customer_id=p_project_in.customer_id;
19349
19350 If p_project_in.bill_to_customer_id is not null and p_project_in.bill_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
19351 Delete pa_project_contacts
19352 where Project_Id=l_project_id
19353 and customer_id=p_project_in.customer_id
19354 and Project_Contact_Type_Code='BILLING';
19355
19356 end if;
19357
19358 If p_project_in.ship_to_customer_id is not null and p_project_in.ship_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
19359 Delete pa_project_contacts
19360 where Project_Id=l_project_id
19361 and customer_id=p_project_in.customer_id
19362 and Project_Contact_Type_Code='SHIPPING';
19363
19364 end if;
19365
19366
19367 end if;
19368
19369 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value
19370 -- using the local variable instead of cursor variable
19371
19372 /** Below code added for bug 3279981. Customer at Top Task in FP_M */
19373 --IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 commented
19374 IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_old_cust_top_task_flag THEN -- 4188765 added
19375 --Enabling the customer at top task flag. Thus, we need to set the default top task customer
19376 DECLARE
19377 hghst_ctr_cust_id NUMBER;
19378 hghst_ctr_cust_name hz_parties.party_name%TYPE; --VARCHAR2(50); Bug 5622539
19379 hghst_ctr_cust_num hz_parties.party_number%TYPE; --VARCHAR2(30); Bug 5622539
19380
19381 l_return_status VARCHAR2(10);
19382 l_msg_count NUMBER := 0;
19383 l_msg_data VARCHAR2(2000);
19384 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
19385 BEGIN
19386 -- l_exclude_cust_id_tbl(1) := 0; Bug 5622539
19387 --Retrieve the customer to be set as the default top task customer
19388 pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
19389 P_API_VERSION => 1.0
19390 , P_INIT_MSG_LIST => 'T'
19391 , P_COMMIT => 'F'
19392 , P_VALIDATE_ONLY => 'F'
19393 , P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19394 , P_DEBUG_MODE => 'N'
19395 , p_calling_module => 'AMG'
19396 , p_project_id => l_project_id
19397 , p_exclude_cust_id_tbl => l_exclude_cust_id_tbl
19398 , x_highst_contr_cust_id => hghst_ctr_cust_id
19399 , x_highst_contr_cust_name => hghst_ctr_cust_name
19400 , x_highst_contr_cust_num => hghst_ctr_cust_num
19401 , x_return_status => l_return_status
19402 , x_msg_count => l_msg_count
19403 , x_msg_data => l_msg_data );
19404
19405 -- Bug 5622539
19406 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19407 l_msg_count := FND_MSG_PUB.count_msg;
19408 if l_msg_count = 1 then
19409 PA_INTERFACE_UTILS_PUB.get_messages
19410 (p_encoded => FND_API.G_FALSE,
19411 p_msg_index => 1,
19412 p_msg_count => l_msg_count,
19413 p_msg_data => l_msg_data,
19414 p_data => l_msg_data,
19415 p_msg_index_out => l_msg_index_out);
19416
19417 end if;
19418 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19419 p_project_out.return_status := l_return_status;
19420 RAISE FND_API.G_EXC_ERROR;
19421 else
19422 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19423 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19424 END if;
19425 end if;
19426 -- Bug 5622539
19427
19428 IF hghst_ctr_cust_id IS NOT null THEN
19429 --This API call will update pa_project_customers and pa_tasks
19430 pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
19431 P_API_VERSION => 1.0
19432 , P_INIT_MSG_LIST => 'T'
19433 , P_COMMIT => 'F'
19434 , P_VALIDATE_ONLY => 'F'
19435 , P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19436 , P_DEBUG_MODE => 'N'
19437 , p_calling_module => 'AMG'
19438 , p_mode => 'ENABLE'
19439 , p_project_id => l_project_id
19440 , p_def_top_task_cust => hghst_ctr_cust_id
19441 , p_contr_update_cust => null
19442 , x_return_status => l_return_status
19443 , x_msg_count => l_msg_count
19444 , x_msg_data => l_msg_data );
19445
19446 -- Bug 5622539
19447 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19448 l_msg_count := FND_MSG_PUB.count_msg;
19449 if l_msg_count = 1 then
19450 PA_INTERFACE_UTILS_PUB.get_messages
19451 (p_encoded => FND_API.G_FALSE,
19452 p_msg_index => 1,
19453 p_msg_count => l_msg_count,
19454 p_msg_data => l_msg_data,
19455 p_data => l_msg_data,
19456 p_msg_index_out => l_msg_index_out);
19457
19458 end if;
19459 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19460 p_project_out.return_status := l_return_status;
19461 RAISE FND_API.G_EXC_ERROR;
19462 else
19463 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19464 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19465 END if;
19466 end if;
19467 -- Bug 5622539
19468
19469 END IF;
19470 END ;
19471 END IF;
19472
19473 --IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 Commented
19474 IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_old_cust_top_task_flag THEN -- 4188765 Added
19475 --Disabling the customer at top task flag. Thus, we need to set the customer bill split for the project customers
19476 DECLARE
19477 cust_id PA_PROJECT_CUSTOMERS.customer_id%TYPE;
19478 hghst_ctr_cust_id NUMBER;
19479 hghst_ctr_cust_name hz_parties.party_name%TYPE; --VARCHAR2(50); Bug 5622539
19480 hghst_ctr_cust_num hz_parties.party_number%TYPE; --VARCHAR2(30); Bug 5622539
19481 -- num_customers NUMBER := 0; bug 5622539
19482 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
19483
19484 l_return_status VARCHAR2(10);
19485 l_msg_count NUMBER := 0;
19486 l_msg_data VARCHAR2(2000);
19487 CURSOR cur_get_def_top_task_cust IS
19488 SELECT customer_id
19489 FROM pa_project_customers
19490 WHERE project_id = l_project_id
19491 AND default_top_task_cust_flag = 'Y' ;
19492 BEGIN
19493 -- l_exclude_cust_id_tbl(1) := 0; Bug 5622539
19494 --Retrieve the customer to be updated with 100% contribution
19495 pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
19496 P_API_VERSION => 1.0
19497 , P_INIT_MSG_LIST => 'T'
19498 , P_COMMIT => 'F'
19499 , P_VALIDATE_ONLY => 'F'
19500 , P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL --100 bug 5622539
19501 , P_DEBUG_MODE => 'N'
19502 , p_calling_module => 'AMG'
19503 , p_project_id => l_project_id
19504 , p_exclude_cust_id_tbl => l_exclude_cust_id_tbl
19505 , x_highst_contr_cust_id => hghst_ctr_cust_id
19506 , x_highst_contr_cust_name => hghst_ctr_cust_name
19507 , x_highst_contr_cust_num => hghst_ctr_cust_num
19508 , x_return_status => l_return_status
19509 , x_msg_count => l_msg_count
19510 , x_msg_data => l_msg_data );
19511
19512 -- Bug 5622539
19513 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19514 l_msg_count := FND_MSG_PUB.count_msg;
19515 if l_msg_count = 1 then
19516 PA_INTERFACE_UTILS_PUB.get_messages
19517 (p_encoded => FND_API.G_FALSE,
19518 p_msg_index => 1,
19519 p_msg_count => l_msg_count,
19520 p_msg_data => l_msg_data,
19521 p_data => l_msg_data,
19522 p_msg_index_out => l_msg_index_out);
19523
19524 end if;
19525 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19526 p_project_out.return_status := l_return_status;
19527 RAISE FND_API.G_EXC_ERROR;
19528 else
19529 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19530 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19531 END if;
19532 end if;
19533 -- Bug 5622539
19534 OPEN cur_get_def_top_task_cust;
19535 FETCH cur_get_def_top_task_cust INTO cust_id;
19536 CLOSE cur_get_def_top_task_cust;
19537
19538 IF hghst_ctr_cust_id IS NOT NULL THEN
19539 --This API call will update pa_project_customers and pa_tasks
19540 pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
19541 P_API_VERSION => 1.0
19542 , P_INIT_MSG_LIST => 'T'
19543 , P_COMMIT => 'F'
19544 , P_VALIDATE_ONLY => 'F'
19545 , P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19546 , P_DEBUG_MODE => 'N'
19547 , p_calling_module => 'AMG'
19548 , p_mode => 'DISABLE'
19549 , p_project_id => l_project_id
19550 , p_def_top_task_cust => cust_id
19551 , p_contr_update_cust => hghst_ctr_cust_id
19552 , x_return_status => l_return_status
19553 , x_msg_count => l_msg_count
19554 , x_msg_data => l_msg_data );
19555
19556 -- Bug 5622539
19557 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19558 l_msg_count := FND_MSG_PUB.count_msg;
19559 if l_msg_count = 1 then
19560 PA_INTERFACE_UTILS_PUB.get_messages
19561 (p_encoded => FND_API.G_FALSE,
19562 p_msg_index => 1,
19563 p_msg_count => l_msg_count,
19564 p_msg_data => l_msg_data,
19565 p_data => l_msg_data,
19566 p_msg_index_out => l_msg_index_out);
19567
19568 end if;
19569 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19570 p_project_out.return_status := l_return_status;
19571 RAISE FND_API.G_EXC_ERROR;
19572 else
19573 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19574 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19575 END if;
19576 end if;
19577 -- Bug 5622539
19578 END IF;
19579 END;
19580 END IF;
19581
19582 ------------------------------------------------------------------------------------------------------------
19583 /* This code is newly added.It has few checks that were present in the initial code for p_project_in_rec_type.
19584 customer_id and few new validation of code. The above code is left untouched as it would have caused regression otherwise.
19585 We continue to support updation of single customer record via p_project_in_rec_type.customer_id. */
19586 -----------------------------------------------------------------------------------------------------------
19587 ----dbms_output.put_line('The control comes till this point');
19588 /* Tracking bug ..customer code added in a loop */
19589 i := p_customers_in.first;
19590 IF p_customers_in.exists(i) THEN
19591 WHILE i IS NOT NULL LOOP
19592 --dbms_output.put_line('if CUSTOMER ARE PASSED TO UPDATE_PROJECT ');
19593 --dbms_output.put_line('p_customers_in(i).PROJECT_RELATIONSHIP_CODE'||p_customers_in(i).PROJECT_RELATIONSHIP_CODE);
19594 -- All this should be done in a loop **/ ADITI_START
19595
19596 /*Customer Account Relationship Changes update bill to and Ship to customer ID*/
19597
19598 --bug 3716805
19599 /* Commented for tracking Bug
19600 If (p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19601 OR (p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19602 --bug 3716805
19603 THEN
19604 If p_project_in.customer_id IS NULL OR p_project_in.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19605 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19606 THEN
19607 pa_interface_utils_pub.map_new_amg_msg
19608 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
19609 ,p_msg_attribute => 'CHANGE'
19610 ,p_resize_flag => 'N'
19611 ,p_msg_context => 'PROJ'
19612 ,p_attribute1 => l_project_in_rec.pm_project_reference
19613 ,p_attribute2 => ''
19614 ,p_attribute3 => ''
19615 ,p_attribute4 => ''
19616 ,p_attribute5 => '');
19617 END IF;
19618 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19619 p_return_status := FND_API.G_RET_STS_ERROR;
19620 RAISE FND_API.G_EXC_ERROR;
19621 end if;*/
19622
19623 /** changed FROM p_project_in.customer_id to p_customers_in(i).custmer_id in all places **/
19624 If (p_customers_in(i).bill_to_customer_id IS NOT NULL AND p_customers_in(i).bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19625 OR (p_customers_in(i).ship_to_customer_id IS NOT NULL AND p_customers_in(i).ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19626 OR (p_customers_in(i).CONTACT_ID IS NOT NULL AND p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)--added for tracking bug by aditi
19627 --bug 3716805
19628 THEN
19629 --dbms_output.put_line('comes into karthiks 0th else');
19630 If p_customers_in(i).customer_id IS NULL OR p_customers_in(i).customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19631 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19632 THEN
19633 pa_interface_utils_pub.map_new_amg_msg
19634 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
19635 ,p_msg_attribute => 'CHANGE'
19636 ,p_resize_flag => 'N'
19637 ,p_msg_context => 'PROJ'
19638 ,p_attribute1 => l_project_in_rec.pm_project_reference
19639 ,p_attribute2 => ''
19640 ,p_attribute3 => ''
19641 ,p_attribute4 => ''
19642 ,p_attribute5 => '');
19643 END IF;
19644 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19645 p_return_status := FND_API.G_RET_STS_ERROR;
19646 RAISE FND_API.G_EXC_ERROR;
19647 end if;
19648 --dbms_output.put_line('comes into karthiks 0th end if');
19649 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
19650
19651 /* Bug 3077676 Begin */
19652
19653 -- Not adding this error message in get_customer_info as that is called from lot of other places too
19654 -- and it would be a risk changing that.
19655 OPEN get_cust_acc_rel_code;
19656 FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
19657 CLOSE get_cust_acc_rel_code;
19658
19659 /* Moved cursor get_cust_acc_rel_code from below to above for tracking bug */
19660
19661
19662
19663 --Open Cur_Customer(l_project_id,p_project_in.customer_id); --Commented for tracking bug
19664 Open Cur_Customer(l_project_id,p_customers_in(i).customer_id); --Added for tracking Bug
19665 Fetch Cur_Customer into Cur_Customer_rec;
19666 If Cur_Customer%NOTFOUND THEN --added for tracking
19667 Close Cur_Customer;
19668 -- This means this is a new customer
19669 -- add this to the temp table which will be
19670 --dbms_output.put_line('comes into free portion');
19671 --dbms_output.put_line('p_customers_in(i).customer_id'||p_customers_in(i).customer_id);
19672 IF p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19673 --dbms_output.put_line('comes into karthiks 1st else');
19674 IF p_customers_in(i).project_relationship_code IS NULL OR
19675 p_customers_in(i).project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
19676 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19677 THEN
19678 pa_utils.add_message
19679 ( p_app_short_name => 'PA'-- using existing message for AA TRACKING
19680 ,p_msg_name => 'PA_RELATIONSHIP_CODE_REQD'
19681 ,p_token1 => 'PROJECT_NAME'
19682 ,p_value1 => l_project_rec.segment1
19683 ,p_token2 => 'CUSTOMER_ID'
19684 ,p_value2 => p_customers_in(i).customer_id
19685 );
19686 END IF;
19687 p_multiple_task_msg := 'F';
19688 RAISE FND_API.G_EXC_ERROR;
19689 END IF;
19690
19691 -- below if condition is added Bug 5622539
19692 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
19693 (l_enable_top_task_cust_flag='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
19694 IF p_customers_in(i).CUSTOMER_BILL_SPLIT IS NULL OR
19695 p_customers_in(i).CUSTOMER_BILL_SPLIT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
19696 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19697 THEN
19698 pa_utils.add_message
19699 ( p_app_short_name => 'PA'-- new message for AA TRACKING
19700 ,p_msg_name => 'PA_CUST_BILL_SPLIT_REQD'
19701 ,p_token1 => 'PROJECT_NAME'
19702 ,p_value1 => l_project_rec.segment1
19703 ,p_token2 => 'CUSTOMER_ID'
19704 ,p_value2 => p_customers_in(i).customer_id
19705 );
19706 END IF;
19707 p_multiple_task_msg := 'F';
19708 RAISE FND_API.G_EXC_ERROR;
19709 ELSE
19710 PA_CUSTOMERS_CONTACTS_UTILS.CHECK_CONTRIBUTION_PERCENTAGE
19711 ( p_customer_bill_split => p_customers_in(i).CUSTOMER_BILL_SPLIT
19712 ,x_return_status => l_return_status
19713 ,x_error_msg_code => l_error_msg_code);
19714 If l_return_status <> FND_API.G_RET_STS_SUCCESS then
19715 pa_utils.add_message
19716 ( p_app_short_name => 'PA' --TRACKING
19717 ,p_msg_name => 'PA_CUST_BILL_SPLIT_INVALID'
19718 ,p_token1 => 'PROJECT_NAME'
19719 ,p_value1 => l_project_rec.segment1
19720 ,p_token2 => 'CUSTOMER_ID'
19721 ,p_value2 => p_customers_in(i).customer_id
19722 );
19723 /* Fix for bug 4604087 */
19724 p_multiple_task_msg := 'F';
19725 RAISE FND_API.G_EXC_ERROR;
19726 END IF;
19727
19728 END IF;
19729 END IF;
19730 -- added by aditi for tracking bug -- FOR CUSTOMER ISSUE
19731 ----dbms_output.put_line('Value of p_project_in.customer_id'||p_customers_in(i).customer_id);
19732 /* OLD code be4 tracking again */
19733 /* Coomented the code below and added new code for tracking bug
19734 l_bill_to_customer_id:=p_project_in.bill_to_customer_id;
19735 l_ship_to_customer_id:=p_project_in.ship_to_customer_id;
19736 --added for bug 3911782
19737 l_bill_to_address_id :=p_project_in.bill_to_address_id;
19738 l_ship_to_address_id :=p_project_in.ship_to_address_id;
19739 --changes end for Bug 3911782*/
19740 l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
19741 l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
19742 --added for bug 3911782
19743 l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
19744 l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
19745 l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
19746 l_customer_bill_split := p_customers_in(i).Customer_Bill_Split;
19747 -- Added for Bug 5622539
19748 If (l_customer_bill_split is null or
19749 l_customer_bill_split = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19750 then
19751 l_customer_bill_split:=0;
19752 end if;
19753
19754 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
19755 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
19756 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
19757 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
19758
19759
19760
19761
19762 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done below before
19763 calling get_customer_info api.
19764 IF NVL(l_cust_acc_rel_code,'N') ='N'
19765 AND p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19766 AND p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19767 AND p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19768 AND p_project_in.customer_id <> p_project_in.bill_to_customer_id
19769 AND p_project_in.customer_id <> p_project_in.ship_to_customer_id
19770 THEN
19771 pa_interface_utils_pub.map_new_amg_msg
19772 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19773 ,p_msg_attribute => 'CHANGE'
19774 ,p_resize_flag => 'Y'
19775 ,p_msg_context => 'PROJ'
19776 ,p_attribute1 => p_project_in.pm_project_reference
19777 ,p_attribute2 => ''
19778 ,p_attribute3 => ''
19779 ,p_attribute4 => ''
19780 ,p_attribute5 => '');
19781 RAISE FND_API.G_EXC_ERROR;
19782 END IF;
19783 */
19784 /* Bug 3077676 End */
19785
19786 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
19787 /* For a New RECORD this code IS redundant by aditi for tracking
19788 If (p_project_in.bill_to_customer_id is null or p_project_in.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19789 and Cur_Customer_rec.bill_to_customer_id is not null Then
19790 l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
19791 --changes for bug 3911782
19792 If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19793 and Cur_Customer_rec.bill_to_address_id is not null Then
19794 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19795 End if;
19796 Else
19797 If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19798 and Cur_Customer_rec.bill_to_address_id is not null Then
19799 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19800 End if;
19801 --changes end for bug 3911782
19802 end if;
19803
19804 If (p_project_in.ship_to_customer_id is null or p_project_in.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19805 and Cur_Customer_rec.ship_to_customer_id is not null Then
19806 l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
19807 --changes for bug 3911782
19808 If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19809 and Cur_Customer_rec.ship_to_address_id is not null Then
19810 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19811 End if;
19812 Else
19813 If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19814 and Cur_Customer_rec.ship_to_address_id is not null Then
19815 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19816 End if;
19817 --changes end for bug 3911782
19818 end if;
19819 /* THIS WHOLE CODE IS COMMENTED FOR TRACKING BUG */
19820 -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
19821 -- relations ship code is N.
19822 ----dbms_output.put_line('Value of p_customers_in(i).customer_id'||p_customers_in(i).customer_id);
19823 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
19824 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
19825
19826 /* IF(NVL(l_cust_acc_rel_code,'N') ='N' and
19827 p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
19828 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19829 p_project_in.customer_id <> l_bill_to_customer_id
19830 ) or
19831 (
19832 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19833 p_project_in.customer_id <> l_ship_to_customer_id
19834 )) This coce is commented as the code is being called in loop for tracking issue*/
19835
19836 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
19837 p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
19838 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19839 p_customers_in(i).customer_id <> l_bill_to_customer_id
19840 ) or
19841 (
19842 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19843 p_customers_in(i).customer_id <> l_ship_to_customer_id
19844 ))
19845
19846 THEN
19847 pa_interface_utils_pub.map_new_amg_msg
19848 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19849 ,p_msg_attribute => 'CHANGE'
19850 ,p_resize_flag => 'Y'
19851 ,p_msg_context => 'PROJ'
19852 ,p_attribute1 => l_project_in_rec.pm_project_reference
19853 ,p_attribute2 => ''
19854 ,p_attribute3 => ''
19855 ,p_attribute4 => ''
19856 ,p_attribute5 => '');
19857 RAISE FND_API.G_EXC_ERROR;
19858 END IF;
19859 /** changes begin for tracking bug by aditi **/
19860
19861 ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
19862 If (p_customers_in(i).CONTACT_ID IS NOT NULL) AND (p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19863 then
19864
19865
19866 IF (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE IS NULL) OR (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )THEN
19867 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19868 THEN
19869 pa_utils.add_message
19870 ( p_app_short_name => 'PA'-- existing message for tracking bug
19871 ,p_msg_name => 'PA_CONTACT_TYPE_REQD'
19872 ,p_token1 => 'PROJECT_NAME'
19873 ,p_value1 => l_project_in_rec.pm_project_reference
19874 ,p_token2 => 'CUSTOMER_ID'
19875 ,p_value2 => p_customers_in(i).customer_id
19876 ,p_token3 => 'CONTACT_ID'
19877 ,p_value3 => p_customers_in(i).CONTACT_ID
19878 );
19879 END IF;
19880 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19881 p_return_status := FND_API.G_RET_STS_ERROR;
19882 RAISE FND_API.G_EXC_ERROR;
19883 END IF;
19884 end if;
19885 If p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
19886 l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
19887 l_ship_to_contact_id := NULL; -- Bug 5622539
19888 ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
19889 l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
19890 l_bill_to_contact_id := NULL; -- Bug 5622539
19891 Else
19892 l_bill_to_contact_id := NULL;
19893 l_ship_to_contact_id := NULL;
19894 End If;
19895 /** end of chnages for tracking bug by aditi **/
19896 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
19897 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
19898 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
19899
19900 /* Start of changes for bug 5482997 */
19901
19902 IF l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19903 l_bill_to_customer_id := NULL;
19904 END IF;
19905
19906 IF l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19907 l_ship_to_customer_id := NULL;
19908 END IF;
19909
19910 /* End of changes for bug 5482997 */
19911
19912
19913 pa_customer_info.get_customer_info( X_project_ID => l_project_id,
19914 X_Customer_Id => p_customers_in(i).customer_id -- p_project_in.customer_id tracking
19915 ,X_Bill_To_Customer_Id => l_bill_to_customer_id
19916 ,X_Ship_To_Customer_Id => l_ship_to_customer_id
19917 ,X_Bill_To_Address_Id => l_bill_to_address_id
19918 ,X_Ship_To_Address_Id => l_ship_to_address_id
19919 ,X_Bill_To_Contact_Id => l_bill_to_contact_id
19920 ,X_Ship_To_Contact_Id => l_ship_to_contact_id
19921 ,X_Err_Code => l_err_code
19922 ,X_Err_Stage => l_err_stage
19923 ,X_Err_Stack => l_err_stack
19924 ,p_calling_module => 'AMG' --Added for Bug#4770535
19925 );
19926
19927 ----dbms_output.put_line('After calling pa_customer_info.get_customer_info'||l_err_code);
19928 --dbms_output.put_line('Value of l_bill_to_address_id '||l_bill_to_address_id);
19929 --dbms_output.put_line('Value of l_ship_to_address_id '||l_ship_to_address_id);
19930
19931 -- For this API,error code 10 is a warning.Anything above 10 is an error
19932 IF l_err_code > 10
19933 THEN
19934
19935 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19936 THEN
19937
19938 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
19939 THEN
19940 pa_interface_utils_pub.map_new_amg_msg
19941 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19942 ,p_msg_attribute => 'CHANGE'
19943 ,p_resize_flag => 'Y'
19944 ,p_msg_context => 'PROJ'
19945 ,p_attribute1 => l_project_in_rec.pm_project_reference
19946 ,p_attribute2 => ''
19947 ,p_attribute3 => ''
19948 ,p_attribute4 => ''
19949 ,p_attribute5 => '');
19950 ELSE
19951 pa_interface_utils_pub.map_new_amg_msg
19952 ( p_old_message_code => l_err_stage
19953 ,p_msg_attribute => 'CHANGE'
19954 ,p_resize_flag => 'Y'
19955 ,p_msg_context => 'PROJ'
19956 ,p_attribute1 => l_project_in_rec.pm_project_reference
19957 ,p_attribute2 => ''
19958 ,p_attribute3 => ''
19959 ,p_attribute4 => ''
19960 ,p_attribute5 => '');
19961 END IF;
19962
19963 END IF;
19964
19965 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19966 RAISE FND_API.G_EXC_ERROR;
19967
19968 ELSIF l_err_code < 0
19969 THEN
19970
19971 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
19972 THEN
19973 pa_interface_utils_pub.map_new_amg_msg
19974 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19975 ,p_msg_attribute => 'CHANGE'
19976 ,p_resize_flag => 'Y'
19977 ,p_msg_context => 'PROJ'
19978 ,p_attribute1 => l_project_in_rec.pm_project_reference
19979 ,p_attribute2 => ''
19980 ,p_attribute3 => ''
19981 ,p_attribute4 => ''
19982 ,p_attribute5 => '');
19983 END IF;
19984
19985 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19986 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19987 END IF;
19988
19989 /* Update the project customer information */
19990 /* The code below is also redundant for a new customer
19991 Update Pa_project_customers
19992 Set bill_to_customer_id=l_bill_to_customer_id,
19993 ship_to_customer_id=l_ship_to_customer_id,
19994 Bill_To_Address_Id =l_bill_to_address_id,
19995 Ship_to_address_id =l_ship_to_address_id
19996 where project_id=l_project_id
19997 and customer_id=p_project_in.customer_id;
19998
19999 If p_project_in.bill_to_customer_id is not null and p_project_in.bill_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20000 Delete pa_project_contacts
20001 where Project_Id=l_project_id
20002 and customer_id=p_project_in.customer_id
20003 and Project_Contact_Type_Code='BILLING';
20004
20005 end if;
20006
20007 If p_project_in.ship_to_customer_id is not null and p_project_in.ship_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20008 Delete pa_project_contacts
20009 where Project_Id=l_project_id
20010 and customer_id=p_project_in.customer_id
20011 and Project_Contact_Type_Code='SHIPPING';
20012
20013 end if; END of COmmented Code for tracking */
20014 /* Added the call to PA_CUSTOMERS_CONTACTS_PUB.CREATE_PROJECT_CUSTOMER so that
20015 the validations done at form level are also done when customer is created via AMG API */
20016 ----dbms_output.put_line('Before calling CREATE_PROJECT_CUSTOMER');
20017 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
20018 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
20019
20020
20021
20022 -- bug 5554475
20023
20024 l_ALLOW_INV_USER_RATE_FLAG := p_customers_in(i).ALLOW_INV_USER_RATE_TYPE_FLAG ;
20025 l_INV_RATE_DATE := p_customers_in(i).INV_RATE_DATE ;
20026 l_INV_RATE_TYPE := p_customers_in(i).INV_RATE_TYPE;
20027 l_INV_CURRENCY_CODE := p_customers_in(i).INV_CURRENCY_CODE ;
20028 l_INV_EXCHANGE_RATE := p_customers_in(i).INV_EXCHANGE_RATE ;
20029
20030
20031
20032 If l_ALLOW_INV_USER_RATE_FLAG = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR or l_ALLOW_INV_USER_RATE_FLAG IS NULL then
20033 l_ALLOW_INV_USER_RATE_FLAG := 'N';
20034 end if;
20035
20036
20037
20038 if l_INV_RATE_TYPE is not null and l_INV_RATE_TYPE <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20039
20040 begin
20041 l_USER_INV_RATE_TYPE:=l_INV_RATE_TYPE;
20042 select conversion_type into l_INV_RATE_TYPE
20043 from pa_conversion_types_v
20044 where user_conversion_type=l_USER_INV_RATE_TYPE;
20045 exception when no_data_found then
20046 l_INV_RATE_TYPE :=null;
20047 end;
20048 end if;
20049
20050 Select pt.CC_PRVDR_FLAG,pa.multi_currency_billing_flag
20051 into l_cc_prvdr_flag,l_mcb_flag
20052 From pa_project_types pt, pa_projects pa
20053 where pa.project_type=pt.project_type AND
20054 pt.org_id = pa.org_id and
20055 pa.project_id=l_project_id;
20056
20057 If l_INV_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20058 if l_mcb_flag = 'Y' or l_cc_prvdr_flag ='Y' then
20059 OPEN cur_pa_impl;
20060 FETCH cur_pa_impl INTO l_inv_rate_type;
20061 CLOSE cur_pa_impl;
20062 end if;
20063 END if;
20064
20065 if l_mcb_flag = 'N' and l_cc_prvdr_flag ='N' then
20066 l_inv_rate_type := null;
20067 l_ALLOW_INV_USER_RATE_FLAG := 'N';
20068 l_INV_EXCHANGE_RATE :=null;
20069 l_INV_RATE_DATE :=null;
20070 end if;
20071
20072 If l_INV_CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20073 l_INV_CURRENCY_CODE :=l_project_rec.PROJECT_CURRENCY_CODE;
20074 END if;
20075
20076
20077 If l_INV_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
20078 l_INV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
20079 END if;
20080
20081 If l_INV_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
20082 l_INV_RATE_DATE := FND_API.G_MISS_DATE;
20083 END if;
20084
20085 --bug#5554475
20086
20087 -- Bug 5622539
20088 l_default_top_task_cust_flag := p_customers_in(i).enable_top_task_cust_flag;
20089
20090 /*
20091 If l_default_top_task_cust_flag is null or
20092 l_default_top_task_cust_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20093 l_default_top_task_cust_flag := 'N';
20094 end if;
20095 */
20096 -- Bug 5622539
20097 If l_default_top_task_cust_flag <> 'Y' then
20098 l_default_top_task_cust_flag := 'N';
20099 end if;
20100
20101 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20102 (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
20103 l_default_top_task_cust_flag:='N';
20104 else
20105 l_CUSTOMER_BILL_SPLIT:=null;
20106 end if;
20107 -- Bug 5622539
20108
20109 PA_CUSTOMERS_CONTACTS_PUB.CREATE_PROJECT_CUSTOMER(
20110 P_API_VERSION => 1.0
20111 , P_INIT_MSG_LIST => 'T'
20112 , P_COMMIT => 'F'
20113 , P_VALIDATE_ONLY => 'F'
20114 , P_VALIDATION_LEVEL => 100
20115 , P_CALLING_MODULE => 'AMG'
20116 , P_DEBUG_MODE => 'N'
20117 , P_MAX_MSG_COUNT => 100
20118 , P_PROJECT_ID => l_project_id
20119 , P_CUSTOMER_ID => p_customers_in(i).customer_id
20120 , P_CUSTOMER_NAME => NULL
20121 , P_CUSTOMER_NUMBER => NULL
20122 , P_PROJECT_RELATIONSHIP_CODE=> p_customers_in(i).PROJECT_RELATIONSHIP_CODE
20123 , P_CUSTOMER_BILL_SPLIT => l_CUSTOMER_BILL_SPLIT -- p_customers_in(i).CUSTOMER_BILL_SPLIT: Bug 5622539
20124 , P_BILL_TO_CUSTOMER_ID => l_bill_to_customer_id
20125 , P_SHIP_TO_CUSTOMER_ID => l_ship_to_customer_id
20126 , P_BILL_TO_ADDRESS_ID => l_bill_to_address_id
20127 , P_SHIP_TO_ADDRESS_ID => l_ship_to_address_id
20128 ,p_bill_to_customer_name => null
20129 ,p_bill_to_customer_number => null
20130 ,p_ship_to_customer_name => null
20131 ,p_ship_to_customer_number => null
20132 , P_BILL_SITE_NAME => NULL
20133 , P_WORK_SITE_NAME => NULL
20134 , P_INV_CURRENCY_CODE => l_INV_CURRENCY_CODE --bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE
20135 , P_INV_RATE_TYPE => l_INV_RATE_TYPE --bug 5554475
20136 , P_INV_RATE_DATE => l_INV_RATE_DATE --bug 5554475
20137 , P_INV_EXCHANGE_RATE => l_INV_EXCHANGE_RATE --bug 5554475
20138 , P_ALLOW_USER_RATE_TYPE_FLAG=> l_ALLOW_INV_USER_RATE_FLAG --bug 5554475
20139 , P_RECEIVER_TASK_ID => null
20140 , X_CUSTOMER_ID => l_customer_id
20141 , X_RETURN_STATUS => x_return_status
20142 , X_MSG_COUNT => x_msg_count
20143 , X_MSG_DATA => x_msg_data
20144 --Added for FP.M changes to project billing setup. Tracking bug 3279981
20145 , p_default_top_task_cust_flag => l_default_top_task_cust_flag
20146 --, p_en_top_task_cust_flag => 'N' This flag is mandatory only if calling context id forms
20147 );
20148
20149 --uncommented and modified the below for Bug#5554475
20150
20151 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
20152 x_msg_count := FND_MSG_PUB.count_msg;
20153 if x_msg_count = 1 then
20154 PA_INTERFACE_UTILS_PUB.get_messages
20155 (p_encoded => FND_API.G_FALSE,
20156 p_msg_index => 1,
20157 p_msg_count => x_msg_count,
20158 p_msg_data => x_msg_data,
20159 p_data => x_msg_data,
20160 p_msg_index_out => l_msg_index_out);
20161
20162 end if;
20163 If x_return_status = FND_API.G_RET_STS_ERROR THEN
20164 p_project_out.return_status := x_return_status;
20165 RAISE FND_API.G_EXC_ERROR;
20166 ELSE
20167 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20168 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20169 END if;
20170
20171 end if;
20172
20173 --Bug#5554475
20174
20175 ----dbms_output.put_line('After calling CREATE_PROJECT_CUSTOMER x_return_status X_MSG_DATA'||x_return_status||'e'||X_MSG_DATA);
20176
20177 /* call to create_customer_contacts added for tracking bug by aditi */
20178 pa_customer_info.Create_Customer_Contacts
20179 ( X_Project_Id => l_project_id,
20180 X_Customer_Id => p_customers_in(i).customer_id,
20181 X_Project_Relation_Code => p_customers_in(i).project_relationship_code,
20182 X_Customer_Bill_Split => p_customers_in(i).customer_bill_split,
20183 X_Bill_To_Customer_Id => l_bill_to_customer_id,
20184 X_Ship_To_Customer_Id => l_ship_to_customer_id,
20185 X_Bill_To_Address_Id => l_bill_to_address_id,
20186 X_Ship_To_Address_Id => l_ship_to_address_id,
20187 X_Bill_To_Contact_Id => l_bill_to_contact_id,
20188 X_Ship_To_Contact_Id => l_ship_to_contact_id,
20189 X_Inv_Currency_Code => l_INV_CURRENCY_CODE, --bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE,
20190 X_Inv_Rate_Type => l_INV_RATE_TYPE, --bug 5554475
20191 X_Inv_Rate_Date => l_INV_RATE_DATE, --bug 5554475
20192 X_Inv_Exchange_Rate => l_INV_EXCHANGE_RATE, --bug 5554475
20193 X_Allow_Inv_Rate_Type_Fg => l_ALLOW_INV_USER_RATE_FLAG, --bug 5554475
20194 X_Bill_Another_Project_Fg => l_bill_another_project_flag, -- Added for 4153629
20195 X_Receiver_Task_Id => l_receiver_task_id , -- Added for 4153629
20196 X_User => FND_GLOBAL.USER_ID,
20197 X_Login => FND_GLOBAL.LOGIN_ID,
20198 X_Err_Code => l_err_code,
20199 X_Err_Stage => l_err_stage,
20200 X_Err_Stack => l_err_stack
20201 );
20202 ----dbms_output.put_line('value of l_err_code'||l_err_code);
20203 /* call to create_customer_contacts added for tracking bug by aditi */
20204 IF l_err_code > 0
20205 THEN
20206
20207 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20208 THEN
20209
20210 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20211 THEN
20212 pa_interface_utils_pub.map_new_amg_msg
20213 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20214 ,p_msg_attribute => 'CHANGE'
20215 ,p_resize_flag => 'N'
20216 ,p_msg_context => 'PROJ'
20217 ,p_attribute1 => l_project_in_rec.pm_project_reference
20218 ,p_attribute2 => ''
20219 ,p_attribute3 => ''
20220 ,p_attribute4 => ''
20221 ,p_attribute5 => '');
20222 ELSE
20223 pa_interface_utils_pub.map_new_amg_msg
20224 ( p_old_message_code => l_err_stage
20225 ,p_msg_attribute => 'CHANGE'
20226 ,p_resize_flag => 'N'
20227 ,p_msg_context => 'PROJ'
20228 ,p_attribute1 => l_project_in_rec.pm_project_reference
20229 ,p_attribute2 => ''
20230 ,p_attribute3 => ''
20231 ,p_attribute4 => ''
20232 ,p_attribute5 => '');
20233 END IF;
20234
20235 END IF;
20236
20237 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20238 RAISE FND_API.G_EXC_ERROR;
20239
20240 ELSIF l_err_code < 0
20241 THEN
20242
20243 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20244 THEN
20245 pa_interface_utils_pub.map_new_amg_msg
20246 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20247 ,p_msg_attribute => 'CHANGE'
20248 ,p_resize_flag => 'N'
20249 ,p_msg_context => 'PROJ'
20250 ,p_attribute1 => l_project_in_rec.pm_project_reference
20251 ,p_attribute2 => ''
20252 ,p_attribute3 => ''
20253 ,p_attribute4 => ''
20254 ,p_attribute5 => '');
20255 END IF;
20256
20257 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20258 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20259 END IF;
20260
20261 END IF ; --IF p_customers_in(i).customer_id IS NOT NULL
20262 Else --If Cur_Customer%NOTFOUND
20263 /* Its its an existing customer */
20264 CLOSE Cur_Customer;
20265 /* Code copied and pasted below */
20266
20267 --dbms_output.put_line('Customer is existing in the databse ');
20268 l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
20269 l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
20270 --added for bug 3911782
20271 l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
20272 l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
20273 /* added these two assignments */
20274 l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
20275 l_customer_bill_split := p_customers_in(i).Customer_Bill_Split;
20276 l_bill_another_project_flag := p_customers_in(i).bill_another_project_flag;
20277 l_receiver_task_id := p_customers_in(i).receiver_task_id;
20278 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
20279 If (p_customers_in(i).bill_to_customer_id is null or p_customers_in(i).bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20280 and Cur_Customer_rec.bill_to_customer_id is not null Then
20281 l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
20282 --changes for bug 3911782
20283 If (p_customers_in(i).bill_to_address_id is null or p_customers_in(i).bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20284 and Cur_Customer_rec.bill_to_address_id is not null Then
20285 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20286 End if;
20287 Else
20288 If (p_customers_in(i).bill_to_address_id is null or p_customers_in(i).bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20289 and Cur_Customer_rec.bill_to_address_id is not null Then
20290 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20291 End if;
20292 --changes end for bug 3911782
20293 end if;
20294
20295 If (p_customers_in(i).ship_to_customer_id is null or p_customers_in(i).ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20296 and Cur_Customer_rec.ship_to_customer_id is not null Then
20297 l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
20298 --changes for bug 3911782
20299 If (p_customers_in(i).ship_to_address_id is null or p_customers_in(i).ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20300 and Cur_Customer_rec.ship_to_address_id is not null Then
20301 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20302 End if;
20303 Else
20304 If (p_customers_in(i).ship_to_address_id is null or p_customers_in(i).ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20305 and Cur_Customer_rec.ship_to_address_id is not null Then
20306 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20307 End if;
20308 --changes end for bug 3911782
20309 end if;
20310 /* New code added FOR tracking bug */
20311 If (p_customers_in(i).PROJECT_RELATIONSHIP_CODE is null or p_customers_in(i).PROJECT_RELATIONSHIP_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
20312 and Cur_Customer_rec.PROJECT_RELATIONSHIP_CODE is not null Then
20313 l_project_relationship_code := Cur_Customer_rec.PROJECT_RELATIONSHIP_CODE;
20314 end if;
20315
20316 -- Bug 7255015
20317 If (p_customers_in(i).Customer_Bill_Split is null or p_customers_in(i).Customer_Bill_Split = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) Then
20318 IF Cur_Customer_rec.Customer_Bill_Split is not null THEN
20319 l_customer_bill_split := Cur_Customer_rec.Customer_Bill_Split;
20320 END IF;
20321 Else
20322 If (pa_customer_info.revenue_accrued_or_billed(l_project_id)) then
20323 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20324 THEN
20325 pa_utils.add_message
20326 ( p_app_short_name => 'PA'-- new message for bug 3326468
20327 ,p_msg_name => 'PA_UPD_CUST_NOT_ALLOWED'
20328 ,p_token1 => 'PROJECT_NAME'
20329 ,p_value1 => l_project_id
20330 ,p_token2 => 'CUSTOMER_ID'
20331 ,p_value2 => p_customers_in(i).customer_id
20332 );
20333 END IF;
20334 RAISE FND_API.G_EXC_ERROR;
20335 END IF;
20336 end if;
20337 --dbms_output..put_line('Value of p_customers_in(i).bill_another_project_flag'||p_customers_in(i).bill_another_project_flag);
20338 --dbms_output..put_line('Value of p_customers_in(i).receiver_task_id'||p_customers_in(i).receiver_task_id);
20339 /* Code added for tracking bug 4153629*/
20340 If (p_customers_in(i).bill_another_project_flag is null or p_customers_in(i).bill_another_project_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
20341 and Cur_Customer_rec.bill_another_project_flag is not null Then
20342 l_bill_another_project_flag := Cur_Customer_rec.bill_another_project_flag;
20343 If (p_customers_in(i).receiver_task_id is null or p_customers_in(i).receiver_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
20344 --Bug#5554578
20345 IF Cur_Customer_rec.receiver_task_id is not null Then
20346
20347 l_receiver_task_id := Cur_Customer_rec.receiver_task_id;
20348 END IF;
20349 Else /* Some value of passed for receiver_task_id */
20350 If l_bill_another_project_flag = 'N' Then
20351 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20352 THEN
20353 pa_utils.add_message
20354 ( p_app_short_name => 'PA'-- new message for bug 4153629
20355 ,p_msg_name => 'PA_UPD_RCVR_TSK_NOT_ALLOWED'
20356 ,p_token1 => 'PROJECT_NAME'
20357 ,p_value1 => l_project_id
20358 ,p_token2 => 'CUSTOMER_ID'
20359 ,p_value2 => p_customers_in(i).customer_id
20360 );
20361 END IF;
20362 RAISE FND_API.G_EXC_ERROR;
20363 ELSE /* l_bill_another_project_flag = 'Y' */
20364 l_receiver_task_id := p_customers_in(i).receiver_task_id;
20365 PA_CUSTOMER_INFO.CHECK_RECEIVER_PROJ_ENTERABLE
20366 (p_project_id => l_project_id
20367 ,p_customer_id => p_customers_in(i).customer_id
20368 ,p_receiver_task_id => l_receiver_task_id
20369 ,x_bill_another_project_flag => l_bill_another_project_flag
20370 ,x_return_status => x_return_status
20371 ,x_error_msg_code => l_error_msg_code
20372 );
20373 --dbms_output..put_line('value of l_bill_another_project_flag'||l_bill_another_project_flag);
20374 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
20375 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20376 p_msg_name => l_error_msg_code
20377 ,p_token1 => 'PROJECT_NAME'
20378 ,p_value1 => l_project_id
20379 ,p_token2 => 'CUSTOMER_ID'
20380 ,p_value2 => p_customers_in(i).customer_id
20381 );
20382 RAISE FND_API.G_EXC_ERROR;
20383 END if; -- <l_return_status <> FND_API.G_RET_STS_SUCCESS>
20384 end if; -- l_bill_another_project_flag = 'N'
20385 End If; --p_customers_in(i).receiver_task_id is null
20386 Else /* Some value is passed for p_customers_in(i).bill_another_project_flag*/
20387 /* This means that the status is being flipped */
20388 If (p_customers_in(i).receiver_task_id is null or p_customers_in(i).receiver_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
20389 --Bug#5554578
20390 IF Cur_Customer_rec.receiver_task_id is not null Then
20391
20392 l_receiver_task_id := Cur_Customer_rec.receiver_task_id;
20393 END IF;
20394 Else /* Some value of passed for receiver_task_id */
20395 If l_bill_another_project_flag = 'N' Then
20396 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20397 THEN
20398 pa_utils.add_message
20399 ( p_app_short_name => 'PA'-- new message for bug 4153629
20400 ,p_msg_name => 'PA_UPD_RCVR_TSK_NOT_ALLOWED'
20401 ,p_token1 => 'PROJECT_NAME'
20402 ,p_value1 => l_project_id
20403 ,p_token2 => 'CUSTOMER_ID'
20404 ,p_value2 => p_customers_in(i).customer_id
20405 );
20406 END IF;
20407 RAISE FND_API.G_EXC_ERROR;
20408 ELSE /* l_bill_another_project_flag = 'Y' */
20409 l_receiver_task_id := p_customers_in(i).receiver_task_id;
20410 PA_CUSTOMER_INFO.CHECK_RECEIVER_PROJ_ENTERABLE
20411 (p_project_id => l_project_id
20412 ,p_customer_id => p_customers_in(i).customer_id
20413 ,p_receiver_task_id => l_receiver_task_id
20414 ,x_bill_another_project_flag => l_bill_another_project_flag
20415 ,x_return_status => x_return_status
20416 ,x_error_msg_code => l_error_msg_code
20417 );
20418 --dbms_output..put_line('value of l_bill_another_project_flag'||l_bill_another_project_flag);
20419
20420 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
20421 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20422 p_msg_name => l_error_msg_code
20423 ,p_token1 => 'PROJECT_NAME'
20424 ,p_value1 => l_project_id
20425 ,p_token2 => 'CUSTOMER_ID'
20426 ,p_value2 => p_customers_in(i).customer_id
20427 );
20428 RAISE FND_API.G_EXC_ERROR;
20429 END if; -- <l_return_status <> FND_API.G_RET_STS_SUCCESS>
20430 END IF;/* l_bill_another_project_flag = 'N' */
20431 End If;
20432 End if;
20433
20434 /* Changed end for tracking bug by aditi */
20435 /* End of Code changesfor tracking bug 4153629*/
20436
20437 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
20438 p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
20439 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20440 p_customers_in(i).customer_id <> l_bill_to_customer_id
20441 ) or
20442 (
20443 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20444 p_customers_in(i).customer_id <> l_ship_to_customer_id
20445 ))
20446 THEN
20447 pa_interface_utils_pub.map_new_amg_msg
20448 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
20449 ,p_msg_attribute => 'CHANGE'
20450 ,p_resize_flag => 'Y'
20451 ,p_msg_context => 'PROJ'
20452 ,p_attribute1 => l_project_in_rec.pm_project_reference
20453 ,p_attribute2 => ''
20454 ,p_attribute3 => ''
20455 ,p_attribute4 => ''
20456 ,p_attribute5 => '');
20457 RAISE FND_API.G_EXC_ERROR;
20458 END IF;
20459 /** changes begin for tracking bug by aditi **/
20460
20461 ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
20462 If (p_customers_in(i).CONTACT_ID IS NOT NULL) AND (p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20463 then
20464
20465
20466 IF (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE IS NULL) OR (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )THEN
20467 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20468 THEN
20469 pa_utils.add_message
20470 ( p_app_short_name => 'PA'-- existing message for tracking bug
20471 ,p_msg_name => 'PA_CONTACT_TYPE_REQD'
20472 ,p_token1 => 'PROJECT_NAME'
20473 ,p_value1 => l_project_in_rec.pm_project_reference
20474 ,p_token2 => 'CUSTOMER_ID'
20475 ,p_value2 => p_customers_in(i).customer_id
20476 ,p_token3 => 'CONTACT_ID'
20477 ,p_value3 => p_customers_in(i).CONTACT_ID
20478 );
20479 END IF;
20480 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20481 p_return_status := FND_API.G_RET_STS_ERROR;
20482 RAISE FND_API.G_EXC_ERROR;
20483 END IF;
20484 end if;
20485
20486 If p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
20487 l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
20488 l_ship_to_contact_id := NULL; -- Bug 5622539
20489 ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
20490 l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
20491 l_bill_to_contact_id := NULL; -- Bug 5622539
20492 Else
20493 --null;
20494 l_bill_to_contact_id := NULL;
20495 l_ship_to_contact_id := NULL;
20496 End If;
20497
20498 /** end of chnages for tracking bug by aditi **/
20499
20500 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
20501 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
20502 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
20503
20504 pa_customer_info.get_customer_info( X_project_ID => l_project_id
20505 ,X_Customer_Id => p_customers_in(i).customer_id
20506 ,X_Bill_To_Customer_Id => l_bill_to_customer_id
20507 ,X_Ship_To_Customer_Id => l_ship_to_customer_id
20508 ,X_Bill_To_Address_Id => l_bill_to_address_id
20509 ,X_Ship_To_Address_Id => l_ship_to_address_id
20510 ,X_Bill_To_Contact_Id => l_bill_to_contact_id
20511 ,X_Ship_To_Contact_Id => l_ship_to_contact_id
20512 ,X_Err_Code => l_err_code
20513 ,X_Err_Stage => l_err_stage
20514 ,X_Err_Stack => l_err_stack
20515 ,p_calling_module => 'AMG' --added for bug#4770535
20516 );
20517
20518 ----dbms_output.put_line('After calling pa_customer_info.get_customer_info'||l_err_code);
20519
20520
20521 -- For this API,error code 10 is a warning.Anything above 10 is an error
20522 IF l_err_code > 10
20523 THEN
20524
20525 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20526 THEN
20527
20528 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20529 THEN
20530 pa_interface_utils_pub.map_new_amg_msg
20531 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20532 ,p_msg_attribute => 'CHANGE'
20533 ,p_resize_flag => 'Y'
20534 ,p_msg_context => 'PROJ'
20535 ,p_attribute1 => l_project_in_rec.pm_project_reference
20536 ,p_attribute2 => ''
20537 ,p_attribute3 => ''
20538 ,p_attribute4 => ''
20539 ,p_attribute5 => '');
20540 ELSE
20541 pa_interface_utils_pub.map_new_amg_msg
20542 ( p_old_message_code => l_err_stage
20543 ,p_msg_attribute => 'CHANGE'
20544 ,p_resize_flag => 'Y'
20545 ,p_msg_context => 'PROJ'
20546 ,p_attribute1 => l_project_in_rec.pm_project_reference
20547 ,p_attribute2 => ''
20548 ,p_attribute3 => ''
20549 ,p_attribute4 => ''
20550 ,p_attribute5 => '');
20551 END IF;
20552
20553 END IF;
20554
20555 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20556 RAISE FND_API.G_EXC_ERROR;
20557
20558 ELSIF l_err_code < 0
20559 THEN
20560
20561 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20562 THEN
20563 pa_interface_utils_pub.map_new_amg_msg
20564 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20565 ,p_msg_attribute => 'CHANGE'
20566 ,p_resize_flag => 'Y'
20567 ,p_msg_context => 'PROJ'
20568 ,p_attribute1 => l_project_in_rec.pm_project_reference
20569 ,p_attribute2 => ''
20570 ,p_attribute3 => ''
20571 ,p_attribute4 => ''
20572 ,p_attribute5 => '');
20573 END IF;
20574
20575 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20576 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20577 END IF;
20578
20579 /* Update the project customer information */
20580
20581 Update Pa_project_customers
20582 Set bill_to_customer_id=l_bill_to_customer_id,
20583 ship_to_customer_id=l_ship_to_customer_id,
20584 Bill_To_Address_Id =l_bill_to_address_id,
20585 Ship_to_address_id =l_ship_to_address_id
20586 where project_id=l_project_id
20587 and customer_id=p_customers_in(i).customer_id;
20588
20589 If p_customers_in(i).bill_to_customer_id is not null and p_customers_in(i).bill_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20590 Delete pa_project_contacts
20591 where Project_Id=l_project_id
20592 and customer_id=p_customers_in(i).customer_id
20593 and Project_Contact_Type_Code='BILLING';
20594
20595 end if;
20596
20597 If p_customers_in(i).ship_to_customer_id is not null and p_customers_in(i).ship_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20598 Delete pa_project_contacts
20599 where Project_Id=l_project_id
20600 and customer_id=p_customers_in(i).customer_id
20601 and Project_Contact_Type_Code='SHIPPING';
20602
20603 end if;
20604 ----dbms_output.put_line('before calling UPDATE_PROJECT_CUSTOMER');
20605 ----dbms_output.put_line('Value of p_customers_in(i).PROJECT_RELATIONSHIP_CODE'||p_customers_in(i).PROJECT_RELATIONSHIP_CODE);
20606 ----dbms_output.put_line('Value of l_bill_to_customer_id after '||l_bill_to_customer_id);
20607 ----dbms_output.put_line('Value of l_bill_to_address_id after '||l_bill_to_address_id);
20608 ----dbms_output.put_line('Value of l_ship_to_address_id after '||l_ship_to_address_id);
20609 ----dbms_output.put_line('Value of l_ship_to_customer_id after '||l_ship_to_customer_id);
20610
20611
20612
20613 -- Start of addition for bug 5554475
20614 l_ALLOW_INV_USER_RATE_FLAG := p_customers_in(i).ALLOW_INV_USER_RATE_TYPE_FLAG ;
20615 l_INV_RATE_DATE := p_customers_in(i).INV_RATE_DATE ;
20616 l_INV_RATE_TYPE := p_customers_in(i).INV_RATE_TYPE;
20617 l_INV_CURRENCY_CODE := p_customers_in(i).INV_CURRENCY_CODE ;
20618 l_INV_EXCHANGE_RATE := p_customers_in(i).INV_EXCHANGE_RATE ;
20619
20620 If l_ALLOW_INV_USER_RATE_FLAG = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20621
20622 l_ALLOW_INV_USER_RATE_FLAG := cur_customer_rec.ALLOW_INV_USER_RATE_TYPE_FLAG;
20623 END if;
20624
20625 If l_ALLOW_INV_USER_RATE_FLAG IS NULL then
20626 l_ALLOW_INV_USER_RATE_FLAG := 'N';
20627 end if;
20628
20629 if l_INV_RATE_TYPE is not null and l_INV_RATE_TYPE <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20630 begin
20631 l_USER_INV_RATE_TYPE:=l_INV_RATE_TYPE;
20632 select conversion_type into l_INV_RATE_TYPE
20633 from pa_conversion_types_v
20634 where user_conversion_type=l_USER_INV_RATE_TYPE;
20635 exception when no_data_found then
20636 l_INV_RATE_TYPE:=null;
20637 end;
20638 end if;
20639
20640 If l_INV_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20641 l_INV_RATE_TYPE := cur_customer_rec.INV_RATE_TYPE;
20642 END if;
20643
20644 Select pt.CC_PRVDR_FLAG,pa.multi_currency_billing_flag
20645 into l_cc_prvdr_flag,l_mcb_flag
20646 From pa_project_types pt, pa_projects pa
20647 where pa.project_type=pt.project_type
20648 AND pa.org_id = pt.org_id
20649 and pa.project_id=l_project_id;
20650
20651 if l_mcb_flag = 'N' and l_cc_prvdr_flag ='N' then
20652 l_inv_rate_type := null;
20653 l_ALLOW_INV_USER_RATE_FLAG := 'N';
20654 l_INV_EXCHANGE_RATE :=null;
20655 l_INV_RATE_DATE :=null;
20656 end if;
20657
20658 If l_INV_CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20659 l_INV_CURRENCY_CODE := cur_customer_rec.INV_CURRENCY_CODE;
20660 END if;
20661
20662 If l_INV_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
20663 l_INV_EXCHANGE_RATE := cur_customer_rec.INV_EXCHANGE_RATE;
20664 END if;
20665
20666 If l_INV_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
20667 l_INV_RATE_DATE := cur_customer_rec.INV_RATE_DATE;
20668 END if;
20669 -- End of addition for bug 5554475
20670
20671
20672 --bug 5554578
20673
20674 l_default_top_task_cust_flag := cur_customer_rec.default_top_task_cust_flag;
20675
20676 --bug 5554578
20677
20678 --bug# 5554475
20679 IF l_bill_another_project_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_bill_another_project_flag IS NULL THEN
20680 l_bill_another_project_flag := cur_customer_rec.bill_another_project_flag;
20681 END IF;
20682
20683 IF l_receiver_task_id= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR l_receiver_task_id IS NULL THEN
20684 l_receiver_task_id := cur_customer_rec.receiver_task_id;
20685 END IF;
20686
20687 --bug# 5554475
20688
20689 -- Bug 5622539
20690 If l_default_top_task_cust_flag <> 'Y' then
20691 l_default_top_task_cust_flag := 'N';
20692 end if;
20693
20694 -- Bug 5622539
20695 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20696 (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
20697 l_default_top_task_cust_flag:='N';
20698 else
20699 l_CUSTOMER_BILL_SPLIT:=null;
20700 end if;
20701 -- Bug 5622539
20702
20703
20704 /* adding call to PA_CUSTOMERS_CONTACTS_PUB.UPDATE_PROJECT_CUSTOMER */
20705 PA_CUSTOMERS_CONTACTS_PUB.UPDATE_PROJECT_CUSTOMER(
20706 P_API_VERSION => 1.0
20707 , P_INIT_MSG_LIST => 'T'
20708 , P_COMMIT => 'F'
20709 , P_VALIDATE_ONLY => 'F'
20710 , P_VALIDATION_LEVEL => 100
20711 , P_CALLING_MODULE => 'AMG'
20712 , P_DEBUG_MODE => 'N'
20713 , P_MAX_MSG_COUNT => 100
20714 , P_PROJECT_ID => l_project_id
20715 , P_CUSTOMER_ID => p_customers_in(i).customer_id
20716 /* , P_PROJECT_RELATIONSHIP_CODE=> p_customers_in(i).PROJECT_RELATIONSHIP_CODE
20717 , P_CUSTOMER_BILL_SPLIT => p_customers_in(i).CUSTOMER_BILL_SPLIT */
20718 , P_PROJECT_RELATIONSHIP_CODE => l_PROJECT_RELATIONSHIP_CODE
20719 , P_CUSTOMER_BILL_SPLIT => l_CUSTOMER_BILL_SPLIT
20720 , P_BILL_TO_CUSTOMER_ID => l_bill_to_customer_id
20721 , P_SHIP_TO_CUSTOMER_ID => l_ship_to_customer_id
20722 , P_BILL_TO_ADDRESS_ID => l_bill_to_address_id
20723 , P_SHIP_TO_ADDRESS_ID => l_ship_to_address_id
20724 ,p_bill_to_customer_name => NULL
20725 ,p_bill_to_customer_number => NULL
20726 ,p_ship_to_customer_name => NULL
20727 ,p_ship_to_customer_number => NULL
20728 , P_BILL_SITE_NAME => NULL
20729 , P_WORK_SITE_NAME => NULL
20730 , P_INV_CURRENCY_CODE => l_INV_CURRENCY_CODE --bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE
20731 , P_INV_RATE_TYPE => l_INV_RATE_TYPE --bug 5554475
20732 , P_INV_RATE_DATE => l_INV_RATE_DATE --bug 5554475
20733 , P_INV_EXCHANGE_RATE => l_INV_EXCHANGE_RATE --bug 5554475
20734 , P_ALLOW_USER_RATE_TYPE_FLAG=> l_ALLOW_INV_USER_RATE_FLAG --bug 5554475
20735 , P_RECEIVER_TASK_ID => l_receiver_task_id -- Added for 4153629
20736 , P_BILL_ANOTHER_PROJECT_FLAG => l_bill_another_project_flag -- Added for 4153629
20737 , P_RECORD_VERSION_NUMBER => Cur_Customer_rec.RECORD_VERSION_NUMBER
20738 , X_RETURN_STATUS => x_return_status
20739 , X_MSG_COUNT => x_msg_count
20740 , X_MSG_DATA => x_msg_data
20741 --Added for FP.M changes to project billing setup. Tracking bug 3279981
20742 , p_default_top_task_cust_flag => l_default_top_task_cust_flag --'N' bug 5554578
20743 --, p_en_top_task_cust_flag => 'N' This flag is mandatory only if calling context id forms
20744 );
20745
20746
20747 -- Start of addition for bug 5554475
20748
20749 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
20750 x_msg_count := FND_MSG_PUB.count_msg;
20751 if x_msg_count = 1 then
20752 PA_INTERFACE_UTILS_PUB.get_messages
20753 (p_encoded => FND_API.G_FALSE,
20754 p_msg_index => 1,
20755 p_msg_count => x_msg_count,
20756 p_msg_data => x_msg_data,
20757 p_data => x_msg_data,
20758 p_msg_index_out => l_msg_index_out);
20759
20760 end if;
20761 If x_return_status = FND_API.G_RET_STS_ERROR THEN
20762 p_project_out.return_status := x_return_status;
20763 RAISE FND_API.G_EXC_ERROR;
20764 else
20765 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20766 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20767 END if;
20768 end if;
20769
20770 -- End of addition for bug 5554475
20771
20772 /* Added Call to pa_customer_info.Create_Customer_Contacts. We only will be adding new contacts.
20773 There are no attrbutes that can be updated in a contact. Hence, the call below will suffice.
20774 It will check if the customer already exists, then Insert into pa_project_customers will
20775 be skipped and data will only be inserted into pa_project_contacts */
20776
20777 pa_customer_info.Create_Customer_Contacts
20778 ( X_Project_Id => l_project_id,
20779 X_Customer_Id => p_customers_in(i).customer_id,
20780 X_Project_Relation_Code => p_customers_in(i).project_relationship_code,
20781 X_Customer_Bill_Split => p_customers_in(i).customer_bill_split,
20782 X_Bill_To_Customer_Id => l_bill_to_customer_id,
20783 X_Ship_To_Customer_Id => l_ship_to_customer_id,
20784 X_Bill_To_Address_Id => l_bill_to_address_id,
20785 X_Ship_To_Address_Id => l_ship_to_address_id,
20786 X_Bill_To_Contact_Id => l_bill_to_contact_id,
20787 X_Ship_To_Contact_Id => l_ship_to_contact_id,
20788 X_Inv_Currency_Code => l_INV_CURRENCY_CODE, -- l_project_rec.PROJECT_CURRENCY_CODE bug 5554475
20789 X_Inv_Rate_Type => l_INV_RATE_TYPE, --bug 5554475
20790 X_Inv_Rate_Date => l_INV_RATE_DATE, --bug 5554475
20791 X_Inv_Exchange_Rate => l_INV_EXCHANGE_RATE, --bug 5554475
20792 X_Allow_Inv_Rate_Type_Fg => l_ALLOW_INV_USER_RATE_FLAG, --bug 5554475
20793 X_Bill_Another_Project_Fg => l_bill_another_project_flag ,-- Added for 4153629,
20794 X_Receiver_Task_Id => l_receiver_task_id, --Added for 4153629
20795 X_User => FND_GLOBAL.USER_ID,
20796 X_Login => FND_GLOBAL.LOGIN_ID,
20797 X_Err_Code => l_err_code,
20798 X_Err_Stage => l_err_stage,
20799 X_Err_Stack => l_err_stack
20800 );
20801 IF l_err_code > 0
20802 THEN
20803
20804 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20805 THEN
20806
20807 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20808 THEN
20809 pa_interface_utils_pub.map_new_amg_msg
20810 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20811 ,p_msg_attribute => 'CHANGE'
20812 ,p_resize_flag => 'N'
20813 ,p_msg_context => 'PROJ'
20814 ,p_attribute1 => l_project_in_rec.pm_project_reference
20815 ,p_attribute2 => ''
20816 ,p_attribute3 => ''
20817 ,p_attribute4 => ''
20818 ,p_attribute5 => '');
20819 ELSE
20820 pa_interface_utils_pub.map_new_amg_msg
20821 ( p_old_message_code => l_err_stage
20822 ,p_msg_attribute => 'CHANGE'
20823 ,p_resize_flag => 'N'
20824 ,p_msg_context => 'PROJ'
20825 ,p_attribute1 => l_project_in_rec.pm_project_reference
20826 ,p_attribute2 => ''
20827 ,p_attribute3 => ''
20828 ,p_attribute4 => ''
20829 ,p_attribute5 => '');
20830 END IF;
20831
20832 END IF;
20833
20834 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20835 RAISE FND_API.G_EXC_ERROR;
20836
20837 ELSIF l_err_code < 0
20838 THEN
20839
20840 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20841 THEN
20842 pa_interface_utils_pub.map_new_amg_msg
20843 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20844 ,p_msg_attribute => 'CHANGE'
20845 ,p_resize_flag => 'N'
20846 ,p_msg_context => 'PROJ'
20847 ,p_attribute1 => l_project_in_rec.pm_project_reference
20848 ,p_attribute2 => ''
20849 ,p_attribute3 => ''
20850 ,p_attribute4 => ''
20851 ,p_attribute5 => '');
20852 END IF;
20853
20854 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20855 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20856 END IF;
20857
20858 END if; /* is cur_customer%notfound */
20859 i := p_customers_in.next(i);
20860 ----dbms_output.put_line('After processing the customer first record');
20861 END LOOP;
20862 END IF; -- IF p_customers_in.exists(i)
20863 ----dbms_output.put_line('After processing the customer first record OUT OF THE LOOP');
20864
20865 -- Bug 5622539
20866 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20867 (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
20868 i := p_customers_in.first;
20869
20870 IF p_customers_in.exists(i)
20871 THEN
20872 tot_contribution := pa_customer_info.check_proj_tot_contribution(l_project_id,l_valid_proj_flag);
20873 IF l_valid_proj_flag THEN
20874 ----dbms_output.put_line('Value of tot_contribution'||tot_contribution);
20875 IF (tot_contribution <> 0 AND tot_contribution <> 100) OR
20876 (tot_contribution <> 100) OR
20877 (tot_contribution > 100 )
20878 theN
20879 /* pa_interface_utils_pub.map_new_amg_msg
20880 ( p_old_message_code => 'PA_TOT_CUST_BILL_SPLIT_INVLD'
20881 ,p_msg_attribute => 'CHANGE'
20882 ,p_resize_flag => 'N'
20883 ,p_msg_context => 'PROJ'
20884 ,p_attribute1 => ''
20885 ,p_attribute2 => ''
20886 ,p_attribute3 => ''
20887 ,p_attribute4 => ''
20888 ,p_attribute5 => ''); */
20889 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
20890 ,p_msg_name => 'PA_TOT_CUST_BILL_SPLIT_INVLD');
20891 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20892 p_return_status := FND_API.G_RET_STS_ERROR;
20893 RAISE FND_API.G_EXC_ERROR;
20894 END IF;
20895 END IF;
20896 END IF;
20897 END IF;
20898
20899 -- Bug 5622539
20900 pa_project_pvt.validate_data(
20901 p_calling_context => 'UPDATE_PROJECT',
20902 p_project_id => l_project_id,
20903 x_msg_count => x_msg_count,
20904 x_msg_data => x_msg_data,
20905 x_return_status => x_return_status
20906 );
20907
20908 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
20909 x_msg_count := FND_MSG_PUB.count_msg;
20910 if x_msg_count = 1 then
20911 PA_INTERFACE_UTILS_PUB.get_messages
20912 (p_encoded => FND_API.G_FALSE,
20913 p_msg_index => 1,
20914 p_msg_count => x_msg_count,
20915 p_msg_data => x_msg_data,
20916 p_data => x_msg_data,
20917 p_msg_index_out => l_msg_index_out);
20918
20919 end if;
20920 If x_return_status = FND_API.G_RET_STS_ERROR THEN
20921 p_project_out.return_status := x_return_status;
20922 RAISE FND_API.G_EXC_ERROR;
20923 else
20924 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20925 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20926 END if;
20927 end if;
20928
20929 /* End of changes by aditi for tracking */
20930
20931 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value
20932 -- using the local variable instead of cursor variable
20933
20934 /** Commented out for bug 5116772
20935 Below code added for bug 3279981. Customer at Top Task in FP_M
20936 /*
20937 --IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 commented
20938 IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_old_cust_top_task_flag THEN -- 4188765 added
20939 --Enabling the customer at top task flag. Thus, we need to set the default top task customer
20940 DECLARE
20941 hghst_ctr_cust_id NUMBER;
20942 hghst_ctr_cust_name VARCHAR2(50);
20943 hghst_ctr_cust_num VARCHAR2(30);
20944
20945 l_return_status VARCHAR2(10);
20946 l_msg_count NUMBER := 0;
20947 l_msg_data VARCHAR2(2000);
20948 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
20949 BEGIN
20950 l_exclude_cust_id_tbl(1) := 0;
20951 --Retrieve the customer to be set as the default top task customer
20952 pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
20953 P_API_VERSION => 1.0
20954 , P_INIT_MSG_LIST => 'T'
20955 , P_COMMIT => 'F'
20956 , P_VALIDATE_ONLY => 'F'
20957 , P_VALIDATION_LEVEL => 100
20958 , P_DEBUG_MODE => 'N'
20959 , p_calling_module => 'AMG'
20960 , p_project_id => l_project_id
20961 , p_exclude_cust_id_tbl => l_exclude_cust_id_tbl
20962 , x_highst_contr_cust_id => hghst_ctr_cust_id
20963 , x_highst_contr_cust_name => hghst_ctr_cust_name
20964 , x_highst_contr_cust_num => hghst_ctr_cust_num
20965 , x_return_status => l_return_status
20966 , x_msg_count => l_msg_count
20967 , x_msg_data => l_msg_data );
20968
20969 IF hghst_ctr_cust_id IS NOT null THEN
20970 --This API call will update pa_project_customers and pa_tasks
20971 pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
20972 P_API_VERSION => 1.0
20973 , P_INIT_MSG_LIST => 'T'
20974 , P_COMMIT => 'F'
20975 , P_VALIDATE_ONLY => 'F'
20976 , P_VALIDATION_LEVEL => 100
20977 , P_DEBUG_MODE => 'N'
20978 , p_calling_module => 'AMG'
20979 , p_mode => 'ENABLE'
20980 , p_project_id => l_project_id
20981 , p_def_top_task_cust => hghst_ctr_cust_id
20982 , p_contr_update_cust => null
20983 , x_return_status => l_return_status
20984 , x_msg_count => l_msg_count
20985 , x_msg_data => l_msg_data );
20986 END IF;
20987 END ;
20988 END IF;
20989 End Commented out for bug 5116772 **/
20990
20991 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value in the above code
20992 -- using the local variable instead of cursor variable
20993
20994 --IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 Commented
20995 /* Commented the Below code for Bug 5622539
20996 IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_old_cust_top_task_flag THEN -- 4188765 Added
20997 --Disabling the customer at top task flag. Thus, we need to set the customer bill split for the project customers
20998 DECLARE
20999 cust_id PA_PROJECT_CUSTOMERS.customer_id%TYPE;
21000 hghst_ctr_cust_id NUMBER;
21001 hghst_ctr_cust_name VARCHAR2(50);
21002 hghst_ctr_cust_num VARCHAR2(30);
21003 num_customers NUMBER := 0;
21004 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
21005
21006 l_return_status VARCHAR2(10);
21007 l_msg_count NUMBER := 0;
21008 l_msg_data VARCHAR2(2000);
21009 CURSOR cur_get_def_top_task_cust IS
21010 SELECT customer_id
21011 FROM pa_project_customers
21012 WHERE project_id = l_project_id
21013 AND default_top_task_cust_flag = 'Y' ;
21014 BEGIN
21015 l_exclude_cust_id_tbl(1) := 0;
21016 --Retrieve the customer to be updated with 100% contribution
21017 pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
21018 P_API_VERSION => 1.0
21019 , P_INIT_MSG_LIST => 'T'
21020 , P_COMMIT => 'F'
21021 , P_VALIDATE_ONLY => 'F'
21022 , P_VALIDATION_LEVEL => 100
21023 , P_DEBUG_MODE => 'N'
21024 , p_calling_module => 'AMG'
21025 , p_project_id => l_project_id
21026 , p_exclude_cust_id_tbl => l_exclude_cust_id_tbl
21027 , x_highst_contr_cust_id => hghst_ctr_cust_id
21028 , x_highst_contr_cust_name => hghst_ctr_cust_name
21029 , x_highst_contr_cust_num => hghst_ctr_cust_num
21030 , x_return_status => l_return_status
21031 , x_msg_count => l_msg_count
21032 , x_msg_data => l_msg_data );
21033 OPEN cur_get_def_top_task_cust;
21034 FETCH cur_get_def_top_task_cust INTO cust_id;
21035 CLOSE cur_get_def_top_task_cust;
21036
21037 IF hghst_ctr_cust_id IS NOT NULL THEN
21038 --This API call will update pa_project_customers and pa_tasks
21039 pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
21040 P_API_VERSION => 1.0
21041 , P_INIT_MSG_LIST => 'T'
21042 , P_COMMIT => 'F'
21043 , P_VALIDATE_ONLY => 'F'
21044 , P_VALIDATION_LEVEL => 100
21045 , P_DEBUG_MODE => 'N'
21046 , p_calling_module => 'AMG'
21047 , p_mode => 'DISABLE'
21048 , p_project_id => l_project_id
21049 , p_def_top_task_cust => cust_id
21050 , p_contr_update_cust => hghst_ctr_cust_id
21051 , x_return_status => l_return_status
21052 , x_msg_count => l_msg_count
21053 , x_msg_data => l_msg_data );
21054 END IF;
21055 END;
21056 END IF;
21057 --Changes end for Bug 3279981
21058 Changes end for Customer Account Relationships
21059 End of commented code for Bug 5622539 */
21060
21061
21062 --Added the following logic for the date effectve funds consumption flag. This is done for federal changes.
21063 --sunkalya:federal changes bug#5511353
21064
21065 DECLARE
21066 hghst_ctr_cust_id NUMBER;
21067 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
21068 l_return_status VARCHAR2(10);
21069 l_msg_count NUMBER := 0;
21070 l_msg_data VARCHAR2(2000);
21071
21072 BEGIN
21073
21074
21075
21076 IF (p_project_in.date_eff_funds_flag ='Y' AND nvl(l_old_date_eff_funds_flag,'N') = 'N') OR
21077 (p_project_in.date_eff_funds_flag ='N' AND nvl(l_old_date_eff_funds_flag,'N') = 'Y')
21078
21079 THEN
21080
21081 IF p_project_in.date_eff_funds_flag = 'N' THEN --disabling the federal flag
21082
21083 IF ( 'N' = p_project_in.enable_top_task_customer_flag ) OR
21084 ( 'N' = nvl(l_old_cust_top_task_flag,'N') AND nvl(p_project_in.enable_top_task_customer_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
21085 THEN
21086
21087 --This api will determine which customer to be made as 100% contributor.
21088
21089 PA_CUSTOMERS_CONTACTS_UTILS.Get_Highest_Contr_Fed_Cust(
21090 P_API_VERSION => 1.0
21091 , P_INIT_MSG_LIST => 'T'
21092 , P_COMMIT => 'F'
21093 , P_VALIDATE_ONLY => 'F'
21094 , P_VALIDATION_LEVEL => 100
21095 , P_DEBUG_MODE => 'N'
21096 , p_calling_module => 'AMG'
21097 , p_project_id => l_project_id
21098 , x_highst_contr_cust_id => hghst_ctr_cust_id
21099 , x_return_status => l_return_status
21100 , x_msg_count => l_msg_count
21101 , x_msg_data => l_msg_data );
21102
21103
21104 IF hghst_ctr_cust_id IS NOT NULL THEN
21105
21106 UPDATE pa_project_customers SET customer_bill_split = 100
21107 WHERE customer_id = hghst_ctr_cust_id AND project_id = l_project_id;
21108
21109 UPDATE pa_project_customers SET customer_bill_split = 0
21110 WHERE customer_id <> hghst_ctr_cust_id AND project_id = l_project_id;
21111 END IF;
21112 END IF;
21113
21114
21115 ELSE --enabling the federal flag
21116
21117 UPDATE pa_project_customers SET customer_bill_split = null
21118 WHERE project_id = l_project_id;
21119
21120
21121 END IF;
21122
21123 END IF;
21124 --End sunkalya:federal changes bug#5511353
21125 END;
21126
21127 --Sunkalya federal: bug#5511353. This piece of code is added to take care of cases not
21128 --handled by the logic above for bill split manipulations.
21129 --The following will simply null out the bill split if either of the two flags are null.
21130
21131 IF p_project_in.date_eff_funds_flag ='Y' OR p_project_in.enable_top_task_customer_flag = 'Y' THEN
21132
21133 UPDATE pa_project_customers SET customer_bill_split = null
21134 WHERE project_id = l_project_id;
21135 END IF;
21136 --Sunkalya federal: bug#5511353.
21137
21138 --Sunkalya federal. Bug#5511353
21139 OPEN count_cust(l_project_id);
21140 FETCH count_cust INTO l_count_cust;
21141 CLOSE count_cust;
21142
21143 OPEN chk_task_level_funding(l_project_id);
21144 FETCH chk_task_level_funding INTO l_chk_task_level_funding;
21145 CLOSE chk_task_level_funding;
21146
21147
21148 IF l_count_cust > 1 AND
21149 l_chk_task_level_funding = 'Y' AND
21150 p_project_in.date_eff_funds_flag = 'N' AND
21151 l_old_date_eff_funds_flag= 'Y' AND
21152 (
21153 p_project_in.enable_top_task_customer_flag = 'N' OR
21154 (
21155 nvl(p_project_in.enable_top_task_customer_flag,
21156 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
21157 l_old_cust_top_task_flag = 'N'
21158 )
21159 )
21160 THEN
21161 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
21162 ,p_msg_name => 'PA_TASK_FUNDING_EXIST'
21163 );
21164 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
21165 RAISE FND_API.G_EXC_ERROR;
21166
21167 END IF;
21168 --Sunkalya federal. Bug#5511353
21169
21170
21171 -- Reset the global variable
21172
21173 G_ParChildTsk_chks_deferred := 'N';
21174
21175 -- Need to handle project status changes in a special way
21176 -- We would have updated the project with all the other required
21177 -- information and new check whether it is ok to change to the
21178 -- new status. If not ok, we will rollback all the other changes
21179 -- The reason we are doing all the other updates is because
21180 -- the Handle_project_status_change API and all the other
21181 -- APIs that it uses,fetch the information about the project
21182 -- from the database. Some of the information it would be looking for
21183 -- may well be an input to this API itself (Update_project)
21184 -- Hence,it would be prudent to first insert/update the project/task/
21185 -- key members/class categories and then do the checking for status
21186 -- change. If there is a failure in the status change APIs
21187 -- then we will rollback all the changes
21188
21189 IF l_project_status_changed = 'Y' THEN
21190 Pa_project_stus_utils.Handle_Project_Status_Change
21191 (x_calling_module => 'UPDATE_PROJECT'
21192 ,X_project_id => l_project_rec.project_id
21193 ,X_old_proj_status_code => l_project_rec.project_status_code
21194 ,X_new_proj_status_code => p_project_in.project_status_code
21195 ,X_project_type => l_project_rec.project_type
21196 ,X_project_start_date => l_project_rec.start_date
21197 ,X_project_end_date => l_project_rec.completion_date
21198 ,X_public_sector_flag => l_project_rec.public_sector_flag
21199 ,X_attribute_category => l_project_rec.attribute_category
21200 ,X_attribute1 => l_project_rec.attribute1
21201 ,X_attribute2 => l_project_rec.attribute2
21202 ,X_attribute3 => l_project_rec.attribute3
21203 ,X_attribute4 => l_project_rec.attribute4
21204 ,X_attribute5 => l_project_rec.attribute5
21205 ,X_attribute6 => l_project_rec.attribute6
21206 ,X_attribute7 => l_project_rec.attribute7
21207 ,X_attribute8 => l_project_rec.attribute8
21208 ,X_attribute9 => l_project_rec.attribute9
21209 ,X_attribute10 => l_project_rec.attribute10
21210 ,X_pm_product_code => l_project_rec.pm_product_code
21211 ,x_init_msg => 'N'
21212 ,x_verify_ok_flag => l_verify_ok_flag
21213 ,x_wf_enabled_flag => l_wf_enabled_flag
21214 ,X_err_stage => l_err_stage
21215 ,X_err_stack => l_err_stack
21216 ,x_err_msg_count => l_err_msg_count
21217 ,x_warnings_only_flag => l_warnings_only_flag );
21218
21219 -- If verify not ok then raise error
21220 IF l_verify_ok_flag = 'N' THEN
21221 p_project_out.return_status := l_return_status;
21222 RAISE FND_API.G_EXC_ERROR;
21223 END IF;
21224 l_statement := 'UPDATE PA_PROJECTS SET ';
21225 -- special case for update to and from 'CLOSED'
21226 IF l_closing_project = 'Y' THEN
21227 l_statement := l_statement ||
21228 ' PROJECT_STATUS_CODE = ' ||
21229 ''''||p_project_in.project_status_code||''''||','||
21230 ' CLOSED_DATE = SYSDATE,';
21231 ELSIF l_reopening_project = 'Y' THEN
21232 l_statement := l_statement ||
21233 ' PROJECT_STATUS_CODE = ' ||
21234 ''''||p_project_in.project_status_code||''''||','||
21235 ' CLOSED_DATE = NULL,';
21236 ELSE
21237 l_statement := l_statement ||
21238 ' PROJECT_STATUS_CODE = ' ||
21239 ''''||p_project_in.project_status_code||''''||',';
21240 END IF;
21241 IF l_wf_enabled_flag = 'Y' THEN
21242 l_statement := l_statement ||
21243 ' WF_STATUS_CODE = '||
21244 ''''||l_wf_status_code||''''||',';
21245 END IF;
21246 /* Code commented and added for bug#1752494 starts here */
21247 /*
21248 l_statement := l_statement ||
21249 ' LAST_UPDATE_DATE = '||''''||
21250 SYSDATE||''''||',';
21251 */
21252 l_statement := l_statement ||
21253 ' LAST_UPDATE_DATE = SYSDATE'||',';
21254 /* Code commented and added for bug#1752494 ends here */
21255 l_statement := l_statement ||
21256 ' LAST_UPDATED_BY = '||G_USER_ID||',';
21257
21258 l_statement := l_statement ||
21259 ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID;
21260
21261 l_statement := l_statement ||
21262 ' WHERE PROJECT_ID = '|| TO_CHAR(l_project_id);
21263
21264 l_cursor := dbms_sql.open_cursor;
21265 dbms_sql.parse(l_cursor, l_statement, dbms_sql.native);
21266 l_rows := dbms_sql.execute(l_cursor);
21267 IF dbms_sql.is_open (l_cursor) THEN
21268 dbms_sql.close_cursor (l_cursor);
21269 END IF;
21270
21271 /*Stubbed Out Auto Initiate Demand on Project Approval functionality
21272 Bug 3819086
21273
21274 -- Bug 3611598 If Workflow is not enabled then call the wrapper API
21275 -- which in turn will invoke the concurrent program to Initiate Demand
21276 --If the Project Status is Approved
21277 OPEN c_project_sys_status_code ;
21278 FETCH c_project_sys_status_code INTO l_status_code ;
21279 CLOSE c_project_sys_status_code;
21280
21281 IF nvl(l_status_code,'-99') = 'APPROVED' THEN
21282
21283 IF nvl(l_wf_enabled_flag,'N') <> 'Y' THEN
21284 PA_Actions_Pub.RUN_ACTION_CONC_PROCESS_WRP
21285 (
21286 p_project_id => l_project_id
21287 ,p_project_number => p_project_in.pa_project_number -- 3671408 Added IN Parameter and passing project_number
21288 ,x_msg_count => l_msg_count
21289 ,x_msg_data => l_msg_data
21290 ,x_return_status => l_return_status
21291 );
21292 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
21293 RAISE FND_API.G_EXC_ERROR;
21294 END IF;
21295 END IF;
21296
21297 END IF;
21298
21299 End of Commenting for Bug 3819086*/
21300
21301 IF l_wf_enabled_flag = 'Y' THEN -- start the project workflow
21302 Pa_project_wf.Start_Project_Wf
21303 (p_project_id => l_project_id,
21304 p_err_stack => l_err_stack,
21305 p_err_stage => l_err_stage,
21306 p_err_code => l_err_code
21307 );
21308 IF l_err_code <> 0 THEN
21309 p_project_out.return_status := l_return_status;
21310 RAISE FND_API.G_EXC_ERROR;
21311 END IF;
21312 END IF;
21313 END IF;
21314
21315
21316 -- FP-M Bug # 3301192 --update project
21317 --maansari5/18 Delete all the dependency before creating new ones.
21318 --CAUTION: THIS WILL DELETE ALL THE INTRA-DEPENDENCIES IN THE PROJECT EVEN IF THE USER DOES NOT INTEND TO DELETE.
21319 --This has been discussed today may 18 with Sakthi and Hubert. The reason is performance.
21320 IF nvl(p_pm_product_code,'WORKPLAN') <> 'WORKPLAN' --Should not run in publishing flow.
21321 THEN
21322 --bug 3845240: use l_project_id instead of p_project_out.pa_project_id
21323 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') AND
21324 l_update_structure_version_id IS NOT NULL AND
21325 l_update_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21326 THEN
21327 pa_proj_task_struc_pub.delete_intra_dependency(
21328 p_element_version_id => l_update_structure_version_id
21329 ,x_return_status => l_return_status );
21330
21331 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21332 THEN
21333 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21334 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21335 THEN
21336 RAISE FND_API.G_EXC_ERROR;
21337 END IF;
21338 END IF;
21339
21340 l_d_loop_count := p_tasks_in.first;
21341 WHILE l_d_loop_count IS NOT NULL LOOP
21342 l_task_in_rec := p_tasks_in(l_d_loop_count);
21343
21344 --Commented by rtarway during FP.M Developement Mapping and Set Financial Changes.
21345 --Since the task Id is available, this function is not needed. This call fails in case of Spilt_mapping structure
21346 --Added by rtarway during FP.M Developement Mapping and Set Financial Changes.
21347 l_d_task_id := p_tasks_out(l_d_loop_count).pa_task_id;
21348
21349 --bug 3845240: use l_project_id instead of p_project_out.pa_project_id
21350 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
21351
21352 --maansari5/18 replaced api call CONVERT_PM_TASKREF_TO_ID to CONVERT_PM_TASKREF_TO_ID_all
21353 IF l_d_task_id IS NULL AND l_task_in_rec.pm_task_reference IS NOT NULL AND
21354 l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21355 THEN
21356 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id
21357 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
21358 ,p_structure_type => l_structure_type
21359 ,p_out_task_id => l_d_task_id
21360 ,p_return_status => l_return_status);
21361
21362 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21363 THEN
21364 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21365 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21366 THEN
21367 RAISE FND_API.G_EXC_ERROR;
21368 END IF;
21369 END IF;
21370 --maansari5/18
21371
21372 l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_update_structure_version_id
21373 ,p_task_id => l_d_task_id);
21374
21375 pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
21376 ,p_delimeter => l_task_in_rec.pred_delimiter
21377 ,p_task_version_Id => l_d_task_ver_id
21378 ,x_return_status => l_return_status
21379 ,x_msg_count => l_msg_count
21380 ,x_msg_data => l_msg_data);
21381
21382 --maansari5/18
21383 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21384 THEN
21385 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21386 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21387 THEN
21388 RAISE FND_API.G_EXC_ERROR;
21389 END IF;
21390 --maansari5/18
21391
21392 l_d_task_id := null;
21393 END IF;
21394 l_d_loop_count := p_tasks_in.next(l_d_loop_count);
21395 END LOOP;
21396 END IF; --should not run in publishing flow.
21397 -- 22-DEC-97, jwhite ----------------------------------------------------------
21398 -- Added new OUT-paramter p_workflow_started
21399
21400 IF (l_wf_enabled_flag = 'Y' )
21401 THEN
21402 p_workflow_started := 'Y';
21403 END IF;
21404 -- -----------------------------------------------------------------------------------
21405
21406
21407 -- ZAKHAN Extensible Attribute Changes
21408 --<Add Project/Task level Extensible Attributes>
21409
21410 i := p_ext_attr_tbl_in.first;
21411
21412 IF p_ext_attr_tbl_in.exists(i)
21413 THEN
21414
21415 -- get the correct structure type
21416 l_structure_type := p_structure_in.structure_type;
21417 IF (l_structure_type IS NULL or l_structure_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
21418 l_structure_type := 'FINANCIAL';
21419 END IF;
21420
21421 PA_USER_ATTR_PUB.Process_User_Attrs_Data(
21422 p_ext_attr_data_table => p_ext_attr_tbl_in,
21423 p_project_id => l_project_id,
21424 p_structure_type => l_structure_type,
21425 x_failed_row_id_list => l_failed_row_id_list,
21426 x_errorcode => l_errorcode,
21427 x_msg_count => l_msg_count,
21428 x_msg_data => l_msg_data,
21429 x_return_status => l_return_status );
21430
21431 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21432 THEN
21433 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21434 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21435 THEN
21436 RAISE FND_API.G_EXC_ERROR;
21437 END IF;
21438 END IF;
21439 --</Add Project/Task level Extensible Attributes>
21440
21441 --Begin Add by rtarway FP.M changes for Mapping
21442 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
21443 IF (G_PROJECT_SHARING_TYPE = 'SPLIT_MAPPING' AND p_structure_in.structure_type = 'WORKPLAN')
21444 THEN
21445 l_d_loop_count := p_tasks_in.first;
21446 WHILE l_d_loop_count IS NOT NULL LOOP
21447 l_task_in_rec := p_tasks_in(l_d_loop_count);
21448 --No Function Security Check required
21449 IF (
21450 (l_task_in_rec.mapped_task_reference IS NULL OR l_task_in_rec.mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
21451 OR
21452 (l_task_in_rec.mapped_task_id IS NULL OR l_task_in_rec.mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
21453 )
21454 THEN
21455 pa_project_pub.update_mapping
21456 (
21457 p_api_version => p_api_version_number
21458 , p_init_msg_list => FND_API.G_FALSE
21459 , p_commit => FND_API.G_FALSE--bug 3766967
21460 , p_debug_mode => FND_API.G_TRUE
21461 , p_project_id => l_project_id
21462 , p_proj_source_reference => null
21463 , p_wkp_structure_version_id => p_structure_in.structure_version_id
21464 --, p_wkp_task_id => l_tasks_out(i).pa_task_id--Since the tasks are already created , this will have task Ids
21465 , p_wkp_task_reference => l_task_in_rec.pm_task_reference
21466 , px_mapped_task_id => l_task_in_rec.mapped_task_id------------|One of theses two should be passed
21467 , p_mapped_task_reference => l_task_in_rec.mapped_task_reference ----|
21468 , x_return_status => l_return_status
21469 , x_msg_count => l_msg_count
21470 , x_msg_data => l_msg_data
21471 );
21472 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
21473 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21474 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
21475 RAISE FND_API.G_EXC_ERROR;
21476 END IF;
21477 END IF;
21478 l_d_loop_count := p_tasks_in.next(l_d_loop_count);
21479 END LOOP;
21480 END IF;
21481 --Set Financial Task Flag --FP.M Changes
21482 IF (G_PROJECT_SHARING_TYPE='SHARE_PARTIAL' AND p_structure_in.structure_type = 'FINANCIAL' )
21483 THEN
21484 i := p_tasks_in.first();
21485 WHILE i IS NOT NULL LOOP
21486 --Initialize the return status to success
21487 p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
21488 l_task_in_rec := p_tasks_in(i);
21489 --No Function Security Check required
21490 --Get record version number from pa_tasks table
21491 OPEN c_get_pa_record_version_number ( p_tasks_out(i).task_version_id , l_project_id);
21492 FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
21493 CLOSE c_get_pa_record_version_number;
21494
21495 IF
21496 (
21497 l_task_in_rec.financial_task_flag IS NOT NULL
21498 AND
21499 l_task_in_rec.financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21500 )
21501 THEN
21502 PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
21503 (
21504 p_api_version => p_api_version_number
21505 , p_init_msg_list => FND_API.G_FALSE
21506 , p_commit => FND_API.G_FALSE--bug 3766967
21507 , p_calling_module => 'AMG'
21508 , p_debug_mode => FND_API.G_TRUE
21509 , p_task_version_id => p_tasks_out(i).task_version_id
21510 , p_checked_flag => l_task_in_rec.financial_task_flag
21511 , p_record_version_number => l_patask_record_version_number
21512 , p_project_id => l_project_id -- 4969319 p_project_out.pa_project_id
21513 , p_published_version_exists => G_Published_version_exists
21514 , x_return_status => l_return_status
21515 , x_msg_count => l_msg_count
21516 , x_msg_data => l_msg_data
21517 );
21518 -- Populating the appropriate values in task out records
21519 p_tasks_out(i).return_status := l_return_status;
21520
21521 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
21522 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21523 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
21524 RAISE FND_API.G_EXC_ERROR;
21525 END IF;
21526 END IF;
21527 i := p_tasks_in.next(i);
21528 END LOOP;
21529 END IF;
21530 --End Add by rtarway FP.M chages for Mapping and Set Financial task
21531 ------ 3435905 : FP M : Deliverables Changes For AMG Start-----------
21532
21533 -- While updating a project, user can create new deliverables or
21534 -- update existing deliverables. If deliverable_reference exists
21535 -- then update_deliverable will be called else create_deliverables
21536 -- will be called.
21537 -- For actions there is same api for both create and update. Thus
21538 -- same wrapper api will be called for actions in both the cases
21539
21540 -- 3773373 commented below code, here deliveable security check is done
21541 -- unconditionally, also, local variable usage is wrong
21542 -- if i is not null, assign first deliverable's return status as success
21543 -- and call create_deliverable or update_deliverable api
21544 -- here, create_deliverable and update_deliverable apis are doing deliverable security check
21545 -- so no need to it here .
21546
21547 /*
21548
21549 --initialize return status to success
21550 i:=1;
21551 -- 3435905 changed from p_deliverable_out to G_deliverables_out_tbl
21552
21553 G_deliverables_out_tbl(i).return_status := FND_API.G_RET_STS_SUCCESS;
21554
21555 -- Function Security Check
21556 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
21557 (p_api_version_number => p_api_version_number,
21558 p_responsibility_id => l_resp_id,
21559 p_function_name => 'PA_DELIVERABLE_EDIT',
21560 p_msg_count => l_msg_count,
21561 p_msg_data => l_msg_data,
21562 p_return_status => l_return_status,
21563 p_function_allowed => l_function_allowed);
21564
21565
21566 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21567 THEN
21568 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21569 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21570 THEN
21571 RAISE FND_API.G_EXC_ERROR;
21572 END IF;
21573
21574 IF l_function_allowed = 'N' THEN
21575 pa_interface_utils_pub.map_new_amg_msg
21576 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
21577 ,p_msg_attribute => 'CHANGE'
21578 ,p_resize_flag => 'Y'
21579 ,p_msg_context => 'GENERAL'
21580 ,p_attribute1 => ''
21581 ,p_attribute2 => ''
21582 ,p_attribute3 => ''
21583 ,p_attribute4 => ''
21584 ,p_attribute5 => '');
21585
21586 p_return_status := FND_API.G_RET_STS_ERROR;
21587 RAISE FND_API.G_EXC_ERROR;
21588 END IF;
21589 */
21590 -- 3773373 changed local variable usage from i_dlvr to i
21591 -- if i is not null, set return status to success
21592 i := p_deliverables_in.first();
21593
21594 IF i IS NOT NULL THEN
21595 -- 3435905 changed from p_deliverable_out to G_deliverables_out_tbl
21596 G_deliverables_out_tbl(i).return_status := FND_API.G_RET_STS_SUCCESS;
21597 END IF;
21598
21599 WHILE i IS NOT NULL LOOP
21600
21601 -- Validate Deliverable reference / id- not null, unique
21602 -- 3858251 Added if condition to check, if user had passed dlvr ref and id ,
21603 -- then call below api to validate reference and id
21604
21605 IF p_deliverables_in(i).deliverable_id IS NOT NULL AND p_deliverables_in(i).deliverable_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
21606
21607 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
21608 ( p_deliverable_reference => p_deliverables_in(i).pm_deliverable_reference
21609 , p_deliverable_id => p_deliverables_in(i).deliverable_id
21610 , p_project_id => l_project_id
21611 , p_out_deliverable_id => l_deliverable_id
21612 , p_return_status => x_return_status
21613 );
21614
21615 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
21616 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21617 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
21618 RAISE FND_API.G_EXC_ERROR;
21619 END IF;
21620
21621 END IF;
21622
21623 -- 3858251 end
21624
21625 -- Call Update_Deliverable in following cases
21626 -- 1. If deliverable_id is passed.
21627 -- 2. If deliverable_id is not passed and deliverable_reference is not unique
21628 -- Otherwise call Create_Deliverables
21629
21630
21631 IF ( nvl( p_deliverables_in(i).deliverable_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN
21632 -- call Update_deliverables
21633 l_dlvr_dml_action := G_UPDATE_MODE;
21634 ELSE
21635 -- Bug 3651538 Moved the call of api from outside IF condition to inside else part
21636 -- as need to check for reference uniqueness only if ID is not passed.
21637 pa_deliverable_utils.is_dlvr_reference_unique (
21638 p_deliverable_reference => p_deliverables_in(i).pm_deliverable_reference
21639 , p_project_id => l_project_id
21640 , x_unique_flag => l_unique_flag
21641 , x_return_status => x_return_status );
21642
21643 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
21644 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21645 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
21646 RAISE FND_API.G_EXC_ERROR;
21647 END IF;
21648
21649 IF ( l_unique_flag = 'N' )THEN
21650 -- call Update_deliverables
21651 l_dlvr_dml_action := G_UPDATE_MODE;
21652 ELSE
21653 -- call Create_Deliverables
21654 l_dlvr_dml_action := G_CREATE_MODE;
21655 END IF; -- deliverable_reference is unique
21656
21657 END IF; -- non null deliverable_id is passed
21658
21659 IF (l_dlvr_dml_action = G_CREATE_MODE) THEN
21660
21661 -- Invoking the Create Deliverable API
21662 Pa_Project_Pub.create_deliverable
21663 (
21664 p_api_version => p_api_version_number
21665 , p_init_msg_list => p_init_msg_list
21666 -- 3735792, passing p_commit as false to next level api calls
21667 , p_commit => FND_API.G_FALSE
21668 , p_debug_mode => FND_API.G_TRUE
21669 , x_return_status => l_return_status
21670 , p_deliverable_name => p_deliverables_in(i).deliverable_name
21671 , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
21672 , p_deliverable_type_id => p_deliverables_in(i).deliverable_type_id
21673 , p_deliverable_owner_id => p_deliverables_in(i).deliverable_owner_id
21674 , p_description => p_deliverables_in(i).description
21675 , p_status_code => p_deliverables_in(i).status_code
21676 , p_due_date => p_deliverables_in(i).due_date
21677 , p_completion_date => p_deliverables_in(i).completion_date
21678 , p_progress_weight => p_deliverables_in(i).progress_weight
21679 , px_deliverable_id => l_deliverable_id
21680 , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
21681 -- for bug# 3729250
21682 -- , p_carrying_out_org_id => p_deliverables_in(i).carrying_out_org_id
21683 , p_task_id => p_deliverables_in(i).task_id
21684 , p_task_source_reference => p_deliverables_in(i).task_source_reference
21685 , p_project_id => l_project_id
21686 , p_proj_source_reference => null
21687 , p_action_in_tbl => p_deliverable_actions_in
21688 -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
21689 , x_action_out_tbl => G_deliverable_actions_out_tbl
21690 -- , x_action_out_tbl => p_deliverable_actions_out
21691 , p_item_id => p_deliverables_in(i).item_id -- 3630378 added parameter
21692 , p_inventory_org_id => p_deliverables_in(i).inventory_org_id
21693 , p_quantity => p_deliverables_in(i).quantity
21694 , p_uom_code => p_deliverables_in(i).uom_code
21695 -- for bug# 3729250
21696 -- , p_item_description => p_deliverables_in(i).item_description
21697 , p_unit_price => p_deliverables_in(i).unit_price
21698 , p_unit_number => p_deliverables_in(i).unit_number
21699 , p_currency_code => p_deliverables_in(i).currency_code
21700 , p_pm_source_code => p_pm_product_code /* Bug no. 3651113 */
21701 , x_msg_count => l_msg_count
21702 , x_msg_data => l_msg_data
21703 );
21704
21705 ELSE -- l_dlvr_dml_action = G_UPDATE_MODE
21706
21707 update_deliverable
21708 (
21709 p_api_version => p_api_version_number
21710 , p_init_msg_list => p_init_msg_list
21711 -- 3735792, passing p_commit as false to next level api calls
21712 , p_commit => FND_API.G_FALSE
21713 , p_debug_mode => FND_API.G_TRUE
21714 , x_return_status => l_return_status
21715 , p_deliverable_name => p_deliverables_in(i).deliverable_name
21716 , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
21717 , p_deliverable_type_id => p_deliverables_in(i).deliverable_type_id
21718 , p_deliverable_owner_id => p_deliverables_in(i).deliverable_owner_id
21719 , p_description => p_deliverables_in(i).description
21720 , p_status_code => p_deliverables_in(i).status_code
21721 , p_due_date => p_deliverables_in(i).due_date
21722 , p_completion_date => p_deliverables_in(i).completion_date
21723 , p_progress_weight => p_deliverables_in(i).progress_weight
21724 , px_deliverable_id => l_deliverable_id
21725 , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
21726 -- for bug# 3729250
21727 -- , p_carrying_out_org_id => p_deliverables_in(i).carrying_out_org_id
21728 , p_task_id => p_deliverables_in(i).task_id
21729 , p_task_source_reference => p_deliverables_in(i).task_source_reference
21730 , p_project_id => l_project_id
21731 , p_proj_source_reference => null
21732 -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
21733 , p_action_in_tbl => p_deliverable_actions_in
21734 -- , x_action_out_tbl => p_deliverable_actions_out
21735 , x_action_out_tbl => G_deliverable_actions_out_tbl
21736 , p_item_id => p_deliverables_in(i).item_id -- 3630378 added parameter
21737 , p_inventory_org_id => p_deliverables_in(i).inventory_org_id
21738 , p_quantity => p_deliverables_in(i).quantity
21739 , p_uom_code => p_deliverables_in(i).uom_code
21740 -- for bug# 3729250
21741 -- , p_item_description => p_deliverables_in(i).item_description
21742 , p_unit_price => p_deliverables_in(i).unit_price
21743 , p_unit_number => p_deliverables_in(i).unit_number
21744 , p_currency_code => p_deliverables_in(i).currency_code
21745 , p_pm_source_code => p_pm_product_code /* Bug no. 3651113 */
21746 , x_msg_count => l_msg_count
21747 , x_msg_data => l_msg_data
21748 );
21749 END IF;
21750
21751 -- Populating the appropriate values in deliverables out records
21752
21753 -- 3435905 return status and deliverable id is directly assigned to
21754 -- global deliverable table
21755 -- removed the p_deliverables_out parameter and added global table
21756
21757 -- p_deliverables_out(i).return_status := l_return_status;
21758 -- p_deliverables_out(i).deliverable_id := l_deliverable_id;
21759
21760 G_deliverables_out_tbl(i).return_status := l_return_status;
21761 G_deliverables_out_tbl(i).deliverable_id := l_deliverable_id;
21762
21763 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
21764 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21765 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
21766 RAISE FND_API.G_EXC_ERROR;
21767 END IF;
21768
21769 -- 3773373 changed local variable usage from i_dlvr to i
21770 i := p_deliverables_in.next(i);
21771
21772 END LOOP;
21773
21774 ------ 3435905 : FP M : Deliverables Changes For AMG END-----------
21775
21776
21777 -- Bug # 4582750.
21778 --Note that API pa_project_structure_utils.lock_unlock_wp_str IS NOT autonomosu transaction.
21779
21780 IF p_update_mode = 'PA_UPD_WBS_ATTR' AND l_prev_locked_status IS NOT NULL AND l_prev_locked_status = 'N'
21781 and (p_pm_product_code <> 'WORKPLAN') -- Bug # 4758888.
21782 AND p_structure_in.structure_version_id IS NOT NULL
21783 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21784 THEN
21785
21786 IF l_debug_mode = 'Y' THEN
21787 pa_debug.g_err_stage := 'Before calling pa_project_structure_utils.lock_unlock_wp_str for UNLOCKING'||
21788 'p_project_in.pa_project_id='||p_project_in.pa_project_id||
21789 '-l_structure_version_id='||l_structure_version_id;
21790 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
21791 END IF;
21792
21793 pa_project_structure_utils.lock_unlock_wp_str
21794 (p_project_id => p_project_in.pa_project_id
21795 ,p_structure_version_id => p_structure_in.structure_version_id
21796 ,p_lock_status_code => 'UNLOCKED'
21797 ,p_calling_module => 'PA_UPD_WBS_ATTR'
21798 ,x_return_status => l_x_return_status
21799 ,x_msg_count => l_x_msg_count
21800 ,x_msg_data => l_x_msg_data);
21801
21802 IF l_debug_mode = 'Y' THEN
21803 pa_debug.g_err_stage := 'After calling pa_project_structure_utils.lock_unlock_wp_str for UNLOCKING'||
21804 'l_x_return_status='||l_x_return_status;
21805 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
21806 END IF;
21807
21808 IF l_x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21809 THEN
21810 p_project_out.return_status := l_x_return_status;
21811 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21812
21813 ELSIF l_x_return_status = FND_API.G_RET_STS_ERROR
21814 THEN
21815 p_project_out.return_status := l_x_return_status;
21816 RAISE FND_API.G_EXC_ERROR;
21817 END IF;
21818
21819 END IF;
21820
21821 -- End Bug # 4582750.
21822
21823
21824
21825 IF (FND_API.to_boolean( p_commit )) OR
21826 l_wf_enabled_flag = 'Y'
21827 THEN
21828 COMMIT WORK;
21829 END IF;
21830 --4218977, rtarway, unset this global variable
21831 if (p_pm_product_code <> 'WORKPLAN') then
21832 G_OP_VALIDATE_FLAG := null;
21833 G_TASK_STR_UPDATE_MODE := null;
21834 end if;
21835
21836 EXCEPTION
21837
21838 WHEN FND_API.G_EXC_ERROR THEN
21839 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
21840 pa_project_check_pvt.G_index_counter := 0;
21841
21842 p_return_status := FND_API.G_RET_STS_ERROR ;
21843 G_ParChildTsk_chks_deferred := 'N';
21844
21845 ROLLBACK TO Update_project_pub;
21846
21847 -- Begin Bug # 4582750.
21848
21849 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
21850 AND p_structure_in.structure_version_id IS NOT NULL
21851 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21852 then
21853
21854 pa_project_structure_utils.lock_unlock_wp_str_autonomous
21855 (p_project_id => p_project_in.pa_project_id
21856 , p_structure_version_id => p_structure_in.structure_version_id
21857 , p_lock_status_code => 'UNLOCKED'
21858 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
21859 ,x_return_status => l_x_return_status
21860 ,x_msg_count => l_x_msg_count
21861 ,x_msg_data => l_x_msg_data);
21862
21863 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
21864 raise;
21865 end if;
21866
21867 end if;
21868
21869 -- End Bug # 4582750.
21870
21871 --4218977, rtarway, unset this global variable
21872 if (p_pm_product_code <> 'WORKPLAN') then
21873 G_OP_VALIDATE_FLAG := null;
21874 G_TASK_STR_UPDATE_MODE := null;
21875 end if;
21876
21877 -- 4537865
21878 p_workflow_started := NULL ;
21879
21880 FND_MSG_PUB.Count_And_Get
21881 ( p_count => p_msg_count ,
21882 p_data => p_msg_data );
21883
21884
21885 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
21886 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
21887 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
21888 pa_project_check_pvt.G_index_counter := 0;
21889 G_ParChildTsk_chks_deferred := 'N';
21890 ROLLBACK TO Update_project_pub;
21891
21892 -- Begin Bug # 4582750.
21893 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
21894 AND p_structure_in.structure_version_id IS NOT NULL
21895 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21896 then
21897
21898
21899 pa_project_structure_utils.lock_unlock_wp_str_autonomous
21900 (p_project_id => p_project_in.pa_project_id
21901 , p_structure_version_id => p_structure_in.structure_version_id
21902 , p_lock_status_code => 'UNLOCKED'
21903 ,p_calling_module => 'PA_UPD_WBS_ATTR'
21904 ,x_return_status => l_x_return_status
21905 ,x_msg_count => l_x_msg_count
21906 ,x_msg_data => l_x_msg_data);
21907
21908 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
21909 raise;
21910 end if;
21911
21912 end if;
21913
21914 -- End Bug # 4582750.
21915
21916 --4218977, rtarway, unset this global variable
21917 if (p_pm_product_code <> 'WORKPLAN') then
21918 G_OP_VALIDATE_FLAG := null;
21919 G_TASK_STR_UPDATE_MODE := null;
21920 end if;
21921
21922 -- 4537865
21923 p_workflow_started := NULL ;
21924
21925 FND_MSG_PUB.Count_And_Get
21926 ( p_count => p_msg_count ,
21927 p_data => p_msg_data );
21928
21929 WHEN NO_DATA_FOUND THEN
21930 -- code fix for bug 3579257 : Bug 3627124 starts
21931 --dbms_output.put_line ('in no data found');
21932 p_return_status := FND_API.G_RET_STS_ERROR;
21933 ROLLBACK TO update_project_pub;
21934
21935
21936 -- Begin Bug # 4582750.
21937
21938 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
21939 AND p_structure_in.structure_version_id IS NOT NULL
21940 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21941 then
21942
21943
21944 pa_project_structure_utils.lock_unlock_wp_str_autonomous
21945 (p_project_id => p_project_in.pa_project_id
21946 , p_structure_version_id => p_structure_in.structure_version_id
21947 , p_lock_status_code => 'UNLOCKED'
21948 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
21949 ,x_return_status => l_x_return_status
21950 ,x_msg_count => l_x_msg_count
21951 ,x_msg_data => l_x_msg_data);
21952
21953 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
21954 raise;
21955 end if;
21956
21957 end if;
21958
21959 -- End Bug # 4582750.
21960
21961 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
21962 pa_project_check_pvt.G_index_counter := 0;
21963 G_ParChildTsk_chks_deferred := 'N';
21964 --4218977, rtarway, unset this global variable
21965 if (p_pm_product_code <> 'WORKPLAN') then
21966 G_OP_VALIDATE_FLAG := null;
21967 G_TASK_STR_UPDATE_MODE := null;
21968 end if;
21969
21970 -- 4537865
21971 p_workflow_started := NULL ;
21972
21973 -- code fix for bug 3579257 : Bug 3627124 ends
21974 pa_interface_utils_pub.map_new_amg_msg
21975 ( p_old_message_code => 'PA_NO_DATA_FOUND'
21976 ,p_msg_attribute => 'CHANGE'
21977 ,p_resize_flag => 'N'
21978 ,p_msg_context => 'GENERAL'
21979 ,p_attribute1 => ''
21980 ,p_attribute2 => ''
21981 ,p_attribute3 => ''
21982 ,p_attribute4 => ''
21983 ,p_attribute5 => '');
21984
21985 WHEN ROW_ALREADY_LOCKED THEN
21986 ROLLBACK TO update_project_pub;
21987
21988 -- Begin Bug # 4582750.
21989
21990 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
21991 AND p_structure_in.structure_version_id IS NOT NULL
21992 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21993 then
21994
21995
21996 pa_project_structure_utils.lock_unlock_wp_str_autonomous
21997 (p_project_id => p_project_in.pa_project_id
21998 , p_structure_version_id => p_structure_in.structure_version_id
21999 , p_lock_status_code => 'UNLOCKED'
22000 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22001 ,x_return_status => l_x_return_status
22002 ,x_msg_count => l_x_msg_count
22003 ,x_msg_data => l_x_msg_data);
22004
22005 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22006 raise;
22007 end if;
22008
22009 end if;
22010
22011 -- End Bug # 4582750.
22012
22013 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22014 pa_project_check_pvt.G_index_counter := 0;
22015 G_ParChildTsk_chks_deferred := 'N';
22016
22017 -- 4537865
22018 p_workflow_started := NULL ;
22019
22020 p_return_status := FND_API.G_RET_STS_ERROR;
22021 --4218977, rtarway, unset this global variable
22022 if (p_pm_product_code <> 'WORKPLAN') then
22023 G_OP_VALIDATE_FLAG := null;
22024 G_TASK_STR_UPDATE_MODE := null;
22025 end if;
22026 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
22027 THEN
22028 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_P_AMG');
22029 FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
22030 FND_MESSAGE.SET_TOKEN('ENTITY', G_PROJECT_CODE);
22031 FND_MSG_PUB.ADD;
22032 END IF;
22033
22034 FND_MSG_PUB.Count_And_Get
22035 ( p_count => p_msg_count ,
22036 p_data => p_msg_data );
22037
22038
22039 WHEN OTHERS THEN
22040
22041 ROLLBACK TO Update_project_pub;
22042
22043 -- Begin Bug # 4582750.
22044
22045 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22046 AND p_structure_in.structure_version_id IS NOT NULL
22047 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22048 then
22049
22050
22051 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22052 (p_project_id => p_project_in.pa_project_id
22053 , p_structure_version_id => p_structure_in.structure_version_id
22054 , p_lock_status_code => 'UNLOCKED'
22055 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22056 ,x_return_status => l_x_return_status
22057 ,x_msg_count => l_x_msg_count
22058 ,x_msg_data => l_x_msg_data);
22059
22060 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22061 raise;
22062 end if;
22063
22064 end if;
22065
22066 -- End Bug # 4582750.
22067
22068 G_ParChildTsk_chks_deferred := 'N';
22069 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22070 pa_project_check_pvt.G_index_counter := 0;
22071 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
22072 --4218977, rtarway, unset this global variable
22073 if (p_pm_product_code <> 'WORKPLAN') then
22074 G_OP_VALIDATE_FLAG := null;
22075 end if;
22076 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
22077 FND_MSG_PUB.add_exc_msg
22078 ( p_pkg_name => G_PKG_NAME
22079 , p_procedure_name => l_api_name );
22080 END IF;
22081
22082 -- 4537865
22083 p_workflow_started := NULL ;
22084
22085 FND_MSG_PUB.Count_And_Get
22086 ( p_count => p_msg_count ,
22087 p_data => p_msg_data );
22088
22089
22090 END Update_project;
22091
22092 --------------------------------------------------------------------------------
22093 --Name: update_task
22094 --Type: Procedure
22095 --Description: This procedure can be used to update a task
22096 --
22097 --
22098 --Called subprograms:
22099 --
22100 --
22101 --
22102 --History:
22103 -- 31-JUL-1996 R. Krishnamurthy Created
22104 -- 28-NOV-1996 L. de Werker Added 11 parameters for descriptive flexfields
22105 -- 04-DEC-1996 L. de Werker Debugged errors + added checking of NULL values.
22106 -- 05-DEC-1996 L. de Werker Added validation of service_type_code
22107 -- Fixed error that occurred when a parent was changed,
22108 -- added change of WBS_level, if appropriate.
22109 -- Added checking for task_completion_date
22110 -- Added WHO columns update in dynamic SQL string
22111 -- 06-DEC-1996 L. de Werker Added locking mechanism
22112 -- 10-DEC-1996 L. de Werker Added parameter p_pa_parent_task_id
22113 -- Added parameter p_address_id
22114 -- 03-MAY-2000 Rakesh Raghavan Fixed Bug # 1289156.
22115 -- 15-jul-2003 sramesh -- Added the code for bug 2982057.
22116 -- Changed the logic to populate the long_task_name
22117 -- with task_name when the long_task_name is null.
22118 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
22119 -- dependency_type and lag days to tasks and create dependencies.
22120 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
22121 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
22122 -- 05-APR-2004 Rakesh Raghavan Progress Management Changes. Bug # 3420093.
22123 -- 29-Dec-2005 vkadimes Bug Number 4689326 and 4689888 Changes are tagged with Bug Numbers.
22124 PROCEDURE update_task
22125 ( p_api_version_number IN NUMBER,
22126 p_commit IN VARCHAR2 := FND_API.G_FALSE,
22127 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
22128 p_msg_count OUT NOCOPY NUMBER, /*Added the nocopy check for 4537865 */
22129 p_msg_data OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
22130 p_return_status OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
22131 --Project Structures
22132 p_ref_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22133 --Project Structures
22134 p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22135 p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22136 p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22137 p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22138 p_task_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22139 p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22140 p_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22141 p_long_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22142 p_task_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22143 p_task_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22144 p_task_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22145 p_pm_parent_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22146 p_pa_parent_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22147 p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22148 p_carrying_out_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22149 p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22150 p_task_manager_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22151 p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22152 p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22153 p_ready_to_bill_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22154 p_ready_to_distribute_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22155 p_limit_to_txn_controls_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22156 p_labor_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22157 p_labor_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22158 p_labor_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22159 p_labor_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22160 p_nl_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22161 p_nl_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22162 p_nl_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22163 p_nl_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22164 p_labor_cost_multiplier_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22165 p_cost_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22166 p_rev_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22167 p_inv_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22168 p_cost_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22169 p_rev_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22170 p_inv_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22171 p_labor_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22172 p_nl_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22173 p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22174 p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22175 p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22176 p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22177 p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22178 p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22179 p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22180 p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22181 p_tasks_dff IN VARCHAR2 := 'N', --bug 6153503
22182 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22183 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22184 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22185 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22186 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22187 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22188 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22189 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22190 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22191 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22192 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22193 --bug 6153503
22194 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22195 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22196 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22197 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22198 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22199 p_allow_cross_charge_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22200 p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22201 p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22202 p_cc_process_labor_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22203 p_labor_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22204 p_labor_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22205 p_cc_process_nl_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22206 p_nl_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22207 p_nl_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22208 p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22209 p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22210 p_emp_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22211 p_job_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22212 --Sakthi MCB
22213 p_non_lab_std_bill_rt_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22214 p_taskfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22215 p_taskfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22216 --Sakthi MCB
22217 --Project Structures
22218 p_structure_type IN VARCHAR2 := 'FINANCIAL',
22219 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22220 P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22221 P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22222 P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22223 P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22224 P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22225 P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22226 P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22227 P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22228 P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22229 P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22230 P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22231 P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22232 P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22233 P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22234 P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22235 P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22236 P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22237 P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22238 P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22239 P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22240 P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22241 P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22242 --Project Structures
22243 p_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22244 p_non_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22245 --PA L changes -- bug 2872708 --update_task
22246 p_retirement_cost_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22247 p_cint_eligible_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22248 p_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22249 --end PA L changes -- bug 2872708
22250 p_out_pa_task_id OUT NOCOPY NUMBER, /*Added the nocopy check for 4537865 */
22251 p_out_pm_task_reference OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
22252 p_update_task_structure IN VARCHAR2,
22253 -- PA L Changes 3010538
22254 p_process_mode IN VARCHAR2 := 'ONLINE'
22255 -- FP-M Bug # 3301192
22256 ,p_pred_string VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22257 -- ,p_pred_delimiter VARCHAR2 DEFAULT ','
22258 ,p_pred_delimiter VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22259 -- FP M changes begin (venkat)
22260 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22261 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22262 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22263 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
22264 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22265 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22266 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22267 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22268 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22269 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22270 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22271 -- FP M changes end (venkat)
22272 -- FP M changes start (Mapping )
22273 ,p_financial_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22274 ,p_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22275 ,p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22276 -- FP M changes end (Mapping )
22277 ,p_deliverable IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22278 -- (Begin venkat) Bug #3450684 --------------------------------------------------------------------
22279 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22280 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22281 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22282 -- (End venkat) Bug #3450684 --------------------------------------------------------------------
22283
22284 -- Progress Management Changes. Bug # 3420093.
22285 ,p_etc_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22286 ,p_percent_complete IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22287 -- Progress Management Changes. Bug # 3420093.
22288 ,p_is_wp_seperate_from_fn IN VARCHAR2 := 'X' -- Added for bug#3451073
22289 ,p_calling_api IN VARCHAR2 := 'UPDATE_TASK' -- Added for Bug # 4199694
22290 ,p_op_validate_flag IN VARCHAR2 := 'Y'
22291 )
22292
22293 IS
22294
22295 l_return_status VARCHAR2(1);
22296 l_msg_count NUMBER;
22297 l_msg_data VARCHAR2(2000);
22298 l_out_pa_task_id NUMBER;
22299 l_out_pm_task_reference VARCHAR2(25);
22300
22301 l_api_name CONSTANT VARCHAR2(30):= 'update_task';
22302
22303 l_project_id NUMBER; --bug 2471668
22304
22305 --project structures
22306 l_function_allowed VARCHAR2(1);
22307 l_resp_id NUMBER := 0;
22308 --project structures
22309
22310 --Bug 2665656
22311 --l_pm_product_code VARCHAR2(30);
22312 --Bug 2665656
22313
22314 l_update_wbs_flag VARCHAR2(1);
22315 l_long_task_name VARCHAR2(240); /*Added for bug 2982057 */
22316
22317 --Bug 3106457
22318 --l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
22319 --Changed by rtarway for BUG 3919800, the type gives error when assigned a value containg miss num
22320 l_structure_version_id NUMBER;
22321
22322 -- FP-M Bug # 3301192
22323 l_d_task_id NUMBER;
22324 l_d_task_ver_id NUMBER;
22325 l_d_struct_ver_id NUMBER;
22326 l_ref_task_id NUMBER; -- Bug 3705333
22327 l_amg_task_number VARCHAR2(50); --bug 3705333
22328 l_amg_segment1 VARCHAR2(25); --bug 3705333
22329
22330 --Added by rtarway in FP.M Development
22331 l_task_version_id NUMBER;
22332 l_patask_record_version_number NUMBER;
22333 --Added by rtarway in FP.M Development
22334
22335 --Bug 3279981. Fetch project information
22336 CURSOR cur_get_proj_billing_info(c_project_id IN NUMBER) IS
22337 SELECT enable_top_task_customer_flag, enable_top_task_inv_mth_flag,
22338 revenue_accrual_method, invoice_method, project_type
22339 FROM pa_projects_all
22340 WHERE project_id = c_project_id;
22341
22342 CURSOR cur_check_proj_cust_exist (c_project_id IN NUMBER , c_customer_id IN NUMBER ) IS
22343 SELECT 'Y'
22344 FROM pa_project_customers
22345 WHERE project_id = c_project_id
22346 AND customer_id = c_customer_id ;
22347
22348 CURSOR cur_get_def_top_task_cust(c_project_id IN NUMBER) IS
22349 SELECT customer_id
22350 FROM pa_project_customers
22351 WHERE project_id = c_project_id
22352 AND default_top_task_cust_flag = 'Y';
22353 -- Added This cursor for Bug No 4689326
22354 CURSOR l_cur_customer_name(l_customer_id NUMBER)
22355 IS
22356 SELECT customer_name from PA_CUSTOMERS_V
22357 WHERE customer_id = l_customer_id;
22358 -- Added for bug 5242015
22359 CURSOR cur_top_task_customer_id (l_task_id NUMBER ) IS
22360 SELECT customer_id FROM pa_tasks
22361 WHERE task_id=l_task_id;
22362
22363 l_proj_top_task_customer_flag VARCHAR2(1);
22364 l_proj_top_task_inv_mth_flag VARCHAR2(1);
22365 l_proj_revenue_acc_method VARCHAR2(30);
22366 l_proj_invoice_method VARCHAR2(30);
22367 l_proj_type VARCHAR2(20);
22368 l_invoice_method VARCHAR2(30) := p_invoice_method;
22369 l_customer_id NUMBER := p_customer_id;
22370 l_dummy VARCHAR2(1);
22371 l_published_version_exists VARCHAR2(1);
22372 l_is_wp_separate_from_fn VARCHAR2(1);
22373 l_is_wp_versioning_enabled VARCHAR2(1);
22374 l_structure_type VARCHAR2(30) ;
22375 l_customer_name VARCHAR2(360); -- Added for bug 4689888 -- Modified to VARCHAR2(360) for bug 5856469
22376 l_top_task_customer_id NUMBER; -- Added for Bug 5242015
22377 /* Added for bug 3705333 */
22378 CURSOR l_amg_project_csr
22379 (p_pa_project_id pa_projects.project_id%type)
22380 IS
22381 SELECT segment1
22382 FROM pa_projects p
22383 WHERE p.project_id = l_project_id ; --Bug#3747312 p_pa_project_id;
22384 /* changes end for bug 3705333 */
22385 --Bug 3279981
22386 --rtarway, BUG 3908013
22387 l_attribute_category VARCHAR2(150);
22388 l_attribute1 VARCHAR2(150);
22389 l_attribute2 VARCHAR2(150);
22390 l_attribute3 VARCHAR2(150);
22391 l_attribute4 VARCHAR2(150);
22392 l_attribute5 VARCHAR2(150);
22393 l_attribute6 VARCHAR2(150);
22394 l_attribute7 VARCHAR2(150);
22395 l_attribute8 VARCHAR2(150);
22396 l_attribute9 VARCHAR2(150);
22397 l_attribute10 VARCHAR2(150);
22398 --rtarway, BUG 3908013
22399 --Added by rtarway for BUG 3919800
22400
22401 --bug 6153503
22402 l_wp_attribute_category VARCHAR2(150);
22403 l_wp_attribute1 VARCHAR2(150);
22404 l_wp_attribute2 VARCHAR2(150);
22405 l_wp_attribute3 VARCHAR2(150);
22406 l_wp_attribute4 VARCHAR2(150);
22407 l_wp_attribute5 VARCHAR2(150);
22408 l_wp_attribute6 VARCHAR2(150);
22409 l_wp_attribute7 VARCHAR2(150);
22410 l_wp_attribute8 VARCHAR2(150);
22411 l_wp_attribute9 VARCHAR2(150);
22412 l_wp_attribute10 VARCHAR2(150);
22413 l_wp_attribute11 VARCHAR2(150);
22414 l_wp_attribute12 VARCHAR2(150);
22415 l_wp_attribute13 VARCHAR2(150);
22416 l_wp_attribute14 VARCHAR2(150);
22417 l_wp_attribute15 VARCHAR2(150);
22418
22419 l_project_sharing_type VARCHAR2(250);
22420 l_pa_task_id NUMBER;
22421 l_fin_task_flag VARCHAR2(1);
22422
22423 --Used to get current_working_version in case of VE case
22424 CURSOR cur_get_working_struc_ver (l_project_id NUMBER,l_structure_type VARCHAR2)
22425 IS
22426 SELECT c.element_version_id
22427 FROM pa_proj_element_versions c
22428 , pa_structure_types a
22429 , pa_proj_structure_types b
22430 , pa_proj_elem_ver_structure d
22431 WHERE c.project_id = l_project_id
22432 AND a.structure_type_id = b.structure_type_id
22433 AND b.proj_element_id = c.proj_element_id
22434 AND a.structure_type = l_structure_type
22435 AND d.project_id = c.project_id
22436 AND d.element_version_id = c.element_version_id
22437 AND d.status_code = 'STRUCTURE_WORKING';
22438
22439 --Used to get structure version in VD case
22440 CURSOR cursor_get_struc_ver (l_project_id NUMBER,l_structure_type VARCHAR2)
22441 IS
22442 SELECT c.element_version_id
22443 FROM pa_proj_element_versions c
22444 , pa_structure_types a
22445 , pa_proj_structure_types b
22446 , pa_proj_elem_ver_structure d
22447 WHERE c.project_id = l_project_id
22448 AND a.structure_type_id = b.structure_type_id
22449 AND b.proj_element_id = c.proj_element_id
22450 AND a.structure_type = l_structure_type
22451 AND d.project_id = c.project_id
22452 AND d.element_version_id = c.element_version_id;
22453
22454
22455 CURSOR CUR_GET_FINANCIAL_FLAG (l_project_id NUMBER, l_proj_element_id NUMBER , l_parent_str_ver_id NUMBER)
22456 IS
22457 SELECT FINANCIAL_TASK_FLAG
22458 from pa_proj_element_versions
22459 where project_id = l_project_id
22460 and proj_element_id = l_proj_element_id
22461 and parent_structure_version_id = l_parent_str_ver_id;
22462
22463 --BUG 4106154, rtarway
22464 l_update_pa_tasks VARCHAR2(1);
22465
22466 l_tasks_out pa_project_pub.task_out_tbl_type; --bug 4199694
22467
22468 --BUG 4081329, rtarway
22469 cursor cur_get_child_task_dates (l_project_id NUMBER, l_task_id NUMBER)
22470 IS select task_id, start_date, completion_date, parent_task_id from pa_tasks --Fix for 7427388
22471 where project_id = l_project_id
22472 and completion_date is null
22473 start with parent_task_id = l_task_id
22474 connect by parent_task_id = prior task_id
22475 and project_id = l_project_id;
22476
22477 type l_task_id_tbl_type is table of pa_tasks.task_id%type index by binary_integer;
22478 type l_start_date_tbl_type is table of pa_tasks.start_date%type index by binary_integer;
22479 type l_completion_date_tbl_type is table of pa_tasks.completion_date%type index by binary_integer;
22480
22481 l_task_id_tbl l_task_id_tbl_type;
22482 l_start_date_tbl l_start_date_tbl_type;
22483 l_completion_date_tbl l_completion_date_tbl_type;
22484
22485 -- Fix for 7427388
22486 type l_parent_task_id_tbl_type is table of pa_tasks.parent_task_id%type index by binary_integer;
22487 l_parent_task_id_tbl l_parent_task_id_tbl_type;
22488 l_parent_task_date DATE;
22489
22490 --BUG 4081329, rtarway
22491
22492 BEGIN
22493 ----dbms_output.put_line('value of p_task_number in update_task'||p_task_number);
22494
22495 SAVEPOINT update_task_pub;
22496 -- Begin Bug # 4630058.
22497 -- Initialize the message table if requested.
22498 if FND_API.TO_BOOLEAN(p_init_msg_list) then
22499 FND_MSG_PUB.initialize;
22500 end if;
22501 -- End Bug # 4630058.
22502
22503 -- 4537865 : Initialize return status to success
22504 p_return_status := FND_API.G_RET_STS_SUCCESS;
22505
22506 --BUG 4218977, we need to initialize this variable,
22507 --keeping in mind that it might be set by update_project
22508 --we can use the parameter p_calling_api,
22509 --set this parameter only if p_calling_api is 'UPDATE_TASK'
22510 --this will be passed as UPDATE_PROJECT from update_project API
22511 if p_calling_api <> 'UPDATE_PROJECT' then
22512 G_OP_VALIDATE_FLAG := p_op_validate_flag;
22513 end if;
22514
22515 --bug 3880482
22516 PA_PROJECT_PVT.Convert_pm_projref_to_id
22517 ( p_pm_project_reference => p_pm_project_reference
22518 , p_pa_project_id => p_pa_project_id
22519 , p_out_project_id => l_project_id
22520 , p_return_status => l_return_status
22521 );
22522
22523
22524 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
22525
22526 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22527 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
22528 RAISE FND_API.G_EXC_ERROR;
22529 END IF;
22530
22531 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id; --bug 2471668 ( in the project context )
22532 --end bug 3880482
22533 --Added by rtarway for BUG 3919800
22534 l_structure_type := p_structure_type;
22535 --Get task id
22536 --Added by rtarway, for BUG 3919800, this is done as we require to do validation in share_partial case beforehand
22537 -- storing p_pa_task_id in local variable will make it consistent for other structures also.
22538 if (p_pa_task_id is not null and p_pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
22539 then l_pa_task_id := p_pa_task_id;
22540 end if;
22541 --Also Validate task id
22542 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
22543 (
22544 p_pa_project_id => l_project_id ,
22545 p_structure_type => l_structure_type,
22546 p_pa_task_id => p_pa_task_id ,
22547 p_pm_task_reference => p_pm_task_reference ,
22548 p_out_task_id => l_pa_task_id,
22549 p_return_status => l_return_status
22550 );
22551 IF l_return_status <> 'S'
22552 THEN
22553 RAISE FND_API.G_EXC_ERROR;
22554 END IF;
22555
22556 --bug 2471668.
22557 --We need to call this API here toget the corrct project id. This is also
22558 --called from the private API. But I discussed with Sakthi and he is ok to call this
22559 --twice once here and second time in private API. The idea is to make the advanced security changes
22560 --only in public APIs.
22561
22562 -- Initialize local variables
22563 -- Bug#3747312
22564 l_published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
22565 l_is_wp_separate_from_fn := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
22566 l_is_wp_versioning_enabled := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
22567
22568 -- In case of shared structure p_structure_type should be passed as
22569 -- FINANCIAL and this should be the first validation.
22570 IF (p_structure_type is null OR p_structure_type = 'WORKPLAN') THEN
22571 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
22572 NVL( l_is_wp_separate_from_fn,'N') = 'N' --bug 2876703 update_task
22573 THEN
22574 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
22575 THEN
22576 pa_interface_utils_pub.map_new_amg_msg
22577 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
22578 ,p_msg_attribute => 'CHANGE'
22579 ,p_resize_flag => 'N'
22580 ,p_msg_context => 'GENERAL'
22581 ,p_attribute1 => ''
22582 ,p_attribute2 => ''
22583 ,p_attribute3 => ''
22584 ,p_attribute4 => ''
22585 ,p_attribute5 => '');
22586 END IF;
22587 RAISE FND_API.G_EXC_ERROR;
22588 END IF;
22589 END IF ;
22590 -- Bug#3747312
22591
22592 --end of bug 2471668
22593
22594 /* --bug 2665656
22595 IF NVL( p_pm_product_code, 'WORKPLAN' ) = 'WORKPLAN'
22596 THEN
22597 l_pm_product_code := null;
22598 END IF;
22599 --bug 2665656
22600 */
22601
22602 -- Bug#3747312
22603 -- Derive the structure type based on whether its shared case
22604 -- and WP versioning is enabled or not and whether published
22605 -- version exists.
22606
22607 -- BUG 3919800, rtarway, Assign l_structure_version_id value of p_structure_version_id
22608 l_structure_version_id := p_structure_version_id;
22609
22610
22611 IF nvl(l_published_version_exists,'N') = 'Y'
22612 AND nvl(l_is_wp_separate_from_fn,'N') = 'N'
22613 AND nvl(l_is_wp_versioning_enabled,'N') = 'Y'
22614 AND p_structure_type = 'FINANCIAL'
22615 AND p_pm_product_code <> 'WORKPLAN'
22616 THEN
22617 --Change the flow to WORKPLAN
22618 l_structure_type := 'WORKPLAN';
22619 l_update_pa_tasks := 'Y'; --BUG 4106154, rtarway
22620
22621 --BUG 3919800, in case of workplan, we must derive structure version id and pass it further.
22622 OPEN cur_get_working_struc_ver(l_project_id, l_structure_type);
22623 FETCH cur_get_working_struc_ver into l_structure_version_id;
22624 CLOSE cur_get_working_struc_ver ;
22625 ELSE
22626 l_structure_type := p_structure_type;
22627 END IF;
22628 -- Bug#3747312
22629
22630 --Added by rtarway for BUG 3919800
22631 --Validate for task and change the structure type, if structure type is shared partial and workplan task is being updated.
22632 --1. get the structure sharing code
22633 l_project_sharing_type := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
22634 IF (l_project_sharing_type='SHARE_PARTIAL' )
22635 THEN
22636 --3. get the structure version id
22637 IF (l_structure_version_id is null or l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
22638 THEN
22639 --1.VE case, there will be only one working workplan version, get the structure version id for that version
22640 IF l_is_wp_versioning_enabled = 'Y'
22641 THEN
22642 OPEN cur_get_working_struc_ver(l_project_id, l_structure_type);
22643 FETCH cur_get_working_struc_ver into l_structure_version_id;
22644 CLOSE cur_get_working_struc_ver ;
22645
22646 --2.VD case, there will be only one version, get that version
22647 ELSE
22648 OPEN cursor_get_struc_ver(l_project_id, l_structure_type);
22649 FETCH cursor_get_struc_ver into l_structure_version_id;
22650 CLOSE cursor_get_struc_ver;
22651 END IF;
22652 END IF;
22653 --4. Get the existing financial_task_flag
22654 OPEN CUR_GET_FINANCIAL_FLAG (l_project_id, l_pa_task_id,l_structure_version_id);
22655 FETCH CUR_GET_FINANCIAL_FLAG into l_fin_task_flag;
22656 CLOSE CUR_GET_FINANCIAL_FLAG;
22657 --5. if existing financial task flag is 'N', change the structure type to 'WORKPLAN'
22658 IF l_fin_task_flag = 'N'
22659 THEN
22660 l_structure_type := 'WORKPLAN';
22661 END IF;
22662 END IF;
22663 --End Added by rtarway for BUG 3919800
22664
22665 /* Code added for the bug 2982057 starts */
22666 IF p_long_task_name IS NULL OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
22667 l_long_task_name := p_task_name;
22668 ELSE
22669 l_long_task_name := p_long_task_name;
22670 END IF;
22671
22672 /* Code addition for bug 2982057 ends */
22673 /* CHANGES START FOR BUG 3705333*/
22674
22675 OPEN l_amg_project_csr(l_project_id ); --Bug#3747312
22676 FETCH l_amg_project_csr INTO l_amg_segment1;
22677 CLOSE l_amg_project_csr;
22678
22679 --Project Structures
22680 IF p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22681 THEN
22682 l_ref_task_id := null;
22683 ELSE
22684 l_ref_task_id := p_ref_task_id;
22685 END IF;
22686 --Project Structures
22687
22688 IF l_ref_task_id is null THEN
22689
22690 IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
22691
22692 l_ref_task_id := p_pa_parent_task_id;
22693 -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
22694
22695 ELSIF (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
22696
22697 --Begin change by rtarway for BUG 3661788, use Convert_pm_taskref_to_id_all to get task id instead of using l_task_ref_to_id_csr
22698 --OPEN l_task_ref_to_id_csr(l_project_id,p_pm_parent_task_reference);
22699 --FETCH l_task_ref_to_id_csr INTO l_ref_task_id;
22700 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
22701 (
22702 p_pa_project_id => l_project_id ,
22703 p_structure_type => l_structure_type, --Bug#3747312 p_structure_type,
22704 p_pm_task_reference => p_pm_parent_task_reference ,
22705 p_out_task_id => l_ref_task_id,
22706 p_return_status => l_return_status
22707 );
22708
22709 --changed by rtarway for BUG 3661788
22710 --IF l_task_ref_to_id_csr%NOTFOUND
22711 IF (l_return_status <> 'S')
22712 THEN
22713 --rtarway , 3661788, comment close command
22714 --CLOSE l_task_ref_to_id_csr;
22715 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
22716 THEN
22717 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
22718 (p_task_number => p_task_name
22719 ,p_task_reference => p_pm_task_reference
22720 ,p_task_id => '');
22721
22722 pa_interface_utils_pub.map_new_amg_msg
22723 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
22724 ,p_msg_attribute => 'CHANGE'
22725 ,p_resize_flag => 'N'
22726 ,p_msg_context => 'TASK'
22727 ,p_attribute1 => l_amg_segment1
22728 ,p_attribute2 => l_amg_task_number
22729 ,p_attribute3 => ''
22730 ,p_attribute4 => ''
22731 ,p_attribute5 => '');
22732 END IF;
22733 RAISE FND_API.G_EXC_ERROR;
22734 END IF;
22735 --rtarway , 3661788, comment close command
22736 --CLOSE l_task_ref_to_id_csr;
22737 END IF;
22738 END IF;
22739 -- -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
22740 /* END OF CHANGES FOR BUG 3705333 */
22741 --Bug 3279981 Review : Shifted this code before the update_one_task call
22742 OPEN cur_get_proj_billing_info(l_project_id);
22743 FETCH cur_get_proj_billing_info INTO l_proj_top_task_customer_flag, l_proj_top_task_inv_mth_flag,
22744 l_proj_revenue_acc_method, l_proj_invoice_method, l_proj_type;
22745 CLOSE cur_get_proj_billing_info;
22746
22747 IF 'Y' = l_proj_top_task_inv_mth_flag THEN
22748 IF ( p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
22749 --changed p_pa_task_id to l_pa_task_id, 3919800, rtarway
22750 AND PA_BILLING_CORE.Update_Top_Task_Invoice_Method( l_project_id, l_pa_task_id ) = 'Y' THEN
22751 IF pa_project_pvt.check_valid_dist_rule
22752 ( l_proj_type,
22753 l_proj_revenue_acc_method||'/'||p_invoice_method,
22754 l_proj_top_task_inv_mth_flag ) = 'N' THEN
22755 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
22756 pa_interface_utils_pub.map_new_amg_msg
22757 ( p_old_message_code => 'PA_INV_TASK_INVOICE_METHOD' -- for bug# 4156036
22758 ,p_msg_attribute => 'CHANGE'
22759 ,p_resize_flag => 'N'
22760 ,p_msg_context => 'TASK'
22761 ,p_attribute1 => p_invoice_method
22762 ,p_attribute2 => ''
22763 ,p_attribute3 => ''
22764 ,p_attribute4 => ''
22765 ,p_attribute5 => '');
22766 END IF;
22767 RAISE FND_API.G_EXC_ERROR;
22768 END IF;
22769
22770 -- Function Security Check
22771 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
22772 ( p_api_version_number => p_api_version_number,
22773 p_responsibility_id => l_resp_id,
22774 p_function_name => 'PA_PAXPREPR_TASK_INV_MTH',
22775 p_msg_count => l_msg_count,
22776 p_msg_data => l_msg_data,
22777 p_return_status => l_return_status,
22778 p_function_allowed => l_function_allowed);
22779 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
22780 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22781 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
22782 RAISE FND_API.G_EXC_ERROR;
22783 END IF;
22784
22785 IF l_function_allowed = 'N' THEN
22786 pa_interface_utils_pub.map_new_amg_msg
22787 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
22788 ,p_msg_attribute => 'CHANGE'
22789 ,p_resize_flag => 'Y'
22790 ,p_msg_context => 'GENERAL'
22791 ,p_attribute1 => ''
22792 ,p_attribute2 => ''
22793 ,p_attribute3 => ''
22794 ,p_attribute4 => ''
22795 ,p_attribute5 => '');
22796 RAISE FND_API.G_EXC_ERROR;
22797 END IF;
22798
22799 l_invoice_method := p_invoice_method;
22800 ELSE
22801 --IF p_invoice_method IS NULL
22802
22803 --l_invoice_method := l_proj_invoice_method commented for bug#5583147 ;
22804
22805 /* Start of Addition for bug#5583147 */
22806 --If p_invoice_method passed is null then
22807 --Check if the task has already an invoice method if so keep the same
22808 --Else get it from project invoice method.
22809 BEGIN
22810 SELECT invoice_method
22811 INTO l_invoice_method
22812 FROM pa_tasks
22813 WHERE project_id = l_project_id
22814 and task_id = l_pa_task_id
22815 and l_invoice_method is not null;
22816
22817 EXCEPTION WHEN NO_DATA_FOUND THEN
22818 l_invoice_method := l_proj_invoice_method;
22819 END;
22820 /* End of Addition for bug#5583147 */
22821
22822 END IF;
22823 ELSE
22824 --IF 'N' = l_proj_top_task_inv_mth_flag
22825 l_invoice_method := NULL;
22826 END IF;
22827
22828 -- Added for bug 5242015
22829 OPEN cur_top_task_customer_id(l_pa_task_id);
22830 FETCH cur_top_task_customer_id INTO l_top_task_customer_id;
22831 CLOSE cur_top_task_customer_id;
22832
22833 IF 'Y' = l_proj_top_task_customer_flag THEN
22834 IF (p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
22835 l_top_task_customer_id <> p_customer_id THEN -- Added for bug 5242015
22836 -- Changes are Done for Bug 4689888
22837 --changed p_pa_task_id to l_pa_task_id, 3919800, rtarway
22838 IF PA_BILLING_CORE.Update_Top_Task_Customer( l_project_id, l_pa_task_id ) = 'Y' THEN -- If condition to check Funding exits for task or not
22839 OPEN cur_check_proj_cust_exist(l_project_id,p_customer_id);
22840 FETCH cur_check_proj_cust_exist INTO l_dummy;
22841 IF cur_check_proj_cust_exist%NOTFOUND THEN
22842 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
22843 /* Commented This code For Bug 4689326
22844 pa_interface_utils_pub.map_new_amg_msg
22845 ( p_old_message_code => 'PA_INVALID_TASK_CUSTOMER'
22846 ,p_msg_attribute => 'CHANGE'
22847 ,p_resize_flag => 'N'
22848 ,p_msg_context => 'TASK'
22849 ,p_attribute1 => p_customer_id
22850 ,p_attribute2 => ''
22851 ,p_attribute3 => ''
22852 ,p_attribute4 => ''
22853 ,p_attribute5 => '');*/
22854 -- Added this code For Bug no 4689326
22855 OPEN l_cur_customer_name(p_customer_id);
22856 FETCH l_cur_customer_name INTO l_customer_name;
22857 CLOSE l_cur_customer_name;
22858 IF (l_customer_name IS NULL OR l_customer_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN -- Checking whether the specified customer exits or not
22859 pa_interface_utils_pub.map_new_amg_msg
22860 ( p_old_message_code => 'PA_CUSTOMER_NOT_EXIST'
22861 ,p_msg_attribute => 'CHANGE'
22862 ,p_resize_flag => 'N'
22863 ,p_msg_context => 'GENERAL'
22864 ,p_attribute1 => ''
22865 ,p_attribute2 => ''
22866 ,p_attribute3 => ''
22867 ,p_attribute4 => ''
22868 ,p_attribute5 => '');
22869 ELSE
22870 PA_UTILS.ADD_MESSAGE
22871 (p_app_short_name => 'PA',
22872 p_msg_name => 'PA_INVALID_PROJECT_CUSTOMER',
22873 p_token1 => 'CUSTOMER_NAME',
22874 p_value1 => l_customer_name
22875 );
22876 END IF;
22877 -- End of Bug 4689326
22878 END IF;
22879 CLOSE cur_check_proj_cust_exist;
22880 RAISE FND_API.G_EXC_ERROR;
22881 ELSE
22882 CLOSE cur_check_proj_cust_exist;
22883
22884 -- Function Security Check
22885 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
22886 ( p_api_version_number => p_api_version_number,
22887 p_responsibility_id => l_resp_id,
22888 p_function_name => 'PA_PAXPREPR_TASK_CUST',
22889 p_msg_count => l_msg_count,
22890 p_msg_data => l_msg_data,
22891 p_return_status => l_return_status,
22892 p_function_allowed => l_function_allowed);
22893 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
22894 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22895 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
22896 RAISE FND_API.G_EXC_ERROR;
22897 END IF;
22898
22899 IF l_function_allowed = 'N' THEN
22900 pa_interface_utils_pub.map_new_amg_msg
22901 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
22902 ,p_msg_attribute => 'CHANGE'
22903 ,p_resize_flag => 'Y'
22904 ,p_msg_context => 'GENERAL'
22905 ,p_attribute1 => ''
22906 ,p_attribute2 => ''
22907 ,p_attribute3 => ''
22908 ,p_attribute4 => ''
22909 ,p_attribute5 => '');
22910 RAISE FND_API.G_EXC_ERROR;
22911 END IF;
22912
22913 l_customer_id := p_customer_id;
22914 END IF; --IF cur_check_proj_cust_exist%NOTFOUND
22915 ELSE
22916 pa_interface_utils_pub.map_new_amg_msg
22917 ( p_old_message_code => 'PA_NO_CHNG_CUST_ALLOWED'
22918 ,p_msg_attribute => 'CHANGE'
22919 ,p_resize_flag => 'Y'
22920 ,p_msg_context => 'GENERAL'
22921 ,p_attribute1 => ''
22922 ,p_attribute2 => ''
22923 ,p_attribute3 => ''
22924 ,p_attribute4 => ''
22925 ,p_attribute5 => '');
22926 RAISE FND_API.G_EXC_ERROR;
22927 END IF;-- If condition to check Funding exits for task or not --End of Bug 4689888
22928 ELSE --IF p_customer_id IS NULL
22929 IF p_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
22930 l_customer_id:=NULL; -- NULL is passed for customer_id so that in Update_one_task it will not be Defaulted.
22931 ELSIF l_top_task_customer_id = p_customer_id THEN -- added for Bug 5242015
22932 l_customer_id:= p_customer_id;
22933 ELSE
22934 pa_interface_utils_pub.map_new_amg_msg
22935 ( p_old_message_code => 'PA_INVALID_CUST'
22936 ,p_msg_attribute => 'CHANGE'
22937 ,p_resize_flag => 'N'
22938 ,p_msg_context => 'GENERAL'
22939 ,p_attribute1 => ''
22940 ,p_attribute2 => ''
22941 ,p_attribute3 => ''
22942 ,p_attribute4 => ''
22943 ,p_attribute5 => '');
22944 RAISE FND_API.G_EXC_ERROR;
22945 END IF;
22946 END IF;
22947 ELSE
22948 --IF 'N' = l_proj_top_task_customer_flag
22949 l_customer_id := NULL;
22950 END IF;
22951
22952 /*UPDATE PA_TASKS
22953 SET invoice_method = l_invoice_method
22954 ,customer_id = l_customer_id
22955 WHERE project_id = l_project_id
22956 AND task_id = p_pa_task_id;*/
22957 --Bug 3279981 Review
22958
22959
22960 -- rtarway, BUG 3908013, replace dff attributes
22961 /*
22962 Bug 6153503
22963 There is no need to do delow validation here it will be done in update_one_task
22964 if (p_attribute_category is null or p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22965 then
22966 l_attribute_category := null;
22967 else
22968 l_attribute_category := p_attribute_category;
22969 end if;
22970
22971
22972
22973 if (p_attribute1 is null or p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22974 then
22975 l_attribute1 := null;
22976 else
22977 l_attribute1 := p_attribute1;
22978 end if;
22979
22980
22981
22982 if (p_attribute2 is null or p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22983 then
22984 l_attribute2 := null;
22985 else
22986 l_attribute2 := p_attribute2;
22987 end if;
22988
22989
22990 if (p_attribute3 is null or p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22991 then
22992 l_attribute3 := null;
22993 else
22994 l_attribute3 := p_attribute3;
22995 end if;
22996
22997 if (p_attribute4 is null or p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
22998 then
22999 l_attribute4 := null;
23000 else
23001 l_attribute4 := p_attribute4;
23002 end if;
23003
23004 if (p_attribute5 is null or p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23005 then
23006 l_attribute5 := null;
23007 else
23008 l_attribute5 := p_attribute5;
23009 end if;
23010
23011 if (p_attribute6 is null or p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23012 then
23013 l_attribute6 := null;
23014 else
23015 l_attribute6 := p_attribute6;
23016 end if;
23017
23018 if (p_attribute7 is null or p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23019 then
23020 l_attribute7 := null;
23021 else
23022 l_attribute7 := p_attribute7;
23023 end if;
23024
23025 if (p_attribute8 is null or p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23026 then
23027 l_attribute8 := null;
23028 else
23029 l_attribute8 := p_attribute8;
23030 end if;
23031
23032 if (p_attribute9 is null or p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23033 then
23034 l_attribute9 := null;
23035 else
23036 l_attribute9 := p_attribute9;
23037 end if;
23038
23039 if (p_attribute10 is null or p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23040 then
23041 l_attribute10 := null;
23042 else
23043 l_attribute10 := p_attribute10;
23044 end if;
23045 End Bug 6153503
23046 */
23047 --project structures
23048 -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
23049 -- --dbms_output.put_line('BEFORE CALLING UPDATE_ONE_TASK');
23050
23051 --Bug 6153503 start
23052 IF p_tasks_dff = 'Y' THEN
23053
23054 l_attribute_category := p_attribute_category;
23055
23056 l_attribute1 := p_attribute1;
23057 l_attribute2 := p_attribute2;
23058 l_attribute3 := p_attribute3;
23059 l_attribute4 := p_attribute4;
23060 l_attribute5 := p_attribute5;
23061
23062 l_attribute6 := p_attribute6;
23063 l_attribute7 := p_attribute7;
23064 l_attribute8 := p_attribute8;
23065 l_attribute9 := p_attribute9;
23066 l_attribute10 := p_attribute10;
23067
23068 l_wp_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23069
23070 l_wp_attribute1 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23071 l_wp_attribute2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23072 l_wp_attribute3 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23073 l_wp_attribute4 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23074 l_wp_attribute5 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23075
23076 l_wp_attribute6 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23077 l_wp_attribute7 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23078 l_wp_attribute8 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23079 l_wp_attribute9 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23080 l_wp_attribute10 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23081
23082 l_wp_attribute11 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23083 l_wp_attribute12 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23084 l_wp_attribute13 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23085 l_wp_attribute14 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23086 l_wp_attribute15 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23087
23088 ELSIF p_tasks_dff = 'N' THEN
23089
23090 l_wp_attribute_category := p_attribute_category;
23091
23092 l_wp_attribute1 := p_attribute1;
23093 l_wp_attribute2 := p_attribute2;
23094 l_wp_attribute3 := p_attribute3;
23095 l_wp_attribute4 := p_attribute4;
23096 l_wp_attribute5 := p_attribute5;
23097
23098 l_wp_attribute6 := p_attribute6;
23099 l_wp_attribute7 := p_attribute7;
23100 l_wp_attribute8 := p_attribute8;
23101 l_wp_attribute9 := p_attribute9;
23102 l_wp_attribute10 := p_attribute10;
23103
23104 l_wp_attribute11 := p_attribute11;
23105 l_wp_attribute12 := p_attribute12;
23106 l_wp_attribute13 := p_attribute13;
23107 l_wp_attribute14 := p_attribute14;
23108 l_wp_attribute15 := p_attribute15;
23109
23110 l_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23111
23112 l_attribute1 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23113 l_attribute2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23114 l_attribute3 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23115 l_attribute4 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23116 l_attribute5 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23117
23118 l_attribute6 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23119 l_attribute7 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23120 l_attribute8 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23121 l_attribute9 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23122 l_attribute10 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23123
23124 END IF;
23125
23126 --Bug 6153503 end
23127
23128 IF l_structure_type = 'FINANCIAL' --p_structure_type
23129 THEN
23130
23131 -- BUG 3908013, rtarway
23132 --In case of shared structure , null the values of dff fields. dff will be updated in elem_ver_schedule table only.
23133 /* Bug 6153503 start
23134 if nvl(l_is_wp_separate_from_fn,'N') = 'N'
23135 then
23136 l_attribute_category := null;
23137 l_attribute1 := null;
23138 l_attribute2 := null;
23139 l_attribute3 := null;
23140 l_attribute4 := null;
23141 l_attribute5 := null;
23142 l_attribute6 := null;
23143 l_attribute7 := null;
23144 l_attribute8 := null;
23145 l_attribute9 := null;
23146 l_attribute10 := null;
23147 end if;
23148 Bug 6153503 end
23149 */
23150
23151 --project structures
23152 ----dbms_output.put_line('value OF p_task_number BEFORE UPDATE_ONE_TASK'||p_task_number);
23153
23154 PA_PROJECT_PVT.Update_One_Task (
23155 p_api_version_number => p_api_version_number,
23156 p_commit => FND_API.G_FALSE,
23157 p_msg_count => p_msg_count,
23158 p_msg_data => p_msg_data,
23159 p_return_status => l_return_status,
23160 p_pm_product_code => p_pm_product_code,
23161 p_pa_project_id => l_project_id, --Bug#3747312
23162 p_pa_task_id => l_pa_task_id, --BUG 3919800, p_pa_task_id to l_pa_task_id
23163 p_pm_task_reference => p_pm_task_reference,
23164 p_task_number => p_task_number,
23165 p_task_name => p_task_name,
23166 p_long_task_name => l_long_task_name, /*Commented the p_long_task_name for bug 2982057*/
23167 p_task_description => p_task_description,
23168 p_task_start_date => p_task_start_date,
23169 p_task_completion_date => p_task_completion_date,
23170 -- Start Fix for Bug # 1289156
23171 p_early_start_date => p_early_start_date,
23172 p_early_finish_date => p_early_finish_date,
23173 p_late_start_date => p_late_start_date,
23174 p_late_finish_date => p_late_finish_date,
23175 -- p_actual_start_date => p_actual_start_date, --commented out for task progress
23176 -- p_actual_finish_date => p_actual_finish_date,
23177 p_scheduled_start_date => p_scheduled_start_date, -- 7245488
23178 p_scheduled_finish_date => p_scheduled_finish_date, /* bug 7245488 */
23179 -- End Fix for Bug # 1289156
23180 p_pm_parent_task_reference => p_pm_parent_task_reference,
23181 p_pa_parent_task_id => p_pa_parent_task_id,
23182 p_address_id => p_address_id,
23183 p_carrying_out_organization_id => p_carrying_out_organization_id,
23184 p_service_type_code => p_service_type_code,
23185 p_task_manager_person_id => p_task_manager_person_id,
23186 p_billable_flag => p_billable_flag,
23187 p_chargeable_flag => p_chargeable_flag,
23188 p_ready_to_bill_flag => p_ready_to_bill_flag,
23189 p_ready_to_distribute_flag => p_ready_to_distribute_flag,
23190 p_limit_to_txn_controls_flag => p_limit_to_txn_controls_flag,
23191 p_labor_bill_rate_org_id => p_labor_bill_rate_org_id,
23192 p_labor_std_bill_rate_schdl => p_labor_std_bill_rate_schdl,
23193 p_labor_schedule_fixed_date => p_labor_schedule_fixed_date,
23194 p_labor_schedule_discount => p_labor_schedule_discount,
23195 p_nl_bill_rate_org_id => p_nl_bill_rate_org_id,
23196 p_nl_std_bill_rate_schdl => p_nl_std_bill_rate_schdl,
23197 p_nl_schedule_fixed_date => p_nl_schedule_fixed_date,
23198 p_nl_schedule_discount => p_nl_schedule_discount,
23199 p_labor_cost_multiplier_name => p_labor_cost_multiplier_name,
23200 p_cost_ind_rate_sch_id => p_cost_ind_rate_sch_id,
23201 p_rev_ind_rate_sch_id => p_rev_ind_rate_sch_id,
23202 p_inv_ind_rate_sch_id => p_inv_ind_rate_sch_id,
23203 p_cost_ind_sch_fixed_date => p_cost_ind_sch_fixed_date,
23204 p_rev_ind_sch_fixed_date => p_rev_ind_sch_fixed_date,
23205 p_inv_ind_sch_fixed_date => p_inv_ind_sch_fixed_date,
23206 p_labor_sch_type => p_labor_sch_type,
23207 p_nl_sch_type => p_nl_sch_type,
23208 p_attribute_category => l_attribute_category,
23209 p_attribute1 => l_attribute1,
23210 p_attribute2 => l_attribute2,
23211 p_attribute3 => l_attribute3,
23212 p_attribute4 => l_attribute4,
23213 p_attribute5 => l_attribute5,
23214 p_attribute6 => l_attribute6,
23215 p_attribute7 => l_attribute7,
23216 p_attribute8 => l_attribute8,
23217 p_attribute9 => l_attribute9,
23218 p_attribute10 => l_attribute10,
23219 p_allow_cross_charge_flag => p_allow_cross_charge_flag,
23220 p_project_rate_type => p_project_rate_type,
23221 p_project_rate_date => p_project_rate_date,
23222 p_cc_process_labor_flag => p_cc_process_labor_flag,
23223 p_labor_tp_schedule_id => p_labor_tp_schedule_id,
23224 p_labor_tp_fixed_date => p_labor_tp_fixed_date,
23225 p_cc_process_nl_flag => p_cc_process_nl_flag,
23226 p_nl_tp_schedule_id => p_nl_tp_schedule_id,
23227 p_nl_tp_fixed_date => p_nl_tp_fixed_date,
23228 p_receive_project_invoice_flag => p_receive_project_invoice_flag,
23229 p_work_type_id => p_work_type_id,
23230 p_emp_bill_rate_schedule_id => p_emp_bill_rate_schedule_id,
23231 p_job_bill_rate_schedule_id => p_job_bill_rate_schedule_id,
23232
23233 --Sakthi MCB
23234 p_non_lab_std_bill_rt_sch_id => p_non_lab_std_bill_rt_sch_id,
23235 p_taskfunc_cost_rate_type => p_taskfunc_cost_rate_type,
23236 p_taskfunc_cost_rate_date => p_taskfunc_cost_rate_date,
23237
23238 --Sakthi MCB
23239 p_labor_disc_reason_code => p_labor_disc_reason_code,
23240 p_non_labor_disc_reason_code => p_non_labor_disc_reason_code,
23241
23242 --PA L Changes 2872708
23243 p_retirement_cost_flag => p_retirement_cost_flag,
23244 p_cint_eligible_flag => p_cint_eligible_flag,
23245 p_cint_stop_date => p_cint_stop_date,
23246 --End PA L Changes 2872708
23247 --Added by rtarway for BUG 4106154
23248 p_gen_etc_source_code => p_gen_etc_source_code,
23249
23250 --Bug 3279981 Review
23251 p_invoice_method => l_invoice_method,
23252 p_customer_id => l_customer_id,
23253 --Bug 3279981 Review
23254 p_out_pa_task_id => l_out_pa_task_id,
23255 p_out_pm_task_reference => l_out_pm_task_reference );
23256 -- --dbms_output.put_line('after CALLING UPDATE_ONE_TASK');
23257 p_return_status := l_return_status;
23258 -- --dbms_output.put_line('p_return_status'||p_return_status);
23259 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23260 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23261 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23262 RAISE FND_API.G_EXC_ERROR;
23263 END IF;
23264
23265 p_out_pa_task_id := l_out_pa_task_id;
23266 p_out_pm_task_reference := l_out_pm_task_reference;
23267
23268 --BUG 4081329, rtarway, update all child tasks which have null completion date, if completion date is getting updated
23269 --Fix for 7427388
23270 /*if (p_task_completion_date is not null and p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) then
23271 open cur_get_child_task_dates (l_project_id,l_pa_task_id);
23272 fetch cur_get_child_task_dates bulk collect into l_task_id_tbl,
23273 l_start_date_tbl,
23274 l_completion_date_tbl;
23275 close cur_get_child_task_dates;
23276 if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23277 FORALL i in l_task_id_tbl.first..l_task_id_tbl.last
23278 update pa_tasks set completion_date = p_task_completion_date where task_id = l_task_id_tbl(i)
23279 and project_id = l_project_id;
23280 end if;
23281 end if;*/
23282
23283 if ( p_task_completion_date is not null and p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) then
23284 open cur_get_child_task_dates (l_project_id,l_pa_task_id);
23285 fetch cur_get_child_task_dates bulk collect into l_task_id_tbl,
23286 l_start_date_tbl,
23287 l_completion_date_tbl,
23288 l_parent_task_id_tbl;
23289 close cur_get_child_task_dates;
23290 if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23291 FOR i in l_task_id_tbl.first..l_task_id_tbl.last LOOP
23292 IF l_parent_task_id_tbl(i) IS NOT NULL AND l_start_date_tbl(i) is NULL THEN
23293 SELECT start_date
23294 INTO l_parent_task_date
23295 FROM pa_tasks
23296 WHERE task_id = l_parent_task_id_tbl(i);
23297
23298 UPDATE pa_tasks
23299 SET completion_date = p_task_completion_date,
23300 start_date = l_parent_task_date
23301 WHERE task_id = l_task_id_tbl(i);
23302
23303 ELSE
23304 UPDATE pa_tasks
23305 SET completion_date = p_task_completion_date
23306 WHERE task_id = l_task_id_tbl(i);
23307 END IF;
23308 END LOOP;
23309 end if;
23310 end if;
23311 --End of fix for 7427388
23312
23313 --bug 2665656
23314 -- --dbms_output.put_line('p_pm_product_code'||p_pm_product_code);
23315 -- --dbms_output.put_line('p_update_task_structure'||p_update_task_structure);
23316 -- --dbms_output.put_line('p_structure_type'||p_structure_type);
23317 ----dbms_output.put_line('value of l_out_pa_task_id'||l_out_pa_task_id);
23318 ----dbms_output.put_line('value of l_out_pm_task_reference'||l_out_pm_task_reference);
23319
23320 IF (NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN') AND (p_update_task_structure = 'Y') --Added for bug 2931183
23321 THEN
23322 --bug 2665656
23323 -- Bug 3106457
23324 -- --dbms_output.put_line('Going into this loop');
23325 -- --dbms_output.put_line('p_structure_version_id : '||p_structure_version_id);
23326 --BUG 3919800, p_structure_version_id to l_structure_version_id, rtarway
23327 IF l_structure_version_id IS NULL
23328 OR l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3174639
23329 THEN
23330 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
23331 ELSE
23332 l_structure_version_id := p_structure_version_id;
23333 END IF;
23334 -- --dbms_output.put_line('BEFORE CALLING UPDATE_task_structure');
23335 -- --dbms_output.put_line('l_structure_version_id IS'||l_structure_version_id);
23336
23337
23338 ----dbms_output.put_line('Value of p_task_number passed to update_task_structure'||p_task_number);
23339
23340 PA_PROJ_TASK_STRUC_PUB.update_task_structure
23341 (
23342 p_calling_module => 'AMG'
23343 ,p_task_id => l_pa_task_id --BUG 3919800, rtarway
23344 ,p_ref_task_id => l_ref_task_id --Bug 3705333 changed from p_ref_task_id to l_ref_task_id
23345 ,p_project_id => l_project_id
23346 ,p_task_number => p_task_number
23347 ,p_task_name => l_long_task_name ----bug 2833194 -- for bug# 3749447
23348 ,p_task_description => p_task_description
23349 ,p_carrying_out_organization_id => p_carrying_out_organization_id
23350 ,p_task_manager_id => p_task_manager_person_id
23351 ,p_pm_product_code => p_pm_product_code
23352 ,p_pm_task_reference => p_pm_task_reference
23353 ,p_location_id => p_address_id
23354 ,p_structure_type => l_structure_type --Bug#3747312 p_structure_type
23355 ,p_OBLIGATION_START_DATE => p_OBLIGATION_START_DATE
23356 ,p_OBLIGATION_FINISH_DATE => p_OBLIGATION_FINISH_DATE
23357 ,p_ESTIMATED_START_DATE => p_ESTIMATED_START_DATE
23358 ,p_ESTIMATED_FINISH_DATE => p_ESTIMATED_FINISH_DATE
23359 ,p_BASELINE_START_DATE => p_BASELINE_START_DATE
23360 ,p_BASELINE_FINISH_DATE => p_BASELINE_FINISH_DATE
23361 ,p_CLOSED_DATE => p_CLOSED_DATE
23362 ,p_WQ_UOM_CODE => p_WQ_UOM_CODE
23363 ,p_WQ_ITEM_CODE => p_WQ_ITEM_CODE
23364 ,p_STATUS_CODE => p_STATUS_CODE
23365 ,p_WF_STATUS_CODE => p_WF_STATUS_CODE
23366 ,p_PRIORITY_CODE => p_PRIORITY_CODE
23367 ,p_MILESTONE_FLAG => p_MILESTONE_FLAG
23368 ,p_CRITICAL_FLAG => p_CRITICAL_FLAG
23369 ,p_INC_PROJ_PROGRESS_FLAG => p_INC_PROJ_PROGRESS_FLAG
23370 ,p_LINK_TASK_FLAG => p_LINK_TASK_FLAG
23371 ,p_CALENDAR_ID => p_CALENDAR_ID
23372 ,p_PLANNED_EFFORT => p_PLANNED_EFFORT
23373 ,p_DURATION => p_DURATION
23374 ,p_PLANNED_WORK_QUANTITY => p_PLANNED_WORK_QUANTITY
23375 ,p_TASK_TYPE => p_TASK_TYPE
23376 ,p_actual_start_date => p_actual_start_date
23377 ,p_actual_finish_date => p_actual_finish_date
23378 ,p_early_start_date => p_early_start_date
23379 ,p_early_finish_date => p_early_finish_date
23380 ,p_late_start_date => p_late_start_date
23381 ,p_late_finish_date => p_late_finish_date
23382 ,p_scheduled_start_date => p_scheduled_start_date
23383 ,p_scheduled_finish_date => p_scheduled_finish_date
23384 --Commented by rtarway for BUG 3663712
23385 --,p_structure_version_id => p_structure_version_id
23386 ,p_structure_version_id => l_structure_version_id
23387 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
23388 ,p_ext_act_duration => p_ext_act_duration
23389 ,p_ext_remain_duration => p_ext_remain_duration
23390 ,p_ext_sch_duration => p_ext_sch_duration
23391 -- (End venkat) new params for bug #3450684 -------------------------------------------------
23392 --Bug 6153503 start
23393 ,p_attribute_category => l_wp_attribute_category
23394 ,p_attribute1 => l_wp_attribute1
23395 ,p_attribute2 => l_wp_attribute2
23396 ,p_attribute3 => l_wp_attribute3
23397 ,p_attribute4 => l_wp_attribute4
23398 ,p_attribute5 => l_wp_attribute5
23399 ,p_attribute6 => l_wp_attribute6
23400 ,p_attribute7 => l_wp_attribute7
23401 ,p_attribute8 => l_wp_attribute8
23402 ,p_attribute9 => l_wp_attribute9
23403 ,p_attribute10 => l_wp_attribute10
23404 ,p_attribute11 => l_wp_attribute11
23405 ,p_attribute12 => l_wp_attribute12
23406 ,p_attribute13 => l_wp_attribute13
23407 ,p_attribute14 => l_wp_attribute14
23408 ,p_attribute15 => l_wp_attribute15
23409 --Bug 6153503 end
23410 -- set the new params - bug #3654243 ----------------------------------------------
23411 ,p_base_percent_comp_deriv_code => p_base_percent_comp_deriv_code
23412 ,p_sch_tool_tsk_type_code => p_sch_tool_tsk_type_code
23413 ,p_constraint_type_code => p_constraint_type_code
23414 ,p_constraint_date => p_constraint_date
23415 ,p_free_slack => p_free_slack
23416 ,p_total_slack => p_total_slack
23417 ,p_effort_driven_flag => p_effort_driven_flag
23418 ,p_level_assignments_flag => p_level_assignments_flag
23419 ,p_invoice_method => p_invoice_method
23420 ,p_customer_id => p_customer_id
23421 ,p_gen_etc_source_code => p_gen_etc_source_code
23422 -- set the new params - bug #3654243 -------------------------------------------------
23423
23424 -- Progress Management Changes. Bug # 3420093.
23425 ,p_etc_effort => p_etc_effort
23426 ,p_percent_complete => p_percent_complete
23427 -- Progress Management Changes. Bug # 3420093.
23428 --Added by rtarway for BUG 3908013
23429 /* Values are already being passed above. Ref Bug #6153503
23430 ,p_attribute_category => p_attribute_category
23431 ,p_attribute1 => p_attribute1
23432 ,p_attribute2 => p_attribute2
23433 ,p_attribute3 => p_attribute3
23434 ,p_attribute4 => p_attribute4
23435 ,p_attribute5 => p_attribute5
23436 ,p_attribute6 => p_attribute6
23437 ,p_attribute7 => p_attribute7
23438 ,p_attribute8 => p_attribute8
23439 ,p_attribute9 => p_attribute9
23440 ,p_attribute10 => p_attribute10 */
23441 --end add by rtarway, 3908013
23442 ,x_msg_count => l_msg_count
23443 ,x_msg_data => l_msg_data
23444 ,x_return_status => l_return_status
23445
23446 );
23447 ----dbms_output.put_line('return status of update_task_struc '||l_return_status);
23448
23449 END IF;
23450
23451 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23452 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23453 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23454 RAISE FND_API.G_EXC_ERROR;
23455 END IF;
23456
23457 ELSIF l_structure_type = 'WORKPLAN' --p_structure_type
23458 THEN
23459 -- Moved this code up. As this should be the first validation the should be performed
23460 -- IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
23461 --If update task is called from update_project api then PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN wont be called
23462 --bcoz G_IS_WP_SEPARATE_FROM_FN will already be set by upate_project.
23463 -- NVL( G_IS_WP_SEPARATE_FROM_FN, PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) ) = 'N' --bug 2876703 update_task
23464 --THEN
23465 -- IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
23466 -- THEN
23467 -- pa_interface_utils_pub.map_new_amg_msg
23468 -- ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
23469 -- ,p_msg_attribute => 'CHANGE'
23470 -- ,p_resize_flag => 'N'
23471 -- ,p_msg_context => 'GENERAL'
23472 -- ,p_attribute1 => ''
23473 -- ,p_attribute2 => ''
23474 -- ,p_attribute3 => ''
23475 -- ,p_attribute4 => ''
23476 -- ,p_attribute5 => '');
23477 -- END IF;
23478 -- RAISE FND_API.G_EXC_ERROR;
23479 -- END IF;
23480
23481 -- Actions performed using the APIs would be subject to
23482 -- function security. If the responsibility does not allow
23483 -- such functions to be executed, the API should not proceed further
23484 -- since the user does not have access to such functions
23485
23486
23487 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
23488 (p_api_version_number => p_api_version_number,
23489 p_responsibility_id => l_resp_id,
23490 p_function_name => 'PA_PM_UPDATE_TASK',
23491 p_msg_count => l_msg_count,
23492 p_msg_data => l_msg_data,
23493 p_return_status => l_return_status,
23494 p_function_allowed => l_function_allowed );
23495
23496 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23497 THEN
23498 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23499
23500 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23501 THEN
23502 RAISE FND_API.G_EXC_ERROR;
23503 END IF;
23504 IF l_function_allowed = 'N' THEN
23505 pa_interface_utils_pub.map_new_amg_msg
23506 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
23507 ,p_msg_attribute => 'CHANGE'
23508 ,p_resize_flag => 'Y'
23509 ,p_msg_context => 'GENERAL'
23510 ,p_attribute1 => ''
23511 ,p_attribute2 => ''
23512 ,p_attribute3 => ''
23513 ,p_attribute4 => ''
23514 ,p_attribute5 => '');
23515 p_return_status := FND_API.G_RET_STS_ERROR;
23516 RAISE FND_API.G_EXC_ERROR;
23517 END IF;
23518
23519 --Project Structures Integration
23520 ----dbms_output.put_line('l_structure_version_id--ut'||l_structure_version_id);
23521 IF ( l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
23522 l_structure_version_id IS NULL )
23523 THEN
23524 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
23525 THEN
23526 pa_interface_utils_pub.map_new_amg_msg
23527 ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
23528 ,p_msg_attribute => 'CHANGE'
23529 ,p_resize_flag => 'N'
23530 ,p_msg_context => 'GENERAL'
23531 ,p_attribute1 => ''
23532 ,p_attribute2 => ''
23533 ,p_attribute3 => ''
23534 ,p_attribute4 => ''
23535 ,p_attribute5 => '');
23536 END IF;
23537 RAISE FND_API.G_EXC_ERROR;
23538 p_return_status := FND_API.G_RET_STS_SUCCESS;
23539 END IF;
23540 -- Bug 3106457. This is not null.
23541 --Commented by rtarway for BUG 3919800
23542 --l_structure_version_id := p_structure_version_id;
23543 --Added by rtarway for BUG 4106154
23544 if (l_update_pa_tasks = 'Y' AND
23545 --Added by rtarway for bug 4321313
23546 PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_pa_task_id) = 'Y'
23547 ) then
23548
23549 --In case of Shared Structures, we do not need to update dff attributes in pa_tasks, instead
23550 --dff fields of pa_proj_elem_ver_schedule are updated
23551
23552 PA_PROJECT_PVT.Update_One_Task
23553 (
23554 p_api_version_number => p_api_version_number,
23555 p_commit => FND_API.G_FALSE,
23556 p_msg_count => p_msg_count,
23557 p_msg_data => p_msg_data,
23558 p_return_status => l_return_status,
23559 p_pm_product_code => p_pm_product_code,
23560 p_pa_project_id => l_project_id,
23561 p_pa_task_id => l_pa_task_id,
23562 p_pm_task_reference => p_pm_task_reference,
23563 p_task_number => p_task_number,
23564 p_task_name => p_task_name,
23565 p_long_task_name => l_long_task_name,
23566 p_task_description => p_task_description,
23567 p_task_start_date => p_task_start_date,
23568 p_task_completion_date => p_task_completion_date,
23569 p_early_start_date => p_early_start_date,
23570 p_early_finish_date => p_early_finish_date,
23571 p_late_start_date => p_late_start_date,
23572 p_late_finish_date => p_late_finish_date,
23573 p_scheduled_start_date => p_scheduled_start_date, -- 7245488
23574 p_scheduled_finish_date => p_scheduled_finish_date, /* bug 7245488 */
23575 p_pm_parent_task_reference => p_pm_parent_task_reference,
23576 p_pa_parent_task_id => p_pa_parent_task_id,
23577 p_address_id => p_address_id,
23578 p_carrying_out_organization_id => p_carrying_out_organization_id,
23579 p_service_type_code => p_service_type_code,
23580 p_task_manager_person_id => p_task_manager_person_id,
23581 p_billable_flag => p_billable_flag,
23582 p_chargeable_flag => p_chargeable_flag,
23583 p_ready_to_bill_flag => p_ready_to_bill_flag,
23584 p_ready_to_distribute_flag => p_ready_to_distribute_flag,
23585 p_limit_to_txn_controls_flag => p_limit_to_txn_controls_flag,
23586 p_labor_bill_rate_org_id => p_labor_bill_rate_org_id,
23587 p_labor_std_bill_rate_schdl => p_labor_std_bill_rate_schdl,
23588 p_labor_schedule_fixed_date => p_labor_schedule_fixed_date,
23589 p_labor_schedule_discount => p_labor_schedule_discount,
23590 p_nl_bill_rate_org_id => p_nl_bill_rate_org_id,
23591 p_nl_std_bill_rate_schdl => p_nl_std_bill_rate_schdl,
23592 p_nl_schedule_fixed_date => p_nl_schedule_fixed_date,
23593 p_nl_schedule_discount => p_nl_schedule_discount,
23594 p_labor_cost_multiplier_name => p_labor_cost_multiplier_name,
23595 p_cost_ind_rate_sch_id => p_cost_ind_rate_sch_id,
23596 p_rev_ind_rate_sch_id => p_rev_ind_rate_sch_id,
23597 p_inv_ind_rate_sch_id => p_inv_ind_rate_sch_id,
23598 p_cost_ind_sch_fixed_date => p_cost_ind_sch_fixed_date,
23599 p_rev_ind_sch_fixed_date => p_rev_ind_sch_fixed_date,
23600 p_inv_ind_sch_fixed_date => p_inv_ind_sch_fixed_date,
23601 p_labor_sch_type => p_labor_sch_type,
23602 p_nl_sch_type => p_nl_sch_type,
23603 --Bug 6153503 start
23604 p_attribute_category => l_attribute_category,
23605 p_attribute1 => l_attribute1,
23606 p_attribute2 => l_attribute2,
23607 p_attribute3 => l_attribute3,
23608 p_attribute4 => l_attribute4,
23609 p_attribute5 => l_attribute5,
23610 p_attribute6 => l_attribute6,
23611 p_attribute7 => l_attribute7,
23612 p_attribute8 => l_attribute8,
23613 p_attribute9 => l_attribute9,
23614 p_attribute10 => l_attribute10,
23615 --Bug 6153503 end
23616 p_allow_cross_charge_flag => p_allow_cross_charge_flag,
23617 p_project_rate_type => p_project_rate_type,
23618 p_project_rate_date => p_project_rate_date,
23619 p_cc_process_labor_flag => p_cc_process_labor_flag,
23620 p_labor_tp_schedule_id => p_labor_tp_schedule_id,
23621 p_labor_tp_fixed_date => p_labor_tp_fixed_date,
23622 p_cc_process_nl_flag => p_cc_process_nl_flag,
23623 p_nl_tp_schedule_id => p_nl_tp_schedule_id,
23624 p_nl_tp_fixed_date => p_nl_tp_fixed_date,
23625 p_receive_project_invoice_flag => p_receive_project_invoice_flag,
23626 p_work_type_id => p_work_type_id,
23627 p_emp_bill_rate_schedule_id => p_emp_bill_rate_schedule_id,
23628 p_job_bill_rate_schedule_id => p_job_bill_rate_schedule_id,
23629 p_non_lab_std_bill_rt_sch_id => p_non_lab_std_bill_rt_sch_id,
23630 p_taskfunc_cost_rate_type => p_taskfunc_cost_rate_type,
23631 p_taskfunc_cost_rate_date => p_taskfunc_cost_rate_date,
23632 p_labor_disc_reason_code => p_labor_disc_reason_code,
23633 p_non_labor_disc_reason_code => p_non_labor_disc_reason_code,
23634 p_retirement_cost_flag => p_retirement_cost_flag,
23635 p_cint_eligible_flag => p_cint_eligible_flag,
23636 p_cint_stop_date => p_cint_stop_date,
23637 p_gen_etc_source_code => p_gen_etc_source_code,
23638 p_invoice_method => l_invoice_method,
23639 p_customer_id => l_customer_id,
23640 p_out_pa_task_id => l_out_pa_task_id,
23641 p_out_pm_task_reference => l_out_pm_task_reference
23642 );
23643
23644 p_return_status := l_return_status;
23645
23646 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23647 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23648 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23649 RAISE FND_API.G_EXC_ERROR;
23650 END IF;
23651 end if;
23652 --End Added by rtarway for BUG 4106154
23653
23654 --bug 2665656
23655 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN'
23656 THEN
23657 --bug 2665656
23658 PA_PROJ_TASK_STRUC_PUB.update_task_structure
23659 (
23660 p_calling_module => 'AMG'
23661 ,p_task_id => l_pa_task_id --BUG 3919800, rtarway
23662 ,p_ref_task_id => l_ref_task_id --Bug 3705333 changed from p_ref_task_id to l_ref_task_id
23663 ,p_project_id => l_project_id
23664 ,p_task_number => p_task_number
23665 ,p_task_name => l_long_task_name ----bug 2833194 , -- bug# 3749447
23666 ,p_task_description => p_task_description
23667 ,p_carrying_out_organization_id => p_carrying_out_organization_id
23668 ,p_task_manager_id => p_task_manager_person_id
23669 ,p_pm_product_code => p_pm_product_code
23670 ,p_pm_task_reference => p_pm_task_reference
23671 ,p_location_id => p_address_id
23672 ,p_structure_type => l_structure_type --p_structure_type
23673 ,p_OBLIGATION_START_DATE => p_OBLIGATION_START_DATE
23674 ,p_OBLIGATION_FINISH_DATE => p_OBLIGATION_FINISH_DATE
23675 ,p_ESTIMATED_START_DATE => p_ESTIMATED_START_DATE
23676 ,p_ESTIMATED_FINISH_DATE => p_ESTIMATED_FINISH_DATE
23677 ,p_BASELINE_START_DATE => p_BASELINE_START_DATE
23678 ,p_BASELINE_FINISH_DATE => p_BASELINE_FINISH_DATE
23679 ,p_CLOSED_DATE => p_CLOSED_DATE
23680 ,p_WQ_UOM_CODE => p_WQ_UOM_CODE
23681 ,p_WQ_ITEM_CODE => p_WQ_ITEM_CODE
23682 ,p_STATUS_CODE => p_STATUS_CODE
23683 ,p_WF_STATUS_CODE => p_WF_STATUS_CODE
23684 ,p_PRIORITY_CODE => p_PRIORITY_CODE
23685 ,p_MILESTONE_FLAG => p_MILESTONE_FLAG
23686 ,p_CRITICAL_FLAG => p_CRITICAL_FLAG
23687 ,p_INC_PROJ_PROGRESS_FLAG => p_INC_PROJ_PROGRESS_FLAG
23688 ,p_LINK_TASK_FLAG => p_LINK_TASK_FLAG
23689 ,p_CALENDAR_ID => p_CALENDAR_ID
23690 ,p_PLANNED_EFFORT => p_PLANNED_EFFORT
23691 ,p_DURATION => p_DURATION
23692 ,p_PLANNED_WORK_QUANTITY => p_PLANNED_WORK_QUANTITY
23693 ,p_TASK_TYPE => p_TASK_TYPE
23694 ,p_actual_start_date => p_actual_start_date
23695 ,p_actual_finish_date => p_actual_finish_date
23696 ,p_early_start_date => p_early_start_date
23697 ,p_early_finish_date => p_early_finish_date
23698 ,p_late_start_date => p_late_start_date
23699 ,p_late_finish_date => p_late_finish_date
23700 ,p_scheduled_start_date => p_scheduled_start_date
23701 ,p_scheduled_finish_date => p_scheduled_finish_date
23702 --Commented by rtarway, BUG 3663712
23703 --,p_structure_version_id => p_structure_version_id
23704 ,p_structure_version_id => l_structure_version_id
23705 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
23706 ,p_ext_act_duration => p_ext_act_duration
23707 ,p_ext_remain_duration => p_ext_remain_duration
23708 ,p_ext_sch_duration => p_ext_sch_duration
23709 -- (End venkat) new params for bug #3450684 -------------------------------------------------
23710 --Bug 6153503 start
23711 ,p_attribute_category => l_wp_attribute_category
23712 ,p_attribute1 => l_wp_attribute1
23713 ,p_attribute2 => l_wp_attribute2
23714 ,p_attribute3 => l_wp_attribute3
23715 ,p_attribute4 => l_wp_attribute4
23716 ,p_attribute5 => l_wp_attribute5
23717 ,p_attribute6 => l_wp_attribute6
23718 ,p_attribute7 => l_wp_attribute7
23719 ,p_attribute8 => l_wp_attribute8
23720 ,p_attribute9 => l_wp_attribute9
23721 ,p_attribute10 => l_wp_attribute10
23722 ,p_attribute11 => l_wp_attribute11
23723 ,p_attribute12 => l_wp_attribute12
23724 ,p_attribute13 => l_wp_attribute13
23725 ,p_attribute14 => l_wp_attribute14
23726 ,p_attribute15 => l_wp_attribute15
23727 --Bug 6153503 end
23728 -- set the new params - bug #3654243 ----------------------------------------------
23729 ,p_base_percent_comp_deriv_code => p_base_percent_comp_deriv_code
23730 ,p_sch_tool_tsk_type_code => p_sch_tool_tsk_type_code
23731 ,p_constraint_type_code => p_constraint_type_code
23732 ,p_constraint_date => p_constraint_date
23733 ,p_free_slack => p_free_slack
23734 ,p_total_slack => p_total_slack
23735 ,p_effort_driven_flag => p_effort_driven_flag
23736 ,p_level_assignments_flag => p_level_assignments_flag
23737 ,p_invoice_method => p_invoice_method
23738 ,p_customer_id => p_customer_id
23739 ,p_gen_etc_source_code => p_gen_etc_source_code
23740 -- set the new params - bug #3654243 -------------------------------------------------
23741
23742
23743 -- Progress Management Changes. Bug # 3420093.
23744 ,p_etc_effort => p_etc_effort
23745 ,p_percent_complete => p_percent_complete
23746 -- Progress Management Changes. Bug # 3420093.
23747
23748 ,x_msg_count => l_msg_count
23749 ,x_msg_data => l_msg_data
23750 ,x_return_status => l_return_status
23751 --Added by rtarway for BUG 3908013
23752 /* Values are already being passed above. Ref Bug#6153503
23753 ,p_attribute_category => p_attribute_category
23754 ,p_attribute1 => p_attribute1
23755 ,p_attribute2 => p_attribute2
23756 ,p_attribute3 => p_attribute3
23757 ,p_attribute4 => p_attribute4
23758 ,p_attribute5 => p_attribute5
23759 ,p_attribute6 => p_attribute6
23760 ,p_attribute7 => p_attribute7
23761 ,p_attribute8 => p_attribute8
23762 ,p_attribute9 => p_attribute9
23763 ,p_attribute10 => p_attribute10 */
23764
23765 );
23766
23767 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23768 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23769 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23770 RAISE FND_API.G_EXC_ERROR;
23771 END IF;
23772 END IF; --<< p_pm_product_code = 'WORKPLAN' >>
23773
23774 p_out_pa_task_id := l_pa_task_id;--BUG 3919800, rtarway
23775 p_out_pm_task_reference := p_pm_task_reference ;
23776
23777
23778 --Project Structures Integration
23779 END IF; --<<p_structure_type>>
23780 --Begin Add by rtarway FP.M changes for Mapping
23781 --No Function Security Check required
23782 --Call the update_mapping only if p_mapped_task_reference or p_mapped_task_id is passed
23783 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
23784 IF (G_PROJECT_SHARING_TYPE = 'SPLIT_MAPPING' and nvl(l_is_wp_separate_from_fn,'N') = 'Y')
23785 THEN
23786 IF (
23787 ( p_mapped_task_reference IS NULL OR p_mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
23788 OR
23789 ( p_mapped_task_id IS NULL OR p_mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
23790 )
23791 THEN
23792 pa_project_pub.update_mapping
23793 (
23794 p_api_version => p_api_version_number
23795 , p_init_msg_list => p_init_msg_list
23796 , p_commit => FND_API.G_FALSE--bug 3766967
23797 , p_debug_mode => FND_API.G_TRUE
23798 , p_project_id => l_project_id --Bug#3747312 p_pa_project_id
23799 , p_proj_source_reference => null
23800 , p_wkp_structure_version_id => l_structure_version_id -- BUG 3919800, rtarway
23801 , p_wkp_task_id => l_pa_task_id--Since the tasks are already created , this will have task Ids
23802 , px_mapped_task_id => p_mapped_task_id------------|One of theses two should be passed
23803 , p_mapped_task_reference => p_mapped_task_reference ----|
23804 , x_return_status => l_return_status
23805 , x_msg_count => l_msg_count
23806 , x_msg_data => l_msg_data
23807
23808 );
23809 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23810 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23811 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23812 RAISE FND_API.G_EXC_ERROR;
23813 END IF;
23814 END IF;
23815 END IF;
23816
23817 --End Add by rtarway FP.M chages for Mapping
23818 --Begin Add by rtarway FP.M chages for Set Financial Task
23819 IF (G_PROJECT_SHARING_TYPE = 'SHARE_PARTIAL' and nvl(l_is_wp_separate_from_fn,'N') = 'N') THEN --l_structure_type
23820 --Get the task Version Id
23821 --BUG 3919800,p_structure_version_id and p_pa_task_id are replaced
23822 l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(l_structure_version_id, l_pa_task_id);
23823 OPEN c_get_pa_record_version_number ( l_task_version_id , l_project_id ); --Bug#3747312
23824 FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
23825 CLOSE c_get_pa_record_version_number;
23826 IF ( p_financial_task_flag IS NOT NULL AND p_financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23827 THEN
23828 PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
23829 (
23830 p_api_version => p_api_version_number
23831 , p_init_msg_list => p_init_msg_list
23832 , p_commit => FND_API.G_FALSE--bug 3766967
23833 , p_calling_module => 'AMG'
23834 , p_debug_mode => FND_API.G_TRUE
23835 , p_task_version_id => l_task_version_id
23836 , p_checked_flag => p_financial_task_flag
23837 , p_record_version_number => l_patask_record_version_number
23838 , p_project_id => l_project_id --Bug#3747312 p_pa_project_id
23839 , p_published_version_exists => G_Published_version_exists
23840 , x_return_status => l_return_status
23841 , x_msg_count => l_msg_count
23842 , x_msg_data => l_msg_data
23843 );
23844 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23845 THEN
23846 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23847 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23848 THEN
23849 RAISE FND_API.G_EXC_ERROR;
23850 END IF;
23851 END IF;
23852 END IF;
23853 --End Add by rtarway FP.M chages for Set Financial Task
23854
23855 -- p_out_pa_task_id := l_out_pa_task_id;
23856 -- p_out_pm_task_reference := l_out_pm_task_reference;
23857
23858 -- PA L Changes 3010538
23859 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
23860 -- publishing flow.
23861 AND p_calling_api <> 'UPDATE_PROJECT' --bug 4199694 This is required otherwise dates rollup and concurrent program will called in update_project flow multiple times.
23862 THEN
23863 ---bug 4199694
23864 --call directly the PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup api. No need to call the rollup_dates here as its called per task.
23865 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'Y'
23866 THEN
23867 IF l_task_version_id IS NULL
23868 THEN
23869 l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(l_structure_version_id, l_pa_task_id);
23870 END IF;
23871 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
23872 p_tasks_in => l_tasks_out
23873 ,p_task_version_id => l_task_version_id
23874 ,p_project_id => l_project_id
23875 ,P_structure_version_id => l_structure_version_id
23876 ,x_msg_count => l_msg_count
23877 ,x_msg_data => l_msg_data
23878 ,x_return_status => l_return_status
23879 );
23880
23881 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23882 THEN
23883 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23884
23885 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23886 THEN
23887 RAISE FND_API.G_EXC_ERROR;
23888 END IF;
23889 END IF;
23890 ---bug 4199694
23891
23892 -- These globals have been intialized before they are used!
23893 PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id ); -- Bug 3106457
23894 /* Commented the code below for bug#3451073
23895 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Bug 3106457 */
23896 /* Added the If condition Bug#3451073 */
23897 IF p_is_wp_seperate_from_fn = 'X'
23898 THEN
23899 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Bug 3106457
23900 ELSE
23901 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := p_is_wp_seperate_from_fn; -- Addded for bug#3451073
23902 END IF;
23903
23904 PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id ); -- Bug 3106457
23905
23906 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
23907 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
23908 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
23909 PA_PROJECT_PUB.G_Published_version_exists = 'N')
23910 THEN
23911
23912 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id -- Bug 3106457 p_pa_project_id
23913 ,p_structure_version_id => l_structure_version_id ) ; -- Bug 3106457
23914 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
23915 IF p_process_mode = 'ONLINE' THEN
23916
23917 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
23918 ,p_project_id => l_project_id -- Bug 3106457 p_pa_project_id
23919 ,p_structure_version_id => l_structure_version_id -- Bug 3106457 p_structure_version_id
23920 ,x_return_status => l_return_status
23921 ,x_msg_count => l_msg_count
23922 ,x_msg_data => l_msg_data ) ;
23923
23924 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23925 THEN
23926 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23927 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23928 THEN
23929 RAISE FND_API.G_EXC_ERROR;
23930 END IF;
23931 ELSIF p_process_mode = 'CONCURRENT' THEN
23932
23933 PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
23934 ,p_project_id => l_project_id --Bug 3106457 p_pa_project_id
23935 ,p_structure_version_id => l_structure_version_id -- Bug 3106457 p_structure_version_id
23936 ,x_return_status => l_return_status
23937 ,x_msg_count => l_msg_count
23938 ,x_msg_data => l_msg_data ) ;
23939
23940 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23941 THEN
23942 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23943 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23944 THEN
23945 RAISE FND_API.G_EXC_ERROR;
23946 END IF;
23947 END IF ;
23948 END IF ;
23949 END IF ;
23950 END IF;
23951 -- PA L Changes 3010538
23952
23953 -- FP-M Bug # 3301192 update task
23954 /*
23955 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_pa_project_id
23956 ,p_pm_task_reference => p_pm_task_reference
23957 ,p_out_task_id => l_d_task_id
23958 ,p_return_status => l_return_status);
23959 */
23960
23961 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN --Bug#3747312
23962
23963 IF l_d_task_id IS NULL AND p_pm_task_reference IS NOT NULL AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
23964 THEN
23965 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id --Bug#3747312 p_pa_project_id
23966 ,p_pm_task_reference => p_pm_task_reference
23967 ,p_out_task_id => l_d_task_id
23968 ,p_return_status => l_return_status);
23969 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23970 THEN
23971 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23972 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
23973 THEN
23974 RAISE FND_API.G_EXC_ERROR;
23975 END IF;
23976
23977 END IF;
23978 /*
23979 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id) = 'Y') THEN
23980 l_d_struct_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_d_task_id);
23981 ELSE
23982 l_d_struct_ver_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(p_pa_project_id, 'WORKPLAN');
23983 END IF;
23984 */ --we dont need this. The structure version id is derived.
23985
23986 l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_structure_version_id
23987 ,p_task_id => l_d_task_id);
23988
23989 pa_proj_task_struc_pub.parse_predecessor_import(p_string => p_pred_string
23990 ,p_delimeter => p_pred_delimiter
23991 ,p_task_version_Id => l_d_task_ver_id
23992 ,x_return_status => l_return_status
23993 ,x_msg_count => l_msg_count
23994 ,x_msg_data => l_msg_data);
23995
23996 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
23997 THEN
23998 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23999 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24000 THEN
24001 RAISE FND_API.G_EXC_ERROR;
24002 END IF;
24003 l_d_task_id := null;
24004 END IF;
24005 --bug 4218977, rtarway, unset this variable if not called from update_project
24006 if p_calling_api <> 'UPDATE_PROJECT' then
24007 G_OP_VALIDATE_FLAG := null;
24008 end if;
24009 EXCEPTION
24010
24011 WHEN FND_API.G_EXC_ERROR THEN
24012
24013 p_return_status := FND_API.G_RET_STS_ERROR ;
24014 --bug 4218977, rtarway, unset this variable if not called from update_project
24015 if p_calling_api <> 'UPDATE_PROJECT' then
24016 G_OP_VALIDATE_FLAG := null;
24017 end if;
24018 ROLLBACK TO Update_Task_pub;
24019
24020 -- 4537865
24021 p_out_pa_task_id := NULL ;
24022 p_out_pm_task_reference := NULL ;
24023 -- 4537865
24024
24025 FND_MSG_PUB.Count_And_Get
24026 ( p_count => p_msg_count ,
24027 p_data => p_msg_data );
24028
24029 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
24030
24031 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
24032 ROLLBACK TO Update_Task_pub;
24033 --bug 4218977, rtarway, unset this variable if not called from update_project
24034 if p_calling_api <> 'UPDATE_PROJECT' then
24035 G_OP_VALIDATE_FLAG := null;
24036 end if;
24037
24038 -- 4537865
24039 p_out_pa_task_id := NULL ;
24040 p_out_pm_task_reference := NULL ;
24041 -- 4537865
24042
24043 FND_MSG_PUB.Count_And_Get
24044 ( p_count => p_msg_count ,
24045 p_data => p_msg_data );
24046
24047 WHEN OTHERS THEN
24048
24049 ROLLBACK TO Update_Task_pub;
24050 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
24051 --bug 4218977, rtarway, unset this variable if not called from update_project
24052 if p_calling_api <> 'UPDATE_PROJECT' then
24053 G_OP_VALIDATE_FLAG := null;
24054 end if;
24055
24056 -- 4537865
24057 p_out_pa_task_id := NULL ;
24058 p_out_pm_task_reference := NULL ;
24059 -- 4537865
24060
24061 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
24062
24063 FND_MSG_PUB.add_exc_msg
24064 ( p_pkg_name => G_PKG_NAME
24065 , p_procedure_name => l_api_name );
24066
24067 END IF;
24068
24069 FND_MSG_PUB.Count_And_Get
24070 ( p_count => p_msg_count ,
24071 p_data => p_msg_data );
24072
24073 END update_task;
24074
24075 --------------------------------------------------------------------------------
24076 --Name: execute_update_project
24077 --Type: Procedure
24078 --Description: This procedure can be used to update a project
24079 -- using global PL/SQL tables.
24080 --
24081 --Called subprograms:
24082 --
24083 --
24084 --
24085 --History:
24086 -- 15-AUG-1996 R. Krishnamurthy Created
24087 -- 05-DEC-1996 L. de Werker Added initialisation of message list
24088 -- 22-DEC-97 jwhite - Added OUT-parameter p_workflow_started
24089 -- for workflow.
24090 --
24091
24092 PROCEDURE execute_update_project
24093 ( p_api_version_number IN NUMBER
24094 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
24095 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24096 ,p_op_validate_flag IN VARCHAR2 := 'Y'--added by rtarway, bug 4218977
24097 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24098 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24099 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24100 ,p_workflow_started OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24101 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24102 ,p_pass_entire_structure IN VARCHAR2 := 'N' -- Added for bug 3696234 : Bug 3627124
24103 ,p_update_mode IN VARCHAR2 := 'PA_UPD_WBS_ATTR' -- rtarway, for DHI ER, BUG 4413568 --bug 4534919
24104 )
24105 IS
24106
24107 l_api_name CONSTANT VARCHAR2(30):='Execute_update_project';
24108 l_return_status VARCHAR2(1) ;
24109
24110 BEGIN
24111
24112 SAVEPOINT execute_update_project_pub;
24113
24114 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
24115 p_api_version_number ,
24116 l_api_name ,
24117 G_PKG_NAME )
24118 THEN
24119
24120 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24121
24122 END IF;
24123
24124 -- Initialize the message table if requested.
24125
24126 IF FND_API.TO_BOOLEAN( p_init_msg_list )
24127 THEN
24128
24129 FND_MSG_PUB.initialize;
24130
24131 END IF;
24132
24133 p_return_status := FND_API.G_RET_STS_SUCCESS;
24134
24135 -- Begin code to fix Bug # 4314797.
24136
24137 -- In the publish workplan flow, we do not need to update key members so we can clear the global
24138 -- g_key_members_in_tbl table. Further, in the 'create project and publish workplan version' flow
24139 -- from MSP where the g_key_members_in_tbl would be populated during the create project flow
24140 -- we need to clear the g_key_members_in_tbl before calling the API: update_project() in the publish
24141 -- workplan flow to prevent errors.
24142
24143 if nvl(p_pm_product_code,'WORKPLAN') = 'WORKPLAN' then
24144
24145 g_key_members_in_tbl.delete;
24146
24147 end if;
24148
24149 -- End code to fix Bug # 4314797.
24150
24151
24152 Update_Project ( p_api_version_number => p_api_version_number,
24153 p_commit => FND_API.G_FALSE,
24154 p_return_status => l_return_status,
24155 p_msg_count => p_msg_count,
24156 p_msg_data => p_msg_data,
24157 p_workflow_started => p_workflow_started,
24158 p_pm_product_code => p_pm_product_code,
24159 p_op_validate_flag => p_op_validate_flag, --Added by rtarway 4218977
24160 p_project_in => g_project_in_rec,
24161 p_project_out => g_project_out_rec,
24162 p_key_members => g_key_members_in_tbl,
24163 p_class_categories => g_class_categories_in_tbl,
24164 p_tasks_in => g_tasks_in_tbl,
24165 p_tasks_out => g_tasks_out_tbl,
24166 p_org_roles => g_org_roles_in_tbl
24167 ,p_pass_entire_structure => p_pass_entire_structure -- Added for bug 3696234 : Bug 3627124
24168 --bug 3096203
24169 ,p_ext_attr_tbl_in => G_ext_attr_in_tbl
24170 --bug 3096203
24171 --FP M : deliverables
24172 ,p_deliverables_in => G_deliverables_in_tbl
24173 -- ,p_deliverables_out => G_deliverables_out_tbl
24174 ,p_deliverable_actions_in => G_deliverable_actions_in_tbl
24175 -- ,p_deliverable_actions_out => G_deliverable_actions_out_tbl
24176 ,p_update_mode => p_update_mode --DHI ER bug 4413568
24177 --FP M : deliverables
24178 );
24179
24180 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24181 THEN
24182
24183 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24184
24185 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24186 THEN
24187
24188 RAISE FND_API.G_EXC_ERROR;
24189 END IF;
24190
24191
24192 IF FND_API.to_boolean( p_commit )
24193 THEN
24194 COMMIT;
24195 END IF;
24196
24197
24198 EXCEPTION
24199
24200 WHEN FND_API.G_EXC_ERROR
24201 THEN
24202 ROLLBACK TO execute_update_project_pub;
24203
24204 p_return_status := FND_API.G_RET_STS_ERROR;
24205
24206 -- 4537865
24207 p_workflow_started := NULL ;
24208 -- 4537865
24209
24210 FND_MSG_PUB.Count_And_Get
24211 ( p_count => p_msg_count ,
24212 p_data => p_msg_data );
24213
24214 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24215 THEN
24216 ROLLBACK TO execute_update_project_pub;
24217
24218 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24219
24220 -- 4537865
24221 p_workflow_started := NULL ;
24222 -- 4537865
24223
24224 FND_MSG_PUB.Count_And_Get
24225 ( p_count => p_msg_count ,
24226 p_data => p_msg_data );
24227
24228 WHEN OTHERS THEN
24229
24230 ROLLBACK TO execute_update_project_pub;
24231
24232 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24233
24234 -- 4537865
24235 p_workflow_started := NULL ;
24236 -- 4537865
24237
24238 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24239 THEN
24240
24241 FND_MSG_PUB.add_exc_msg
24242 ( p_pkg_name => G_PKG_NAME
24243 , p_procedure_name => l_api_name
24244 , p_error_text => SUBSTRB(SQLERRM, 1, 240) ); -- 4537865 Converted from SUBSTR to SUBSTRB
24245
24246
24247 FND_MSG_PUB.add;
24248 END IF;
24249
24250 FND_MSG_PUB.Count_And_Get
24251 ( p_count => p_msg_count ,
24252 p_data => p_msg_data );
24253
24254 END execute_update_project;
24255
24256 --------------------------------------------------------------------------------
24257 --Name: delete_project
24258 --Type: Procedure
24259 --Description: This procedure can be used to delete a project
24260 --
24261 --
24262 --Called subprograms:
24263 --
24264 --
24265 --
24266 --History:
24267 -- 19-AUG-1996 R. Krishnamurthy Created
24268 --
24269
24270 PROCEDURE delete_project
24271 ( p_api_version_number IN NUMBER
24272 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
24273 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24274 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24275 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24276 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24277 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24278 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24279 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24280 )
24281 IS
24282
24283 l_return_status VARCHAR2(1); --bug 2471668
24284 l_project_id NUMBER; --bug 2471668
24285
24286 BEGIN
24287
24288 -- 4537865 : Initialize Return status to success
24289 p_return_status := FND_API.G_RET_STS_SUCCESS;
24290
24291 --bug 2471668.
24292 --We need to call this API here toget the corrct project id. This is also
24293 --called from the private API. But I discussed with Sakthi and he is ok to call this
24294 --twice once here and second time in private API. The idea is to make the advanced security changes
24295 --only in public APIs.
24296
24297 PA_PROJECT_PVT.Convert_pm_projref_to_id
24298 ( p_pm_project_reference => p_pm_project_reference
24299 , p_pa_project_id => p_pa_project_id
24300 , p_out_project_id => l_project_id
24301 , p_return_status => l_return_status
24302 );
24303
24304
24305 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
24306
24307 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24308 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
24309 RAISE FND_API.G_EXC_ERROR;
24310 END IF;
24311
24312 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id; --bug 2471668 ( in the project context )
24313 --end of bug 2471668
24314
24315 pa_project_pvt.delete_project1
24316 (p_api_version_number => p_api_version_number
24317 ,p_commit => FND_API.G_FALSE--bug 3766967
24318 ,p_init_msg_list => p_init_msg_list
24319 ,p_msg_count => p_msg_count
24320 ,p_msg_data => p_msg_data
24321 ,p_return_status => p_return_status
24322 ,p_pm_product_code => p_pm_product_code
24323 ,p_pm_project_reference => p_pm_project_reference
24324 ,p_pa_project_id => p_pa_project_id);
24325
24326 EXCEPTION
24327 WHEN FND_API.G_EXC_ERROR
24328 THEN
24329 p_return_status := FND_API.G_RET_STS_ERROR;
24330 p_msg_count := FND_MSG_PUB.count_msg; -- 4537865
24331
24332 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24333 THEN
24334 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24335 p_msg_count := FND_MSG_PUB.count_msg; -- 4537865
24336
24337 WHEN OTHERS THEN
24338 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24339 p_msg_count := FND_MSG_PUB.count_msg; -- 4537865
24340
24341 END delete_project;
24342
24343 --------------------------------------------------------------------------------
24344 -- Name: Check_Delete_Task_OK
24345 -- Type: PL/SQL Procedure
24346 -- Decscription: This procedure returns 'Y' if it is OK to delete a task.
24347 -- Otherwise, it returns 'N'.
24348 --
24349 -- Called Subprograms: Convert_Pm_Projref_To_Id
24350 -- , Convert_Pm_Taskref_To_Id
24351 -- History: 15-AUG-96 Created jwhite
24352 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24353 -- procedure.
24354 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24355 -- 20-NOV-96 Update lwerker Changed handling of error messages
24356 -- 02-DEC-96 Update lwerker Removed Savepoint and Rollbacks
24357
24358 PROCEDURE Check_Delete_Task_OK
24359 ( p_api_version_number IN NUMBER
24360 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24361 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24362 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24363 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24364 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24365 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24366 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24367 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24368 --Project Structure changes done for bug 2765115
24369 , p_structure_type IN VARCHAR2 := 'FINANCIAL'
24370 , p_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24371 --END Project Structure changes done for bug 2765115
24372 , p_delete_task_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24373 )
24374 IS
24375 l_retrieve varchar2(1) ; -- 4096218 Issues found during Unit Testing
24376 BEGIN
24377
24378 -- 4537865 : Initialize return status to success
24379 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24380
24381 --bug 2876703 --check_delete_task_ok
24382 IF p_structure_type = 'WORKPLAN' AND p_project_id IS NOT NULL AND p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24383 THEN
24384 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_project_id ) = 'N' OR
24385 PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ) = 'N'
24386 THEN
24387 l_retrieve := 'Y' ;
24388 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
24389 THEN
24390 pa_interface_utils_pub.map_new_amg_msg
24391 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
24392 ,p_msg_attribute => 'CHANGE'
24393 ,p_resize_flag => 'Y' -- 4096218 Changed from 'N' to 'Y'
24394 ,p_msg_context => 'GENERAL'
24395 ,p_attribute1 => ''
24396 ,p_attribute2 => ''
24397 ,p_attribute3 => ''
24398 ,p_attribute4 => ''
24399 ,p_attribute5 => '');
24400 END IF;
24401 RAISE FND_API.G_EXC_ERROR;
24402 END IF;
24403 END IF;
24404 --bug 2876703
24405 pa_project_check_pvt.Check_Delete_Task_OK_pvt
24406 (p_api_version_number => p_api_version_number
24407 ,p_init_msg_list => p_init_msg_list
24408 ,p_return_status => p_return_status
24409 ,p_msg_count => p_msg_count
24410 ,p_msg_data => p_msg_data
24411 ,p_project_id => p_project_id
24412 ,p_pm_project_reference => p_pm_project_reference
24413 ,p_task_id => p_task_id
24414 ,p_pm_task_reference => p_pm_task_reference
24415 --Project Structure changes done for bug 2765115
24416 ,p_structure_type => p_structure_type
24417 ,p_task_version_id => p_task_version_id
24418 --END Project Structure changes done for bug 2765115
24419 ,p_delete_task_ok_flag => p_delete_task_ok_flag);
24420
24421 --bug 2876703 Added ecxeption block to support the above code added for bug 2876703
24422 EXCEPTION
24423 WHEN FND_API.G_EXC_ERROR
24424 THEN
24425 p_return_status := FND_API.G_RET_STS_ERROR;
24426 IF l_retrieve = 'Y' THEN
24427 FND_MSG_PUB.Count_And_Get
24428 (p_encoded =>'F' , p_count => p_msg_count ,
24429 p_data => p_msg_data );
24430 END IF;
24431
24432 -- 4537865
24433 p_delete_task_ok_flag := NULL ;
24434 p_msg_count := FND_MSG_PUB.count_msg;
24435
24436 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24437 THEN
24438
24439 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24440
24441 -- 4537865
24442 p_delete_task_ok_flag := NULL ;
24443
24444 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24445 THEN
24446 FND_MSG_PUB.add_exc_msg
24447 ( p_pkg_name => G_PKG_NAME
24448 , p_procedure_name => 'Check_Delete_Task_Ok');
24449 END IF;
24450
24451 FND_MSG_PUB.Count_And_Get
24452 (p_count => p_msg_count ,
24453 p_data => p_msg_data );
24454
24455 WHEN OTHERS THEN
24456 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24457
24458 -- 4537865
24459 p_delete_task_ok_flag := NULL ;
24460
24461 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24462 THEN
24463 FND_MSG_PUB.add_exc_msg
24464 ( p_pkg_name => G_PKG_NAME
24465 , p_procedure_name => 'Check_Delete_Task_Ok');
24466 END IF;
24467
24468 FND_MSG_PUB.Count_And_Get
24469 (p_count => p_msg_count ,
24470 p_data => p_msg_data );
24471
24472 --bug 2876703
24473 END Check_Delete_Task_Ok;
24474
24475
24476 --------------------------------------------------------------------------------
24477 -- Name: Check_Add_Subtask_OK
24478 -- Type: PL/SQL Procedure
24479 -- Decscription: This procedure returns 'Y' if it is OK to add subtask, 'N' otherwise.
24480 --
24481 -- Called Subprograms: Convert_Pm_Projref_To_Id
24482 -- , Convert_Pm_Taskref_To_Id
24483 -- History: 15-AUG-96 Created jwhite
24484 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24485 -- procedure.
24486 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24487 -- 20-NOV-96 Update lwerker Changed handling of error messages
24488 -- 02-DEC-96 Update lwerker Removed Savepoint and Rollbacks
24489 --
24490
24491 PROCEDURE Check_Add_Subtask_OK
24492 (p_api_version_number IN NUMBER
24493 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24494 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24495 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24496 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24497 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24498 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24499 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24500 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24501 , p_add_subtask_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24502 )
24503 IS
24504
24505 BEGIN
24506
24507 -- 4537865 : Initialize return status to success
24508 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24509
24510 pa_project_check_pvt.Check_Add_Subtask_OK_pvt
24511 (p_api_version_number => p_api_version_number
24512 ,p_init_msg_list => p_init_msg_list
24513 ,p_return_status => p_return_status
24514 ,p_msg_count => p_msg_count
24515 ,p_msg_data => p_msg_data
24516 ,p_project_id => p_project_id
24517 ,p_pm_project_reference => p_pm_project_reference
24518 ,p_task_id => p_task_id
24519 ,p_pm_task_reference => p_pm_task_reference
24520 ,p_add_subtask_ok_flag => p_add_subtask_ok_flag);
24521
24522 -- 4537865
24523 EXCEPTION
24524
24525 WHEN OTHERS THEN
24526 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24527
24528 p_add_subtask_ok_flag := NULL ;
24529
24530 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24531 THEN
24532 FND_MSG_PUB.add_exc_msg
24533 ( p_pkg_name => G_PKG_NAME
24534 , p_procedure_name => 'Check_Add_Subtask_Ok');
24535 END IF;
24536
24537 FND_MSG_PUB.Count_And_Get
24538 (p_count => p_msg_count ,
24539 p_data => p_msg_data );
24540
24541 END Check_Add_Subtask_Ok;
24542
24543
24544 --------------------------------------------------------------------------------
24545
24546 -- Name: Check_Unique_Task_Reference
24547 -- Type: PL/SQL Procedure
24548 -- Decscription: This procedure returns 'Y' if the task reference does not exist,
24549 -- 'N' otherwise.
24550 --
24551 -- Called Subprograms: Convert_Pm_Projref_To_Id
24552 --
24553 -- History: 15-AUG-96 Created jwhite
24554 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24555 -- procedure.
24556 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24557 -- 20-NOV-96 Update lwerker Added use of cursor and changed handling of error messages
24558 -- 02-DEC-96 Update lwerker Removed Savepoint and Rollbacks
24559 --
24560 PROCEDURE Check_Unique_Task_Reference
24561 (p_api_version_number IN NUMBER
24562 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24563 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24564 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24565 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24566 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24567 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24568 , p_pm_task_reference IN VARCHAR2
24569 , p_unique_task_ref_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24570 )
24571 IS
24572
24573 BEGIN
24574
24575 -- 4537865 : Initialize return status to success
24576 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24577
24578 pa_project_check_pvt.Check_Unique_Task_Ref_pvt
24579 (p_api_version_number => p_api_version_number
24580 ,p_init_msg_list => p_init_msg_list
24581 ,p_return_status => p_return_status
24582 ,p_msg_count => p_msg_count
24583 ,p_msg_data => p_msg_data
24584 ,p_project_id => p_project_id
24585 ,p_pm_project_reference => p_pm_project_reference
24586 ,p_pm_task_reference => p_pm_task_reference
24587 ,p_unique_task_ref_flag => p_unique_task_ref_flag);
24588
24589 -- 4537865
24590 EXCEPTION
24591
24592 WHEN OTHERS THEN
24593 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24594
24595 p_unique_task_ref_flag := NULL ;
24596
24597 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24598 THEN
24599 FND_MSG_PUB.add_exc_msg
24600 ( p_pkg_name => G_PKG_NAME
24601 , p_procedure_name => 'Check_Unique_Task_Reference');
24602 END IF;
24603
24604 FND_MSG_PUB.Count_And_Get
24605 (p_count => p_msg_count ,
24606 p_data => p_msg_data );
24607
24608 END Check_Unique_Task_Reference;
24609
24610
24611 --------------------------------------------------------------------------------
24612 -- Name: Check_Unique_Project_Reference
24613 -- Type: PL/SQL Procedure
24614 -- Decscription: This procedure returns 'Y' if the project reference does not exist
24615 -- , 'N' otherwise.
24616 --
24617 -- Called Subprograms: none.
24618 --
24619 -- History: 15-AUG-96 Created jwhite
24620 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24621 -- procedure.
24622 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24623 --
24624 -- 02-DEC-96 Update lwerker Added use of cursor and changed handling of error messages
24625 -- Removed Savepoint and Rollbacks
24626 --
24627 PROCEDURE Check_Unique_Project_Reference
24628 (p_api_version_number IN NUMBER
24629 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24630 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24631 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24632 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24633 , p_pm_project_reference IN VARCHAR2
24634 , p_unique_project_ref_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24635 )
24636 IS
24637
24638 BEGIN
24639
24640 -- 4537865 : Initialize return status to success
24641 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24642
24643 pa_project_check_pvt.Check_Unique_Project_Ref_pvt
24644 (p_api_version_number => p_api_version_number
24645 ,p_init_msg_list => p_init_msg_list
24646 ,p_return_status => p_return_status
24647 ,p_msg_count => p_msg_count
24648 ,p_msg_data => p_msg_data
24649 ,p_pm_project_reference => p_pm_project_reference
24650 ,p_unique_project_ref_flag => p_unique_project_ref_flag);
24651
24652 -- 4537865
24653 EXCEPTION
24654
24655 WHEN OTHERS THEN
24656 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24657
24658 p_unique_project_ref_flag := NULL ;
24659 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24660 THEN
24661 FND_MSG_PUB.add_exc_msg
24662 ( p_pkg_name => G_PKG_NAME
24663 , p_procedure_name => 'Check_Unique_Project_Reference');
24664 END IF;
24665
24666 FND_MSG_PUB.Count_And_Get
24667 (p_count => p_msg_count ,
24668 p_data => p_msg_data );
24669
24670 END Check_Unique_Project_Reference;
24671
24672 --------------------------------------------------------------------------------
24673 -- Name: Check_Delete_Project_OK
24674 -- Type: PL/SQL Procedure
24675 -- Decscription: This procedure returns 'Y' if the project can be deleted, 'N' otherwise.
24676 --
24677 -- Called Subprograms: Convert_Pm_Projref_To_Id
24678 --
24679 -- History: 15-AUG-96 Created jwhite
24680 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24681 -- procedure.
24682 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24683 -- 02-DEC-96 Update lwerker Changed handling of error messages
24684 -- Removed Savepoint and Rollbacks
24685 --
24686
24687 PROCEDURE Check_Delete_Project_OK
24688 (p_api_version_number IN NUMBER
24689 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24690 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24691 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24692 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24693 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24694 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24695 , p_delete_project_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24696 )
24697 IS
24698
24699 BEGIN
24700
24701 -- 4537865 : Initialize return status to success
24702 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24703
24704 pa_project_check_pvt.Check_Delete_Project_OK_pvt
24705 (p_api_version_number => p_api_version_number
24706 ,p_init_msg_list => p_init_msg_list
24707 ,p_return_status => p_return_status
24708 ,p_msg_count => p_msg_count
24709 ,p_msg_data => p_msg_data
24710 ,p_project_id => p_project_id
24711 ,p_pm_project_reference => p_pm_project_reference
24712 ,p_delete_project_ok_flag => p_delete_project_ok_flag);
24713
24714 -- 4537865
24715 EXCEPTION
24716
24717 WHEN OTHERS THEN
24718 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24719
24720 p_delete_project_ok_flag := NULL ;
24721 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24722 THEN
24723 FND_MSG_PUB.add_exc_msg
24724 ( p_pkg_name => G_PKG_NAME
24725 , p_procedure_name => 'Check_Delete_Project_OK');
24726 END IF;
24727
24728 FND_MSG_PUB.Count_And_Get
24729 (p_count => p_msg_count ,
24730 p_data => p_msg_data );
24731
24732 END Check_Delete_Project_Ok;
24733
24734 --------------------------------------------------------------------------------
24735 -- Name: Check_Change_Parent_OK
24736 -- Type: PL/SQL Procedure
24737 -- Decscription: This procedure returns 'Y' if the task can be moved to another parent; 'N' otherwise.
24738 --
24739 -- Called Subprograms: Convert_Pm_Projref_To_Id
24740 --
24741 -- History: 15-AUG-96 Created jwhite
24742 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24743 -- procedure.
24744 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24745 -- 02-DEC-96 Update lwerker Changed handling of return values.
24746 -- Removed Savepoint and Rollbacks
24747 --
24748 PROCEDURE Check_Change_Parent_OK
24749 (p_api_version_number IN NUMBER
24750 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24751 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24752 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24753 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24754 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24755 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24756 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24757 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24758 , p_new_parent_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24759 , p_pm_new_parent_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24760 , p_change_parent_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24761 )
24762 IS
24763
24764 BEGIN
24765
24766 -- 4537865 : Initialize return status to success
24767 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24768
24769 pa_project_check_pvt.Check_Change_Parent_OK_pvt
24770 (p_api_version_number => p_api_version_number
24771 ,p_init_msg_list => p_init_msg_list
24772 ,p_return_status => p_return_status
24773 ,p_msg_count => p_msg_count
24774 ,p_msg_data => p_msg_data
24775 ,p_project_id => p_project_id
24776 ,p_pm_project_reference => p_pm_project_reference
24777 ,p_task_id => p_task_id
24778 ,p_pm_task_reference => p_pm_task_reference
24779 ,p_new_parent_task_id => p_new_parent_task_id
24780 ,p_pm_new_parent_task_reference => p_pm_new_parent_task_reference
24781 ,p_change_parent_ok_flag => p_change_parent_ok_flag);
24782
24783 -- 4537865
24784 EXCEPTION
24785
24786 WHEN OTHERS THEN
24787 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24788
24789 p_change_parent_ok_flag := NULL ;
24790 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24791 THEN
24792 FND_MSG_PUB.add_exc_msg
24793 ( p_pkg_name => G_PKG_NAME
24794 , p_procedure_name => 'Check_Change_Parent_OK');
24795 END IF;
24796
24797 FND_MSG_PUB.Count_And_Get
24798 (p_count => p_msg_count ,
24799 p_data => p_msg_data );
24800
24801 END Check_Change_Parent_OK;
24802
24803 --------------------------------------------------------------------------------
24804 -- Name: Check_Change_Project_Org_OK
24805 -- Type: PL/SQL Procedure
24806 -- Decscription: This procedure returns 'Y' if the project organization can be changed, 'N' otherwise.
24807 --
24808 -- Called Subprograms: Convert_Pm_Projref_To_Id
24809 --
24810 -- History: 15-AUG-96 Created jwhite
24811 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24812 -- procedure.
24813 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24814 -- 02-DEC-96 Update lwerker Changed error handling
24815 -- Removed Savepoint and Rollbacks
24816 --
24817
24818 PROCEDURE Check_Change_Project_Org_OK
24819 (p_api_version_number IN NUMBER
24820 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24821 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24822 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24823 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24824 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24825 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24826 , p_change_project_org_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24827 )
24828 IS
24829
24830 BEGIN
24831
24832 -- 4537865 : Initialize return status to success
24833 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24834
24835 pa_project_check_pvt.Check_Change_Proj_Org_OK_pvt
24836 (p_api_version_number => p_api_version_number
24837 ,p_init_msg_list => p_init_msg_list
24838 ,p_return_status => p_return_status
24839 ,p_msg_count => p_msg_count
24840 ,p_msg_data => p_msg_data
24841 ,p_project_id => p_project_id
24842 ,p_pm_project_reference => p_pm_project_reference
24843 ,p_change_project_org_ok_flag => p_change_project_org_ok_flag);
24844
24845 -- 4537865
24846 EXCEPTION
24847
24848 WHEN OTHERS THEN
24849 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24850
24851 p_change_project_org_ok_flag := NULL ;
24852 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24853 THEN
24854 FND_MSG_PUB.add_exc_msg
24855 ( p_pkg_name => G_PKG_NAME
24856 , p_procedure_name => 'Check_Change_Project_Org_OK');
24857 END IF;
24858
24859 FND_MSG_PUB.Count_And_Get
24860 (p_count => p_msg_count ,
24861 p_data => p_msg_data );
24862
24863 END Check_Change_Project_Org_Ok;
24864
24865 --------------------------------------------------------------------------------
24866 -- Name: Check_Unique_Task_Number
24867 -- Type: PL/SQL Procedure
24868 -- Decscription: This procedure returns 'Y' if the task number does NOT already exist; 'N' otherwise.
24869 --
24870 -- Called Subprograms: Convert_Pm_Projref_To_Id
24871 --
24872 -- History: 15-AUG-96 Created jwhite
24873 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24874 -- procedure.
24875 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24876 -- 02-DEC-96 Update lwerker Changed handling of return values
24877 -- Removed Savepoint and Rollbacks
24878 --
24879
24880 PROCEDURE Check_Unique_Task_Number
24881 (p_api_version_number IN NUMBER
24882 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24883 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24884 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24885 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24886 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24887 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24888 , p_task_number IN VARCHAR2
24889 , p_unique_task_number_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24890 )
24891 IS
24892
24893 BEGIN
24894
24895 -- 4537865 : Initialize return status to success
24896 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24897
24898 pa_project_check_pvt.Check_Unique_Task_Number_pvt
24899 (p_api_version_number => p_api_version_number
24900 ,p_init_msg_list => p_init_msg_list
24901 ,p_return_status => p_return_status
24902 ,p_msg_count => p_msg_count
24903 ,p_msg_data => p_msg_data
24904 ,p_project_id => p_project_id
24905 ,p_pm_project_reference => p_pm_project_reference
24906 ,p_task_number => p_task_number
24907 ,p_unique_task_number_flag => p_unique_task_number_flag);
24908
24909 -- 4537865
24910 EXCEPTION
24911
24912 WHEN OTHERS THEN
24913 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24914
24915 p_unique_task_number_flag := NULL ;
24916 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24917 THEN
24918 FND_MSG_PUB.add_exc_msg
24919 ( p_pkg_name => G_PKG_NAME
24920 , p_procedure_name => 'Check_Unique_Task_Number');
24921 END IF;
24922
24923 FND_MSG_PUB.Count_And_Get
24924 (p_count => p_msg_count ,
24925 p_data => p_msg_data );
24926
24927 END Check_Unique_Task_Number;
24928
24929 --------------------------------------------------------------------------------
24930 -- Name: Check_Task_Number_Change_Ok
24931 -- Type: PL/SQL Procedure
24932 -- Decscription: This procedure returns 'Y' if it is OK to change a LOWEST task.
24933 -- Otherwise, it returns 'N'.
24934 --
24935 -- Called Subprograms: Convert_Pm_Projref_To_Id
24936 -- , Convert_Pm_Taskref_To_Id
24937 -- History: 15-AUG-96 Created jwhite
24938 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24939 -- procedure.
24940 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24941 -- 02-DEC-96 Update lwerker Changed the way return values are handled
24942 -- Removed Savepoint and Rollbacks
24943
24944 PROCEDURE Check_Task_Number_Change_Ok
24945 ( p_api_version_number IN NUMBER
24946 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24947 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24948 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24949 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24950 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24951 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24952 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24953 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24954 , p_task_number_change_Ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24955 )
24956 IS
24957
24958 BEGIN
24959
24960 -- 4537865 : Initialize return status to success
24961 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24962
24963 pa_project_check_pvt.Check_Task_Numb_Change_Ok_Pvt
24964 (p_api_version_number => p_api_version_number
24965 ,p_init_msg_list => p_init_msg_list
24966 ,p_return_status => p_return_status
24967 ,p_msg_count => p_msg_count
24968 ,p_msg_data => p_msg_data
24969 ,p_project_id => p_project_id
24970 ,p_pm_project_reference => p_pm_project_reference
24971 ,p_task_id => p_task_id
24972 ,p_pm_task_reference => p_pm_task_reference
24973 ,p_task_number_change_Ok_flag => p_task_number_change_Ok_flag);
24974
24975 -- 4537865
24976 EXCEPTION
24977
24978 WHEN OTHERS THEN
24979 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24980
24981 p_task_number_change_Ok_flag := NULL ;
24982 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24983 THEN
24984 FND_MSG_PUB.add_exc_msg
24985 ( p_pkg_name => G_PKG_NAME
24986 , p_procedure_name => 'Check_Task_Number_Change_Ok');
24987 END IF;
24988
24989 FND_MSG_PUB.Count_And_Get
24990 (p_count => p_msg_count ,
24991 p_data => p_msg_data );
24992
24993 END Check_Task_Number_Change_Ok;
24994
24995 --------------------------------------------------------------------------------
24996 -- Name: approve_project
24997 -- Type: PL/SQL Procedure
24998 -- Decscription: This procedure will set the project status to approved.
24999 --
25000 -- Called Subprograms:
25001 --
25002 -- History: 27-FEB-97 L. de Werker Created
25003 --
25004 --
25005 PROCEDURE approve_project
25006 ( p_api_version_number IN NUMBER
25007 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
25008 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25009 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25010 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25011 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25012 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25013 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25014 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25015 )
25016 IS
25017
25018 BEGIN
25019
25020 -- 4537865 : Initialize return status to success
25021 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25022
25023 pa_project_pvt.approve_project1
25024 ( p_api_version_number => p_api_version_number
25025 , p_commit => FND_API.G_FALSE--bug 3766967
25026 , p_init_msg_list => p_init_msg_list
25027 , p_msg_count => p_msg_count
25028 , p_msg_data => p_msg_data
25029 , p_return_status => p_return_status
25030 , p_pm_product_code => p_pm_product_code
25031 , p_pm_project_reference => p_pm_project_reference
25032 , p_pa_project_id => p_pa_project_id);
25033
25034 -- 4537865
25035 EXCEPTION
25036
25037 WHEN OTHERS THEN
25038 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25039
25040 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25041 THEN
25042 FND_MSG_PUB.add_exc_msg
25043 ( p_pkg_name => G_PKG_NAME
25044 , p_procedure_name => 'approve_project');
25045 END IF;
25046
25047 FND_MSG_PUB.Count_And_Get
25048 (p_count => p_msg_count ,
25049 p_data => p_msg_data );
25050
25051 END approve_project;
25052
25053 --------------------------------------------------------------------------------
25054 -- Name: load_tasks
25055 -- Type: PL/SQL Procedure
25056 -- Decscription: This is a wrapper API for the load_task procedure.
25057 --
25058 -- Called Subprograms: load_task
25059 --
25060 -- History: 05-JUN-02 hyau Created
25061 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
25062 -- dependency_type and lag days to tasks and create dependencies.
25063 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
25064 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
25065 --
25066 --
25067 -- 01-MAR-2004 Rakesh Raghavan Copied Venkat's FP-M changes from load_task API to load_tasks API.
25068 -- 05-APR-2004 Rakesh Raghavan Progress Management Changes. Bug # 3420093.
25069 -- 29-NOV-2004 djoseph Bug 4024659: Changed the function substr to substrb for l_task_name and l_long_task_name.
25070 -- Changes tagged by bug number.
25071
25072 PROCEDURE load_tasks
25073 (
25074 p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25075 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25076 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25077 ,p_pm_task_reference IN PA_VC_1000_150
25078 ,p_pa_task_id IN PA_NUM_1000_NUM
25079 ,p_task_name IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --bug 6193314 .Modified PA_VC_1000_150
25080 ,p_long_task_name IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25081 ,p_pa_task_number IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25082 ,p_task_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25083 ,p_task_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25084 ,p_task_completion_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25085 ,p_pm_parent_task_reference IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25086 ,p_pa_parent_task_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25087 ,p_address_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25088 ,p_carrying_out_organization_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25089 ,p_service_type_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25090 ,p_task_manager_person_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25091 ,p_billable_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25092 ,p_chargeable_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25093 ,p_ready_to_bill_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25094 ,p_ready_to_distribute_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25095 ,p_limit_to_txn_controls_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25096 ,p_labor_bill_rate_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25097 ,p_labor_std_bill_rate_schdl IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25098 ,p_labor_schedule_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25099 ,p_labor_schedule_discount IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25100 ,p_nl_bill_rate_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25101 ,p_nl_std_bill_rate_schdl IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25102 ,p_nl_schedule_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25103 ,p_nl_schedule_discount IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25104 ,p_labor_cost_multiplier_name IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25105 ,p_cost_ind_rate_sch_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25106 ,p_rev_ind_rate_sch_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25107 ,p_inv_ind_rate_sch_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25108 ,p_cost_ind_sch_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25109 ,p_rev_ind_sch_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25110 ,p_inv_ind_sch_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25111 ,p_labor_sch_type IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25112 ,p_nl_sch_type IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25113 ,p_actual_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25114 ,p_actual_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25115 ,p_early_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25116 ,p_early_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25117 ,p_late_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25118 ,p_late_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25119 ,p_scheduled_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25120 ,p_scheduled_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25121 ,p_attribute_category IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25122 ,p_attribute1 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25123 ,p_attribute2 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25124 ,p_attribute3 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25125 ,p_attribute4 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25126 ,p_attribute5 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25127 ,p_attribute6 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25128 ,p_attribute7 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25129 ,p_attribute8 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25130 ,p_attribute9 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25131 ,p_attribute10 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25132 ,p_allow_cross_charge_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25133 ,p_project_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25134 ,p_project_rate_type IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25135 ,p_cc_process_labor_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25136 ,p_labor_tp_schedule_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25137 ,p_labor_tp_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25138 ,p_cc_process_nl_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25139 ,p_nl_tp_schedule_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25140 ,p_nl_tp_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25141 ,p_receive_project_invoice_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25142 ,p_work_type_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25143 ,p_emp_bill_rate_schedule_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25144 ,p_job_bill_rate_schedule_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25145 --Sakthi MCB
25146 ,p_non_lab_std_bill_rt_sch_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25147 ,p_taskfunc_cost_rate_type IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25148 ,p_taskfunc_cost_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25149 --Sakthi MCB
25150 ,p_display_sequence IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25151 ,p_wbs_level IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25152 ,p_milestone IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25153 ,p_duration IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25154 ,p_duration_unit IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25155 ,p_login_user_name IN PA_VC_1000_150:= PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25156 ,p_critical_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25157 ,p_sub_project_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25158 ,p_progress_status_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25159 ,p_progress_comments IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25160 ,p_progress_asof_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25161 ,p_progress_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25162 ,p_predecessors IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25163 ,p_priority_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25164 ,p_wbs_number IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25165 ,p_estimated_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25166 ,p_estimated_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25167 ,p_estimate_to_complete IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25168 ,p_language IN VARCHAR2 default 'US'
25169 ,p_delimiter IN VARCHAR2 default ','
25170 ,p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25171 -- ,p_calling_mode IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25172 --Margaret bug 2683364
25173 ,P_OBLIGATION_START_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25174 ,P_OBLIGATION_FINISH_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25175 ,P_BASELINE_START_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25176 ,P_BASELINE_FINISH_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25177 ,P_CLOSED_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25178 ,P_WQ_UOM_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25179 ,P_WQ_ITEM_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25180 ,P_STATUS_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25181 ,P_WF_STATUS_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25182 ,P_PM_SOURCE_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25183 ,P_INC_PROJ_PROGRESS_FLAG IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25184 ,P_LINK_TASK_FLAG IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25185 ,P_CALENDAR_ID IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25186 ,P_PLANNED_EFFORT IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25187 ,P_PLANNED_WORK_QUANTITY IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25188 ,P_TASK_TYPE IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25189 --Margaret end bug 2683364
25190 ,p_labor_disc_reason_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25191 ,p_non_labor_disc_reason_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25192 --PA L changes -- bug 2872708 --load_tasks
25193 ,p_retirement_cost_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25194 ,p_cint_eligible_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25195 ,p_cint_stop_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25196 --end PA L changes -- bug 2872708
25197 -- FP-M Bug # 3301192
25198 ,p_pred_string IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25199 -- ,p_pred_delimiter IN PA_VC_1000_10 := PA_VC_1000_10(',')
25200 ,p_pred_delimiter IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25201 -- FP M : Deliverable
25202 -- ,p_deliverable IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25203 ,p_deliverable IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --SMUKKA
25204 ,p_deliverable_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) -- 3661788 Added IN Parameter
25205 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25206 -- FP M changes begin (venkat)
25207 ,p_base_percent_comp_deriv_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25208 ,p_sch_tool_tsk_type_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25209 ,p_constraint_type_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25210 ,p_constraint_date IN PA_DATE_1000_DATE:= PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25211 ,p_free_slack IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25212 ,p_total_slack IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25213 ,p_effort_driven_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25214 ,p_level_assignments_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25215 ,p_invoice_method IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25216 ,p_customer_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25217 ,p_gen_etc_source_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25218 -- FP M changes end (venkat)
25219 -- FP M changes start (Mapping )
25220 -- ,p_financial_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25221 -- ,p_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25222 -- ,p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25223 -- FP M changes end (Mapping )
25224 ,p_financial_task_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --SMukka
25225 ,p_mapped_task_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --SMukka
25226 ,p_mapped_task_reference IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --SMukka
25227
25228 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
25229 ,p_ext_act_duration IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25230 ,p_ext_remain_duration IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25231 ,p_ext_sch_duration IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25232 -- (end venkat) new params for bug #3450684 -------------------------------------------------
25233
25234 -- Progress Management Changes. Bug # 3420093.
25235 ,p_etc_effort IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25236 ,p_percent_complete IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25237 -- Progress Management Changes. Bug # 3420093.
25238
25239 )
25240 IS
25241 l_api_name CONSTANT VARCHAR2(30):='Load_Tasks';
25242 l_return_status VARCHAR2(1):= 'S';
25243 l_responsibility_id NUMBER;
25244
25245
25246 --hyau added for debugging unhandled exception stage
25247 l_stage VARCHAR2(250);
25248 l_counter NUMBER;
25249
25250 l_task_name_flag VARCHAR2(1) := 'Y';
25251 l_long_task_name_flag VARCHAR2(1) := 'Y';
25252 l_pa_task_number_flag VARCHAR2(1) := 'Y';
25253 l_task_description_flag VARCHAR2(1) := 'Y';
25254 l_task_start_date_flag VARCHAR2(1) := 'Y';
25255 l_task_completion_date_flag VARCHAR2(1) := 'Y';
25256 l_pm_parent_task_ref_flag VARCHAR2(1) := 'Y';
25257 l_pa_parent_task_id_flag VARCHAR2(1) := 'Y';
25258 l_address_id_flag VARCHAR2(1) := 'Y';
25259 l_carrying_out_org_id_flag VARCHAR2(1) := 'Y';
25260 l_service_type_code_flag VARCHAR2(1) := 'Y';
25261 l_task_manager_person_id_flag VARCHAR2(1) := 'Y';
25262 l_billable_flag_flag VARCHAR2(1) := 'Y';
25263 l_chargeable_flag_flag VARCHAR2(1) := 'Y';
25264 l_ready_to_bill_flag_flag VARCHAR2(1) := 'Y';
25265 l_ready_to_dist_flag_flag VARCHAR2(1) := 'Y';
25266 l_limit_to_txn_cnt_flag_flag VARCHAR2(1) := 'Y';
25267 l_labor_bill_rate_org_id_flag VARCHAR2(1) := 'Y';
25268 l_labor_std_bill_rate_flag VARCHAR2(1) := 'Y';
25269 l_labor_schd_fixed_date_flag VARCHAR2(1) := 'Y';
25270 l_labor_schd_discount_flag VARCHAR2(1) := 'Y';
25271 l_nl_bill_rate_org_id_flag VARCHAR2(1) := 'Y';
25272 l_nl_std_bill_rate_schdl_flag VARCHAR2(1) := 'Y';
25273 l_nl_schedule_fixed_date_flag VARCHAR2(1) := 'Y';
25274 l_nl_schedule_discount_flag VARCHAR2(1) := 'Y';
25275 l_labor_cost_mult_name_flag VARCHAR2(1) := 'Y';
25276 l_cost_ind_rate_sch_id_flag VARCHAR2(1) := 'Y';
25277 l_rev_ind_rate_sch_id_flag VARCHAR2(1) := 'Y';
25278 l_inv_ind_rate_sch_id_flag VARCHAR2(1) := 'Y';
25279 l_cost_ind_sch_fixed_date_flag VARCHAR2(1) := 'Y';
25280 l_rev_ind_sch_fixed_date_flag VARCHAR2(1) := 'Y';
25281 l_inv_ind_sch_fixed_date_flag VARCHAR2(1) := 'Y';
25282 l_labor_sch_type_flag VARCHAR2(1) := 'Y';
25283 l_nl_sch_type_flag VARCHAR2(1) := 'Y';
25284 l_actual_start_date_flag VARCHAR2(1) := 'Y';
25285 l_actual_finish_date_flag VARCHAR2(1) := 'Y';
25286 l_early_start_date_flag VARCHAR2(1) := 'Y';
25287 l_early_finish_date_flag VARCHAR2(1) := 'Y';
25288 l_late_start_date_flag VARCHAR2(1) := 'Y';
25289 l_late_finish_date_flag VARCHAR2(1) := 'Y';
25290 l_scheduled_start_date_flag VARCHAR2(1) := 'Y';
25291 l_scheduled_finish_date_flag VARCHAR2(1) := 'Y';
25292 l_attribute_category_flag VARCHAR2(1) := 'Y';
25293 l_attribute1_flag VARCHAR2(1) := 'Y';
25294 l_attribute2_flag VARCHAR2(1) := 'Y';
25295 l_attribute3_flag VARCHAR2(1) := 'Y';
25296 l_attribute4_flag VARCHAR2(1) := 'Y';
25297 l_attribute5_flag VARCHAR2(1) := 'Y';
25298 l_attribute6_flag VARCHAR2(1) := 'Y';
25299 l_attribute7_flag VARCHAR2(1) := 'Y';
25300 l_attribute8_flag VARCHAR2(1) := 'Y';
25301 l_attribute9_flag VARCHAR2(1) := 'Y';
25302 l_attribute10_flag VARCHAR2(1) := 'Y';
25303 l_allow_cross_charge_flag_flag VARCHAR2(1) := 'Y';
25304 l_project_rate_date_flag VARCHAR2(1) := 'Y';
25305 l_project_rate_type_flag VARCHAR2(1) := 'Y';
25306 l_cc_process_labor_flag_flag VARCHAR2(1) := 'Y';
25307 l_labor_tp_schedule_id_flag VARCHAR2(1) := 'Y';
25308 l_labor_tp_fixed_date_flag VARCHAR2(1) := 'Y';
25309 l_cc_process_nl_flag_flag VARCHAR2(1) := 'Y';
25310 l_nl_tp_schedule_id_flag VARCHAR2(1) := 'Y';
25311 l_nl_tp_fixed_date_flag VARCHAR2(1) := 'Y';
25312 l_receive_proj_inv_flag_flag VARCHAR2(1) := 'Y';
25313 l_work_type_id_flag VARCHAR2(1) := 'Y';
25314 l_emp_bill_rate_schd_id_flag VARCHAR2(1) := 'Y';
25315 l_job_bill_rate_schd_id_flag VARCHAR2(1) := 'Y';
25316 l_non_lab_std_bill_rt_sch_flag VARCHAR2(1) := 'Y';
25317 l_taskfunc_cost_rate_type_flag VARCHAR2(1) := 'Y';
25318 l_taskfunc_cost_rate_date_flag VARCHAR2(1) := 'Y';
25319 l_display_sequence_flag VARCHAR2(1) := 'Y';
25320 l_wbs_level_flag VARCHAR2(1) := 'Y';
25321 --bug 2683364
25322 l_obligation_start_date_flag VARCHAR2(1) := 'Y';
25323 l_obligation_finish_date_flag VARCHAR2(1) := 'Y';
25324 l_baseline_start_date_flag VARCHAR2(1) := 'Y';
25325 l_baseline_finish_date_flag VARCHAR2(1) := 'Y';
25326 l_closed_date_flag VARCHAR2(1) := 'Y';
25327 l_wq_uom_code_flag VARCHAR2(1) := 'Y';
25328 l_wq_item_code_flag VARCHAR2(1) := 'Y';
25329 l_status_code_flag VARCHAR2(1) := 'Y';
25330 l_wf_status_code_flag VARCHAR2(1) := 'Y';
25331 l_pm_source_code_flag VARCHAR2(1) := 'Y';
25332 l_inc_proj_progress_flag_flag VARCHAR2(1) := 'Y';
25333 l_link_task_flag_flag VARCHAR2(1) := 'Y';
25334 l_calendar_id_flag VARCHAR2(1) := 'Y';
25335 l_planned_effort_flag VARCHAR2(1) := 'Y';
25336 l_planned_work_quantity_flag VARCHAR2(1) := 'Y';
25337 l_task_type_flag VARCHAR2(1) := 'Y';
25338
25339 --bug 2744729, 2740565
25340 l_estimated_start_date_flag VARCHAR2(1) := 'Y';
25341 l_estimated_finish_date_flag VARCHAR2(1) := 'Y';
25342 l_milestone_flag_flag VARCHAR2(1) := 'Y';
25343 l_critical_flag_flag VARCHAR2(1) := 'Y';
25344 l_priority_code_flag VARCHAR2(1) := 'Y';
25345 --bug 2744729, 2740565
25346
25347 l_labor_disc_reason_code_flag VARCHAR2(1) := 'Y';
25348 l_nl_disc_reason_code_flag VARCHAR2(1) := 'Y';
25349
25350 --bug 2872708
25351 l_retirement_cost_flag_flag VARCHAR2(1) := 'Y';
25352 l_cint_eligible_flag_flag VARCHAR2(1) := 'Y';
25353 l_cint_stop_date_flag VARCHAR2(1) := 'Y';
25354 --bug 2872708
25355
25356 -- FP-M Bug # 3301192
25357 l_pred_string_flag VARCHAR2(1) := 'Y';
25358 l_pred_delimiter_flag VARCHAR2(1) := 'Y';
25359
25360 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25361 -- FP M changes begin (venkat)
25362 l_base_prct_comp_drv_code_flag VARCHAR2(1) := 'Y';
25363 l_sch_tool_tsk_type_code_flag VARCHAR2(1) := 'Y';
25364 l_constraint_type_code_flag VARCHAR2(1) := 'Y';
25365 l_constraint_date_flag VARCHAR2(1) := 'Y';
25366 l_free_slack_flag VARCHAR2(1) := 'Y';
25367 l_total_slack_flag VARCHAR2(1) := 'Y';
25368 l_effort_driven_flag_flag VARCHAR2(1) := 'Y';
25369 l_level_assignments_flag_flag VARCHAR2(1) := 'Y';
25370 l_invoice_method_flag VARCHAR2(1) := 'Y';
25371 l_customer_id_flag VARCHAR2(1) := 'Y';
25372 l_gen_etc_source_code_flag VARCHAR2(1) := 'Y';
25373 -- FP M changes end (venkat)
25374
25375 -- (begin venkat) new params for bug #3450684 -------------
25376 l_ext_act_duration_flag VARCHAR2(1) := 'Y';
25377 l_ext_remain_duration_flag VARCHAR2(1) := 'Y';
25378 l_ext_sch_duration_flag VARCHAR2(1) := 'Y';
25379 -- (end venkat) new params for bug #3450684 --------------
25380 --SMukka
25381 l_financial_task_flag VARCHAR2(1) := 'Y';
25382 l_mapped_task_id_flag VARCHAR2(1) := 'Y';
25383 l_mapped_task_reference_flag VARCHAR2(1) := 'Y';
25384 l_deliverable_flag VARCHAR2(1) := 'Y';
25385
25386 -- Progress Management Changes. Bug # 3420093.
25387 l_etc_effort_flag VARCHAR2(1) := 'Y';
25388 l_percent_complete_flag VARCHAR2(1) := 'Y';
25389 -- Progress Management Changes. Bug # 3420093.
25390
25391 -- Bug 6193314 .
25392 l_task_name VARCHAR2(240) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25393 l_long_task_name VARCHAR2(240) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25394 l_pa_task_number VARCHAR2(100) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25395 l_task_description VARCHAR2(250) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25396 l_task_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25397 l_task_completion_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25398 l_pm_parent_task_reference VARCHAR2(25) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25399 l_pa_parent_task_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25400 l_address_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25401 l_carrying_out_organization_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25402 l_service_type_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25403 l_task_manager_person_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25404 l_billable_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25405 l_chargeable_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25406 l_ready_to_bill_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25407 l_ready_to_distribute_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25408 l_limit_to_txn_controls_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25409 l_labor_bill_rate_org_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25410 l_labor_std_bill_rate_schdl VARCHAR2(20) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25411 l_labor_schedule_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25412 l_labor_schedule_discount NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25413 l_nl_bill_rate_org_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25414 l_nl_std_bill_rate_schdl VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25415 l_nl_schedule_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25416 l_nl_schedule_discount NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25417 l_labor_cost_multiplier_name VARCHAR2(20) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25418 l_cost_ind_rate_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25419 l_rev_ind_rate_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25420 l_inv_ind_rate_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25421 l_cost_ind_sch_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25422 l_rev_ind_sch_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25423 l_inv_ind_sch_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25424 l_labor_sch_type VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25425 l_nl_sch_type VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25426 l_actual_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25427 l_actual_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25428 l_early_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25429 l_early_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25430 l_late_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25431 l_late_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25432 l_scheduled_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25433 l_scheduled_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25434 l_attribute_category VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25435 l_attribute1 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25436 l_attribute2 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25437 l_attribute3 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25438 l_attribute4 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25439 l_attribute5 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25440 l_attribute6 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25441 l_attribute7 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25442 l_attribute8 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25443 l_attribute9 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25444 l_attribute10 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25445 l_allow_cross_charge_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25446 l_project_rate_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25447 l_project_rate_type VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25448 l_cc_process_labor_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25449 l_labor_tp_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25450 l_labor_tp_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25451 l_cc_process_nl_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25452 l_nl_tp_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25453 l_nl_tp_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25454 l_receive_project_invoice_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25455 l_work_type_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25456 l_emp_bill_rate_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25457 l_job_bill_rate_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25458 l_non_lab_std_bill_rt_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25459 l_taskfunc_cost_rate_type VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25460 l_taskfunc_cost_rate_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25461 l_display_sequence NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25462 l_wbs_level NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25463
25464 l_obligation_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25465 l_obligation_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25466 l_baseline_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25467 l_baseline_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25468 l_closed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25469 l_wq_uom_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25470 l_wq_item_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25471 l_status_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25472 l_wf_status_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25473 l_pm_source_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25474 l_inc_proj_progress_flag VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25475 l_link_task_flag VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25476 l_calendar_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25477 l_planned_effort NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25478 l_planned_work_quantity NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25479 l_task_type NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25480
25481 --bug 2744729, 2740565
25482 l_estimated_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25483 l_estimated_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25484 l_priority_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25485 l_milestone_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25486 l_critical_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25487 --bug 2744729, 2740565
25488
25489 l_labor_disc_reason_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25490 l_non_labor_disc_reason_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25491
25492 --bug 2872708
25493 l_retirement_cost_flag VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25494 l_cint_eligible_flag VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ;
25495 l_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25496 --bug 2872708
25497
25498 -- FP-M Bug # 3301192
25499 l_pred_string VARCHAR2(4000) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25500 l_pred_delimiter VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25501
25502 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25503 -- FP M changes begin (venkat)
25504 l_base_percent_comp_deriv_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25505 l_sch_tool_tsk_type_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25506 l_constraint_type_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25507 l_constraint_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
25508 l_free_slack NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25509 l_total_slack NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25510 l_effort_driven_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25511 l_level_assignments_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25512 l_invoice_method VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25513 l_customer_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25514 l_gen_etc_source_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25515 -- FP M changes end (venkat)
25516 -- (Begin venkat) Bug #3450684 ---------------------------------------------------
25517 l_ext_act_duration NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25518 l_ext_remain_duration NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25519 l_ext_sch_duration NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25520 -- (End venkat) Bug #3450684 ---------------------------------------------------
25521 --SMUKKA
25522 l_financial_task_fl VARCHAR2(1):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25523 l_mapped_task_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25524 l_mapped_task_reference VARCHAR2(150):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25525 l_deliverable VARCHAR2(4000):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
25526 l_deliverable_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM; -- 3661788 Added local variable
25527
25528 -- Progress Management Changes. Bug # 3420093.
25529 l_etc_effort NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25530 l_percent_complete NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
25531 -- Progress Management Changes. Bug # 3420093.
25532
25533 BEGIN
25534
25535 -- 4537865 : Initialize return status to success
25536 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25537
25538 -- Transferring all array variable to Global plsql table
25539 if (G_tasks_tbl_count = 0) then
25540 G_tasks_tbl_count := 1;
25541 end if;
25542
25543 l_stage := '1';
25544
25545 -- hyau validating what parameters are passed in.
25546 if p_task_name.count = 1 and p_task_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25547 l_task_name_flag := 'N';
25548 end if;
25549
25550 if p_long_task_name.count = 1 and p_long_task_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25551 l_long_task_name_flag := 'N';
25552 end if;
25553
25554 if p_pa_task_number.count = 1 and p_pa_task_number(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25555 l_pa_task_number_flag := 'N';
25556 end if;
25557
25558 if p_task_description.count = 1 and p_task_description(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25559 l_task_description_flag := 'N';
25560 end if;
25561
25562 if p_task_start_date.count = 1 and p_task_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25563 l_task_start_date_flag := 'N';
25564 end if;
25565
25566 if p_task_completion_date.count = 1 and p_task_completion_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25567 l_task_completion_date_flag := 'N';
25568 end if;
25569
25570 if p_pm_parent_task_reference.count = 1 and p_pm_parent_task_reference(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25571 l_pm_parent_task_ref_flag := 'N';
25572 end if;
25573
25574 if p_pa_parent_task_id.count = 1 and p_pa_parent_task_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25575 l_pa_parent_task_id_flag := 'N';
25576 end if;
25577
25578 if p_address_id.count = 1 and p_address_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25579 l_address_id_flag := 'N';
25580 end if;
25581
25582 if p_carrying_out_organization_id.count = 1 and p_carrying_out_organization_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25583 l_carrying_out_org_id_flag := 'N';
25584 end if;
25585
25586 if p_service_type_code.count = 1 and p_service_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25587 l_service_type_code_flag := 'N';
25588 end if;
25589
25590 if p_task_manager_person_id.count = 1 and p_task_manager_person_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25591 l_task_manager_person_id_flag := 'N';
25592 end if;
25593
25594 if p_billable_flag.count = 1 and p_billable_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25595 l_billable_flag_flag := 'N';
25596 end if;
25597
25598 if p_chargeable_flag.count = 1 and p_chargeable_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25599 l_chargeable_flag_flag := 'N';
25600 end if;
25601
25602 if p_ready_to_bill_flag.count = 1 and p_ready_to_bill_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25603 l_ready_to_bill_flag_flag := 'N';
25604 end if;
25605
25606 if p_ready_to_distribute_flag.count = 1 and p_ready_to_distribute_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25607 l_ready_to_dist_flag_flag := 'N';
25608 end if;
25609
25610 if p_limit_to_txn_controls_flag.count = 1 and p_limit_to_txn_controls_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25611 l_limit_to_txn_cnt_flag_flag := 'N';
25612 end if;
25613
25614 if p_labor_bill_rate_org_id.count = 1 and p_labor_bill_rate_org_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25615 l_labor_bill_rate_org_id_flag := 'N';
25616 end if;
25617
25618 if p_labor_std_bill_rate_schdl.count = 1 and p_labor_std_bill_rate_schdl(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25619 l_labor_std_bill_rate_flag := 'N';
25620 end if;
25621
25622 if p_labor_schedule_fixed_date.count = 1 and p_labor_schedule_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25623 l_labor_schd_fixed_date_flag := 'N';
25624 end if;
25625
25626 if p_labor_schedule_discount.count = 1 and p_labor_schedule_discount(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25627 l_labor_schd_discount_flag := 'N';
25628 end if;
25629
25630 if p_nl_bill_rate_org_id.count = 1 and p_nl_bill_rate_org_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25631 l_nl_bill_rate_org_id_flag := 'N';
25632 end if;
25633
25634 if p_nl_std_bill_rate_schdl.count = 1 and p_nl_std_bill_rate_schdl(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25635 l_nl_std_bill_rate_schdl_flag := 'N';
25636 end if;
25637
25638 if p_nl_schedule_fixed_date.count = 1 and p_nl_schedule_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25639 l_nl_schedule_fixed_date_flag := 'N';
25640 end if;
25641
25642 if p_nl_schedule_discount.count = 1 and p_nl_schedule_discount(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25643 l_nl_schedule_discount_flag := 'N';
25644 end if;
25645
25646 if p_labor_cost_multiplier_name.count = 1 and p_labor_cost_multiplier_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25647 l_labor_cost_mult_name_flag := 'N';
25648 end if;
25649
25650 if p_cost_ind_rate_sch_id.count = 1 and p_cost_ind_rate_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25651 l_cost_ind_rate_sch_id_flag := 'N';
25652 end if;
25653
25654 if p_rev_ind_rate_sch_id.count = 1 and p_rev_ind_rate_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25655 l_rev_ind_rate_sch_id_flag := 'N';
25656 end if;
25657
25658 if p_inv_ind_rate_sch_id.count = 1 and p_inv_ind_rate_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25659 l_inv_ind_rate_sch_id_flag := 'N';
25660 end if;
25661
25662 if p_cost_ind_sch_fixed_date.count = 1 and p_cost_ind_sch_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25663 l_cost_ind_sch_fixed_date_flag := 'N';
25664 end if;
25665
25666 if p_rev_ind_sch_fixed_date.count = 1 and p_rev_ind_sch_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25667 l_rev_ind_sch_fixed_date_flag := 'N';
25668 end if;
25669
25670 if p_inv_ind_sch_fixed_date.count = 1 and p_inv_ind_sch_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25671 l_inv_ind_sch_fixed_date_flag := 'N';
25672 end if;
25673
25674 if p_labor_sch_type.count = 1 and p_labor_sch_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25675 l_labor_sch_type_flag := 'N';
25676 end if;
25677
25678 if p_nl_sch_type.count = 1 and p_nl_sch_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25679 l_nl_sch_type_flag := 'N';
25680 end if;
25681
25682 if p_actual_start_date.count = 1 and p_actual_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25683 l_actual_start_date_flag := 'N';
25684 end if;
25685
25686 if p_actual_finish_date.count = 1 and p_actual_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25687 l_actual_finish_date_flag := 'N';
25688 end if;
25689
25690 if p_early_start_date.count = 1 and p_early_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25691 l_early_start_date_flag := 'N';
25692 end if;
25693
25694 if p_early_finish_date.count = 1 and p_early_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25695 l_early_finish_date_flag := 'N';
25696 end if;
25697
25698 if p_late_start_date.count = 1 and p_late_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25699 l_late_start_date_flag := 'N';
25700 end if;
25701
25702 if p_late_finish_date.count = 1 and p_late_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25703 l_late_finish_date_flag := 'N';
25704 end if;
25705
25706 if p_scheduled_start_date.count = 1 and p_scheduled_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25707 l_scheduled_start_date_flag := 'N';
25708 end if;
25709
25710 if p_scheduled_finish_date.count = 1 and p_scheduled_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25711 l_scheduled_finish_date_flag := 'N';
25712 end if;
25713
25714 if p_attribute_category.count = 1 and p_attribute_category(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25715 l_attribute_category_flag := 'N';
25716 end if;
25717 if p_attribute1.count = 1 and p_attribute1(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25718 l_attribute1_flag := 'N';
25719 end if;
25720 if p_attribute2.count = 1 and p_attribute2(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25721 l_attribute2_flag := 'N';
25722 end if;
25723 if p_attribute3.count = 1 and p_attribute3(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25724 l_attribute3_flag := 'N';
25725 end if;
25726 if p_attribute4.count = 1 and p_attribute4(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25727 l_attribute4_flag := 'N';
25728 end if;
25729 if p_attribute5.count = 1 and p_attribute5(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25730 l_attribute5_flag := 'N';
25731 end if;
25732 if p_attribute6.count = 1 and p_attribute6(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25733 l_attribute6_flag := 'N';
25734 end if;
25735 if p_attribute7.count = 1 and p_attribute7(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25736 l_attribute7_flag := 'N';
25737 end if;
25738 if p_attribute8.count = 1 and p_attribute8(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25739 l_attribute8_flag := 'N';
25740 end if;
25741 if p_attribute9.count = 1 and p_attribute9(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25742 l_attribute9_flag := 'N';
25743 end if;
25744 if p_attribute10.count = 1 and p_attribute10(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25745 l_attribute10_flag := 'N';
25746 end if;
25747
25748 if p_allow_cross_charge_flag.count = 1 and p_allow_cross_charge_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25749 l_allow_cross_charge_flag_flag := 'N';
25750 end if;
25751
25752 if p_project_rate_date.count = 1 and p_project_rate_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25753 l_project_rate_date_flag := 'N';
25754 end if;
25755
25756 if p_project_rate_type.count = 1 and p_project_rate_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25757 l_project_rate_type_flag := 'N';
25758 end if;
25759
25760 if p_cc_process_labor_flag.count = 1 and p_cc_process_labor_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25761 l_cc_process_labor_flag_flag := 'N';
25762 end if;
25763
25764 if p_labor_tp_schedule_id.count = 1 and p_labor_tp_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25765 l_labor_tp_schedule_id_flag := 'N';
25766 end if;
25767
25768 if p_labor_tp_fixed_date.count = 1 and p_labor_tp_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25769 l_labor_tp_fixed_date_flag := 'N';
25770 end if;
25771
25772 if p_cc_process_nl_flag.count = 1 and p_cc_process_nl_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25773 l_cc_process_nl_flag_flag := 'N';
25774 end if;
25775 if p_nl_tp_schedule_id.count = 1 and p_nl_tp_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25776 l_nl_tp_schedule_id_flag := 'N';
25777 end if;
25778
25779 if p_nl_tp_fixed_date.count = 1 and p_nl_tp_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25780 l_nl_tp_fixed_date_flag := 'N';
25781 end if;
25782
25783 if p_receive_project_invoice_flag.count = 1 and p_receive_project_invoice_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25784 l_receive_proj_inv_flag_flag := 'N';
25785 end if;
25786
25787 if p_work_type_id.count = 1 and p_work_type_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25788 l_work_type_id_flag := 'N';
25789 end if;
25790
25791 if p_emp_bill_rate_schedule_id.count = 1 and p_emp_bill_rate_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25792 l_emp_bill_rate_schd_id_flag := 'N';
25793 end if;
25794 if p_job_bill_rate_schedule_id.count = 1 and p_job_bill_rate_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25795 l_job_bill_rate_schd_id_flag := 'N';
25796 end if;
25797 if p_non_lab_std_bill_rt_sch_id.count = 1 and p_non_lab_std_bill_rt_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25798 l_non_lab_std_bill_rt_sch_flag := 'N';
25799 end if;
25800
25801 if p_taskfunc_cost_rate_type.count = 1 and p_taskfunc_cost_rate_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25802 l_taskfunc_cost_rate_type_flag := 'N';
25803 end if;
25804 if p_taskfunc_cost_rate_date.count = 1 and p_taskfunc_cost_rate_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25805 l_taskfunc_cost_rate_date_flag := 'N';
25806 end if;
25807 if p_display_sequence.count = 1 and p_display_sequence(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25808 l_display_sequence_flag := 'N';
25809 end if;
25810 if p_wbs_level.count = 1 and p_wbs_level(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25811 l_wbs_level_flag := 'N';
25812 end if;
25813
25814 if p_obligation_start_date.count = 1 and p_obligation_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25815 l_obligation_start_date_flag := 'N';
25816 end if;
25817
25818 if p_obligation_finish_date.count = 1 and p_obligation_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25819 l_obligation_finish_date_flag := 'N';
25820 end if;
25821
25822 if p_baseline_start_date.count = 1 and p_baseline_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25823 l_baseline_start_date_flag := 'N';
25824 end if;
25825
25826 if p_baseline_finish_date.count = 1 and p_baseline_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25827 l_baseline_finish_date_flag := 'N';
25828 end if;
25829
25830 if p_closed_date.count = 1 and p_closed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25831 l_closed_date_flag := 'N';
25832 end if;
25833
25834 if p_wq_uom_code.count = 1 and p_wq_uom_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25835 l_wq_uom_code_flag := 'N';
25836 end if;
25837
25838 if p_wq_item_code.count = 1 and p_wq_item_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25839 l_wq_item_code_flag := 'N';
25840 end if;
25841 if p_status_code.count = 1 and p_status_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25842 l_status_code_flag := 'N';
25843 end if;
25844
25845 if p_wf_status_code.count = 1 and p_wf_status_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25846 l_wf_status_code_flag := 'N';
25847 end if;
25848
25849 if p_pm_source_code.count = 1 and p_pm_source_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25850 l_pm_source_code_flag := 'N';
25851 end if;
25852
25853 if p_inc_proj_progress_flag.count = 1 and p_inc_proj_progress_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25854 l_inc_proj_progress_flag_flag := 'N';
25855 end if;
25856
25857 if p_link_task_flag.count = 1 and p_link_task_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25858 l_link_task_flag_flag := 'N';
25859 end if;
25860
25861
25862 if p_calendar_id.count = 1 and p_calendar_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25863 l_calendar_id_flag := 'N';
25864 end if;
25865
25866 if p_planned_effort.count = 1 and p_planned_effort(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25867 l_planned_effort_flag := 'N';
25868 end if;
25869
25870 if p_planned_work_quantity.count = 1 and p_planned_work_quantity(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25871 l_planned_work_quantity_flag := 'N';
25872 end if;
25873
25874 if p_task_type.count = 1 and p_task_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25875 l_task_type_flag := 'N';
25876 end if;
25877
25878 --bug 2744729, 2740565
25879 if p_estimated_start_date.count = 1 and p_estimated_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25880 l_estimated_start_date_flag := 'N';
25881 end if;
25882
25883 if p_estimated_finish_date.count = 1 and p_estimated_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25884 l_estimated_finish_date_flag := 'N';
25885 end if;
25886
25887 if p_priority_code.count = 1 and p_priority_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25888 l_priority_code_flag := 'N';
25889 end if;
25890
25891 if p_milestone.count = 1 and p_milestone(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25892 l_milestone_flag_flag := 'N';
25893 end if;
25894
25895 if p_critical_flag.count = 1 and p_critical_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25896 l_critical_flag_flag := 'N';
25897 end if;
25898 --bug 2744729, 2740565
25899
25900 if p_labor_disc_reason_code.count = 1 and p_labor_disc_reason_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25901 l_labor_disc_reason_code_flag := 'N';
25902 end if;
25903
25904 if p_non_labor_disc_reason_code.count = 1 and p_non_labor_disc_reason_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25905 l_nl_disc_reason_code_flag := 'N';
25906 end if;
25907
25908 --bug 2872708
25909 if p_retirement_cost_flag.count = 1 and p_retirement_cost_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25910 l_retirement_cost_flag_flag := 'N';
25911 end if;
25912
25913 if p_cint_eligible_flag.count = 1 and p_cint_eligible_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25914 l_cint_eligible_flag_flag := 'N';
25915 end if;
25916
25917 if p_cint_stop_date.count = 1 and p_cint_stop_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25918 l_cint_stop_date_flag := 'N';
25919 end if;
25920 --bug 2872708
25921
25922 -- FP-M Bug # 3301192
25923 if p_pred_string.count = 1 and p_pred_string(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25924 l_pred_string_flag := 'N';
25925 end if;
25926
25927 if p_pred_delimiter.count = 1 and p_pred_delimiter(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25928 l_pred_delimiter_flag := 'N';
25929 end if;
25930
25931 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25932 -- FP M changes begin (venkat)
25933
25934 if p_base_percent_comp_deriv_code.count = 1 and p_base_percent_comp_deriv_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25935 l_base_prct_comp_drv_code_flag := 'N';
25936 end if;
25937
25938 if p_sch_tool_tsk_type_code.count = 1 and p_sch_tool_tsk_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25939 l_sch_tool_tsk_type_code_flag := 'N';
25940 end if;
25941
25942 if p_constraint_type_code.count = 1 and p_constraint_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25943 l_constraint_type_code_flag := 'N';
25944 end if;
25945
25946 if p_constraint_date.count = 1 and p_constraint_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
25947 l_constraint_date_flag := 'N';
25948 end if;
25949
25950 if p_free_slack.count = 1 and p_free_slack(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25951 l_free_slack_flag := 'N';
25952 end if;
25953
25954 if p_total_slack.count = 1 and p_total_slack(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25955 l_total_slack_flag := 'N';
25956 end if;
25957
25958 if p_effort_driven_flag.count = 1 and p_effort_driven_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25959 l_effort_driven_flag_flag := 'N';
25960 end if;
25961
25962
25963 if p_level_assignments_flag.count = 1 and p_level_assignments_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25964 l_level_assignments_flag_flag := 'N';
25965 end if;
25966
25967 if p_invoice_method.count = 1 and p_invoice_method(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25968 l_invoice_method_flag := 'N';
25969 end if;
25970
25971 if p_customer_id.count = 1 and p_customer_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25972 l_customer_id_flag := 'N';
25973 end if;
25974
25975
25976 if p_gen_etc_source_code.count = 1 and p_gen_etc_source_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25977 l_gen_etc_source_code_flag := 'N';
25978 end if;
25979
25980 -- FP M changes end (venkat)
25981
25982 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
25983
25984 if p_ext_act_duration.count = 1 and p_ext_act_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25985 l_ext_act_duration_flag := 'N';
25986 end if;
25987
25988 if p_ext_remain_duration.count = 1 and p_ext_remain_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25989 l_ext_remain_duration_flag := 'N';
25990 end if;
25991
25992 if p_ext_sch_duration.count = 1 and p_ext_sch_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
25993 l_ext_sch_duration_flag := 'N';
25994 end if;
25995
25996 -- (End venkat) new params for bug #3450684 -------------------------------------------------
25997 --SMukka
25998 if p_financial_task_flag.count = 1 and p_financial_task_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
25999 l_financial_task_flag := 'N';
26000 end if;
26001
26002 if p_mapped_task_id.count = 1 and p_mapped_task_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26003 l_mapped_task_id_flag := 'N';
26004 end if;
26005
26006 if p_mapped_task_reference.count = 1 and p_mapped_task_reference(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26007 l_mapped_task_reference_flag := 'N';
26008 end if;
26009
26010 -- 3661788 added condition for deliverable_id
26011
26012 if p_deliverable.count = 1 and ( p_deliverable(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR and p_deliverable_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) then
26013 l_deliverable_flag := 'N';
26014 end if;
26015
26016 if p_etc_effort.count = 1 and p_etc_effort(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26017 l_etc_effort_flag := 'N';
26018 end if;
26019
26020 if p_percent_complete.count = 1 and p_percent_complete(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26021 l_percent_complete_flag := 'N';
26022 end if;
26023
26024 --error_msg('BEFORE THE FOR LOOP ');
26025
26026 FOR i in 1..1000 LOOP
26027
26028 if p_pm_task_reference(i) is null then
26029 -- G_tasks_tbl_count := i;
26030 -- error_msg('INSIDE THE LOOP '||G_tasks_tbl_count);
26031 return;
26032 end if;
26033
26034 if l_task_name_flag = 'N' then
26035 l_task_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26036 else
26037 /*Start of changes for bug 4024659*/
26038
26039 --l_task_name := substr(p_task_name(i),1,20);
26040
26041 l_task_name := substrb(p_task_name(i),1,240); -- Bug 6193314 . Changed to 240 from 20
26042
26043 /*End of changes for bug 4024659*/
26044 end if;
26045
26046 if l_long_task_name_flag = 'N' then
26047 l_long_task_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26048 else
26049 /*Start of changes for bug 4024659*/
26050
26051 --l_long_task_name := substr(p_long_task_name(i),1,240);
26052
26053 l_long_task_name := substrb(p_long_task_name(i),1,240);
26054
26055 /*End of changes for bug 4024659*/
26056 end if;
26057
26058 if l_pa_task_number_flag = 'N' then
26059 l_pa_task_number := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26060 else
26061 l_pa_task_number := substrb(p_pa_task_number(i),1,100); -- Modified for bug 6193314
26062 end if;
26063
26064 if l_task_description_flag = 'N' then
26065 l_task_description := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26066 else
26067 l_task_description := substrb(p_task_description(i),1,250); -- Fix for Bug # 4513291.
26068 end if;
26069
26070 if l_task_start_date_flag = 'N' then
26071 l_task_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26072 else
26073 l_task_start_date := p_task_start_date(i);
26074 end if;
26075
26076 if l_task_completion_date_flag = 'N' then
26077 l_task_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26078 else
26079 l_task_completion_date := p_task_completion_date(i);
26080 end if;
26081
26082 if l_pm_parent_task_ref_flag = 'N' then
26083 l_pm_parent_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26084 else
26085 l_pm_parent_task_reference := p_pm_parent_task_reference(i);
26086 end if;
26087
26088 if l_pa_parent_task_id_flag = 'N' then
26089 l_pa_parent_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26090 else
26091 l_pa_parent_task_id := p_pa_parent_task_id(i);
26092 end if;
26093
26094 if l_address_id_flag = 'N' then
26095 l_address_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26096 else
26097 l_address_id := p_address_id(i);
26098 end if;
26099
26100 if l_carrying_out_org_id_flag = 'N' then
26101 l_carrying_out_organization_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26102 else
26103 l_carrying_out_organization_id := p_carrying_out_organization_id(i);
26104 end if;
26105
26106 if l_service_type_code_flag = 'N' then
26107 l_service_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26108 else
26109 l_service_type_code := p_service_type_code(i);
26110 end if;
26111
26112 if l_task_manager_person_id_flag = 'N' then
26113 l_task_manager_person_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26114 else
26115 l_task_manager_person_id := p_task_manager_person_id(i);
26116 end if;
26117 -- Added NVL for bug 4737984
26118 if l_billable_flag_flag = 'N' then
26119 l_billable_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26120 else
26121 l_billable_flag := NVL(p_billable_flag(i),PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
26122 end if;
26123 -- Added NVL for bug 4737984
26124 if l_chargeable_flag_flag = 'N' then
26125 l_chargeable_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26126 else
26127 l_chargeable_flag := NVL(p_chargeable_flag(i),PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
26128 end if;
26129
26130 if l_ready_to_bill_flag_flag = 'N' then
26131 l_ready_to_bill_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26132 else
26133 l_ready_to_bill_flag := p_ready_to_bill_flag(i);
26134 end if;
26135
26136 if l_ready_to_dist_flag_flag = 'N' then
26137 l_ready_to_distribute_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26138 else
26139 l_ready_to_distribute_flag := p_ready_to_distribute_flag(i);
26140 end if;
26141
26142 if l_limit_to_txn_cnt_flag_flag = 'N' then
26143 l_limit_to_txn_controls_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26144 else
26145 l_limit_to_txn_controls_flag := p_limit_to_txn_controls_flag(i);
26146 end if;
26147
26148 if l_labor_bill_rate_org_id_flag = 'N' then
26149 l_labor_bill_rate_org_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26150 else
26151 l_labor_bill_rate_org_id := p_labor_bill_rate_org_id(i);
26152 end if;
26153
26154 if l_labor_std_bill_rate_flag = 'N' then
26155 l_labor_std_bill_rate_schdl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26156 else
26157 l_labor_std_bill_rate_schdl := p_labor_std_bill_rate_schdl(i);
26158 end if;
26159
26160 if l_labor_schd_fixed_date_flag = 'N' then
26161 l_labor_schedule_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26162 else
26163 l_labor_schedule_fixed_date := p_labor_schedule_fixed_date(i);
26164 end if;
26165
26166 if l_labor_schd_discount_flag = 'N' then
26167 l_labor_schedule_discount := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26168 else
26169 l_labor_schedule_discount := p_labor_schedule_discount(i);
26170 end if;
26171
26172 if l_nl_bill_rate_org_id_flag = 'N' then
26173 l_nl_bill_rate_org_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26174 else
26175 l_nl_bill_rate_org_id := p_nl_bill_rate_org_id(i);
26176 end if;
26177
26178 if l_nl_std_bill_rate_schdl_flag = 'N' then
26179 l_nl_std_bill_rate_schdl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26180 else
26181 l_nl_std_bill_rate_schdl := p_nl_std_bill_rate_schdl(i);
26182 end if;
26183
26184 if l_nl_schedule_fixed_date_flag = 'N' then
26185 l_nl_schedule_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26186 else
26187 l_nl_schedule_fixed_date := p_nl_schedule_fixed_date(i);
26188 end if;
26189
26190 if l_nl_schedule_discount_flag = 'N' then
26191 l_nl_schedule_discount := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26192 else
26193 l_nl_schedule_discount := p_nl_schedule_discount(i);
26194 end if;
26195
26196 if l_labor_cost_mult_name_flag = 'N' then
26197 l_labor_cost_multiplier_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26198 else
26199 l_labor_cost_multiplier_name := p_labor_cost_multiplier_name(i);
26200 end if;
26201
26202 if l_cost_ind_rate_sch_id_flag = 'N' then
26203 l_cost_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26204 else
26205 l_cost_ind_rate_sch_id := p_cost_ind_rate_sch_id(i);
26206 end if;
26207
26208 if l_rev_ind_rate_sch_id_flag = 'N' then
26209 l_rev_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26210 else
26211 l_rev_ind_rate_sch_id := p_rev_ind_rate_sch_id(i);
26212 end if;
26213
26214 if l_inv_ind_rate_sch_id_flag = 'N' then
26215 l_inv_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26216 else
26217 l_inv_ind_rate_sch_id := p_inv_ind_rate_sch_id(i);
26218 end if;
26219
26220 if l_cost_ind_sch_fixed_date_flag = 'N' then
26221 l_cost_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26222 else
26223 l_cost_ind_sch_fixed_date := p_cost_ind_sch_fixed_date(i);
26224 end if;
26225
26226 if l_rev_ind_sch_fixed_date_flag = 'N' then
26227 l_rev_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26228 else
26229 l_rev_ind_sch_fixed_date := p_rev_ind_sch_fixed_date(i);
26230 end if;
26231
26232 if l_inv_ind_sch_fixed_date_flag = 'N' then
26233 l_inv_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26234 else
26235 l_inv_ind_sch_fixed_date := p_inv_ind_sch_fixed_date(i);
26236 end if;
26237
26238 if l_labor_sch_type_flag = 'N' then
26239 l_labor_sch_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26240 else
26241 l_labor_sch_type := p_labor_sch_type(i);
26242 end if;
26243
26244 if l_nl_sch_type_flag = 'N' then
26245 l_nl_sch_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26246 else
26247 l_nl_sch_type := p_nl_sch_type(i);
26248 end if;
26249
26250 if l_actual_start_date_flag = 'N' then
26251 l_actual_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26252 else
26253 l_actual_start_date := p_actual_start_date(i);
26254 end if;
26255
26256 if l_actual_finish_date_flag = 'N' then
26257 l_actual_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26258 else
26259 l_actual_finish_date := p_actual_finish_date(i);
26260 end if;
26261
26262 if l_early_start_date_flag = 'N' then
26263 l_early_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26264 else
26265 l_early_start_date := p_early_start_date(i);
26266 end if;
26267
26268 if l_early_finish_date_flag = 'N' then
26269 l_early_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26270 else
26271 l_early_finish_date := p_early_finish_date(i);
26272 end if;
26273
26274 if l_late_start_date_flag = 'N' then
26275 l_late_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26276 else
26277 l_late_start_date := p_late_start_date(i);
26278 end if;
26279
26280 if l_late_finish_date_flag = 'N' then
26281 l_late_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26282 else
26283 l_late_finish_date := p_late_finish_date(i);
26284 end if;
26285
26286 if l_scheduled_start_date_flag = 'N' then
26287 l_scheduled_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26288 else
26289 l_scheduled_start_date := p_scheduled_start_date(i);
26290 end if;
26291
26292 if l_scheduled_finish_date_flag = 'N' then
26293 l_scheduled_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26294 else
26295 l_scheduled_finish_date := p_scheduled_finish_date(i);
26296 end if;
26297
26298 if l_attribute_category_flag = 'N' then
26299 l_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26300 else
26301 l_attribute_category := p_attribute_category(i);
26302 end if;
26303
26304 if l_attribute1_flag = 'N' then
26305 l_attribute1 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26306 else
26307 l_attribute1 := p_attribute1(i);
26308 end if;
26309
26310 if l_attribute2_flag = 'N' then
26311 l_attribute2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26312 else
26313 l_attribute2 := p_attribute2(i);
26314 end if;
26315
26316 if l_attribute3_flag = 'N' then
26317 l_attribute3 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26318 else
26319 l_attribute3 := p_attribute3(i);
26320 end if;
26321
26322 if l_attribute4_flag = 'N' then
26323 l_attribute4 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26324 else
26325 l_attribute4 := p_attribute4(i);
26326 end if;
26327
26328 if l_attribute5_flag = 'N' then
26329 l_attribute5 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26330 else
26331 l_attribute5 := p_attribute5(i);
26332 end if;
26333
26334 if l_attribute6_flag = 'N' then
26335 l_attribute6 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26336 else
26337 l_attribute6 := p_attribute6(i);
26338 end if;
26339
26340 if l_attribute7_flag = 'N' then
26341 l_attribute7 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26342 else
26343 l_attribute7 := p_attribute7(i);
26344 end if;
26345
26346 if l_attribute8_flag = 'N' then
26347 l_attribute8 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26348 else
26349 l_attribute8 := p_attribute8(i);
26350 end if;
26351
26352 if l_attribute9_flag = 'N' then
26353 l_attribute9 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26354 else
26355 l_attribute9 := p_attribute9(i);
26356 end if;
26357
26358 if l_attribute10_flag = 'N' then
26359 l_attribute10 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26360 else
26361 l_attribute10 := p_attribute10(i);
26362 end if;
26363
26364 if l_allow_cross_charge_flag_flag = 'N' then
26365 l_allow_cross_charge_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26366 else
26367 l_allow_cross_charge_flag := p_allow_cross_charge_flag(i);
26368 end if;
26369
26370 if l_project_rate_date_flag = 'N' then
26371 l_project_rate_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26372 else
26373 l_project_rate_date := p_project_rate_date(i);
26374 end if;
26375
26376 if l_project_rate_type_flag = 'N' then
26377 l_project_rate_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26378 else
26379 l_project_rate_type := p_project_rate_type(i);
26380 end if;
26381
26382 if l_allow_cross_charge_flag_flag = 'N' then
26383 l_allow_cross_charge_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26384 else
26385 l_allow_cross_charge_flag := p_allow_cross_charge_flag(i);
26386 end if;
26387
26388 if l_cc_process_labor_flag_flag = 'N' then
26389 l_cc_process_labor_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26390 else
26391 l_cc_process_labor_flag := p_cc_process_labor_flag(i);
26392 end if;
26393
26394 if l_labor_tp_schedule_id_flag = 'N' then
26395 l_labor_tp_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26396 else
26397 l_labor_tp_schedule_id := p_labor_tp_schedule_id(i);
26398 end if;
26399
26400 if l_labor_tp_fixed_date_flag = 'N' then
26401 l_labor_tp_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26402 else
26403 l_labor_tp_fixed_date := p_labor_tp_fixed_date(i);
26404 end if;
26405
26406 if l_cc_process_nl_flag_flag = 'N' then
26407 l_cc_process_nl_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26408 else
26409 l_cc_process_nl_flag := p_cc_process_nl_flag(i);
26410 end if;
26411
26412 if l_nl_tp_schedule_id_flag = 'N' then
26413 l_nl_tp_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26414 else
26415 l_nl_tp_schedule_id := p_nl_tp_schedule_id(i);
26416 end if;
26417
26418 if l_nl_tp_fixed_date_flag = 'N' then
26419 l_nl_tp_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26420 else
26421 l_nl_tp_fixed_date := p_nl_tp_fixed_date(i);
26422 end if;
26423
26424 if l_receive_proj_inv_flag_flag = 'N' then
26425 l_receive_project_invoice_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26426 else
26427 l_receive_project_invoice_flag := p_receive_project_invoice_flag(i);
26428 end if;
26429
26430 if l_work_type_id_flag = 'N' then
26431 l_work_type_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26432 else
26433 l_work_type_id := p_work_type_id(i);
26434 end if;
26435
26436 if l_emp_bill_rate_schd_id_flag = 'N' then
26437 l_emp_bill_rate_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26438 else
26439 l_emp_bill_rate_schedule_id := p_emp_bill_rate_schedule_id(i);
26440 end if;
26441
26442 if l_job_bill_rate_schd_id_flag = 'N' then
26443 l_job_bill_rate_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26444 else
26445 l_job_bill_rate_schedule_id := p_job_bill_rate_schedule_id(i);
26446 end if;
26447
26448 if l_non_lab_std_bill_rt_sch_flag = 'N' then
26449 l_non_lab_std_bill_rt_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26450 else
26451 l_non_lab_std_bill_rt_sch_id := p_non_lab_std_bill_rt_sch_id(i);
26452 end if;
26453
26454 if l_taskfunc_cost_rate_type_flag = 'N' then
26455 l_taskfunc_cost_rate_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26456 else
26457 l_taskfunc_cost_rate_type := p_taskfunc_cost_rate_type(i);
26458 end if;
26459
26460 if l_taskfunc_cost_rate_date_flag = 'N' then
26461 l_taskfunc_cost_rate_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26462 else
26463 l_taskfunc_cost_rate_date := p_taskfunc_cost_rate_date(i);
26464 end if;
26465
26466 if l_display_sequence_flag = 'N' then
26467 l_display_sequence := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26468 else
26469 l_display_sequence := p_display_sequence(i);
26470 end if;
26471
26472 if l_wbs_level_flag = 'N' then
26473 l_wbs_level := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26474 else
26475 l_wbs_level := p_wbs_level(i);
26476 end if;
26477
26478 if l_obligation_start_date_flag = 'N' then
26479 l_obligation_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26480 else
26481 l_obligation_start_date := p_obligation_start_date(i);
26482 end if;
26483
26484 if l_obligation_finish_date_flag = 'N' then
26485 l_obligation_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26486 else
26487 l_obligation_finish_date := p_obligation_finish_date(i);
26488 end if;
26489
26490
26491 if l_baseline_start_date_flag = 'N' then
26492 l_baseline_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26493 else
26494 l_baseline_start_date := p_baseline_start_date(i);
26495 end if;
26496
26497 if l_baseline_finish_date_flag = 'N' then
26498 l_baseline_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26499 else
26500 l_baseline_finish_date := p_baseline_finish_date(i);
26501 end if;
26502
26503 if l_closed_date_flag = 'N' then
26504 l_closed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26505 else
26506 l_closed_date := p_closed_date(i);
26507 end if;
26508
26509 if l_wq_uom_code_flag = 'N' then
26510 l_wq_uom_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26511 else
26512 l_wq_uom_code := p_wq_uom_code(i);
26513 end if;
26514
26515 if l_wq_item_code_flag = 'N' then
26516 l_wq_item_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26517 else
26518 l_wq_item_code := p_wq_item_code(i);
26519 end if;
26520
26521 if l_status_code_flag = 'N' then
26522 l_status_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26523 else
26524 l_status_code := p_status_code(i);
26525 end if;
26526
26527
26528 if l_wf_status_code_flag = 'N' then
26529 l_wf_status_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26530 else
26531 l_wf_status_code := p_wf_status_code(i);
26532 end if;
26533
26534 if l_pm_source_code_flag = 'N' then
26535 l_pm_source_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26536 else
26537 l_pm_source_code := p_pm_source_code(i);
26538 end if;
26539
26540
26541 if l_inc_proj_progress_flag_flag = 'N' then
26542 l_inc_proj_progress_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26543 else
26544 l_inc_proj_progress_flag := p_inc_proj_progress_flag(i);
26545 end if;
26546
26547 if l_link_task_flag_flag = 'N' then
26548 l_link_task_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26549 else
26550 l_link_task_flag := p_link_task_flag(i);
26551 end if;
26552
26553 if l_calendar_id_flag = 'N' then
26554 l_calendar_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26555 else
26556 l_calendar_id := p_calendar_id(i);
26557 end if;
26558
26559 if l_planned_effort_flag = 'N' then
26560 l_planned_effort := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26561 else
26562 l_planned_effort := p_planned_effort(i);
26563 end if;
26564
26565 if l_planned_work_quantity_flag = 'N' then
26566 l_planned_work_quantity := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26567 else
26568 l_planned_work_quantity := p_planned_work_quantity(i);
26569 end if;
26570
26571
26572 if l_task_type_flag = 'N' then
26573 l_task_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26574 else
26575 l_task_type := p_task_type(i);
26576 end if;
26577
26578 --bug 2744729, 2740565
26579 if l_estimated_start_date_flag = 'N' then
26580 l_estimated_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26581 else
26582 l_estimated_start_date := p_estimated_start_date(i);
26583 end if;
26584
26585 if l_estimated_finish_date_flag = 'N' then
26586 l_estimated_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26587 else
26588 l_estimated_finish_date := p_estimated_finish_date(i);
26589 end if;
26590
26591 if l_critical_flag_flag = 'N' then
26592 l_critical_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26593 else
26594 l_critical_flag := p_critical_flag(i);
26595 end if;
26596
26597 if l_milestone_flag_flag = 'N' then
26598 l_milestone_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26599 else
26600 l_milestone_flag := p_milestone(i);
26601 end if;
26602
26603 if l_priority_code_flag = 'N' then
26604 l_priority_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26605 else
26606 l_priority_code := p_priority_code(i);
26607 end if;
26608 --bug 2744729, 2740565
26609
26610 if l_labor_disc_reason_code_flag = 'N' then
26611 l_labor_disc_reason_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26612 else
26613 l_labor_disc_reason_code := p_labor_disc_reason_code(i);
26614 end if;
26615
26616 if l_nl_disc_reason_code_flag = 'N' then
26617 l_non_labor_disc_reason_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26618 else
26619 l_non_labor_disc_reason_code := p_non_labor_disc_reason_code(i);
26620 end if;
26621
26622 --bug 2872708
26623 if l_retirement_cost_flag_flag = 'N' then
26624 l_retirement_cost_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26625 else
26626 l_retirement_cost_flag := p_retirement_cost_flag(i);
26627 end if;
26628
26629 if l_cint_eligible_flag_flag = 'N' then
26630 l_cint_eligible_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26631 else
26632 l_cint_eligible_flag := p_cint_eligible_flag(i);
26633 end if;
26634
26635 if l_cint_stop_date_flag = 'N' then
26636 l_cint_stop_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26637 else
26638 l_cint_stop_date := p_cint_stop_date(i);
26639 end if;
26640 --bug 2872708
26641
26642 -- FP-M Bug # 3301192
26643 if l_pred_string_flag = 'N' then
26644 l_pred_string := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26645 else
26646 l_pred_string := p_pred_string(i);
26647 end if;
26648
26649 if l_pred_delimiter_flag = 'N' then
26650 l_pred_delimiter := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26651 else
26652 l_pred_delimiter := p_pred_delimiter(i);
26653 end if;
26654
26655 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
26656 -- FP M changes begin (venkat)
26657
26658 if l_base_prct_comp_drv_code_flag = 'N' then
26659 l_base_percent_comp_deriv_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26660 else
26661 l_base_percent_comp_deriv_code := p_base_percent_comp_deriv_code(i);
26662 end if;
26663
26664 if l_sch_tool_tsk_type_code_flag = 'N' then
26665 l_sch_tool_tsk_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26666 else
26667 l_sch_tool_tsk_type_code := p_sch_tool_tsk_type_code(i);
26668 end if;
26669
26670 if l_constraint_type_code_flag = 'N' then
26671 l_constraint_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26672 else
26673 l_constraint_type_code := p_constraint_type_code(i);
26674 end if;
26675
26676
26677 if l_constraint_date_flag = 'N' then
26678 l_constraint_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26679 else
26680 l_constraint_date := p_constraint_date(i);
26681 end if;
26682
26683
26684 if l_free_slack_flag = 'N' then
26685 l_free_slack := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26686 else
26687 l_free_slack := p_free_slack(i);
26688 end if;
26689
26690
26691 if l_total_slack_flag = 'N' then
26692 l_total_slack := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26693 else
26694 l_total_slack := p_total_slack(i);
26695 end if;
26696
26697 if l_effort_driven_flag_flag = 'N' then
26698 l_effort_driven_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26699 else
26700 l_effort_driven_flag := p_effort_driven_flag(i);
26701 end if;
26702
26703
26704 if l_level_assignments_flag_flag = 'N' then
26705 l_level_assignments_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26706 else
26707 l_level_assignments_flag := p_level_assignments_flag(i);
26708 end if;
26709
26710
26711 if l_invoice_method_flag = 'N' then
26712 l_invoice_method := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26713 else
26714 l_invoice_method := p_invoice_method(i);
26715 end if;
26716
26717
26718 if l_customer_id_flag = 'N' then
26719 l_customer_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26720 else
26721 l_customer_id := p_customer_id(i);
26722 end if;
26723
26724 if l_gen_etc_source_code_flag = 'N' then
26725 l_gen_etc_source_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26726 else
26727 l_gen_etc_source_code := p_gen_etc_source_code(i);
26728 end if;
26729
26730 -- FP M changes end (venkat)
26731
26732 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
26733
26734 if l_ext_act_duration_flag = 'N' then
26735 l_ext_act_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26736 else
26737 l_ext_act_duration := p_ext_act_duration(i);
26738 end if;
26739
26740 if l_ext_remain_duration_flag = 'N' then
26741 l_ext_remain_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26742 else
26743 l_ext_remain_duration := p_ext_remain_duration(i);
26744 end if;
26745
26746 if l_ext_sch_duration_flag = 'N' then
26747 l_ext_sch_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26748 else
26749 l_ext_sch_duration := p_ext_sch_duration(i);
26750 end if;
26751
26752 -- (end venkat) new params for bug #3450684 ----------------------------------------------
26753 --SMukka
26754 -- 3661788 added code for l_deliverable_id
26755
26756 if l_deliverable_flag = 'N' then
26757 l_deliverable := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26758 l_deliverable_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26759 else
26760 l_deliverable := p_deliverable(i);
26761 l_deliverable_id := p_deliverable_id(i);
26762 end if;
26763
26764 if l_financial_task_flag = 'N' then
26765 l_financial_task_fl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26766 else
26767 l_financial_task_fl := p_financial_task_flag(i);
26768 end if;
26769
26770 if l_mapped_task_id_flag = 'N' then
26771 l_mapped_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26772 else
26773 l_mapped_task_id := p_mapped_task_id(i);
26774 end if;
26775
26776 if l_mapped_task_reference_flag = 'N' then
26777 l_mapped_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26778 else
26779 l_mapped_task_reference := p_mapped_task_reference(i);
26780 end if;
26781
26782 -- Progress Management Changes. Bug # 3420093.
26783
26784 if l_etc_effort_flag = 'N' then
26785 l_etc_effort := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26786 else
26787 l_etc_effort := p_etc_effort(i);
26788 end if;
26789
26790 if l_percent_complete_flag = 'N' then
26791 l_percent_complete := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26792 else
26793 l_percent_complete := p_percent_complete(i);
26794 end if;
26795
26796 -- Progress Management Changes. Bug # 3420093.
26797
26798
26799 PA_PROJECT_PUB.load_task (
26800 p_api_version_number => G_API_VERSION_NUMBER
26801 ,p_init_msg_list => p_init_msg_list
26802 ,p_return_status => l_return_status
26803 ,p_pm_task_reference => p_pm_task_reference(i)
26804 ,p_pa_task_id => p_pa_task_id(i)
26805 ,p_task_name => l_task_name
26806 ,p_long_task_name => l_long_task_name
26807 ,p_pa_task_number => l_pa_task_number
26808 ,p_task_description => l_task_description
26809 ,p_task_start_date => l_task_start_date
26810 ,p_task_completion_date => l_task_completion_date
26811 ,p_scheduled_start_date => l_scheduled_start_date
26812 ,p_scheduled_finish_date => l_scheduled_finish_date
26813 ,p_display_sequence => l_display_sequence
26814 ,p_wbs_level => l_wbs_level
26815 ,p_pm_parent_task_reference => l_pm_parent_task_reference
26816 ,p_pa_parent_task_id => l_pa_parent_task_id
26817 ,p_address_id => l_address_id
26818 ,p_carrying_out_organization_id => l_carrying_out_organization_id
26819 ,p_service_type_code => l_service_type_code
26820 ,p_task_manager_person_id => l_task_manager_person_id
26821 ,p_billable_flag => l_billable_flag
26822 ,p_chargeable_flag => l_chargeable_flag
26823 ,p_ready_to_bill_flag => l_ready_to_bill_flag
26824 ,p_ready_to_distribute_flag => l_ready_to_distribute_flag
26825 ,p_limit_to_txn_controls_flag => l_limit_to_txn_controls_flag
26826 ,p_labor_bill_rate_org_id => l_labor_bill_rate_org_id
26827 ,p_labor_std_bill_rate_schdl => l_labor_std_bill_rate_schdl
26828 ,p_labor_schedule_fixed_date => l_labor_schedule_fixed_date
26829 ,p_labor_schedule_discount => l_labor_schedule_discount
26830 ,p_nl_bill_rate_org_id => l_nl_bill_rate_org_id
26831 ,p_nl_std_bill_rate_schdl => l_nl_std_bill_rate_schdl
26832 ,p_nl_schedule_fixed_date => l_nl_schedule_fixed_date
26833 ,p_nl_schedule_discount => l_nl_schedule_discount
26834 ,p_labor_cost_multiplier_name => l_labor_cost_multiplier_name
26835 ,p_cost_ind_rate_sch_id => l_cost_ind_rate_sch_id
26836 ,p_rev_ind_rate_sch_id => l_rev_ind_rate_sch_id
26837 ,p_inv_ind_rate_sch_id => l_inv_ind_rate_sch_id
26838 ,p_cost_ind_sch_fixed_date => l_cost_ind_sch_fixed_date
26839 ,p_rev_ind_sch_fixed_date => l_rev_ind_sch_fixed_date
26840 ,p_inv_ind_sch_fixed_date => l_inv_ind_sch_fixed_date
26841 ,p_labor_sch_type => l_labor_sch_type
26842 ,p_nl_sch_type => l_nl_sch_type
26843 ,p_actual_start_date => l_actual_start_date
26844 ,p_actual_finish_date => l_actual_finish_date
26845 ,p_early_start_date => l_early_start_date
26846 ,p_early_finish_date => l_early_finish_date
26847 ,p_late_start_date => l_late_start_date
26848 ,p_late_finish_date => l_late_finish_date
26849 ,p_attribute_category => l_attribute_category
26850 ,p_attribute1 => l_attribute1
26851 ,p_attribute2 => l_attribute2
26852 ,p_attribute3 => l_attribute3
26853 ,p_attribute4 => l_attribute4
26854 ,p_attribute5 => l_attribute5
26855 ,p_attribute6 => l_attribute6
26856 ,p_attribute7 => l_attribute7
26857 ,p_attribute8 => l_attribute8
26858 ,p_attribute9 => l_attribute9
26859 ,p_attribute10 => l_attribute10
26860 ,p_allow_cross_charge_flag => l_allow_cross_charge_flag
26861 ,p_project_rate_date => l_project_rate_date
26862 ,p_project_rate_type => l_project_rate_type
26863 ,p_cc_process_labor_flag => l_cc_process_labor_flag
26864 ,p_labor_tp_schedule_id => l_labor_tp_schedule_id
26865 ,p_labor_tp_fixed_date => l_labor_tp_fixed_date
26866 ,p_cc_process_nl_flag => l_cc_process_nl_flag
26867 ,p_nl_tp_schedule_id => l_nl_tp_schedule_id
26868 ,p_nl_tp_fixed_date => l_nl_tp_fixed_date
26869 ,p_receive_project_invoice_flag => l_receive_project_invoice_flag
26870 ,p_work_type_id => l_work_type_id
26871 ,p_emp_bill_rate_schedule_id => l_emp_bill_rate_schedule_id
26872 ,p_job_bill_rate_schedule_id => l_job_bill_rate_schedule_id
26873 ,p_non_lab_std_bill_rt_sch_id => l_non_lab_std_bill_rt_sch_id
26874 ,p_taskfunc_cost_rate_type => l_taskfunc_cost_rate_type
26875 ,p_taskfunc_cost_rate_date => l_taskfunc_cost_rate_date
26876 ,P_OBLIGATION_START_DATE => l_obligation_start_date
26877 ,P_OBLIGATION_FINISH_DATE => l_obligation_finish_date
26878 ,P_BASELINE_START_DATE => l_baseline_start_date
26879 ,P_BASELINE_FINISH_DATE => l_baseline_finish_date
26880 ,P_CLOSED_DATE => l_closed_date
26881 ,P_WQ_UOM_CODE => l_wq_uom_code
26882 ,P_WQ_ITEM_CODE => l_wq_item_code
26883 ,P_STATUS_CODE => l_status_code
26884 ,P_WF_STATUS_CODE => l_wf_status_code
26885 ,P_PM_SOURCE_CODE => l_pm_source_code
26886 ,P_INC_PROJ_PROGRESS_FLAG => l_inc_proj_progress_flag
26887 ,P_LINK_TASK_FLAG => l_link_task_flag
26888 ,P_CALENDAR_ID => l_calendar_id
26889 ,P_PLANNED_EFFORT => l_planned_effort
26890 ,P_PLANNED_WORK_QUANTITY => l_planned_work_quantity
26891 ,P_TASK_TYPE => l_task_type
26892 --bug 2744729, 2740565
26893 ,P_estimated_start_date => l_estimated_start_date
26894 ,P_estimated_finish_date => l_estimated_start_date
26895 ,P_milestone_flag => l_milestone_flag
26896 ,P_critical_flag => l_critical_flag
26897 ,P_priority_code => l_priority_code
26898 --bug 2744729, 2740565
26899 ,P_labor_disc_reason_code => l_labor_disc_reason_code
26900 ,P_non_labor_disc_reason_code => l_non_labor_disc_reason_code
26901 --bug 2872708
26902 ,p_retirement_cost_flag => l_retirement_cost_flag
26903 ,p_cint_eligible_flag => l_cint_eligible_flag
26904 ,p_cint_stop_date => l_cint_stop_date
26905 --bug 2872708
26906 -- FP-M Bug # 3301192
26907 ,p_pred_string => l_pred_string
26908 ,p_pred_delimiter => l_pred_delimiter
26909 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
26910 -- FP M changes begin (venkat)
26911 ,p_base_percent_comp_deriv_code => l_base_percent_comp_deriv_code
26912 ,p_sch_tool_tsk_type_code => l_sch_tool_tsk_type_code
26913 ,p_constraint_type_code => l_constraint_type_code
26914 ,p_constraint_date => l_constraint_date
26915 ,p_free_slack => l_free_slack
26916 ,p_total_slack => l_total_slack
26917 ,p_effort_driven_flag => l_effort_driven_flag
26918 ,p_level_assignments_flag => l_level_assignments_flag
26919 ,p_invoice_method => l_invoice_method
26920 ,p_customer_id => l_customer_id
26921 ,p_gen_etc_source_code => l_gen_etc_source_code
26922 -- FP M changes end (venkat)
26923 --SMukka
26924 ,p_financial_task_flag => l_financial_task_fl
26925 ,p_mapped_task_id => l_mapped_task_id
26926 ,p_mapped_task_reference => l_mapped_task_reference
26927 ,p_deliverable => l_deliverable
26928 ,p_deliverable_id => l_deliverable_id -- 3661788 Passing added deliverable_id to load_task
26929 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
26930 ,p_ext_act_duration => l_ext_act_duration
26931 ,p_ext_remain_duration => l_ext_remain_duration
26932 ,p_ext_sch_duration => l_ext_sch_duration
26933 -- (end venkat) new params for bug #3450684 ----------------------------------------------
26934
26935 -- Progress Management Changes. Bug # 3420093.
26936 ,p_etc_effort => l_etc_effort
26937 ,p_percent_complete => l_percent_complete
26938 -- Progress Management Changes. Bug # 3420093.
26939
26940 );
26941
26942 l_stage := '1.4';
26943
26944 if (l_return_status <> 'S') then
26945 p_return_status := l_return_status;
26946 return;
26947 end if;
26948
26949 END LOOP;
26950
26951 p_return_status := l_return_status;
26952
26953 -- 4537865
26954 EXCEPTION
26955
26956 WHEN OTHERS THEN
26957 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
26958
26959 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
26960 THEN
26961 FND_MSG_PUB.add_exc_msg
26962 ( p_pkg_name => G_PKG_NAME
26963 , p_procedure_name => 'load_tasks');
26964 END IF;
26965
26966 END load_tasks;
26967
26968
26969 PROCEDURE fetch_tasks
26970 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
26971 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
26972 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
26973 ,p_task_index IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
26974 ,p_pa_task_id OUT NOCOPY PA_NUM_1000_NUM /*Added the nocopy check for 4537865 */
26975 ,p_task_version_id OUT NOCOPY PA_NUM_1000_NUM /*Added the nocopy check for 4537865 */
26976 ,p_pm_task_reference OUT NOCOPY PA_VC_1000_150 /*Added the nocopy check for 4537865 */
26977 ,p_task_return_status OUT NOCOPY PA_VC_1000_150 /*Added the nocopy check for 4537865 */
26978 )
26979 IS
26980
26981 l_return_status VARCHAR2(1):= 'S';
26982 l_pm_task_reference PA_VC_1000_150 := PA_VC_1000_150(1);
26983 l_task_return_status PA_VC_1000_150 := PA_VC_1000_150(1);
26984 l_pa_task_id PA_NUM_1000_NUM := PA_NUM_1000_NUM(1);
26985 --project structrues
26986 l_task_version_id PA_NUM_1000_NUM := PA_NUM_1000_NUM(1);
26987 --project structures
26988 BEGIN
26989
26990 l_pm_task_reference.extend(1000);
26991 l_task_return_status.extend(1000);
26992 l_pa_task_id.extend(1000);
26993 --project structrues
26994 l_task_version_id.extend(1000);
26995 --project structrues
26996
26997 FOR i in 1..1000 LOOP
26998
26999 if p_task_index(i) is null or p_task_index(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
27000 p_return_status := l_return_status;
27001 p_pm_task_reference := l_pm_task_reference;
27002 p_task_return_status := l_task_return_status;
27003 p_pa_task_id := l_pa_task_id;
27004 return;
27005 end if;
27006
27007 fetch_task( p_api_version_number => p_api_version_number
27008 ,p_init_msg_list => p_init_msg_list
27009 ,p_return_status => l_return_status
27010 ,p_task_index => p_task_index(i)
27011 ,p_pa_task_id => l_pa_task_id(i)
27012 ,p_pm_task_reference => l_pm_task_reference(i)
27013 ,p_task_return_status => l_task_return_status(i));
27014
27015 if (l_return_status <> 'S') then
27016 p_return_status := l_return_status;
27017 p_pm_task_reference := l_pm_task_reference;
27018 p_task_return_status := l_task_return_status;
27019 p_pa_task_id := l_pa_task_id;
27020 return;
27021 end if;
27022
27023
27024 fetch_task_version( p_api_version_number => p_api_version_number
27025 ,p_init_msg_list => p_init_msg_list
27026 ,p_return_status => l_return_status
27027 ,p_task_index => p_task_index(i)
27028 ,p_task_version_id => l_task_version_id(i)
27029 ,p_task_return_status => l_task_return_status(i));
27030
27031 if (l_return_status <> 'S') then
27032 p_return_status := l_return_status;
27033 p_pm_task_reference := l_pm_task_reference;
27034 p_task_return_status := l_task_return_status;
27035 p_pa_task_id := l_pa_task_id;
27036 return;
27037 end if;
27038
27039 END LOOP;
27040
27041 p_return_status := l_return_status;
27042 p_pm_task_reference := l_pm_task_reference;
27043 p_task_return_status := l_task_return_status;
27044 p_pa_task_id := l_pa_task_id;
27045
27046 --project structrues
27047 p_task_version_id := l_task_version_id;
27048 --project structrues
27049
27050 -- 4537865
27051 EXCEPTION
27052
27053 WHEN OTHERS THEN
27054 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27055
27056 p_pm_task_reference := NULL ;
27057 p_pa_task_id := NULL ;
27058 p_task_version_id := NULL ;
27059
27060 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27061 THEN
27062 FND_MSG_PUB.add_exc_msg
27063 ( p_pkg_name => G_PKG_NAME
27064 , p_procedure_name => 'fetch_tasks');
27065 END IF;
27066
27067 END fetch_tasks;
27068 -- <EA>
27069 --------------------------------------------------------------------------------
27070 --Name: LOAD_EXTENSIBLE_ATTRIBUTE
27071 --Type: Procedure
27072 --Description: This procedure can be used to move an extensible attribute value
27073 -- from the client side to a PL/SQL table on the server side,
27074 -- where it will be used by a LOAD/EXECUTE/FETCH cycle.
27075 --
27076 --Called subprograms:
27077 --
27078 --History:
27079 -- 16-APR-2003 zahid.khan Initial creation
27080 --
27081
27082 PROCEDURE load_extensible_attribute(P_API_VERSION_NUMBER IN NUMBER := 1.0,
27083 P_INIT_MSG_LIST IN VARCHAR2 := FND_API.G_FALSE,
27084 P_COMMIT IN VARCHAR2 := FND_API.G_FALSE,
27085 X_RETURN_STATUS OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
27086 P_TRANSACTION_TYPE IN VARCHAR2 := PA_PROJECT_PUB.G_SYNC_MODE,
27087 P_TASK_ID IN NUMBER := NULL,
27088 P_TASK_REFERENCE IN VARCHAR2 := NULL,
27089 P_ATTR_GRP_INTERNAL_NAME IN VARCHAR2 := NULL,
27090 P_ATTR_GRP_ID IN NUMBER := NULL,
27091 P_ATTR_GRP_ROW_INDEX IN NUMBER := NULL,
27092 P_ATTR_INTERNAL_NAME IN VARCHAR2 := NULL,
27093 P_ATTR_VALUE_STR IN VARCHAR2 := NULL,
27094 P_ATTR_VALUE_NUM IN NUMBER := NULL,
27095 P_ATTR_VALUE_NUM_UOM IN VARCHAR2 := NULL,
27096 P_ATTR_VALUE_DATE IN DATE := NULL,
27097 P_ATTR_DISP_VALUE IN VARCHAR2 := NULL
27098 )
27099
27100 IS
27101
27102 l_api_name CONSTANT VARCHAR2(30) := 'Load_Extensible_Attribute';
27103 i NUMBER;
27104
27105 BEGIN
27106 -- Standard begin of API savepoint
27107
27108 SAVEPOINT load_extensible_attribute_pub;
27109
27110 -- Standard call to check for call compatibility.
27111 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
27112 p_api_version_number ,
27113 l_api_name,
27114 G_PKG_NAME)
27115 THEN
27116 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27117 END IF;
27118
27119 -- Initialize the message table if requested.
27120 IF FND_API.TO_BOOLEAN( p_init_msg_list )
27121 THEN
27122 FND_MSG_PUB.initialize;
27123 END IF;
27124
27125 -- assign a value to the global counter for this table
27126 G_ext_attr_tbl_count := G_ext_attr_tbl_count + 1;
27127
27128 G_ext_attr_in_tbl(G_ext_attr_tbl_count).PROJ_ELEMENT_ID := P_TASK_ID;
27129 G_ext_attr_in_tbl(G_ext_attr_tbl_count).PROJ_ELEMENT_REFERENCE := P_TASK_REFERENCE;
27130 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ROW_IDENTIFIER := P_ATTR_GRP_ROW_INDEX;
27131 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_GROUP_INT_NAME := P_ATTR_GRP_INTERNAL_NAME;
27132 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_GROUP_ID := P_ATTR_GRP_ID;
27133 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_INT_NAME := P_ATTR_INTERNAL_NAME;
27134 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_STR := P_ATTR_VALUE_STR;
27135 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_NUM := P_ATTR_VALUE_NUM;
27136 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_DATE := P_ATTR_VALUE_DATE;
27137 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_DISP_VALUE := P_ATTR_DISP_VALUE;
27138 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_UNIT_OF_MEASURE:= P_ATTR_VALUE_NUM_UOM;
27139 G_ext_attr_in_tbl(G_ext_attr_tbl_count).TRANSACTION_TYPE := P_TRANSACTION_TYPE;
27140
27141 -- Set API return status to success
27142 x_return_status := FND_API.G_RET_STS_SUCCESS;
27143
27144 EXCEPTION
27145
27146 WHEN FND_API.G_EXC_ERROR
27147 THEN
27148 ROLLBACK TO load_extensible_attribute_pub;
27149
27150 x_return_status := FND_API.G_RET_STS_ERROR;
27151
27152 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27153 THEN
27154 ROLLBACK TO load_extensible_attribute_pub;
27155
27156 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27157
27158 WHEN OTHERS THEN
27159 ROLLBACK TO load_extensible_attribute_pub;
27160
27161 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27162
27163 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27164 THEN
27165 FND_MSG_PUB.add_exc_msg
27166 ( p_pkg_name => G_PKG_NAME
27167 , p_procedure_name => l_api_name );
27168
27169 END IF;
27170
27171 END load_extensible_attribute;
27172
27173 --------------------------------------------------------------------------------
27174 --Name: LOAD_EXTENSIBLE_ATTRIBUTES
27175 --Type: Procedure
27176 --Description: This procedure can be used to bulk-load extensible attribute
27177 -- information into the global pl/sql table in batch of thousand
27178 -- records.
27179 --
27180 --Called subprograms: LOAD_EXTENSIBLE_ATTRIBUTE
27181 --
27182 --History:
27183 -- 22-APR-2003 zahid.khan Initial creation
27184 --
27185 PROCEDURE load_extensible_attributes(P_API_VERSION_NUMBER IN NUMBER,
27186 P_INIT_MSG_LIST IN VARCHAR2 := FND_API.G_FALSE,
27187 P_COMMIT IN VARCHAR2 := FND_API.G_FALSE,
27188 X_RETURN_STATUS OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
27189 P_TRANSACTION_TYPE IN PA_VC_1000_10 := PA_VC_1000_10(PA_PROJECT_PUB.G_SYNC_MODE),
27190 P_TASK_ID IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(NULL),
27191 P_TASK_REFERENCE IN PA_VC_1000_150 := PA_VC_1000_150(NULL),
27192 P_ATTR_GRP_INTERNAL_NAME IN PA_VC_1000_30 := PA_VC_1000_30(NULL),
27193 P_ATTR_GRP_ID IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(NULL),
27194 P_ATTR_GRP_ROW_INDEX IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(NULL),
27195 P_ATTR_INTERNAL_NAME IN PA_VC_1000_30 := PA_VC_1000_30(NULL),
27196 P_ATTR_VALUE_STR IN PA_VC_1000_150 := PA_VC_1000_150(NULL),
27197 P_ATTR_VALUE_NUM IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(NULL),
27198 P_ATTR_VALUE_NUM_UOM IN PA_VC_1000_30 := PA_VC_1000_30(NULL),
27199 P_ATTR_VALUE_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(NULL),
27200 P_ATTR_DISP_VALUE IN PA_VC_1000_150 := PA_VC_1000_150(NULL)
27201 )
27202 IS
27203 l_api_name CONSTANT VARCHAR2(30) := 'Load_Extensible_Attributes';
27204 l_return_status VARCHAR(1) := FND_API.G_RET_STS_SUCCESS;
27205
27206 l_proj_element_id_flag BOOLEAN := (P_TASK_ID.count = 1 and P_TASK_ID(1) = NULL);
27207 l_proj_element_reference_flag BOOLEAN := (P_TASK_REFERENCE.count = 1 and P_TASK_REFERENCE(1) = NULL);
27208 l_row_identifier_flag BOOLEAN := (P_ATTR_GRP_ROW_INDEX.count = 1 and P_ATTR_GRP_ROW_INDEX(1) = NULL);
27209 l_attr_group_int_name_flag BOOLEAN := (P_ATTR_GRP_INTERNAL_NAME.count = 1 and P_ATTR_GRP_INTERNAL_NAME(1) = NULL);
27210 l_attr_group_id_flag BOOLEAN := (P_ATTR_GRP_ID.count = 1 and P_ATTR_GRP_ID(1) = NULL);
27211 l_attr_int_name_flag BOOLEAN := (P_ATTR_INTERNAL_NAME.count = 1 and P_ATTR_INTERNAL_NAME(1) = NULL);
27212 l_attr_value_str_flag BOOLEAN := (P_ATTR_VALUE_STR.count = 1 and P_ATTR_VALUE_STR(1) = NULL);
27213 l_attr_value_num_flag BOOLEAN := (P_ATTR_VALUE_NUM.count = 1 and P_ATTR_VALUE_NUM(1) = NULL);
27214 l_attr_value_date_flag BOOLEAN := (P_ATTR_VALUE_DATE.count = 1 and P_ATTR_VALUE_DATE(1) = NULL);
27215 l_attr_disp_value_flag BOOLEAN := (P_ATTR_DISP_VALUE.count = 1 and P_ATTR_DISP_VALUE(1) = NULL);
27216 l_attr_unit_of_measure_flag BOOLEAN := (P_ATTR_VALUE_NUM_UOM.count = 1 and P_ATTR_VALUE_NUM_UOM(1) = NULL);
27217 l_transaction_type_flag BOOLEAN := (P_TRANSACTION_TYPE.count = 1 and P_TRANSACTION_TYPE(1) = PA_PROJECT_PUB.G_SYNC_MODE);
27218
27219 l_proj_element_id NUMBER;
27220 l_proj_element_reference VARCHAR2(30);
27221 l_attr_group_int_name VARCHAR2(30);
27222 l_attr_group_id NUMBER;
27223 l_attr_int_name VARCHAR2(30);
27224 l_attr_value_str VARCHAR2(150);
27225 l_attr_value_num NUMBER;
27226 l_attr_value_date DATE;
27227 l_attr_disp_value VARCHAR2(150);
27228 l_attr_unit_of_measure VARCHAR2(30);
27229 l_user_row_identifier VARCHAR2(150);
27230 l_transaction_type VARCHAR2(30);
27231 BEGIN
27232 -- initialize message stack, if needed
27233 IF FND_API.to_boolean(p_init_msg_list)
27234 THEN
27235 FND_MSG_PUB.initialize;
27236 END IF;
27237
27238 -- There are two ways to load the global pl/sql table:
27239 -- 1. Call Load_Extensible_Attribute
27240 -- 2. Directly populate the table
27241 -- We will use approach 1.
27242 FOR i in 1..1000 LOOP
27243 -- increment global table record counter
27244 G_ext_attr_tbl_count := G_ext_attr_tbl_count + 1;
27245
27246 -- if Row Identifier is NULL, that means there were
27247 -- fewer than 1000 rows and we're done processing
27248 IF(P_ATTR_GRP_ROW_INDEX(i) IS NULL) THEN
27249 return;
27250 END IF;
27251
27252 -- default parameter values if they were not bound
27253 -- by caller. This needs to be done because
27254 -- there is no way to default the entire
27255 -- array contents to NULL via the procedure
27256 -- declaration. For e.g., using the syntax
27257 -- 'P_ATTR_UNIT_OF_MEASURE IN PA_VC_1000_30 := PA_VC_1000_30(NULL)'
27258 -- only sets the first array cell to the
27259 -- value NULL
27260 if (l_proj_element_id_flag <> TRUE) then
27261 l_proj_element_id := P_TASK_ID(i);
27262 else
27263 l_proj_element_id := NULL;
27264 end if;
27265
27266 if (l_proj_element_reference_flag <> TRUE) then
27267 l_proj_element_reference := P_TASK_REFERENCE(i);
27268 else
27269 l_proj_element_reference := NULL;
27270 end if;
27271
27272 if (l_attr_group_int_name_flag <> TRUE) then
27273 l_attr_group_int_name := P_ATTR_GRP_INTERNAL_NAME(i);
27274 else
27275 l_attr_group_int_name := NULL;
27276 end if;
27277
27278 if (l_attr_group_id_flag <> TRUE) then
27279 l_attr_group_id := P_ATTR_GRP_ID(i);
27280 else
27281 l_attr_group_id := NULL;
27282 end if;
27283
27284 if (l_attr_int_name_flag <> TRUE) then
27285 l_attr_int_name := P_ATTR_INTERNAL_NAME(i);
27286 else
27287 l_attr_int_name := NULL;
27288 end if;
27289
27290 if (l_attr_value_str_flag <> TRUE) then
27291 l_attr_value_str := P_ATTR_VALUE_STR(i);
27292 else
27293 l_attr_value_str := NULL;
27294 end if;
27295
27296 if (l_attr_value_num_flag <> TRUE) then
27297 l_attr_value_num := P_ATTR_VALUE_NUM(i);
27298 else
27299 l_attr_value_num := NULL;
27300 end if;
27301
27302 if (l_attr_value_date_flag <> TRUE) then
27303 l_attr_value_date := P_ATTR_VALUE_DATE(i);
27304 else
27305 l_attr_value_date := NULL;
27306 end if;
27307
27308 if (l_attr_disp_value_flag <> TRUE) then
27309 l_attr_disp_value := P_ATTR_DISP_VALUE(i);
27310 else
27311 l_attr_disp_value := NULL;
27312 end if;
27313
27314 if (l_attr_unit_of_measure_flag <> TRUE) then
27315 l_attr_unit_of_measure := P_ATTR_VALUE_NUM_UOM(i);
27316 else
27317 l_attr_unit_of_measure := NULL;
27318 end if;
27319
27320 if (l_transaction_type_flag <> TRUE) then
27321 l_transaction_type := P_TRANSACTION_TYPE(i);
27322 else
27323 l_transaction_type := PA_PROJECT_PUB.G_SYNC_MODE;
27324 end if;
27325
27326 -- call unit api
27327 load_extensible_attribute
27328 ( P_INIT_MSG_LIST => P_INIT_MSG_LIST,
27329 P_COMMIT => FND_API.G_FALSE,--bug 3766967
27330 X_RETURN_STATUS => l_return_status,
27331 P_TASK_ID => l_proj_element_id,
27332 P_TASK_REFERENCE => l_proj_element_reference,
27333 P_ATTR_GRP_ROW_INDEX => P_ATTR_GRP_ROW_INDEX(i),
27334 P_ATTR_GRP_INTERNAL_NAME => l_attr_group_int_name,
27335 P_ATTR_GRP_ID => l_attr_group_id,
27336 P_ATTR_INTERNAL_NAME => l_attr_int_name,
27337 P_ATTR_VALUE_STR => l_attr_value_str,
27338 P_ATTR_VALUE_NUM => l_attr_value_num,
27339 P_ATTR_VALUE_DATE => l_attr_value_date,
27340 P_ATTR_DISP_VALUE => l_attr_disp_value,
27341 P_ATTR_VALUE_NUM_UOM => l_attr_unit_of_measure,
27342 P_TRANSACTION_TYPE => l_transaction_type
27343 );
27344
27345 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
27346 THEN
27347 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27348 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
27349 THEN
27350 RAISE FND_API.G_EXC_ERROR;
27351 END IF;
27352
27353 END LOOP;
27354
27355 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
27356 EXCEPTION
27357 WHEN FND_API.G_EXC_ERROR THEN
27358 x_return_status := FND_API.G_RET_STS_ERROR;
27359 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
27360 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27361 WHEN OTHERS THEN
27362 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27363 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
27364 FND_MSG_PUB.Add_Exc_Msg
27365 ( G_PKG_NAME
27366 , l_api_name
27367 );
27368 END IF;
27369 END load_extensible_attributes;
27370 -- </EA>
27371
27372 --------------------------------------------------------------------------------
27373 --Project Structures
27374
27375 PROCEDURE load_structure
27376 ( p_api_version_number IN NUMBER
27377 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
27378 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27379 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27380 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
27381 ,p_structure_version_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27382 ,P_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27383 ,P_DESCRIPTION IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27384 /*,P_VERSION_NUMBER IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27385 ,P_NAME IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27386 ,P_CURRENT_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27387 ,P_ORIGINAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27388 ,P_LATEST_EFF_PUBLISHED_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27389 ,P_EFFECTIVE_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27390 ,P_PUBLISHED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27391 ,P_PUBLISHED_BY_PERSON_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27392 ,P_CURRENT_BASELINE_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27393 ,P_CURRENT_BASELINE_PERSON_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27394 ,P_ORIGINAL_BASELINE_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27395 ,P_ORIGINAL_BASELINE_PERSON_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27396 ,P_LOCK_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27397 ,P_LOCKED_BY_PERSON_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27398 ,P_LOCKED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
27399 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27400 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27401 ,P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27402 ,P_PM_SOURCE_REFERENCE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27403 ,P_CHANGE_REASON_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27404 */
27405 ) IS
27406
27407 l_api_name CONSTANT VARCHAR2(30) := 'load_structure';
27408
27409
27410 BEGIN
27411
27412 -- Standard begin of API savepoint
27413
27414 SAVEPOINT load_structure_pub;
27415
27416 -- Standard call to check for call compatibility.
27417
27418 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
27419 p_api_version_number ,
27420 l_api_name ,
27421 G_PKG_NAME )
27422 THEN
27423
27424 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27425
27426 END IF;
27427
27428 -- Initialize the message table if requested.
27429
27430 IF FND_API.TO_BOOLEAN( p_init_msg_list )
27431 THEN
27432
27433 FND_MSG_PUB.initialize;
27434
27435 END IF;
27436
27437 -- Set API return status to success
27438
27439 p_return_status := FND_API.G_RET_STS_SUCCESS;
27440
27441 -- Bug 2978114.
27442 -- Validate the structure type. It should be FINANCIAL / WORKPLAN /DELIVERABLE.
27443 -- Throw an error otherwise.
27444
27445 IF nvl(p_structure_type,'-99') not in ('FINANCIAL','WORKPLAN', 'DELIVERABLE') THEN
27446 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
27447 ,p_msg_name => 'PA_PS_INV_STR_TYPE');
27448
27449 RAISE FND_API.G_EXC_ERROR;
27450 END IF;
27451
27452 -- assign incoming parameters to the fields of global structure record
27453
27454 G_structure_in_rec.pa_project_id := p_pa_project_id;
27455 G_structure_in_rec.structure_type := p_structure_type;
27456 G_structure_in_rec.structure_version_name := p_structure_version_name;
27457 G_structure_in_rec.structure_version_id := p_structure_version_id;
27458 G_structure_in_rec.DESCRIPTION := p_DESCRIPTION;
27459 /*G_structure_in_rec.VERSION_NUMBER := p_VERSION_NUMBER;
27460 G_structure_in_rec.NAME := p_NAME;
27461 G_structure_in_rec.CURRENT_FLAG := p_CURRENT_FLAG;
27462 G_structure_in_rec.ORIGINAL_FLAG := p_ORIGINAL_FLAG;
27463 G_structure_in_rec.LATEST_EFF_PUBLISHED_FLAG := p_LATEST_EFF_PUBLISHED_FLAG;
27464 G_structure_in_rec.EFFECTIVE_DATE := p_EFFECTIVE_DATE;
27465 G_structure_in_rec.PUBLISHED_DATE := p_PUBLISHED_DATE;
27466 G_structure_in_rec.PUBLISHED_BY_PERSON_ID := p_PUBLISHED_BY_PERSON_ID;
27467 G_structure_in_rec.CURRENT_BASELINE_DATE := p_CURRENT_BASELINE_DATE;
27468 G_structure_in_rec.CURRENT_BASELINE_PERSON_ID := p_CURRENT_BASELINE_PERSON_ID;
27469 G_structure_in_rec.ORIGINAL_BASELINE_DATE := p_ORIGINAL_BASELINE_DATE;
27470 G_structure_in_rec.ORIGINAL_BASELINE_PERSON_ID := p_ORIGINAL_BASELINE_PERSON_ID;
27471 G_structure_in_rec.LOCK_STATUS_CODE := p_LOCK_STATUS_CODE;
27472 G_structure_in_rec.LOCKED_BY_PERSON_ID := p_LOCKED_BY_PERSON_ID;
27473 G_structure_in_rec.LOCKED_DATE := p_LOCKED_DATE;
27474 G_structure_in_rec.STATUS_CODE := p_STATUS_CODE;
27475 G_structure_in_rec.WF_STATUS_CODE := p_WF_STATUS_CODE;
27476 G_structure_in_rec.PM_SOURCE_CODE := p_PM_SOURCE_CODE;
27477 G_structure_in_rec.PM_SOURCE_REFERENCE := p_PM_SOURCE_REFERENCE;
27478 G_structure_in_rec.CHANGE_REASON_CODE := p_CHANGE_REASON_CODE;
27479 */
27480
27481 EXCEPTION
27482
27483 WHEN FND_API.G_EXC_ERROR
27484 THEN
27485 ROLLBACK TO load_structure_pub;
27486
27487 p_return_status := FND_API.G_RET_STS_ERROR;
27488
27489
27490 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27491 THEN
27492 ROLLBACK TO load_structure_pub;
27493
27494 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27495
27496
27497 WHEN OTHERS THEN
27498 ROLLBACK TO load_structure_pub;
27499
27500 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27501
27502 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27503 THEN
27504 FND_MSG_PUB.add_exc_msg
27505 ( p_pkg_name => G_PKG_NAME
27506 , p_procedure_name => l_api_name );
27507
27508 END IF;
27509
27510
27511 END load_structure;
27512
27513 PROCEDURE change_structure_status
27514 (p_api_version_number IN NUMBER := 1.0 -- for bug# 3802319
27515 , p_init_msg_list IN VARCHAR2 := 'F'
27516 , p_commit IN VARCHAR2 := 'F'
27517 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27518 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
27519 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27520 , p_structure_version_id IN NUMBER
27521 , p_pa_project_id IN NUMBER
27522 , p_status_code IN VARCHAR2
27523 , p_process_mode IN VARCHAR2 := 'ONLINE'
27524 , p_published_struct_ver_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
27525
27526 )IS
27527
27528 l_api_name CONSTANT VARCHAR2(30) := 'change_structure_status';
27529 l_update_wbs_flag VARCHAR2(1);
27530 l_msg_count NUMBER ;
27531 l_msg_data VARCHAR2(2000);
27532 l_return_status VARCHAR2(1);
27533 BEGIN
27534
27535 -- Begin fix for Bug # 4314797.
27536
27537 -- Standard begin of API savepoint
27538
27539 SAVEPOINT change_structure_status;
27540
27541 -- Standard call to check for call compatibility.
27542
27543 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
27544 p_api_version_number ,
27545 l_api_name ,
27546 G_PKG_NAME )
27547 THEN
27548
27549 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27550
27551 END IF;
27552
27553 -- Initialize the message table if requested.
27554
27555 IF FND_API.TO_BOOLEAN( p_init_msg_list )
27556 THEN
27557
27558 FND_MSG_PUB.initialize;
27559
27560 END IF;
27561
27562 -- Set API return status to success
27563
27564 p_return_status := FND_API.G_RET_STS_SUCCESS;
27565
27566 -- End fix for Bug # 4314797.
27567
27568 PA_WORKPLAN_AMG_PUB.CHANGE_STRUCTURE_STATUS
27569 (
27570 p_api_version_number => p_api_version_number
27571 ,p_init_msg_list => p_init_msg_list
27572 ,p_commit => FND_API.G_FALSE--bug 3766967
27573 ,p_pa_project_id => p_pa_project_id
27574 ,p_structure_version_id => p_structure_version_id
27575 ,p_status_code => p_status_code
27576 ,p_return_status => p_return_status
27577 ,p_msg_count => p_msg_count
27578 ,p_msg_data => p_msg_data
27579 , p_published_struct_ver_id => p_published_struct_ver_id
27580 );
27581 IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
27582 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27583 ELSIF (p_return_status = FND_API.G_RET_STS_ERROR) THEN
27584 RAISE FND_API.G_EXC_ERROR;
27585 END IF;
27586
27587 -- PA L Changes 3010538
27588 --Commenting as for a publishing case we need to always check for update wbs required flag
27589 -- IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
27590 -- ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
27591 -- PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
27592 -- PA_PROJECT_PUB.G_Published_version_exists = 'N')
27593 -- THEN
27594
27595 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => p_pa_project_id
27596 ,p_structure_version_id => p_published_struct_ver_id ) ;
27597 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
27598 IF p_process_mode = 'ONLINE' THEN
27599
27600 --Added by rtarway for BUG 4032291
27601 if p_status_code = 'STRUCTURE_PUBLISHED' then
27602 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_PUBLISH'
27603 ,p_project_id => p_pa_project_id
27604 ,p_commit => p_commit
27605 -- Fix for Bug # 4314797.
27606 ,p_structure_version_id => p_structure_version_id
27607 ,p_pub_struc_ver_id => p_published_struct_ver_id
27608 ,x_return_status => l_return_status
27609 ,x_msg_count => l_msg_count
27610 ,x_msg_data => l_msg_data ) ;
27611 --Added by rtarway for BUG 4032291
27612 else
27613 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
27614 ,p_project_id => p_pa_project_id
27615 ,p_structure_version_id => p_published_struct_ver_id
27616 ,x_return_status => l_return_status
27617 ,x_msg_count => l_msg_count
27618 ,x_msg_data => l_msg_data ) ;
27619 end if;
27620
27621
27622
27623 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
27624 THEN
27625 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27626 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
27627 THEN
27628 RAISE FND_API.G_EXC_ERROR;
27629 END IF;
27630 ELSIF p_process_mode = 'CONCURRENT' THEN
27631 /* Added if block for bug 5390015 */
27632 IF p_status_code = 'STRUCTURE_PUBLISHED' THEN
27633
27634 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_PUBLISH'
27635 ,p_project_id => p_pa_project_id
27636 ,p_commit => p_commit
27637 ,p_structure_version_id => p_structure_version_id
27638 ,p_pub_struc_ver_id => p_published_struct_ver_id
27639 ,x_return_status => l_return_status
27640 ,x_msg_count => l_msg_count
27641 ,x_msg_data => l_msg_data ) ;
27642 ELSE
27643
27644 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
27645 ,p_project_id => p_pa_project_id
27646 ,p_structure_version_id => p_published_struct_ver_id
27647 ,x_return_status => l_return_status
27648 ,x_msg_count => l_msg_count
27649 ,x_msg_data => l_msg_data ) ;
27650 END IF;
27651
27652 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
27653 THEN
27654 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27655 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
27656 THEN
27657 RAISE FND_API.G_EXC_ERROR;
27658 END IF;
27659
27660
27661 END IF ;
27662 END IF ;
27663 -- END IF ;
27664
27665 -- PA L Changes 3010538
27666
27667 EXCEPTION
27668 WHEN FND_API.G_EXC_ERROR THEN
27669 p_return_status := FND_API.G_RET_STS_ERROR;
27670
27671 -- 4537865
27672 p_published_struct_ver_id := NULL ;
27673
27674 -- Begin fix for Bug # 4314797.
27675
27676 ROLLBACK TO change_structure_status;
27677
27678 p_msg_count := l_msg_count;
27679 p_msg_data := l_msg_data;
27680
27681 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
27682 , p_data => p_msg_data);
27683
27684 -- End fix for Bug # 4314797.
27685
27686 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
27687 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27688
27689 -- 4537865
27690 p_published_struct_ver_id := NULL ;
27691
27692 -- Begin fix for Bug # 4314797.
27693
27694 ROLLBACK TO change_structure_status;
27695
27696 p_msg_count := l_msg_count;
27697 p_msg_data := l_msg_data;
27698
27699 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
27700 , p_data => p_msg_data);
27701
27702 -- End fix for Bug # 4314797.
27703
27704
27705 WHEN OTHERS THEN
27706 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27707
27708 -- 4537865
27709 p_published_struct_ver_id := NULL ;
27710
27711 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
27712 FND_MSG_PUB.add_exc_msg
27713 (p_pkg_name => G_PKG_NAME
27714 ,p_procedure_name => l_api_name);
27715 END IF;
27716
27717
27718 -- Begin fix for Bug # 4314797.
27719
27720 ROLLBACK TO change_structure_status;
27721
27722 p_msg_count := l_msg_count;
27723 p_msg_data := l_msg_data;
27724
27725 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
27726 , p_data => p_msg_data);
27727
27728 -- End fix for Bug # 4314797.
27729
27730 END change_structure_status;
27731
27732
27733 PROCEDURE baseline_structure
27734 (p_api_version_number IN NUMBER
27735 , p_init_msg_list IN VARCHAR2 := 'F'
27736 , p_commit IN VARCHAR2 := 'F'
27737 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27738 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
27739 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27740 , p_structure_version_id IN NUMBER
27741 , p_pa_project_id IN NUMBER
27742
27743 ) IS
27744
27745 l_api_name CONSTANT VARCHAR2(30) := 'baseline_structure';
27746
27747 BEGIN
27748
27749 -- 4537865
27750 --Initialize p_return_status to Success
27751 p_return_status := FND_API.G_RET_STS_SUCCESS ;
27752
27753 PA_WORKPLAN_AMG_PUB.BASELINE_STRUCTURE
27754 (
27755 p_api_version_number => p_api_version_number
27756 ,p_init_msg_list => p_init_msg_list
27757 ,p_commit => FND_API.G_FALSE--bug 3766967
27758 ,p_pa_project_id => p_pa_project_id
27759 ,p_structure_version_id => p_structure_version_id
27760 ,p_return_status => p_return_status
27761 ,p_msg_count => p_msg_count
27762 ,p_msg_data => p_msg_data
27763 );
27764 IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
27765 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27766 ELSIF (p_return_status = FND_API.G_RET_STS_ERROR) THEN
27767 RAISE FND_API.G_EXC_ERROR;
27768 END IF;
27769
27770 EXCEPTION
27771 WHEN FND_API.G_EXC_ERROR THEN
27772 p_return_status := FND_API.G_RET_STS_ERROR;
27773
27774 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
27775 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27776
27777 WHEN OTHERS THEN
27778 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27779
27780 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
27781 FND_MSG_PUB.add_exc_msg
27782 (p_pkg_name => G_PKG_NAME
27783 ,p_procedure_name => l_api_name);
27784 END IF;
27785 END baseline_structure;
27786
27787
27788 PROCEDURE delete_structure_version
27789 ( p_api_version_number IN NUMBER := 1.0 -- for bug# 3802759
27790 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
27791 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
27792 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
27793 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27794 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27795 ,p_structure_version_id IN NUMBER
27796 ,p_record_version_number IN NUMBER
27797 ) IS
27798 l_api_name CONSTANT VARCHAR2(30) := 'delete_structure_version';
27799
27800 BEGIN
27801
27802 -- Standard begin of API savepoint
27803
27804 SAVEPOINT delete_structure_ver_pub;
27805
27806 -- Standard call to check for call compatibility.
27807
27808 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
27809 p_api_version_number ,
27810 l_api_name ,
27811 G_PKG_NAME )
27812 THEN
27813
27814 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27815
27816 END IF;
27817
27818 -- Initialize the message table if requested.
27819
27820 IF FND_API.TO_BOOLEAN( p_init_msg_list )
27821 THEN
27822
27823 FND_MSG_PUB.initialize;
27824
27825 END IF;
27826
27827 -- Set API return status to success
27828
27829 p_return_status := FND_API.G_RET_STS_SUCCESS;
27830
27831 PA_PROJ_TASK_STRUC_PUB.DELETE_STRUCTURE_VERSION(
27832 p_api_version => p_api_version_number
27833 ,p_init_msg_list => p_init_msg_list
27834 ,p_commit => FND_API.G_FALSE--bug 3766967
27835 ,p_calling_module => 'AMG'
27836 ,p_structure_version_id => p_structure_version_id
27837 ,p_record_version_number => p_record_version_number
27838 ,x_return_status => p_return_status
27839 ,x_msg_count => p_msg_count
27840 ,x_msg_data => p_msg_data
27841 );
27842
27843 IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
27844 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27845 ELSIF (p_return_status = FND_API.G_RET_STS_ERROR) THEN
27846 RAISE FND_API.G_EXC_ERROR;
27847 END IF;
27848
27849 EXCEPTION
27850
27851 WHEN FND_API.G_EXC_ERROR
27852 THEN
27853 ROLLBACK TO delete_structure_ver_pub;
27854
27855 p_return_status := FND_API.G_RET_STS_ERROR;
27856
27857
27858 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27859 THEN
27860 ROLLBACK TO delete_structure_ver_pub;
27861
27862 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27863
27864
27865 WHEN OTHERS THEN
27866 ROLLBACK TO delete_structure_ver_pub;
27867
27868 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27869
27870 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27871 THEN
27872 FND_MSG_PUB.add_exc_msg
27873 ( p_pkg_name => G_PKG_NAME
27874 , p_procedure_name => l_api_name );
27875
27876 END IF;
27877
27878 END delete_structure_version;
27879
27880 --Project Structures
27881
27882 --Project Connect 4.0
27883 --------------------------------------------------------------------------------
27884 --Name: fetch_structure_version
27885 --Type: Procedure
27886 --Description: This procedure can be used to get the structure version ids
27887 -- to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
27888 --
27889 --Called subprograms:
27890 --
27891 --
27892 --
27893 --History:
27894 -- 03-DEC-2002 Created
27895 --
27896
27897 PROCEDURE fetch_structure_version
27898 ( p_api_version_number IN NUMBER
27899 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
27900 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27901 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
27902 ,p_pa_structure_version_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
27903 ,p_struc_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27904 )
27905 IS
27906 l_api_name CONSTANT VARCHAR2(30) := 'fetch_structure_version';
27907 l_index NUMBER;
27908 i NUMBER;
27909
27910 BEGIN
27911
27912 -- Standard begin of API savepoint
27913
27914 SAVEPOINT fetch_struc_pub;
27915
27916 -- Standard call to check for call compatibility.
27917
27918 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
27919 p_api_version_number ,
27920 l_api_name ,
27921 G_PKG_NAME )
27922 THEN
27923
27924 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27925
27926 END IF;
27927
27928 -- Initialize the message table if requested.
27929
27930 IF FND_API.TO_BOOLEAN( p_init_msg_list )
27931 THEN
27932
27933 FND_MSG_PUB.initialize;
27934
27935 END IF;
27936
27937 -- Set API return status to success
27938
27939 p_return_status := FND_API.G_RET_STS_SUCCESS;
27940
27941
27942 FOR i in 1..G_Struc_out_tbl.count LOOP
27943
27944 IF G_struc_out_tbl(i).structure_type = p_structure_type
27945 THEN
27946
27947 IF G_struc_out_tbl(i).structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27948 THEN
27949 p_pa_structure_version_id := NULL;
27950 ELSE
27951
27952 p_pa_structure_version_id := G_struc_out_tbl(i).structure_version_id;
27953
27954 END IF;
27955 p_struc_return_status := G_struc_out_tbl(i).return_status;
27956 exit;
27957 END IF;
27958 END LOOP;
27959
27960 EXCEPTION
27961 WHEN FND_API.G_EXC_ERROR
27962 THEN
27963 ROLLBACK TO fetch_struc_pub;
27964
27965 p_return_status := FND_API.G_RET_STS_ERROR;
27966
27967 -- 4537865
27968 p_pa_structure_version_id := NULL ;
27969 p_struc_return_status := NULL ;
27970
27971
27972 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27973 THEN
27974 ROLLBACK TO fetch_struc_pub;
27975
27976 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27977
27978 -- 4537865
27979 p_pa_structure_version_id := NULL ;
27980 p_struc_return_status := NULL ;
27981
27982
27983 WHEN OTHERS THEN
27984 ROLLBACK TO fetch_struc_pub;
27985
27986 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27987
27988 -- 4537865
27989 p_pa_structure_version_id := NULL ;
27990 p_struc_return_status := NULL ;
27991
27992 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27993 THEN
27994 FND_MSG_PUB.add_exc_msg
27995 ( p_pkg_name => G_PKG_NAME
27996 , p_procedure_name => l_api_name );
27997
27998 END IF;
27999
28000
28001 END fetch_structure_version;
28002
28003
28004 --------------------------------------------------------------------------------
28005 --Name: fetch_task_version
28006 --Type: Procedure
28007 --Description: This procedure can be used to get the task version related output data
28008 -- to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
28009 --
28010 --Called subprograms:
28011 --
28012 --
28013 --
28014 --History:
28015 -- 30-JAN-2003 anlee Created
28016 --
28017
28018 PROCEDURE fetch_task_version
28019 ( p_api_version_number IN NUMBER
28020 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
28021 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28022 ,p_task_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28023 ,p_task_version_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28024 ,p_task_return_status OUT NOCOPY VARCHAR2 ) /*Added the nocopy check for 4537865 */
28025 IS
28026
28027 l_api_name CONSTANT VARCHAR2(30) := 'fetch_task_version';
28028 l_index NUMBER;
28029 i NUMBER;
28030
28031 BEGIN
28032
28033 -- Standard begin of API savepoint
28034
28035 SAVEPOINT fetch_task_version_pub;
28036
28037 -- Standard call to check for call compatibility.
28038
28039 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28040 p_api_version_number ,
28041 l_api_name ,
28042 G_PKG_NAME )
28043 THEN
28044
28045 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28046
28047 END IF;
28048
28049 -- Initialize the message table if requested.
28050
28051 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28052 THEN
28053
28054 FND_MSG_PUB.initialize;
28055
28056 END IF;
28057
28058 -- Set API return status to success
28059
28060 p_return_status := FND_API.G_RET_STS_SUCCESS;
28061
28062 -- Check Task index value, when they don't provide an index we will error out
28063 IF p_task_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28064 OR p_task_index IS NULL
28065 THEN
28066 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28067 THEN
28068 pa_interface_utils_pub.map_new_amg_msg
28069 ( p_old_message_code => 'PA_INDEX_NOT_PROVIDED'
28070 ,p_msg_attribute => 'CHANGE'
28071 ,p_resize_flag => 'N'
28072 ,p_msg_context => 'GENERAL'
28073 ,p_attribute1 => ''
28074 ,p_attribute2 => ''
28075 ,p_attribute3 => ''
28076 ,p_attribute4 => ''
28077 ,p_attribute5 => '');
28078 END IF;
28079
28080 p_return_status := FND_API.G_RET_STS_ERROR;
28081 RAISE FND_API.G_EXC_ERROR;
28082 ELSE
28083 l_index := p_task_index;
28084 END IF;
28085
28086 If G_Tasks_out_tbl.exists(l_index) THEN
28087 -- assign global table fields to the outgoing parameter
28088 -- we don't want to return the big number G_PA_MISS_NUM
28089
28090 --project structrues
28091 IF G_tasks_out_tbl(l_index).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28092 THEN
28093 p_task_version_id := NULL;
28094 ELSE
28095
28096 p_task_version_id := G_tasks_out_tbl(l_index).task_version_id;
28097
28098 END IF;
28099 --project structrues
28100
28101 p_task_return_status := G_tasks_out_tbl(l_index).return_status;
28102
28103 END IF;
28104
28105 EXCEPTION
28106
28107 WHEN FND_API.G_EXC_ERROR
28108 THEN
28109 ROLLBACK TO fetch_task_version_pub;
28110
28111 p_return_status := FND_API.G_RET_STS_ERROR;
28112
28113 -- 4537865
28114 p_task_version_id := NULL ;
28115
28116
28117 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28118 THEN
28119 ROLLBACK TO fetch_task_version_pub;
28120
28121 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28122
28123 -- 4537865
28124 p_task_version_id := NULL ;
28125
28126
28127 WHEN OTHERS THEN
28128 ROLLBACK TO fetch_task_version_pub;
28129
28130 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28131 -- 4537865
28132 p_task_version_id := NULL ;
28133
28134 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28135 THEN
28136 FND_MSG_PUB.add_exc_msg
28137 ( p_pkg_name => G_PKG_NAME
28138 , p_procedure_name => l_api_name );
28139
28140 END IF;
28141
28142
28143 END fetch_task_version;
28144
28145 --bug 2765115
28146 PROCEDURE get_task_version
28147 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28148 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
28149 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28150 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28151 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28152 ,p_pa_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28153 ,p_task_version_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28154 ) IS
28155
28156 l_api_name CONSTANT VARCHAR2(30) := 'get_task_version';
28157 l_index NUMBER;
28158 i NUMBER;
28159
28160 BEGIN
28161
28162 -- Standard begin of API savepoint
28163
28164 SAVEPOINT get_task_version_pub;
28165
28166 -- Standard call to check for call compatibility.
28167
28168 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28169 p_api_version_number ,
28170 l_api_name ,
28171 G_PKG_NAME )
28172 THEN
28173
28174 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28175
28176 END IF;
28177
28178 -- Initialize the message table if requested.
28179
28180 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28181 THEN
28182
28183 FND_MSG_PUB.initialize;
28184
28185 END IF;
28186
28187 -- Set API return status to success
28188 p_return_status := FND_API.G_RET_STS_SUCCESS;
28189
28190 IF ( p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_task_id IS NULL ) OR
28191 ( p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_project_id IS NULL ) OR
28192 ( p_pa_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_structure_version_id IS NULL )
28193 THEN
28194 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28195 THEN
28196 --My suggestion was to create a new message but Sakthi asked me use the following
28197 --Since these changes are done at the last moment of PA K around build9. We are hesitant to
28198 --log a new message bug. Sakthi suggested to use an existing message PA_PS_INV_STR_VER_ID
28199 --although it does not convey full message here and we will change it later
28200 --The message PA_PS_INV_STR_VER_ID does not have the AMG at the end so I cant use the standard api
28201 --call for AMG messages i.e,pa_interface_utils_pub.map_new_amg_msg
28202
28203 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28204 ,p_msg_name => 'PA_PS_INV_STR_VER_ID');
28205 END IF;
28206 p_return_status := FND_API.G_RET_STS_ERROR;
28207 RAISE FND_API.G_EXC_ERROR;
28208 END IF;
28209
28210 PA_PROJ_TASK_STRUC_PUB.get_task_version_id(
28211 p_project_id => p_pa_project_id
28212 ,p_structure_version_id => p_pa_structure_version_id
28213 ,p_task_id => p_pa_task_id
28214 ,x_task_version_id => p_task_version_id
28215 );
28216
28217 IF p_task_version_id IS NULL
28218 THEN
28219 p_return_status := FND_API.G_RET_STS_ERROR;
28220 RAISE FND_API.G_EXC_ERROR;
28221 END IF;
28222
28223 EXCEPTION
28224
28225 WHEN FND_API.G_EXC_ERROR
28226 THEN
28227 ROLLBACK TO get_task_version_pub;
28228
28229 p_return_status := FND_API.G_RET_STS_ERROR;
28230
28231 --4537865
28232 p_task_version_id := NULL ;
28233
28234
28235 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28236 THEN
28237 ROLLBACK TO get_task_version_pub;
28238
28239 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28240 --4537865
28241 p_task_version_id := NULL ;
28242
28243
28244 WHEN OTHERS THEN
28245 ROLLBACK TO get_task_version_pub;
28246
28247 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28248 --4537865
28249 p_task_version_id := NULL ;
28250 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28251 THEN
28252 FND_MSG_PUB.add_exc_msg
28253 ( p_pkg_name => G_PKG_NAME
28254 , p_procedure_name => l_api_name );
28255
28256 END IF;
28257
28258 END get_task_version;
28259 --bug 2765115
28260
28261 --------------------------- FP M changes begin (venkat) 4 ------------------------------------
28262
28263 PROCEDURE change_current_working_version
28264 (p_api_version_number IN NUMBER
28265 , p_init_msg_list IN VARCHAR2 := 'F'
28266 , p_commit IN VARCHAR2 := 'F'
28267 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28268 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28269 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28270 , p_structure_version_id IN NUMBER
28271 , p_pa_project_id IN NUMBER
28272 )
28273
28274 IS
28275
28276 l_api_name CONSTANT VARCHAR2(30) := 'change_current_working_version';
28277 l_rec_version_number NUMBER;
28278 l_pev_structure_id NUMBER;
28279 l_name VARCHAR2(30);
28280
28281 CURSOR l_temp_cursor
28282 IS
28283 SELECT record_version_number, pev_structure_id, name
28284 FROM PA_PROJ_ELEM_VER_STRUCTURE
28285 WHERE project_id = p_pa_project_id and element_version_id = p_structure_version_id;
28286
28287
28288 BEGIN
28289
28290 -- Standard begin of API savepoint
28291
28292 SAVEPOINT get_task_version_pub;
28293
28294 -- Standard call to check for call compatibility.
28295
28296 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28297 p_api_version_number ,
28298 l_api_name ,
28299 G_PKG_NAME )
28300 THEN
28301
28302 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28303
28304 END IF;
28305
28306 -- Initialize the message table if requested.
28307
28308 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28309 THEN
28310
28311 FND_MSG_PUB.initialize;
28312
28313 END IF;
28314
28315 -- Set API return status to success
28316 p_return_status := FND_API.G_RET_STS_SUCCESS;
28317
28318 IF ( p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_project_id IS NULL ) OR
28319 ( p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_structure_version_id IS NULL )
28320 THEN
28321 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28322 THEN
28323
28324 -- Using the message name PA_PS_INV_STR_VER_ID
28325
28326 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28327 ,p_msg_name => 'PA_PS_INV_STR_VER_ID');
28328 END IF;
28329 p_return_status := FND_API.G_RET_STS_ERROR;
28330 RAISE FND_API.G_EXC_ERROR;
28331 END IF;
28332
28333 OPEN l_temp_cursor;
28334 FETCH l_temp_cursor INTO l_rec_version_number, l_pev_structure_id, l_name;
28335
28336 IF l_temp_cursor%NOTFOUND
28337 THEN
28338 CLOSE l_temp_cursor;
28339 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28340 THEN
28341 -- Using the message name PA_PS_INV_STR_VER_ID
28342 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28343 ,p_msg_name => 'PA_PS_INV_STR_VER_ID');
28344 END IF;
28345 p_return_status := FND_API.G_RET_STS_ERROR;
28346 RAISE FND_API.G_EXC_ERROR;
28347 END IF;
28348 CLOSE l_temp_cursor;
28349
28350 PA_PROJECT_STRUCTURE_PVT1.update_structure_version_attr
28351 (p_api_version => p_api_version_number
28352 ,p_init_msg_list => p_init_msg_list
28353 ,p_commit => FND_API.G_FALSE--bug 3766967
28354 ,p_pev_structure_id => l_pev_structure_id
28355 ,p_structure_version_name => l_name
28356 ,p_record_version_number => l_rec_version_number
28357 ,p_current_working_ver_flag => 'Y'
28358 ,x_return_status => p_return_status
28359 ,x_msg_count => p_msg_count
28360 ,x_msg_data => p_msg_data
28361 );
28362
28363 IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28364 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28365 ELSIF (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28366 RAISE FND_API.G_EXC_ERROR;
28367 END IF;
28368
28369 EXCEPTION
28370
28371 WHEN FND_API.G_EXC_ERROR
28372 THEN
28373 ROLLBACK TO get_task_version_pub;
28374
28375 p_return_status := FND_API.G_RET_STS_ERROR;
28376
28377
28378 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28379 THEN
28380 ROLLBACK TO get_task_version_pub;
28381
28382 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28383
28384
28385 WHEN OTHERS THEN
28386 ROLLBACK TO get_task_version_pub;
28387
28388 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28389 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28390 THEN
28391 FND_MSG_PUB.add_exc_msg
28392 ( p_pkg_name => G_PKG_NAME
28393 , p_procedure_name => l_api_name );
28394
28395 END IF;
28396
28397
28398 END change_current_working_version;
28399
28400 -------------------------- FP M changes end (venkat) 4 ----------------------------------------
28401
28402 -- Progress Management Changes. Bug # 3420093.
28403
28404 -- Name: apply_lp_prog_on_cwv
28405 -- Type: Procedure
28406 -- Description: This procedure can be used to apply the latest progress on the given
28407 -- structure_version.
28408 --
28409 -- Called subprograms: pa_progress_pub.apply_lp_prog_on_cwv().
28410 --
28411 --
28412 --
28413 --History:
28414 --
28415 -- 02-APR-2004 Rakesh Raghavan Created
28416
28417 PROCEDURE apply_lp_prog_on_cwv(
28418 p_api_version IN NUMBER :=1.0
28419 ,p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE
28420 ,p_commit IN VARCHAR2 :=FND_API.G_FALSE
28421 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28422 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28423 ,p_working_str_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28424 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28425 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28426 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28427 )
28428
28429 IS
28430 l_api_name CONSTANT VARCHAR2(30) := 'APPLY_LP_PROG_ON_CWV';
28431 l_api_version CONSTANT NUMBER := p_api_version;
28432 l_user_id NUMBER := FND_GLOBAL.USER_ID;
28433 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
28434 l_return_status VARCHAR2(1);
28435 l_msg_count NUMBER;
28436 l_msg_data VARCHAR2(250);
28437
28438 l_function_allowed VARCHAR2(1);
28439 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
28440 l_debug_mode VARCHAR2(1);
28441
28442 l_project_id NUMBER;
28443
28444 BEGIN
28445 -- Standard begin of API savepoint.
28446
28447 savepoint APPLY_LP_PROG_ON_CWV;
28448
28449 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
28450
28451 -- Standard call to check for call compatibility.
28452
28453 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
28454
28455 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28456
28457 END IF;
28458
28459 -- Initialize the message table if requested.
28460
28461 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
28462
28463 FND_MSG_PUB.initialize;
28464
28465 END IF;
28466
28467 -- Set API return status to success.
28468
28469 p_return_status := FND_API.G_RET_STS_SUCCESS;
28470
28471 /* Checking function security. */
28472
28473 -- Actions performed using the APIs would be subject to
28474 -- function security. If the responsibility does not allow
28475 -- such functions to be executed, the API should not proceed further
28476 -- since the user does not have access to such functions.
28477 -- The function security for this API is the same as that enforced
28478 -- in the the update_task() API.
28479
28480 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
28481 (p_api_version_number => p_api_version,
28482 p_responsibility_id => l_resp_id,
28483 p_function_name => 'PA_PM_UPDATE_TASK',
28484 p_msg_count => l_msg_count,
28485 p_msg_data => l_msg_data,
28486 p_return_status => l_return_status,
28487 p_function_allowed => l_function_allowed );
28488
28489 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
28490 THEN
28491 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28492
28493 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
28494 THEN
28495 RAISE FND_API.G_EXC_ERROR;
28496 END IF;
28497 IF l_function_allowed = 'N' THEN
28498 pa_interface_utils_pub.map_new_amg_msg
28499 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
28500 ,p_msg_attribute => 'CHANGE'
28501 ,p_resize_flag => 'Y'
28502 ,p_msg_context => 'GENERAL'
28503 ,p_attribute1 => ''
28504 ,p_attribute2 => ''
28505 ,p_attribute3 => ''
28506 ,p_attribute4 => ''
28507 ,p_attribute5 => '');
28508 p_return_status := FND_API.G_RET_STS_ERROR;
28509 RAISE FND_API.G_EXC_ERROR;
28510 END IF;
28511
28512 /* Converting project_reference to project_id */
28513
28514 PA_PROJECT_PVT.Convert_pm_projref_to_id
28515 (p_pm_project_reference => p_pm_project_reference
28516 , p_pa_project_id => p_pa_project_id
28517 , p_out_project_id => l_project_id
28518 , p_return_status => l_return_status);
28519
28520 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28521 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28522 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
28523 RAISE FND_API.G_EXC_ERROR;
28524 END IF;
28525
28526 /* Getting the working structure_version_id */
28527
28528 if (p_working_str_version_id = NULL or p_working_str_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) then
28529 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
28530 pa_interface_utils_pub.map_new_amg_msg
28531 (p_old_message_code => 'PA_WRKG_STR_VER_ID_IS_MISSING'
28532 ,p_msg_attribute => 'CHANGE'
28533 ,p_resize_flag => 'N'
28534 ,p_msg_context => 'GENERAL'
28535 ,p_attribute1 => ''
28536 ,p_attribute2 => ''
28537 ,p_attribute3 => ''
28538 ,p_attribute4 => ''
28539 ,p_attribute5 => '');
28540 end if;
28541
28542 p_return_status := FND_API.G_RET_STS_ERROR;
28543 RAISE FND_API.G_EXC_ERROR;
28544 end if;
28545
28546 /* Calling: PA_PROGRESS_PUB.apply_lp_prog_on_cwv. */
28547
28548 PA_PROGRESS_PUB.apply_lp_prog_on_cwv(p_api_version => p_api_version
28549 ,p_init_msg_list => p_init_msg_list
28550 ,p_commit => FND_API.G_FALSE--bug 3766967
28551 ,p_project_id => l_project_id
28552 ,p_working_str_version_id => p_working_str_version_id
28553 ,x_return_status => l_return_status
28554 ,x_msg_count => l_msg_count
28555 ,x_msg_data => l_msg_data);
28556
28557 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
28558 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
28559 p_msg_name => l_msg_data);
28560 p_msg_data := l_msg_data;
28561 p_return_status := 'E';
28562 p_msg_count := l_msg_count;
28563 RAISE FND_API.G_EXC_ERROR;
28564 END IF;
28565
28566 IF (p_commit = FND_API.G_TRUE) THEN
28567 COMMIT;
28568 END IF;
28569
28570 EXCEPTION
28571
28572 when FND_API.G_EXC_ERROR then
28573
28574 if p_commit = FND_API.G_TRUE then
28575 rollback to APPLY_LP_PROG_ON_CWV;
28576 end if;
28577
28578 p_return_status := FND_API.G_RET_STS_ERROR;
28579
28580 FND_MSG_PUB.Count_And_Get
28581 (p_count => p_msg_count
28582 ,p_data => p_msg_data);
28583
28584 when FND_API.G_EXC_UNEXPECTED_ERROR then
28585 if p_commit = FND_API.G_TRUE then
28586 rollback to APPLY_LP_PROG_ON_CWV;
28587 end if;
28588
28589 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28590
28591 FND_MSG_PUB.Count_And_Get
28592 (p_count => p_msg_count
28593 ,p_data => p_msg_data);
28594
28595 when OTHERS then
28596
28597 if p_commit = FND_API.G_TRUE then
28598 rollback to APPLY_LP_PROG_ON_CWV;
28599 end if;
28600
28601 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28602
28603 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28604 THEN
28605 FND_MSG_PUB.add_exc_msg
28606 (p_pkg_name => G_PKG_NAME
28607 ,p_procedure_name => l_api_name);
28608 END IF;
28609
28610 FND_MSG_PUB.Count_And_Get
28611 (p_count => p_msg_count
28612 ,p_data => p_msg_data);
28613 raise;
28614
28615 END apply_lp_prog_on_cwv;
28616
28617 -- Progress Management Changes. Bug # 3420093.
28618
28619 -- 3435905 FP M Changes for Deliverables : Start
28620
28621 --------------------------------------------------------------------------------
28622 --Name: load_deliverable
28623 --Type: Procedure
28624 --Description: This procedure can be used to load a record of deliverable from input
28625 -- paramters to global table
28626 --
28627 --Called subprograms:
28628 --
28629 --
28630 --
28631 --History:
28632 -- 03-Mar-2004 Puneet Created
28633 --
28634
28635 PROCEDURE load_deliverable
28636 ( p_api_version IN NUMBER := 1.0
28637 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
28638 , p_debug_mode IN VARCHAR2 := 'N'
28639 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28640 , p_deliverable_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28641 , p_deliverable_short_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28642 , p_deliverable_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28643 , p_deliverable_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28644 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28645 , p_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28646 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28647 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28648 , p_progress_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28649 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28650 , px_deliverable_id IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28651 , p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28652 -- for bug# 3729250
28653 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28654 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28655 , p_task_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28656 , p_item_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28657 , P_inventory_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28658 , p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28659 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28660 -- for bug# 3729250
28661 -- , p_item_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28662 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28663 -- for bug# 3729250
28664 , p_unit_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28665 , p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28666 )
28667 IS
28668
28669 l_api_name CONSTANT VARCHAR2(30) := 'load_deliverable';
28670
28671 BEGIN
28672
28673 -- Standard begin of API savepoint
28674
28675 SAVEPOINT load_deliverable_pub;
28676
28677 -- Standard call to check for call compatibility.
28678
28679 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28680 p_api_version ,
28681 l_api_name ,
28682 G_PKG_NAME )
28683 THEN
28684
28685 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28686
28687 END IF;
28688
28689 -- Initialize the message table if requested.
28690
28691 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28692 THEN
28693
28694 FND_MSG_PUB.initialize;
28695
28696 END IF;
28697
28698 -- Set API return status to success
28699
28700 x_return_status := FND_API.G_RET_STS_SUCCESS;
28701
28702 -- Load the record only if deliverable_short_name is passed
28703 -- IF (p_deliverable_short_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND /* Bug 39590235 */
28704 IF (p_deliverable_short_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
28705 (p_deliverable_short_name IS NOT NULL) THEN
28706
28707 -- assign a value to the global counter for this table
28708 G_deliverables_in_tbl_count := G_deliverables_in_tbl_count + 1;
28709
28710 IF p_debug_mode = 'Y' THEN
28711 pa_debug.g_err_stage := 'Loading deliverable ['|| p_deliverable_short_name||'] element [ '||G_deliverables_in_tbl_count ||']';
28712 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
28713 END IF;
28714
28715 -- assign incoming parameters to the global table fields
28716 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_name := p_deliverable_name ;
28717 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_short_name := p_deliverable_short_name ;
28718 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_type_id := p_deliverable_type_id ;
28719 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_owner_id := p_deliverable_owner_id ;
28720 G_deliverables_in_tbl(G_deliverables_in_tbl_count).description := p_description ;
28721 G_deliverables_in_tbl(G_deliverables_in_tbl_count).status_code := p_status_code ;
28722 G_deliverables_in_tbl(G_deliverables_in_tbl_count).due_date := p_due_date ;
28723 G_deliverables_in_tbl(G_deliverables_in_tbl_count).completion_date := p_completion_date ;
28724 G_deliverables_in_tbl(G_deliverables_in_tbl_count).progress_weight := p_progress_weight ;
28725 G_deliverables_in_tbl(G_deliverables_in_tbl_count).pm_source_code := p_pm_source_code ;
28726 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_id := px_deliverable_id ;
28727 G_deliverables_in_tbl(G_deliverables_in_tbl_count).pm_deliverable_reference := p_pm_deliverable_reference;
28728 -- for bug# 3729250
28729 -- G_deliverables_in_tbl(G_deliverables_in_tbl_count).carrying_out_org_id := p_carrying_out_org_id ;
28730 G_deliverables_in_tbl(G_deliverables_in_tbl_count).task_id := p_task_id ;
28731 G_deliverables_in_tbl(G_deliverables_in_tbl_count).task_source_reference := p_task_source_reference ;
28732 G_deliverables_in_tbl(G_deliverables_in_tbl_count).item_id := p_item_id ;
28733 G_deliverables_in_tbl(G_deliverables_in_tbl_count).inventory_org_id := p_inventory_org_id ;
28734 G_deliverables_in_tbl(G_deliverables_in_tbl_count).quantity := p_quantity ;
28735 G_deliverables_in_tbl(G_deliverables_in_tbl_count).uom_code := p_uom_code ;
28736 -- for bug# 3729250
28737 -- G_deliverables_in_tbl(G_deliverables_in_tbl_count).item_description := p_item_description ;
28738 G_deliverables_in_tbl(G_deliverables_in_tbl_count).unit_price := p_unit_price ;
28739 G_deliverables_in_tbl(G_deliverables_in_tbl_count).unit_number := p_unit_number ;
28740 G_deliverables_in_tbl(G_deliverables_in_tbl_count).currency_code := p_currency_code ;
28741 END IF;
28742
28743 EXCEPTION
28744
28745 WHEN FND_API.G_EXC_ERROR THEN
28746 ROLLBACK TO load_deliverable_pub;
28747 x_return_status := FND_API.G_RET_STS_ERROR;
28748
28749
28750 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
28751 ROLLBACK TO load_deliverable_pub;
28752 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28753
28754
28755 WHEN OTHERS THEN
28756 ROLLBACK TO load_deliverable_pub;
28757 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28758
28759 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28760 THEN
28761 FND_MSG_PUB.add_exc_msg
28762 ( p_pkg_name => G_PKG_NAME
28763 , p_procedure_name => l_api_name );
28764
28765 END IF;
28766
28767 END load_deliverable;
28768
28769 --------------------------------------------------------------------------------
28770 --Name: load_deliverables
28771 --Type: Procedure
28772 --Description: This procedure can be used to load a set record of deliverables from input
28773 -- paramters to global table
28774 --
28775 --Called subprograms: load_deliverable
28776 --
28777 --
28778 --
28779 --History:
28780 -- 03-Mar-2004 Puneet Created
28781 --
28782
28783 PROCEDURE load_deliverables
28784 ( p_api_version IN NUMBER := 1.0
28785 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
28786 , p_debug_mode IN VARCHAR2 := 'N'
28787 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28788 , p_deliverable_name IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28789 --, p_deliverable_name IN PA_VC_1000_240 := PA_VC_1000_240(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28790 -- , p_deliverable_short_name IN PA_VC_1000_100 := PA_VC_1000_100(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28791 , p_deliverable_short_name IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28792 , p_deliverable_type_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28793 , p_deliverable_owner_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28794 , p_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28795 , p_status_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28796 , p_due_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
28797 , p_completion_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
28798 , p_progress_weight IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28799 , p_pm_source_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28800 , px_deliverable_id IN OUT NOCOPY PA_NUM_1000_NUM /*Added the nocopy check for 4537865 */
28801 , p_pm_deliverable_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28802 -- for bug# 3729250
28803 -- , p_carrying_out_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28804 , p_task_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28805 , p_task_source_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28806 , p_item_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28807 , P_inventory_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28808 , p_quantity IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28809 , p_uom_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28810 -- for bug# 3729250
28811 -- , p_item_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28812 , p_unit_price IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
28813 -- for bug# 3729250
28814 , p_unit_number IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28815 -- , p_currency_code IN PA_VC_1000_15 := PA_VC_1000_15(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28816 , p_currency_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
28817 )
28818 IS
28819
28820 l_api_name CONSTANT VARCHAR2(30) := 'load_deliverables';
28821
28822 BEGIN
28823
28824 -- Standard begin of API savepoint
28825
28826 SAVEPOINT load_deliverables_pub;
28827
28828 -- Standard call to check for call compatibility.
28829
28830 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28831 p_api_version ,
28832 l_api_name ,
28833 G_PKG_NAME )
28834 THEN
28835
28836 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28837
28838 END IF;
28839
28840 -- Initialize the message table if requested.
28841
28842 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28843 THEN
28844
28845 FND_MSG_PUB.initialize;
28846
28847 END IF;
28848
28849 -- Set API return status to success
28850
28851 x_return_status := FND_API.G_RET_STS_SUCCESS;
28852
28853 -- Load the table only if deliverable_short_name is passed
28854 FOR i in 1..1000 LOOP
28855 IF (p_deliverable_short_name(i) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND /* Bug # 3590235 */
28856 (p_deliverable_short_name(i) IS NOT NULL) THEN
28857
28858 load_deliverable
28859 ( p_api_version => p_api_version
28860 , p_init_msg_list => p_init_msg_list
28861 , p_debug_mode => p_debug_mode
28862 , x_return_status => x_return_status
28863 , p_deliverable_name => p_deliverable_name(i)
28864 , p_deliverable_short_name => p_deliverable_short_name(i)
28865 , p_deliverable_type_id => p_deliverable_type_id(i)
28866 , p_deliverable_owner_id => p_deliverable_owner_id(i)
28867 , p_description => p_description(i)
28868 , p_status_code => p_status_code(i)
28869 , p_due_date => p_due_date(i)
28870 , p_completion_date => p_completion_date(i)
28871 , p_progress_weight => p_progress_weight(i)
28872 , p_pm_source_code => p_pm_source_code(i)
28873 , px_deliverable_id => px_deliverable_id(i)
28874 , p_pm_deliverable_reference => p_pm_deliverable_reference(i)
28875 -- for bug# 3729250
28876 -- , p_carrying_out_org_id => p_carrying_out_org_id(i)
28877 , p_task_id => p_task_id(i)
28878 , p_task_source_reference => p_task_source_reference(i)
28879 , p_item_id => p_item_id(i)
28880 , P_inventory_org_id => p_inventory_org_id(i)
28881 , p_quantity => p_quantity(i)
28882 , p_uom_code => p_uom_code(i)
28883 -- for bug# 3729250
28884 -- , p_item_description => p_item_description(i)
28885 , p_unit_price => p_unit_price(i)
28886 , p_unit_number => p_unit_number(i)
28887 , p_currency_code => p_currency_code(i)
28888 ) ;
28889 END IF;
28890 END LOOP;
28891
28892 EXCEPTION
28893
28894 WHEN FND_API.G_EXC_ERROR
28895 THEN
28896 ROLLBACK TO load_deliverables_pub;
28897
28898 x_return_status := FND_API.G_RET_STS_ERROR;
28899
28900
28901 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28902 THEN
28903 ROLLBACK TO load_deliverables_pub;
28904
28905 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28906
28907
28908 WHEN OTHERS THEN
28909 ROLLBACK TO load_deliverables_pub;
28910
28911 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28912
28913 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28914 THEN
28915 FND_MSG_PUB.add_exc_msg
28916 ( p_pkg_name => G_PKG_NAME
28917 , p_procedure_name => l_api_name );
28918
28919 END IF;
28920
28921 END load_deliverables;
28922
28923 --------------------------------------------------------------------------------
28924 --Name: load_action
28925 --Type: Procedure
28926 --Description: This procedure can be used to load a record of Deliverable
28927 -- Actions from input paramters to global tables
28928 --
28929 --Called subprograms:
28930 --
28931 --
28932 --
28933 --History:
28934 -- 03-Mar-2004 Puneet Created
28935 --
28936
28937 PROCEDURE load_action
28938 ( p_api_version IN NUMBER := 1.0
28939 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
28940 , p_debug_mode IN VARCHAR2 := 'N'
28941 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28942 , p_action_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28943 , p_action_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28944 , p_action_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28945 , p_function_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28946 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28947 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28948 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28949 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28950 , p_pm_action_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28951 -- for bug# 3729250
28952 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28953 , p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28954 , p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28955 -- added for bug# 3729250
28956 , p_financial_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28957 , p_financial_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28958 , p_destination_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28959 , p_receiving_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28960 , p_receiving_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28961 , p_po_need_by_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28962 , p_vendor_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28963 , p_vendor_site_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28964 -- , p_project_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28965 , p_Quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28966 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28967 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28968 , p_exchange_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28969 , p_exchange_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28970 , p_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM /* Bug 3590235 */
28971 , p_expenditure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28972 , p_expenditure_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28973 , p_expenditure_item_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28974 , p_requisition_line_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28975 , p_category_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28976 , p_ready_to_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28977 , p_initiate_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28978 , p_ship_from_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28979 , p_ship_from_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28980 , p_ship_to_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28981 , p_ship_to_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28982 , p_demand_schedule IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28983 , p_expected_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28984 , p_promised_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28985 , p_volume IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28986 , p_volume_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28987 , p_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28988 , p_weight_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28989 , p_ready_to_ship_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28990 , p_initiate_planning_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28991 , p_initiate_shipping_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28992 , p_event_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28993 , p_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28994 , p_invoice_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28995 , p_revenue_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28996 , p_event_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28997 , p_event_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28998 , p_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28999 , p_bill_hold_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29000 , p_project_functional_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29001 , p_project_functional_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29002 , p_project_functional_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29003 , p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29004 , p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29005 , p_project_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29006 , p_funding_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29007 , p_funding_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29008 , p_funding_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29009 , p_pm_event_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
29010 )
29011 IS
29012
29013 l_api_name CONSTANT VARCHAR2(30) := 'load_actions';
29014
29015 BEGIN
29016
29017 -- Standard begin of API savepoint
29018
29019 SAVEPOINT load_action_pub;
29020
29021 -- Standard call to check for call compatibility.
29022
29023 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
29024 p_api_version ,
29025 l_api_name ,
29026 G_PKG_NAME )
29027 THEN
29028
29029 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29030
29031 END IF;
29032
29033 -- Initialize the message table if requested.
29034
29035 IF FND_API.TO_BOOLEAN( p_init_msg_list )
29036 THEN
29037
29038 FND_MSG_PUB.initialize;
29039
29040 END IF;
29041
29042 -- Set API return status to success
29043
29044 x_return_status := FND_API.G_RET_STS_SUCCESS;
29045
29046 -- Load the table only if action_name is passed
29047 IF (p_action_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29048 (p_action_name IS NOT NULL) THEN
29049
29050 -- assign a value to the global counter for this table
29051 G_dlvr_actions_in_tbl_count := G_dlvr_actions_in_tbl_count + 1;
29052
29053 IF p_debug_mode = 'Y' THEN
29054 pa_debug.g_err_stage := 'Loading action ['|| p_action_name||'] element [ '||G_dlvr_actions_in_tbl_count ||']';
29055 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29056 END IF;
29057
29058 -- assign incoming parameters to the global table fields
29059 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_name := p_action_name ;
29060 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_owner_id := p_action_owner_id ;
29061 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_id := p_action_id ;
29062 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).function_code := p_function_code ;
29063 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).due_date := p_due_date ;
29064 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).description := p_description ;
29065 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).completion_date := p_completion_date ;
29066 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_source_code := p_pm_source_code ;
29067 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_action_reference := p_pm_action_reference ;
29068 -- for bug# 3729250
29069 -- G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).carrying_out_org_id := p_carrying_out_org_id ;
29070 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_deliverable_reference := p_pm_deliverable_reference ;
29071 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).deliverable_id := p_deliverable_id ;
29072 -- added for bug# 3729250
29073 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).financial_task_reference := p_financial_task_reference ;
29074 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).financial_task_id := p_financial_task_id ;
29075 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).destination_type_code := p_destination_type_code ;
29076 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).receiving_org_id := p_receiving_org_id ;
29077 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).receiving_location_id := p_receiving_location_id ;
29078 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).po_need_by_date := p_po_need_by_date ;
29079 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).vendor_id := p_vendor_id ;
29080 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).vendor_site_code := p_vendor_site_code ;
29081 -- G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_currency := p_project_currency ;
29082 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).Quantity := p_Quantity ;
29083 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).uom_code := p_uom_code ;
29084 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).unit_price := p_unit_price ;
29085 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate_type := p_exchange_rate_type ;
29086 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate_date := p_exchange_rate_date ;
29087 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate := p_exchange_rate ;
29088 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_type := p_expenditure_type ;
29089 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_org_id := p_expenditure_org_id ;
29090 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_item_date := p_expenditure_item_date ;
29091 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).requisition_line_type_id := p_requisition_line_type_id ;
29092 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).category_id := p_category_id ;
29093 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ready_to_procure_flag := p_ready_to_procure_flag ;
29094 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_procure_flag := p_initiate_procure_flag ;
29095 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_from_organization_id := p_ship_from_organization_id ;
29096 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_from_location_id := p_ship_from_location_id ;
29097 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_to_organization_id := p_ship_to_organization_id ;
29098 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_to_location_id := p_ship_to_location_id ;
29099 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).demand_schedule := p_demand_schedule ;
29100 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expected_shipment_date := p_expected_shipment_date ;
29101 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).promised_shipment_date := p_promised_shipment_date ;
29102 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).volume := p_volume ;
29103 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).volume_uom := p_volume_uom ;
29104 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).weight := p_weight ;
29105 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).weight_uom := p_weight_uom ;
29106 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ready_to_ship_flag := p_ready_to_ship_flag ;
29107 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_planning_flag := p_initiate_planning_flag ;
29108 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_shipping_flag := p_initiate_shipping_flag ;
29109 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_type := p_event_type ;
29110 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).currency := p_currency ;
29111 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).invoice_amount := p_invoice_amount ;
29112 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).revenue_amount := p_revenue_amount ;
29113 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_date := p_event_date ;
29114 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_number := p_event_number ;
29115 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).organization_id := p_organization_id ;
29116 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).bill_hold_flag := p_bill_hold_flag ;
29117 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate_type := p_project_functional_rate_type ;
29118 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate_date := p_project_functional_rate_date ;
29119 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate := p_project_functional_rate ;
29120 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate_type := p_project_rate_type ;
29121 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate_date := p_project_rate_date ;
29122 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate := p_project_rate ;
29123 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate_type := p_funding_rate_type ;
29124 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate_date := p_funding_rate_date ;
29125 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate := p_funding_rate ;
29126 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_event_reference := p_pm_event_reference ; -- 3651489 added parameter
29127 END IF;
29128
29129 EXCEPTION
29130
29131 WHEN FND_API.G_EXC_ERROR
29132 THEN
29133 ROLLBACK TO load_action_pub;
29134
29135 x_return_status := FND_API.G_RET_STS_ERROR;
29136
29137
29138 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29139 THEN
29140 ROLLBACK TO load_action_pub;
29141
29142 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29143
29144
29145 WHEN OTHERS THEN
29146 ROLLBACK TO load_action_pub;
29147
29148 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29149
29150 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29151 THEN
29152 FND_MSG_PUB.add_exc_msg
29153 ( p_pkg_name => G_PKG_NAME
29154 , p_procedure_name => l_api_name );
29155
29156 END IF;
29157
29158 END load_action;
29159
29160 --------------------------------------------------------------------------------
29161 --Name: load_actions
29162 --Type: Procedure
29163 --Description: This procedure can be used to load Actions from input
29164 -- paramters to global tables
29165 --
29166 --Called subprograms:
29167 --
29168 --
29169 --
29170 --History:
29171 -- 03-Mar-2004 Puneet Created
29172 --
29173 PROCEDURE load_actions
29174 ( p_api_version IN NUMBER := 1.0
29175 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
29176 , p_debug_mode IN VARCHAR2 := 'N'
29177 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29178 --, p_action_name IN PA_VC_1000_240 := PA_VC_1000_240(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29179 , p_action_name IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29180 , p_action_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29181 , p_action_owner_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29182 , p_function_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29183 , p_due_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29184 , p_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29185 , p_completion_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29186 , p_pm_source_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29187 , p_pm_action_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29188 -- for bug# 3729250
29189 -- , p_carrying_out_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29190 , p_pm_deliverable_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29191 , p_deliverable_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29192 -- added for bug# 3729250
29193 , p_financial_task_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29194 , p_financial_task_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29195 , p_destination_type_code IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29196 , p_receiving_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29197 , p_receiving_location_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29198 , p_po_need_by_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29199 , p_vendor_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29200 , p_vendor_site_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29201 -- , p_project_currency IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29202 , p_Quantity IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29203 , p_uom_code IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29204 , p_unit_price IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29205 , p_exchange_rate_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29206 , p_exchange_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29207 , p_exchange_rate IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) /* Bug # 3590235 */
29208 , p_expenditure_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29209 , p_expenditure_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29210 , p_expenditure_item_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29211 , p_requisition_line_type_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29212 , p_category_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29213 -- , p_ready_to_procure_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29214 -- , p_initiate_procure_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29215 , p_ready_to_procure_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29216 , p_initiate_procure_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29217 , p_ship_from_organization_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29218 , p_ship_from_location_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29219 , p_ship_to_organization_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29220 , p_ship_to_location_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29221 , p_demand_schedule IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29222 , p_expected_shipment_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29223 , p_promised_shipment_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29224 , p_volume IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29225 , p_volume_uom IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29226 , p_weight IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29227 , p_weight_uom IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29228 -- , p_ready_to_ship_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29229 -- , p_initiate_planning_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29230 -- , p_initiate_shipping_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29231 , p_ready_to_ship_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29232 , p_initiate_planning_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29233 , p_initiate_shipping_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29234 , p_event_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29235 , p_currency IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29236 , p_invoice_amount IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29237 , p_revenue_amount IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29238 , p_event_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29239 , p_event_number IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29240 , p_organization_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29241 , p_bill_hold_flag IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29242 , p_project_functional_rate_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29243 , p_project_functional_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29244 , p_project_functional_rate IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29245 , p_project_rate_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29246 , p_project_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29247 , p_project_rate IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29248 , p_funding_rate_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29249 , p_funding_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29250 , p_funding_rate IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29251 , p_pm_event_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- 3651489 added parameter
29252 )
29253 IS
29254
29255 l_api_name CONSTANT VARCHAR2(30) := 'load_actions';
29256 l_return_status VARCHAR2(1) := null;
29257
29258 BEGIN
29259
29260 -- Standard begin of API savepoint
29261
29262 SAVEPOINT load_actions_pub;
29263
29264 -- Standard call to check for call compatibility.
29265
29266 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
29267 p_api_version ,
29268 l_api_name ,
29269 G_PKG_NAME )
29270 THEN
29271
29272 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29273
29274 END IF;
29275
29276 -- Initialize the message table if requested.
29277
29278 IF FND_API.TO_BOOLEAN( p_init_msg_list )
29279 THEN
29280
29281 FND_MSG_PUB.initialize;
29282
29283 END IF;
29284
29285 -- Set API return status to success
29286
29287 x_return_status := FND_API.G_RET_STS_SUCCESS;
29288
29289 -- Load the table only if action_name is passed
29290 FOR i in 1..1000 LOOP
29291 IF (p_action_name(i) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29292 (p_action_name(i) IS NOT NULL) THEN
29293
29294 -- assign a value to the global counter for this table
29295 G_dlvr_actions_in_tbl_count := G_dlvr_actions_in_tbl_count + 1;
29296
29297 -- assign incoming parameters to the global table fields
29298 load_action
29299 ( p_api_version => p_api_version
29300 , p_init_msg_list => p_init_msg_list
29301 , p_debug_mode => p_debug_mode
29302 , x_return_status => l_return_status
29303 , p_action_name => p_action_name(i)
29304 , p_action_id => p_action_id(i)
29305 , p_action_owner_id => p_action_owner_id(i)
29306 , p_function_code => p_function_code(i)
29307 , p_due_date => p_due_date(i)
29308 , p_description => p_description(i)
29309 , p_completion_date => p_completion_date(i)
29310 , p_pm_source_code => p_pm_source_code(i)
29311 , p_pm_action_reference => p_pm_action_reference(i)
29312 -- for bug# 3729250
29313 -- , p_carrying_out_org_id => p_carrying_out_org_id(i)
29314 , p_pm_deliverable_reference => p_pm_deliverable_reference(i)
29315 , p_deliverable_id => p_deliverable_id(i)
29316 , p_financial_task_reference => p_financial_task_reference(i) -- added for bug# 3729250
29317 , p_financial_task_id => p_financial_task_id(i)
29318 , p_destination_type_code => p_destination_type_code(i)
29319 , p_receiving_org_id => p_receiving_org_id(i)
29320 , p_receiving_location_id => p_receiving_location_id(i)
29321 , p_po_need_by_date => p_po_need_by_date(i)
29322 , p_vendor_id => p_vendor_id(i)
29323 , p_vendor_site_code => p_vendor_site_code(i)
29324 -- , p_project_currency => p_project_currency(i)
29325 , p_Quantity => p_Quantity(i)
29326 , p_uom_code => p_uom_code(i)
29327 , p_unit_price => p_unit_price(i)
29328 , p_exchange_rate_type => p_exchange_rate_type(i)
29329 , p_exchange_rate_date => p_exchange_rate_date(i)
29330 , p_exchange_rate => p_exchange_rate(i)
29331 , p_expenditure_type => p_expenditure_type(i)
29332 , p_expenditure_org_id => p_expenditure_org_id(i)
29333 , p_expenditure_item_date => p_expenditure_item_date(i)
29334 , p_requisition_line_type_id => p_requisition_line_type_id(i)
29335 , p_category_id => p_category_id(i)
29336 , p_ready_to_procure_flag => p_ready_to_procure_flag(i)
29337 , p_initiate_procure_flag => p_initiate_procure_flag(i)
29338 , p_ship_from_organization_id => p_ship_from_organization_id(i)
29339 , p_ship_from_location_id => p_ship_from_location_id(i)
29340 , p_ship_to_organization_id => p_ship_to_organization_id(i)
29341 , p_ship_to_location_id => p_ship_to_location_id(i)
29342 , p_demand_schedule => p_demand_schedule(i)
29343 , p_expected_shipment_date => p_expected_shipment_date(i)
29344 , p_promised_shipment_date => p_promised_shipment_date(i)
29345 , p_volume => p_volume(i)
29346 , p_volume_uom => p_volume_uom(i)
29347 , p_weight => p_weight(i)
29348 , p_weight_uom => p_weight_uom(i)
29349 , p_ready_to_ship_flag => p_ready_to_ship_flag(i)
29350 , p_initiate_planning_flag => p_initiate_planning_flag(i)
29351 , p_initiate_shipping_flag => p_initiate_shipping_flag(i)
29352 , p_event_type => p_event_type(i)
29353 , p_currency => p_currency(i)
29354 , p_invoice_amount => p_invoice_amount(i)
29355 , p_revenue_amount => p_revenue_amount(i)
29356 , p_event_date => p_event_date(i)
29357 , p_event_number => p_event_number(i)
29358 , p_organization_id => p_organization_id(i)
29359 , p_bill_hold_flag => p_bill_hold_flag(i)
29360 , p_project_functional_rate_type => p_project_functional_rate_type(i)
29361 , p_project_functional_rate_date => p_project_functional_rate_date(i)
29362 , p_project_functional_rate => p_project_functional_rate(i)
29363 , p_project_rate_type => p_project_rate_type(i)
29364 , p_project_rate_date => p_project_rate_date(i)
29365 , p_project_rate => p_project_rate(i)
29366 , p_funding_rate_type => p_funding_rate_type(i)
29367 , p_funding_rate_date => p_funding_rate_date(i)
29368 , p_funding_rate => p_funding_rate(i)
29369 , p_pm_event_reference => p_pm_event_reference(i) -- 3651489 added parameter
29370 );
29371
29372 END IF;
29373 END LOOP;
29374
29375 EXCEPTION
29376
29377 WHEN FND_API.G_EXC_ERROR
29378 THEN
29379 ROLLBACK TO load_actions_pub;
29380
29381 x_return_status := FND_API.G_RET_STS_ERROR;
29382
29383
29384 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29385 THEN
29386 ROLLBACK TO load_actions_pub;
29387
29388 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29389
29390
29391 WHEN OTHERS THEN
29392 ROLLBACK TO load_actions_pub;
29393
29394 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29395
29396 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29397 THEN
29398 FND_MSG_PUB.add_exc_msg
29399 ( p_pkg_name => G_PKG_NAME
29400 , p_procedure_name => l_api_name );
29401
29402 END IF;
29403
29404 END load_actions;
29405
29406
29407 --------------------------------------------------------------------------------
29408 --Name: Create_Deliverable
29409 --Type: Procedure
29410 --Description: This procedure creates a deliverable and its related actions
29411 -- which are passed through actions PLSQL table
29412 --
29413 --Called subprograms: PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
29414 -- Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
29415 --
29416 --
29417 --
29418 --History:
29419 -- 08-Mar-2004 Puneet Created
29420 --
29421
29422 PROCEDURE create_deliverable
29423 ( p_api_version IN NUMBER := 1.0
29424 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
29425 , p_commit IN VARCHAR2 := FND_API.G_FALSE
29426 , p_debug_mode IN VARCHAR2 := 'N'
29427 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29428 , p_deliverable_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29429 , p_deliverable_short_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29430 , p_deliverable_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29431 , p_deliverable_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29432 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29433 , p_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29434 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29435 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29436 , p_progress_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29437 , px_deliverable_id IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
29438 , p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29439 -- for bug# 3729250
29440 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29441 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29442 , p_task_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29443 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29444 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29445 , p_action_in_tbl IN action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
29446 , x_action_out_tbl OUT NOCOPY action_out_tbl_type /*Added the nocopy check for 4537865 */
29447 , p_item_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29448 , P_inventory_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29449 , p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29450 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29451 -- for bug# 3729250
29452 -- , p_item_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29453 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29454 -- for bug# 3729250
29455 , p_unit_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29456 , p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29457 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR /* Bug no. 3651113 */
29458 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
29459 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29460 )
29461
29462 IS
29463
29464 l_project_id NUMBER;
29465 l_task_id NUMBER;
29466 l_project_number Pa_Projects_All.Segment1%TYPE;
29467 l_task_number Pa_Proj_Elements.Name%TYPE;
29468 l_task_source_reference VARCHAR2(240);
29469 l_deliverable_element_id NUMBER;
29470 l_deliverable_version_id NUMBER;
29471 l_dlvr_prg_enabled VARCHAR2(1) := NULL;
29472 l_dlvr_action_enabled VARCHAR2(1) := NULL;
29473 l_dlvr_enabled VARCHAR2(1) := NULL;
29474 l_status_code PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
29475
29476 l_unique_flag VARCHAR2(1) := null;
29477 l_err_message Fnd_New_Messages.Message_text%TYPE; -- for AMG message
29478
29479 l_data VARCHAR2(2000); -- 4537865
29480 l_action_in_tbl action_in_tbl_type;
29481 l_action_out_tlb action_out_tbl_type;
29482
29483 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_DELIVERABLES';
29484 l_msg_index_out NUMBER;
29485
29486 i NUMBER := 0;
29487 i_actn NUMBER := 0;
29488
29489 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
29490 l_function_allowed VARCHAR2(1);
29491 l_pm_product_code VARCHAR2(2) :='Z'; /* Bug 3651113 */
29492
29493 -- 3651542 added local variable
29494
29495 l_dlvr_owner_id PA_PROJ_ELEMENTS.MANAGER_PERSON_ID%TYPE;
29496 l_dlvr_owner_name PER_ALL_PEOPLE_F.FULL_NAME%TYPE;
29497 l_default_date DATE;
29498
29499 /*cursor added for Bug 3651113 */
29500 Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
29501 Is
29502 Select 'X'
29503 from pa_lookups
29504 where lookup_type='PM_PRODUCT_CODE'
29505 and lookup_code = p_pm_product_code;
29506
29507 l_wp_task_flag varchar2(1); -- Added for bug5462298
29508
29509 BEGIN
29510 -- Initialize the message table if requested.
29511 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
29512 FND_MSG_PUB.initialize;
29513 END IF;
29514
29515 -- 3735792 , setting save point unconditionally
29516 -- IF (p_commit = FND_API.G_TRUE) THEN
29517 savepoint CREATE_DELIVERABLE_PUB;
29518 -- END IF;
29519
29520 -- Validation check for product code : Bug 3651113
29521
29522 OPEN p_product_code_csr (p_pm_source_code);
29523 FETCH p_product_code_csr INTO l_pm_product_code;
29524 CLOSE p_product_code_csr;
29525
29526 IF l_pm_product_code <> 'X'
29527 AND p_pm_source_code <> 'WORKPLAN'
29528 THEN
29529 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
29530 THEN
29531 pa_interface_utils_pub.map_new_amg_msg
29532 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
29533 ,p_msg_attribute => 'CHANGE'
29534 ,p_resize_flag => 'N'
29535 ,p_msg_context => 'GENERAL'
29536 ,p_attribute1 => ''
29537 ,p_attribute2 => ''
29538 ,p_attribute3 => ''
29539 ,p_attribute4 => ''
29540 ,p_attribute5 => '');
29541 END IF;
29542 x_return_status := FND_API.G_RET_STS_ERROR;
29543 RAISE FND_API.G_EXC_ERROR;
29544 END IF;
29545
29546 IF p_debug_mode = 'Y' THEN
29547 PA_DEBUG.set_curr_function( p_function => l_api_name,
29548 p_debug_mode => p_debug_mode );
29549 pa_debug.g_err_stage:= 'Inside '||l_api_name;
29550 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
29551 END IF;
29552
29553 -- Set API return status to success
29554 x_return_status := FND_API.G_RET_STS_SUCCESS;
29555
29556
29557 IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
29558 l_task_id := NULL;
29559 ELSE
29560 l_task_id := p_task_id;
29561 END IF;
29562
29563
29564 IF p_task_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
29565 l_task_source_reference := NULL;
29566 ELSE
29567 l_task_source_reference := p_task_source_reference;
29568 END IF;
29569
29570
29571
29572 -- Function Security Check
29573 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
29574 (p_api_version_number => p_api_version,
29575 p_responsibility_id => l_resp_id,
29576 p_function_name => 'PA_DELIVERABLE_EDIT',
29577 p_msg_count => x_msg_count,
29578 p_msg_data => x_msg_data,
29579 p_return_status => x_return_status,
29580 p_function_allowed => l_function_allowed);
29581
29582 IF p_debug_mode = 'Y' THEN
29583 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
29584 END IF;
29585
29586 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
29587 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29588 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
29589 RAISE FND_API.G_EXC_ERROR;
29590 END IF;
29591
29592 IF l_function_allowed = 'N' THEN
29593 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
29594 ,p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
29595 x_return_status := FND_API.G_RET_STS_ERROR;
29596 RAISE FND_API.G_EXC_ERROR;
29597 END IF;
29598
29599 -- validate the input parameters.
29600 -- Get the task and Project details based on source reference passed
29601 PA_PROJECT_PVT.Convert_pm_projref_to_id (
29602 p_pm_project_reference => p_proj_source_reference
29603 , p_pa_project_id => p_project_id
29604 , p_out_project_id => l_project_id
29605 , p_return_status => x_return_status
29606 );
29607
29608 IF p_debug_mode = 'Y' THEN
29609 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
29610 END IF;
29611
29612 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
29613 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29614 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
29615 RAISE FND_API.G_EXC_ERROR;
29616 END IF;
29617
29618 IF ( l_task_id IS NOT NULL OR l_task_source_reference IS NOT NULL ) THEN
29619 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
29620 p_pa_project_id => l_project_id
29621 , p_structure_type => 'WORKPLAN'
29622 , p_pa_task_id => p_task_id
29623 , p_pm_task_reference => p_task_source_reference
29624 , p_out_task_id => l_task_id
29625 , p_return_status => x_return_status );
29626
29627 IF p_debug_mode = 'Y' THEN
29628 pa_debug.write(g_pkg_name,'Task Ref to ID Return Status ['||x_return_status||']Task ID['||l_task_id||']',3) ;
29629 END IF;
29630
29631 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
29632 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29633 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
29634 RAISE FND_API.G_EXC_ERROR;
29635 END IF;
29636
29637 -- 5462298 Added below code to validate passed task id
29638 -- if it is not workplan task , throw error message
29639
29640 l_wp_task_flag := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_WORKPLAN_TASK (
29641 p_project_id => l_project_id
29642 , p_proj_element_id => l_task_id );
29643
29644 IF l_wp_task_flag <> 'Y' THEN
29645
29646 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
29647 THEN
29648
29649 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
29650 ,p_msg_name => 'PA_TASK_ID_INVALID');
29651
29652 x_return_status := FND_API.G_RET_STS_ERROR;
29653 RAISE FND_API.G_EXC_ERROR;
29654
29655 END IF;
29656
29657 END IF;
29658
29659 -- 5462298 end
29660
29661 END IF;
29662
29663 -- Validate Deliverable reference - not null, unique
29664 PA_Deliverable_Utils.is_dlvr_reference_unique(
29665 p_deliverable_reference => p_pm_deliverable_reference
29666 , p_project_id => l_project_id
29667 , x_unique_flag => l_unique_flag
29668 , x_return_status => x_return_status );
29669
29670 IF p_debug_mode = 'Y' THEN
29671 pa_debug.write(g_pkg_name,'Dlvr Reference Unique Return Status ['||x_return_status||']Unique['||l_unique_flag||']',3) ;
29672 END IF;
29673
29674 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
29675 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29676 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
29677 RAISE FND_API.G_EXC_ERROR;
29678 END IF;
29679
29680 -- Fetching Task Name , Project Name to use as token in Error Messages.
29681
29682 IF (l_task_id IS NOT NULL) THEN
29683 SELECT name INTO l_task_number
29684 FROM Pa_Proj_Elements
29685 WHERE proj_element_id = l_task_id;
29686 ELSE
29687 l_task_number := null;
29688 END IF;
29689
29690 SELECT segment1 INTO l_project_number
29691 FROM Pa_Projects_All
29692 WHERE project_id = l_project_id;
29693
29694 IF p_debug_mode = 'Y' THEN
29695 pa_debug.g_err_stage := 'Creating deliverable ['|| p_deliverable_short_name||']['||p_pm_deliverable_reference||']['
29696 ||p_deliverable_owner_id||']['||p_deliverable_Type_id||']['||l_project_id||']['||l_task_id||']';
29697 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29698 END IF;
29699
29700 -- Check if deliverable is enabled for project.
29701 -- If not then first enable it before creating the deliverable.
29702
29703 -- 3700247, check for G_DLVR_STRUCTURE_ENABLED parameter, if it is null,
29704 -- check for target project, whether deliverable is enabled or not
29705 -- if deliverable is not enabled and deliverables are loaded, throw error message
29706
29707 IF p_debug_mode = 'Y' THEN
29708 pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
29709 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29710 END IF;
29711
29712 IF G_DLVR_STRUCTURE_ENABLED IS NULL THEN
29713 G_DLVR_STRUCTURE_ENABLED := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_id);
29714
29715 IF p_debug_mode = 'Y' THEN
29716 pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
29717 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29718 END IF;
29719 END IF;
29720
29721 IF G_DLVR_STRUCTURE_ENABLED = 'N' THEN
29722 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
29723 ,p_msg_name => 'PA_DLV_STRUCTURE_DISABLED');
29724 x_return_status := FND_API.G_RET_STS_ERROR;
29725 RAISE FND_API.G_EXC_ERROR;
29726 END IF;
29727
29728 -- 3700247, if deliverable structure is not enabled for target and deliverables are passed in loading,
29729 -- error message is thrown. So, removing the below code , which enables the structure for the target project in
29730 -- above condition.
29731
29732 /*
29733 l_dlvr_enabled := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_id);
29734
29735 IF p_debug_mode = 'Y' THEN
29736 pa_debug.g_err_stage := 'Deliverable Enabled ['||l_dlvr_enabled||']';
29737 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29738 END IF;
29739
29740 IF ( l_dlvr_enabled = 'N' ) THEN
29741
29742 Pa_Deliverable_Utils.enable_deliverable(
29743 p_api_version => p_api_version
29744 , p_init_msg_list => FND_API.G_FALSE
29745 , p_commit => p_commit
29746 , p_debug_mode => p_debug_mode
29747 , p_validate_only => FND_API.G_FALSE
29748 , p_project_id => l_project_id
29749 , x_return_status => x_return_status
29750 , x_msg_count => x_msg_count
29751 , x_msg_data => x_msg_data
29752 );
29753
29754 IF p_debug_mode = 'Y' THEN
29755 pa_debug.write(g_pkg_name,'Pa_Deliverable_Utils.enable_deliverable Return Status ['||x_return_status||']',3) ;
29756 END IF;
29757
29758 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
29759 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29760 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
29761 RAISE FND_API.G_EXC_ERROR;
29762 END IF;
29763
29764 END IF; -- deliverable not enabled
29765 */
29766
29767
29768 -- 3651542 if deliverable onwer and date is not passed
29769 -- call util api to retrieve default value and assign it to local variables
29770 -- if it is passed, use the passed owner id and due date
29771
29772 -- here in defaulting , considered only project flow
29773 -- task flow is not considered and passing task ver id as NULL
29774
29775 IF p_deliverable_owner_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
29776 PA_DELIVERABLE_UTILS.GET_DEFAULT_DLVR_OWNER
29777 (
29778 p_project_id => p_project_id
29779 ,p_task_ver_id => NULL
29780 ,x_owner_id => l_dlvr_owner_id
29781 ,x_owner_name => l_dlvr_owner_name
29782 );
29783 ELSE
29784 l_dlvr_owner_id := p_deliverable_owner_id;
29785 END IF;
29786
29787 IF p_due_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
29788 PA_DELIVERABLE_UTILS.GET_DEFAULT_DLVR_DATE
29789 (
29790 p_project_id => p_project_id
29791 ,p_task_ver_id => NULL
29792 ,x_due_date => l_default_date
29793 );
29794 ELSE
29795 l_default_date := p_due_date;
29796 END IF;
29797
29798 -- 3651542 end
29799
29800 -- All other validations done in PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
29801 --invoke the api to create deliverable
29802 Pa_Deliverable_Pub.Create_Deliverable
29803 ( p_api_version => p_api_version
29804 , p_init_msg_list => FND_API.G_FALSE -- passed as false as doesn't want message stack to be reset.
29805 -- 3735792, passing p_commit as false to next level api calls
29806 , p_commit => FND_API.G_FALSE
29807 , p_validate_only => FND_API.G_FALSE
29808 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
29809 , p_calling_module => 'AMG'
29810 , p_debug_mode => p_debug_mode
29811 , p_max_msg_count => NULL
29812 , p_record_version_number => 1
29813 , p_object_type => 'PA_DELIVERABLES'
29814 , p_project_id => l_project_id
29815 , p_dlvr_number => p_deliverable_short_name
29816 , p_dlvr_name => p_deliverable_name
29817 , p_dlvr_description => p_description
29818 , p_dlvr_owner_id => l_dlvr_owner_id -- for bug# 3651542, earlier p_deliverable_owner_id was passed
29819 , p_dlvr_owner_name => NULL
29820 -- for bug# 3729250
29821 -- , p_carrying_out_org_id => p_carrying_out_org_id
29822 , p_carrying_out_org_name => NULL
29823 , p_dlvr_version_id => null
29824 , p_status_code => p_status_code
29825 , p_parent_structure_id => NULL
29826 , p_dlvr_type_id => p_deliverable_type_id
29827 , p_dlvr_type_name => NULL
29828 , p_progress_weight => p_progress_weight
29829 , p_scheduled_finish_date => l_default_date -- for bug# 3651542, earlier p_due_date was passed
29830 , p_actual_finish_date => p_completion_date
29831 , p_task_id => l_task_id
29832 , p_task_version_id => null
29833 , p_task_name => null
29834 , p_deliverable_reference => p_pm_deliverable_reference
29835 , p_item_id => p_item_id
29836 , p_inventory_org_id => p_inventory_org_id
29837 , p_quantity => p_quantity
29838 , p_uom_code => p_uom_code
29839 -- for bug# 3729250
29840 -- , p_item_description => p_item_description
29841 , p_unit_price => p_unit_price
29842 , p_unit_number => p_unit_number
29843 , p_currency_code => p_currency_code
29844 , p_dlvr_item_id => px_deliverable_id
29845 , p_pm_source_code => p_pm_source_code /* Bug no. 3651113 */
29846 , x_return_status => x_return_status
29847 , x_msg_count => x_msg_count
29848 , x_msg_data => x_msg_data
29849 );
29850
29851 l_deliverable_element_id := px_deliverable_id ;
29852
29853 IF p_debug_mode = 'Y' THEN
29854 pa_debug.g_err_stage := 'Created deliverable ['|| l_deliverable_element_id||']['||x_return_status||']';
29855 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29856 END IF;
29857
29858
29859 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
29860 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29861 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
29862 RAISE FND_API.G_EXC_ERROR;
29863 END IF;
29864 -- Will create actions only when deliverable type of deliverable
29865 -- has action creation enabled.
29866
29867 Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
29868 (
29869 p_dlvr_type_id => p_deliverable_type_id
29870 ,x_dlvr_prg_enabled => l_dlvr_prg_enabled
29871 ,x_dlvr_action_enabled => l_dlvr_action_enabled
29872 ,x_dlvr_default_status_code => l_status_code
29873 );
29874
29875 IF p_debug_mode = 'Y' THEN
29876 pa_debug.g_err_stage := 'Dlvr Type allow action creation ['|| l_dlvr_action_enabled||']';
29877 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29878 END IF;
29879
29880 -- invoke the api pa_actions_pub.create_dlvr_action_wrapper
29881 -- to create actions for the deliverable, insert records
29882 -- in OKE tables, create events if required.
29883
29884 i := p_action_in_tbl.first();
29885 l_action_in_tbl.delete;
29886
29887
29888 WHILE (i IS NOT NULL ) LOOP
29889 IF ( p_pm_deliverable_reference = p_action_in_tbl(i).pm_deliverable_reference) THEN
29890 i_actn := i_actn + 1;
29891 l_action_in_tbl(i_actn) := p_action_in_tbl(i);
29892 l_action_in_tbl(i_actn).deliverable_id := l_deliverable_element_id;
29893
29894 -- added for bug# 3749447
29895 -- if pm_source_code is not passed in action record, use it from deliverable record
29896 IF p_action_in_tbl(i).pm_source_code IS NOT NULL and p_action_in_tbl(i).pm_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
29897 l_action_in_tbl(i_actn).pm_source_code := p_pm_source_code;
29898 END IF;
29899
29900 END IF;
29901 i := p_action_in_tbl.next(i);
29902 END LOOP;
29903
29904 IF p_debug_mode = 'Y' THEN
29905 pa_debug.g_err_stage := 'About to Create ['|| i_actn ||'] out of ['||i ||'] Actn enabled ['||l_dlvr_action_enabled||']';
29906 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29907 END IF;
29908
29909
29910 IF (i_actn > 0 ) THEN
29911
29912 IF ( l_dlvr_action_enabled = 'Y') THEN
29913
29914 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
29915 ( p_api_version => p_api_version
29916 , p_init_msg_list => FND_API.G_FALSE
29917 , p_commit => FND_API.G_FALSE
29918 , p_validate_only => FND_API.G_FALSE
29919 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
29920 , p_calling_module => 'AMG'
29921 , p_debug_mode => p_debug_mode
29922 , p_insert_or_update => 'INSERT'
29923 , p_action_in_tbl => l_action_in_tbl
29924 , x_action_out_tbl => x_action_out_tbl
29925 , x_return_status => x_return_status
29926 , x_msg_count => x_msg_count
29927 , x_msg_data => x_msg_data);
29928
29929 IF p_debug_mode = 'Y' THEN
29930 pa_debug.g_err_stage := 'Returned after Create actions for ['|| i_actn ||'] action return['||x_return_status||']';
29931 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29932 END IF;
29933
29934 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
29935 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29936 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
29937 RAISE FND_API.G_EXC_ERROR;
29938 END IF;
29939
29940 ELSE --l_dlvr_action_enabled <> 'Y'
29941
29942 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
29943 l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
29944 PA_UTILS.ADD_MESSAGE
29945 (p_app_short_name => 'PA',
29946 p_msg_name => 'PA_DLVR_VALID_ERR',
29947 p_token1 => 'PROJECT',
29948 p_value1 => l_project_number,
29949 p_token2 => 'TASK',
29950 p_value2 => l_task_number,
29951 p_token3 => 'DLVR_REFERENCE',
29952 p_value3 => p_pm_deliverable_reference,
29953 p_token4 => 'MESSAGE',
29954 p_value4 => l_err_message
29955 );
29956 END IF;
29957
29958 x_return_status := FND_API.G_RET_STS_ERROR;
29959 RAISE FND_API.G_EXC_ERROR;
29960 END IF; -- l_dlvr_action_enabled = 'Y'
29961
29962 END IF; --i_actn > 0
29963
29964 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
29965 IF (p_commit = FND_API.G_TRUE) THEN
29966 COMMIT;
29967 END IF;
29968
29969 IF p_debug_mode = 'Y' THEN
29970 pa_debug.reset_curr_function;
29971 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
29972 END IF;
29973
29974 EXCEPTION
29975 WHEN FND_API.G_EXC_ERROR THEN
29976 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
29977 --IF (p_commit = FND_API.G_TRUE) THEN
29978 ROLLBACK TO CREATE_DELIVERABLE_PUB;
29979 --END IF;
29980
29981 IF p_debug_mode = 'Y' THEN
29982 pa_debug.reset_curr_function;
29983 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
29984 END IF;
29985 x_return_status := FND_API.G_RET_STS_ERROR;
29986 x_msg_count := FND_MSG_PUB.count_msg;
29987
29988 IF x_msg_count = 1 THEN
29989 PA_INTERFACE_UTILS_PUB.get_messages
29990 (p_encoded => FND_API.G_FALSE,
29991 p_msg_index => 1,
29992 p_msg_count => x_msg_count,
29993 p_msg_data => x_msg_data,
29994 p_data => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
29995 p_msg_index_out => l_msg_index_out);
29996 x_msg_data := l_data ; -- 4537865
29997 END IF;
29998
29999 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
30000 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
30001 --IF (p_commit = FND_API.G_TRUE) THEN
30002 ROLLBACK TO CREATE_DELIVERABLE_PUB;
30003 --END IF;
30004
30005 IF p_debug_mode = 'Y' THEN
30006 pa_debug.reset_curr_function;
30007 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
30008 END IF;
30009 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30010 x_msg_count := FND_MSG_PUB.count_msg;
30011
30012 IF x_msg_count = 1 THEN
30013 PA_INTERFACE_UTILS_PUB.get_messages
30014 (p_encoded => FND_API.G_FALSE,
30015 p_msg_index => 1,
30016 p_msg_count => x_msg_count,
30017 p_msg_data => x_msg_data,
30018 p_data => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
30019 p_msg_index_out => l_msg_index_out);
30020 x_msg_data := l_data ; -- 4537865
30021 END IF;
30022
30023 WHEN OTHERS THEN
30024 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
30025 --IF (p_commit = FND_API.G_TRUE) THEN
30026 ROLLBACK TO CREATE_DELIVERABLE_PUB;
30027 --END IF;
30028
30029 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30030 x_msg_count := 1;
30031 x_msg_data := SQLERRM;
30032
30033 IF p_debug_mode = 'Y' THEN
30034 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
30035 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
30036 pa_debug.reset_curr_function;
30037 END IF;
30038
30039 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
30040 FND_MSG_PUB.add_exc_msg
30041 ( p_pkg_name => G_PKG_NAME
30042 , p_procedure_name => l_api_name );
30043 END IF;
30044 END create_deliverable;
30045
30046 PROCEDURE create_deliverable_action
30047 ( p_api_version IN NUMBER := 1.0
30048 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
30049 , p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
30050 , p_commit IN VARCHAR2 := FND_API.G_FALSE
30051 , p_action_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30052 , p_action_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30053 , p_function_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30054 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30055 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30056 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30057 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30058 , p_pm_action_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30059 -- for bug# 3729250
30060 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30061 , p_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30062 , p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30063 -- added for bug# 3729250
30064 , p_pm_proj_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30065 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30066 -- added for bug# 3729250
30067 , p_financial_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30068 , p_financial_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30069 , p_destination_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30070 , p_receiving_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30071 , p_receiving_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30072 , p_po_need_by_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30073 , p_vendor_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30074 , p_vendor_site_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30075 -- , p_project_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30076 , p_Quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30077 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30078 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30079 , p_exchange_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30080 , p_exchange_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30081 , p_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30082 , p_expenditure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30083 , p_expenditure_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30084 , p_expenditure_item_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30085 , p_requisition_line_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30086 , p_category_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30087 , p_ready_to_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30088 , p_initiate_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30089 , p_ship_from_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30090 , p_ship_from_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30091 , p_ship_to_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30092 , p_ship_to_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30093 , p_demand_schedule IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30094 , p_expected_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30095 , p_promised_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30096 , p_volume IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30097 , p_volume_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30098 , p_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30099 , p_weight_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30100 , p_ready_to_ship_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30101 , p_initiate_planning_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30102 , p_initiate_shipping_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30103 , p_event_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30104 , p_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3749462 changed datatype
30105 , p_invoice_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30106 , p_revenue_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30107 , p_event_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30108 , p_event_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30109 , p_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30110 , p_bill_hold_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30111 , p_project_functional_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30112 , p_project_functional_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30113 , p_project_functional_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30114 , p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30115 , p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30116 , p_project_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30117 , p_funding_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30118 , p_funding_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30119 , p_funding_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30120 , p_pm_event_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
30121 , x_action_out OUT NOCOPY action_out_tbl_type
30122 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30123 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
30124 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30125 )
30126 IS
30127
30128 -- 3749462 changed the cursor, added two parameters and using it
30129 Cursor C_dlvr_type(l_project_id NUMBER, l_deliverable_id NUMBER) IS
30130 SELECT type_id
30131 FROM PA_PROJ_ELEMENTS
30132 WHERE proj_element_id = l_deliverable_id
30133 AND project_id = l_project_id
30134 AND OBJECT_TYPE = 'PA_DELIVERABLES';
30135
30136 l_api_name CONSTANT VARCHAR2(30) := 'create_deliverable_actions';
30137
30138 l_action_in_tbl action_in_tbl_type ;
30139 l_action_out_tbl action_out_tbl_type ;
30140
30141 l_project_id NUMBER;
30142 l_task_id NUMBER;
30143 l_project_number Pa_Projects_All.Segment1%TYPE;
30144 l_task_number Pa_Proj_Elements.Name%TYPE;
30145 l_dlvr_type_id Pa_Proj_Elements.type_id%TYPE;
30146
30147 l_dlvr_prg_enabled VARCHAR2(1) := NULL;
30148 l_dlvr_action_enabled VARCHAR2(1) := NULL;
30149 l_status_code PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
30150
30151 l_msg_index_out NUMBER;
30152 l_msg_count NUMBER ;
30153 l_data VARCHAR2(2000);
30154 l_msg_data VARCHAR2(2000);
30155 l_err_message VARCHAR2(2000);
30156 l_unique_flag VARCHAR2(1);
30157
30158 l_function_allowed VARCHAR2(1);
30159 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
30160
30161 l_deliverable_id NUMBER := 0;
30162
30163 i NUMBER := 1;
30164
30165 -- 3729250 added local variables
30166 l_fin_task_id NUMBER := NULL;
30167
30168 BEGIN
30169
30170 -- Standard begin of API savepoint
30171
30172 -- 3735792, setting save point unconditionally
30173 -- IF (p_commit = FND_API.G_TRUE) THEN
30174 SAVEPOINT create_deliverable_actions_pub;
30175 -- END IF;
30176
30177 -- Standard call to check for call compatibility.
30178 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
30179 p_api_version ,
30180 l_api_name ,
30181 G_PKG_NAME )
30182 THEN
30183 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30184 END IF;
30185
30186 -- Initialize the message table if requested.
30187 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
30188 FND_MSG_PUB.initialize;
30189 END IF;
30190
30191 IF p_debug_mode = 'Y' THEN
30192 PA_DEBUG.set_curr_function( p_function => l_api_name,
30193 p_debug_mode => p_debug_mode );
30194 pa_debug.g_err_stage:= 'Inside '||l_api_name;
30195 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
30196 END IF;
30197
30198 -- Set API return status to success
30199 x_return_status := FND_API.G_RET_STS_SUCCESS;
30200
30201 -- Function Security Check
30202 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
30203 (p_api_version_number => p_api_version,
30204 p_responsibility_id => l_resp_id,
30205 p_function_name => 'PA_DELIVERABLE_EDIT',
30206 p_msg_count => x_msg_count,
30207 p_msg_data => x_msg_data,
30208 p_return_status => x_return_status,
30209 p_function_allowed => l_function_allowed);
30210
30211 IF p_debug_mode = 'Y' THEN
30212 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
30213 END IF;
30214
30215 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30216 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30217 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30218 RAISE FND_API.G_EXC_ERROR;
30219 END IF;
30220
30221 IF l_function_allowed = 'N' THEN
30222 pa_interface_utils_pub.map_new_amg_msg
30223 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
30224 ,p_msg_attribute => 'CHANGE'
30225 ,p_resize_flag => 'Y'
30226 ,p_msg_context => 'GENERAL'
30227 ,p_attribute1 => ''
30228 ,p_attribute2 => ''
30229 ,p_attribute3 => ''
30230 ,p_attribute4 => ''
30231 ,p_attribute5 => '');
30232
30233 x_return_status := FND_API.G_RET_STS_ERROR;
30234 RAISE FND_API.G_EXC_ERROR;
30235 END IF;
30236
30237 -- validate the input parameters.
30238 PA_PROJECT_PVT.Convert_pm_projref_to_id (
30239 p_pm_project_reference => p_pm_proj_reference -- 3729250 , earlier was passed as null
30240 , p_pa_project_id => p_project_id
30241 , p_out_project_id => l_project_id
30242 , p_return_status => x_return_status
30243 );
30244
30245 IF p_debug_mode = 'Y' THEN
30246 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
30247 END IF;
30248
30249 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30250 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30251 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30252 RAISE FND_API.G_EXC_ERROR;
30253 END IF;
30254
30255 -- Validate Deliverable reference / ID
30256 PA_Deliverable_Utils.Convert_pm_dlvrref_to_id(
30257 p_deliverable_reference => p_deliverable_reference
30258 , p_deliverable_id => p_deliverable_id
30259 , p_project_id => l_project_id
30260 , p_out_deliverable_id => l_deliverable_id
30261 , p_return_status => x_return_status);
30262
30263 IF p_debug_mode = 'Y' THEN
30264 pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID ['||l_deliverable_id||'] Return Status ['||x_return_status||']',3) ;
30265 END IF;
30266
30267 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30268 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30269 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30270 RAISE FND_API.G_EXC_ERROR;
30271 END IF;
30272
30273 -- 3729250, Validate Financial Task Reference / ID
30274 -- PA_PROJECT_PVT.Convert_pm_taskref_to_id_all should only be called if either p_financial_task_id or
30275 -- p_financial_task_reference is passed
30276
30277 IF ( ( p_financial_task_id IS NOT NULL AND p_financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
30278 ( p_financial_task_reference IS NOT NULL AND p_financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) THEN
30279
30280 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
30281 p_pa_project_id => l_project_id
30282 , p_structure_type => 'FINANCIAL'
30283 , p_pa_task_id => p_financial_task_id
30284 , p_pm_task_reference => p_financial_task_reference
30285 , p_out_task_id => l_fin_task_id
30286 , p_return_status => x_return_status );
30287
30288 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30289 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30290 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30291 RAISE FND_API.G_EXC_ERROR;
30292 END IF;
30293
30294 END IF;
30295
30296 -- Validate Action reference - not null, unique
30297 pa_deliverable_utils.is_action_reference_unique (
30298 p_action_reference => p_pm_action_reference
30299 , p_deliverable_id => l_deliverable_id
30300 , p_project_id => l_project_id
30301 , x_unique_flag => l_unique_flag
30302 , x_return_status => x_return_status
30303 );
30304
30305 IF p_debug_mode = 'Y' THEN
30306 pa_debug.write(g_pkg_name,'Action Reference Unique Return Status ['||x_return_status||']Unique['||l_unique_flag||']',3) ;
30307 END IF;
30308
30309 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30310 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30311 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30312 RAISE FND_API.G_EXC_ERROR;
30313 END IF;
30314
30315 -- Derive the dlvr_Type of a deliverable
30316 -- 3749462 passing l_project_id and l_deliverable_id to cursor
30317 -- earlier p_project_id and p_deliverable_id was used directly, which may be G_PA_MISS_NUM and
30318 -- cursor will return l_dlvr_type_id as NULL
30319
30320 OPEN C_dlvr_type(l_project_id,l_deliverable_id);
30321 FETCH C_dlvr_Type INTO l_dlvr_type_id;
30322 CLOSE C_dlvr_type;
30323
30324 -- Will create actions only when deliverable type of deliverable
30325 -- has action creation enabled.
30326
30327 Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
30328 (
30329 p_dlvr_type_id => l_dlvr_type_id
30330 ,x_dlvr_prg_enabled => l_dlvr_prg_enabled
30331 ,x_dlvr_action_enabled => l_dlvr_action_enabled
30332 ,x_dlvr_default_status_code => l_status_code
30333 );
30334
30335 IF p_debug_mode = 'Y' THEN
30336 pa_debug.g_err_stage := 'Dlvr Type allow action creation ['|| l_dlvr_action_enabled||']';
30337 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30338 END IF;
30339
30340 -- Populate the table with input parameters
30341 ---- --dbms_output.put_line('loading');
30342
30343 IF ( i IS NOT NULL ) THEN
30344
30345 IF (l_dlvr_action_enabled = 'Y') THEN
30346
30347 l_action_in_tbl(i).action_name := p_action_name ;
30348 l_action_in_tbl(i).action_owner_id := p_action_owner_id ;
30349 l_action_in_tbl(i).function_code := p_function_code ;
30350 l_action_in_tbl(i).due_date := p_due_date ;
30351 l_action_in_tbl(i).description := p_description ;
30352 l_action_in_tbl(i).completion_date := p_completion_date ;
30353 l_action_in_tbl(i).pm_source_code := p_pm_source_code ;
30354 l_action_in_tbl(i).pm_action_reference := p_pm_action_reference ;
30355 -- for bug# 3729250
30356 -- l_action_in_tbl(i).carrying_out_org_id := p_carrying_out_org_id ;
30357 l_action_in_tbl(i).pm_deliverable_reference := p_deliverable_reference ;
30358 l_action_in_tbl(i).deliverable_id := l_deliverable_id ; -- 3749462 earlier p_deliverable_id was passed
30359 l_action_in_tbl(i).financial_task_id := l_fin_task_id ; -- for bug# 3729250
30360 l_action_in_tbl(i).destination_type_code := p_destination_type_code ;
30361 l_action_in_tbl(i).receiving_org_id := p_receiving_org_id ;
30362 l_action_in_tbl(i).receiving_location_id := p_receiving_location_id ;
30363 l_action_in_tbl(i).po_need_by_date := p_po_need_by_date ;
30364 l_action_in_tbl(i).vendor_id := p_vendor_id ;
30365 l_action_in_tbl(i).vendor_site_code := p_vendor_site_code ;
30366 l_action_in_tbl(i).Quantity := p_Quantity ;
30367 l_action_in_tbl(i).uom_code := p_uom_code ;
30368 l_action_in_tbl(i).unit_price := p_unit_price ;
30369 l_action_in_tbl(i).exchange_rate_type := p_exchange_rate_type ;
30370 l_action_in_tbl(i).exchange_rate_date := p_exchange_rate_date ;
30371 l_action_in_tbl(i).exchange_rate := p_exchange_rate ;
30372 l_action_in_tbl(i).expenditure_type := p_expenditure_type ;
30373 l_action_in_tbl(i).expenditure_org_id := p_expenditure_org_id ;
30374 l_action_in_tbl(i).expenditure_item_date := p_expenditure_item_date ;
30375 l_action_in_tbl(i).requisition_line_type_id := p_requisition_line_type_id ;
30376 l_action_in_tbl(i).category_id := p_category_id ;
30377 l_action_in_tbl(i).ready_to_procure_flag := p_ready_to_procure_flag ;
30378 l_action_in_tbl(i).initiate_procure_flag := p_initiate_procure_flag ;
30379 l_action_in_tbl(i).ship_from_organization_id := p_ship_from_organization_id ;
30380 l_action_in_tbl(i).ship_from_location_id := p_ship_from_location_id ;
30381 l_action_in_tbl(i).ship_to_organization_id := p_ship_to_organization_id ;
30382 l_action_in_tbl(i).ship_to_location_id := p_ship_to_location_id ;
30383 l_action_in_tbl(i).demand_schedule := p_demand_schedule ;
30384 l_action_in_tbl(i).expected_shipment_date := p_expected_shipment_date ;
30385 l_action_in_tbl(i).promised_shipment_date := p_promised_shipment_date ;
30386 l_action_in_tbl(i).volume := p_volume ;
30387 l_action_in_tbl(i).volume_uom := p_volume_uom ;
30388 l_action_in_tbl(i).weight := p_weight ;
30389 l_action_in_tbl(i).weight_uom := p_weight_uom ;
30390 l_action_in_tbl(i).ready_to_ship_flag := p_ready_to_ship_flag ;
30391 l_action_in_tbl(i).initiate_planning_flag := p_initiate_planning_flag ;
30392 l_action_in_tbl(i).initiate_shipping_flag := p_initiate_shipping_flag ;
30393 l_action_in_tbl(i).event_type := p_event_type ;
30394 l_action_in_tbl(i).currency := p_currency ;
30395 l_action_in_tbl(i).invoice_amount := p_invoice_amount ;
30396 l_action_in_tbl(i).revenue_amount := p_revenue_amount ;
30397 l_action_in_tbl(i).event_date := p_event_date ;
30398 l_action_in_tbl(i).event_number := p_event_number ;
30399 l_action_in_tbl(i).organization_id := p_organization_id ;
30400 l_action_in_tbl(i).bill_hold_flag := p_bill_hold_flag ;
30401 l_action_in_tbl(i).project_functional_rate_type:= p_project_functional_rate_type;
30402 l_action_in_tbl(i).project_functional_rate_date:= p_project_functional_rate_date;
30403 l_action_in_tbl(i).project_functional_rate := p_project_functional_rate ;
30404 l_action_in_tbl(i).project_rate_type := p_project_rate_type ;
30405 l_action_in_tbl(i).project_rate_date := p_project_rate_date ;
30406 l_action_in_tbl(i).project_rate := p_project_rate ;
30407 l_action_in_tbl(i).funding_rate_type := p_funding_rate_type ;
30408 l_action_in_tbl(i).funding_rate_date := p_funding_rate_date ;
30409 l_action_in_tbl(i).funding_rate := p_funding_rate ;
30410 l_action_in_tbl(i).pm_event_reference := p_pm_event_reference ; -- 3651489 added parameter
30411
30412
30413 ELSE --l_dlvr_action_enabled <> 'Y'
30414
30415 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
30416 l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
30417 PA_UTILS.ADD_MESSAGE
30418 (p_app_short_name => 'PA',
30419 p_msg_name => 'PA_DLVR_VALID_ERR',
30420 p_token1 => 'PROJECT',
30421 p_value1 => l_project_number,
30422 p_token2 => 'TASK',
30423 p_value2 => l_task_number,
30424 p_token3 => 'DLVR_REFERENCE',
30425 p_value3 => p_deliverable_reference,
30426 p_token4 => 'MESSAGE',
30427 p_value4 => l_err_message
30428 );
30429 END IF;
30430 x_return_status := FND_API.G_RET_STS_ERROR;
30431 RAISE FND_API.G_EXC_ERROR;
30432
30433 END IF; -- l_dlvr_action_enabled = 'Y'
30434 END IF;
30435
30436 -- Call api to create actions passing the newly populated plsql table
30437 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
30438 ( p_api_version => p_api_version
30439 , p_init_msg_list => FND_API.G_FALSE
30440 , p_commit => FND_API.G_FALSE
30441 , p_validate_only => FND_API.G_FALSE
30442 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
30443 , p_calling_module => 'AMG'
30444 , p_debug_mode => p_debug_mode
30445 , p_insert_or_update => 'INSERT'
30446 , p_action_in_tbl => l_action_in_tbl
30447 , x_action_out_tbl => l_action_out_tbl
30448 , x_return_status => x_return_status
30449 , x_msg_count => l_msg_count
30450 , x_msg_data => l_msg_data);
30451
30452 IF p_debug_mode = 'Y' THEN
30453 pa_debug.g_err_stage := 'Returned from Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper ['|| x_return_status||']';
30454 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30455 END IF;
30456
30457 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30458 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30459 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30460 RAISE FND_API.G_EXC_ERROR;
30461 END IF; i := l_action_out_tbl.first();
30462
30463 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
30464 IF (p_commit = FND_API.G_TRUE) THEN
30465 COMMIT;
30466 END IF;
30467
30468 IF p_debug_mode = 'Y' THEN
30469 pa_debug.reset_curr_function;
30470 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
30471 END IF;
30472
30473 EXCEPTION
30474 WHEN FND_API.G_EXC_ERROR THEN
30475 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
30476 -- IF (p_commit = FND_API.G_TRUE) THEN
30477 ROLLBACK TO create_deliverable_actions_pub;
30478 -- END IF;
30479
30480 x_return_status := FND_API.G_RET_STS_ERROR;
30481 l_msg_count := FND_MSG_PUB.count_msg;
30482
30483 IF l_msg_count = 1 AND x_msg_data IS NULL
30484 THEN
30485 PA_INTERFACE_UTILS_PUB.get_messages
30486 (p_encoded => FND_API.G_FALSE,
30487 p_msg_index => 1,
30488 p_msg_count => x_msg_count,
30489 p_msg_data => l_msg_data,
30490 p_data => l_data,
30491 p_msg_index_out => l_msg_index_out);
30492
30493 x_msg_data := l_data;
30494 x_msg_count := l_msg_count;
30495 ELSE
30496 x_msg_count := l_msg_count;
30497
30498 END IF;
30499
30500 IF p_debug_mode = 'Y' THEN
30501 pa_debug.reset_curr_function;
30502 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
30503 END IF;
30504
30505 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
30506 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
30507 --IF (p_commit = FND_API.G_TRUE) THEN
30508 ROLLBACK TO create_deliverable_actions_pub;
30509 --END IF;
30510
30511 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30512 l_msg_count := FND_MSG_PUB.count_msg;
30513
30514 IF l_msg_count = 1 AND x_msg_data IS NULL
30515 THEN
30516 PA_INTERFACE_UTILS_PUB.get_messages
30517 (p_encoded => FND_API.G_FALSE,
30518 p_msg_index => 1,
30519 p_msg_count => x_msg_count,
30520 p_msg_data => l_msg_data,
30521 p_data => l_data,
30522 p_msg_index_out => l_msg_index_out);
30523
30524 x_msg_data := l_data;
30525 x_msg_count := l_msg_count;
30526 ELSE
30527 x_msg_count := l_msg_count;
30528
30529 END IF;
30530
30531 IF p_debug_mode = 'Y' THEN
30532 pa_debug.reset_curr_function;
30533 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
30534 END IF;
30535
30536 WHEN OTHERS THEN
30537 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
30538 --IF (p_commit = FND_API.G_TRUE) THEN
30539 ROLLBACK TO create_deliverable_actions_pub;
30540 --END IF;
30541
30542 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30543 x_msg_count := 1;
30544 x_msg_data := SQLERRM;
30545
30546 IF p_debug_mode = 'Y' THEN
30547 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
30548 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
30549 pa_debug.reset_curr_function;
30550 END IF;
30551
30552
30553 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
30554 FND_MSG_PUB.add_exc_msg
30555 ( p_pkg_name => G_PKG_NAME
30556 , p_procedure_name => l_api_name );
30557 END IF;
30558 END create_deliverable_action;
30559
30560 --------------------------------------------------------------------------------
30561 --Name: Update_Deliverable
30562 --Type: Procedure
30563 --Description: This procedure updates a deliverable and its related actions
30564 -- which are passed through actions PLSQL table
30565 --
30566 --Called subprograms: PA_DELIVERABLE_PUB.UPDATE_DELIVERABLE
30567 -- Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
30568 --
30569 --
30570 --
30571 --History:
30572 -- 08-Mar-2004 Puneet Created
30573 --
30574
30575 PROCEDURE update_deliverable
30576 ( p_api_version IN NUMBER := 1.0
30577 , p_init_msg_list IN VARCHAR2 := 'F'
30578 , p_commit IN VARCHAR2 := FND_API.G_FALSE
30579 , p_debug_mode IN VARCHAR2 := 'N'
30580 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30581 , p_deliverable_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30582 , p_deliverable_short_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30583 , p_deliverable_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30584 , p_deliverable_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30585 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30586 , p_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30587 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30588 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30589 , p_progress_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30590 , px_deliverable_id IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
30591 , p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30592 -- for bug# 3729250
30593 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30594 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30595 , p_task_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30596 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30597 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30598 , p_action_in_tbl IN action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
30599 , x_action_out_tbl OUT NOCOPY action_out_tbl_type /*Added the nocopy check for 4537865 */
30600 , p_item_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30601 , P_inventory_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30602 , p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30603 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30604 -- for bug# 3729250
30605 -- , p_item_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30606 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30607 -- for bug# 3729250
30608 , p_unit_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30609 , p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30610 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR /* Bug no. 3651113 */
30611 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
30612 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30613 )
30614
30615 IS
30616 l_project_id NUMBER;
30617 l_task_id NUMBER;
30618 l_task_source_reference VARCHAR2(240);
30619 l_msg_count NUMBER;
30620 l_msg_data VARCHAR2(2000);
30621 l_msg_index_out NUMBER;
30622 l_data VARCHAR2(2000);
30623
30624
30625 l_deliverable_id NUMBER;
30626 l_action_id NUMBER;
30627 l_deliverable_version_id NUMBER;
30628
30629 l_action_in_tbl_ins action_in_tbl_type;
30630 l_action_in_tbl_upd action_in_tbl_type;
30631
30632 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_DELIVERABLE';
30633
30634 i NUMBER := 0;
30635 i_actn NUMBER := 0;
30636 i_actn_ins NUMBER := 0;
30637 i_actn_upd NUMBER := 0;
30638
30639 l_function_allowed VARCHAR2(1);
30640 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
30641 l_pm_product_code VARCHAR2(2) :='Z'; /* Bug 3651113 */
30642
30643 /*cursor added for Bug 3651113 */
30644 Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
30645 Is
30646 Select 'X'
30647 from pa_lookups
30648 where lookup_type='PM_PRODUCT_CODE'
30649 and lookup_code = p_pm_product_code;
30650
30651 Cursor C_vers (p_proj_element_id NUMBER) IS
30652 SELECT vers.element_version_id
30653 FROM pa_proj_element_versions vers
30654 , pa_proj_elements elem
30655 WHERE vers.proj_element_id = elem.proj_element_id
30656 AND elem.project_id = vers.project_id
30657 AND elem.proj_element_id = p_proj_element_id
30658 AND elem.project_id = vers.project_id
30659 AND elem.object_type = 'PA_DELIVERABLES';
30660
30661 l_dlvr_id NUMBER; -- added for bug# 3749447
30662
30663 BEGIN
30664 -- Initialize the message table if requested.
30665 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
30666 FND_MSG_PUB.initialize;
30667 END IF;
30668 ---- --dbms_output.put_line('entering pa_project_pub.Update_deliverable['||p_project_id||']['||p_task_id||']');
30669
30670 -- 3735792, setting save point unconditionally
30671 --IF (p_commit = FND_API.G_TRUE) THEN
30672 savepoint UPDATE_DELIVERABLE_PUB;
30673 --END IF;
30674
30675 IF p_debug_mode = 'Y' THEN
30676 PA_DEBUG.set_curr_function( p_function => l_api_name,
30677 p_debug_mode => p_debug_mode );
30678 pa_debug.g_err_stage:= 'Inside '||l_api_name;
30679 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
30680 END IF;
30681
30682 -- Validation check for product code : Bug 3651113
30683
30684 OPEN p_product_code_csr (p_pm_source_code);
30685 FETCH p_product_code_csr INTO l_pm_product_code;
30686 CLOSE p_product_code_csr;
30687
30688 IF l_pm_product_code <> 'X'
30689 AND p_pm_source_code <> 'WORKPLAN'
30690 THEN
30691 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
30692 THEN
30693 pa_interface_utils_pub.map_new_amg_msg
30694 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
30695 ,p_msg_attribute => 'CHANGE'
30696 ,p_resize_flag => 'N'
30697 ,p_msg_context => 'GENERAL'
30698 ,p_attribute1 => ''
30699 ,p_attribute2 => ''
30700 ,p_attribute3 => ''
30701 ,p_attribute4 => ''
30702 ,p_attribute5 => '');
30703 END IF;
30704 x_return_status := FND_API.G_RET_STS_ERROR;
30705 RAISE FND_API.G_EXC_ERROR;
30706 END IF;
30707
30708 -- Set API return status to success
30709 x_return_status := FND_API.G_RET_STS_SUCCESS;
30710
30711 IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
30712 l_task_id := NULL;
30713 ELSE
30714 l_task_id := p_task_id;
30715 END IF;
30716
30717 IF p_task_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
30718 l_task_source_reference := NULL;
30719 ELSE
30720 l_task_source_reference := p_task_source_reference;
30721 END IF;
30722
30723 -- Function Security Check
30724 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
30725 (p_api_version_number => p_api_version,
30726 p_responsibility_id => l_resp_id,
30727 p_function_name => 'PA_DELIVERABLE_EDIT',
30728 p_msg_count => x_msg_count,
30729 p_msg_data => x_msg_data,
30730 p_return_status => x_return_status,
30731 p_function_allowed => l_function_allowed);
30732
30733 IF p_debug_mode = 'Y' THEN
30734 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
30735 END IF;
30736
30737 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30738 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30739 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30740 RAISE FND_API.G_EXC_ERROR;
30741 END IF;
30742
30743 IF l_function_allowed = 'N' THEN
30744 pa_interface_utils_pub.map_new_amg_msg
30745 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
30746 ,p_msg_attribute => 'CHANGE'
30747 ,p_resize_flag => 'Y'
30748 ,p_msg_context => 'GENERAL'
30749 ,p_attribute1 => ''
30750 ,p_attribute2 => ''
30751 ,p_attribute3 => ''
30752 ,p_attribute4 => ''
30753 ,p_attribute5 => '');
30754
30755 x_return_status := FND_API.G_RET_STS_ERROR;
30756 RAISE FND_API.G_EXC_ERROR;
30757 END IF;
30758
30759 -- validate the input parameters.
30760 -- Get the task and Project details based on source reference passed
30761 PA_PROJECT_PVT.Convert_pm_projref_to_id (
30762 p_pm_project_reference => p_proj_source_reference
30763 , p_pa_project_id => p_project_id
30764 , p_out_project_id => l_project_id
30765 , p_return_status => x_return_status
30766 );
30767
30768 IF p_debug_mode = 'Y' THEN
30769 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
30770 END IF;
30771
30772 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30773 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30774 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30775 RAISE FND_API.G_EXC_ERROR;
30776 END IF;
30777
30778 -- 3749447 Changed from p_task_id to l_task_id in if conditon
30779 -- also did the same change in below api's parameter passing
30780
30781 IF ( l_task_id IS NOT NULL OR l_task_source_reference IS NOT NULL ) THEN
30782 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
30783 p_pa_project_id => l_project_id
30784 , p_structure_type => 'WORKPLAN'
30785 , p_pa_task_id => l_task_id
30786 , p_pm_task_reference => l_task_source_reference
30787 , p_out_task_id => l_task_id
30788 , p_return_status => x_return_status );
30789
30790 IF p_debug_mode = 'Y' THEN
30791 pa_debug.write(g_pkg_name,'Task Ref to ID Return Status ['||x_return_status||']Task ID['||l_task_id||']',3) ;
30792 END IF;
30793
30794 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30795 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30796 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30797 RAISE FND_API.G_EXC_ERROR;
30798 END IF;
30799 END IF;
30800
30801 -- Validate Deliverable reference / id- not null, unique
30802 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
30803 ( p_deliverable_reference => p_pm_deliverable_reference
30804 , p_deliverable_id => px_deliverable_id
30805 , p_project_id => l_project_id
30806 , p_out_deliverable_id => l_deliverable_id
30807 , p_return_status => x_return_status
30808 );
30809
30810 IF p_debug_mode = 'Y' THEN
30811 pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID ['||l_deliverable_id||'] Return Status ['||x_return_status||']',3) ;
30812 END IF;
30813
30814 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30815 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30816 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30817 RAISE FND_API.G_EXC_ERROR;
30818 END IF;
30819
30820 OPEN C_vers(l_deliverable_id);
30821 FETCH C_vers INTO l_deliverable_version_id;
30822 CLOSE C_vers;
30823
30824 IF p_debug_mode = 'Y' THEN
30825 pa_debug.write(g_pkg_name,'Updatinging deliverable ['|| p_deliverable_short_name||']['||l_deliverable_id||']['||l_project_id||']['||l_task_id||']',3);
30826 END IF;
30827
30828 -- All other validations done in PA_DELIVERABLE_PUB.UPDATE_DELIVERABLE
30829 --invoke the api to Update deliverable
30830
30831 Pa_Deliverable_Pub.Update_Deliverable
30832 ( p_api_version => p_api_version
30833 , p_init_msg_list => p_init_msg_list
30834 -- 3735792, passing p_commit as false to next level api calls
30835 , p_commit => FND_API.G_FALSE
30836 , p_validate_only => FND_API.G_FALSE
30837 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
30838 , p_calling_module => 'AMG'
30839 , p_debug_mode => p_debug_mode
30840 , p_max_msg_count => NULL
30841 , p_record_version_number => null
30842 , p_object_type => 'PA_DELIVERABLES'
30843 , p_project_id => l_project_id
30844 , p_dlvr_number => p_deliverable_short_name
30845 , p_dlvr_name => p_deliverable_name
30846 , p_dlvr_description => p_description
30847 , p_dlvr_owner_id => p_deliverable_owner_id
30848 , p_dlvr_owner_name => NULL
30849 -- for bug# 3729250
30850 -- , p_carrying_out_org_id => p_carrying_out_org_id
30851 , p_carrying_out_org_name => NULL
30852 , p_dlvr_version_id => l_deliverable_version_id --3733221
30853 , p_status_code => p_status_code
30854 , p_parent_structure_id => NULL
30855 , p_dlvr_type_id => p_deliverable_type_id
30856 , p_dlvr_type_name => NULL
30857 , p_progress_weight => p_progress_weight
30858 , p_scheduled_finish_date => p_due_date
30859 , p_actual_finish_date => p_completion_date
30860 , p_task_id => l_task_id
30861 , p_task_version_id => null
30862 , p_task_name => null
30863 , p_deliverable_reference => p_pm_deliverable_reference
30864 , p_item_id => p_item_id
30865 , p_inventory_org_id => p_inventory_org_id
30866 , p_quantity => p_quantity
30867 , p_uom_code => p_uom_code
30868 -- for bug# 3729250
30869 -- , p_item_description => p_item_description
30870 , p_unit_price => p_unit_price
30871 , p_unit_number => p_unit_number
30872 , p_currency_code => p_currency_code
30873 , p_dlvr_item_id => l_deliverable_id -- 3749447 changed from px_deliverable_id to l_deliverable_id
30874 , p_pm_source_code => p_pm_source_code -- 3749447 passing p_pm_source_code
30875 , x_return_status => x_return_status
30876 , x_msg_count => l_msg_count
30877 , x_msg_data => l_msg_data
30878 );
30879
30880 -- 3749447 assigning the derived deliverale id, this is required in the below case
30881 -- while calling update_deliverable, if user has passed only deliverable reference,
30882 -- after api execution, returned value for px_deliverable_id will be g_pa_miss_num
30883 px_deliverable_id := l_deliverable_id;
30884
30885 x_msg_count := l_msg_count;
30886 x_msg_data := l_msg_data;
30887
30888 IF p_debug_mode = 'Y' THEN
30889 pa_debug.g_err_stage := 'Pa_Deliverable_Pub.Update_Deliverable return status ['||x_return_status||']';
30890 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30891 END IF;
30892
30893 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30894 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30895 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30896 RAISE FND_API.G_EXC_ERROR;
30897 END IF;
30898
30899 -- From the action_in table, select the actions for the given deliverable.
30900 -- Based on action_reference / action_id identify if new action is to
30901 -- to be created or existing action is to be updated.
30902
30903 i := p_action_in_tbl.first();
30904
30905 -- added for bug# 3749447, added below code to handle following scenario
30906 -- if user has not passed deliverable id in action record , only deliverable reference is passed
30907 -- and for deliverable record not passed passed deliverable id
30908 -- in this case, passed action will not be considered for update or create
30909
30910 -- deriving deliverable id from deliverable reference
30911
30912 IF i IS NOT NULL THEN
30913 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
30914 ( p_deliverable_reference => p_action_in_tbl(i).pm_deliverable_reference
30915 , p_deliverable_id => p_action_in_tbl(i).deliverable_id
30916 , p_project_id => l_project_id
30917 , p_out_deliverable_id => l_dlvr_id
30918 , p_return_status => x_return_status
30919 );
30920
30921 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30922 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30923 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30924 RAISE FND_API.G_EXC_ERROR;
30925 END IF;
30926
30927 END IF;
30928
30929 WHILE (i IS NOT NULL ) LOOP
30930 IF ( p_pm_deliverable_reference = p_action_in_tbl(i).pm_deliverable_reference OR
30931 px_deliverable_id = l_dlvr_id ) THEN -- 3749447 using derived deliverable id instead of passed id, for above mentioned case
30932
30933 -- action is for current deliverable only
30934 IF (p_action_in_tbl(i).action_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
30935 p_action_in_tbl(i).action_id = NULL) THEN
30936 l_action_id := NULL;
30937 ELSE
30938 l_action_id := p_action_in_tbl(i).action_id;
30939 END IF;
30940
30941 i_actn := i_actn + 1;
30942
30943 -- added for bug# 3749447, added if condition to check for not null action id
30944 -- if action id not null, then and only then , action reference to id validation should be done
30945 -- in case of new action below validon will fail and will not allow user to create new actions from update_deliverable
30946
30947 IF l_action_id IS NOT NULL THEN
30948 Pa_Deliverable_Utils.Convert_pm_actionref_to_id (
30949 p_action_reference => p_action_in_tbl(i_actn).pm_action_reference
30950 ,p_action_id => l_action_id
30951 ,p_deliverable_id => l_deliverable_id
30952 ,p_project_id => l_Project_id
30953 ,p_out_action_id => l_action_id
30954 ,p_return_status => x_return_status
30955 );
30956 END IF;
30957
30958 IF p_debug_mode = 'Y' THEN
30959 pa_debug.write(g_pkg_name,'Dlvr Action Reference Valid Return Status ['||x_return_status||']Action ID['||l_action_id||']',3) ;
30960 END IF;
30961
30962 IF (l_action_id is NOT NULL) THEN
30963 -- action is an existing action and is to be updated
30964 i_actn_upd := i_actn_upd + 1 ;
30965 l_action_in_tbl_upd(i_actn_upd) := p_action_in_tbl(i);
30966
30967 -- added for bug# 3749447
30968 -- passing derived values of action id and deliverable id
30969 -- when ever deliverable and action reference is passed , update will not work
30970 l_action_in_tbl_upd(i_actn_upd).action_id := l_action_id;
30971 l_action_in_tbl_upd(i_actn_upd).deliverable_id := l_deliverable_id;
30972
30973 -- added for bug# 3749447
30974 -- if for action record , pm_source_code is not passed , use it from deliverable pm source code
30975 IF p_action_in_tbl(i).pm_source_code IS NOT NULL and p_action_in_tbl(i).pm_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
30976 l_action_in_tbl_upd(i_actn_upd).pm_source_code := p_pm_source_code;
30977 END IF;
30978
30979 ELSE
30980 -- New action is to be created.
30981 i_actn_ins := i_actn_ins + 1 ;
30982 l_action_in_tbl_ins(i_actn_ins) := p_action_in_tbl(i);
30983
30984 -- added for bug# 3749447
30985 -- passing derived values of action id and deliverable id
30986 -- when ever deliverable reference is passed , create will not work
30987 l_action_in_tbl_ins(i_actn_ins).deliverable_id := l_deliverable_id;
30988
30989 -- added for bug# 3749447
30990 -- if pm_source_code is not passed in action record, use it from deliverable record
30991
30992 IF p_action_in_tbl(i).pm_source_code IS NOT NULL and p_action_in_tbl(i).pm_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
30993 l_action_in_tbl_ins(i_actn_ins).pm_source_code := p_pm_source_code;
30994 END IF;
30995
30996 END IF; -- l_action_id is NULL
30997
30998 END IF; -- deliverable reference
30999 i := p_action_in_tbl.next(i); -- added for bug# 3749447, next was not done
31000 END LOOP;
31001
31002 IF p_debug_mode = 'Y' THEN
31003 pa_debug.write(g_pkg_name,'Uploaded action detail for Updation/Insertion upd ['||i_actn_upd||'] ins ['||i_actn_ins||'] tot ['||i_actn||']',3) ;
31004 END IF;
31005
31006 IF (i_actn_upd > 0 ) THEN
31007
31008 -- There are actions to be updated
31009 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31010 ( p_api_version => p_api_version
31011 , p_init_msg_list => FND_API.G_FALSE
31012 , p_commit => FND_API.G_FALSE
31013 , p_validate_only => FND_API.G_FALSE
31014 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
31015 , p_calling_module => 'AMG'
31016 , p_debug_mode => p_debug_mode
31017 , p_insert_or_update => 'UPDATE'
31018 , p_action_in_tbl => l_action_in_tbl_upd
31019 , x_action_out_tbl => x_action_out_tbl
31020 , x_return_status => x_return_status
31021 , x_msg_count => l_msg_count
31022 , x_msg_data => l_msg_data);
31023
31024 IF p_debug_mode = 'Y' THEN
31025 pa_debug.write(g_pkg_name,'Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper upd return status['||x_return_status||']',3) ;
31026 END IF;
31027
31028 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31029 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31030 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31031 RAISE FND_API.G_EXC_ERROR;
31032 END IF;
31033
31034 END IF; --i_actn_upd > 0
31035
31036 IF (i_actn_ins > 0 ) THEN
31037
31038 -- There are actions to be updated
31039 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31040 ( p_api_version => p_api_version
31041 , p_init_msg_list => FND_API.G_FALSE
31042 , p_commit => FND_API.G_FALSE
31043 , p_validate_only => FND_API.G_FALSE
31044 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
31045 , p_calling_module => 'AMG'
31046 , p_debug_mode => p_debug_mode
31047 , p_insert_or_update => 'INSERT'
31048 , p_action_in_tbl => l_action_in_tbl_ins
31049 , x_action_out_tbl => x_action_out_tbl
31050 , x_return_status => x_return_status
31051 , x_msg_count => l_msg_count
31052 , x_msg_data => l_msg_data);
31053
31054 IF p_debug_mode = 'Y' THEN
31055 pa_debug.write(g_pkg_name,'Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper upd return status['||x_return_status||']',3) ;
31056 END IF;
31057
31058 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31059 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31060 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31061 RAISE FND_API.G_EXC_ERROR;
31062 END IF;
31063
31064 END IF; --i_actn_upd > 0
31065
31066 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31067 IF (p_commit = FND_API.G_TRUE) THEN
31068 COMMIT;
31069 END IF;
31070
31071 IF p_debug_mode = 'Y' THEN
31072 pa_debug.reset_curr_function;
31073 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31074 END IF;
31075
31076 EXCEPTION
31077 WHEN FND_API.G_EXC_ERROR THEN
31078 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31079 --IF (p_commit = FND_API.G_TRUE) THEN
31080 ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31081 --END IF;
31082
31083 IF p_debug_mode = 'Y' THEN
31084 pa_debug.reset_curr_function;
31085 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31086 END IF;
31087 x_return_status := FND_API.G_RET_STS_ERROR;
31088 x_msg_count := FND_MSG_PUB.count_msg;
31089
31090 IF x_msg_count = 1 THEN
31091 PA_INTERFACE_UTILS_PUB.get_messages
31092 (p_encoded => FND_API.G_FALSE,
31093 p_msg_index => 1,
31094 p_msg_count => x_msg_count,
31095 p_msg_data => x_msg_data,
31096 p_data => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31097 p_msg_index_out => l_msg_index_out);
31098 x_msg_data := l_data ; -- 4537865
31099 END IF;
31100
31101 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
31102 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31103 --IF (p_commit = FND_API.G_TRUE) THEN
31104 ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31105 --END IF;
31106
31107 IF p_debug_mode = 'Y' THEN
31108 pa_debug.reset_curr_function;
31109 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31110 END IF;
31111 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31112 x_msg_count := FND_MSG_PUB.count_msg;
31113
31114 IF x_msg_count = 1 THEN
31115 PA_INTERFACE_UTILS_PUB.get_messages
31116 (p_encoded => FND_API.G_FALSE,
31117 p_msg_index => 1,
31118 p_msg_count => x_msg_count,
31119 p_msg_data => x_msg_data,
31120 p_data => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31121 p_msg_index_out => l_msg_index_out);
31122 x_msg_data := l_data ; -- 4537865
31123 END IF;
31124
31125 WHEN OTHERS THEN
31126 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31127 --IF (p_commit = FND_API.G_TRUE) THEN
31128 ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31129 --END IF;
31130
31131 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31132 x_msg_count := 1;
31133 x_msg_data := SQLERRM;
31134
31135 IF p_debug_mode = 'Y' THEN
31136 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31137 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31138 pa_debug.reset_curr_function;
31139 END IF;
31140
31141
31142 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
31143 FND_MSG_PUB.add_exc_msg
31144 ( p_pkg_name => G_PKG_NAME
31145 , p_procedure_name => l_api_name );
31146 END IF;
31147 END update_deliverable;
31148
31149
31150 PROCEDURE update_deliverable_action
31151 ( p_api_version IN NUMBER := 1.0
31152 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
31153 , p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
31154 , p_commit IN VARCHAR2 := FND_API.G_FALSE
31155 , p_action_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31156 , p_action_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31157 , p_function_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31158 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31159 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31160 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31161 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31162 , p_pm_action_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31163 -- added for bug# 3729250
31164 , p_action_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31165 -- for bug# 3729250
31166 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31167 , p_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31168 , p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31169 -- added for bug# 3729250
31170 , p_pm_proj_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31171 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31172 , p_financial_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31173 -- added for bug# 3729250
31174 , p_financial_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31175 , p_destination_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31176 , p_receiving_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31177 , p_receiving_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31178 , p_po_need_by_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31179 , p_vendor_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31180 , p_vendor_site_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31181 -- , p_project_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31182 , p_Quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31183 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31184 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31185 , p_exchange_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31186 , p_exchange_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31187 , p_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31188 , p_expenditure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31189 , p_expenditure_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31190 , p_expenditure_item_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31191 , p_requisition_line_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31192 , p_category_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31193 , p_ready_to_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31194 , p_initiate_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31195 , p_ship_from_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31196 , p_ship_from_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31197 , p_ship_to_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31198 , p_ship_to_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31199 , p_demand_schedule IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31200 , p_expected_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31201 , p_promised_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31202 , p_volume IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31203 , p_volume_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31204 , p_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31205 , p_weight_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31206 , p_ready_to_ship_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31207 , p_initiate_planning_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31208 , p_initiate_shipping_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31209 , p_event_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31210 , p_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3749474 changed data type
31211 , p_invoice_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31212 , p_revenue_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31213 , p_event_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31214 , p_event_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31215 , p_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31216 , p_bill_hold_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31217 , p_project_functional_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31218 , p_project_functional_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31219 , p_project_functional_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31220 , p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31221 , p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31222 , p_project_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31223 , p_funding_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31224 , p_funding_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31225 , p_funding_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31226 , p_pm_event_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
31227 , x_action_out OUT NOCOPY action_out_tbl_type
31228 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31229 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31230 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31231 )
31232 IS
31233 l_api_name CONSTANT VARCHAR2(30) := 'update_deliverable_actions';
31234
31235 l_action_in_tbl action_in_tbl_type ;
31236 l_action_out_tbl action_out_tbl_type ;
31237
31238 l_msg_count NUMBER := null;
31239 l_msg_data VARCHAR2(2000) := null;
31240 l_msg_index_out NUMBER;
31241 l_data VARCHAR2(2000);
31242
31243
31244 l_project_id NUMBER := null;
31245 l_deliverable_id NUMBER := null;
31246 l_function_allowed VARCHAR2(1);
31247 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31248
31249 -- 3729250 added local variables
31250 l_fin_task_id NUMBER := NULL;
31251 l_action_id NUMBER := NULL;
31252
31253 i NUMBER := 1;
31254 BEGIN
31255
31256 -- Standard begin of API savepoint
31257 SAVEPOINT update_deliverable_actions_pub;
31258
31259 -- Standard call to check for call compatibility.
31260 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
31261 p_api_version ,
31262 l_api_name ,
31263 G_PKG_NAME )
31264 THEN
31265 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31266 END IF;
31267
31268 -- Initialize the message table if requested.
31269 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
31270 FND_MSG_PUB.initialize;
31271 END IF;
31272
31273 IF p_debug_mode = 'Y' THEN
31274 PA_DEBUG.set_curr_function( p_function => l_api_name,
31275 p_debug_mode => p_debug_mode );
31276 pa_debug.g_err_stage:= 'Inside '||l_api_name;
31277 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31278 END IF;
31279 -- Set API return status to success
31280 x_return_status := FND_API.G_RET_STS_SUCCESS;
31281
31282 -- Function Security Check
31283 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31284 (p_api_version_number => p_api_version,
31285 p_responsibility_id => l_resp_id,
31286 p_function_name => 'PA_DELIVERABLE_EDIT',
31287 p_msg_count => x_msg_count,
31288 p_msg_data => x_msg_data,
31289 p_return_status => x_return_status,
31290 p_function_allowed => l_function_allowed);
31291
31292
31293 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31294 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31295 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31296 RAISE FND_API.G_EXC_ERROR;
31297 END IF;
31298
31299 IF l_function_allowed = 'N' THEN
31300 pa_interface_utils_pub.map_new_amg_msg
31301 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
31302 ,p_msg_attribute => 'CHANGE'
31303 ,p_resize_flag => 'Y'
31304 ,p_msg_context => 'GENERAL'
31305 ,p_attribute1 => ''
31306 ,p_attribute2 => ''
31307 ,p_attribute3 => ''
31308 ,p_attribute4 => ''
31309 ,p_attribute5 => '');
31310
31311 x_return_status := FND_API.G_RET_STS_ERROR;
31312 RAISE FND_API.G_EXC_ERROR;
31313 END IF;
31314
31315 -- validate the input parameters.
31316 -- Validate Project reference/id
31317 PA_PROJECT_PVT.Convert_pm_projref_to_id (
31318 p_pm_project_reference => p_pm_proj_reference -- 3729250, earlier was passed as null
31319 , p_pa_project_id => p_project_id
31320 , p_out_project_id => l_project_id
31321 , p_return_status => x_return_status
31322 );
31323
31324 IF p_debug_mode = 'Y' THEN
31325 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31326 END IF;
31327
31328 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31329 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31330 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31331 RAISE FND_API.G_EXC_ERROR;
31332 END IF;
31333
31334 -- Validate Deliverable reference / ID
31335 PA_Deliverable_Utils.Convert_pm_dlvrref_to_id(
31336 p_deliverable_reference => p_deliverable_reference
31337 , p_deliverable_id => p_deliverable_id
31338 , p_project_id => l_project_id
31339 , p_out_deliverable_id => l_deliverable_id
31340 , p_return_status => x_return_status);
31341
31342 IF p_debug_mode = 'Y' THEN
31343 pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID Return Status ['||x_return_status,3) ;
31344 END IF;
31345
31346 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31347 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31348 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31349 RAISE FND_API.G_EXC_ERROR;
31350 END IF;
31351
31352
31353 -- 3729250 Validate Deliverable Action reference / ID
31354 PA_Deliverable_Utils.Convert_pm_actionref_to_id(
31355 p_action_reference => p_pm_action_reference
31356 , p_action_id => p_action_id
31357 , p_deliverable_id => l_deliverable_id
31358 , p_project_id => l_project_id
31359 , p_out_action_id => l_action_id
31360 , p_return_status => x_return_status);
31361
31362 IF p_debug_mode = 'Y' THEN
31363 pa_debug.write(g_pkg_name,'Convert_pm_actionref_to_id Return Status ['||x_return_status,3) ;
31364 END IF;
31365
31366 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31367 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31368 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31369 RAISE FND_API.G_EXC_ERROR;
31370 END IF;
31371
31372 -- 3729250, Validate Financial Task Reference / ID
31373 -- PA_PROJECT_PVT.Convert_pm_taskref_to_id_all should only be called if either p_financial_task_id or
31374 -- p_financial_task_reference is passed
31375
31376 IF ( ( p_financial_task_id IS NOT NULL AND p_financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
31377 ( p_financial_task_reference IS NOT NULL AND p_financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) THEN
31378 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
31379 p_pa_project_id => l_project_id
31380 , p_structure_type => 'FINANCIAL'
31381 , p_pa_task_id => p_financial_task_id
31382 , p_pm_task_reference => p_financial_task_reference
31383 , p_out_task_id => l_fin_task_id
31384 , p_return_status => x_return_status );
31385
31386 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31387 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31388 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31389 RAISE FND_API.G_EXC_ERROR;
31390 END IF;
31391 END IF;
31392
31393 -- Populate the table with input parameters
31394
31395 IF ( i IS NOT NULL ) THEN
31396 l_action_in_tbl(i).action_name := p_action_name ;
31397 l_action_in_tbl(i).action_owner_id := p_action_owner_id ;
31398 l_action_in_tbl(i).function_code := p_function_code ;
31399 l_action_in_tbl(i).due_date := p_due_date ;
31400 l_action_in_tbl(i).description := p_description ;
31401 l_action_in_tbl(i).completion_date := p_completion_date ;
31402 l_action_in_tbl(i).pm_source_code := p_pm_source_code ;
31403 l_action_in_tbl(i).pm_action_reference := p_pm_action_reference ;
31404 -- for bug# 3729250
31405 -- l_action_in_tbl(i).carrying_out_org_id := p_carrying_out_org_id ;
31406 l_action_in_tbl(i).pm_deliverable_reference := p_deliverable_reference ;
31407 l_action_in_tbl(i).deliverable_id := l_deliverable_id ; -- 3749474 earlier p_deliverable_id was passed
31408 l_action_in_tbl(i).financial_task_id := l_fin_task_id ; -- for bug# 3729250
31409 l_action_in_tbl(i).destination_type_code := p_destination_type_code ;
31410 l_action_in_tbl(i).receiving_org_id := p_receiving_org_id ;
31411 l_action_in_tbl(i).receiving_location_id := p_receiving_location_id ;
31412 l_action_in_tbl(i).po_need_by_date := p_po_need_by_date ;
31413 l_action_in_tbl(i).vendor_id := p_vendor_id ;
31414 l_action_in_tbl(i).vendor_site_code := p_vendor_site_code ;
31415 -- l_action_in_tbl(i).project_currency := p_project_currency ;
31416 l_action_in_tbl(i).Quantity := p_Quantity ;
31417 l_action_in_tbl(i).uom_code := p_uom_code ;
31418 l_action_in_tbl(i).unit_price := p_unit_price ;
31419 l_action_in_tbl(i).exchange_rate_type := p_exchange_rate_type ;
31420 l_action_in_tbl(i).exchange_rate_date := p_exchange_rate_date ;
31421 l_action_in_tbl(i).exchange_rate := p_exchange_rate ;
31422 l_action_in_tbl(i).expenditure_type := p_expenditure_type ;
31423 l_action_in_tbl(i).expenditure_org_id := p_expenditure_org_id ;
31424 l_action_in_tbl(i).expenditure_item_date := p_expenditure_item_date ;
31425 l_action_in_tbl(i).requisition_line_type_id := p_requisition_line_type_id ;
31426 l_action_in_tbl(i).category_id := p_category_id ;
31427 l_action_in_tbl(i).ready_to_procure_flag := p_ready_to_procure_flag ;
31428 l_action_in_tbl(i).initiate_procure_flag := p_initiate_procure_flag ;
31429 l_action_in_tbl(i).ship_from_organization_id := p_ship_from_organization_id ;
31430 l_action_in_tbl(i).ship_from_location_id := p_ship_from_location_id ;
31431 l_action_in_tbl(i).ship_to_organization_id := p_ship_to_organization_id ;
31432 l_action_in_tbl(i).ship_to_location_id := p_ship_to_location_id ;
31433 l_action_in_tbl(i).demand_schedule := p_demand_schedule ;
31434 l_action_in_tbl(i).expected_shipment_date := p_expected_shipment_date ;
31435 l_action_in_tbl(i).promised_shipment_date := p_promised_shipment_date ;
31436 l_action_in_tbl(i).volume := p_volume ;
31437 l_action_in_tbl(i).volume_uom := p_volume_uom ;
31438 l_action_in_tbl(i).weight := p_weight ;
31439 l_action_in_tbl(i).weight_uom := p_weight_uom ;
31440 l_action_in_tbl(i).ready_to_ship_flag := p_ready_to_ship_flag ;
31441 l_action_in_tbl(i).initiate_planning_flag := p_initiate_planning_flag ;
31442 l_action_in_tbl(i).initiate_shipping_flag := p_initiate_shipping_flag ;
31443 l_action_in_tbl(i).event_type := p_event_type ;
31444 l_action_in_tbl(i).currency := p_currency ;
31445 l_action_in_tbl(i).invoice_amount := p_invoice_amount ;
31446 l_action_in_tbl(i).revenue_amount := p_revenue_amount ;
31447 l_action_in_tbl(i).event_date := p_event_date ;
31448 l_action_in_tbl(i).event_number := p_event_number ;
31449 l_action_in_tbl(i).organization_id := p_organization_id ;
31450 l_action_in_tbl(i).bill_hold_flag := p_bill_hold_flag ;
31451 l_action_in_tbl(i).project_functional_rate_type:= p_project_functional_rate_type;
31452 l_action_in_tbl(i).project_functional_rate_date:= p_project_functional_rate_date;
31453 l_action_in_tbl(i).project_functional_rate := p_project_functional_rate ;
31454 l_action_in_tbl(i).project_rate_type := p_project_rate_type ;
31455 l_action_in_tbl(i).project_rate_date := p_project_rate_date ;
31456 l_action_in_tbl(i).project_rate := p_project_rate ;
31457 l_action_in_tbl(i).funding_rate_type := p_funding_rate_type ;
31458 l_action_in_tbl(i).funding_rate_date := p_funding_rate_date ;
31459 l_action_in_tbl(i).funding_rate := p_funding_rate ;
31460 l_action_in_tbl(i).pm_event_reference := p_pm_event_reference ; -- 3651489 added parameter
31461 l_action_in_tbl(i).action_id := l_action_id ; -- 3729250 added parameter
31462 END IF;
31463
31464 -- Call api to update actions passing the newly populated plsql table
31465 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31466 ( p_api_version => p_api_version
31467 , p_init_msg_list => FND_API.G_FALSE
31468 , p_commit => FND_API.G_FALSE
31469 , p_validate_only => FND_API.G_FALSE
31470 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
31471 , p_calling_module => 'AMG'
31472 , p_debug_mode => p_debug_mode
31473 , p_insert_or_update => 'UPDATE'
31474 , p_action_in_tbl => l_action_in_tbl
31475 , x_action_out_tbl => l_action_out_tbl
31476 , x_return_status => x_return_status
31477 , x_msg_count => l_msg_count
31478 , x_msg_data => l_msg_data);
31479
31480 -- 3749474 added code to check for return status
31481
31482 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31483 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31484 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31485 RAISE FND_API.G_EXC_ERROR;
31486 END IF;
31487
31488 ---- --dbms_output.put_line('after Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper'||x_return_status);
31489 i := l_action_out_tbl.first();
31490
31491 WHILE i IS NOT NULL LOOP
31492 ---- --dbms_output.put_line('action created ['||l_action_out_tbl(i).action_id||'] status ['||l_action_out_tbl(i).return_status);
31493 i := l_action_out_tbl.next(i);
31494 END LOOP;
31495
31496 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31497 IF (p_commit = FND_API.G_TRUE) THEN
31498 COMMIT;
31499 END IF;
31500
31501 IF p_debug_mode = 'Y' THEN
31502 pa_debug.reset_curr_function;
31503 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31504 END IF;
31505
31506 EXCEPTION
31507 WHEN FND_API.G_EXC_ERROR THEN
31508 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31509 --IF (p_commit = FND_API.G_TRUE) THEN
31510 ROLLBACK TO update_deliverable_actions_pub;
31511 --END IF;
31512
31513 IF p_debug_mode = 'Y' THEN
31514 pa_debug.reset_curr_function;
31515 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31516 END IF;
31517 x_return_status := FND_API.G_RET_STS_ERROR;
31518 x_msg_count := FND_MSG_PUB.count_msg;
31519
31520 IF x_msg_count = 1 THEN
31521 PA_INTERFACE_UTILS_PUB.get_messages
31522 (p_encoded => FND_API.G_FALSE,
31523 p_msg_index => 1,
31524 p_msg_count => x_msg_count,
31525 p_msg_data => x_msg_data,
31526 p_data => l_data, --4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31527 p_msg_index_out => l_msg_index_out);
31528 x_msg_data := l_data ; -- 4537865
31529 END IF;
31530
31531 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
31532 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31533 --IF (p_commit = FND_API.G_TRUE) THEN
31534 ROLLBACK TO update_deliverable_actions_pub;
31535 --END IF;
31536
31537 IF p_debug_mode = 'Y' THEN
31538 pa_debug.reset_curr_function;
31539 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31540 END IF;
31541 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31542 x_msg_count := FND_MSG_PUB.count_msg;
31543
31544 IF x_msg_count = 1 THEN
31545 PA_INTERFACE_UTILS_PUB.get_messages
31546 (p_encoded => FND_API.G_FALSE,
31547 p_msg_index => 1,
31548 p_msg_count => x_msg_count,
31549 p_msg_data => x_msg_data,
31550 p_data => l_data,-- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31551 p_msg_index_out => l_msg_index_out);
31552 x_msg_data := l_data ; -- 4537865
31553 END IF;
31554
31555 WHEN OTHERS THEN
31556 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31557 -- IF (p_commit = FND_API.G_TRUE) THEN
31558 ROLLBACK TO update_deliverable_actions_pub;
31559 -- END IF;
31560
31561 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31562 x_msg_count := 1;
31563 x_msg_data := SQLERRM;
31564
31565 IF p_debug_mode = 'Y' THEN
31566 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31567 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31568 pa_debug.reset_curr_function;
31569 END IF;
31570
31571 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
31572 FND_MSG_PUB.add_exc_msg
31573 ( p_pkg_name => G_PKG_NAME
31574 , p_procedure_name => l_api_name );
31575 END IF;
31576
31577 END update_deliverable_action;
31578
31579
31580 -- SubProgram : DELETE_DELIVERABLES
31581 -- Type : PUBLIC FUNCTION
31582 -- Purpose : This function will delete the deliverable - Single record
31583 -- Assumptions : None
31584
31585 Procedure Delete_Deliverables (
31586 p_api_version IN NUMBER := 1.0
31587 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
31588 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
31589 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31590 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31591 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31592 --for bug# 3729250
31593 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31594 ,p_pm_dlv_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31595 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31596 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31597 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31598 )IS
31599 l_api_name VARCHAR2(30) := 'Delete_Deliverables';
31600 l_deliverable_id NUMBER;
31601 l_dlvr_version_id NUMBER;
31602 l_project_id NUMBER;
31603 l_function_allowed VARCHAR2(1);
31604 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31605
31606 l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
31607 l_msg_index_out NUMBER;
31608 l_msg_count NUMBER ;
31609 l_data VARCHAR2(2000);
31610 l_msg_data VARCHAR2(2000);
31611
31612
31613 BEGIN
31614 -- Initialize the message table if requested.
31615 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
31616 FND_MSG_PUB.initialize;
31617 END IF;
31618
31619 -- 3735792, setting save point unconditionally
31620 --IF (p_commit = FND_API.G_TRUE) THEN
31621 savepoint DELETE_DELIVERABLE_PUB;
31622 --END IF;
31623
31624 IF l_debug_mode = 'Y' THEN
31625 PA_DEBUG.set_curr_function( p_function => l_api_name,
31626 p_debug_mode => l_debug_mode );
31627 pa_debug.g_err_stage:= 'Inside '||l_api_name;
31628 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31629 END IF;
31630
31631 -- Set API return status to success
31632 x_return_status := FND_API.G_RET_STS_SUCCESS;
31633
31634 -- Function Security Check
31635 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31636 (p_api_version_number => p_api_version,
31637 p_responsibility_id => l_resp_id,
31638 p_function_name => 'PA_DELIVERABLE_EDIT',
31639 p_msg_count => x_msg_count,
31640 p_msg_data => x_msg_data,
31641 p_return_status => x_return_status,
31642 p_function_allowed => l_function_allowed);
31643
31644 IF l_debug_mode = 'Y' THEN
31645 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
31646 END IF;
31647
31648 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31649 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31650 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31651 RAISE FND_API.G_EXC_ERROR;
31652 END IF;
31653
31654 IF l_function_allowed = 'N' THEN
31655 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
31656 ,p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
31657 x_return_status := FND_API.G_RET_STS_ERROR;
31658 RAISE FND_API.G_EXC_ERROR;
31659 END IF;
31660
31661 -- validate the input parameters.
31662 -- Validate Project Reference / ID
31663 PA_PROJECT_PVT.Convert_pm_projref_to_id (
31664 p_pm_project_reference => p_pm_project_reference
31665 , p_pa_project_id => p_project_id
31666 , p_out_project_id => l_project_id
31667 , p_return_status => x_return_status
31668 );
31669
31670 IF l_debug_mode = 'Y' THEN
31671 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31672 END IF;
31673
31674 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31675 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31676 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31677 RAISE FND_API.G_EXC_ERROR;
31678 END IF;
31679
31680 -- Validate Deliverable Reference / ID
31681 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
31682 ( p_deliverable_reference => p_pm_dlv_source_reference
31683 -- for bug# 3729250
31684 , p_deliverable_id => p_deliverable_id
31685 , p_project_id => l_project_id
31686 , p_out_deliverable_id => l_deliverable_id
31687 , p_return_status => x_return_status
31688 );
31689
31690 IF l_debug_mode = 'Y' THEN
31691 pa_debug.write(g_pkg_name,'Dlvr Reference Valid Return Status ['||x_return_status||']Dlvr ID['||l_deliverable_id||']',3) ;
31692 END IF;
31693
31694 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31695 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31696 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31697 RAISE FND_API.G_EXC_ERROR;
31698 END IF;
31699
31700 -- Derive deliverable version ID and call api Delete Deliverable. It
31701 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
31702
31703 IF l_debug_mode = 'Y' THEN
31704 pa_debug.write(g_pkg_name,'Derived Dlvr Version ID ['||l_dlvr_version_id||'] for Dlvr ID['||l_deliverable_id||']',3) ;
31705 END IF;
31706
31707 -- deletes the corresponding actions and associations also.
31708 IF ( l_dlvr_version_id IS NOT NULL )
31709 THEN
31710 pa_deliverable_pvt.delete_deliverable
31711 (p_api_version => p_api_version
31712 ,p_init_msg_list => FND_API.G_FALSE
31713 -- 3735792, passing p_commit as false to next level api calls
31714 ,p_commit => FND_API.G_FALSE
31715 ,p_validate_only => FND_API.G_FALSE
31716 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
31717 ,p_calling_module => 'AMG'
31718 ,p_debug_mode => l_debug_mode
31719 ,p_max_msg_count => null
31720 ,p_dlv_element_id => l_deliverable_id
31721 ,p_dlv_version_id => l_dlvr_version_id
31722 ,p_rec_ver_number => null
31723 ,p_project_id => l_project_id
31724 ,x_return_status => x_return_status
31725 ,x_msg_count => x_msg_count
31726 ,x_msg_data => x_msg_data );
31727
31728 IF l_debug_mode = 'Y' THEN
31729 pa_debug.write(g_pkg_name,' after pa_deliverable_pvt.delete_deliverable ['||x_return_status||']',3) ;
31730 END IF;
31731
31732 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31733 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31734 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31735 RAISE FND_API.G_EXC_ERROR;
31736 END IF;
31737
31738 END IF;
31739
31740 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31741 IF (p_commit = FND_API.G_TRUE) THEN
31742 COMMIT;
31743 END IF;
31744
31745 IF l_debug_mode = 'Y' THEN
31746 pa_debug.reset_curr_function;
31747 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31748 END IF;
31749
31750 EXCEPTION
31751 WHEN FND_API.G_EXC_ERROR THEN
31752 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31753 --IF (p_commit = FND_API.G_TRUE) THEN
31754 ROLLBACK TO DELETE_DELIVERABLE_PUB;
31755 --END IF;
31756
31757 x_return_status := FND_API.G_RET_STS_ERROR;
31758 l_msg_count := FND_MSG_PUB.count_msg;
31759
31760 IF l_msg_count = 1 AND x_msg_data IS NULL
31761 THEN
31762 PA_INTERFACE_UTILS_PUB.get_messages
31763 (p_encoded => FND_API.G_FALSE,
31764 p_msg_index => 1,
31765 p_msg_count => x_msg_count,
31766 p_msg_data => l_msg_data,
31767 p_data => l_data,
31768 p_msg_index_out => l_msg_index_out);
31769
31770 x_msg_data := l_data;
31771 x_msg_count := l_msg_count;
31772 ELSE
31773 x_msg_count := l_msg_count;
31774
31775 END IF;
31776
31777 IF l_debug_mode = 'Y' THEN
31778 pa_debug.reset_curr_function;
31779 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31780 END IF;
31781
31782 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
31783 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31784 --IF (p_commit = FND_API.G_TRUE) THEN
31785 ROLLBACK TO DELETE_DELIVERABLE_PUB;
31786 --END IF;
31787
31788 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31789 l_msg_count := FND_MSG_PUB.count_msg;
31790
31791 IF l_msg_count = 1 AND x_msg_data IS NULL
31792 THEN
31793 PA_INTERFACE_UTILS_PUB.get_messages
31794 (p_encoded => FND_API.G_FALSE,
31795 p_msg_index => 1,
31796 p_msg_count => x_msg_count,
31797 p_msg_data => l_msg_data,
31798 p_data => l_data,
31799 p_msg_index_out => l_msg_index_out);
31800
31801 x_msg_data := l_data;
31802 x_msg_count := l_msg_count;
31803 ELSE
31804 x_msg_count := l_msg_count;
31805 END IF;
31806
31807 IF l_debug_mode = 'Y' THEN
31808 pa_debug.reset_curr_function;
31809 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31810 END IF;
31811
31812 WHEN OTHERS THEN
31813 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31814 --IF (p_commit = FND_API.G_TRUE) THEN
31815 ROLLBACK TO DELETE_DELIVERABLE_PUB;
31816 --END IF;
31817
31818 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31819 x_msg_count := 1;
31820 x_msg_data := SQLERRM;
31821
31822 IF l_debug_mode = 'Y' THEN
31823 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31824 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31825 pa_debug.reset_curr_function;
31826 END IF;
31827
31828 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
31829 FND_MSG_PUB.add_exc_msg
31830 ( p_pkg_name => G_PKG_NAME
31831 , p_procedure_name => l_api_name );
31832 END IF;
31833
31834 END Delete_Deliverables;
31835
31836 -- SubProgram : DELETE_DELIVERABLE_ACTIONS
31837 -- Type : PUBLIC FUNCTION
31838 -- Purpose : This function will delete the action - Single record
31839 -- Assumptions : None
31840
31841 PROCEDURE delete_deliverable_actions
31842 ( p_api_version IN NUMBER := 1.0 -- 3749480 earlier defaulted with G_PA_MISS_NUM ; Bug#3451073 Removed Quotes
31843 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
31844 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
31845 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31846 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31847 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31848 -- for bug# 3729250 , changed datatype from NUMBER TO VARCHAR2
31849 ,p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31850 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31851 -- for bug# 3729250 , changed datatype from NUMBER TO VARCHAR2
31852 ,p_action_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31853 ,p_action_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31854 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31855 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31856 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31857 )
31858
31859 IS
31860 l_api_name VARCHAR2(30) := 'Delete_Deliverable_Actions';
31861 l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
31862
31863 l_project_id NUMBER ;
31864 l_action_id NUMBER;
31865 l_action_version_id NUMBER;
31866 l_deliverable_id NUMBER;
31867 l_dlvr_version_id NUMBER;
31868 l_function_code Pa_Proj_Elements.function_code%TYPE;
31869
31870 l_function_allowed VARCHAR2(1);
31871 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31872
31873 l_msg_index_out NUMBER;
31874 l_msg_count NUMBER ;
31875 l_data VARCHAR2(2000);
31876 l_msg_data VARCHAR2(2000);
31877
31878 BEGIN
31879 -- Initialize the message table if requested.
31880 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
31881 FND_MSG_PUB.initialize;
31882 END IF;
31883
31884 -- 3735792, setting save point unconditionally
31885 --IF (p_commit = FND_API.G_TRUE) THEN
31886 savepoint DELETE_DELIVERABLE_ACTION_PUB;
31887 --END IF;
31888
31889 IF l_debug_mode = 'Y' THEN
31890 PA_DEBUG.set_curr_function( p_function => l_api_name,
31891 p_debug_mode => l_debug_mode );
31892 pa_debug.g_err_stage:= 'Inside '||l_api_name;
31893 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31894 END IF;
31895 -- Set API return status to success
31896 x_return_status := FND_API.G_RET_STS_SUCCESS;
31897
31898 -- Function Security Check
31899 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31900 (p_api_version_number => p_api_version,
31901 p_responsibility_id => l_resp_id,
31902 p_function_name => 'PA_DELIVERABLE_EDIT',
31903 p_msg_count => x_msg_count,
31904 p_msg_data => x_msg_data,
31905 p_return_status => x_return_status,
31906 p_function_allowed => l_function_allowed);
31907
31908 IF l_debug_mode = 'Y' THEN
31909 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
31910 END IF;
31911
31912 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31913 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31914 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31915 RAISE FND_API.G_EXC_ERROR;
31916 END IF;
31917
31918 IF l_function_allowed = 'N' THEN
31919 pa_interface_utils_pub.map_new_amg_msg
31920 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
31921 ,p_msg_attribute => 'CHANGE'
31922 ,p_resize_flag => 'Y'
31923 ,p_msg_context => 'GENERAL'
31924 ,p_attribute1 => ''
31925 ,p_attribute2 => ''
31926 ,p_attribute3 => ''
31927 ,p_attribute4 => ''
31928 ,p_attribute5 => '');
31929
31930 x_return_status := FND_API.G_RET_STS_ERROR;
31931 RAISE FND_API.G_EXC_ERROR;
31932 END IF;
31933
31934 -- validate the input parameters.
31935 -- Validate Project Reference / ID
31936 PA_PROJECT_PVT.Convert_pm_projref_to_id (
31937 p_pm_project_reference => p_pm_project_reference
31938 , p_pa_project_id => p_project_id
31939 , p_out_project_id => l_project_id
31940 , p_return_status => x_return_status
31941 );
31942
31943 IF l_debug_mode = 'Y' THEN
31944 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31945 END IF;
31946
31947 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31948 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31949 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31950 RAISE FND_API.G_EXC_ERROR;
31951 END IF;
31952
31953 -- Validate Deliverable Reference / ID
31954 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
31955 ( p_deliverable_reference => p_pm_deliverable_reference
31956 , p_deliverable_id => p_deliverable_id
31957 , p_project_id => l_project_id
31958 , p_out_deliverable_id => l_deliverable_id
31959 , p_return_status => x_return_status
31960 );
31961
31962 IF l_debug_mode = 'Y' THEN
31963 pa_debug.write(g_pkg_name,'Dlvr Reference Valid Return Status ['||x_return_status||']Dlvr ID['||l_deliverable_id||']',3) ;
31964 END IF;
31965
31966 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31967 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31968 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31969 RAISE FND_API.G_EXC_ERROR;
31970 END IF;
31971
31972 -- Validate Action Reference / ID
31973 Pa_Deliverable_Utils.Convert_pm_actionref_to_id
31974 (
31975 p_action_reference => p_action_source_reference
31976 ,p_action_id => p_action_id
31977 ,p_deliverable_id => l_deliverable_id -- 3749480 earlier p_deliverable_id was used
31978 ,p_project_id => l_project_id
31979 ,p_out_action_id => l_action_id
31980 ,p_return_status => x_return_status
31981 );
31982
31983 IF l_debug_mode = 'Y' THEN
31984 pa_debug.write(g_pkg_name,'Dlvr Action Reference Valid Return Status ['||x_return_status||']Action ID['||l_action_id||']',3) ;
31985 END IF;
31986
31987 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31988 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31989 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31990 RAISE FND_API.G_EXC_ERROR;
31991 END IF;
31992
31993 -- Derive Deliverable_version_id
31994 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
31995
31996 IF l_debug_mode = 'Y' THEN
31997 pa_debug.write(g_pkg_name,'Derived Dlvr Version ID ['||l_dlvr_version_id||'] for Dlvr ID['||l_deliverable_id||']',3) ;
31998 END IF;
31999
32000 -- Derive Action_version_id and Function Code
32001 l_action_version_id := Pa_Deliverable_Utils.Get_Action_Version_Id (l_action_id, null, l_project_id) ;
32002 l_function_code := Pa_Deliverable_Utils.GET_FUNCTION_CODE(l_action_id) ;
32003
32004 IF l_debug_mode = 'Y' THEN
32005 pa_debug.write(g_pkg_name,'Derived Action version ID ['||l_action_version_id||']and function code ['||l_function_code||']',3) ;
32006 END IF;
32007
32008 -- Calling Actions API to delete actions.
32009
32010 pa_actions_pvt.DELETE_DLV_ACTION
32011 (p_api_version => p_api_version
32012 ,p_init_msg_list => FND_API.G_FALSE
32013 ,p_commit => FND_API.G_FALSE
32014 ,p_validate_only => FND_API.G_FALSE
32015 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
32016 ,p_calling_module => 'AMG'
32017 ,p_debug_mode => l_debug_mode
32018 ,p_max_msg_count => null
32019 ,p_action_id => l_action_id
32020 ,p_action_ver_id => l_action_version_id
32021 ,p_dlv_element_id => l_deliverable_id
32022 ,p_dlv_version_id => l_dlvr_version_id
32023 ,p_function_code => l_function_code
32024 ,p_project_id => l_project_id
32025 ,x_return_status => x_return_status
32026 ,x_msg_count => x_msg_count
32027 ,x_msg_data => x_msg_data
32028 ) ;
32029
32030 IF l_debug_mode = 'Y' THEN
32031 pa_debug.write(g_pkg_name,' after pa_actions_pvt.DELETE_DLV_ACTION ['||x_return_status||']',3) ;
32032 END IF;
32033
32034 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32035 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32036 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32037 RAISE FND_API.G_EXC_ERROR;
32038 END IF;
32039
32040 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32041 IF (p_commit = FND_API.G_TRUE) THEN
32042 COMMIT;
32043 END IF;
32044
32045 IF l_debug_mode = 'Y' THEN
32046 pa_debug.reset_curr_function;
32047 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32048 END IF;
32049
32050 EXCEPTION
32051 WHEN FND_API.G_EXC_ERROR THEN
32052 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32053 --IF (p_commit = FND_API.G_TRUE) THEN
32054 ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32055 --END IF;
32056
32057 x_return_status := FND_API.G_RET_STS_ERROR;
32058 l_msg_count := FND_MSG_PUB.count_msg;
32059
32060 IF l_msg_count = 1 AND x_msg_data IS NULL
32061 THEN
32062 PA_INTERFACE_UTILS_PUB.get_messages
32063 (p_encoded => FND_API.G_FALSE,
32064 p_msg_index => 1,
32065 p_msg_count => x_msg_count,
32066 p_msg_data => l_msg_data,
32067 p_data => l_data,
32068 p_msg_index_out => l_msg_index_out);
32069
32070 x_msg_data := l_data;
32071 x_msg_count := l_msg_count;
32072 ELSE
32073 x_msg_count := l_msg_count;
32074
32075 END IF;
32076
32077 IF l_debug_mode = 'Y' THEN
32078 pa_debug.reset_curr_function;
32079 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32080 END IF;
32081
32082 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
32083 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32084 --IF (p_commit = FND_API.G_TRUE) THEN
32085 ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32086 --END IF;
32087
32088 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32089 l_msg_count := FND_MSG_PUB.count_msg;
32090
32091 IF l_msg_count = 1 AND x_msg_data IS NULL
32092 THEN
32093 PA_INTERFACE_UTILS_PUB.get_messages
32094 (p_encoded => FND_API.G_FALSE,
32095 p_msg_index => 1,
32096 p_msg_count => x_msg_count,
32097 p_msg_data => l_msg_data,
32098 p_data => l_data,
32099 p_msg_index_out => l_msg_index_out);
32100
32101 x_msg_data := l_data;
32102 x_msg_count := l_msg_count;
32103 ELSE
32104 x_msg_count := l_msg_count;
32105
32106 END IF;
32107
32108 IF l_debug_mode = 'Y' THEN
32109 pa_debug.reset_curr_function;
32110 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32111 END IF;
32112
32113 WHEN OTHERS THEN
32114 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32115 --IF (p_commit = FND_API.G_TRUE) THEN
32116 ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32117 --END IF;
32118
32119 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32120 x_msg_count := 1;
32121 x_msg_data := SQLERRM;
32122
32123 IF l_debug_mode = 'Y' THEN
32124 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32125 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32126 pa_debug.reset_curr_function;
32127 END IF;
32128
32129 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32130 FND_MSG_PUB.add_exc_msg
32131 ( p_pkg_name => G_PKG_NAME
32132 , p_procedure_name => l_api_name );
32133 END IF;
32134
32135 END Delete_Deliverable_Actions;
32136
32137 -- SubProgram : DELETE_DLV_TO_TASK_ASSCN
32138 -- Type : PUBLIC FUNCTION
32139 -- Purpose : This function will delete the association of Deliverable with Task - Single record
32140 -- Assumptions : None
32141
32142 Procedure DELETE_DLV_TO_TASK_ASSCN (
32143 p_api_version IN NUMBER := 1.0
32144 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
32145 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
32146 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32147 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32148 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32149 ,p_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32150 ,p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32151 ,p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32152 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32153 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32154 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32155 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32156 )IS
32157
32158
32159 l_api_name VARCHAR2(30) := 'DELETE_DLV_TO_TASK_ASSCN';
32160 l_project_id NUMBER ;
32161 l_task_id NUMBER;
32162 l_task_reference VARCHAR2(240);
32163 l_deliverable_id NUMBER;
32164 l_dlvr_version_id NUMBER;
32165 l_function_code Pa_Proj_Elements.function_code%TYPE;
32166 l_object_relationship_Id pa_object_relationships.object_relationship_Id%TYPE;
32167 l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
32168
32169 l_function_allowed VARCHAR2(1);
32170 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32171
32172 l_msg_index_out NUMBER;
32173 l_msg_count NUMBER ;
32174 l_data VARCHAR2(2000);
32175 l_msg_data VARCHAR2(2000);
32176
32177 BEGIN
32178
32179 -- Initialize the message table if requested.
32180 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
32181 FND_MSG_PUB.initialize;
32182 END IF;
32183
32184 -- 3735792, setting save point unconditionally
32185 --IF (p_commit = FND_API.G_TRUE) THEN
32186 savepoint DELETE_DLV_TO_TASK_ASSCN_PUB;
32187 --END IF;
32188
32189 IF l_debug_mode = 'Y' THEN
32190 PA_DEBUG.set_curr_function( p_function => l_api_name,
32191 p_debug_mode => l_debug_mode );
32192 pa_debug.g_err_stage:= 'Inside '||l_api_name;
32193 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32194 END IF;
32195
32196 -- Set API return status to success
32197 x_return_status := FND_API.G_RET_STS_SUCCESS;
32198
32199 -- Function Security Check
32200 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32201 (p_api_version_number => p_api_version,
32202 p_responsibility_id => l_resp_id,
32203 p_function_name => 'PA_DELIVERABLE_EDIT',
32204 p_msg_count => x_msg_count,
32205 p_msg_data => x_msg_data,
32206 p_return_status => x_return_status,
32207 p_function_allowed => l_function_allowed);
32208
32209
32210 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32211 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32212 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32213 RAISE FND_API.G_EXC_ERROR;
32214 END IF;
32215
32216 IF l_function_allowed = 'N' THEN
32217 pa_interface_utils_pub.map_new_amg_msg
32218 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32219 ,p_msg_attribute => 'CHANGE'
32220 ,p_resize_flag => 'Y'
32221 ,p_msg_context => 'GENERAL'
32222 ,p_attribute1 => ''
32223 ,p_attribute2 => ''
32224 ,p_attribute3 => ''
32225 ,p_attribute4 => ''
32226 ,p_attribute5 => '');
32227
32228 x_return_status := FND_API.G_RET_STS_ERROR;
32229 RAISE FND_API.G_EXC_ERROR;
32230 END IF;
32231
32232 -- validate the input parameters.
32233 -- Validate Project Reference / ID
32234 PA_PROJECT_PVT.Convert_pm_projref_to_id (
32235 p_pm_project_reference => p_pm_project_reference
32236 , p_pa_project_id => p_project_id
32237 , p_out_project_id => l_project_id
32238 , p_return_status => x_return_status
32239 );
32240
32241 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32242 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32243 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32244 RAISE FND_API.G_EXC_ERROR;
32245 END IF;
32246
32247 -- Validate Deliverable Reference / ID
32248 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32249 ( p_deliverable_reference => p_pm_deliverable_reference
32250 , p_deliverable_id => p_deliverable_id
32251 , p_project_id => l_project_id
32252 , p_out_deliverable_id => l_deliverable_id
32253 , p_return_status => x_return_status
32254 );
32255
32256 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32257 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32258 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32259 RAISE FND_API.G_EXC_ERROR;
32260 END IF;
32261
32262 -- Validate Task Reference / ID
32263 IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
32264 l_task_id := NULL;
32265 ELSE
32266 l_task_id := p_task_id;
32267 END IF;
32268
32269 IF p_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
32270 l_task_reference := NULL;
32271 ELSE
32272 l_task_reference := p_task_reference;
32273 END IF;
32274
32275 IF ( p_task_id IS NOT NULL OR l_task_reference IS NOT NULL ) THEN
32276 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
32277 p_pa_project_id => l_project_id
32278 , p_structure_type => 'WORKPLAN'
32279 , p_pa_task_id => p_task_id
32280 , p_pm_task_reference => p_task_reference
32281 , p_out_task_id => l_task_id
32282 , p_return_status => x_return_status );
32283
32284 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32285 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32286 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32287 RAISE FND_API.G_EXC_ERROR;
32288 END IF;
32289 END IF;
32290
32291
32292 -- Derive Deliverable_version_id
32293 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32294
32295 -- Derive Object Relationship ID
32296 l_object_relationship_id := Pa_Deliverable_Utils.Get_Dlvr_Task_Asscn_ID(l_deliverable_id, l_task_id);
32297
32298 -- Calling deliverable api to Delete Association
32299 pa_deliverable_pub.DELETE_DLV_TASK_ASSOCIATION
32300 (p_api_version => p_api_version
32301 ,p_init_msg_list => FND_API.G_FALSE
32302 ,p_commit => FND_API.G_FALSE
32303 ,p_validate_only => FND_API.G_FALSE
32304 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
32305 ,p_calling_module => 'AMG'
32306 ,p_debug_mode => l_debug_mode
32307 ,p_max_msg_count => null
32308 ,p_task_element_id => l_task_id
32309 ,p_task_version_id => -99 -- 3749498 passing -99 instead of null
32310 ,p_dlv_element_id => l_deliverable_Id
32311 ,p_dlv_version_id => l_dlvr_version_id
32312 ,p_object_relationship_id => l_object_relationship_id
32313 ,p_obj_rec_ver_number => null
32314 ,p_project_id => l_project_id
32315 ,p_calling_context => 'TASKS'
32316 ,x_return_status => x_return_status
32317 ,x_msg_count => x_msg_count
32318 ,x_msg_data => x_msg_data
32319 );
32320
32321 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32322 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32323 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32324 RAISE FND_API.G_EXC_ERROR;
32325 END IF;
32326
32327 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32328 IF (p_commit = FND_API.G_TRUE) THEN
32329 COMMIT;
32330 END IF;
32331
32332 IF l_debug_mode = 'Y' THEN
32333 pa_debug.reset_curr_function;
32334 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32335 END IF;
32336
32337 EXCEPTION
32338 WHEN FND_API.G_EXC_ERROR THEN
32339 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32340 --IF (p_commit = FND_API.G_TRUE) THEN
32341 ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32342 --END IF;
32343
32344 x_return_status := FND_API.G_RET_STS_ERROR;
32345 l_msg_count := FND_MSG_PUB.count_msg;
32346
32347 IF l_msg_count = 1 AND x_msg_data IS NULL
32348 THEN
32349 PA_INTERFACE_UTILS_PUB.get_messages
32350 (p_encoded => FND_API.G_FALSE,
32351 p_msg_index => 1,
32352 p_msg_count => x_msg_count,
32353 p_msg_data => l_msg_data,
32354 p_data => l_data,
32355 p_msg_index_out => l_msg_index_out);
32356
32357 x_msg_data := l_data;
32358 x_msg_count := l_msg_count;
32359 ELSE
32360 x_msg_count := l_msg_count;
32361 END IF;
32362
32363 IF l_debug_mode = 'Y' THEN
32364 pa_debug.reset_curr_function;
32365 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32366 END IF;
32367
32368 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
32369 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32370 -- IF (p_commit = FND_API.G_TRUE) THEN
32371 ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32372 --END IF;
32373
32374 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32375 l_msg_count := FND_MSG_PUB.count_msg;
32376
32377 IF l_msg_count = 1 AND x_msg_data IS NULL
32378 THEN
32379 PA_INTERFACE_UTILS_PUB.get_messages
32380 (p_encoded => FND_API.G_FALSE,
32381 p_msg_index => 1,
32382 p_msg_count => x_msg_count,
32383 p_msg_data => l_msg_data,
32384 p_data => l_data,
32385 p_msg_index_out => l_msg_index_out);
32386
32387 x_msg_data := l_data;
32388 x_msg_count := l_msg_count;
32389 ELSE
32390 x_msg_count := l_msg_count;
32391 END IF;
32392
32393 IF l_debug_mode = 'Y' THEN
32394 pa_debug.reset_curr_function;
32395 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32396 END IF;
32397
32398 WHEN OTHERS THEN
32399 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32400 --IF (p_commit = FND_API.G_TRUE) THEN
32401 ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32402 --END IF;
32403
32404 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32405 x_msg_count := 1;
32406 x_msg_data := SQLERRM;
32407
32408 IF l_debug_mode = 'Y' THEN
32409 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32410 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32411 pa_debug.reset_curr_function;
32412 END IF;
32413
32414 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32415 FND_MSG_PUB.add_exc_msg
32416 ( p_pkg_name => G_PKG_NAME
32417 , p_procedure_name => l_api_name );
32418 END IF;
32419
32420 END DELETE_DLV_TO_TASK_ASSCN;
32421
32422 -- SubProgram : ASSOCIATE_DLV_TO_TASK
32423 -- Type : PUBLIC FUNCTION
32424 -- Purpose : This function will create the association of Deliverable with Task - Single record
32425 -- Assumptions : None
32426
32427 Procedure ASSOCIATE_DLV_TO_TASK (
32428 p_api_version IN NUMBER := 1.0
32429 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
32430 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
32431 ,p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
32432 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32433 -- added for bug# 3729250
32434 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32435 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32436 -- added for bug# 3729250
32437 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32438 ,p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32439 -- added for bug# 3729250
32440 ,p_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32441 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32442 ,x_return_status OUT NOCOPY VARCHAR2/*Added the nocopy check for 4537865 */
32443 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32444 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32445 )IS
32446
32447 l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK';
32448 l_project_id NUMBER ;
32449 l_task_id NUMBER;
32450 l_task_reference VARCHAR2(240);
32451 l_deliverable_id NUMBER;
32452 l_dlvr_version_id NUMBER;
32453 l_function_code Pa_Proj_Elements.function_code%TYPE;
32454 l_object_relationship_Id pa_object_relationships.object_relationship_Id%TYPE;
32455
32456 l_function_allowed VARCHAR2(1);
32457 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32458
32459 l_msg_index_out NUMBER;
32460 l_msg_count NUMBER ;
32461 l_data VARCHAR2(2000);
32462 l_msg_data VARCHAR2(2000);
32463
32464 l_wp_task_flag varchar2(1); -- Added for bug5462298
32465
32466 BEGIN
32467
32468 -- Initialize the message table if requested.
32469 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
32470 FND_MSG_PUB.initialize;
32471 END IF;
32472
32473 -- 3735792, setting save point unconditionally
32474 --IF (p_commit = FND_API.G_TRUE) THEN
32475 savepoint ASSOCIATE_DLV_TO_TASK_PUB;
32476 --END IF;
32477
32478 IF p_debug_mode = 'Y' THEN
32479 PA_DEBUG.set_curr_function( p_function => l_api_name,
32480 p_debug_mode => p_debug_mode );
32481 pa_debug.g_err_stage:= 'Inside '||l_api_name;
32482 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32483 END IF;
32484
32485 -- Set API return status to success
32486 x_return_status := FND_API.G_RET_STS_SUCCESS;
32487
32488 -- Function Security Check
32489 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32490 (p_api_version_number => p_api_version,
32491 p_responsibility_id => l_resp_id,
32492 p_function_name => 'PA_DELIVERABLE_EDIT',
32493 p_msg_count => x_msg_count,
32494 p_msg_data => x_msg_data,
32495 p_return_status => x_return_status,
32496 p_function_allowed => l_function_allowed);
32497
32498
32499 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32500 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32501 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32502 RAISE FND_API.G_EXC_ERROR;
32503 END IF;
32504
32505 IF l_function_allowed = 'N' THEN
32506 pa_interface_utils_pub.map_new_amg_msg
32507 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32508 ,p_msg_attribute => 'CHANGE'
32509 ,p_resize_flag => 'Y'
32510 ,p_msg_context => 'GENERAL'
32511 ,p_attribute1 => ''
32512 ,p_attribute2 => ''
32513 ,p_attribute3 => ''
32514 ,p_attribute4 => ''
32515 ,p_attribute5 => '');
32516
32517 x_return_status := FND_API.G_RET_STS_ERROR;
32518 RAISE FND_API.G_EXC_ERROR;
32519 END IF;
32520
32521 -- validate the input parameters.
32522 -- Validate Project Reference / ID
32523 PA_PROJECT_PVT.Convert_pm_projref_to_id (
32524 p_pm_project_reference => p_pm_project_reference -- 3729250, earlier null was passed
32525 , p_pa_project_id => p_project_id
32526 , p_out_project_id => l_project_id
32527 , p_return_status => x_return_status
32528 );
32529
32530 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32531 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32532 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32533 RAISE FND_API.G_EXC_ERROR;
32534 END IF;
32535
32536 -- Validate Deliverable Reference / ID
32537 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32538 ( p_deliverable_reference => p_deliverable_reference -- 3729250, earlier null was passed
32539 , p_deliverable_id => p_deliverable_id
32540 , p_project_id => l_project_id
32541 , p_out_deliverable_id => l_deliverable_id
32542 , p_return_status => x_return_status
32543 );
32544
32545 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32546 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32547 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32548 RAISE FND_API.G_EXC_ERROR;
32549 END IF;
32550
32551 -- Validate Task Reference / ID
32552 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
32553 p_pa_project_id => l_project_id
32554 , p_structure_type => 'WORKPLAN'
32555 , p_pa_task_id => p_task_id
32556 , p_pm_task_reference => p_pm_task_reference -- 3729250, earlier null was passed
32557 , p_out_task_id => l_task_id
32558 , p_return_status => x_return_status );
32559
32560 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32561 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32562 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32563 RAISE FND_API.G_EXC_ERROR;
32564 END IF;
32565
32566
32567 -- 5462298 Added below code to validate passed task id
32568 -- if it is not workplan task , throw error message
32569
32570 l_wp_task_flag := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_WORKPLAN_TASK (
32571 p_project_id => l_project_id
32572 , p_proj_element_id => l_task_id );
32573
32574 IF l_wp_task_flag <> 'Y' THEN
32575
32576 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
32577 THEN
32578
32579 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
32580 ,p_msg_name => 'PA_TASK_ID_INVALID');
32581
32582 x_return_status := FND_API.G_RET_STS_ERROR;
32583 RAISE FND_API.G_EXC_ERROR;
32584
32585 END IF;
32586
32587 END IF;
32588
32589 -- 5462298 end
32590
32591 -- Derive Deliverable_version_id
32592 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32593
32594 -- Calling deliverable api to Create Association
32595 pa_deliverable_pvt.CREATE_DLV_TASK_ASSOCIATION
32596 (p_api_version => p_api_version
32597 ,p_init_msg_list => FND_API.G_FALSE
32598 ,p_commit => FND_API.G_FALSE
32599 ,p_validate_only => FND_API.G_FALSE
32600 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
32601 ,p_calling_module => 'AMG'
32602 ,p_debug_mode => p_debug_mode
32603 ,p_max_msg_count => null
32604 ,p_task_element_id => l_task_id
32605 ,p_task_version_id => null
32606 ,p_dlv_element_id => l_deliverable_id
32607 ,p_dlv_version_id => l_dlvr_version_id
32608 ,p_project_id => l_project_id
32609 ,x_return_status => x_return_status
32610 ,x_msg_count => x_msg_count
32611 ,x_msg_data => x_msg_data
32612 );
32613
32614 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32615 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32616 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32617 RAISE FND_API.G_EXC_ERROR;
32618 END IF;
32619
32620 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32621 IF (p_commit = FND_API.G_TRUE) THEN
32622 COMMIT;
32623 END IF;
32624
32625 IF p_debug_mode = 'Y' THEN
32626 pa_debug.reset_curr_function;
32627 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32628 END IF;
32629
32630 EXCEPTION
32631 WHEN FND_API.G_EXC_ERROR THEN
32632
32633 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32634 --IF (p_commit = FND_API.G_TRUE) THEN
32635 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
32636 --END IF;
32637
32638 x_return_status := FND_API.G_RET_STS_ERROR;
32639 l_msg_count := FND_MSG_PUB.count_msg;
32640
32641 IF l_msg_count = 1 AND x_msg_data IS NULL
32642 THEN
32643 PA_INTERFACE_UTILS_PUB.get_messages
32644 (p_encoded => FND_API.G_FALSE,
32645 p_msg_index => 1,
32646 p_msg_count => x_msg_count,
32647 p_msg_data => l_msg_data,
32648 p_data => l_data,
32649 p_msg_index_out => l_msg_index_out);
32650
32651 x_msg_data := l_data;
32652 x_msg_count := l_msg_count;
32653 ELSE
32654 x_msg_count := l_msg_count;
32655 END IF;
32656
32657 IF p_debug_mode = 'Y' THEN
32658 pa_debug.reset_curr_function;
32659 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32660 END IF;
32661
32662 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
32663 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32664 --IF (p_commit = FND_API.G_TRUE) THEN
32665 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
32666 --END IF;
32667
32668 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32669 l_msg_count := FND_MSG_PUB.count_msg;
32670
32671 IF l_msg_count = 1 AND x_msg_data IS NULL
32672 THEN
32673 PA_INTERFACE_UTILS_PUB.get_messages
32674 (p_encoded => FND_API.G_FALSE,
32675 p_msg_index => 1,
32676 p_msg_count => x_msg_count,
32677 p_msg_data => l_msg_data,
32678 p_data => l_data,
32679 p_msg_index_out => l_msg_index_out);
32680
32681 x_msg_data := l_data;
32682 x_msg_count := l_msg_count;
32683 ELSE
32684 x_msg_count := l_msg_count;
32685 END IF;
32686
32687 IF p_debug_mode = 'Y' THEN
32688 pa_debug.reset_curr_function;
32689 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32690 END IF;
32691
32692 WHEN OTHERS THEN
32693 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32694 -- IF (p_commit = FND_API.G_TRUE) THEN
32695 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
32696 -- END IF;
32697
32698 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32699 x_msg_count := 1;
32700 x_msg_data := SQLERRM;
32701
32702 IF p_debug_mode = 'Y' THEN
32703 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32704 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32705 pa_debug.reset_curr_function;
32706 END IF;
32707
32708 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32709 FND_MSG_PUB.add_exc_msg
32710 ( p_pkg_name => G_PKG_NAME
32711 , p_procedure_name => l_api_name );
32712 END IF;
32713
32714 END ASSOCIATE_DLV_TO_TASK;
32715
32716 Procedure ASSOCIATE_DLV_TO_TASK_ASSIGN (
32717 p_api_version IN NUMBER := 1.0
32718 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
32719 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
32720 ,p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
32721 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32722 -- added for bug# 3729250
32723 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32724 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32725 ,p_pm_task_asgmt_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32726 ,p_task_assign_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32727 -- added for bug# 3729250
32728 ,p_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32729 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32730 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32731 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32732 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32733 )IS
32734
32735 l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK_ASSIGN';
32736 l_project_id NUMBER ;
32737 l_task_assign_id NUMBER;
32738 l_task_assign_reference VARCHAR2(240);
32739 l_deliverable_id NUMBER;
32740 l_dlvr_version_id NUMBER;
32741 l_function_code Pa_Proj_Elements.function_code%TYPE;
32742 l_object_relationship_Id pa_object_relationships.object_relationship_Id%TYPE;
32743 l_task_assignment_id NUMBER ;
32744
32745 l_function_allowed VARCHAR2(1);
32746 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32747
32748 l_msg_index_out NUMBER;
32749 l_msg_count NUMBER ;
32750 l_data VARCHAR2(2000);
32751 l_msg_data VARCHAR2(2000);
32752
32753 BEGIN
32754
32755 -- Initialize the message table if requested.
32756 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
32757 FND_MSG_PUB.initialize;
32758 END IF;
32759
32760 -- 3735792, setting save point unconditionally
32761 -- IF (p_commit = FND_API.G_TRUE) THEN
32762 savepoint ASSOCIATE_DLV_TO_TASK_ASSIGN;
32763 --END IF;
32764
32765 IF p_debug_mode = 'Y' THEN
32766 PA_DEBUG.set_curr_function( p_function => l_api_name,
32767 p_debug_mode => p_debug_mode );
32768 pa_debug.g_err_stage:= 'Inside '||l_api_name;
32769 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32770 END IF;
32771
32772 -- Set API return status to success
32773 x_return_status := FND_API.G_RET_STS_SUCCESS;
32774
32775 -- Function Security Check
32776 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32777 (p_api_version_number => p_api_version,
32778 p_responsibility_id => l_resp_id,
32779 p_function_name => 'PA_DELIVERABLE_EDIT',
32780 p_msg_count => x_msg_count,
32781 p_msg_data => x_msg_data,
32782 p_return_status => x_return_status,
32783 p_function_allowed => l_function_allowed);
32784
32785
32786 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32787 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32788 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32789 RAISE FND_API.G_EXC_ERROR;
32790 END IF;
32791
32792 IF l_function_allowed = 'N' THEN
32793 pa_interface_utils_pub.map_new_amg_msg
32794 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32795 ,p_msg_attribute => 'CHANGE'
32796 ,p_resize_flag => 'Y'
32797 ,p_msg_context => 'GENERAL'
32798 ,p_attribute1 => ''
32799 ,p_attribute2 => ''
32800 ,p_attribute3 => ''
32801 ,p_attribute4 => ''
32802 ,p_attribute5 => '');
32803
32804 x_return_status := FND_API.G_RET_STS_ERROR;
32805 RAISE FND_API.G_EXC_ERROR;
32806 END IF;
32807
32808 -- validate the input parameters.
32809 -- Validate Project Reference / ID
32810 PA_PROJECT_PVT.Convert_pm_projref_to_id (
32811 p_pm_project_reference => p_pm_project_reference -- 3729250, earlier was passed as null
32812 , p_pa_project_id => p_project_id
32813 , p_out_project_id => l_project_id
32814 , p_return_status => x_return_status
32815 );
32816
32817 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32818 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32819 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32820 RAISE FND_API.G_EXC_ERROR;
32821 END IF;
32822
32823 -- Validate Deliverable Reference / ID
32824 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32825 ( p_deliverable_reference => p_deliverable_reference -- 3729250 , earlier passed was null
32826 , p_deliverable_id => p_deliverable_id
32827 , p_project_id => l_project_id
32828 , p_out_deliverable_id => l_deliverable_id
32829 , p_return_status => x_return_status
32830 );
32831
32832 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32833 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32834 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32835 RAISE FND_API.G_EXC_ERROR;
32836 END IF;
32837
32838 -- Validate Task Assignment Reference / ID
32839 IF p_task_assign_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
32840 l_task_assign_id := NULL;
32841 ELSE
32842 l_task_assign_id := p_task_assign_id;
32843 END IF;
32844
32845
32846 PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID
32847 ( p_pm_product_code => p_pm_source_code
32848 ,p_pa_project_id => l_project_id
32849 ,p_pa_structure_version_id => null
32850 ,p_pa_task_id => null
32851 ,p_pa_task_elem_ver_id => null
32852 ,p_pm_task_asgmt_reference => p_pm_task_asgmt_reference
32853 ,p_pa_task_assignment_id => p_task_assign_id
32854 ,p_resource_alias => null
32855 ,p_resource_list_member_id => null
32856 ,x_pa_task_assignment_id => l_task_assignment_id
32857 ,x_return_status => x_return_status
32858 ) ;
32859
32860 IF p_debug_mode = 'Y' THEN
32861 pa_debug.write(g_pkg_name,'PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID ret status'||x_return_status||
32862 ']task assign ref['||l_task_assign_reference||']task assign id['||l_task_assign_id||']',3) ;
32863 END IF;
32864
32865 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32866 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32867 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32868 RAISE FND_API.G_EXC_ERROR;
32869 END IF;
32870
32871 -- Derive Deliverable_version_id
32872 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32873
32874 -- Calling deliverable api to Create Association
32875 pa_deliverable_pvt.CREATE_DLV_TASK_ASSOCIATION
32876 (p_api_version => p_api_version
32877 ,p_init_msg_list => FND_API.G_FALSE
32878 ,p_commit => FND_API.G_FALSE
32879 ,p_validate_only => FND_API.G_FALSE
32880 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
32881 ,p_calling_module => 'AMG'
32882 ,p_calling_context => 'PA_ASSIGNMENTS'
32883 ,p_debug_mode => p_debug_mode
32884 ,p_max_msg_count => null
32885 ,p_task_element_id => l_task_assignment_id
32886 ,p_task_version_id => null
32887 ,p_dlv_element_id => l_deliverable_id
32888 ,p_dlv_version_id => l_dlvr_version_id
32889 ,p_project_id => l_project_id
32890 ,x_return_status => x_return_status
32891 ,x_msg_count => x_msg_count
32892 ,x_msg_data => x_msg_data
32893 );
32894
32895 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32896 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32897 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32898 RAISE FND_API.G_EXC_ERROR;
32899 END IF;
32900
32901 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32902 IF (p_commit = FND_API.G_TRUE) THEN
32903 COMMIT;
32904 END IF;
32905
32906 IF p_debug_mode = 'Y' THEN
32907 pa_debug.reset_curr_function;
32908 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32909 END IF;
32910
32911 EXCEPTION
32912 WHEN FND_API.G_EXC_ERROR THEN
32913 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32914 -- IF (p_commit = FND_API.G_TRUE) THEN
32915 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
32916 -- END IF;
32917
32918 x_return_status := FND_API.G_RET_STS_ERROR;
32919 l_msg_count := FND_MSG_PUB.count_msg;
32920
32921 IF l_msg_count = 1 AND x_msg_data IS NULL
32922 THEN
32923 PA_INTERFACE_UTILS_PUB.get_messages
32924 (p_encoded => FND_API.G_FALSE,
32925 p_msg_index => 1,
32926 p_msg_count => x_msg_count,
32927 p_msg_data => l_msg_data,
32928 p_data => l_data,
32929 p_msg_index_out => l_msg_index_out);
32930
32931 x_msg_data := l_data;
32932 x_msg_count := l_msg_count;
32933 ELSE
32934 x_msg_count := l_msg_count;
32935 END IF;
32936
32937 IF p_debug_mode = 'Y' THEN
32938 pa_debug.reset_curr_function;
32939 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32940 END IF;
32941
32942 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
32943 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32944 --IF (p_commit = FND_API.G_TRUE) THEN
32945 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
32946 --END IF;
32947 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32948 l_msg_count := FND_MSG_PUB.count_msg;
32949
32950 IF l_msg_count = 1 AND x_msg_data IS NULL
32951 THEN
32952 PA_INTERFACE_UTILS_PUB.get_messages
32953 (p_encoded => FND_API.G_FALSE,
32954 p_msg_index => 1,
32955 p_msg_count => x_msg_count,
32956 p_msg_data => l_msg_data,
32957 p_data => l_data,
32958 p_msg_index_out => l_msg_index_out);
32959
32960 x_msg_data := l_data;
32961 x_msg_count := l_msg_count;
32962 ELSE
32963 x_msg_count := l_msg_count;
32964 END IF;
32965
32966 IF p_debug_mode = 'Y' THEN
32967 pa_debug.reset_curr_function;
32968 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32969 END IF;
32970
32971 WHEN OTHERS THEN
32972 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32973 --IF (p_commit = FND_API.G_TRUE) THEN
32974 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
32975 --END IF;
32976
32977 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32978 x_msg_count := 1;
32979 x_msg_data := SQLERRM;
32980
32981 IF p_debug_mode = 'Y' THEN
32982 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32983 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32984 pa_debug.reset_curr_function;
32985 END IF;
32986
32987 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32988 FND_MSG_PUB.add_exc_msg
32989 ( p_pkg_name => G_PKG_NAME
32990 , p_procedure_name => l_api_name );
32991 END IF;
32992
32993 END ASSOCIATE_DLV_TO_TASK_ASSIGN;
32994
32995
32996 Procedure DELETE_DLV_TO_TASK_ASSIGN (
32997 p_api_version IN NUMBER := 1.0
32998 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
32999 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
33000 ,p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
33001 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33002 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33003 -- added for bug# 3729250
33004 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33005 ,p_task_assign_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33006 ,p_pm_task_asgmt_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33007 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --added for bug 3888280
33008 ,p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR --added for bug 3888280
33009 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33010 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33011 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33012 )IS
33013
33014 l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK_ASSIGN';
33015 l_project_id NUMBER ;
33016 l_task_assign_id NUMBER;
33017 l_task_assign_reference VARCHAR2(240);
33018 l_deliverable_id NUMBER;
33019 l_dlvr_version_id NUMBER;
33020 l_function_code Pa_Proj_Elements.function_code%TYPE;
33021 l_object_relationship_Id pa_object_relationships.object_relationship_Id%TYPE;
33022 l_task_assignment_id NUMBER ;
33023
33024 l_function_allowed VARCHAR2(1);
33025 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
33026
33027 l_msg_index_out NUMBER;
33028 l_msg_count NUMBER ;
33029 l_data VARCHAR2(2000);
33030 l_msg_data VARCHAR2(2000);
33031
33032 -- 3888280 Added cursor to retrieve object_relationship_id for a TA to a DLVR
33033 -- Association
33034
33035 CURSOR c_obj_rel_id(l_task_assng_id NUMBER, l_dlvr_id NUMBER) IS
33036 SELECT
33037 OBJ.OBJECT_RELATIONSHIP_ID
33038 FROM PA_OBJECT_RELATIONSHIPS OBJ
33039 WHERE
33040 OBJ.OBJECT_ID_FROM2 = l_task_assng_id
33041 AND OBJ.OBJECT_ID_TO2 = l_dlvr_id
33042 AND OBJ.OBJECT_TYPE_FROM = 'PA_ASSIGNMENTS'
33043 AND OBJ.OBJECT_TYPE_TO = 'PA_DELIVERABLES'
33044 AND OBJ.RELATIONSHIP_TYPE = 'A'
33045 AND OBJ.RELATIONSHIP_SUBTYPE = 'ASSIGNMENT_TO_DELIVERABLE';
33046
33047 BEGIN
33048
33049 -- Initialize the message table if requested.
33050 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
33051 FND_MSG_PUB.initialize;
33052 END IF;
33053
33054 -- 3735792, setting save point unconditionally
33055 --IF (p_commit = FND_API.G_TRUE) THEN
33056 savepoint ASSOCIATE_DLV_TO_TASK_ASSIGN;
33057 --END IF;
33058
33059 IF p_debug_mode = 'Y' THEN
33060 PA_DEBUG.set_curr_function( p_function => l_api_name,
33061 p_debug_mode => p_debug_mode );
33062 pa_debug.g_err_stage:= 'Inside '||l_api_name;
33063 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33064 END IF;
33065
33066 -- Set API return status to success
33067 x_return_status := FND_API.G_RET_STS_SUCCESS;
33068
33069 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33070 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33071 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33072 RAISE FND_API.G_EXC_ERROR;
33073 END IF;
33074
33075 IF l_function_allowed = 'N' THEN
33076 pa_interface_utils_pub.map_new_amg_msg
33077 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
33078 ,p_msg_attribute => 'CHANGE'
33079 ,p_resize_flag => 'Y'
33080 ,p_msg_context => 'GENERAL'
33081 ,p_attribute1 => ''
33082 ,p_attribute2 => ''
33083 ,p_attribute3 => ''
33084 ,p_attribute4 => ''
33085 ,p_attribute5 => '');
33086
33087 x_return_status := FND_API.G_RET_STS_ERROR;
33088 RAISE FND_API.G_EXC_ERROR;
33089 END IF;
33090
33091 -- validate the input parameters.
33092 -- Validate Project Reference / ID
33093 PA_PROJECT_PVT.Convert_pm_projref_to_id (
33094 p_pm_project_reference => p_pm_project_reference -- 3729250 , earlier null was passed
33095 , p_pa_project_id => p_project_id
33096 , p_out_project_id => l_project_id
33097 , p_return_status => x_return_status
33098 );
33099
33100 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33101 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33102 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33103 RAISE FND_API.G_EXC_ERROR;
33104 END IF;
33105
33106 -- Validate Task Assignment Reference / ID
33107 IF p_task_assign_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33108 l_task_assign_id := NULL;
33109 ELSE
33110 l_task_assign_id := p_task_assign_id;
33111 END IF;
33112
33113 PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID
33114 ( p_pm_product_code => p_pm_source_code
33115 ,p_pa_project_id => l_project_id
33116 ,p_pa_structure_version_id => null
33117 ,p_pa_task_id => null
33118 ,p_pa_task_elem_ver_id => null
33119 ,p_pm_task_asgmt_reference => p_pm_task_asgmt_reference
33120 ,p_pa_task_assignment_id => p_task_assign_id
33121 ,p_resource_alias => null
33122 ,p_resource_list_member_id => null
33123 ,x_pa_task_assignment_id => l_task_assignment_id
33124 ,x_return_status => x_return_status
33125 ) ;
33126
33127 IF p_debug_mode = 'Y' THEN
33128 pa_debug.write(g_pkg_name,'PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID ret status'||x_return_status||
33129 ']task assign ref['||l_task_assign_reference||']task assign id['||l_task_assign_id||']',3) ;
33130 END IF;
33131
33132 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33133 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33134 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33135 RAISE FND_API.G_EXC_ERROR;
33136 END IF;
33137
33138 -- 3888280 start
33139 -- Added code to validate Deliverable Reference and Id
33140
33141 -- Validate Deliverable Reference / ID
33142 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
33143 ( p_deliverable_reference => p_pm_deliverable_reference
33144 , p_deliverable_id => p_deliverable_id
33145 , p_project_id => l_project_id
33146 , p_out_deliverable_id => l_deliverable_id
33147 , p_return_status => x_return_status
33148 );
33149
33150 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33151 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33152 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33153 RAISE FND_API.G_EXC_ERROR;
33154 END IF;
33155
33156 -- Addec code to retrieve object_relationship_id for a TA to a DLVR relationship
33157 -- passing this retrieved id to DELETE_DLV_TASK_ASSOCIATION api
33158
33159 OPEN c_obj_rel_id(l_task_assignment_id,l_deliverable_id) ;
33160 FETCH c_obj_rel_id into l_object_relationship_Id ;
33161 CLOSE c_obj_rel_id;
33162
33163 -- commented below code because below api was deleting all the association to deliverables
33164 -- for a TA
33165
33166 /*
33167 PA_DELIVERABLE_PVT.DELETE_DLV_TASK_ASSCN_IN_BULK
33168 (p_calling_module => 'AMG'
33169 ,p_calling_context => 'PA_ASSIGNMENTS'
33170 ,p_task_element_id => l_task_assignment_id
33171 ,p_task_version_id => null
33172 ,p_project_id => l_project_id
33173 ,x_return_status => x_return_status
33174 ,x_msg_count => x_msg_count
33175 ,x_msg_data => x_msg_data
33176 ) ;
33177 */
33178
33179 IF p_debug_mode = 'Y' THEN
33180 pa_debug.g_err_stage:= ' l_object_relationship_Id is ' || l_object_relationship_Id;
33181 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33182 END IF ;
33183
33184 -- Added below api call to delete a TA to a DLVR association
33185 -- passing calling context as TASK_ASSIGNMENT and for calling context TASK_ASSIGNMENT
33186 -- below api is not doing any validation to check whether the deletion is allowed or not
33187
33188 PA_DELIVERABLE_PVT.DELETE_DLV_TASK_ASSOCIATION
33189 (
33190 p_calling_module => 'AMG'
33191 ,p_task_element_id => l_task_assignment_id
33192 ,p_task_version_id => NULL
33193 ,p_dlv_element_id => l_deliverable_id
33194 ,p_dlv_version_id => NULL
33195 ,p_object_relationship_id => l_object_relationship_Id
33196 ,p_obj_rec_ver_number => NULL
33197 ,p_project_id => l_project_id
33198 ,p_calling_context => 'TASK_ASSIGNMENT'
33199 ,x_return_status => x_return_status
33200 ,x_msg_count => x_msg_count
33201 ,x_msg_data => x_msg_data
33202 );
33203
33204 -- 3888280 end
33205
33206 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
33207 IF (p_commit = FND_API.G_TRUE) THEN
33208 COMMIT;
33209 END IF;
33210
33211 IF p_debug_mode = 'Y' THEN
33212 pa_debug.reset_curr_function;
33213 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
33214 END IF;
33215
33216 EXCEPTION
33217 WHEN FND_API.G_EXC_ERROR THEN
33218 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33219 --IF (p_commit = FND_API.G_TRUE) THEN
33220 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33221 --END IF;
33222
33223 x_return_status := FND_API.G_RET_STS_ERROR;
33224 l_msg_count := FND_MSG_PUB.count_msg;
33225
33226 IF l_msg_count = 1 AND x_msg_data IS NULL
33227 THEN
33228 PA_INTERFACE_UTILS_PUB.get_messages
33229 (p_encoded => FND_API.G_FALSE,
33230 p_msg_index => 1,
33231 p_msg_count => x_msg_count,
33232 p_msg_data => l_msg_data,
33233 p_data => l_data,
33234 p_msg_index_out => l_msg_index_out);
33235
33236 x_msg_data := l_data;
33237 x_msg_count := l_msg_count;
33238 ELSE
33239 x_msg_count := l_msg_count;
33240 END IF;
33241
33242 IF p_debug_mode = 'Y' THEN
33243 pa_debug.reset_curr_function;
33244 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
33245 END IF;
33246
33247 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
33248 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33249 --IF (p_commit = FND_API.G_TRUE) THEN
33250 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33251 --END IF;
33252
33253 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33254 l_msg_count := FND_MSG_PUB.count_msg;
33255
33256 IF l_msg_count = 1 AND x_msg_data IS NULL
33257 THEN
33258 PA_INTERFACE_UTILS_PUB.get_messages
33259 (p_encoded => FND_API.G_FALSE,
33260 p_msg_index => 1,
33261 p_msg_count => x_msg_count,
33262 p_msg_data => l_msg_data,
33263 p_data => l_data,
33264 p_msg_index_out => l_msg_index_out);
33265
33266 x_msg_data := l_data;
33267 x_msg_count := l_msg_count;
33268 ELSE
33269 x_msg_count := l_msg_count;
33270 END IF;
33271
33272 IF p_debug_mode = 'Y' THEN
33273 pa_debug.reset_curr_function;
33274 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33275 END IF;
33276
33277 WHEN OTHERS THEN
33278 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33279 --IF (p_commit = FND_API.G_TRUE) THEN
33280 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33281 --END IF;
33282
33283 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33284 x_msg_count := 1;
33285 x_msg_data := SQLERRM;
33286
33287 IF p_debug_mode = 'Y' THEN
33288 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33289 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33290 pa_debug.reset_curr_function;
33291 END IF;
33292
33293 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33294 FND_MSG_PUB.add_exc_msg
33295 ( p_pkg_name => G_PKG_NAME
33296 , p_procedure_name => l_api_name );
33297 END IF;
33298
33299 END DELETE_DLV_TO_TASK_ASSIGN;
33300 -- FP M Changes for deliverables : End
33301
33302 --Added by rtarway for FP.M Development
33303 PROCEDURE Delete_Mapping
33304 (
33305 p_api_version IN NUMBER := 1.0
33306 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
33307 , p_commit IN VARCHAR2 := FND_API.G_TRUE
33308 , p_debug_mode IN VARCHAR2 := 'N'
33309 , p_wp_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33310 , p_fp_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33311 , p_wp_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33312 , p_fp_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33313 , p_pm_wp_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33314 , p_pm_fp_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33315 , p_wp_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33316 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33317 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33318 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33319 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33320 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33321 )
33322 IS
33323 l_msg_count NUMBER;
33324 l_msg_data VARCHAR2(2000);
33325 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_MAPPING';
33326 l_return_status VARCHAR2(1);
33327 l_debug_mode VARCHAR2(1);
33328 l_debug_level2 CONSTANT NUMBER := 2;
33329 l_debug_level3 CONSTANT NUMBER := 3;
33330 l_debug_level4 CONSTANT NUMBER := 4;
33331 l_debug_level5 CONSTANT NUMBER := 5;
33332
33333 l_wp_task_version_id NUMBER;
33334 l_fp_task_version_id NUMBER;
33335 l_wp_task_id NUMBER;
33336 l_fp_task_id NUMBER;
33337 l_project_id NUMBER;
33338 l_wp_structure_version_id NUMBER;
33339
33340 --This cursor is based on assumption that a financial structure will have only one version in a project.
33341 CURSOR cur_get_fin_task_version_id(l_project_id NUMBER, l_fp_task_id NUMBER)
33342 is
33343 Select element_version_id
33344 from pa_proj_element_versions
33345 where proj_element_id = l_fp_task_id
33346 and project_id = l_project_id
33347 and financial_task_flag = 'Y';
33348
33349
33350 BEGIN
33351
33352 -- 4537865
33353 x_return_status := FND_API.G_RET_STS_SUCCESS;
33354
33355 -- Initialize the message table if requested.
33356 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
33357 FND_MSG_PUB.initialize;
33358 END IF;
33359
33360 -- Bug 4142254 : Commenting this condition, as we want to create savepoint always.
33361 -- We could have done other way around too i.e. Savepoint and rollback shoud both be in
33362 -- conditions. But we prefer removing conditions due to bug 3735792
33363 -- IF (p_commit = FND_API.G_TRUE) THEN
33364 savepoint DELETE_MAPPING_PUB;
33365 -- END IF;
33366
33367 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
33368 IF l_debug_mode = 'Y' THEN
33369 PA_DEBUG.set_curr_function( p_function => 'DELETE_MAPPING',
33370 p_debug_mode => l_debug_mode );
33371 END IF;
33372
33373 IF l_debug_mode = 'Y' THEN
33374 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : DELETE_MAPPING : Printing Input parameters';
33375 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33376 l_debug_level3);
33377 Pa_Debug.WRITE(g_pkg_name,'p_wp_task_version_id'||':'||p_wp_task_version_id,
33378 l_debug_level3);
33379 Pa_Debug.WRITE(g_pkg_name,'p_fp_task_version_id'||':'||p_fp_task_version_id,
33380 l_debug_level3);
33381 Pa_Debug.WRITE(g_pkg_name,'p_wp_task_id'||':'||p_wp_task_id,
33382 l_debug_level3);
33383 Pa_Debug.WRITE(g_pkg_name,'p_fp_task_id'||':'||p_fp_task_id,
33384 l_debug_level3);
33385 Pa_Debug.WRITE(g_pkg_name,'p_pm_wp_task_reference'||':'||p_pm_wp_task_reference,
33386 l_debug_level3);
33387 Pa_Debug.WRITE(g_pkg_name,'p_pm_fp_task_reference'||':'||p_pm_fp_task_reference,
33388 l_debug_level3);
33389 Pa_Debug.WRITE(g_pkg_name,'p_wp_structure_version_id'||':'||p_wp_structure_version_id,
33390 l_debug_level3);
33391 Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
33392 l_debug_level3);
33393
33394 END IF;
33395 --Validate for input parameters
33396 IF l_debug_mode = 'Y' THEN
33397 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : DELETE_MAPPING : Validating Input parameters';
33398 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33399 l_debug_level3);
33400 END IF;
33401
33402 --If task ids or names are passed , then we need to derive task_version_ids to be used by the DELETE_MAPPING API.
33403
33404 --1. If Task version ids are null , start deriving task version id
33405 IF (
33406 (p_wp_task_version_id IS NULL OR p_wp_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
33407 AND
33408 (p_fp_task_version_id IS NULL OR p_fp_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
33409 )
33410 THEN
33411 --1.0 Get the project id
33412 IF (
33413 ( p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
33414 AND
33415 ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
33416 )
33417 THEN
33418
33419 PA_PROJECT_PVT.Convert_pm_projref_to_id (
33420 p_pm_project_reference => p_proj_source_reference
33421 , p_pa_project_id => p_project_id
33422 , p_out_project_id => l_project_id
33423 , p_return_status => x_return_status
33424 );
33425
33426 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33427 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33428 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33429 RAISE FND_API.G_EXC_ERROR;
33430 END IF;
33431 ELSE
33432 l_project_id := p_project_id;
33433 END IF;
33434
33435 IF p_debug_mode = 'Y' THEN
33436 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'DELETE_MAPPING'||'Project ID:'||l_project_id;
33437 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33438 END IF;
33439 --1.1 Get the task ids if these are null
33440 --WP TASK ID
33441 IF( (p_wp_task_id IS NULL OR p_wp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33442 AND
33443 (p_pm_wp_task_reference IS NOT NULL AND p_pm_wp_task_reference <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33444 )
33445 THEN
33446 --get the task id from task reference
33447 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all(
33448 p_pa_project_id => l_project_id
33449 ,p_structure_type => 'WORKPLAN'
33450 ,p_pm_task_reference => p_pm_wp_task_reference
33451 ,p_out_task_id => l_wp_task_id
33452 ,p_return_status => l_return_status);
33453
33454 x_return_status := l_return_status;
33455 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33456 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33457 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
33458 RAISE FND_API.G_EXC_ERROR;
33459 END IF;
33460
33461 ELSE
33462 l_wp_task_id := p_wp_task_id;
33463 END IF;
33464 --FP TASK ID
33465 IF(
33466 (p_fp_task_id IS NULL OR p_fp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33467 AND
33468 (p_pm_fp_task_reference IS NOT NULL AND p_pm_fp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33469 )
33470 THEN
33471 --get the task id from task reference
33472 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all(
33473 p_pa_project_id => l_project_id
33474 ,p_structure_type => 'FINANCIAL'
33475 ,p_pm_task_reference => p_pm_fp_task_reference
33476 ,p_out_task_id => l_fp_task_id
33477 ,p_return_status => l_return_status);
33478 x_return_status := l_return_status;
33479 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33480 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33481 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
33482 RAISE FND_API.G_EXC_ERROR;
33483 END IF;
33484 ELSE
33485 l_fp_task_id := p_fp_task_id;
33486 END IF;
33487 --1.2 Get the task version ids
33488 --1.2.1 get the wp structure version id
33489 IF (
33490 l_wp_task_id IS NOT NULL
33491 AND ( p_wp_structure_version_id IS NULL OR p_wp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33492 )
33493 THEN
33494
33495 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
33496 l_wp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
33497 IF (l_wp_structure_version_id = -1 OR l_wp_structure_version_id = NULL)
33498 THEN
33499 l_wp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
33500 END IF;
33501 END IF;
33502 ELSIF(p_wp_structure_version_id IS NOT NULL AND p_wp_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33503 THEN
33504 l_wp_structure_version_id :=p_wp_structure_version_id;
33505 END IF;
33506 --1.2.1.1 get the l_wp_task_version_id
33507 l_wp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
33508 (
33509 p_structure_version_id => l_wp_structure_version_id
33510 , p_task_id => l_wp_task_id
33511 );
33512
33513 --1.2.2 get the fp task version id, as there will be only one structure version for financial
33514 IF (l_fp_task_id IS NOT NULL) THEN
33515 open cur_get_fin_task_version_id (l_project_id, l_fp_task_id);
33516 fetch cur_get_fin_task_version_id into l_fp_task_version_id;
33517 close cur_get_fin_task_version_id ;
33518 END IF;
33519
33520
33521 ELSE
33522 l_wp_task_version_id := p_wp_task_version_id;
33523 l_fp_task_version_id := p_fp_task_version_id;
33524 END IF;
33525
33526
33527 --Calling Delete Mapping
33528 PA_PROJ_STRUC_MAPPING_PUB.DELETE_MAPPING
33529 (
33530 p_api_version => p_api_version
33531 , p_init_msg_list => FND_API.G_FALSE
33532 , p_commit => FND_API.G_FALSE--bug 3766967
33533 , p_debug_mode => p_debug_mode
33534 , p_wp_task_version_id => l_wp_task_version_id
33535 , p_fp_task_version_id => l_fp_task_version_id
33536 , p_calling_module => 'AMG' -- Bug 4142254
33537 , x_return_status => x_return_status
33538 , x_msg_count => l_msg_count
33539 , x_msg_data => l_msg_data
33540 );
33541 x_msg_count := l_msg_count;
33542 x_msg_data := l_msg_data;
33543
33544 IF p_debug_mode = 'Y' THEN
33545 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'DELETE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.DELETE_MAPPING:'||x_return_status;
33546 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33547 END IF;
33548
33549 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33550 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33551 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33552 RAISE FND_API.G_EXC_ERROR;
33553 END IF;
33554
33555 EXCEPTION
33556 WHEN FND_API.G_EXC_ERROR THEN
33557 ROLLBACK TO DELETE_MAPPING_PUB;
33558 x_return_status := FND_API.G_RET_STS_ERROR;
33559
33560 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
33561 ROLLBACK TO DELETE_MAPPING_PUB;
33562 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33563
33564 WHEN OTHERS THEN
33565 ROLLBACK TO DELETE_MAPPING_PUB;
33566 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33567
33568 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
33569 FND_MSG_PUB.add_exc_msg
33570 ( p_pkg_name => G_PKG_NAME
33571 , p_procedure_name => l_api_name );
33572 END IF;
33573
33574 END Delete_Mapping ;
33575 --------------------------------------------------------------------------------
33576 --Name: Create_Mapping
33577 --Type: Procedure
33578 --Description: This procedure creates a Mapping for the passed Wkp Task Id and Financial Task Id
33579 -- This program can be called as per following:
33580 --mapped_task_id mapped_task_ref mapped_task_name wkp_task_id wkp_task_name wkp_task_reference wkp_structure_ver_id Status
33581 -- y N N y N N N Valid
33582 -- N N Y N Y N Y Valid
33583 -- N Y N N N Y N Valid
33584 --
33585 --Called subprograms: PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING
33586
33587 --History:
33588 -- 24-Mar-2004 Ritesg Created
33589 --
33590
33591 PROCEDURE create_mapping
33592 ( p_api_version IN NUMBER := 1.0
33593 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
33594 , p_commit IN VARCHAR2 := FND_API.G_TRUE
33595 , p_debug_mode IN VARCHAR2 := 'N'
33596 , px_mapped_task_id IN NUMBER
33597 , p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33598 , p_mapped_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33599 , p_wkp_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33600 , p_wkp_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33601 , p_wkp_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33602 , p_wkp_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33603 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33604 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33605 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33606 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33607 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33608 )
33609
33610 IS
33611 l_project_id NUMBER;
33612
33613 l_wkp_task_id NUMBER;
33614 l_wkp_structure_version_id NUMBER;
33615 l_wkp_task_version_id NUMBER;
33616 l_wkp_task_name VARCHAR2(240);
33617
33618 l_mapped_task_id NUMBER;
33619 l_mapped_task_reference VARCHAR2(240);
33620 l_mapped_task_version_id NUMBER;
33621 l_mapped_task_name VARCHAR2(240);
33622
33623 l_msg_count NUMBER;
33624 l_msg_data VARCHAR2(2000);
33625 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_MAPPING';
33626
33627 l_debug_mode VARCHAR2(1);
33628 l_debug_level2 CONSTANT NUMBER := 2;
33629 l_debug_level3 CONSTANT NUMBER := 3;
33630 l_debug_level4 CONSTANT NUMBER := 4;
33631 l_debug_level5 CONSTANT NUMBER := 5;
33632
33633 --This cursor is based on assumption that a financial structure will have only one version in a project.
33634 CURSOR cur_get_mapped_task_version_id(p_project_id NUMBER, p_mapped_task_id NUMBER)
33635 is
33636 Select element_version_id
33637 from pa_proj_element_versions
33638 where proj_element_id = p_mapped_task_id
33639 and project_id = p_project_id
33640 and financial_task_flag = 'Y';
33641
33642 BEGIN
33643 -- Initialize the message table if requested.
33644 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
33645 FND_MSG_PUB.initialize;
33646 END IF;
33647
33648 IF (p_commit = FND_API.G_TRUE) THEN
33649 savepoint CREATE_MAPPING_PUB;
33650 END IF;
33651
33652 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
33653 IF l_debug_mode = 'Y' THEN
33654 PA_DEBUG.set_curr_function( p_function => 'CREATE_MAPPING',
33655 p_debug_mode => l_debug_mode );
33656 END IF;
33657
33658 IF l_debug_mode = 'Y' THEN
33659 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : Printing Input parameters';
33660 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33661 l_debug_level3);
33662 Pa_Debug.WRITE(g_pkg_name,'px_mapped_task_id'||':'||px_mapped_task_id,
33663 l_debug_level3);
33664 Pa_Debug.WRITE(g_pkg_name,'p_mapped_task_name'||':'||p_mapped_task_name,
33665 l_debug_level3);
33666 Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_id'||':'||p_wkp_task_id,
33667 l_debug_level3);
33668 Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_name'||':'||p_wkp_task_name,
33669 l_debug_level3);
33670 Pa_Debug.WRITE(g_pkg_name,'p_wkp_structure_version_id'||':'||p_wkp_structure_version_id,
33671 l_debug_level3);
33672 Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
33673 l_debug_level3);
33674 Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
33675 l_debug_level3);
33676 END IF;
33677 --Validate for input parameters
33678 IF l_debug_mode = 'Y' THEN
33679 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : Validating Input parameters';
33680 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33681 l_debug_level3);
33682 END IF;
33683
33684 IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
33685 AND
33686 (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33687 )
33688 THEN
33689 IF l_debug_mode = 'Y' THEN
33690 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving Project id should be passed';
33691 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33692 l_debug_level3);
33693 END IF;
33694 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33695 END IF;
33696
33697 IF (
33698 ( px_mapped_task_id IS NULL OR px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
33699 ( p_mapped_task_reference IS NULL OR p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
33700 ( p_mapped_task_name IS NULL OR p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33701 )
33702 THEN
33703 IF l_debug_mode = 'Y' THEN
33704 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving financial task version id should be passed';
33705 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33706 l_debug_level3);
33707 END IF;
33708 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33709 END IF;
33710
33711 IF (
33712 (p_wkp_task_id IS NULL OR p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
33713 (p_wkp_task_reference IS NULL OR p_wkp_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
33714 (p_wkp_task_name IS NULL OR p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
33715 )
33716 THEN
33717 IF l_debug_mode = 'Y' THEN
33718 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving workplan task version id should be passed';
33719 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
33720 l_debug_level3);
33721 END IF;
33722 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33723 END IF;
33724
33725
33726 -- Set API return status to success
33727 x_return_status := FND_API.G_RET_STS_SUCCESS;
33728
33729 IF p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33730 l_wkp_task_id := NULL;
33731 ELSE
33732 l_wkp_task_id := p_wkp_task_id;
33733 END IF;
33734
33735 IF px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33736 l_mapped_task_id := NULL;
33737 ELSE
33738 l_mapped_task_id := px_mapped_task_id;
33739 END IF;
33740
33741 IF p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
33742 l_mapped_task_reference := NULL;
33743 ELSE
33744 l_mapped_task_reference := p_mapped_task_reference;
33745 END IF;
33746
33747 IF p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
33748 l_wkp_task_name := NULL;
33749 ELSE
33750 l_wkp_task_name := p_wkp_task_name;
33751 END IF;
33752
33753 IF p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
33754 l_mapped_task_name := NULL;
33755 ELSE
33756 l_mapped_task_name := p_mapped_task_name;
33757 END IF;
33758
33759 IF p_wkp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33760 l_wkp_structure_version_id := NULL;
33761 ELSE
33762 l_wkp_structure_version_id := p_wkp_structure_version_id;
33763 END IF;
33764
33765 IF p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33766 l_project_id := NULL;
33767 ELSE
33768 l_project_id := p_project_id;
33769 END IF;
33770
33771 -- Get the task and Project details based on source reference passed
33772 IF (
33773 p_project_id IS NULL
33774 AND ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
33775 )
33776 THEN
33777 PA_PROJECT_PVT.Convert_pm_projref_to_id (
33778 p_pm_project_reference => p_proj_source_reference
33779 , p_pa_project_id => p_project_id
33780 , p_out_project_id => l_project_id
33781 , p_return_status => x_return_status
33782 );
33783 END IF;
33784
33785 IF p_debug_mode = 'Y' THEN
33786 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'Project ID:'||l_project_id;
33787 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33788 END IF;
33789
33790 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33791 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33792 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33793 RAISE FND_API.G_EXC_ERROR;
33794 END IF;
33795
33796 --Get the Wkp Task ID using Wkp Task Reference
33797 IF (
33798 (l_wkp_task_id IS NULL)
33799 AND
33800 (p_wkp_task_reference IS NOT NULL AND p_wkp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
33801 )
33802 THEN
33803 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
33804 p_pa_project_id => l_project_id
33805 , p_structure_type => 'WORKPLAN'
33806 , p_pm_task_reference => p_wkp_task_reference
33807 , p_out_task_id => l_wkp_task_id
33808 , p_return_status => x_return_status );
33809
33810 IF p_debug_mode = 'Y' THEN
33811 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'wkp_task_id:'||l_wkp_task_id;
33812 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33813 END IF;
33814
33815 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33816 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33817 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33818 RAISE FND_API.G_EXC_ERROR;
33819 END IF;
33820 END IF;
33821
33822 -- Get the mapped task Id based in mapped_task_reference
33823 IF ( l_mapped_task_id IS NULL
33824 AND
33825 l_mapped_task_reference IS NOT NULL
33826 )
33827 THEN
33828 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
33829 p_pa_project_id => l_project_id
33830 , p_structure_type => 'FINANCIAL'
33831 , p_pm_task_reference => p_mapped_task_reference
33832 , p_out_task_id => l_mapped_task_id
33833 , p_return_status => x_return_status );
33834
33835 --Assign mapped task_id to px_mapped_task_id as it is in out parameter
33836 IF p_debug_mode = 'Y' THEN
33837 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'mapped_task_id:'||l_mapped_task_id;
33838 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33839 END IF;
33840 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33841 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33842 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33843 RAISE FND_API.G_EXC_ERROR;
33844 END IF;
33845 END IF;
33846 --Get the task version id from Wkp task Id
33847 -- Avoid this call if wkp task name and wkp task version ids are passed
33848 IF (l_wkp_task_id IS NOT NULL AND l_wkp_structure_version_id IS NULL ) THEN
33849
33850 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
33851 l_wkp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
33852 IF (l_wkp_structure_version_id = -1 OR l_wkp_structure_version_id = NULL)
33853 THEN
33854 l_wkp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
33855 END IF;
33856 END IF;
33857 END IF;
33858 l_wkp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
33859 (
33860 p_structure_version_id => l_wkp_structure_version_id
33861 , p_task_id => l_wkp_task_id
33862 );
33863
33864
33865 --Get the financial task version id from financial task id,
33866 IF (l_mapped_task_id IS NOT NULL) THEN
33867 open cur_get_mapped_task_version_id (l_project_id, l_mapped_task_id);
33868 fetch cur_get_mapped_task_version_id into l_mapped_task_version_id;
33869 close cur_get_mapped_task_version_id ;
33870 END IF;
33871 IF p_debug_mode = 'Y' THEN
33872 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'Before Calling PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING:';
33873 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33874 END IF;
33875
33876
33877 -- All other validations done in PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
33878 -- call PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING here only
33879
33880 PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING
33881 (
33882 p_api_version => p_api_version
33883 , p_init_msg_list => FND_API.G_FALSE
33884 , p_calling_module => 'AMG'
33885 , p_commit => FND_API.G_FALSE--bug 3766967
33886 , p_debug_mode => p_debug_mode
33887 , p_wp_task_name => l_wkp_task_name
33888 , p_wp_task_version_id => l_wkp_task_version_id
33889 , p_parent_str_version_id => l_wkp_structure_version_id
33890 , p_fp_task_version_id => l_mapped_task_version_id
33891 , p_fp_task_name => l_mapped_task_name
33892 , p_project_id => l_project_id
33893 , x_return_status => x_return_status
33894 , x_msg_count => l_msg_count
33895 , x_msg_data => l_msg_data
33896 );
33897 x_msg_count := l_msg_count;
33898 x_msg_data := l_msg_data;
33899
33900 IF p_debug_mode = 'Y' THEN
33901 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING:'||x_return_status;
33902 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
33903 END IF;
33904
33905 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33906 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33907 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33908 RAISE FND_API.G_EXC_ERROR;
33909 END IF;
33910
33911 EXCEPTION
33912 WHEN FND_API.G_EXC_ERROR THEN
33913 IF (p_commit = FND_API.G_TRUE) THEN
33914 ROLLBACK TO CREATE_MAPPING_PUB;
33915 END IF;
33916 x_return_status := FND_API.G_RET_STS_ERROR;
33917
33918 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
33919 IF (p_commit = FND_API.G_TRUE) THEN
33920 ROLLBACK TO CREATE_MAPPING_PUB;
33921 END IF;
33922 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33923
33924 WHEN OTHERS THEN
33925 IF (p_commit = FND_API.G_TRUE) THEN
33926 ROLLBACK TO CREATE_MAPPING_PUB;
33927 END IF;
33928 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33929
33930 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
33931 FND_MSG_PUB.add_exc_msg
33932 ( p_pkg_name => G_PKG_NAME
33933 , p_procedure_name => l_api_name );
33934 END IF;
33935 END create_mapping;
33936 --------------------------------------------------------------------------------
33937 --Name: Update_Mapping
33938 --Type: Procedure
33939 --Description: This procedure creates a Mapping for the passed Wkp Task Id and Financial Task Id
33940 -- This program can be called as per following:
33941 --mapped_task_id mapped_task_ref mapped_task_name wkp_task_id wkp_task_name wkp_task_reference wkp_structure_ver_id Status
33942 -- y N N y N N N Valid
33943 -- N N Y N Y N Y Valid
33944 -- N Y N N N Y N Valid
33945 --
33946 --Called subprograms: PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
33947
33948 --History:
33949 -- 24-Mar-2004 Ritesg Created
33950 --
33951
33952 PROCEDURE update_mapping
33953 ( p_api_version IN NUMBER := 1.0
33954 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
33955 , p_commit IN VARCHAR2 := FND_API.G_TRUE
33956 , p_debug_mode IN VARCHAR2 := 'N'
33957 , px_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33958 , p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33959 , p_mapped_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33960 , p_wkp_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33961 , p_wkp_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33962 , p_wkp_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33963 , p_wkp_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33964 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33965 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33966 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33967 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33968 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33969 )
33970
33971 IS
33972 l_project_id NUMBER;
33973
33974 l_wkp_task_id NUMBER;
33975 l_wkp_structure_version_id NUMBER;
33976 l_wkp_task_version_id NUMBER;
33977 l_wkp_task_name VARCHAR2(240);
33978
33979 l_mapped_task_id NUMBER;
33980 l_mapped_task_reference VARCHAR2(240);
33981 l_mapped_task_version_id NUMBER;
33982 l_mapped_task_name VARCHAR2(240);
33983
33984 l_msg_count NUMBER;
33985 l_msg_data VARCHAR2(2000);
33986 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_MAPPING';
33987
33988 l_return_status VARCHAR2(1);
33989 l_debug_mode VARCHAR2(1);
33990 l_debug_level2 CONSTANT NUMBER := 2;
33991 l_debug_level3 CONSTANT NUMBER := 3;
33992 l_debug_level4 CONSTANT NUMBER := 4;
33993 l_debug_level5 CONSTANT NUMBER := 5;
33994
33995 --This cursor is based on assumption that a financial structure will have only one version in a project.
33996 CURSOR cur_get_mapped_task_version_id(p_project_id NUMBER, p_mapped_task_id NUMBER)
33997 is
33998 Select element_version_id
33999 from pa_proj_element_versions
34000 where proj_element_id = p_mapped_task_id
34001 and project_id = p_project_id
34002 and financial_task_flag = 'Y';
34003
34004 BEGIN
34005 -- Initialize the message table if requested.
34006 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
34007 FND_MSG_PUB.initialize;
34008 END IF;
34009
34010 IF (p_commit = FND_API.G_TRUE) THEN
34011 savepoint UPDATE_MAPPING_PUB;
34012 END IF;
34013
34014 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34015 IF l_debug_mode = 'Y' THEN
34016 PA_DEBUG.set_curr_function( p_function => 'UPDATE_MAPPING',
34017 p_debug_mode => l_debug_mode );
34018 END IF;
34019
34020 IF l_debug_mode = 'Y' THEN
34021 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : Printing Input parameters';
34022 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34023 l_debug_level3);
34024 Pa_Debug.WRITE(g_pkg_name,'px_mapped_task_id'||':'||px_mapped_task_id,
34025 l_debug_level3);
34026 Pa_Debug.WRITE(g_pkg_name,'p_mapped_task_name'||':'||p_mapped_task_name,
34027 l_debug_level3);
34028 Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_id'||':'||p_wkp_task_id,
34029 l_debug_level3);
34030 Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_name'||':'||p_wkp_task_name,
34031 l_debug_level3);
34032 Pa_Debug.WRITE(g_pkg_name,'p_wkp_structure_version_id'||':'||p_wkp_structure_version_id,
34033 l_debug_level3);
34034 Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34035 l_debug_level3);
34036 Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34037 l_debug_level3);
34038 END IF;
34039 --Validate for input parameters
34040 IF l_debug_mode = 'Y' THEN
34041 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : Validating Input parameters';
34042 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34043 l_debug_level3);
34044 END IF;
34045
34046 IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34047 AND
34048 (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34049 )
34050 THEN
34051 IF l_debug_mode = 'Y' THEN
34052 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : At least one of the parameters for deriving Project id should be passed';
34053 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34054 l_debug_level3);
34055 END IF;
34056 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34057 END IF;
34058
34059
34060 IF (
34061 (p_wkp_task_id IS NULL OR p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34062 AND
34063 (p_wkp_task_reference IS NULL OR p_wkp_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34064 AND
34065 ( p_wkp_task_name IS NULL OR p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34066 )
34067 THEN
34068 IF l_debug_mode = 'Y' THEN
34069 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : At least one of the parameters for deriving workplan task version id should be passed';
34070 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34071 l_debug_level3);
34072 END IF;
34073 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34074 END IF;
34075
34076
34077 -- Set API return status to success
34078 x_return_status := FND_API.G_RET_STS_SUCCESS;
34079
34080 IF p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34081 l_wkp_task_id := NULL;
34082 ELSE
34083 l_wkp_task_id := p_wkp_task_id;
34084 END IF;
34085
34086 IF px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34087 l_mapped_task_id := NULL;
34088 ELSE
34089 l_mapped_task_id := px_mapped_task_id;
34090 END IF;
34091
34092 IF p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34093 l_mapped_task_reference := NULL;
34094 ELSE
34095 l_mapped_task_reference := p_mapped_task_reference;
34096 END IF;
34097
34098 IF p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34099 l_wkp_task_name := NULL;
34100 ELSE
34101 l_wkp_task_name := p_wkp_task_name;
34102 END IF;
34103
34104 IF p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34105 l_mapped_task_name := NULL;
34106 ELSE
34107 l_mapped_task_name := p_mapped_task_name;
34108 END IF;
34109
34110 IF p_wkp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34111 l_wkp_structure_version_id := NULL;
34112 ELSE
34113 l_wkp_structure_version_id := p_wkp_structure_version_id;
34114 END IF;
34115
34116 IF p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34117 l_project_id := NULL;
34118 ELSE
34119 l_project_id := p_project_id;
34120 END IF;
34121 -- Get the task and Project details based on source reference passed
34122 IF (
34123 ( p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34124 AND
34125 ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34126 )
34127 THEN
34128 PA_PROJECT_PVT.Convert_pm_projref_to_id (
34129 p_pm_project_reference => p_proj_source_reference
34130 , p_pa_project_id => p_project_id
34131 , p_out_project_id => l_project_id
34132 , p_return_status => x_return_status
34133 );
34134 END IF;
34135
34136 IF p_debug_mode = 'Y' THEN
34137 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'Project ID:'||l_project_id;
34138 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34139 END IF;
34140
34141 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34142 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34143 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34144 RAISE FND_API.G_EXC_ERROR;
34145 END IF;
34146 --Get the Wkp Task ID using Wkp Task Reference
34147 IF ( l_wkp_task_id IS NULL
34148 AND
34149 (p_wkp_task_reference IS NOT NULL AND p_wkp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34150 )
34151 THEN
34152 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34153 p_pa_project_id => l_project_id
34154 , p_structure_type => 'WORKPLAN'
34155 , p_pm_task_reference => p_wkp_task_reference
34156 , p_out_task_id => l_wkp_task_id
34157 , p_return_status => x_return_status );
34158
34159 IF p_debug_mode = 'Y' THEN
34160 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'wkp_task_id:'||l_wkp_task_id;
34161 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34162 END IF;
34163
34164 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
34165 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34166 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
34167 RAISE FND_API.G_EXC_ERROR;
34168 END IF;
34169 END IF;
34170
34171 -- Get the mapped task Id based in mapped_task_reference
34172 IF ( l_mapped_task_id IS NULL
34173 AND
34174 (l_mapped_task_reference IS NOT NULL AND l_mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34175 )
34176 THEN
34177 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34178 p_pa_project_id => l_project_id
34179 , p_structure_type => 'FINANCIAL'
34180 , p_pm_task_reference => p_mapped_task_reference
34181 , p_out_task_id => l_mapped_task_id
34182 , p_return_status => x_return_status );
34183
34184 IF p_debug_mode = 'Y' THEN
34185 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'mapped_task_id:'||l_mapped_task_id;
34186 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34187 END IF;
34188 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
34189 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34190 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
34191 RAISE FND_API.G_EXC_ERROR;
34192 END IF;
34193 END IF;
34194
34195 --Get the task version id from Wkp task Id
34196 -- Avoid this call if wkp task name and wkp task version ids are passed
34197 IF (l_wkp_task_id IS NOT NULL AND l_wkp_structure_version_id IS NULL ) THEN
34198 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
34199 l_wkp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
34200 IF (l_wkp_structure_version_id IS NULL OR l_wkp_structure_version_id = -1) THEN
34201 l_wkp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
34202 END IF;
34203 END IF;
34204 END IF;
34205 l_wkp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
34206 (
34207 p_structure_version_id => l_wkp_structure_version_id
34208 , p_task_id => l_wkp_task_id
34209 );
34210 --Get the financial task version id from financial task id,
34211 IF (l_mapped_task_id IS NOT NULL) THEN
34212 open cur_get_mapped_task_version_id (l_project_id, l_mapped_task_id);
34213 fetch cur_get_mapped_task_version_id into l_mapped_task_version_id;
34214 close cur_get_mapped_task_version_id ;
34215
34216 END IF;
34217
34218 IF p_debug_mode = 'Y' THEN
34219 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'Before Calling PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING:';
34220 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34221 END IF;
34222
34223
34224 -- All other validations done in PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34225 -- call PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING here only
34226
34227 PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34228 (
34229 p_api_version => p_api_version
34230 , p_calling_module => 'AMG'
34231 , p_init_msg_list => FND_API.G_FALSE
34232 , p_commit => FND_API.G_FALSE--bug 3766967
34233 , p_debug_mode => p_debug_mode
34234 , p_project_id => l_project_id
34235 , p_wp_task_name => l_wkp_task_name
34236 , p_wp_prnt_str_ver_id => l_wkp_structure_version_id
34237 , p_wp_task_version_id => l_wkp_task_version_id
34238 , p_fp_task_name => l_mapped_task_name
34239 , p_fp_task_version_id => l_mapped_task_version_id
34240 , x_return_status => l_return_status
34241 , x_msg_count => x_msg_count
34242 , x_msg_data => x_msg_data
34243 );
34244
34245 x_msg_count := l_msg_count;
34246 x_msg_data := l_msg_data;
34247
34248 IF p_debug_mode = 'Y' THEN
34249 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING:'||x_return_status;
34250 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34251 END IF;
34252
34253 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34254 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34255 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34256 RAISE FND_API.G_EXC_ERROR;
34257 END IF;
34258
34259 EXCEPTION
34260 WHEN FND_API.G_EXC_ERROR THEN
34261 IF (p_commit = FND_API.G_TRUE) THEN
34262 ROLLBACK TO UPDATE_MAPPING_PUB;
34263 END IF;
34264 x_return_status := FND_API.G_RET_STS_ERROR;
34265
34266 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34267 IF (p_commit = FND_API.G_TRUE) THEN
34268 ROLLBACK TO UPDATE_MAPPING_PUB;
34269 END IF;
34270 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34271
34272 WHEN OTHERS THEN
34273 IF (p_commit = FND_API.G_TRUE) THEN
34274 ROLLBACK TO UPDATE_MAPPING_PUB;
34275 END IF;
34276 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34277
34278 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
34279 FND_MSG_PUB.add_exc_msg
34280 ( p_pkg_name => G_PKG_NAME
34281 , p_procedure_name => l_api_name );
34282 END IF;
34283 END UPDATE_MAPPING;
34284 --------------------------------------------------------------------------------
34285 --Name: process_tasks_table
34286 --Type: Procedure
34287
34288 --History:
34289 -- 24-Mar-2004 Ritesh Created
34290 --
34291
34292 PROCEDURE process_tasks_table
34293 ( p_api_version IN NUMBER := 1.0
34294 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
34295 , p_debug_mode IN VARCHAR2 := 'N'
34296 , p_structure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34297 , p_tasks_in_tbl IN OUT NOCOPY task_in_tbl_type /*Added the nocopy check for 4537865 */
34298 -- , p_tasks_out_tbl OUT task_in_tbl_type
34299 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34300 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34301 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34302 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
34303 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34304 )
34305
34306 IS
34307 l_project_id NUMBER;
34308 l_proj_share_type VARCHAR2(240);
34309 iCounter NUMBER := 0;
34310 last_financial_flag VARCHAR2(1) := NULL;
34311 last_wbs_level NUMBER := -1;
34312 l_task_rec task_in_rec_type;
34313 l_msg_count NUMBER;
34314 l_msg_data VARCHAR2(2000);
34315 l_api_name CONSTANT VARCHAR2(30) := 'PROCESS_TASK_TABLE';
34316
34317 l_return_status VARCHAR2(1);
34318 l_debug_mode VARCHAR2(1);
34319 l_debug_level2 CONSTANT NUMBER := 2;
34320 l_debug_level3 CONSTANT NUMBER := 3;
34321 l_debug_level4 CONSTANT NUMBER := 4;
34322 l_debug_level5 CONSTANT NUMBER := 5;
34323
34324 BEGIN
34325 --Initialize the message table if requested.
34326 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
34327 FND_MSG_PUB.initialize;
34328 END IF;
34329
34330 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34331 IF l_debug_mode = 'Y' THEN
34332 PA_DEBUG.set_curr_function( p_function => 'PROCESS_TASK_TABLE',
34333 p_debug_mode => l_debug_mode );
34334 END IF;
34335
34336 IF l_debug_mode = 'Y' THEN
34337 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Printing Input parameters';
34338 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34339 l_debug_level3);
34340 Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34341 l_debug_level3);
34342 Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34343 l_debug_level3);
34344 END IF;
34345 --Validate for input parameters
34346 IF l_debug_mode = 'Y' THEN
34347 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Validating Input parameters';
34348 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34349 l_debug_level3);
34350 END IF;
34351
34352 IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34353 AND
34354 (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34355 )
34356 THEN
34357 IF l_debug_mode = 'Y' THEN
34358 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : At least one of the parameters for deriving Project id should be passed';
34359 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34360 l_debug_level3);
34361 END IF;
34362 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34363 END IF;
34364
34365 IF ( p_tasks_in_tbl IS NULL OR p_tasks_in_tbl.count <= 0 )
34366 THEN
34367 IF l_debug_mode = 'Y' THEN
34368 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Empty or NULL Task Table';
34369 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34370 l_debug_level3);
34371 END IF;
34372 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34373 END IF;
34374
34375
34376
34377 -- Set API return status to success
34378 x_return_status := FND_API.G_RET_STS_SUCCESS;
34379
34380
34381 -- Get the task and Project details based on source reference passed
34382 IF (p_project_id IS NULL AND p_proj_source_reference IS NOT NULL ) THEN
34383 PA_PROJECT_PVT.Convert_pm_projref_to_id (
34384 p_pm_project_reference => p_proj_source_reference
34385 , p_pa_project_id => p_project_id
34386 , p_out_project_id => l_project_id
34387 , p_return_status => x_return_status
34388 );
34389 END IF;
34390
34391 IF p_debug_mode = 'Y' THEN
34392 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'PROCESS_TASK_TABLE'||'Project ID:'||l_project_id;
34393 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34394 END IF;
34395
34396 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34397 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34398 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34399 RAISE FND_API.G_EXC_ERROR;
34400 END IF;
34401 -- Get the project sharing type
34402 l_proj_share_type := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
34403 IF (l_proj_share_type = 'SHARE_PARTIAL' and p_structure_type = 'FINANCIAL')
34404 THEN
34405 FOR iCounter IN REVERSE p_tasks_in_tbl.FIRST..p_tasks_in_tbl.LAST LOOP
34406 l_task_rec := p_tasks_in_tbl(iCounter);
34407
34408 IF (iCounter <> p_tasks_in_tbl.LAST OR last_wbs_level <> 1)
34409 THEN
34410 --If not the summary task and not at the same level as the last task, set flag as 'Y', if lower task is 'Y'
34411 IF (l_task_rec.wbs_level <> last_wbs_level )
34412 THEN
34413 l_task_rec.financial_task_flag := last_financial_flag;
34414 END IF;
34415
34416 END IF;
34417
34418 IF (l_task_rec.financial_task_flag IS NOT NULL)
34419 THEN
34420 IF(
34421 l_task_rec.wbs_level = last_wbs_level
34422 and
34423 last_financial_flag = 'Y'
34424 and
34425 l_task_rec.financial_task_flag = 'N'
34426 )
34427 THEN
34428 NULL;
34429 ELSE
34430 last_financial_flag := l_task_rec.financial_task_flag;
34431 END IF;
34432 ELSE
34433 last_financial_flag := 'N';
34434 END IF;
34435
34436 last_wbs_level := l_task_rec.wbs_level;
34437 --p_tasks_out_tbl(iCounter):= l_task_rec;
34438 END LOOP;
34439
34440 END IF;
34441
34442 EXCEPTION
34443 WHEN FND_API.G_EXC_ERROR THEN
34444
34445 x_return_status := FND_API.G_RET_STS_ERROR;
34446
34447 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34448
34449 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34450
34451 WHEN OTHERS THEN
34452
34453 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34454
34455 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
34456 FND_MSG_PUB.add_exc_msg
34457 ( p_pkg_name => G_PKG_NAME
34458 , p_procedure_name => l_api_name );
34459 END IF;
34460 END process_tasks_table;
34461 --End Add by rtarway for FP.M Development
34462
34463 --added by hsiu
34464 --
34465 PROCEDURE Create_Dependency(
34466 p_api_version_number IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34467 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
34468 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
34469 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
34470 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34471 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34472 ,p_pm_product_code IN VARCHAR2
34473 ,p_pm_project_reference IN VARCHAR2
34474 ,p_pa_project_id IN NUMBER
34475 ,p_structure_version_id IN NUMBER
34476 ,p_pm_task_reference IN VARCHAR2
34477 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34478 ,p_pm_pred_reference IN VARCHAR2
34479 ,p_pa_pred_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34480 ,p_type IN VARCHAR2 := 'FS'
34481 ,p_lag_days IN NUMBER := 0
34482 ,p_comments IN VARCHAR2 := NULL
34483 )
34484 IS
34485 l_msg_count NUMBER;
34486 l_msg_data VARCHAR2(250);
34487 l_return_status VARCHAR2(1);
34488 l_project_id NUMBER;
34489 l_task_ver_id NUMBER;
34490 l_pred_ver_id NUMBER;
34491 l_template_flag VARCHAR2(1);
34492 l_wp_status VARCHAR2(150);
34493 l_versioning VARCHAR2(1);
34494
34495 -- CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER) --Bug 3735799
34496 CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2) --Bug 3735799
34497 IS
34498 select ppev.element_version_id
34499 from pa_proj_elements ppe, pa_proj_element_versions ppev
34500 where ppe.project_id = c_project_id
34501 and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
34502 and ppe.project_id = ppev.project_Id
34503 and ppe.proj_element_id = ppev.proj_element_id
34504 and ppev.parent_structure_version_id = p_structure_version_id;
34505
34506 CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER) --Bug 3880403
34507 IS
34508 select ppev.element_version_id
34509 from pa_proj_elements ppe, pa_proj_element_versions ppev
34510 where ppe.project_id = c_project_id
34511 and ppe.proj_element_id = c_task_id
34512 and ppe.project_id = ppev.project_Id
34513 and ppe.proj_element_id = ppev.proj_element_id
34514 and ppev.parent_structure_version_id = p_structure_version_id;
34515
34516 CURSOR get_template_flag(c_project_id NUMBER)
34517 IS
34518 select template_flag
34519 from pa_projects_all
34520 where project_id = c_project_id;
34521
34522 CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
34523 IS
34524 select STATUS_CODE
34525 from pa_proj_elem_ver_structure
34526 where project_id = c_project_id
34527 and element_version_id = c_structure_version_id;
34528 BEGIN
34529 savepoint create_dep_pub_amg;
34530
34531 IF FND_API.TO_BOOLEAN( p_init_msg_list )
34532 THEN
34533 FND_MSG_PUB.Initialize;
34534 END IF;
34535
34536 --get project id
34537 PA_PROJECT_PVT.Convert_pm_projref_to_id
34538 ( p_pm_project_reference => p_pm_project_reference
34539 , p_pa_project_id => p_pa_project_id
34540 , p_out_project_id => l_project_id
34541 , p_return_status => l_return_status
34542 );
34543
34544 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34545 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34546 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
34547 RAISE FND_API.G_EXC_ERROR;
34548 END IF;
34549 --
34550 --Bug 3768875
34551 If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
34552 If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
34553 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34554 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
34555 RAISE FND_API.G_EXC_ERROR;
34556 End If;
34557 Else
34558 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34559 p_msg_name => 'PA_INV_PROJECT_ID');
34560 RAISE FND_API.G_EXC_ERROR;
34561 End If;
34562 --
34563 --check if structure version can be modified
34564 OPEN get_template_flag(l_project_id);
34565 FETCH get_template_flag into l_template_flag;
34566 CLOSE get_template_flag;
34567
34568 l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
34569
34570 --if template, then ok
34571 IF l_template_flag = 'N' THEN
34572 --project, check if versioning is enabled
34573 -- ok if versioning is disabled
34574 IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
34575 -- if versioning enabled, ok if working
34576 OPEN get_workplan_status(l_project_id, p_structure_version_id);
34577 FETCH get_workplan_status into l_wp_status;
34578 CLOSE get_workplan_status;
34579 IF l_wp_status <> 'STRUCTURE_WORKING' THEN
34580 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34581 p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
34582 RAISE FND_API.G_EXC_ERROR;
34583 END IF;
34584 ELSE
34585 IF (l_versioning IS NULL) THEN
34586 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34587 p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
34588 RAISE FND_API.G_EXC_ERROR;
34589 END IF;
34590 END IF;
34591 END IF;
34592
34593 --get task id
34594 IF (p_pm_task_reference IS NOT NULL) THEN
34595 open get_task_ver_id(l_project_id, p_pm_task_reference);
34596 Fetch get_task_ver_id into l_task_ver_id;
34597 -- Bug 3768875
34598 IF get_task_ver_id%NOTFOUND THEN
34599 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34600 p_msg_name => 'PA_PS_INV_TASK_ID');
34601 CLOSE get_task_ver_id;
34602 RAISE FND_API.G_EXC_ERROR;
34603 END IF;
34604 CLOSE get_task_ver_id;
34605 END IF;
34606
34607 --bug 3880403
34608 IF (p_pm_task_reference IS NULL OR l_task_ver_id IS NULL) THEN
34609 --need to get id using task id
34610 OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
34611 FETCH get_task_Ver_id2 into l_task_ver_id;
34612 IF get_task_ver_id2%NOTFOUND THEN
34613 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34614 p_msg_name => 'PA_PS_INV_TASK_ID');
34615 CLOSE get_task_ver_id2;
34616 RAISE FND_API.G_EXC_ERROR;
34617 END IF;
34618 CLOSE get_task_ver_id2;
34619 END IF;
34620 --end bug 3880403
34621 --
34622 --get predecessor id
34623 IF (p_pm_pred_reference IS NOT NULL) THEN
34624 open get_task_ver_id(l_project_id, p_pm_pred_reference);
34625 Fetch get_task_ver_id into l_pred_ver_id;
34626 --Bug 3768875
34627 IF get_task_ver_id%NOTFOUND THEN
34628 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34629 p_msg_name => 'PA_PS_INV_TASK_ID');
34630 CLOSE get_task_ver_id;
34631 RAISE FND_API.G_EXC_ERROR;
34632 END IF;
34633 CLOSE get_task_ver_id;
34634 END IF;
34635
34636 --bug 3880403
34637 IF (p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL) THEN
34638 --need to get id using task id
34639 OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
34640 FETCH get_task_Ver_id2 into l_pred_ver_id;
34641 IF get_task_ver_id2%NOTFOUND THEN
34642 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34643 p_msg_name => 'PA_PS_INV_TASK_ID');
34644 CLOSE get_task_ver_id2;
34645 RAISE FND_API.G_EXC_ERROR;
34646 END IF;
34647 CLOSE get_task_ver_id2;
34648 END IF;
34649 --end bug 3880403
34650 --
34651 -- Bug 3768933 Validating the relationship_subtype
34652 IF PA_PROJ_ELEMENTS_UTILS.check_pa_lookup_exists('PA_OBJECT_DEPENDENCY_TYPES',p_type) <> 'Y' THEN
34653 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34654 p_msg_name => 'PA_PS_INV_REL_SUBTYPE_VAL');
34655 RAISE FND_API.G_EXC_ERROR;
34656 END IF;
34657 --
34658 --call existing create dependency API to create intra dependency
34659 PA_RELATIONSHIP_PVT.Create_Dependency(
34660 p_calling_module => 'SELF_SERVICE'
34661 ,p_src_proj_id => l_project_id
34662 ,p_src_task_ver_id => l_task_ver_id
34663 ,p_dest_proj_id => l_project_id
34664 ,p_dest_task_ver_id => l_pred_ver_id
34665 ,p_type => p_type
34666 ,p_lag_days => p_lag_days
34667 ,p_comments => p_comments
34668 ,x_return_status => p_return_status
34669 ,x_msg_count => p_msg_count
34670 ,x_msg_data => p_msg_data
34671 );
34672
34673 IF p_msg_count > 0 THEN
34674 RAISE FND_API.G_EXC_ERROR;
34675 END IF;
34676
34677 p_return_status := FND_API.G_RET_STS_SUCCESS;
34678
34679 EXCEPTION
34680 WHEN FND_API.G_EXC_ERROR THEN
34681 ROLLBACK TO create_dep_pub_amg;
34682 p_return_status := FND_API.G_RET_STS_ERROR;
34683
34684 -- Begin fix for Bug # 4323969.
34685
34686 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
34687 , p_data => p_msg_data);
34688
34689 -- End fix for Bug # 4323969.
34690
34691 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34692 ROLLBACK TO create_dep_pub_amg;
34693 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34694
34695 -- Begin fix for Bug # 4323969.
34696
34697 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
34698 , p_data => p_msg_data);
34699
34700 -- End fix for Bug # 4323969.
34701
34702 When OTHERS then
34703 ROLLBACK TO create_dep_pub_amg;
34704 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34705
34706 -- Begin fix for Bug # 4323969.
34707
34708 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
34709 , p_data => p_msg_data);
34710
34711 -- End fix for Bug # 4323969.
34712
34713 END Create_Dependency;
34714
34715
34716
34717 PROCEDURE Update_Dependency(
34718 p_api_version_number IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34719 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
34720 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
34721 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
34722 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34723 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34724 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34725 ,p_pm_project_reference IN VARCHAR2
34726 ,p_pa_project_id IN NUMBER
34727 ,p_structure_version_id IN NUMBER
34728 ,p_pm_task_reference IN VARCHAR2
34729 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34730 ,p_pm_pred_reference IN VARCHAR2
34731 ,p_pa_pred_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34732 ,p_type IN VARCHAR2 := 'FS'
34733 ,p_lag_days IN NUMBER := 0
34734 ,p_comments IN VARCHAR2 := NULL
34735 )
34736 IS
34737 l_return_status VARCHAR2(1);
34738 l_project_id NUMBER;
34739 l_task_ver_id NUMBER;
34740 l_pred_ver_id NUMBER;
34741 l_template_flag VARCHAR2(1);
34742 l_wp_status VARCHAR2(150);
34743 l_versioning VARCHAR2(1);
34744 l_record_version_number NUMBER;
34745
34746 -- CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER) --Bug 3735799
34747 CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2) --Bug 3735799
34748 IS
34749 select ppev.element_version_id
34750 from pa_proj_elements ppe, pa_proj_element_versions ppev
34751 where ppe.project_id = c_project_id
34752 and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
34753 and ppe.project_id = ppev.project_Id
34754 and ppe.proj_element_id = ppev.proj_element_id
34755 and ppev.parent_structure_version_id = p_structure_version_id;
34756
34757 CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER) --Bug 3880403
34758 IS
34759 select ppev.element_version_id
34760 from pa_proj_elements ppe, pa_proj_element_versions ppev
34761 where ppe.project_id = c_project_id
34762 and ppe.proj_element_id = c_task_id
34763 and ppe.project_id = ppev.project_Id
34764 and ppe.proj_element_id = ppev.proj_element_id
34765 and ppev.parent_structure_version_id = p_structure_version_id;
34766
34767 CURSOR get_template_flag(c_project_id NUMBER)
34768 IS
34769 select template_flag
34770 from pa_projects_all
34771 where project_id = c_project_id;
34772
34773 CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
34774 IS
34775 select STATUS_CODE
34776 from pa_proj_elem_ver_structure
34777 where project_id = c_project_id
34778 and element_version_id = c_structure_version_id;
34779
34780 CURSOR get_rvn(c_id_from NUMBER, c_id_to NUMBER) IS
34781 SELECT record_version_number
34782 FROM pa_object_relationships
34783 WHERE object_id_to1 = c_id_to
34784 AND object_id_from1 = c_id_from
34785 AND relationship_type = 'D';
34786 BEGIN
34787 savepoint update_dep_pub_amg;
34788
34789 IF FND_API.TO_BOOLEAN( p_init_msg_list )
34790 THEN
34791 FND_MSG_PUB.Initialize;
34792 END IF;
34793
34794 --get project id
34795 PA_PROJECT_PVT.Convert_pm_projref_to_id
34796 ( p_pm_project_reference => p_pm_project_reference
34797 , p_pa_project_id => p_pa_project_id
34798 , p_out_project_id => l_project_id
34799 , p_return_status => l_return_status
34800 );
34801
34802 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34803 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34804 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
34805 RAISE FND_API.G_EXC_ERROR;
34806 END IF;
34807 --
34808 --Bug 3769089
34809 If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
34810 If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
34811 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34812 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
34813
34814 RAISE FND_API.G_EXC_ERROR;
34815 End If;
34816 Else
34817 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34818 p_msg_name => 'PA_INV_PROJECT_ID');
34819 RAISE FND_API.G_EXC_ERROR;
34820 End If;
34821 --
34822 --
34823 --check if structure version can be modified
34824 OPEN get_template_flag(l_project_id);
34825 FETCH get_template_flag into l_template_flag;
34826 CLOSE get_template_flag;
34827
34828 l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
34829
34830 --if template, then ok
34831 IF l_template_flag = 'N' THEN
34832 --project, check if versioning is enabled
34833 -- ok if versioning is disabled
34834 IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
34835 -- if versioning enabled, ok if working
34836 OPEN get_workplan_status(l_project_id, p_structure_version_id);
34837 FETCH get_workplan_status into l_wp_status;
34838 CLOSE get_workplan_status;
34839 IF l_wp_status <> 'STRUCTURE_WORKING' THEN
34840 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34841 p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
34842 RAISE FND_API.G_EXC_ERROR;
34843 END IF;
34844 ELSE
34845 IF (l_versioning IS NULL) THEN
34846 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34847 p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
34848 RAISE FND_API.G_EXC_ERROR;
34849 END IF;
34850 END IF;
34851 END IF;
34852
34853 --get task id
34854 IF p_pm_task_reference IS NOT NULL THEN
34855 open get_task_ver_id(l_project_id, p_pm_task_reference);
34856 Fetch get_task_ver_id into l_task_ver_id;
34857 --Bug 3769089
34858 IF get_task_ver_id%NOTFOUND THEN
34859 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34860 p_msg_name => 'PA_PS_INV_TASK_ID');
34861 CLOSE get_task_ver_id;
34862 RAISE FND_API.G_EXC_ERROR;
34863 END IF;
34864 CLOSE get_task_ver_id;
34865 END IF;
34866
34867 --bug 3880403
34868 IF p_pm_task_reference IS NULL OR l_task_ver_id IS NULL THEN
34869 --need to get id using task id
34870 OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
34871 FETCH get_task_Ver_id2 into l_task_ver_id;
34872 IF get_task_ver_id2%NOTFOUND THEN
34873 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34874 p_msg_name => 'PA_PS_INV_TASK_ID');
34875 CLOSE get_task_ver_id2;
34876 RAISE FND_API.G_EXC_ERROR;
34877 END IF;
34878 CLOSE get_task_ver_id2;
34879 END IF;
34880 --end bug 3880403
34881
34882
34883 --get predecessor id
34884 IF (p_pm_pred_reference IS NOT NULL) THEN
34885 open get_task_ver_id(l_project_id, p_pm_pred_reference);
34886 Fetch get_task_ver_id into l_pred_ver_id;
34887 --Bug 3769089
34888 IF get_task_ver_id%NOTFOUND THEN
34889 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34890 p_msg_name => 'PA_PS_INV_TASK_ID');
34891 CLOSE get_task_ver_id;
34892 RAISE FND_API.G_EXC_ERROR;
34893 END IF;
34894 CLOSE get_task_ver_id;
34895 END IF;
34896
34897 --bug 3880403
34898 IF p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL THEN
34899 --need to get id using task id
34900 OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
34901 FETCH get_task_Ver_id2 into l_pred_ver_id;
34902 IF get_task_ver_id2%NOTFOUND THEN
34903 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34904 p_msg_name => 'PA_PS_INV_TASK_ID');
34905 CLOSE get_task_ver_id2;
34906 RAISE FND_API.G_EXC_ERROR;
34907 END IF;
34908 CLOSE get_task_ver_id2;
34909 END IF;
34910 --end bug 3880403
34911
34912 --
34913 --get record version number
34914 open get_rvn(l_task_ver_id, l_pred_ver_id);
34915 FETCH get_rvn into l_record_version_number;
34916 --Bug 3769047
34917 IF get_rvn%NOTFOUND THEN
34918 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
34919 p_msg_name => 'PA_PS_INV_DEP_ID');
34920 RAISE FND_API.G_EXC_ERROR;
34921 END IF;
34922 CLOSE get_rvn;
34923 --
34924 --call existing update dependency API to create intra dependency
34925 PA_RELATIONSHIP_PVT.Update_Dependency(
34926 p_calling_module => 'SELF_SERVICE'
34927 ,p_task_version_id => l_pred_ver_id
34928 ,p_src_task_version_id => l_task_ver_id
34929 ,p_type => p_type
34930 ,p_lag_days => p_lag_days
34931 ,p_comments => p_comments
34932 ,p_record_version_number => l_record_version_number
34933 ,x_return_status => p_return_status
34934 ,x_msg_count => p_msg_count
34935 ,x_msg_data => p_msg_data
34936 );
34937
34938 IF p_msg_count > 0 THEN
34939 RAISE FND_API.G_EXC_ERROR;
34940 END IF;
34941
34942 p_return_status := FND_API.G_RET_STS_SUCCESS;
34943
34944 EXCEPTION
34945 WHEN FND_API.G_EXC_ERROR THEN
34946 ROLLBACK TO update_dep_pub_amg;
34947 p_return_status := FND_API.G_RET_STS_ERROR;
34948
34949 -- 4537865 Included same fix as 4323969.
34950 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
34951 , p_data => p_msg_data);
34952
34953 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34954 ROLLBACK TO update_dep_pub_amg;
34955 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34956
34957 -- 4537865 : Included same fix as 4323969.
34958 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
34959 , p_data => p_msg_data);
34960
34961 When OTHERS then
34962 ROLLBACK TO update_dep_pub_amg;
34963 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34964 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
34965
34966 FND_MSG_PUB.add_exc_msg
34967 (p_pkg_name => G_PKG_NAME
34968 , p_procedure_name => 'Update_Dependency');
34969
34970 END IF;
34971 -- 4537865 : Included same fix as 4323969.
34972 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
34973 , p_data => p_msg_data);
34974 END Update_Dependency;
34975
34976
34977
34978 PROCEDURE Delete_Dependency(
34979 p_api_version_number IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34980 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
34981 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
34982 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
34983 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34984 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34985 ,p_pm_product_code IN VARCHAR2
34986 ,p_pm_project_reference IN VARCHAR2
34987 ,p_pa_project_id IN NUMBER
34988 ,p_structure_version_id IN NUMBER
34989 ,p_pm_task_reference IN VARCHAR2
34990 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34991 ,p_pm_pred_reference IN VARCHAR2
34992 ,p_pa_pred_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34993 )
34994 IS
34995 l_msg_count NUMBER;
34996 l_msg_data VARCHAR2(250);
34997 l_return_status VARCHAR2(1);
34998 l_project_id NUMBER;
34999 l_task_ver_id NUMBER;
35000 l_pred_ver_id NUMBER;
35001 l_template_flag VARCHAR2(1);
35002 l_wp_status VARCHAR2(150);
35003 l_versioning VARCHAR2(1);
35004 l_record_version_number NUMBER;
35005 l_obj_rel_id NUMBER;
35006
35007 -- CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER) --Bug 3735799
35008 CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2) --Bug 3735799
35009 IS
35010 select ppev.element_version_id
35011 from pa_proj_elements ppe, pa_proj_element_versions ppev
35012 where ppe.project_id = c_project_id
35013 and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
35014 and ppe.project_id = ppev.project_Id
35015 and ppe.proj_element_id = ppev.proj_element_id
35016 and ppev.parent_structure_version_id = p_structure_version_id;
35017
35018 CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER) --Bug 3880403
35019 IS
35020 select ppev.element_version_id
35021 from pa_proj_elements ppe, pa_proj_element_versions ppev
35022 where ppe.project_id = c_project_id
35023 and ppe.proj_element_id = c_task_id
35024 and ppe.project_id = ppev.project_Id
35025 and ppe.proj_element_id = ppev.proj_element_id
35026 and ppev.parent_structure_version_id = p_structure_version_id;
35027
35028 CURSOR get_template_flag(c_project_id NUMBER)
35029 IS
35030 select template_flag
35031 from pa_projects_all
35032 where project_id = c_project_id;
35033
35034 CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
35035 IS
35036 select STATUS_CODE
35037 from pa_proj_elem_ver_structure
35038 where project_id = c_project_id
35039 and element_version_id = c_structure_version_id;
35040
35041 CURSOR get_rvn(c_id_from NUMBER, c_id_to NUMBER) IS
35042 SELECT object_relationship_id, record_version_number
35043 FROM pa_object_relationships
35044 WHERE object_id_to1 = c_id_to
35045 AND object_id_from1 = c_id_from
35046 AND relationship_type = 'D';
35047 BEGIN
35048 savepoint delete_dep_pub_amg;
35049
35050 IF FND_API.TO_BOOLEAN( p_init_msg_list )
35051 THEN
35052 FND_MSG_PUB.Initialize;
35053 END IF;
35054
35055 --get project id
35056 PA_PROJECT_PVT.Convert_pm_projref_to_id
35057 ( p_pm_project_reference => p_pm_project_reference
35058 , p_pa_project_id => p_pa_project_id
35059 , p_out_project_id => l_project_id
35060 , p_return_status => l_return_status
35061 );
35062
35063 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35064 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35065 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35066 RAISE FND_API.G_EXC_ERROR;
35067 END IF;
35068 --
35069 --Bug 3769079
35070 If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
35071 If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
35072 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35073 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35074 RAISE FND_API.G_EXC_ERROR;
35075 End If;
35076 Else
35077 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35078 p_msg_name => 'PA_INV_PROJECT_ID');
35079 RAISE FND_API.G_EXC_ERROR;
35080 End If;
35081 --
35082 --
35083 --check if structure version can be modified
35084 OPEN get_template_flag(l_project_id);
35085 FETCH get_template_flag into l_template_flag;
35086 CLOSE get_template_flag;
35087
35088 l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
35089
35090 --if template, then ok
35091 IF l_template_flag = 'N' THEN
35092 --project, check if versioning is enabled
35093 -- ok if versioning is disabled
35094 IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
35095 -- if versioning enabled, ok if working
35096 OPEN get_workplan_status(l_project_id, p_structure_version_id);
35097 FETCH get_workplan_status into l_wp_status;
35098 CLOSE get_workplan_status;
35099 IF l_wp_status <> 'STRUCTURE_WORKING' THEN
35100 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35101 p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
35102 RAISE FND_API.G_EXC_ERROR;
35103 END IF;
35104 ELSE
35105 IF (l_versioning IS NULL) THEN
35106 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35107 p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
35108 RAISE FND_API.G_EXC_ERROR;
35109 END IF;
35110 END IF;
35111 END IF;
35112
35113 --get task id
35114 IF (p_pm_task_reference IS NOT NULL) THEN
35115 open get_task_ver_id(l_project_id, p_pm_task_reference);
35116 Fetch get_task_ver_id into l_task_ver_id;
35117 --Bug 3769079
35118 IF get_task_ver_id%NOTFOUND THEN
35119 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35120 p_msg_name => 'PA_PS_INV_TASK_ID');
35121 CLOSE get_task_ver_id;
35122 RAISE FND_API.G_EXC_ERROR;
35123 END IF;
35124 CLOSE get_task_ver_id;
35125 END IF;
35126
35127 --bug 3880403
35128 IF p_pm_task_reference IS NULL OR l_task_ver_id IS NULL THEN
35129 --need to get id using task id
35130 OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
35131 FETCH get_task_Ver_id2 into l_task_ver_id;
35132 IF get_task_ver_id2%NOTFOUND THEN
35133 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35134 p_msg_name => 'PA_PS_INV_TASK_ID');
35135 CLOSE get_task_ver_id2;
35136 RAISE FND_API.G_EXC_ERROR;
35137 END IF;
35138 CLOSE get_task_ver_id2;
35139 END IF;
35140 --end bug 3880403
35141 --
35142 --get predecessor id
35143 IF (p_pm_pred_reference IS NOT NULL) THEN
35144 open get_task_ver_id(l_project_id, p_pm_pred_reference);
35145 Fetch get_task_ver_id into l_pred_ver_id;
35146 --Bug 3769079
35147 IF get_task_ver_id%NOTFOUND THEN
35148 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35149 p_msg_name => 'PA_PS_INV_TASK_ID');
35150 CLOSE get_task_ver_id;
35151 RAISE FND_API.G_EXC_ERROR;
35152 END IF;
35153 CLOSE get_task_ver_id;
35154 END IF;
35155
35156 --bug 3880403
35157 IF p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL THEN
35158 --need to get id using task id
35159 OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
35160 FETCH get_task_Ver_id2 into l_pred_ver_id;
35161 IF get_task_ver_id2%NOTFOUND THEN
35162 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35163 p_msg_name => 'PA_PS_INV_TASK_ID');
35164 CLOSE get_task_ver_id2;
35165 RAISE FND_API.G_EXC_ERROR;
35166 END IF;
35167 CLOSE get_task_ver_id2;
35168 END IF;
35169 --end bug 3880403
35170
35171
35172 --call existing delete dependency API to create intra dependency
35173 --get record version number
35174 open get_rvn(l_task_ver_id, l_pred_ver_id);
35175 FETCH get_rvn into l_obj_rel_id, l_record_version_number;
35176 --Bug 3769066
35177 IF get_rvn%NOTFOUND THEN
35178 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35179 p_msg_name => 'PA_PS_INV_DEP_ID');
35180 RAISE FND_API.G_EXC_ERROR;
35181 END IF;
35182 CLOSE get_rvn;
35183
35184 PA_RELATIONSHIP_PVT.Delete_Dependency(
35185 p_calling_module => 'SELF_SERVICE'
35186 ,p_object_relationship_id => l_obj_rel_id
35187 ,x_return_status => l_return_status
35188 ,x_msg_count => l_msg_count
35189 ,x_msg_data => l_msg_data
35190 );
35191
35192 -- 4537865 : Check has to be made against l_msg_count ,not p_msg_count
35193 -- IF p_msg_count > 0 THEN
35194 IF l_msg_count > 0 THEN
35195 RAISE FND_API.G_EXC_ERROR;
35196 END IF;
35197
35198 p_return_status := FND_API.G_RET_STS_SUCCESS;
35199 EXCEPTION
35200
35201 WHEN FND_API.G_EXC_ERROR THEN
35202 ROLLBACK TO delete_dep_pub_amg;
35203 p_return_status := FND_API.G_RET_STS_ERROR;
35204 -- 4537865 Included same fix as 4323969.
35205 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35206 , p_data => p_msg_data);
35207 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35208 ROLLBACK TO delete_dep_pub_amg;
35209 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35210 -- 4537865 Included same fix as 4323969.
35211 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35212 , p_data => p_msg_data);
35213 When OTHERS then
35214 ROLLBACK TO delete_dep_pub_amg;
35215 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35216
35217 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35218
35219 FND_MSG_PUB.add_exc_msg
35220 (p_pkg_name => G_PKG_NAME
35221 , p_procedure_name => 'Delete_Dependency');
35222
35223 END IF;
35224 -- 4537865 Included same fix as 4323969.
35225 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35226 , p_data => p_msg_data);
35227
35228 END Delete_Dependency;
35229 --
35230 --
35231 -- Begin fix for Bug # 4096218.
35232
35233 PROCEDURE check_task_mfd
35234 ( p_api_version_number IN NUMBER
35235 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
35236 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35237 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
35238 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35239 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35240 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35241 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35242 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35243 , p_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35244 , p_structure_type IN VARCHAR2 := 'FINANCIAL'
35245 , p_perform_check_delete_task_ok IN VARCHAR2 := 'N'
35246 , p_check_task_mfd_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35247 )
35248 IS
35249
35250 cursor cur_task_status(c_project_id NUMBER, c_task_id NUMBER, c_task_version_id NUMBER)
35251 is
35252 select task_unpub_ver_status_code,parent_structure_version_id
35253 from pa_proj_element_versions ppev
35254 where ppev.project_id = c_project_id
35255 and ppev.proj_element_id = c_task_id
35256 and ppev.element_version_id = c_task_version_id;
35257
35258 cursor c_valid_task_id(c_task_id NUMBER,c_project_id NUMBER)
35259 is
35260 select 'Y'
35261 from pa_proj_elements
35262 where proj_element_id = c_task_id
35263 and project_id = c_project_id ;
35264
35265 cursor get_task_ver_id(c_task_id NUMBER)
35266 is
35267 select element_version_id from pa_proj_element_versions
35268 where proj_element_id = c_task_id ;
35269
35270 -- Begin fix for Bug # 4096218 : 09-AUG-2005.
35271
35272 -- Modified cursor to return the element_number if the task exists
35273 -- in a published workplan structure version. This cursor will
35274 -- work for both split and shared projects.
35275 /*
35276
35277 CURSOR l_amg_task_csr
35278 (p_pa_task_id pa_tasks.task_id%type)
35279 IS
35280 SELECT task_number
35281 FROM pa_tasks p
35282 WHERE p.task_id = p_pa_task_id;
35283
35284 */
35285
35286 -- The Following cursor has been commented for Performance Bug 4878722 SQL ID 14909071
35287 -- The purpose of this cursor per usage in this API is to verify whether the task exists in any of the previously published versions
35288 -- cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35289 -- select ppe.element_number
35290 -- from pa_proj_elements ppe, pa_proj_elem_ver_structure ppevs
35291 -- where ppe.proj_element_id = p_pa_task_id
35292 -- and ppe.parent_structure_id = ppevs.proj_element_id
35293 -- and ppevs.status_code = 'STRUCTURE_PUBLISHED';
35294
35295 -- The Following cursor has been re-written for Performance Bug 4878722 SQL ID 14909071
35296
35297 /*
35298 Bug Fix 5263426
35299
35300 Issue:
35301
35302 After succesful deletion of a task and the publishing of the structure, a new task is added to the current working version.
35303 And that the task was deleted and the MSP was returning a message saying 'Mark this task for deletion?'. Ideally this
35304 should be used for tasks which are present in the published versions as well. Only those tasks will be marked for deletion
35305 and during publishing those marked tasks will be deleted. All the other tasks which dont have any transactions and are not
35306 present in the published versions should be deleted right away and the MSP should not show any message.
35307
35308 Analysis:
35309
35310 This is happening due to value 'M' being returned from the PA_PROJECT_PUB.check_task_mfd APIs OUT param p_check_task_mfd_flag.
35311 The reason is due to the bug in the cursor l_amg_task_csr.
35312 This SQL is starting with an element id i.e the task id and getting the parent sturcture id and looking for that parent
35313 structure id's published status in other tables.
35314
35315 Ideally this is ignoring the versions of a strucutre. Even if one structure version is published the above SQL will always
35316 find a record in the structures table with status published irrespective of the fact that the task was added to a working
35317 version and same is not in a published version.
35318
35319 Solution:
35320 The correct way of doing this is to get the task status directly from the element versions table itself as shown below
35321 and modify the logic to use the above column value.
35322
35323
35324 cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35325 select 1 from dual
35326 where exists (select ppe.element_number
35327 from pa_proj_elements ppe, pa_proj_elem_ver_structure ppevs
35328 where ppe.proj_element_id = p_pa_task_id
35329 and ppe.object_type = 'PA_TASKS'
35330 and ppe.parent_structure_id = ppevs.proj_element_id
35331 and ppe.project_id = ppevs.project_id
35332 and ppevs.status_code = 'STRUCTURE_PUBLISHED');
35333 */
35334
35335 cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35336 select 1 from dual
35337 where exists(
35338 select pev.task_unpub_ver_status_code
35339 from pa_proj_element_versions pev
35340 where pev.proj_element_id = p_pa_task_id
35341 and pev.object_type = 'PA_TASKS'
35342 and pev.task_unpub_ver_status_code in ('PUBLISHED','TO_BE_DELETED'));
35343 -- End fix for Bug 5263429
35344 -- End fix for Bug # 4096218 : 09-AUG-2005.
35345
35346 l_dummy varchar2(1);
35347 l_derive varchar2(1);
35348
35349 l_project_id NUMBER := NULL;
35350
35351 l_task_version_id NUMBER := NULL;
35352
35353 l_task_id NUMBER := NULL;
35354
35355 l_structure_version_id NUMBER := NULL;
35356
35357 l_task_status VARCHAR2(30) := NULL;
35358
35359 l_check_task_mfd_flag VARCHAR2(1) := NULL;
35360
35361 l_api_name CONSTANT VARCHAR2(30) := 'check_task_mfd';
35362
35363 l_return_status VARCHAR2(1) := NULL;
35364
35365 l_msg_count NUMBER := NULL; -- 4096218 : Issues found during Unit Testing
35366
35367 l_msg_data VARCHAR2(2000) := NULL; -- 4096218 : This was declared as size 30 ,causing unexpected error.Corrected it
35368
35369
35370 l_delete_task_ok_flag VARCHAR2(1);
35371
35372 l_wp_str_exists VARCHAR2(1);
35373
35374 l_versioning_enabled VARCHAR2(1);
35375
35376 l_pub_ver_exists VARCHAR2(1);
35377
35378 l_amg_task_number NUMBER; -- Datatype changed for Bug 4878722
35379 BEGIN
35380
35381 IF NOT FND_API.Compatible_API_Call (g_api_version_number
35382 , p_api_version_number
35383 , l_api_name
35384 , G_PKG_NAME) THEN
35385
35386 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35387
35388 END IF;
35389
35390 IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
35391
35392 FND_MSG_PUB.initialize;
35393
35394 END IF;
35395
35396 p_return_status := FND_API.G_RET_STS_SUCCESS;
35397
35398 -- Initialize output flag.
35399
35400 l_check_task_mfd_flag := 'N';
35401 l_delete_task_ok_flag := 'N';
35402 l_versioning_enabled := 'N' ;
35403 l_pub_ver_exists :='N' ;
35404
35405 -- Convert project reference to id.
35406
35407 PA_PROJECT_PVT.Convert_pm_projref_to_id
35408 (p_pm_project_reference => p_pm_project_reference
35409 , p_pa_project_id => p_project_id
35410 , p_out_project_id => l_project_id
35411 , p_return_status => l_return_status);
35412
35413 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35414
35415 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35416
35417 ELSIF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
35418
35419 RAISE FND_API.G_EXC_ERROR;
35420 END IF;
35421
35422 -- If task id is passed ,verify whether it is a valid value
35423 IF p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35424 THEN
35425
35426 open c_valid_task_id(p_task_id,l_project_id) ;
35427 fetch c_valid_task_id into l_dummy;
35428 close c_valid_task_id ;
35429
35430 IF nvl(l_dummy,'N') = 'Y' THEN
35431 l_task_id := p_task_id ;
35432 -- Task ID exists and its a valid one.
35433 ELSE
35434 -- Try to derive task_id from its reference
35435 l_derive := 'Y';
35436 END IF;
35437
35438 END IF;
35439
35440 IF (p_task_id is NULL AND p_pm_task_reference IS NOT NULL
35441 AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
35442 OR nvl(l_derive,'N') = 'Y'
35443 THEN
35444 -- Convert task reference to id.
35445
35446 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
35447 (p_pa_project_id => l_project_id
35448 , p_pa_task_id => p_task_id
35449 , p_pm_task_reference => p_pm_task_reference
35450 , p_out_task_id => l_task_id
35451 , p_return_status => l_return_status);
35452
35453
35454 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35455
35456 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35457
35458 ELSIF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
35459
35460 RAISE FND_API.G_EXC_ERROR;
35461 END IF;
35462
35463 END IF;
35464 --get structure_version_id and task_version_id
35465
35466 PA_PROJ_TASK_STRUC_PUB.get_version_ids
35467 (p_task_id => l_task_id
35468 , p_task_version_id => p_task_version_id
35469 , p_project_id => l_project_id
35470 , x_structure_version_id => l_structure_version_id
35471 , x_task_version_id => l_task_version_id);
35472 --------------------------------------------------------------------------------------------------------------------------------
35473 -- If p_perform_check_delete_task_ok is "Y" , then we need to call the API
35474 -- pa_project_pub.Check_Delete_Task_OK
35475
35476 IF p_perform_check_delete_task_ok ='Y' THEN
35477 pa_project_pub.Check_Delete_Task_OK
35478 (
35479 p_api_version_number => p_api_version_number
35480 -- Start OUT params
35481 , p_return_status => l_return_status
35482 , p_msg_count => l_msg_count
35483 , p_msg_data => l_msg_data
35484 -- End OUT params
35485 , p_project_id => l_project_id
35486 , p_pm_project_reference => p_pm_project_reference
35487 , p_task_id => l_task_id
35488 , p_pm_task_reference => p_pm_task_reference
35489 , p_structure_type => p_structure_type
35490 , p_task_version_id => l_task_version_id
35491 , p_delete_task_ok_flag => l_delete_task_ok_flag -- OUT param
35492 );
35493 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
35494
35495 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35496
35497 /* Commented because of Issue found during Unit testing
35498 In Check_Delete_Task_OK ,already message has been retrieved and
35499 Hence ,If we raise again here ,In this API ,it wont be able to find any msg in stack now
35500 thereby returning empty message
35501
35502 The commented check corresponds to return status 'E' check .It will be 'E' if its nt
35503 allowed to delete the task. So, Just set the OUT params appropriately
35504 and return
35505
35506 ELSIF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
35507
35508 RAISE FND_API.G_EXC_ERROR;
35509 */
35510 END IF;
35511
35512 IF l_delete_task_ok_flag = 'N' THEN
35513
35514 -- Its not Ok to delete this task,so skip further steps and just return with 'N'
35515 l_check_task_mfd_flag := 'N';
35516
35517 ELSIF l_delete_task_ok_flag = 'Y' THEN
35518
35519 -- Its Ok to delete this task , Check whether it can be deleted immediately (l_check_task_mfd_flag = 'Y')
35520 -- (Or) it has to be marked for deletion. (l_check_task_mfd_flag = 'M')
35521
35522 open cur_task_status(l_project_id, l_task_id, l_task_version_id);
35523 fetch cur_task_status into l_task_status,l_structure_version_id;
35524 close cur_task_status;
35525
35526 open l_amg_task_csr(l_task_id );
35527 fetch l_amg_task_csr INTO l_amg_task_number;
35528 close l_amg_task_csr;
35529
35530 l_wp_str_exists := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_project_id );
35531 l_versioning_enabled := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id);
35532 l_pub_ver_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
35533
35534 -- If this passed task belongs to a Split - Fin. Only structure
35535 IF nvl(l_wp_str_exists,'N') = 'N'
35536 AND (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id, 'FINANCIAL') = 'Y')
35537 THEN
35538 -- Its ok to delete this task
35539 l_check_task_mfd_flag := 'Y' ;
35540
35541 -- If this passed task belongs to a WP structure (be it shared or be it split)
35542 ELSIF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id,'WORKPLAN') = 'Y'
35543 THEN
35544 IF l_versioning_enabled = 'Y'
35545 AND l_pub_ver_exists = 'Y'
35546 THEN
35547 IF l_amg_task_number IS NULL -- It means ,task is only in current working version,not in any previous pub. versions
35548 THEN
35549 -- It can be deleted, there is no need to mark it for deletion.
35550 l_check_task_mfd_flag := 'Y';
35551 ELSE -- Task exists in prior published version and it has entry in pa_tasks.
35552 -- So, Mark it for deletion ,so that it can be deleted in publishing flow
35553
35554 /* This API call marks the task for deletion in OP
35555 PA_TASK_PVT1.update_task_ver_delete_status(
35556 p_task_version_id => p_task_version_id
35557 ,x_return_status => l_return_status
35558 ,x_msg_count => x_msg_count
35559 ,x_msg_data => x_msg_data);
35560 */
35561
35562 l_check_task_mfd_flag := 'M' ;
35563
35564 END IF;
35565 ELSIF l_versioning_enabled = 'Y' and l_pub_ver_exists = 'N'
35566 THEN
35567 -- Versioning Enabled , But there is no published version so far .So,This is the Working version
35568 -- So,its ok to delete this task.
35569 l_check_task_mfd_flag := 'Y';
35570 ELSIF l_versioning_enabled = 'N'
35571 THEN
35572 -- Versioning Disabled Case , Its ok to delete this task.
35573 l_check_task_mfd_flag := 'Y';
35574 END IF;
35575 END IF;
35576
35577 END IF; -- End If for l_delete_task_ok_flag = 'Y'
35578
35579 ELSE -- So, Now the case if p_perform_check_delete_task_ok ='N'
35580
35581 -- If this flag p_perform_check_delete_task_ok is passed as 'N' ,it means just we need to check
35582 -- whether task is marked for deletion or not in Oracle Projects.
35583 -- Return 'M' if marked for delete
35584
35585
35586 -- Check for task status.
35587
35588 open cur_task_status(l_project_id, l_task_id, l_task_version_id);
35589 fetch cur_task_status into l_task_status,l_structure_version_id;
35590 close cur_task_status;
35591
35592 if l_task_status = 'TO_BE_DELETED' then
35593
35594 l_check_task_mfd_flag := 'M';
35595 else
35596 l_check_task_mfd_flag := 'N';
35597 end if;
35598
35599 END IF;
35600 --------------------------------------------------------------------------------------------------------------------------------
35601 -- Set output variables.
35602
35603 p_check_task_mfd_flag := l_check_task_mfd_flag;
35604
35605 p_return_status := l_return_status;
35606 p_msg_count := l_msg_count;
35607 p_msg_data := l_msg_data;
35608
35609 EXCEPTION
35610
35611 WHEN FND_API.G_EXC_ERROR THEN
35612
35613 p_return_status := FND_API.G_RET_STS_ERROR;
35614
35615 -- 4537865
35616 p_check_task_mfd_flag := NULL ;
35617
35618 FND_MSG_PUB.Count_And_Get
35619 ( p_count => p_msg_count ,
35620 p_data => p_msg_data );
35621
35622 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35623
35624 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35625
35626 -- 4537865
35627 p_check_task_mfd_flag := NULL ;
35628
35629 FND_MSG_PUB.Count_And_Get
35630 ( p_count => p_msg_count ,
35631 p_data => p_msg_data );
35632
35633 WHEN OTHERS THEN
35634
35635 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35636
35637 p_check_task_mfd_flag := NULL ; -- 4537865
35638
35639 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35640
35641 FND_MSG_PUB.add_exc_msg
35642 (p_pkg_name => G_PKG_NAME
35643 , p_procedure_name => l_api_name);
35644
35645 END IF;
35646
35647 FND_MSG_PUB.Count_And_Get
35648 (p_count => p_msg_count
35649 , p_data => p_msg_data);
35650
35651 END check_task_mfd;
35652
35653
35654 -- API Name : get_deleted_tasks_from_op
35655 --
35656 -- Parameters :
35657 --
35658 -- x_deleted_task_ver_ids OUT PA_NUM_1000_NUM
35659 -- x_return_status OUT VARCHAR2
35660 -- x_msg_count OUT NUMBER
35661 -- x_msg_data OUT VARCHAR2
35662 --
35663 -- HISTORY
35664 -- Created by avaithia for Bug 4096218
35665 -- 29-Jun-2005 Changed out param name from x_deleted_task_ver_ids to x_deleted_task_ids
35666 -- Changed global var name from G_DELETED_TASK_VER_IDS_FROM_OP to G_DELETED_TASK_IDS_FROM_OP
35667 --
35668 -- Notes About the API :-
35669 -- This API is supposed to be calling only in AMG/MSP context.
35670 --
35671 -- This is not a standalone API .This API will produce useful output only if its called after WP publishing flow
35672 --
35673 -- We set the value for out param x_deleted_task_ver_ids in the global VARRAY PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP
35674 -- in the Publish_Structure API (PAXSTCVB.pls) ONLY if p_calling_module in that API is 'AMG'
35675
35676 PROCEDURE get_deleted_tasks_from_op
35677 (
35678 x_deleted_task_ids OUT NOCOPY PA_NUM_1000_NUM,/*4537865 : Added nocopy hint manually */
35679 x_return_status OUT NOCOPY VARCHAR2, /*4537865 : Added nocopy hint manually */
35680 x_msg_count OUT NOCOPY NUMBER, /*4537865 : Added nocopy hint manually */
35681 x_msg_data OUT NOCOPY VARCHAR2 /*4537865 : Added nocopy hint manually */
35682 )
35683 IS
35684 BEGIN
35685 x_msg_count := 0;
35686 x_return_status := FND_API.G_RET_STS_SUCCESS;
35687 x_msg_data := NULL;
35688 x_deleted_task_ids := PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP;
35689 EXCEPTION
35690 WHEN OTHERS THEN
35691 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35692 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35693
35694 FND_MSG_PUB.add_exc_msg
35695 (p_pkg_name => G_PKG_NAME
35696 , p_procedure_name => 'get_deleted_tasks_from_op');
35697
35698 END IF;
35699
35700 FND_MSG_PUB.Count_And_Get
35701 (p_count => x_msg_count
35702 , p_data => x_msg_data);
35703
35704 END get_deleted_tasks_from_op;
35705
35706 -- End fix for Bug # 4096218.
35707
35708
35709 -- -------------
35710 -- Bug 5436264 : AMG API FOR PROCESS STRUCTURE UPDATES
35711
35712 PROCEDURE process_structure_updates
35713 (p_api_version_number IN NUMBER := 1.0
35714 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
35715 , p_commit IN VARCHAR2 := FND_API.G_FALSE
35716 , p_return_status OUT NOCOPY VARCHAR2
35717 , p_msg_count OUT NOCOPY NUMBER
35718 , p_msg_data OUT NOCOPY VARCHAR2
35719 , p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35720 , p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35721 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35722 , p_process_mode IN VARCHAR2 := 'ONLINE'
35723 , p_calling_context IN VARCHAR2 := 'AMG')
35724 IS
35725
35726 l_api_name CONSTANT VARCHAR2(30) := 'process_structure_updates';
35727 l_msg_count NUMBER;
35728 l_msg_data VARCHAR2(2000);
35729 l_return_status VARCHAR2(1);
35730 l_responsibility_id NUMBER := 0;
35731 l_user_id NUMBER := 0;
35732 l_module_name VARCHAR2(80);
35733 l_function_allowed VARCHAR2(1);
35734
35735 l_project_id pa_projects.project_id%type;
35736
35737 l_update_wbs_flag VARCHAR2(1);
35738
35739 l_str_ver_id NUMBER:= null;
35740 l_conc_request_id NUMBER := null;
35741 l_message_name VARCHAR2(30) := null;
35742 l_message_type VARCHAR2(30) := null;
35743 l_process_code pa_proj_elem_ver_structure.process_code%TYPE; --Bug# 5973460
35744
35745 BEGIN
35746
35747 -- Standard begin of API savepoint
35748
35749 SAVEPOINT process_structure_updates;
35750
35751 -- Standard call to check for call compatibility
35752
35753 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
35754 p_api_version_number ,
35755 l_api_name ,
35756 g_pkg_name )
35757 THEN
35758
35759 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35760
35761 END IF;
35762
35763 -- Initialize the message table if requested
35764
35765 IF FND_API.TO_BOOLEAN( p_init_msg_list )
35766 THEN
35767
35768 FND_MSG_PUB.initialize;
35769
35770 END IF;
35771
35772 -- Set API return status to success
35773
35774 p_return_status := FND_API.G_RET_STS_SUCCESS;
35775
35776
35777 -- Get the project ID
35778 -- Added if clause for Bug 6727014
35779 IF p_calling_context = 'CONC_WRP' then
35780
35781 l_project_id := p_pa_project_id;
35782
35783 ELSE
35784
35785 PA_PROJECT_PVT.Convert_pm_projref_to_id
35786 ( p_pm_project_reference => p_pm_project_reference
35787 , p_pa_project_id => p_pa_project_id
35788 , p_out_project_id => l_project_id
35789 , p_return_status => l_return_status
35790 );
35791
35792 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35793
35794 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35795
35796 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35797
35798 RAISE FND_API.G_EXC_ERROR;
35799 END IF;
35800
35801 END IF;
35802
35803 If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id, p_structure_version_id) <> 'Y' THEN
35804 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35805 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35806
35807 RAISE FND_API.G_EXC_ERROR;
35808 End If;
35809
35810 l_responsibility_id := FND_GLOBAL.Resp_id;
35811 l_user_id := FND_GLOBAL.User_id;
35812
35813
35814 -- As part of enforcing project security, which would determine
35815 -- whether the user has the necessary privileges to update the project
35816 -- need to call the pa_security package
35817
35818 pa_security.initialize (X_user_id => l_user_id,
35819 X_calling_module => l_module_name);
35820
35821 -- Actions performed using the APIs would be subject to
35822 -- function security. If the responsibility does not allow
35823 -- such functions to be executed, the API should not proceed further
35824 -- since the user does not have access to such functions
35825
35826 -- Function security procedure check whether user has the
35827 -- privilege to update the project or not
35828
35829 PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;
35830
35831 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
35832 (p_api_version_number => p_api_version_number,
35833 p_responsibility_id => l_responsibility_id,
35834 p_function_name => 'PA_PM_UPDATE_PROJECT',
35835 p_msg_count => l_msg_count,
35836 p_msg_data => l_msg_data,
35837 p_return_status => l_return_status,
35838 p_function_allowed => l_function_allowed);
35839
35840 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
35841 THEN
35842 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35843
35844 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
35845 THEN
35846 RAISE FND_API.G_EXC_ERROR;
35847
35848 END IF;
35849
35850 IF l_function_allowed = 'N' THEN
35851 pa_interface_utils_pub.map_new_amg_msg
35852 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
35853 ,p_msg_attribute => 'CHANGE'
35854 ,p_resize_flag => 'Y'
35855 ,p_msg_context => 'GENERAL'
35856 ,p_attribute1 => ''
35857 ,p_attribute2 => ''
35858 ,p_attribute3 => ''
35859 ,p_attribute4 => ''
35860 ,p_attribute5 => '');
35861 p_return_status := FND_API.G_RET_STS_ERROR;
35862 RAISE FND_API.G_EXC_ERROR;
35863 END IF;
35864
35865 --Bug# 5973460
35866 l_process_code := PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id
35867 ,p_structure_version_id => p_structure_version_id );
35868
35869 IF l_process_code = 'PUE'
35870 THEN
35871 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
35872 ,p_msg_name => 'PA_PS_PUBLISH_ERROR');
35873
35874 RAISE FND_API.G_EXC_ERROR;
35875 END IF;
35876 --Bug# 5973460
35877
35878 -- check the process_update_wbs_flag
35879
35880 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
35881 ,p_structure_version_id => p_structure_version_id ) ;
35882
35883 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
35884
35885 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
35886 p_project_id => l_project_id
35887 , p_structure_version_id => p_structure_version_id
35888 , p_context => 'UPDATE_AMG'
35889 , x_message_name => l_message_name
35890 , x_message_type => l_message_type
35891 , x_structure_version_id => l_str_ver_id
35892 , x_conc_request_id => l_conc_request_id);
35893
35894
35895 IF nvl(l_message_type,'NOT_PROCESS') <> 'PROCESS' THEN
35896
35897 IF p_process_mode = 'ONLINE' THEN
35898
35899 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
35900 ,p_project_id => l_project_id
35901 ,p_structure_version_id => p_structure_version_id
35902 ,x_return_status => l_return_status
35903 ,x_msg_count => l_msg_count
35904 ,x_msg_data => l_msg_data ) ;
35905
35906 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
35907 THEN
35908 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35909 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
35910 THEN
35911 RAISE FND_API.G_EXC_ERROR;
35912 END IF;
35913
35914 ELSIF p_process_mode = 'CONCURRENT' THEN
35915
35916 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
35917 ,p_project_id => l_project_id
35918 ,p_structure_version_id => p_structure_version_id
35919 ,x_return_status => l_return_status
35920 ,x_msg_count => l_msg_count
35921 ,x_msg_data => l_msg_data ) ;
35922
35923 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
35924 THEN
35925 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35926 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
35927 THEN
35928 RAISE FND_API.G_EXC_ERROR;
35929 END IF;
35930
35931 END IF ; -- p_process_mode
35932
35933 END IF ; -- l_message_type
35934
35935 END IF; -- l_update_wbs_flag
35936
35937 IF FND_API.to_boolean( p_commit )
35938 THEN
35939 COMMIT;
35940 END IF;
35941
35942 EXCEPTION
35943 WHEN FND_API.G_EXC_ERROR THEN
35944 p_return_status := FND_API.G_RET_STS_ERROR;
35945
35946 ROLLBACK TO process_structure_updates;
35947
35948 p_msg_count := l_msg_count;
35949 p_msg_data := l_msg_data;
35950
35951 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35952 , p_data => p_msg_data);
35953
35954
35955 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35956 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35957
35958 ROLLBACK TO process_structure_updates;
35959
35960 p_msg_count := l_msg_count;
35961 p_msg_data := l_msg_data;
35962
35963 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35964 , p_data => p_msg_data);
35965
35966 WHEN OTHERS THEN
35967 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35968
35969 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35970 FND_MSG_PUB.add_exc_msg
35971 (p_pkg_name => G_PKG_NAME
35972 ,p_procedure_name => l_api_name
35973 ,p_error_text => SUBSTRB(SQLERRM,1,120));
35974 END IF;
35975
35976 ROLLBACK TO process_structure_updates;
35977
35978 p_msg_count := fnd_msg_pub.count_msg;
35979 p_msg_data := SUBSTRB(SQLERRM,1,120);
35980
35981 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35982 , p_data => p_msg_data);
35983
35984 END process_structure_updates;
35985 -- -------------
35986
35987
35988 -- Bug 6727014. Creating a wrapper on process_structure_updates to be used in new concurrent request
35989
35990 PROCEDURE process_structure_updates_wrp
35991 (errbuf OUT NOCOPY VARCHAR2
35992 , retcode OUT NOCOPY VARCHAR2
35993 , p_operating_unit IN VARCHAR2
35994 , p_project_num_from IN VARCHAR2
35995 , p_project_num_to IN VARCHAR2
35996 )
35997 is
35998
35999 CURSOR cur_get_structures IS
36000 select ppes.pev_structure_id
36001 ,ppes.project_id project_id
36002 ,ppes.element_version_id structure_version_id
36003 ,ppa.segment1 project_number
36004 ,ppes.name structure_name
36005 from pa_proj_elem_ver_structure ppes,
36006 pa_projects_all ppa
36007 where ppa.project_id = ppes.project_id
36008 and ppes.process_update_wbs_flag = 'Y'
36009 and NVL(ppes.process_code,'WUE') = 'WUE'
36010 and ppa.segment1 between nvl(p_project_num_from,ppa.segment1)
36011 and nvl(p_project_num_to,ppa.segment1)
36012 and nvl(ppa.org_id,-99) = nvl(p_operating_unit, nvl(org_id,-99))
36013 Order by 4,5;
36014
36015 l_msg_count NUMBER;
36016 l_msg_data VARCHAR2(2000);
36017 l_return_status VARCHAR2(1);
36018
36019 l_data VARCHAR2(2000);
36020 l_msg_index_out NUMBER;
36021 l_retcode NUMBER := 0;
36022
36023 l_status VARCHAR2(2000);
36024 l_exists VARCHAR2(1);
36025
36026 begin
36027 --Initializing global variable
36028
36029 -- Print the input parameter values
36030 fnd_file.put_line(1, '');
36031 fnd_file.put_line(1, '***********************************************');
36032 fnd_file.put_line(1, '* Process Structure Update Concurrent Program *');
36033 fnd_file.put_line(1, '***********************************************');
36034 fnd_file.put_line(1, '');
36035 fnd_file.put_line(1,'Parameters List ');
36036 fnd_file.put_line(1,'------------------------------------------------');
36037 fnd_file.put_line(1,'Operating Unit : '||p_operating_unit);
36038 fnd_file.put_line(1,'From Project Number : '||p_project_num_from);
36039 fnd_file.put_line(1,'To Project Number : '||p_project_num_to);
36040 fnd_file.put_line(1, '');
36041 fnd_file.put_line(1, '');
36042 fnd_file.put_line(1, 'List of Projects and Structures processed by the concurrent request and their Status');
36043 fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36044 fnd_file.put_line(1, 'Project Number Structure Name Status');
36045 fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36046
36047 For i in cur_get_structures loop
36048 l_return_status := 'S';
36049 l_msg_count := 0;
36050 l_msg_data := Null;
36051 l_status := 'Success';
36052 l_exists := NULL;
36053
36054 Begin
36055 -- the below query will use PA_PROJ_ELEM_VER_STRUCTURE_U1 index
36056 select 'X'
36057 into l_exists
36058 from pa_proj_elem_ver_structure ppes
36059 where ppes.process_update_wbs_flag = 'Y'
36060 and NVL(ppes.process_code,'WUE') = 'WUE'
36061 and ppes.pev_structure_id = i.pev_structure_id;
36062
36063 if nvl(l_exists,'Y') = 'X' Then
36064 PA_PROJECT_PUB.process_structure_updates
36065 ( p_api_version_number => 1.0
36066 , p_init_msg_list => FND_API.G_TRUE
36067 , p_commit => FND_API.G_FALSE
36068 , p_return_status => l_return_status
36069 , p_msg_count => l_msg_count
36070 , p_msg_data => l_msg_data
36071 , p_structure_version_id => i.structure_version_id
36072 , p_pa_project_id => i.project_id
36073 , p_pm_project_reference => PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36074 , p_process_mode => 'ONLINE'
36075 , p_calling_context => 'CONC_WRP');
36076
36077 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36078 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36079 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
36080 RAISE FND_API.G_EXC_ERROR;
36081 ELSIF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
36082 COMMIT;
36083 END IF;
36084
36085 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status);
36086 Else
36087 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||'A process is already running for this structure');
36088 End If;
36089
36090 EXCEPTION
36091 WHEN FND_API.G_EXC_ERROR THEN
36092 l_retcode := '1';
36093
36094 IF l_msg_count >= 1 THEN
36095 PA_INTERFACE_UTILS_PUB.get_messages
36096 (p_encoded => FND_API.G_FALSE
36097 ,p_msg_index => 1
36098 ,p_msg_count => l_msg_count
36099 ,p_msg_data => l_msg_data
36100 ,p_data => l_data
36101 ,p_msg_index_out => l_msg_index_out);
36102 errbuf := l_data;
36103 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36104 END IF;
36105 ROLLBACK;
36106
36107 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
36108 l_retcode := '1';
36109
36110 IF l_msg_count >= 1 THEN
36111 PA_INTERFACE_UTILS_PUB.get_messages
36112 (p_encoded => FND_API.G_FALSE
36113 ,p_msg_index => 1
36114 ,p_msg_count => l_msg_count
36115 ,p_msg_data => l_msg_data
36116 ,p_data => l_data
36117 ,p_msg_index_out => l_msg_index_out);
36118 errbuf := l_data;
36119 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36120 END IF;
36121 ROLLBACK;
36122
36123 WHEN OTHERS THEN
36124 l_retcode := '1';
36125 errbuf := SQLERRM;
36126 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36127 ROLLBACK;
36128
36129 end;
36130 end loop;
36131 fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36132 fnd_file.put_line(1, '');
36133 fnd_file.put_line(1, '');
36134
36135 if l_retcode = 1 then
36136 retcode := '1';
36137 else
36138 retcode := '0';
36139 end if;
36140
36141
36142 exception
36143 when others then
36144 retcode := '2';
36145 errbuf := sqlerrm;
36146 return;
36147 End process_structure_updates_wrp;
36148
36149
36150 -- Bug # 5072032.
36151
36152 PROCEDURE SETUP_PROJECT_AS_PROGRAM
36153 (p_api_version IN NUMBER := 1.0
36154 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
36155 , p_commit IN VARCHAR2 := FND_API.G_FALSE
36156 , p_debug_mode IN VARCHAR2 := 'N'
36157 , p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36158 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36159 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36160 , p_sys_program_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36161 , p_allow_multi_program_rollup IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36162 , x_return_status OUT NOCOPY VARCHAR2
36163 , x_msg_count OUT NOCOPY NUMBER
36164 , x_msg_data OUT NOCOPY VARCHAR2)
36165 is
36166
36167 l_api_name CONSTANT VARCHAR2(30) := 'SETUP_PRJ_AS_PGM';
36168
36169 l_pm_product_code VARCHAR2(2) := NULL;
36170 l_function_allowed VARCHAR2(1) := NULL;
36171
36172 l_project_id NUMBER := NULL;
36173 l_wp_enabled VARCHAR2(1) := NULL;
36174 l_fin_enabled VARCHAR2(1) := NULL;
36175 l_delv_enabled VARCHAR2(1) := NULL;
36176 l_share_code VARCHAR2(30) := null;
36177
36178 l_sys_program_flag VARCHAR2(1) := NULL;
36179 l_allow_multi_program_rollup VARCHAR2(1) := NULL;
36180
36181 cursor l_cur_sys_program_flag(c_project_id NUMBER) is
36182 select ppa.sys_program_flag
36183 from pa_projects_all ppa
36184 where ppa.project_id = c_project_id;
36185
36186 cursor l_cur_allow_multi_prog_rollup(c_project_id NUMBER) is
36187 select ppa.allow_multi_program_rollup
36188 from pa_projects_all ppa
36189 where ppa.project_id = c_project_id;
36190
36191 l_msg_index_out NUMBER := NULL;
36192 l_return_status VARCHAR2(1) := NULL;
36193 l_msg_count NUMBER := NULL;
36194 l_msg_data VARCHAR2(2000) := NULL;
36195
36196 begin
36197
36198 -- Establish the save point.
36199 savepoint SETUP_PROJECT_AS_PROGRAM_AMG;
36200
36201 -- Initialize the message table if requested.
36202 if FND_API.TO_BOOLEAN(p_init_msg_list) then
36203 FND_MSG_PUB.initialize;
36204 end if;
36205
36206 -- Standard call to check for API compatibility.
36207 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
36208 raise FND_API.G_EXC_UNEXPECTED_ERROR;
36209 end if;
36210
36211 -- Initialize the return status
36212 x_return_status := FND_API.G_RET_STS_SUCCESS;
36213
36214 -- Convert project reference to id.
36215 PA_PROJECT_PVT.Convert_pm_projref_to_id
36216 (p_pm_project_reference => p_pm_project_reference
36217 , p_pa_project_id => p_project_id
36218 , p_out_project_id => l_project_id
36219 , p_return_status => l_return_status);
36220
36221 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36222 raise FND_API.G_EXC_UNEXPECTED_ERROR;
36223 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36224 raise FND_API.G_EXC_ERROR;
36225 end if;
36226
36227 -- Get the current attributes of the project.
36228 l_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_workplan_enabled(l_project_id);
36229 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_financial_enabled(l_project_id);
36230 l_delv_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_deliverable_enabled(l_project_id);
36231 l_share_code := PA_PROJECT_STRUCTURE_UTILS.Get_Structure_sharing_code(l_project_id);
36232
36233 -- Check if valid values are passed into the parameters: p_sys_program_flag, p_allow_multi_program_rollup, else use the current values.
36234 if ((p_sys_program_flag = 'Y') or (p_sys_program_flag = 'N')) then
36235 l_sys_program_flag := p_sys_program_flag;
36236 else
36237 open l_cur_sys_program_flag(l_project_id);
36238 fetch l_cur_sys_program_flag into l_sys_program_flag;
36239 close l_cur_sys_program_flag;
36240 end if;
36241
36242 if ((p_allow_multi_program_rollup = 'Y') or (p_allow_multi_program_rollup = 'N')) then
36243 l_allow_multi_program_rollup := p_allow_multi_program_rollup;
36244 else
36245 open l_cur_allow_multi_prog_rollup(l_project_id);
36246 fetch l_cur_allow_multi_prog_rollup into l_allow_multi_program_rollup;
36247 close l_cur_allow_multi_prog_rollup;
36248 end if;
36249
36250 -- Actions performed using the APIs are subject to function security.
36251 -- If the responsibility does not allow a function to be executed the API
36252 -- will error out as the user does not have access.
36253
36254 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36255 (p_api_version_number => p_api_version
36256 , p_responsibility_id => FND_GLOBAL.RESP_ID
36257 , p_function_name => 'PA_PM_UPDATE_PROJECT'
36258 , p_msg_count => l_msg_count
36259 , p_msg_data => l_msg_data
36260 , p_return_status => l_return_status
36261 , p_function_allowed => l_function_allowed);
36262
36263 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36264 raise FND_API.G_EXC_UNEXPECTED_ERROR;
36265 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36266 raise FND_API.G_EXC_ERROR;
36267 end if;
36268
36269 if l_function_allowed = 'N' then
36270 pa_interface_utils_pub.map_new_amg_msg
36271 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
36272 , p_msg_attribute => 'CHANGE'
36273 , p_resize_flag => 'Y'
36274 , p_msg_context => 'GENERAL'
36275 , p_attribute1 => ''
36276 , p_attribute2 => ''
36277 , p_attribute3 => ''
36278 , p_attribute4 => ''
36279 , p_attribute5 => '');
36280 raise FND_API.G_EXC_ERROR;
36281 end if;
36282
36283 -- Call the API to setup the project as a program.
36284 PA_PROJECT_STRUCTURE_PUB1.UPDATE_STRUCTURES_SETUP_ATTR
36285 (p_api_version => p_api_version
36286 , p_init_msg_list => p_init_msg_list
36287 , p_commit => p_commit
36288 , p_calling_module => 'AMG'
36289 , p_debug_mode => p_debug_mode
36290 , p_max_msg_count => p_max_msg_count
36291 , p_project_id => l_project_id
36292 , p_workplan_enabled_flag => l_wp_enabled
36293 , p_financial_enabled_flag => l_fin_enabled
36294 , p_deliverables_enabled_flag => l_delv_enabled
36295 , p_sharing_option_code => l_share_code
36296 , p_sys_program_flag => l_sys_program_flag
36297 , p_allow_multi_prog_rollup => l_allow_multi_program_rollup
36298 , x_return_status => l_return_status
36299 , x_msg_count => l_msg_count
36300 , x_msg_data => l_msg_data);
36301
36302 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36303 raise FND_API.G_EXC_UNEXPECTED_ERROR;
36304 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36305 raise FND_API.G_EXC_ERROR;
36306 end if;
36307
36308 -- Commit if p_commit = FND_API.G_TRUE.
36309 if (p_commit = FND_API.G_TRUE) then
36310 commit;
36311 end if;
36312
36313 exception
36314
36315 when FND_API.G_EXC_ERROR then
36316 rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36317 x_return_status := FND_API.G_RET_STS_ERROR;
36318 x_msg_count := FND_MSG_PUB.count_msg;
36319
36320 if x_msg_count = 1 then
36321 PA_INTERFACE_UTILS_PUB.get_messages
36322 (p_encoded => FND_API.G_FALSE
36323 , p_msg_index => 1
36324 , p_msg_count => x_msg_count
36325 , p_msg_data => x_msg_data
36326 , p_data => x_msg_data
36327 , p_msg_index_out => l_msg_index_out);
36328 end if;
36329
36330 when FND_API.G_EXC_UNEXPECTED_ERROR then
36331 rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36332 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36333 x_msg_count := FND_MSG_PUB.count_msg;
36334
36335 if x_msg_count = 1 then
36336 PA_INTERFACE_UTILS_PUB.get_messages
36337 (p_encoded => FND_API.G_FALSE
36338 , p_msg_index => 1
36339 , p_msg_count => x_msg_count
36340 , p_msg_data => x_msg_data
36341 , p_data => x_msg_data
36342 , p_msg_index_out => l_msg_index_out);
36343 end if;
36344
36345 when OTHERS then
36346 rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36347 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36348 x_msg_count := 1;
36349 x_msg_data := SQLERRM;
36350 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
36351 FND_MSG_PUB.add_exc_msg
36352 ( p_pkg_name => G_PKG_NAME
36353 , p_procedure_name => l_api_name);
36354 end if;
36355
36356 end SETUP_PROJECT_AS_PROGRAM;
36357
36358 PROCEDURE CREATE_PROGRAM_LINKS
36359 (p_api_version IN NUMBER := 1.0
36360 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
36361 , p_commit IN VARCHAR2 := FND_API.G_FALSE
36362 , p_debug_mode IN VARCHAR2 := 'N'
36363 , p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36364 , p_program_links_tbl IN PA_PROJECT_PUB.PROGRAM_LINKS_TBL_TYPE
36365 , x_return_status OUT NOCOPY VARCHAR2
36366 , x_msg_count OUT NOCOPY NUMBER
36367 , x_msg_data OUT NOCOPY VARCHAR2)
36368 is
36369
36370 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_PROGRAM_LINKS';
36371
36372 l_pm_product_code VARCHAR2(2) := NULL;
36373 l_function_allowed VARCHAR2(1) := NULL;
36374
36375 l_count NUMBER := NULL;
36376 l_parent_project_id NUMBER := NULL;
36377 l_sub_project_id NUMBER := NULL;
36378 l_task_id NUMBER := NULL;
36379 l_task_version_id NUMBER := NULL;
36380
36381 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
36382 select ppev.element_version_id
36383 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
36384 , pa_proj_structure_types ppst, pa_structure_types pst
36385 where ppevs.proj_element_id = ppst.proj_element_id
36386 and ppst.structure_type_id = pst.structure_type_id
36387 and ppev.project_id = ppevs.project_id
36388 and ppev.parent_structure_version_id = ppevs.element_version_id
36389 and ppevs.current_working_flag = 'Y'
36390 and ppev.proj_element_id = c_task_id
36391 and pst.structure_type = c_structure_type;
36392
36393 cursor l_cur_project_id1(c_task_id NUMBER) is
36394 select ppe.project_id
36395 from pa_proj_elements ppe
36396 where ppe.proj_element_id = c_task_id;
36397
36398 cursor l_cur_project_id2(c_task_version_id NUMBER) is
36399 select ppev.project_id, ppev.proj_element_id
36400 from pa_proj_element_versions ppev
36401 where ppev.element_version_id = c_task_version_id;
36402
36403 l_unexp_error_flag VARCHAR2(1) := 'N';
36404 l_exp_error_flag VARCHAR2(1) := 'N';
36405
36406 l_msg_index_out NUMBER := NULL;
36407 l_return_status VARCHAR2(1) := NULL;
36408 l_msg_count NUMBER := NULL;
36409 l_msg_data VARCHAR2(2000) := NULL;
36410
36411 cursor l_cur_prog_name (c_task_version_id NUMBER) is
36412 select ppa.name
36413 from pa_projects_all ppa, pa_proj_element_versions ppev
36414 where ppa.project_id = ppev.project_id
36415 and ppev.element_version_id = c_task_version_id;
36416
36417 cursor l_cur_prog_name2 (c_project_id NUMBER) is
36418 select ppa.name
36419 from pa_projects_all ppa
36420 where ppa.project_id = c_project_id;
36421
36422 cursor l_cur_proj_name (c_project_id NUMBER) is
36423 select ppa.name
36424 from pa_projects_all ppa
36425 where ppa.project_id = c_project_id;
36426
36427 cursor l_cur_task_name (c_task_ver_id NUMBER) is
36428 select ppe.name
36429 from pa_proj_elements ppe, pa_proj_element_versions ppev
36430 where ppe.project_id = ppev.project_id
36431 and ppe.proj_element_id = ppev.proj_element_id
36432 and ppev.element_version_id = c_task_ver_id;
36433
36434 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
36435 select ppa.project_id
36436 from pa_projects_all ppa
36437 where pm_project_reference = c_sub_project_reference
36438 and ppa.project_id = c_sub_project_id;
36439
36440 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
36441 select ppa.project_id
36442 from pa_projects_all ppa
36443 where pm_project_reference = c_sub_project_reference;
36444
36445 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
36446 select ppa.project_id
36447 from pa_projects_all ppa
36448 where ppa.project_id = c_sub_project_id;
36449
36450 l_parent_sub_flag VARCHAR2(1) := NULL;
36451
36452 l_program_name VARCHAR2(30) := NULL;
36453 l_project_name VARCHAR2(30) := NULL;
36454 l_task_name VARCHAR2(30) := NULL;
36455
36456 TYPE l_prog_error_rec_type IS RECORD
36457 (program_name VARCHAR2(300) := null
36458 ,object_relationship_id NUMBER := null
36459 ,error_msg VARCHAR2(2000) := null);
36460
36461 TYPE l_prog_error_tbl_type IS TABLE OF l_prog_error_rec_type INDEX BY BINARY_INTEGER;
36462
36463 l_prog_error_tbl l_prog_error_tbl_type;
36464
36465 l_error_count NUMBER := 0;
36466 l_msg_code VARCHAR2(30) := null;
36467
36468 l NUMBER := 0;
36469
36470 begin
36471
36472 -- Establish the save point.
36473 savepoint CREATE_PROGRAM_LINKS_AMG;
36474
36475 -- Initialize the message table if requested.
36476 if FND_API.TO_BOOLEAN(p_init_msg_list) then
36477 FND_MSG_PUB.initialize;
36478 end if;
36479
36480 -- Standard call to check for API compatibility.
36481 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
36482 raise FND_API.G_EXC_UNEXPECTED_ERROR;
36483 end if;
36484
36485 -- Initialize the return status
36486 x_return_status := FND_API.G_RET_STS_SUCCESS;
36487
36488 -- Initialize the error flags.
36489 l_unexp_error_flag := 'N';
36490 l_exp_error_flag := 'N';
36491
36492 -- Loop through the records in the input PL/SQL table.
36493 for l_count in p_program_links_tbl.FIRST..p_program_links_tbl.LAST loop
36494
36495 -- Clear the message stack.
36496 FND_MSG_PUB.initialize;
36497
36498 -- Initialize the error flags.
36499 l_unexp_error_flag := 'N';
36500 l_exp_error_flag := 'N';
36501 l_parent_sub_flag := 'P'; -- By default assume that any errors will be for the parent project.
36502
36503 -- Initialize the local variables.
36504 l_parent_project_id := NULL;
36505 l_sub_project_id := NULL;
36506 l_task_id := NULL;
36507 l_task_version_id := NULL;
36508
36509 -- If task version id is not passed in.
36510 if ((p_program_links_tbl(l_count).task_version_id is null)
36511 or (p_program_links_tbl(l_count).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36512
36513 -- Convert parent project reference to id.
36514 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36515 PA_PROJECT_PVT.Convert_pm_projref_to_id
36516 (p_pm_project_reference => p_program_links_tbl(l_count).pm_parent_project_reference
36517 , p_pa_project_id => p_program_links_tbl(l_count).parent_project_id
36518 , p_out_project_id => l_parent_project_id
36519 , p_return_status => l_return_status);
36520
36521 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36522 l_unexp_error_flag := 'Y';
36523 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36524 l_exp_error_flag := 'Y';
36525 end if;
36526
36527 end if;
36528
36529 -- Convert task reference to id.
36530 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36531 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
36532 (p_pa_project_id => l_parent_project_id
36533 , p_pm_task_reference => p_program_links_tbl(l_count).pm_task_reference
36534 , p_pa_task_id => p_program_links_tbl(l_count).task_id
36535 , p_structure_type => p_program_links_tbl(l_count).structure_type
36536 , p_out_task_id => l_task_id
36537 , p_return_status => l_return_status);
36538
36539 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36540 l_unexp_error_flag := 'Y';
36541 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36542 l_exp_error_flag := 'Y';
36543 end if;
36544
36545 end if;
36546
36547 -- Find the task version id in the current working workplan structure version.
36548 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36549 open l_cur_task_ver_id(l_task_id, p_program_links_tbl(l_count).structure_type);
36550 fetch l_cur_task_ver_id into l_task_version_id;
36551 close l_cur_task_ver_id;
36552
36553 -- Validate that the task has a version in the specified structure type.
36554 if (l_task_version_id is null) then
36555 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
36556 l_exp_error_flag := 'Y';
36557 end if;
36558
36559 end if;
36560
36561 -- If task version id is passed in.
36562 else
36563 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36564 l_task_version_id := p_program_links_tbl(l_count).task_version_id;
36565 end if;
36566
36567 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36568 open l_cur_project_id2(l_task_version_id);
36569 fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
36570 if l_cur_project_id2%NOTFOUND then
36571 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
36572 l_exp_error_flag := 'Y';
36573 end if;
36574 close l_cur_project_id2;
36575 end if;
36576
36577 -- Validate the task id and project id of the task version id.
36578 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36579 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
36580 (p_pa_project_id => l_parent_project_id
36581 , p_pa_task_id => l_task_id
36582 , p_structure_type => p_program_links_tbl(l_count).structure_type
36583 , p_out_task_id => l_task_id
36584 , p_return_status => l_return_status);
36585
36586 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36587 l_unexp_error_flag := 'Y';
36588 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36589 l_exp_error_flag := 'Y';
36590 end if;
36591 end if;
36592
36593 end if;
36594
36595 -- Validate sub-project across organizations and convert sub-project reference to id.
36596 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36597
36598 if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
36599 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
36600 and ((p_program_links_tbl(l_count).sub_project_id is not null)
36601 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
36602
36603 open l_cur_sub_proj1(p_program_links_tbl(l_count).pm_sub_project_reference, p_program_links_tbl(l_count).sub_project_id);
36604 fetch l_cur_sub_proj1 into l_sub_project_id;
36605 close l_cur_sub_proj1;
36606
36607 elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
36608 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
36609
36610 open l_cur_sub_proj2(p_program_links_tbl(l_count).pm_sub_project_reference);
36611 fetch l_cur_sub_proj2 into l_sub_project_id;
36612 close l_cur_sub_proj2;
36613
36614 elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
36615 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36616
36617 open l_cur_sub_proj3(p_program_links_tbl(l_count).sub_project_id);
36618 fetch l_cur_sub_proj3 into l_sub_project_id;
36619 close l_cur_sub_proj3;
36620
36621 else
36622
36623 l_sub_project_id := null;
36624
36625 end if;
36626
36627 if (l_sub_project_id is null) then
36628
36629 PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
36630 l_exp_error_flag := 'Y';
36631
36632 l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
36633
36634 end if;
36635
36636 end if;
36637
36638 -- Check if the task version id corresponds to a summary task.
36639 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration
36640 if (pa_proj_elements_utils.is_summary_task_or_structure(l_task_version_id) = 'Y') then
36641 -- The task is a summary task.
36642 open l_cur_prog_name(l_task_version_id);
36643 fetch l_cur_prog_name into l_program_name;
36644 close l_cur_prog_name;
36645
36646 open l_cur_proj_name(l_sub_project_id);
36647 fetch l_cur_proj_name into l_project_name;
36648 close l_cur_proj_name;
36649
36650 open l_cur_task_name(l_task_version_id);
36651 fetch l_cur_task_name into l_task_name;
36652 close l_cur_task_name;
36653
36654 PA_UTILS.ADD_MESSAGE('PA','PA_PS_CANT_LINK_SUMMARY_TASK'
36655 ,'PROJ', l_project_name
36656 ,'PROG', l_program_name
36657 ,'TASK', l_task_name);
36658
36659 l_exp_error_flag := 'Y';
36660
36661 end if;
36662 end if;
36663
36664 -- Actions performed using the APIs are subject to function security.
36665 -- If the responsibility does not allow a function to be executed the API
36666 -- will error out as the user does not have access.
36667 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36668 if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN'
36669 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
36670 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36671 (p_api_version_number => p_api_version
36672 , p_responsibility_id => FND_GLOBAL.RESP_ID
36673 , p_function_name => 'PA_PAXPREPR_WP_LINK_PROJ'
36674 , p_msg_count => l_msg_count
36675 , p_msg_data => l_msg_data
36676 , p_return_status => l_return_status
36677 , p_function_allowed => l_function_allowed);
36678
36679 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36680 l_unexp_error_flag := 'Y';
36681 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36682 l_exp_error_flag := 'Y';
36683 end if;
36684
36685 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36686 if l_function_allowed = 'N' then
36687 pa_interface_utils_pub.map_new_amg_msg
36688 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
36689 , p_msg_attribute => 'CHANGE'
36690 , p_resize_flag => 'Y'
36691 , p_msg_context => 'GENERAL'
36692 , p_attribute1 => ''
36693 , p_attribute2 => ''
36694 , p_attribute3 => ''
36695 , p_attribute4 => ''
36696 , p_attribute5 => '');
36697 l_exp_error_flag := 'Y';
36698 end if;
36699 end if;
36700 end if;
36701 end if;
36702
36703 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36704 if (p_program_links_tbl(l_count).structure_type = 'FINANCIAL'
36705 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
36706 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36707 (p_api_version_number => p_api_version
36708 , p_responsibility_id => FND_GLOBAL.RESP_ID
36709 , p_function_name => 'PA_PAXPREPR_OPT_SUBPROJECTS'
36710 , p_msg_count => l_msg_count
36711 , p_msg_data => l_msg_data
36712 , p_return_status => l_return_status
36713 , p_function_allowed => l_function_allowed);
36714
36715 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36716 l_unexp_error_flag := 'Y';
36717 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36718 l_exp_error_flag := 'Y';
36719 end if;
36720
36721 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36722 if l_function_allowed = 'N' then
36723 pa_interface_utils_pub.map_new_amg_msg
36724 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
36725 , p_msg_attribute => 'CHANGE'
36726 , p_resize_flag => 'Y'
36727 , p_msg_context => 'GENERAL'
36728 , p_attribute1 => ''
36729 , p_attribute2 => ''
36730 , p_attribute3 => ''
36731 , p_attribute4 => ''
36732 , p_attribute5 => '');
36733 l_exp_error_flag := 'Y';
36734 end if;
36735 end if;
36736 end if;
36737 end if;
36738
36739 -- Check if the sub-project has the appropriate structure type enabled.
36740 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36741 if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN') then
36742 if (pa_project_structure_utils.check_workplan_enabled(l_sub_project_id) = 'N') then
36743
36744 open l_cur_proj_name(l_sub_project_id);
36745 fetch l_cur_proj_name into l_project_name;
36746 close l_cur_proj_name;
36747
36748 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_WORKPLAN_TO_LINK'
36749 ,'PROJ', l_project_name);
36750 l_exp_error_flag := 'Y';
36751
36752 l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
36753
36754 end if;
36755 elsif (p_program_links_tbl(l_count).structure_type = 'FINANCIAL') then
36756 if (pa_project_structure_utils.check_financial_enabled(l_sub_project_id) = 'N') then
36757
36758 open l_cur_proj_name(l_sub_project_id);
36759 fetch l_cur_proj_name into l_project_name;
36760 close l_cur_proj_name;
36761
36762 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_FINANCIAL_TO_LINK'
36763 ,'PROJ', l_project_name);
36764 l_exp_error_flag := 'Y';
36765
36766 l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
36767
36768 end if;
36769 end if;
36770 end if;
36771
36772 -- Call the API to create the sub-project association.
36773 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
36774 PA_RELATIONSHIP_PUB.CREATE_SUBPROJECT_ASSOCIATION
36775 (p_api_version => p_api_version
36776 , p_init_msg_list => FND_API.G_FALSE
36777 , p_commit => p_commit
36778 , p_calling_module => 'AMG'
36779 , p_debug_mode => p_debug_mode
36780 , p_max_msg_count => p_max_msg_count
36781 , p_src_proj_id => l_parent_project_id
36782 , p_task_ver_id => l_task_version_id
36783 , p_dest_proj_id => l_sub_project_id
36784 , p_comment => p_program_links_tbl(l_count).comments
36785 , x_return_status => l_return_status
36786 , x_msg_count => l_msg_count
36787 , x_msg_data => l_msg_data);
36788
36789 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36790 l_unexp_error_flag := 'Y';
36791 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36792 l_exp_error_flag := 'Y';
36793 end if;
36794 end if;
36795
36796 -- In case of any errors in the loop store the message context and message code for the error message reported
36797 -- in the local pl/sql error table.
36798
36799 if ((l_unexp_error_flag = 'Y') or (l_exp_error_flag = 'Y')) then
36800
36801 l_prog_error_tbl(l_count).program_name := NULL;
36802 l_prog_error_tbl(l_count).object_relationship_id := NULL;
36803
36804 if (l_parent_sub_flag = 'P') then -- Indicates that the error is for the parent_project.
36805
36806 if (((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
36807 and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
36808 and ((p_program_links_tbl(l_count).parent_project_id is not null)
36809 and (p_program_links_tbl(l_count).parent_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
36810 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
36811 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
36812 elsif ((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
36813 and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
36814 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
36815 elsif ((p_program_links_tbl(l_count).parent_project_id is not null)
36816 and (p_program_links_tbl(l_count).parent_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36817 open l_cur_prog_name2(p_program_links_tbl(l_count).parent_project_id);
36818 fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
36819 close l_cur_prog_name2;
36820 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
36821 elsif ((p_program_links_tbl(l_count).task_version_id is not null)
36822 and (p_program_links_tbl(l_count).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36823 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).task_version_id;
36824 end if;
36825
36826 elsif (l_parent_sub_flag = 'S') then -- Indicates that the error is for the sub-project.
36827
36828 if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
36829 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
36830 and ((p_program_links_tbl(l_count).sub_project_id is not null)
36831 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
36832 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
36833 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
36834 elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
36835 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
36836 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
36837 elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
36838 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
36839 open l_cur_prog_name2(p_program_links_tbl(l_count).sub_project_id);
36840 fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
36841 close l_cur_prog_name2;
36842 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
36843 end if;
36844
36845 end if;
36846
36847 PA_INTERFACE_UTILS_PUB.get_messages
36848 (p_encoded => FND_API.G_FALSE -- Get the encoded message.
36849 , p_msg_index => 1 -- Get the message at index 1.
36850 , p_data => l_prog_error_tbl(l_count).error_msg
36851 , p_msg_index_out => l_msg_index_out);
36852
36853 end if;
36854
36855 end loop;
36856
36857 -- In case of any errors in the above loop, populate the tokenized error messages in the error stack and raise an exception:
36858 l_error_count := l_prog_error_tbl.count;
36859
36860 if (l_error_count > 0) then
36861
36862 -- Set the return status to error.
36863 x_return_status := FND_API.G_RET_STS_ERROR;
36864
36865 -- Clear all previous messages from the message stack.
36866 FND_MSG_PUB.initialize;
36867
36868 -- Populate the generic error message.
36869 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
36870
36871 -- Loop through the local pl/sql error table to populate the tokenized error messages.
36872 for l in l_prog_error_tbl.first..l_prog_error_tbl.last
36873 loop
36874 if (l_prog_error_tbl.exists(l)) then
36875 PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
36876 ,'TASKNAME',l_prog_error_tbl(l).program_name
36877 ,'TASKNUMBER',l_prog_error_tbl(l).object_relationship_id
36878 ,'ERRORMSG', l_prog_error_tbl(l).error_msg);
36879 end if;
36880 end loop;
36881
36882 raise FND_API.G_EXC_ERROR;
36883
36884 end if;
36885
36886 -- Commit if p_commit = FND_API.G_TRUE.
36887 if (p_commit = FND_API.G_TRUE) then
36888 commit;
36889 end if;
36890
36891 exception
36892
36893 when FND_API.G_EXC_ERROR then
36894 rollback to CREATE_PROGRAM_LINKS_AMG;
36895 x_return_status := FND_API.G_RET_STS_ERROR;
36896 x_msg_count := FND_MSG_PUB.count_msg;
36897
36898 if x_msg_count = 1 then
36899 PA_INTERFACE_UTILS_PUB.get_messages
36900 (p_encoded => FND_API.G_FALSE
36901 , p_msg_index => 1
36902 , p_msg_count => x_msg_count
36903 , p_msg_data => x_msg_data
36904 , p_data => x_msg_data
36905 , p_msg_index_out => l_msg_index_out);
36906 end if;
36907
36908 when FND_API.G_EXC_UNEXPECTED_ERROR then
36909 rollback to CREATE_PROGRAM_LINKS_AMG;
36910 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36911 x_msg_count := FND_MSG_PUB.count_msg;
36912
36913 if x_msg_count = 1 then
36914 PA_INTERFACE_UTILS_PUB.get_messages
36915 (p_encoded => FND_API.G_FALSE
36916 , p_msg_index => 1
36917 , p_msg_count => x_msg_count
36918 , p_msg_data => x_msg_data
36919 , p_data => x_msg_data
36920 , p_msg_index_out => l_msg_index_out);
36921 end if;
36922
36923 when OTHERS then
36924 rollback to CREATE_PROGRAM_LINKS_AMG;
36925 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36926 x_msg_count := 1;
36927 x_msg_data := SQLERRM;
36928 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
36929 FND_MSG_PUB.add_exc_msg
36930 ( p_pkg_name => G_PKG_NAME
36931 , p_procedure_name => l_api_name);
36932 end if;
36933
36934 end CREATE_PROGRAM_LINKS;
36935
36936 PROCEDURE UPDATE_PROGRAM_LINK_COMMENTS
36937 (p_api_version IN NUMBER := 1.0
36938 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
36939 , p_commit IN VARCHAR2 := FND_API.G_FALSE
36940 , p_debug_mode IN VARCHAR2 := 'N'
36941 , p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36942 , p_program_links_tbl IN PA_PROJECT_PUB.PROGRAM_LINKS_TBL_TYPE
36943 , x_return_status OUT NOCOPY VARCHAR2
36944 , x_msg_count OUT NOCOPY NUMBER
36945 , x_msg_data OUT NOCOPY VARCHAR2)
36946 is
36947
36948 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_PROGRAM_LINK_COMMENTS';
36949
36950 l_pm_product_code VARCHAR2(2) := NULL;
36951 l_function_allowed VARCHAR2(1) := NULL;
36952
36953 l_count NUMBER := NULL;
36954 l_parent_project_id NUMBER := NULL;
36955 l_sub_project_id NUMBER := NULL;
36956 l_task_id NUMBER := NULL;
36957 l_task_version_id NUMBER := NULL;
36958 l_object_relationship_id NUMBER := NULL;
36959 l_record_version_number NUMBER := NULL;
36960
36961
36962 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
36963 select ppev.element_version_id
36964 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
36965 , pa_proj_structure_types ppst, pa_structure_types pst
36966 where ppevs.proj_element_id = ppst.proj_element_id
36967 and ppst.structure_type_id = pst.structure_type_id
36968 and ppev.project_id = ppevs.project_id
36969 and ppev.parent_structure_version_id = ppevs.element_version_id
36970 and ppevs.current_working_flag = 'Y'
36971 and ppev.proj_element_id = c_task_id
36972 and pst.structure_type = c_structure_type;
36973
36974 cursor l_cur_por1(c_task_version_id NUMBER, c_sub_proj_id NUMBER, c_structure_type VARCHAR2) is
36975 select por2.object_relationship_id, por2.record_version_number
36976 from pa_object_relationships por1, pa_object_relationships por2
36977 where por1.object_id_to1 = por2.object_id_from1
36978 and por1.relationship_type = 'S'
36979 and por1.object_id_from1 = c_task_version_id
36980 and por2.object_id_to2 = c_sub_proj_id
36981 and por2.relationship_type = decode(c_structure_type, 'WORKPLAN', 'LW', 'FINANCIAL', 'LF');
36982
36983 cursor l_cur_por2(c_object_relationship_id NUMBER) is
36984 select por.object_relationship_id, por.record_version_number, por.object_id_from2
36985 from pa_object_relationships por
36986 where por.relationship_type in ('LW','LF')
36987 and por.object_relationship_id = c_object_relationship_id;
36988
36989 cursor l_cur_prog_name (c_task_version_id NUMBER) is
36990 select ppa.name
36991 from pa_projects_all ppa, pa_proj_element_versions ppev
36992 where ppa.project_id = ppev.project_id
36993 and ppev.element_version_id = c_task_version_id;
36994
36995 cursor l_cur_prog_name2 (c_project_id NUMBER) is
36996 select ppa.name
36997 from pa_projects_all ppa
36998 where ppa.project_id = c_project_id;
36999
37000 cursor l_cur_proj_name (c_project_id NUMBER) is
37001 select ppa.name
37002 from pa_projects_all ppa
37003 where ppa.project_id = c_project_id;
37004
37005 cursor l_cur_task_name (c_task_ver_id NUMBER) is
37006 select ppe.name
37007 from pa_proj_elements ppe, pa_proj_element_versions ppev
37008 where ppe.project_id = ppev.project_id
37009 and ppe.proj_element_id = ppev.proj_element_id
37010 and ppev.element_version_id = c_task_ver_id;
37011
37012 cursor l_cur_project_id2(c_task_version_id NUMBER) is
37013 select ppev.project_id, ppev.proj_element_id
37014 from pa_proj_element_versions ppev
37015 where ppev.element_version_id = c_task_version_id;
37016
37017 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
37018 select ppa.project_id
37019 from pa_projects_all ppa
37020 where pm_project_reference = c_sub_project_reference
37021 and ppa.project_id = c_sub_project_id;
37022
37023 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
37024 select ppa.project_id
37025 from pa_projects_all ppa
37026 where pm_project_reference = c_sub_project_reference;
37027
37028 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
37029 select ppa.project_id
37030 from pa_projects_all ppa
37031 where ppa.project_id = c_sub_project_id;
37032
37033 l_parent_sub_flag VARCHAR2(1) := NULL;
37034
37035 l_program_name VARCHAR2(30) := NULL;
37036 l_project_name VARCHAR2(30) := NULL;
37037 l_task_name VARCHAR2(30) := NULL;
37038
37039 l_unexp_error_flag VARCHAR2(1) := 'N';
37040 l_exp_error_flag VARCHAR2(1) := 'N';
37041
37042 l_msg_index_out NUMBER := NULL;
37043 l_return_status VARCHAR2(1) := NULL;
37044 l_msg_count NUMBER := NULL;
37045 l_msg_data VARCHAR2(2000) := NULL;
37046
37047 TYPE l_prog_error_rec_type IS RECORD
37048 (program_name VARCHAR2(300) := null
37049 ,object_relationship_id NUMBER := null
37050 ,error_msg VARCHAR2(2000) := null);
37051
37052 TYPE l_prog_error_tbl_type IS TABLE OF l_prog_error_rec_type INDEX BY BINARY_INTEGER;
37053
37054 l_prog_error_tbl l_prog_error_tbl_type;
37055
37056 l_error_count NUMBER := 0;
37057 l_msg_code VARCHAR2(30) := null;
37058
37059 l NUMBER := 0;
37060
37061 begin
37062
37063 -- Establish the save point.
37064 savepoint UPDATE_PROGRAM_LINK_CMNTS_AMG;
37065
37066 -- Initialize the message table if requested.
37067 if FND_API.TO_BOOLEAN(p_init_msg_list) then
37068 FND_MSG_PUB.initialize;
37069 end if;
37070
37071 -- Standard call to check for API compatibility.
37072 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
37073 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37074 end if;
37075
37076 -- Initialize the return status
37077 x_return_status := FND_API.G_RET_STS_SUCCESS;
37078
37079 -- Initialize the error flags.
37080 l_unexp_error_flag := 'N';
37081 l_exp_error_flag := 'N';
37082
37083 -- Loop through the records in the input PL/SQL table.
37084 for l_count in p_program_links_tbl.FIRST..p_program_links_tbl.LAST loop
37085
37086 -- Clear the message stack.
37087 FND_MSG_PUB.initialize;
37088
37089 -- Initialize the error flags.
37090 l_unexp_error_flag := 'N';
37091 l_exp_error_flag := 'N';
37092 l_parent_sub_flag := 'P'; -- By default assume that any errors will be for the parent project.
37093
37094 -- Initialize the local variables.
37095 l_parent_project_id := NULL;
37096 l_sub_project_id := NULL;
37097 l_task_id := NULL;
37098 l_task_version_id := NULL;
37099 l_object_relationship_id := NULL;
37100 l_record_version_number := NULL;
37101
37102 -- If object relationship id is not passed in.
37103 if ((p_program_links_tbl(l_count).object_relationship_id is null)
37104 or (p_program_links_tbl(l_count).object_relationship_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37105
37106 -- If task version id is not passed in.
37107 if ((p_program_links_tbl(l_count).task_version_id is null)
37108 or (p_program_links_tbl(l_count).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37109
37110 -- Convert parent project reference to id.
37111 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37112 PA_PROJECT_PVT.Convert_pm_projref_to_id
37113 (p_pm_project_reference => p_program_links_tbl(l_count).pm_parent_project_reference
37114 , p_pa_project_id => p_program_links_tbl(l_count).parent_project_id
37115 , p_out_project_id => l_parent_project_id
37116 , p_return_status => l_return_status);
37117
37118 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37119 l_unexp_error_flag := 'Y';
37120 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37121 l_exp_error_flag := 'Y';
37122 end if;
37123 end if;
37124
37125 -- Convert task reference to id
37126 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37127 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37128 (p_pa_project_id => l_parent_project_id
37129 , p_pm_task_reference => p_program_links_tbl(l_count).pm_task_reference
37130 , p_pa_task_id => p_program_links_tbl(l_count).task_id
37131 , p_structure_type => p_program_links_tbl(l_count).structure_type
37132 , p_out_task_id => l_task_id
37133 , p_return_status => l_return_status);
37134
37135 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37136 l_unexp_error_flag := 'Y';
37137 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37138 l_exp_error_flag := 'Y';
37139 end if;
37140 end if;
37141
37142 -- Find the task version id in the current working workplan structure version.
37143 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37144 open l_cur_task_ver_id(l_task_id, p_program_links_tbl(l_count).structure_type);
37145 fetch l_cur_task_ver_id into l_task_version_id;
37146 close l_cur_task_ver_id;
37147
37148 -- Validate that the task has a version in the specified structure type.
37149 if (l_task_version_id is null) then
37150 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
37151 l_exp_error_flag := 'Y';
37152 end if;
37153
37154 end if;
37155
37156 -- If task version id is passed in.
37157 else
37158 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37159 l_task_version_id := p_program_links_tbl(l_count).task_version_id;
37160 end if;
37161
37162 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37163 open l_cur_project_id2(l_task_version_id);
37164 fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
37165 if l_cur_project_id2%NOTFOUND then
37166 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
37167 l_exp_error_flag := 'Y';
37168 end if;
37169
37170 close l_cur_project_id2;
37171 end if;
37172
37173 -- Validate the task id and project id of the task version id.
37174 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37175 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37176 (p_pa_project_id => l_parent_project_id
37177 , p_pa_task_id => l_task_id
37178 , p_structure_type => p_program_links_tbl(l_count).structure_type
37179 , p_out_task_id => l_task_id
37180 , p_return_status => l_return_status);
37181
37182 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37183 l_unexp_error_flag := 'Y';
37184 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37185 l_exp_error_flag := 'Y';
37186 end if;
37187 end if;
37188
37189 end if;
37190
37191 -- Validate sub-project across organizations and convert sub-project reference to id.
37192 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37193
37194 if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37195 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37196 and ((p_program_links_tbl(l_count).sub_project_id is not null)
37197 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37198
37199 open l_cur_sub_proj1(p_program_links_tbl(l_count).pm_sub_project_reference, p_program_links_tbl(l_count).sub_project_id);
37200 fetch l_cur_sub_proj1 into l_sub_project_id;
37201 close l_cur_sub_proj1;
37202
37203 elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37204 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37205
37206 open l_cur_sub_proj2(p_program_links_tbl(l_count).pm_sub_project_reference);
37207 fetch l_cur_sub_proj2 into l_sub_project_id;
37208 close l_cur_sub_proj2;
37209
37210 elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37211 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37212
37213 open l_cur_sub_proj3(p_program_links_tbl(l_count).sub_project_id);
37214 fetch l_cur_sub_proj3 into l_sub_project_id;
37215 close l_cur_sub_proj3;
37216
37217 else
37218
37219 l_sub_project_id := null;
37220
37221 end if;
37222
37223 if (l_sub_project_id is null) then
37224
37225 PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
37226 l_exp_error_flag := 'Y';
37227
37228 l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37229
37230 end if;
37231
37232 end if;
37233
37234 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37235 open l_cur_por1(l_task_version_id, l_sub_project_id, p_program_links_tbl(l_count).structure_type);
37236 fetch l_cur_por1 into l_object_relationship_id, l_record_version_number;
37237 if l_cur_por1%NOTFOUND then
37238 -- Program Link does not exist between the parent project and the sub-project.
37239 open l_cur_prog_name(l_task_version_id);
37240 fetch l_cur_prog_name into l_program_name;
37241 close l_cur_prog_name;
37242
37243 open l_cur_proj_name(l_sub_project_id);
37244 fetch l_cur_proj_name into l_project_name;
37245 close l_cur_proj_name;
37246
37247 open l_cur_task_name(l_task_version_id);
37248 fetch l_cur_task_name into l_task_name;
37249 close l_cur_task_name;
37250
37251 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_LINK_EXISTS'
37252 ,'PROJ', l_project_name
37253 ,'PROG', l_program_name
37254 ,'TASK', l_task_name
37255 ,'STR', p_program_links_tbl(l_count).structure_type);
37256
37257 l_exp_error_flag := 'Y';
37258 end if;
37259 close l_cur_por1;
37260 end if;
37261
37262 -- If object relationship id is passed in.
37263 else
37264 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37265 open l_cur_por2(p_program_links_tbl(l_count).object_relationship_id);
37266 fetch l_cur_por2 into l_object_relationship_id, l_record_version_number, l_parent_project_id;
37267 if l_cur_por2%NOTFOUND then
37268 -- Invalid object_relationship_id.
37269 PA_UTILS.ADD_MESSAGE('PA','PA_PS_INVALID_OBJ_REL_ID'
37270 ,'OBJRELID', p_program_links_tbl(l_count).object_relationship_id);
37271
37272 l_exp_error_flag := 'Y';
37273 end if;
37274 close l_cur_por2;
37275 end if;
37276 end if;
37277
37278 -- Actions performed using the APIs are subject to function security.
37279 -- If the responsibility does not allow a function to be executed the API
37280 -- will error out as the user does not have access.
37281 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37282 if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN'
37283 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37284 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37285 (p_api_version_number => p_api_version
37286 , p_responsibility_id => FND_GLOBAL.RESP_ID
37287 , p_function_name => 'PA_PAXPREPR_WP_LINK_PROJ'
37288 , p_msg_count => l_msg_count
37289 , p_msg_data => l_msg_data
37290 , p_return_status => l_return_status
37291 , p_function_allowed => l_function_allowed);
37292
37293 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37294 l_unexp_error_flag := 'Y';
37295 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37296 l_exp_error_flag := 'Y';
37297 end if;
37298
37299 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37300 if l_function_allowed = 'N' then
37301 pa_interface_utils_pub.map_new_amg_msg
37302 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
37303 , p_msg_attribute => 'CHANGE'
37304 , p_resize_flag => 'Y'
37305 , p_msg_context => 'GENERAL'
37306 , p_attribute1 => ''
37307 , p_attribute2 => ''
37308 , p_attribute3 => ''
37309 , p_attribute4 => ''
37310 , p_attribute5 => '');
37311 l_exp_error_flag := 'Y';
37312 end if;
37313 end if;
37314 end if;
37315
37316 end if;
37317
37318 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37319 if (p_program_links_tbl(l_count).structure_type = 'FINANCIAL'
37320 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37321 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37322 (p_api_version_number => p_api_version
37323 , p_responsibility_id => FND_GLOBAL.RESP_ID
37324 , p_function_name => 'PA_PAXPREPR_OPT_SUBPROJECTS'
37325 , p_msg_count => l_msg_count
37326 , p_msg_data => l_msg_data
37327 , p_return_status => l_return_status
37328 , p_function_allowed => l_function_allowed);
37329
37330 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37331 l_unexp_error_flag := 'Y';
37332 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37333 l_exp_error_flag := 'Y';
37334 end if;
37335
37336 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37337 if l_function_allowed = 'N' then
37338 pa_interface_utils_pub.map_new_amg_msg
37339 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
37340 , p_msg_attribute => 'CHANGE'
37341 , p_resize_flag => 'Y'
37342 , p_msg_context => 'GENERAL'
37343 , p_attribute1 => ''
37344 , p_attribute2 => ''
37345 , p_attribute3 => ''
37346 , p_attribute4 => ''
37347 , p_attribute5 => '');
37348 l_exp_error_flag := 'Y';
37349 end if;
37350 end if;
37351 end if;
37352 end if;
37353
37354 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37355 -- Call the API to update the sub-project association.
37356 PA_RELATIONSHIP_PUB.UPDATE_SUBPROJECT_ASSOCIATION
37357 (p_api_version => p_api_version
37358 , p_init_msg_list => FND_API.G_FALSE
37359 , p_calling_module => 'AMG'
37360 , p_max_msg_count => p_max_msg_count
37361 , p_commit => p_commit
37362 , p_debug_mode => p_debug_mode
37363 , p_object_relationship_id => l_object_relationship_id
37364 , p_record_version_number => l_record_version_number
37365 , p_comment => p_program_links_tbl(l_count).comments
37366 , x_return_status => l_return_status
37367 , x_msg_count => l_msg_count
37368 , x_msg_data => l_msg_data);
37369
37370 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37371 l_unexp_error_flag := 'Y';
37372 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37373 l_exp_error_flag := 'Y';
37374 end if;
37375 end if;
37376
37377 -- In case of any errors in the loop store the message context and message code for the error message reported
37378 -- in the local pl/sql error table.
37379
37380 if ((l_unexp_error_flag = 'Y') or (l_exp_error_flag = 'Y')) then
37381
37382 l_prog_error_tbl(l_count).program_name := NULL;
37383 l_prog_error_tbl(l_count).object_relationship_id := NULL;
37384
37385 if (l_parent_sub_flag = 'P') then -- Indicates that the error is for the parent_project.
37386
37387 if (((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
37388 and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37389 and ((p_program_links_tbl(l_count).parent_project_id is not null)
37390 and (p_program_links_tbl(l_count).parent_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37391 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
37392 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
37393 elsif ((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
37394 and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37395 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
37396 elsif ((p_program_links_tbl(l_count).parent_project_id is not null)
37397 and (p_program_links_tbl(l_count).parent_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37398 open l_cur_prog_name2(p_program_links_tbl(l_count).parent_project_id);
37399 fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
37400 close l_cur_prog_name2;
37401 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
37402 elsif ((p_program_links_tbl(l_count).task_version_id is not null)
37403 and (p_program_links_tbl(l_count).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37404 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).task_version_id;
37405 end if;
37406
37407 elsif (l_parent_sub_flag = 'S') then -- Indicates that the error is for the sub-project.
37408
37409 if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37410 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37411 and ((p_program_links_tbl(l_count).sub_project_id is not null)
37412 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37413 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
37414 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
37415 elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37416 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37417 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
37418 elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37419 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37420 open l_cur_prog_name2(p_program_links_tbl(l_count).sub_project_id);
37421 fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
37422 close l_cur_prog_name2;
37423 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
37424 end if;
37425
37426 end if;
37427
37428 PA_INTERFACE_UTILS_PUB.get_messages
37429 (p_encoded => FND_API.G_FALSE -- Get the encoded message.
37430 , p_msg_index => 1 -- Get the message at index 1.
37431 , p_data => l_prog_error_tbl(l_count).error_msg
37432 , p_msg_index_out => l_msg_index_out);
37433
37434 end if;
37435
37436 end loop;
37437
37438 -- In case of any errors in the above loop, populate the tokenized error messages in the error stack and raise an exception:
37439 l_error_count := l_prog_error_tbl.count;
37440
37441 if (l_error_count > 0) then
37442
37443 -- Set the return status to error.
37444 x_return_status := FND_API.G_RET_STS_ERROR;
37445
37446 -- Clear all previous messages from the message stack.
37447 FND_MSG_PUB.initialize;
37448
37449 -- Populate the generic error message.
37450 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
37451
37452 -- Loop through the local pl/sql error table to populate the tokenized error messages.
37453 for l in l_prog_error_tbl.first..l_prog_error_tbl.last
37454 loop
37455 if (l_prog_error_tbl.exists(l)) then
37456 PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
37457 ,'TASKNAME',l_prog_error_tbl(l).program_name
37458 ,'TASKNUMBER',l_prog_error_tbl(l).object_relationship_id
37459 ,'ERRORMSG', l_prog_error_tbl(l).error_msg);
37460 end if;
37461 end loop;
37462
37463 raise FND_API.G_EXC_ERROR;
37464
37465 end if;
37466
37467 -- Commit if p_commit = FND_API.G_TRUE.
37468 if (p_commit = FND_API.G_TRUE) then
37469 commit;
37470 end if;
37471
37472 exception
37473
37474 when FND_API.G_EXC_ERROR then
37475 rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
37476 x_return_status := FND_API.G_RET_STS_ERROR;
37477 x_msg_count := FND_MSG_PUB.count_msg;
37478
37479 if x_msg_count = 1 then
37480 PA_INTERFACE_UTILS_PUB.get_messages
37481 (p_encoded => FND_API.G_FALSE
37482 , p_msg_index => 1
37483 , p_msg_count => x_msg_count
37484 , p_msg_data => x_msg_data
37485 , p_data => x_msg_data
37486 , p_msg_index_out => l_msg_index_out);
37487 end if;
37488
37489 when FND_API.G_EXC_UNEXPECTED_ERROR then
37490 rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
37491 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37492 x_msg_count := FND_MSG_PUB.count_msg;
37493
37494 if x_msg_count = 1 then
37495 PA_INTERFACE_UTILS_PUB.get_messages
37496 (p_encoded => FND_API.G_FALSE
37497 , p_msg_index => 1
37498 , p_msg_count => x_msg_count
37499 , p_msg_data => x_msg_data
37500 , p_data => x_msg_data
37501 , p_msg_index_out => l_msg_index_out);
37502 end if;
37503
37504 when OTHERS then
37505 rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
37506 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37507 x_msg_count := 1;
37508 x_msg_data := SQLERRM;
37509 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
37510 FND_MSG_PUB.add_exc_msg
37511 ( p_pkg_name => G_PKG_NAME
37512 , p_procedure_name => l_api_name);
37513 end if;
37514
37515 end UPDATE_PROGRAM_LINK_COMMENTS;
37516
37517 PROCEDURE DELETE_PROGRAM_LINK
37518 (p_api_version IN NUMBER := 1.0
37519 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
37520 , p_commit IN VARCHAR2 := FND_API.G_FALSE
37521 , p_debug_mode IN VARCHAR2 := 'N'
37522 , p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37523 , p_object_relationship_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37524 , p_parent_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37525 , p_pm_parent_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37526 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37527 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37528 , p_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37529 , p_structure_type IN VARCHAR2 := 'WORKPLAN'
37530 , p_sub_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37531 , p_pm_sub_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
37532 , x_return_status OUT NOCOPY VARCHAR2
37533 , x_msg_count OUT NOCOPY NUMBER
37534 , x_msg_data OUT NOCOPY VARCHAR2)
37535 is
37536
37537 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_PROGRAM_LINK';
37538
37539 l_pm_product_code VARCHAR2(2) := NULL;
37540 l_function_allowed VARCHAR2(1) := NULL;
37541
37542 l_count NUMBER := NULL;
37543 l_parent_project_id NUMBER := NULL;
37544 l_sub_project_id NUMBER := NULL;
37545 l_task_id NUMBER := NULL;
37546 l_task_version_id NUMBER := NULL;
37547 l_object_relationship_id NUMBER := NULL;
37548 l_record_version_number NUMBER := NULL;
37549
37550 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
37551 select ppev.element_version_id
37552 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
37553 , pa_proj_structure_types ppst, pa_structure_types pst
37554 where ppevs.proj_element_id = ppst.proj_element_id
37555 and ppst.structure_type_id = pst.structure_type_id
37556 and ppev.project_id = ppevs.project_id
37557 and ppev.parent_structure_version_id = ppevs.element_version_id
37558 and ppevs.current_working_flag = 'Y'
37559 and ppev.proj_element_id = c_task_id
37560 and pst.structure_type = c_structure_type;
37561
37562 cursor l_cur_por1(c_task_version_id NUMBER, c_sub_proj_id NUMBER, c_structure_type VARCHAR2) is
37563 select por2.object_relationship_id, por2.record_version_number
37564 from pa_object_relationships por1, pa_object_relationships por2
37565 where por1.object_id_to1 = por2.object_id_from1
37566 and por1.relationship_type = 'S'
37567 and por1.object_id_from1 = c_task_version_id
37568 and por2.object_id_to2 = c_sub_proj_id
37569 and por2.relationship_type = decode(c_structure_type, 'WORKPLAN', 'LW', 'FINANCIAL', 'LF');
37570
37571 cursor l_cur_por2(c_object_relationship_id NUMBER) is
37572 select por.object_relationship_id, por.record_version_number, por.object_id_from2
37573 from pa_object_relationships por
37574 where por.relationship_type in ('LW','LF')
37575 and por.object_relationship_id = c_object_relationship_id;
37576
37577 cursor l_cur_prog_name (c_task_version_id NUMBER) is
37578 select ppa.name
37579 from pa_projects_all ppa, pa_proj_element_versions ppev
37580 where ppa.project_id = ppev.project_id
37581 and ppev.element_version_id = c_task_version_id;
37582
37583 cursor l_cur_proj_name (c_project_id NUMBER) is
37584 select ppa.name
37585 from pa_projects_all ppa
37586 where ppa.project_id = c_project_id;
37587
37588 cursor l_cur_task_name (c_task_ver_id NUMBER) is
37589 select ppe.name
37590 from pa_proj_elements ppe, pa_proj_element_versions ppev
37591 where ppe.project_id = ppev.project_id
37592 and ppe.proj_element_id = ppev.proj_element_id
37593 and ppev.element_version_id = c_task_ver_id;
37594
37595 cursor l_cur_project_id2(c_task_version_id NUMBER) is
37596 select ppev.project_id, ppev.proj_element_id
37597 from pa_proj_element_versions ppev
37598 where ppev.element_version_id = c_task_version_id;
37599
37600 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
37601 select ppa.project_id
37602 from pa_projects_all ppa
37603 where pm_project_reference = c_sub_project_reference
37604 and ppa.project_id = c_sub_project_id;
37605
37606 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
37607 select ppa.project_id
37608 from pa_projects_all ppa
37609 where pm_project_reference = c_sub_project_reference;
37610
37611 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
37612 select ppa.project_id
37613 from pa_projects_all ppa
37614 where ppa.project_id = c_sub_project_id;
37615
37616 l_program_name VARCHAR2(30) := NULL;
37617 l_project_name VARCHAR2(30) := NULL;
37618 l_task_name VARCHAR2(30) := NULL;
37619
37620 l_msg_index_out NUMBER := NULL;
37621 l_return_status VARCHAR2(1) := NULL;
37622 l_msg_count NUMBER := NULL;
37623 l_msg_data VARCHAR2(2000) := NULL;
37624
37625 begin
37626
37627 -- Establish the save point.
37628 savepoint DELETE_PROGRAM_LINK_AMG;
37629
37630 -- Initialize the message table if requested.
37631 if FND_API.TO_BOOLEAN(p_init_msg_list) then
37632 FND_MSG_PUB.initialize;
37633 end if;
37634
37635 -- Standard call to check for API compatibility.
37636 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
37637 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37638 end if;
37639
37640 -- Initialize the return status
37641 x_return_status := FND_API.G_RET_STS_SUCCESS;
37642
37643 -- If object relationship id is not passed in.
37644 if ((p_object_relationship_id is null)
37645 or (p_object_relationship_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37646
37647 -- If task version id is not passed in.
37648 if ((p_task_version_id is null)
37649 or (p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37650
37651 -- Convert parent project reference to id.
37652 PA_PROJECT_PVT.Convert_pm_projref_to_id
37653 (p_pm_project_reference => p_pm_parent_project_reference
37654 , p_pa_project_id => p_parent_project_id
37655 , p_out_project_id => l_parent_project_id
37656 , p_return_status => l_return_status);
37657
37658 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37659 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37660 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37661 raise FND_API.G_EXC_ERROR;
37662 end if;
37663
37664 -- Convert task reference to id
37665 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37666 (p_pa_project_id => l_parent_project_id
37667 , p_pm_task_reference => p_pm_task_reference
37668 , p_pa_task_id => p_task_id
37669 , p_structure_type => p_structure_type
37670 , p_out_task_id => l_task_id
37671 , p_return_status => l_return_status);
37672
37673 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37674 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37675 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37676 raise FND_API.G_EXC_ERROR;
37677 end if;
37678
37679 -- Find the task version id in the current working workplan structure version.
37680 open l_cur_task_ver_id(l_task_id, p_structure_type);
37681 fetch l_cur_task_ver_id into l_task_version_id;
37682 close l_cur_task_ver_id;
37683
37684 -- Validate that the task has a version in the specified structure type.
37685 if (l_task_version_id is null) then
37686 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
37687 raise FND_API.G_EXC_ERROR;
37688 end if;
37689
37690 -- If task version id is passed in.
37691 else
37692 l_task_version_id := p_task_version_id;
37693
37694 open l_cur_project_id2(l_task_version_id);
37695 fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
37696 if l_cur_project_id2%NOTFOUND then
37697 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
37698 raise FND_API.G_EXC_ERROR;
37699 end if;
37700 close l_cur_project_id2;
37701
37702 -- Validate the task id and project id of the task version id.
37703 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37704 (p_pa_project_id => l_parent_project_id
37705 , p_pa_task_id => l_task_id
37706 , p_structure_type => p_structure_type
37707 , p_out_task_id => l_task_id
37708 , p_return_status => l_return_status);
37709
37710 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37711 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37712 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37713 raise FND_API.G_EXC_ERROR;
37714 end if;
37715
37716 end if;
37717
37718 -- Validate sub-project across organizations and convert sub-project reference to id.
37719 if (((p_pm_sub_project_reference is not null)
37720 and (p_pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37721 and ((p_sub_project_id is not null)
37722 and (p_sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37723
37724 open l_cur_sub_proj1(p_pm_sub_project_reference, p_sub_project_id);
37725 fetch l_cur_sub_proj1 into l_sub_project_id;
37726 close l_cur_sub_proj1;
37727
37728 elsif ((p_pm_sub_project_reference is not null)
37729 and (p_pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37730
37731 open l_cur_sub_proj2(p_pm_sub_project_reference);
37732 fetch l_cur_sub_proj2 into l_sub_project_id;
37733 close l_cur_sub_proj2;
37734
37735 elsif ((p_sub_project_id is not null)
37736 and (p_sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37737
37738 open l_cur_sub_proj3(p_sub_project_id);
37739 fetch l_cur_sub_proj3 into l_sub_project_id;
37740 close l_cur_sub_proj3;
37741
37742 else
37743
37744 l_sub_project_id := null;
37745
37746 end if;
37747
37748 if (l_sub_project_id is null) then
37749
37750 PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
37751 raise FND_API.G_EXC_ERROR;
37752
37753 end if;
37754
37755 open l_cur_por1(l_task_version_id, l_sub_project_id, p_structure_type);
37756 fetch l_cur_por1 into l_object_relationship_id, l_record_version_number;
37757 if l_cur_por1%NOTFOUND then
37758 -- Program Link does not exist between the parent project and the sub-project.
37759
37760 open l_cur_prog_name(l_task_version_id);
37761 fetch l_cur_prog_name into l_program_name;
37762 close l_cur_prog_name;
37763
37764 open l_cur_proj_name(l_sub_project_id);
37765 fetch l_cur_proj_name into l_project_name;
37766 close l_cur_proj_name;
37767
37768 open l_cur_task_name(l_task_version_id);
37769 fetch l_cur_task_name into l_task_name;
37770 close l_cur_task_name;
37771
37772 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_LINK_EXISTS'
37773 ,'PROJ', l_project_name
37774 ,'PROG', l_program_name
37775 ,'TASK', l_task_name
37776 ,'STR', p_structure_type);
37777
37778 close l_cur_por1;
37779
37780 RAISE FND_API.G_EXC_ERROR;
37781 end if;
37782
37783 close l_cur_por1;
37784
37785 -- If object relationship id is passed in.
37786 else
37787 open l_cur_por2(p_object_relationship_id);
37788 fetch l_cur_por2 into l_object_relationship_id, l_record_version_number, l_parent_project_id;
37789 if l_cur_por2%NOTFOUND then
37790 -- Invalid object_relationship_id.
37791
37792 PA_UTILS.ADD_MESSAGE('PA','PA_PS_INVALID_OBJ_REL_ID'
37793 ,'OBJRELID', p_object_relationship_id);
37794
37795 close l_cur_por2;
37796
37797 RAISE FND_API.G_EXC_ERROR;
37798 end if;
37799
37800 close l_cur_por2;
37801 end if;
37802
37803 -- Actions performed using the APIs are subject to function security.
37804 -- If the responsibility does not allow a function to be executed the API
37805 -- will error out as the user does not have access.
37806 if (p_structure_type = 'WORKPLAN'
37807 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37808 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37809 (p_api_version_number => p_api_version
37810 , p_responsibility_id => FND_GLOBAL.RESP_ID
37811 , p_function_name => 'PA_PAXPREPR_WP_LINK_PROJ'
37812 , p_msg_count => l_msg_count
37813 , p_msg_data => l_msg_data
37814 , p_return_status => l_return_status
37815 , p_function_allowed => l_function_allowed);
37816
37817 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37818 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37819 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37820 raise FND_API.G_EXC_ERROR;
37821 end if;
37822
37823 if l_function_allowed = 'N' then
37824 pa_interface_utils_pub.map_new_amg_msg
37825 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
37826 , p_msg_attribute => 'CHANGE'
37827 , p_resize_flag => 'Y'
37828 , p_msg_context => 'GENERAL'
37829 , p_attribute1 => ''
37830 , p_attribute2 => ''
37831 , p_attribute3 => ''
37832 , p_attribute4 => ''
37833 , p_attribute5 => '');
37834 raise FND_API.G_EXC_ERROR;
37835 end if;
37836 end if;
37837
37838 if (p_structure_type = 'FINANCIAL'
37839 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37840 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37841 (p_api_version_number => p_api_version
37842 , p_responsibility_id => FND_GLOBAL.RESP_ID
37843 , p_function_name => 'PA_PAXPREPR_OPT_SUBPROJECTS'
37844 , p_msg_count => l_msg_count
37845 , p_msg_data => l_msg_data
37846 , p_return_status => l_return_status
37847 , p_function_allowed => l_function_allowed);
37848
37849 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37850 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37851 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37852 raise FND_API.G_EXC_ERROR;
37853 end if;
37854
37855 if l_function_allowed = 'N' then
37856 pa_interface_utils_pub.map_new_amg_msg
37857 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
37858 , p_msg_attribute => 'CHANGE'
37859 , p_resize_flag => 'Y'
37860 , p_msg_context => 'GENERAL'
37861 , p_attribute1 => ''
37862 , p_attribute2 => ''
37863 , p_attribute3 => ''
37864 , p_attribute4 => ''
37865 , p_attribute5 => '');
37866 raise FND_API.G_EXC_ERROR;
37867 end if;
37868 end if;
37869
37870 -- Call the API to delete the sub-project association.
37871 PA_RELATIONSHIP_PUB.DELETE_SUBPROJECT_ASSOCIATION
37872 (p_api_version => p_api_version
37873 , p_init_msg_list => p_init_msg_list
37874 , p_commit => p_commit
37875 , p_calling_module => 'AMG'
37876 , p_debug_mode => p_debug_mode
37877 , p_max_msg_count => p_max_msg_count
37878 , p_object_relationships_id => l_object_relationship_id
37879 , p_record_version_number => l_record_version_number
37880 , x_return_status => l_return_status
37881 , x_msg_count => l_msg_count
37882 , x_msg_data => l_msg_data);
37883
37884 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37885 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37886 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37887 raise FND_API.G_EXC_ERROR;
37888 end if;
37889
37890 -- Commit if p_commit = FND_API.G_TRUE.
37891 if (p_commit = FND_API.G_TRUE) then
37892 commit;
37893 end if;
37894
37895 exception
37896
37897 when FND_API.G_EXC_ERROR then
37898 rollback to DELETE_PROGRAM_LINK_AMG;
37899 x_return_status := FND_API.G_RET_STS_ERROR;
37900 x_msg_count := FND_MSG_PUB.count_msg;
37901
37902 if x_msg_count = 1 then
37903 PA_INTERFACE_UTILS_PUB.get_messages
37904 (p_encoded => FND_API.G_FALSE
37905 , p_msg_index => 1
37906 , p_msg_count => x_msg_count
37907 , p_msg_data => x_msg_data
37908 , p_data => x_msg_data
37909 , p_msg_index_out => l_msg_index_out);
37910 end if;
37911
37912 when FND_API.G_EXC_UNEXPECTED_ERROR then
37913 rollback to DELETE_PROGRAM_LINK_AMG;
37914 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37915 x_msg_count := FND_MSG_PUB.count_msg;
37916
37917 if x_msg_count = 1 then
37918 PA_INTERFACE_UTILS_PUB.get_messages
37919 (p_encoded => FND_API.G_FALSE
37920 , p_msg_index => 1
37921 , p_msg_count => x_msg_count
37922 , p_msg_data => x_msg_data
37923 , p_data => x_msg_data
37924 , p_msg_index_out => l_msg_index_out);
37925 end if;
37926
37927 when OTHERS then
37928 rollback to DELETE_PROGRAM_LINK_AMG;
37929 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37930 x_msg_count := 1;
37931 x_msg_data := SQLERRM;
37932 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
37933 FND_MSG_PUB.add_exc_msg
37934 ( p_pkg_name => G_PKG_NAME
37935 , p_procedure_name => l_api_name);
37936 end if;
37937
37938 end DELETE_PROGRAM_LINK;
37939
37940 -- Bug # 5072032.
37941
37942
37943 -- Bug 7525628
37944 PROCEDURE UPDATE_FINANCIAL_ATTRIBUTES
37945 (
37946 P_API_VERSION_NUMBER IN NUMBER,
37947 P_COMMIT IN VARCHAR2,
37948 P_INIT_MSG_LIST IN VARCHAR2,
37949 P_PA_PROJECT_ID IN NUMBER,
37950 P_TASK_ID_TBL IN SYSTEM.PA_NUM_TBL_TYPE,
37951 P_SERVICE_TYPE_CODE_TBL IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
37952 P_CHARGEABLE_FLAG_TBL IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
37953 P_BILLABLE_FLAG_TBL IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
37954 X_MSG_COUNT OUT NOCOPY NUMBER,
37955 X_MSG_DATA OUT NOCOPY VARCHAR2,
37956 X_RETURN_STATUS OUT NOCOPY VARCHAR2
37957 )
37958 IS
37959 l_published_version NUMBER(15);
37960 l_prev_published_version NUMBER(15);
37961 l_new_task NUMBER(15);
37962 i NUMBER := 0;
37963 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_FINANCIAL_ATTRIBUTES';
37964
37965 --cursor which fetches the previous published version
37966 cursor c_prev_published_version(p_pa_project_id IN NUMBER) is
37967 select element_version_id from (
37968 select element_version_id
37969 from pa_proj_elem_ver_structure ppevs,
37970 pa_proj_structure_types ppst
37971 where ppevs.latest_eff_published_flag = 'N'
37972 and ppst.proj_element_id = ppevs.proj_element_id
37973 and ppst.structure_type_id = 1
37974 and ppevs.status_code = 'STRUCTURE_PUBLISHED'
37975 and ppevs.project_id = p_pa_project_id
37976 order by ppevs.published_date desc
37977 ) where rownum = 1;
37978
37979 --cursor which fetches all tasks added as a result of last publish
37980 cursor c_newly_added_tasks(l_published_version IN NUMBER,l_prev_published_version IN NUMBER) is
37981 select proj_element_id
37982 from pa_proj_element_versions
37983 where project_id = P_PA_PROJECT_ID
37984 and object_type = 'PA_TASKS'
37985 and PARENT_STRUCTURE_VERSION_ID = l_published_version
37986 MINUS
37987 select proj_element_id
37988 from pa_proj_element_versions
37989 where project_id = P_PA_PROJECT_ID
37990 and object_type = 'PA_TASKS'
37991 and PARENT_STRUCTURE_VERSION_ID = l_prev_published_version;
37992
37993
37994 BEGIN
37995
37996 l_published_version := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_pa_project_id);
37997
37998 OPEN c_prev_published_version(p_pa_project_id);
37999 FETCH c_prev_published_version INTO l_prev_published_version;
38000 CLOSE c_prev_published_version;
38001
38002 FOR rec IN c_newly_added_tasks(l_published_version, l_prev_published_version) LOOP
38003 FOR i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
38004 IF p_task_id_tbl(i) = rec.proj_element_id THEN
38005
38006 UPDATE pa_tasks
38007 SET service_type_code = nvl(p_service_type_code_tbl(i),service_type_code), -- 7525628
38008 chargeable_flag = nvl(p_chargeable_flag_tbl(i),chargeable_flag), -- 7525628
38009 billable_flag = nvl(p_billable_flag_tbl(i),billable_flag) -- 7525628
38010 WHERE task_id = p_task_id_tbl(i);
38011 EXIT;
38012
38013
38014 END IF;
38015 END LOOP;
38016 END LOOP;
38017
38018 x_return_status := FND_API.G_RET_STS_SUCCESS;
38019
38020 EXCEPTION
38021
38022 WHEN FND_API.G_EXC_ERROR THEN
38023
38024 x_return_status := FND_API.G_RET_STS_ERROR;
38025
38026
38027 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
38028
38029 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38030
38031 WHEN OTHERS THEN
38032
38033 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38034
38035 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
38036 THEN
38037 FND_MSG_PUB.add_exc_msg
38038 ( p_pkg_name => G_PKG_NAME
38039 , p_procedure_name => l_api_name );
38040
38041 END IF;
38042
38043 END UPDATE_FINANCIAL_ATTRIBUTES;
38044 --End of fix for Bug 7525628
38045
38046
38047 end PA_PROJECT_PUB;