[Home] [Help]
PACKAGE BODY: APPS.PA_PROJECT_PUB
Source
1 PACKAGE BODY pa_project_pub AS
2 /* $Header: PAPMPRPB.pls 120.125.12020000.10 2013/05/20 13:39:22 djambhek ship $ */
3 --Global constants to be used in error messages
4 G_PKG_NAME CONSTANT VARCHAR2(30) := 'PA_PROJECT_PUB';
5 G_PROJECT_CODE CONSTANT VARCHAR2(7) := 'PROJECT';
6 G_CUSTOMER_CODE CONSTANT VARCHAR2(8) := 'CUSTOMER';
7 G_KEY_MEMBER CONSTANT VARCHAR2(10) := 'KEY_MEMBER';
8 G_CLASS_CATEGORY_CODE CONSTANT VARCHAR2(14) := 'CLASS_CATEGORY';
9 G_TASK_CODE CONSTANT VARCHAR2(4) := 'TASK';
10 -- anlee org role changes
11 G_ORG_ROLE CONSTANT VARCHAR2(10) := 'ORG_ROLE';
12 --Added by rtarway for FP.M Mapping
13 G_PROJECT_SHARING_TYPE VARCHAR2(250);
14 --Added by rtarway for FP.M Mapping
15 --PACKAGE GLOBAL to be used during updates -------------------------------------------
16 G_USER_ID CONSTANT NUMBER := FND_GLOBAL.user_id;
17 G_LOGIN_ID CONSTANT NUMBER := FND_GLOBAL.login_id;
18
19 l_pm_product_code VARCHAR2(30) := 'Z'; /*for bug 2413400 a new variable defined.*/
20 /* increased the lenght for bug 2665656 */
21
22 -- PACKAGE CURSORS -------------------------------------------------------------------------
23 --needed to get the field values associated to a particular project_type
24
25 CURSOR l_project_type_csr
26 (p_project_type pa_project_types.project_type%type)
27 IS
28 SELECT *
29 FROM pa_project_types
30 WHERE project_type = p_project_type;
31
32 --needed to get the field values associated to a particular project
33
34 CURSOR l_project_csr
35 (p_pa_project_id pa_projects.project_id%type)
36 IS
37 SELECT *
38 FROM pa_projects p
39 WHERE p.project_id = p_pa_project_id;
40
41 /*new cursor for bug no 2413400*/
42 Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
43 Is
44 Select 'X'
45 from pa_lookups
46 where lookup_type='PM_PRODUCT_CODE'
47 and lookup_code = p_pm_product_code;
48
49 --FP.M Changes by rtarway for Mapping and Set Financial Task
50 --This cursor gets the record version number from pa_tasks for the passed task version id
51 CURSOR c_get_pa_record_version_number (l_task_version_id NUMBER , l_project_id NUMBER)
52 IS
53 SELECT
54 allTasks.record_version_number
55
56 FROM
57 PA_TASKS allTasks,
58 pa_proj_element_versions elever
59 WHERE
60 elever.element_version_id = l_task_version_id
61 AND
62 elever.project_id = l_project_id
63 AND elever.proj_element_id = allTasks.task_id
64 AND allTasks.project_id = elever.project_id;
65 --End FP.M Changes by rtarway for Mapping and Set Financial Task
66
67 --
68 -- ================================================
69 --
70 --Name: Create_Project
71 --Type: Procedure
72 --Description: This procedure can be used to create a project on basis
73 -- of an existing project or template.
74 --
75 --Called subprograms: pa_project_core1.copy_project
76 --
77 --
78 --
79 --History:
80 -- 31-JUL-1996 L. de Werker Created
81 -- 04-MAR-1997 L. de Werker - workflow enabling added
82 --
83 -- 22-DEC-97 jwhite - Added OUT-parameter p_workflow_started
84 -- for workflow.
85 -- 19-JAN-01 anlee - Added l_team_template_id, l_country_code,
86 -- l_region, and l_city params for team template
87 -- 09-MAY-02 Maansari - Project Structure Integration
88 -- - Added call to PA_PROJ_TASK_STRUC.COPY_STRUCTURE api.
89 -- 19-may-2003 sramesh -Fixed the bug 2910972.Defaulting of the key member start
90 -- date
91 -- 15-jul-2003 sramesh -- Added the code for bug 2982057.
92 -- Changed the logic to populate the long_task_name
93 -- with task_name when the long_task_name is null.
94 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
95 -- dependency_type and lag days to tasks and create dependencies.
96 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
97 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
98 -- 03-Mar-04 Puneet 3435905 FP M Changes for Deliverables : Start
99 -- 17-Jun-2004 Avaithia 3683732 : Provided Default Values for p_class_categories and p_key_members parameters
100 -- In Create_Project and Update_Project API
101 -- 11-Dec-2005 Sunkalya Bug 4870305: Modified create_project. Passed pm_product_code
102 -- parameter to the call to function check_unique_project_reference.Changes Tagged.
103 -- 12-Feb-2009 KJai Bug 7830143 : In Procedure Create_project, called PA_MOAC_UTILS.SET_POLICY_CONTEXT() to set context.
104 --
105 PROCEDURE Create_Project
106 (
107 p_api_version_number IN NUMBER
108 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
109 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
110 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
111 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
112 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
113 ,p_workflow_started OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
114 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
115 ,p_op_validate_flag IN VARCHAR2 := 'Y' --added by rtarway 4218977
116 ,p_project_in IN project_in_rec_type
117 ,p_project_out OUT NOCOPY project_out_rec_type /*Added the nocopy check for bug 2674619*/
118 /* Added for tracking bug - add customers */
119 ,p_customers_in IN pa_project_pub.customer_tbl_type := G_customers_in_tbl
120 /* Added Default Value for p_class_categories and p_key_members */
121 ,p_key_members IN project_role_tbl_type := G_key_members_in_tbl
122 ,p_class_categories IN class_category_tbl_type := G_class_categories_in_tbl
123 ,p_tasks_in IN task_in_tbl_type
124 ,p_tasks_out OUT NOCOPY task_out_tbl_type /*added the nocopy check for the bug 2674619*/
125 -- anlee org role changes
126 ,p_org_roles IN project_role_tbl_type := G_org_roles_in_tbl
127 --project structures
128 ,p_structure_in IN structure_in_rec_type := G_structure_in_rec
129 -- ,p_structure_out OUT structure_out_rec_type := G_structure_out_rec
130 ,p_ext_attr_tbl_in IN PA_EXT_ATTR_TABLE_TYPE := G_ext_attr_in_tbl -- <EA added parameter for Ext Attr/>
131 --project structures
132 --FP M : deliverables
133 ,p_deliverables_in IN deliverable_in_tbl_type := G_deliverables_in_tbl -- 3435905 passing default value
134 -- ,p_deliverables_out OUT NOCOPY deliverable_out_tbl_type -- 3435905 removed
135 ,p_deliverable_actions_in IN action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default value
136 -- ,p_deliverable_actions_out OUT NOCOPY action_out_tbl_type -- 3435905 removed
137 --FP M : deliverables
138 )
139 IS
140
141 --needed to get the overridable fields for this project template source
142
143 CURSOR l_override_fields_csr
144 (p_pa_source_template_id NUMBER)
145 IS
146 SELECT DISTINCT *
147 FROM pa_override_fields_v pof
148 WHERE pof.pa_source_template_id = p_pa_source_template_id;
149
150
151 -- 4363092 TCA changes, replaced RA views with HZ tables
152 -- commented out below cursor as it is not used anywhere
153 --needed to default the address_id to that of the primary customer
154 /*
155 CURSOR l_address_csr
156 (p_customer_id NUMBER)
157 IS
158 SELECT a.address_id
159 FROM ra_addresses a
160 , ra_site_uses su
161 WHERE a.customer_id = p_customer_id
162 AND a.address_id = su.address_id
163 AND nvl(su.status,'A') = 'A'
164 AND su.site_use_code = 'SHIP_TO'
165 AND su.primary_flag = 'Y';
166 */
167 -- 4363092 end
168
169 --needed for validation of distribution rule
170 CURSOR l_source_project_type_csr (p_source_template_id IN NUMBER )IS
171 SELECT project_type
172 FROM pa_projects
173 WHERE project_id = p_source_template_id;
174
175 CURSOR l_get_wf_status_csr (l_project_id IN NUMBER)
176 IS
177 SELECT wf_status_code
178 FROM pa_projects
179 WHERE project_id = l_project_id;
180
181 -- IC and Multi National Currency changes Starts ...
182
183 Cursor l_customer_csr (p_customer_id NUMBER)
184 Is
185 Select inv_currency_code,
186 inv_rate_type,
187 inv_rate_date,
188 inv_exchange_rate,
189 allow_inv_user_rate_type_flag,
190 bill_another_project_flag,
191 receiver_task_id
192 From pa_project_customers
193 Where customer_id = p_customer_id;
194
195 -- IC and Multi National Currency changes Ends ...
196
197 -- below cursor added for bug 2254661
198 Cursor l_temp_flag_csr(p_proj_id NUMBER)
199 Is
200 select NVL(template_flag,'N')
201 from pa_projects
202 where project_id = p_proj_id;
203
204 -- 5182868 Added below cursor to validate template for effectiveness
205
206 Cursor l_temp_eff_flag_csr(p_proj_id NUMBER)
207 Is
208 select 'N'
209 from pa_projects_all
210 where project_id = p_proj_id
211 and template_flag = 'Y'
212 and ((nvl(trunc(template_start_date_active), trunc(sysdate)) > trunc(sysdate)) or
213 (nvl(trunc(template_end_date_active), trunc(sysdate)) < trunc(sysdate)));
214
215 l_temp_eff_flag VARCHAR2(1) := 'Y'; -- added local variable
216
217 -- 5182868 end
218
219 /* added the below cursor for bug 3000981 */
220 CURSOR cur_pa_impl
221 IS
222 SELECT default_rate_type
223 FROM pa_implementations;
224
225 TYPE override_fields_tbl_type IS TABLE OF l_override_fields_csr%rowtype
226 INDEX BY BINARY_INTEGER;
227
228 l_api_name CONSTANT VARCHAR2(30) := 'create_project';
229
230 l_return_status VARCHAR2(1);
231 l_copy_task_flag VARCHAR2(1) := 'N'; --used by copy_project
232 l_copy_budget_flag VARCHAR2(1) := 'N'; --idem
233 l_use_override_flag VARCHAR2(1) := 'Y'; --idem
234 l_copy_assignment_flag VARCHAR2(1) := 'N';
235 l_template_flag VARCHAR2(1) := 'N'; --idem
236 l_err_code NUMBER(15);
237 l_err_stage VARCHAR2(2000);
238 l_err_stack VARCHAR2(2000);
239 i NUMBER := 0; --counter
240 j NUMBER := 0; --counter
241 l_is_overridable BOOLEAN := FALSE;
242 l_project_type_rec pa_project_types%rowtype;
243 l_project_rec pa_projects%rowtype;
244 l_project_in_rec project_in_rec_type;
245 l_override_fields_rec l_override_fields_csr%rowtype;
246 l_override_fields_tab override_fields_tbl_type;
247 l_key_members project_role_tbl_type;
248 -- anlee org role changes
249 l_org_roles project_role_tbl_type;
250 l_class_categories class_category_tbl_type;
251 l_project_id NUMBER;
252 l_task_id NUMBER;
253 l_wbs_level NUMBER := 1;
254 l_top_task_id NUMBER;
255 l_parent_task_id NUMBER;
256 l_address_id NUMBER;
257 l_task_in_rec task_in_rec_type;
258 l_bill_to_address_id NUMBER := NULL; --Initialized to NULL for Bug 3911782
259 l_ship_to_address_id NUMBER := NULl; --Initialized to NULL for Bug 3911782
260 l_bill_to_contact_id NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : Bug 4633405
261 l_ship_to_contact_id NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : Bug 4633405
262 l_source_project_type VARCHAR2(80);
263 l_project_start_date DATE;
264 l_project_completion_date DATE;
265 l_msg_count NUMBER ;
266 l_msg_data VARCHAR2(2000);
267 l_function_allowed VARCHAR2(1);
268 l_resp_id NUMBER := 0;
269 l_proj_num_numeric NUMBER;
270 l_attribute_category VARCHAR2(30);
271 l_attribute1 VARCHAR2(150);
272 l_attribute2 VARCHAR2(150);
273 l_attribute3 VARCHAR2(150);
274 l_attribute4 VARCHAR2(150);
275 l_attribute5 VARCHAR2(150);
276 l_attribute6 VARCHAR2(150);
277 l_attribute7 VARCHAR2(150);
278 l_attribute8 VARCHAR2(150);
279 l_attribute9 VARCHAR2(150);
280 l_attribute10 VARCHAR2 (150);
281 l_team_template_id NUMBER;
282 l_country_code VARCHAR2(2);
283 l_region VARCHAR2(240);
284 l_city VARCHAR2(80);
285 --Sakthi
286 l_agreement_currency VARCHAR2(10);
287 l_agreement_amount NUMBER;
288 l_agreement_org_id NUMBER;
289 --Sakthi
290 -- Tax Code changes starts ...
291 l_output_tax_code VARCHAR2(30);
292 l_retention_tax_code VARCHAR2(30);
293 -- Tax Code changes ends ...
294
295 -- CC and Multi National Currency Starts ...
296 -- Project ...
297 l_project_currency_code VARCHAR2(15);
298 l_allow_cross_charge_flag VARCHAR2(1);
299 l_project_rate_date DATE;
300 l_project_rate_type VARCHAR2(30);
301 l_cc_process_labor_flag VARCHAR2(1);
302 l_labor_tp_schedule_id NUMBER;
303 l_labor_tp_fixed_date DATE;
304 l_cc_process_nl_flag VARCHAR2(1);
305 l_nl_tp_schedule_id NUMBER;
306 l_nl_tp_fixed_date DATE;
307 l_cc_tax_task_id NUMBER;
308 -- Customer ...
309 l_inv_currency_code VARCHAR2(15);
310 l_inv_rate_type VARCHAR2(30);
311 l_inv_rate_date DATE;
312 l_inv_exchange_rate NUMBER;
313 l_allow_inv_rate_type_fg VARCHAR2(1);
314 l_bill_another_prj_flag VARCHAR2(1);
315 l_receiver_task_id NUMBER;
316 -- CC and Multi National Currency Ends ...
317
318 -- ORM Changes Starts here ...
319
320 l_role_list_id NUMBER;
321 l_work_type_id NUMBER;
322 l_calendar_id NUMBER;
323 l_location_id NUMBER;
324 l_probability_member_id NUMBER;
325 l_project_value NUMBER;
326 l_expected_approval_date DATE;
327 l_cost_job_group_id NUMBER;
328 l_bill_job_group_id NUMBER;
329
330 -- ORM Changes Ends here ...
331
332 l_emp_bill_rate_schedule_id NUMBER;
333 l_job_bill_rate_schedule_id NUMBER;
334
335 -- opportunity value changes
336 -- anlee
337 l_opp_value_currency_code VARCHAR2(15);
338 -- end of opportunity value changes
339 --Priority Code in quick entry
340 l_priority_code VARCHAR2(30);
341 l_security_level NUMBER;
342
343 l_project_number_out VARCHAR2(30);
344 l_actual_start_date DATE;
345 l_actual_finish_date DATE;
346 l_early_start_date DATE;
347 l_early_finish_date DATE;
348 l_late_start_date DATE;
349 l_late_finish_date DATE;
350 l_scheduled_start_date DATE;
351 l_scheduled_finish_date DATE;
352 l_out_start_date DATE;
353 l_out_completion_date DATE;
354 l_error_code NUMBER;
355 l_error_message VARCHAR2(100);
356 l_relationship_type VARCHAR2(30);
357 l_wf_status_code VARCHAR2(30);
358 l_create_project_number VARCHAR2(25);
359
360
361 --used for starting approve_project workflow
362 l_workflow_is_used VARCHAR2(1);
363 l_start_wf_automatically VARCHAR2(1);
364 p_multiple_task_msg VARCHAR2(1) := 'T';
365 l_class_code_categories NUMBER;
366 l_key_member NUMBER;
367 --below two variables added for bug 2254661
368 l_created_from_proj_id NUMBER;
369 l_temp_flag VARCHAR2(1);
370 --end 2254661
371 --anlee org role changes
372 l_org_role NUMBER;
373 l_party_id NUMBER;
374 l_project_party_id NUMBER;
375 l_resource_id NUMBER;
376 l_wf_item_type VARCHAR2(30);
377 l_wf_type VARCHAR2(30);
378 l_wf_party_process VARCHAR2(30);
379 l_assignment_id NUMBER;
380 l_end_date_active DATE;
381 t_adj_on_std_inv varchar2(2);
382
383 CURSOR l_check_org_csr(c_customer_id IN NUMBER) IS
384 SELECT PARTY_ID
385 FROM PA_CUSTOMERS_V
386 WHERE CUSTOMER_ID = c_customer_id
387 AND PARTY_TYPE = 'ORGANIZATION';
388
389 --Project Structures
390 l_structure_in_rec structure_in_rec_type;
391 v_task_id NUMBER;
392 v_parent_task_id NUMBER;
393 l_amg_segment1 VARCHAR2(25);
394 l_amg_task_number VARCHAR2(50);
395 l_task_version_id NUMBER;
396 l_delta NUMBER;
397 --Project Structures
398
399 --proj conn
400 v_first_index NUMBER;
401 l_ref_task_id NUMBER;
402 --proj conn
403
404 -- <EA>
405 l_failed_row_id_list VARCHAR2(32767);
406 l_errorcode VARCHAR2(150);
407 -- </EA>
408
409 --Bug 2931183
410 l_debug_mode varchar2(1);
411 g_module_name VARCHAR2(100) := 'pa.plsql.CREATE_PROJECT';
412
413 /* Bug 3077676 */
414 l_cust_acc_rel_code pa_implementations.cust_acc_rel_code%TYPE;
415 CURSOR get_cust_acc_rel_code IS
416 Select cust_acc_rel_code
417 From pa_implementations;
418
419 -- FP-M Bug # 3301192
420 l_d_task_ver_id NUMBER;
421 l_d_task_id NUMBER;
422 l_d_structure_version_id NUMBER;
423 l_d_loop_count NUMBER;
424
425 l_deliverable_id NUMBER; -- 3435905
426 i_actn NUMBER := 0; -- 3435905
427
428 --Begin Add by rtarway for FP.M Set Financial Task Changes
429 l_patask_record_version_number NUMBER;
430 --End Add by rtarway for FP.M Set Financial Task Changes
431
432 --Bug 3279981
433 CURSOR cur_get_orig_tt_cust_flag( c_project_id IN NUMBER ) IS
434 SELECT enable_top_task_customer_flag
435 FROM pa_projects_all
436 WHERE project_id = c_project_id ;
437
438 l_orig_def_tt_flag VARCHAR2(1);
439 l_cust_bill_split NUMBER;
440 l_def_tt_cust_flag VARCHAR2(1);
441 l_en_top_task_customer_flag VARCHAR2(1);
442 l_en_top_task_inv_mth_flag VARCHAR2(1);
443
444
445
446 --Bug 3279981
447 l_dup_name_flag VARCHAR2(1); --bug 2450064
448
449 l1 number;
450 l2 varchar2(1);
451 l3 number;
452 l4 varchar2(1);
453
454 l_in_customer_id NUMBER; -- Added for the bug 3825528
455
456 l_bug_wp_enabled VARCHAR2(1); -- Bug 4146369
457 l_bug_fp_enabled VARCHAR2(1); -- Bug 4146369
458
459 /* Start of code for bug #2111806 */
460
461 -- Start of Bug fix 4878696
462 -- Commented this cursor for Performance Bug 4878696
463 -- CURSOR c_prj(c_project_id IN NUMBER ) IS
464 -- select project_system_status_code
465 -- ,project_type_class_code
466 -- from pa_projects_v
467 -- where project_id = c_project_id;
468
469 -- Added the following cursor instead of the commented one as above for Performance Bug 4878696
470 CURSOR c_prj(c_project_id IN NUMBER ) IS
471 select PROJECT_SYSTEM_STATUS_CODE , PROJECT_TYPE_CLASS_CODE
472 from pa_projects_all ppa,pa_project_statuses pps,pa_project_types ppt
473 where ppa.project_id = c_project_id
474 and ppa.PROJECT_STATUS_CODE = pps.PROJECT_STATUS_CODE
475 and ppa.PROJECT_TYPE = ppt.PROJECT_TYPE
476 and pps.STATUS_TYPE = 'PROJECT'
477 and ppt.ORG_ID= ppa.ORG_ID ;
478
479 -- End of Bug fix 4878696
480
481 CURSOR c_prj_count(c_project_id IN NUMBER ) IS
482 select count(*)
483 from pa_project_players
484 where project_id = c_project_id
485 and project_role_type='PROJECT MANAGER';
486
487 l_proj_status pa_projects_all.project_status_code%TYPE;
488 l_proj_type_class pa_project_types_all.project_type_class_code%TYPE;
489 l_prj_mgr_count NUMBER;
490 /* End of code for bug #2111806. */
491
492 -- 4193743 Added below local variables
493 l_bill_to_customer_id NUMBER;
494 l_ship_to_customer_id NUMBER;
495 l_enable_top_task_cust_flag VARCHAR2(1) := 'N'; --added for tracking bug by aditi
496 l_project_relationship_code PA_PROJECT_CUSTOMERS.PROJECT_RELATIONSHIP_CODE%TYPE; --Variable added by aditi for tracking bug
497
498 -- 5191417 Added below cursor to validate priority_code
499
500 l_valid_prio_code VARCHAR2(1) := 'N';
501
502 CURSOR priority_code_csr(p_priority_code IN VARCHAR2) IS
503 Select
504 'Y'
505 from
506 pa_lookups
507 where
508 lookup_type = 'PA_PROJECT_PRIORITY_CODE'
509 and lookup_code = p_priority_code ;
510
511 -- 5191417 end
512
513 /* Added for 12.2Payroll billing ER 11899223 */
514 task_adj_on_std_inv varchar2(1) :='N';
515
516 Cursor c_adj_on_std_inv (p_adj_on_std_inv IN VARCHAR2)
517 Is
518 Select 'X'
519 from pa_lookups
520 where lookup_type='PA_ADJ_ON_STD_INV'
521 and lookup_code = p_adj_on_std_inv;
522
523 /* Added for 12.2Payroll billing ER 11899223 */
524 -- Bug#5191699. Added the cursor and the local variable below for validating
525 -- project security level.This can be either 'Enterprise' or 'Secured'.
526
527 l_check_sec_level VARCHAR2(1) := 'N';
528
529 CURSOR cur_check_sec_level(p_proj_sec_level IN VARCHAR2 ) IS
530 SELECT 'Y' FROM
531 dual
532 WHERE EXISTS
533 (SELECT NULL FROM pa_lookups
534 WHERE
535 lookup_type = 'PA_PROJECT_ACCESS_LEVEL' AND
536 lookup_code = p_proj_sec_level
537 );
538 -- End of code changes for Bug#5191699 in declare section
539
540 --Bug#5191521. Added the cursor and the local variable below for validating
541 -- probability member id.
542
543 l_check_prob_id VARCHAR2(1) := 'N';
544
545 CURSOR cur_validate_prob_member( p_project_id IN NUMBER ,p_probability_member_id IN NUMBER )
546 IS
547 SELECT 'Y' FROM dual
548 WHERE EXISTS
549 (
550 SELECT
551 NULL
552 FROM
553 pa_probability_members ppm,
554 pa_projects pp,
555 pa_project_types ppt
556 WHERE
557 pp.project_type = ppt.project_type AND
558 pp.org_id = ppt.org_id AND
559 ppt.probability_list_id = ppm.probability_list_id AND
560 pp.project_id = p_project_id AND
561 ppm.probability_member_id = p_probability_member_id AND
562 trunc(sysdate) BETWEEN ppm.start_date_active AND nvl(ppm.end_date_active,trunc(sysdate))
563 );
564 --End of code changes for Bug#5191521 in declare section
565
566
567 --sunkalya:federal bug#5511353
568 l_date_eff_funds_flag VARCHAR2(1);
569 l_orig_date_eff_funds_flag VARCHAR2(1);
570 CURSOR get_date_eff_funds_flag( c_project_id IN NUMBER )
571 IS
572 SELECT
573 nvl(DATE_EFF_FUNDS_CONSUMPTION,'N')
574 FROM
575 pa_projects_all
576 WHERE project_id = c_project_id ;
577
578 /* 7508661 : EnC : Start */
579
580 l_ar_rec_notify_flag VARCHAR2(1);
581 l_orig_ar_rec_notify_flag VARCHAR2(1);
582
583 CURSOR get_ar_rec_notify_flag( c_project_id IN NUMBER )
584 IS
585 SELECT
586 nvl(AR_REC_NOTIFY_FLAG,'N')
587 FROM
588 pa_projects_all
589 WHERE project_id = c_project_id ;
590 /* Added for 12.2Payroll billing ER 11899223 */
591 l_auto_release_pwp_inv VARCHAR2(1);
592 l_orig_auto_release_pwp_inv VARCHAR2(1);
593
594 l_bill_labor_accrual VARCHAR2(1);
595 l_orig_bill_labor_accrual VARCHAR2(1);
596 l_adj_on_std_inv VARCHAR2(2);
597 l_orig_adj_on_std_inv VARCHAR2(2);
598 CURSOR get_adj_on_std_inv( c_project_id IN NUMBER )
599 IS
600 SELECT
601 nvl(adj_on_std_inv,'N')
602 FROM
603 pa_projects_all
604 WHERE project_id = c_project_id ;
605
606 CURSOR get_bill_labor_accrual( c_project_id IN NUMBER )
607 IS
608 SELECT
609 nvl(bill_labor_accrual,'N')
610 FROM
611 pa_projects_all
612 WHERE project_id = c_project_id ;
613
614 /* Added for 12.2Payroll billing ER 11899223 */
615 CURSOR get_auto_release_pwp_inv( c_project_id IN NUMBER )
616 IS
617 SELECT
618 nvl(AUTO_RELEASE_PWP_INV,'Y')
619 FROM
620 pa_projects_all
621 WHERE project_id = c_project_id ;
622
623 /* 7508661 : EnC : End */
624
625 CURSOR cur_enable_funds_flag(p_project_id IN VARCHAR2)
626 IS
627 SELECT 'Y'
628 FROM
629 pa_projects_all p,
630 pa_project_types_all pt
631 WHERE
632 p.project_id = p_project_id AND
633 pt.project_type_class_code = 'CONTRACT' AND
634 p.project_type = pt.project_type AND
635 pt.CC_PRVDR_FLAG = 'N' AND
636 p.org_id = pt.org_id;
637
638
639 l_enable_funds_flag VARCHAR2(1);
640
641 /* CURSOR cur_rev_inv(p_project_id IN VARCHAR2)
642 IS
643 SELECT 'Y'
644 FROM dual
645 WHERE EXISTS
646 (SELECT NULL
647 FROM
648 pa_draft_revenues r
649 WHERE
650 r.project_id = p_project_id
651 )
652 OR EXISTS
653 (SELECT NULL
654 FROM
655 pa_draft_invoices i
656 WHERE
657 i.project_id = p_project_id
658 );
659 l_chk_rev_inv_flag VARCHAR2(1) := NULL;
660
661 */
662 CURSOR chk_task_level_funding(p_project_id IN VARCHAR2)
663 IS
664 SELECT 'Y'
665 FROM sys.dual
666 WHERE exists
667 ( select 1
668 from pa_summary_project_fundings
669 where project_id = p_project_id
670 and task_id is not null
671 );
672
673 l_chk_task_level_funding VARCHAR2(1) := NULL;
674
675 CURSOR count_cust(p_project_id IN VARCHAR2)
676 IS
677 SELECT count(*)
678 FROM pa_project_customers
679 WHERE project_id = p_project_id;
680
681 l_count_cust NUMBER := 0; -- bug# 12972554, Changed datatype of l_count_cust from VARCHAR2(1) TO NUMBER.
682
683 --sunkalya:federal bug#5511353
684
685 /* Adding new cursor for bug 6408593 */
686
687 CURSOR c_prj_key_role_type(c_key_role_meaning IN VARCHAR) IS
688 select project_role_type
689 from pa_project_role_types_vl
690 where meaning like c_key_role_meaning;
691
692 /*Added for bug 7830143*/
693 CURSOR c_get_org_id(c_project_id NUMBER) IS
694 select org_id
695 from pa_projects_all
696 where project_id = c_project_id;
697
698 l_org_id NUMBER ;
699 /*Added for bug 7830143*/
700
701
702 l_mapped_task_id NUMBER;
703 /* added for bug 9491704 - */
704
705
706 BEGIN
707
708 -- Standard begin of API savepoint
709
710 SAVEPOINT create_project_pub;
711
712 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
713 -- Standard call to check for call compatibility.
714
715
716 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
717 p_api_version_number ,
718 l_api_name ,
719 G_PKG_NAME )
720 THEN
721
722 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
723
724 END IF;
725
726
727 l_resp_id := FND_GLOBAL.Resp_id;
728
729
730 --Bug#5559292
731
732 G_PROJECT_NUMBER_GEN_MODE := PA_PROJECT_UTILS.GetProjNumMode;
733 G_PROJECT_NUMBER_TYPE := PA_PROJECT_UTILS.GetProjNumType;
734
735 --Bug#5559292
736
737
738 -- Actions performed using the APIs would be subject to
739 -- function security. If the responsibility does not allow
740 -- such functions to be executed, the API should not proceed further
741 -- since the user does not have access to such functions
742
743 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := null; --bug 2471668 ( not in the project context )
744
745 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
746 (p_api_version_number => p_api_version_number,
747 p_responsibility_id => l_resp_id,
748 p_function_name => 'PA_PM_CREATE_PROJECT',
749 p_msg_count => l_msg_count,
750 p_msg_data => l_msg_data,
751 p_return_status => l_return_status,
752 p_function_allowed => l_function_allowed
753 );
754
755
756 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
757 THEN
758 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
759
760 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
761 THEN
762 RAISE FND_API.G_EXC_ERROR;
763 END IF;
764 IF l_function_allowed = 'N' THEN
765 pa_interface_utils_pub.map_new_amg_msg
766 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
767 ,p_msg_attribute => 'CHANGE'
768 ,p_resize_flag => 'Y'
769 ,p_msg_context => 'GENERAL'
770 ,p_attribute1 => ''
771 ,p_attribute2 => ''
772 ,p_attribute3 => ''
773 ,p_attribute4 => ''
774 ,p_attribute5 => '');
775 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
776 RAISE FND_API.G_EXC_ERROR;
777 END IF;
778
779
780 -- Initialize the message table if requested.
781
782 IF FND_API.TO_BOOLEAN( p_init_msg_list )
783 THEN
784
785 FND_MSG_PUB.initialize;
786
787 END IF;
788
789 -- Set API return status to success
790
791 p_return_status := FND_API.G_RET_STS_SUCCESS;
792 p_project_out.return_status := FND_API.G_RET_STS_SUCCESS;
793
794 -- 22-DEC-97, jwhite:
795 -- Initialize New OUT-parameter to indicate workflow status
796
797 -- Set Worflow Started Status -------------------------------------------------
798
799 p_workflow_started := 'N';
800 -- ------------------------------------------------------------------------------------
801
802
803
804 --Move incoming project record to a local project record
805 --Needs to be done to change incoming values to default values
806
807 l_project_in_rec := p_project_in;
808
809 --project structures
810 l_structure_in_rec := p_structure_in;
811 --project structures
812
813 --Added by rtarway for BUG 3703440, 3717026: Populate Global Structure Type Record
814 G_structure_in_rec.pa_project_id := l_structure_in_rec.pa_project_id;
815 G_structure_in_rec.structure_type := l_structure_in_rec.structure_type;
816 G_structure_in_rec.structure_version_name := l_structure_in_rec.structure_version_name;
817 G_structure_in_rec.structure_version_id := l_structure_in_rec.structure_version_id;
818 G_structure_in_rec.DESCRIPTION := l_structure_in_rec.DESCRIPTION;
819 --End Add by rtarway for BUG 3703440, 3717026
820
821
822
823 -- CHECK FOR MANDATORY FIELDS
824 -- check whether mandatory incoming parameters exist
825 -- some of the fields for projects are checked by procedure COPY_PROJECT
826 --bug 2841158
827 -- IF p_pm_product_code IS NULL
828 -- OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
829 IF p_pm_product_code IS NOT NULL
830 AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
831 --bug 2841158
832 THEN
833
834 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
835 THEN
836 pa_interface_utils_pub.map_new_amg_msg
837 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
838 ,p_msg_attribute => 'CHANGE'
839 ,p_resize_flag => 'N'
840 ,p_msg_context => 'GENERAL'
841 ,p_attribute1 => ''
842 ,p_attribute2 => ''
843 ,p_attribute3 => ''
844 ,p_attribute4 => ''
845 ,p_attribute5 => '');
846 END IF;
847 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
848 p_return_status := FND_API.G_RET_STS_ERROR;
849 RAISE FND_API.G_EXC_ERROR;
850 END IF;
851
852 --bug 2841158
853 IF p_pm_product_code <> 'WORKPLAN'
854 AND p_pm_product_code IS NOT NULL
855 AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
856 THEN
857 --bug 2841158
858 /*added for bug no :2413400*/
859 OPEN p_product_code_csr (p_pm_product_code);
860 FETCH p_product_code_csr INTO l_pm_product_code;
861 CLOSE p_product_code_csr;
862
863 IF l_pm_product_code <> 'X'
864 THEN
865
866 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
867 THEN
868 pa_interface_utils_pub.map_new_amg_msg
869 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
870 ,p_msg_attribute => 'CHANGE'
871 ,p_resize_flag => 'N'
872 ,p_msg_context => 'GENERAL'
873 ,p_attribute1 => ''
874 ,p_attribute2 => ''
875 ,p_attribute3 => ''
876 ,p_attribute4 => ''
877 ,p_attribute5 => '');
878 END IF;
879 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
880 p_return_status := FND_API.G_RET_STS_ERROR;
881 RAISE FND_API.G_EXC_ERROR;
882 END IF;
883 END IF; --bug 2841158
884
885 IF l_project_in_rec.pm_project_reference IS NULL
886 OR l_project_in_rec.pm_project_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
887 THEN
888
889 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
890 THEN
891 pa_interface_utils_pub.map_new_amg_msg
892 ( p_old_message_code => 'PA_PROJECT_REF_IS_MISSING'
893 ,p_msg_attribute => 'CHANGE'
894 ,p_resize_flag => 'N'
895 ,p_msg_context => 'PROJ'
896 ,p_attribute1 => l_project_in_rec.pm_project_reference
897 ,p_attribute2 => ''
898 ,p_attribute3 => ''
899 ,p_attribute4 => ''
900 ,p_attribute5 => '');
901 END IF;
902 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
903 p_return_status := FND_API.G_RET_STS_ERROR;
904 RAISE FND_API.G_EXC_ERROR;
905 END IF;
906
907 IF l_project_in_rec.project_name IS NULL
908 OR l_project_in_rec.project_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
909 THEN
910
911 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
912 THEN
913 pa_interface_utils_pub.map_new_amg_msg
914 ( p_old_message_code => 'PA_PROJECT_NAME_IS_MISSING'
915 ,p_msg_attribute => 'CHANGE'
916 ,p_resize_flag => 'N'
917 ,p_msg_context => 'PROJ'
918 ,p_attribute1 => l_project_in_rec.pm_project_reference
919 ,p_attribute2 => ''
920 ,p_attribute3 => ''
921 ,p_attribute4 => ''
922 ,p_attribute5 => '');
923 END IF;
924 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
925 p_return_status := FND_API.G_RET_STS_ERROR;
926 RAISE FND_API.G_EXC_ERROR;
927 END IF;
928
929 -- Ensure that Project name is unique
930
931 IF pa_project_utils.check_unique_project_name
932 (l_project_in_rec.project_name,
933 NULL ) = 0 THEN
934 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
935 THEN
936 pa_interface_utils_pub.map_new_amg_msg
937 ( p_old_message_code => 'PA_PR_EPR_PROJ_NAME_NOT_UNIQUE'
938 ,p_msg_attribute => 'CHANGE'
939 ,p_resize_flag => 'Y'
940 ,p_msg_context => 'ADDP'
941 ,p_attribute1 => l_project_in_rec.pm_project_reference
942 ,p_attribute2 => ''
943 ,p_attribute3 => ''
944 ,p_attribute4 => ''
945 ,p_attribute5 => '');
946 END IF;
947 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
948 p_return_status := FND_API.G_RET_STS_ERROR;
949 RAISE FND_API.G_EXC_ERROR;
950 /*Adding for the bug 2450064*/
951 ELSE
952 pjm_seiban_pkg.project_name_dup(l_project_in_rec.project_name,l_dup_name_flag);
953
954 IF l_dup_name_flag = 'Y' THEN
955 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
956 THEN
957 pa_interface_utils_pub.map_new_amg_msg
958 ( p_old_message_code => 'PA_SEIBAN_NAME_NOT_UNIQUE'
959 ,p_msg_attribute => 'CHANGE'
960 ,p_resize_flag => 'Y'
961 ,p_msg_context => 'ADDP'
962 ,p_attribute1 => l_project_in_rec.pm_project_reference
963 ,p_attribute2 => ''
964 ,p_attribute3 => ''
965 ,p_attribute4 => ''
966 ,p_attribute5 => '');
967 END IF;
968 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
969 p_return_status := FND_API.G_RET_STS_ERROR;
970 RAISE FND_API.G_EXC_ERROR;
971 END IF;
972 /*Adding for the bug 2450064*/
973 END IF;
974
975 -- Bug#2638968 Ensure that Long name is unique
976 IF l_project_in_rec.long_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
977 AND l_project_in_rec.long_name IS NOT NULL THEN
978 IF pa_project_utils.check_unique_long_name
979 (l_project_in_rec.long_name,
980 NULL ) = 0 THEN
981 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
982 THEN
983 pa_interface_utils_pub.map_new_amg_msg
984 ( p_old_message_code => 'PA_PR_EPR_LONG_NAME_NOT_UNIQUE'
985 ,p_msg_attribute => 'CHANGE'
986 ,p_resize_flag => 'Y'
987 ,p_msg_context => 'ADDP'
988 ,p_attribute1 => l_project_in_rec.pm_project_reference
989 ,p_attribute2 => ''
990 ,p_attribute3 => ''
991 ,p_attribute4 => ''
992 ,p_attribute5 => '');
993 END IF;
994 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
995 p_return_status := FND_API.G_RET_STS_ERROR;
996 RAISE FND_API.G_EXC_ERROR;
997 END IF;
998 END IF;
999
1000 -- bug#3014919: Ensure Project Reference is unique
1001 IF l_project_in_rec.pm_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1002 AND l_project_in_rec.pm_project_reference IS NOT NULL THEN
1003 IF pa_project_utils.check_unique_project_reference
1004 (l_project_in_rec.pm_project_reference,
1005 p_pm_product_code, -- added for bug 4870305
1006 NULL ) = 0
1007 THEN
1008 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1009 THEN
1010 pa_interface_utils_pub.map_new_amg_msg
1011 ( p_old_message_code => 'PA_PROJECT_REF_NOT_UNIQUE'
1012 ,p_msg_attribute => 'CHANGE'
1013 ,p_resize_flag => 'Y'
1014 ,p_msg_context => 'ADDP'
1015 ,p_attribute1 => l_project_in_rec.pm_project_reference
1016 ,p_attribute2 => ''
1017 ,p_attribute3 => ''
1018 ,p_attribute4 => ''
1019 ,p_attribute5 => '');
1020 END IF;
1021 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1022 p_return_status := FND_API.G_RET_STS_ERROR;
1023 RAISE FND_API.G_EXC_ERROR;
1024 END IF;
1025 END IF;
1026
1027 -- Check for implementation defined Project number generation mode
1028 -- If project number generation is manual then input project
1029 -- reference would be copied to project number
1030 -- Hence, need to ensure that this is unique
1031 -- First check whether a project number is passed.If so , use that
1032 -- else use the project reference
1033
1034 IF (l_project_in_rec.pa_project_number IS NOT NULL AND
1035 l_project_in_rec.pa_project_number <>
1036 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
1037 l_create_project_number := l_project_in_rec.pa_project_number;
1038 ELSE
1039 l_create_project_number := l_project_in_rec.pm_project_reference;
1040 END IF;
1041
1042
1043 IF G_PROJECT_NUMBER_GEN_MODE = 'MANUAL' THEN
1044 IF pa_project_utils.check_unique_project_number
1045 (l_create_project_number,
1046 NULL ) = 0 THEN
1047 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1048 pa_interface_utils_pub.map_new_amg_msg
1049 ( p_old_message_code => 'PA_PR_EPR_PROJ_NUM_NOT_UNIQUE'
1050 ,p_msg_attribute => 'CHANGE'
1051 ,p_resize_flag => 'Y'
1052 ,p_msg_context => 'ADDP'
1053 ,p_attribute1 => l_project_in_rec.pm_project_reference
1054 ,p_attribute2 => ''
1055 ,p_attribute3 => ''
1056 ,p_attribute4 => ''
1057 ,p_attribute5 => '');
1058 END IF;
1059 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1060 p_return_status := FND_API.G_RET_STS_ERROR;
1061 RAISE FND_API.G_EXC_ERROR;
1062 /*Adding for the bug 2450064*/
1063 ELSE
1064 pjm_seiban_pkg.project_number_dup(l_create_project_number,l_dup_name_flag);
1065
1066 IF l_dup_name_flag = 'Y' THEN
1067 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1068 THEN
1069 pa_interface_utils_pub.map_new_amg_msg
1070 ( p_old_message_code => 'PA_SEIBAN_NUM_NOT_UNIQUE'
1071 ,p_msg_attribute => 'CHANGE'
1072 ,p_resize_flag => 'Y'
1073 ,p_msg_context => ' '
1074 ,p_attribute1 => l_project_in_rec.pm_project_reference
1075 ,p_attribute2 => ''
1076 ,p_attribute3 => ''
1077 ,p_attribute4 => ''
1078 ,p_attribute5 => '');
1079 END IF;
1080 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1081 p_return_status := FND_API.G_RET_STS_ERROR;
1082 RAISE FND_API.G_EXC_ERROR;
1083 END IF;
1084 /*Adding for the bug 2450064*/
1085 END IF;
1086 -- Check for project number being numeric if project number type is
1087 -- defined as numeric
1088
1089 BEGIN
1090 IF G_PROJECT_NUMBER_TYPE = 'NUMERIC' THEN
1091 l_proj_num_numeric :=
1092 TO_NUMBER(l_create_project_number);
1093 END IF;
1094 EXCEPTION
1095 WHEN VALUE_ERROR THEN
1096 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1097 pa_interface_utils_pub.map_new_amg_msg
1098 ( p_old_message_code => 'PA_PR_NUMERIC_NUM_REQ'
1099 ,p_msg_attribute => 'CHANGE'
1100 ,p_resize_flag => 'N'
1101 ,p_msg_context => 'PROJ'
1102 ,p_attribute1 => l_project_in_rec.pm_project_reference
1103 ,p_attribute2 => ''
1104 ,p_attribute3 => ''
1105 ,p_attribute4 => ''
1106 ,p_attribute5 => '');
1107 END IF;
1108 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1109 p_return_status := FND_API.G_RET_STS_ERROR;
1110 RAISE FND_API.G_EXC_ERROR;
1111 END ;
1112 END IF;
1113
1114 IF l_project_in_rec.created_from_project_id IS NULL
1115 OR l_project_in_rec.created_from_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1116 THEN
1117
1118 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1119 THEN
1120 pa_interface_utils_pub.map_new_amg_msg
1121 ( p_old_message_code => 'PA_SOURCE_TEMPLATE_IS_MISSING'
1122 ,p_msg_attribute => 'CHANGE'
1123 ,p_resize_flag => 'Y'
1124 ,p_msg_context => 'PROJ'
1125 ,p_attribute1 => l_project_in_rec.pm_project_reference
1126 ,p_attribute2 => ''
1127 ,p_attribute3 => ''
1128 ,p_attribute4 => ''
1129 ,p_attribute5 => '');
1130 END IF;
1131 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1132 RAISE FND_API.G_EXC_ERROR;
1133 END IF;
1134
1135 -- mandatory fields for tasks is checked here
1136
1137 /*Added for bug 7830143*/
1138 OPEN c_get_org_id(l_project_in_rec.created_from_project_id);
1139 FETCH c_get_org_id INTO l_org_id;
1140 CLOSE c_get_org_id;
1141
1142 IF NVL(PA_MOAC_UTILS.GET_CURRENT_ORG_ID,-1234) <> l_org_id THEN
1143 PA_MOAC_UTILS.SET_POLICY_CONTEXT('S', l_org_id);
1144 END IF;
1145 /*Added for bug 7830143*/
1146
1147 -- code addition for bug 2254661 starts
1148 Open l_temp_flag_csr(l_project_in_rec.created_from_project_id);
1149 FETCH l_temp_flag_csr INTO l_temp_flag;
1150 IF l_temp_flag_csr%NOTFOUND
1151 THEN
1152 CLOSE l_temp_flag_csr;
1153 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1154 THEN
1155 pa_interface_utils_pub.map_new_amg_msg
1156 ( p_old_message_code => 'PA_SOURCE_TEMPLATE_INVALID'
1157 ,p_msg_attribute => 'CHANGE'
1158 ,p_resize_flag => 'N'
1159 ,p_msg_context => 'PROJ'
1160 ,p_attribute1 => l_project_in_rec.pm_project_reference
1161 ,p_attribute2 => ''
1162 ,p_attribute3 => ''
1163 ,p_attribute4 => ''
1164 ,p_attribute5 => '');
1165 END IF;
1166 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1167 RAISE FND_API.G_EXC_ERROR;
1168 END IF;
1169 CLOSE l_temp_flag_csr;
1170
1171 if l_temp_flag = 'Y' then
1172
1173 -- 5182868 Validate the template for effectiveness
1174
1175 Open l_temp_eff_flag_csr(l_project_in_rec.created_from_project_id);
1176 FETCH l_temp_eff_flag_csr INTO l_temp_eff_flag;
1177 CLOSE l_temp_eff_flag_csr;
1178
1179 -- if template is inactive then throw error message
1180
1181 IF l_temp_eff_flag = 'N' THEN
1182
1183 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1184
1185 pa_utils.add_message
1186 (
1187 p_app_short_name => 'PA'
1188 ,p_msg_name => 'PA_TEMPLATE_NOT_ACTIVE'
1189 );
1190
1191 END IF;
1192
1193 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1194 RAISE FND_API.G_EXC_ERROR;
1195
1196 END IF;
1197
1198 -- 5182868 end
1199
1200 l_created_from_proj_id := l_project_in_rec.created_from_project_id;
1201 else
1202 select created_from_project_id into l_created_from_proj_id
1203 from pa_projects_all
1204 where project_id = l_project_in_rec.created_from_project_id;
1205 end if;
1206 --code addition for bug 2254661 ends
1207
1208
1209 --CHECK FOR OVERRIDABILITY
1210 --get all the overridable fields for this project template source
1211 --changed the argument to the cursor below for bug 2254661
1212 OPEN l_override_fields_csr(l_created_from_proj_id);
1213 i := 0;
1214 LOOP
1215 i := i + 1;
1216 FETCH l_override_fields_csr INTO l_override_fields_rec;
1217 EXIT WHEN l_override_fields_csr%NOTFOUND;
1218 l_override_fields_tab(i) := l_override_fields_rec;
1219
1220 END LOOP;
1221 i := 0;
1222 CLOSE l_override_fields_csr;
1223
1224 ----dbms_output.put_line('Checking for Customer Overridability');
1225 --example of how to check for overridability
1226 /*
1227 ELSE
1228 l_is_overridable := FALSE;
1229 i := l_override_fields_tab.first;
1230 WHILE i IS NOT NULL LOOP
1231 IF l_override_fields_tab(i).pa_field_name = 'DESCRIPTION'
1232 THEN
1233 l_is_overridable := TRUE;
1234 EXIT;
1235 END IF;
1236 i := l_override_fields_tab.next(i);
1237 END LOOP;
1238
1239 IF NOT l_is_overridable
1240 THEN
1241 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1242 THEN
1243 FND_MESSAGE.SET_NAME('PA','PA_DESCRIPTION_NOT_OVERRIDABLE');
1244 FND_MSG_PUB.add;
1245 END IF;
1246
1247 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1248 RAISE FND_API.G_EXC_ERROR;
1249 END IF;
1250 */
1251 /* Code below is added for Customer Issue tracking bug. Customer Can still continue to project_in_rec_type to insert customers
1252 or can use the new record type for the same. However he cannot use both together in the same script*/
1253 ----dbms_output.put_line('Checking for Customer Overridability -- print till here ');
1254 ----dbms_output.put_line('value of l_project_in_rec.customer_id'||l_project_in_rec.customer_id);
1255 ------dbms_output.put_line('value of p_customers_in(1).customer_id'||p_customers_in(1).customer_id);
1256
1257 i := p_customers_in.first;
1258 ----dbms_output.put_line('value of i'||i);
1259 IF NOT(p_customers_in.exists(i)) THEN
1260 If l_project_in_rec.customer_id IS NOT NULL Then
1261 l_in_customer_id := l_project_in_rec.customer_id;
1262 l_bill_to_customer_id := l_project_in_rec.bill_to_customer_id;
1263 l_ship_to_customer_id := l_project_in_rec.ship_to_customer_id;
1264 l_bill_to_address_id := l_project_in_rec.bill_to_address_id;
1265 l_ship_to_address_id := l_project_in_rec.ship_to_address_id;
1266
1267 /* commenting this code for Bug#5517655 */
1268 /*
1269 If l_project_in_rec.project_relationship_code IS NULL OR l_project_in_rec.project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1270 Then
1271
1272
1273 l_project_relationship_code := 'Primary';
1274
1275 Else
1276
1277
1278 l_project_relationship_code := l_project_in_rec.project_relationship_code;
1279
1280 End If;
1281
1282 */ -- End of commenting for Bug#5517655
1283
1284 l_cust_bill_split := 100; --default contribution for any customer that is being created
1285 l_enable_top_task_cust_flag := l_project_in_rec.enable_top_task_customer_flag;
1286 End If;
1287 ElSIF p_customers_in(i).customer_id IS NOT NULL then
1288 ------dbms_output.put_line('Comes in this loop');
1289 l_in_customer_id := p_customers_in(1).customer_id;
1290 l_bill_to_customer_id:=p_customers_in(1).bill_to_customer_id;
1291 l_ship_to_customer_id:=p_customers_in(1).ship_to_customer_id;
1292 l_bill_to_address_id :=p_customers_in(1).bill_to_address_id;
1293 l_ship_to_address_id :=p_customers_in(1).ship_to_address_id;
1294
1295 /* commenting this code for Bug#5517655 */
1296 /*
1297 If p_customers_in(1).PROJECT_RELATIONSHIP_CODE IS NULL OR p_customers_in(1).PROJECT_RELATIONSHIP_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1298 Then
1299
1300 l_project_relationship_code := 'Primary';
1301 Else
1302
1303 l_project_relationship_code := p_customers_in(1).PROJECT_RELATIONSHIP_CODE;
1304 End If;
1305 */ -- End of commenting for Bug#5517655
1306 l_cust_bill_split := p_customers_in(1).Customer_Bill_Split;
1307 End If;
1308
1309 ----dbms_output.put_line('value of l_in_customer_id'||l_in_customer_id);
1310 ----dbms_output.put_line('value of l_bill_to_customer_id'||l_bill_to_customer_id);
1311 ----dbms_output.put_line('value of l_ship_to_customer_id'||l_ship_to_customer_id);
1312 ----dbms_output.put_line('value of l_bill_to_address_id'||l_bill_to_address_id);
1313 ----dbms_output.put_line('value of l_ship_to_address_id'||l_ship_to_address_id);
1314 ----dbms_output.put_line('value of l_project_relationship_code'||l_project_relationship_code);
1315 ----dbms_output.put_line('value of l_cust_bill_split'||l_cust_bill_split);
1316
1317 /* End of code changes for tracking bug */
1318
1319 /*Start Code for Bug 6408593 */
1320
1321 l_key_members := p_key_members;
1322
1323 i := l_key_members.first;
1324 WHILE i IS NOT NULL LOOP
1325 IF(l_key_members(i).project_role_meaning <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
1326 THEN
1327 OPEN c_prj_key_role_type(l_key_members(i).project_role_meaning);
1328 FETCH c_prj_key_role_type INTO l_key_members(i).project_role_type;
1329 CLOSE c_prj_key_role_type;
1330 END IF;
1331 i := l_key_members.next(i);
1332 END LOOP;
1333 /*End Code for Bug 6408593 */
1334
1335 /* code added for the bug#1891621, starts here */
1336 i := l_override_fields_tab.first;
1337
1338 WHILE i IS NOT NULL LOOP
1339 IF l_override_fields_tab(i).mandatory_flag = 'Y' THEN
1340 IF l_override_fields_tab(i).pa_field_name = 'CARRYING_OUT_ORGANIZATION_ID' THEN
1341 IF l_project_in_rec.carrying_out_organization_id IS NULL
1342 OR l_project_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1343 THEN
1344
1345 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1346 THEN
1347 pa_interface_utils_pub.map_new_amg_msg
1348 ( p_old_message_code => 'PA_ORGANIZATION_ID_IS_NULL'
1349 ,p_msg_attribute => 'CHANGE'
1350 ,p_resize_flag => 'N'
1351 ,p_msg_context => 'PROJ'
1352 ,p_attribute1 => l_project_in_rec.pm_project_reference
1353 ,p_attribute2 => 'Organization'
1354 ,p_attribute3 => ''
1355 ,p_attribute4 => ''
1356 ,p_attribute5 => '');
1357 END IF;
1358 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1359 p_return_status := FND_API.G_RET_STS_ERROR;
1360 RAISE FND_API.G_EXC_ERROR;
1361
1362 END IF;
1363
1364 ELSIF l_override_fields_tab(i).pa_field_name = 'CLASSIFICATION' THEN
1365
1366 l_class_categories := p_class_categories;
1367 j := l_class_categories.first;
1368
1369 IF j IS NULL THEN
1370
1371 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1372 THEN
1373 pa_interface_utils_pub.map_new_amg_msg
1374 ( p_old_message_code => 'PA_CLASSIFICATION_IS_NULL'
1375 ,p_msg_attribute => 'CHANGE'
1376 ,p_resize_flag => 'N'
1377 ,p_msg_context => 'PROJ'
1378 ,p_attribute1 => l_project_in_rec.pm_project_reference
1379 ,p_attribute2 => ''
1380 ,p_attribute3 => ''
1381 ,p_attribute4 => ''
1382 ,p_attribute5 => '');
1383 END IF;
1384 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1385 p_return_status := FND_API.G_RET_STS_ERROR;
1386 RAISE FND_API.G_EXC_ERROR;
1387
1388 END IF;
1389
1390 l_class_code_categories := 0;
1391
1392 WHILE j IS NOT NULL LOOP
1393 IF upper(l_override_fields_tab(i).type) = upper(l_class_categories(j).class_category)
1394 AND l_class_categories(j).class_code IS NOT NULL
1395 THEN
1396 l_class_code_categories := 1;
1397 -- check whether the class category and class code combination is a valid one
1398 IF pa_project_pvt.check_class_code_valid(l_class_categories(j).class_category,
1399 l_class_categories(j).class_code) = 'N'
1400 THEN
1401 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1402 THEN
1403 pa_interface_utils_pub.map_new_amg_msg
1404 ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
1405 ,p_msg_attribute => 'CHANGE'
1406 ,p_resize_flag => 'N'
1407 ,p_msg_context => 'PROJ'
1408 ,p_attribute1 => l_project_in_rec.pm_project_reference
1409 ,p_attribute2 => ''
1410 ,p_attribute3 => ''
1411 ,p_attribute4 => ''
1412 ,p_attribute5 => '');
1413 END IF;
1414 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1415 p_return_status := FND_API.G_RET_STS_ERROR;
1416 RAISE FND_API.G_EXC_ERROR;
1417 END IF;
1418
1419 EXIT;
1420 END IF;
1421 j := l_class_categories.next(j);
1422 END LOOP;
1423
1424 IF l_class_code_categories <> 1
1425 THEN
1426 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1427 THEN
1428 pa_interface_utils_pub.map_new_amg_msg
1429 ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
1430 ,p_msg_attribute => 'CHANGE'
1431 ,p_resize_flag =>'N' --'Y'is Replaced with 'N';bug#1891621
1432 ,p_msg_context => 'PROJ'
1433 ,p_attribute1 => l_project_in_rec.pm_project_reference
1434 ,p_attribute2 => ''
1435 ,p_attribute3 => ''
1436 ,p_attribute4 => ''
1437 ,p_attribute5 => '');
1438 END IF;
1439 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1440 p_return_status := FND_API.G_RET_STS_ERROR;
1441 RAISE FND_API.G_EXC_ERROR;
1442 END IF;
1443 ELSIF l_override_fields_tab(i).pa_field_name = 'COMPLETION_DATE' THEN
1444 IF l_project_in_rec.completion_date IS NULL
1445 OR l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1446 THEN
1447
1448 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1449 THEN
1450 pa_interface_utils_pub.map_new_amg_msg
1451 ( p_old_message_code => 'PA_COMPLETION_DATE_IS_NULL'
1452 ,p_msg_attribute => 'CHANGE'
1453 ,p_resize_flag => 'N'
1454 ,p_msg_context => 'PROJ'
1455 ,p_attribute1 => l_project_in_rec.pm_project_reference
1456 ,p_attribute2 => ''
1457 ,p_attribute3 => ''
1458 ,p_attribute4 => ''
1459 ,p_attribute5 => '');
1460 END IF;
1461 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1462 p_return_status := FND_API.G_RET_STS_ERROR;
1463 RAISE FND_API.G_EXC_ERROR;
1464
1465 END IF;
1466
1467 ELSIF l_override_fields_tab(i).pa_field_name = 'START_DATE' THEN
1468 IF l_project_in_rec.start_date IS NULL
1469 OR l_project_in_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1470 THEN
1471
1472 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1473 THEN
1474 pa_interface_utils_pub.map_new_amg_msg
1475 ( p_old_message_code => 'PA_START_DATE_IS_NULL'
1476 ,p_msg_attribute => 'CHANGE'
1477 ,p_resize_flag => 'N'
1478 ,p_msg_context => 'PROJ'
1479 ,p_attribute1 => l_project_in_rec.pm_project_reference
1480 ,p_attribute2 => ''
1481 ,p_attribute3 => ''
1482 ,p_attribute4 => ''
1483 ,p_attribute5 => '');
1484 END IF;
1485 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1486 p_return_status := FND_API.G_RET_STS_ERROR;
1487 RAISE FND_API.G_EXC_ERROR;
1488
1489 END IF;
1490 ELSIF l_override_fields_tab(i).pa_field_name = 'CUSTOMER_NAME' THEN
1491 /* Code commented for tracking bug
1492 IF l_project_in_rec.customer_id IS NULL
1493 OR l_project_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1494 /* Code added for tracking bug by aditi */
1495 ----dbms_output.put_line('value of l_in_customer_id'||l_in_customer_id);
1496 IF l_in_customer_id IS NULL
1497 OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1498 /* End of Code changes */
1499 THEN
1500 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1501 THEN
1502 pa_interface_utils_pub.map_new_amg_msg
1503 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
1504 ,p_msg_attribute => 'CHANGE'
1505 ,p_resize_flag => 'N'
1506 ,p_msg_context => 'PROJ'
1507 ,p_attribute1 => l_project_in_rec.pm_project_reference
1508 ,p_attribute2 => ''
1509 ,p_attribute3 => ''
1510 ,p_attribute4 => ''
1511 ,p_attribute5 => '');
1512 END IF;
1513 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1514 p_return_status := FND_API.G_RET_STS_ERROR;
1515 RAISE FND_API.G_EXC_ERROR;
1516
1517 END IF;
1518
1519 --Customer Account relationship Changes:
1520
1521 ELSIF l_override_fields_tab(i).pa_field_name = 'BILL_TO_CUSTOMER' THEN
1522 /* Code commented for tracking bug
1523 IF l_project_in_rec.bill_to_customer_id IS NULL
1524 OR l_project_in_rec.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1525 /* Code added for tracking bug by aditi */
1526 IF l_bill_to_customer_id IS NULL
1527 OR l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1528 /* End of Code changes */
1529 THEN
1530
1531 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1532 THEN
1533 pa_interface_utils_pub.map_new_amg_msg
1534 ( p_old_message_code => 'PA_BILL_TO_CUST_ID_IS_NULL'
1535 ,p_msg_attribute => 'CHANGE'
1536 ,p_resize_flag => 'N'
1537 ,p_msg_context => 'PROJ'
1538 ,p_attribute1 => l_project_in_rec.pm_project_reference
1539 ,p_attribute2 => ''
1540 ,p_attribute3 => ''
1541 ,p_attribute4 => ''
1542 ,p_attribute5 => '');
1543 END IF;
1544 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1545 p_return_status := FND_API.G_RET_STS_ERROR;
1546 RAISE FND_API.G_EXC_ERROR;
1547
1548 END IF;
1549
1550 ELSIF l_override_fields_tab(i).pa_field_name = 'SHIP_TO_CUSTOMER' THEN
1551 /* Code commented for tracking bug
1552 IF l_project_in_rec.ship_to_customer_id IS NULL
1553 OR l_project_in_rec.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM */
1554 /* Code added for tracking bug by aditi */
1555 IF l_ship_to_customer_id IS NULL
1556 OR l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1557 /* End of Code changes */
1558 THEN
1559
1560 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1561 THEN
1562 pa_interface_utils_pub.map_new_amg_msg
1563 ( p_old_message_code => 'PA_SHIP_TO_CUST_ID_IS_NULL'
1564 ,p_msg_attribute => 'CHANGE'
1565 ,p_resize_flag => 'N'
1566 ,p_msg_context => 'PROJ'
1567 ,p_attribute1 => l_project_in_rec.pm_project_reference
1568 ,p_attribute2 => ''
1569 ,p_attribute3 => ''
1570 ,p_attribute4 => ''
1571 ,p_attribute5 => '');
1572 END IF;
1573 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1574 p_return_status := FND_API.G_RET_STS_ERROR;
1575 RAISE FND_API.G_EXC_ERROR;
1576
1577 END IF;
1578
1579 ----dbms_output.put_line('Overriding bill to cst and ship to cst');
1580
1581 ELSIF l_override_fields_tab(i).pa_field_name = 'DESCRIPTION' THEN
1582 IF l_project_in_rec.description IS NULL
1583 OR l_project_in_rec.description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1584 THEN
1585
1586 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1587 THEN
1588 pa_interface_utils_pub.map_new_amg_msg
1589 ( p_old_message_code => 'PA_DESCRIPTION_IS_NULL'
1590 ,p_msg_attribute => 'CHANGE'
1591 ,p_resize_flag => 'N'
1592 ,p_msg_context => 'PROJ'
1593 ,p_attribute1 => l_project_in_rec.pm_project_reference
1594 ,p_attribute2 => ''
1595 ,p_attribute3 => ''
1596 ,p_attribute4 => ''
1597 ,p_attribute5 => '');
1598 END IF;
1599 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1600 p_return_status := FND_API.G_RET_STS_ERROR;
1601 RAISE FND_API.G_EXC_ERROR;
1602
1603 END IF;
1604
1605 ELSIF l_override_fields_tab(i).pa_field_name = 'KEY_MEMBER' THEN
1606
1607 -- l_key_members := p_key_members; Commented for Bug 6408593
1608 j := l_key_members.first;
1609
1610 IF j IS NULL THEN
1611
1612 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1613 THEN
1614 pa_interface_utils_pub.map_new_amg_msg
1615 ( p_old_message_code => 'PA_KEY_MEMBER_IS_NULL'
1616 ,p_msg_attribute => 'CHANGE'
1617 ,p_resize_flag => 'N'
1618 ,p_msg_context => 'PROJ'
1619 ,p_attribute1 => l_project_in_rec.pm_project_reference
1620 ,p_attribute2 => ''
1621 ,p_attribute3 => ''
1622 ,p_attribute4 => ''
1623 ,p_attribute5 => '');
1624 END IF;
1625 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1626 p_return_status := FND_API.G_RET_STS_ERROR;
1627 RAISE FND_API.G_EXC_ERROR;
1628
1629 END IF;
1630
1631 l_key_member := 0;
1632
1633 WHILE j IS NOT NULL LOOP
1634 IF upper(l_override_fields_tab(i).type) = upper(l_key_members(j).project_role_type)
1635 AND l_key_members(j).person_id IS NOT NULL
1636 THEN
1637 l_key_member := 1;
1638 EXIT;
1639 END IF;
1640 j := l_key_members.next(j);
1641 END LOOP;
1642
1643 IF l_key_member <> 1
1644 THEN
1645 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1646 THEN
1647 pa_interface_utils_pub.map_new_amg_msg
1648 ( p_old_message_code => 'PA_KEY_MEMBER_IS_NULL'
1649 ,p_msg_attribute => 'CHANGE'
1650 ,p_resize_flag => 'N'
1651 ,p_msg_context => 'PROJ'
1652 ,p_attribute1 => l_project_in_rec.pm_project_reference
1653 ,p_attribute2 => ''
1654 ,p_attribute3 => ''
1655 ,p_attribute4 => ''
1656 ,p_attribute5 => '');
1657 END IF;
1658 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1659 p_return_status := FND_API.G_RET_STS_ERROR;
1660 RAISE FND_API.G_EXC_ERROR;
1661 END IF;
1662
1663 ELSIF l_override_fields_tab(i).pa_field_name = 'DISTRIBUTION_RULE' THEN
1664 IF l_project_in_rec.distribution_rule IS NULL
1665 OR l_project_in_rec.distribution_rule = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1666 THEN
1667
1668 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1669 THEN
1670 pa_interface_utils_pub.map_new_amg_msg
1671 ( p_old_message_code => 'PA_DISTRIBUTION_RULE_NULL'
1672 ,p_msg_attribute => 'CHANGE'
1673 ,p_resize_flag => 'N'
1674 ,p_msg_context => 'PROJ'
1675 ,p_attribute1 => l_project_in_rec.pm_project_reference
1676 ,p_attribute2 => ''
1677 ,p_attribute3 => ''
1678 ,p_attribute4 => ''
1679 ,p_attribute5 => '');
1680 END IF;
1681 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1682 p_return_status := FND_API.G_RET_STS_ERROR;
1683 RAISE FND_API.G_EXC_ERROR;
1684
1685 END IF;
1686
1687 ELSIF l_override_fields_tab(i).pa_field_name = 'PROJECT_STATUS_CODE' THEN
1688 IF l_project_in_rec.project_status_code IS NULL
1689 OR l_project_in_rec.project_status_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1690 THEN
1691 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1692 THEN
1693 pa_interface_utils_pub.map_new_amg_msg
1694 ( p_old_message_code => 'PA_PRJ_STATUS_CODE_IS_NULL'
1695 ,p_msg_attribute => 'CHANGE'
1696 ,p_resize_flag => 'N'
1697 ,p_msg_context => 'PROJ'
1698 ,p_attribute1 => l_project_in_rec.pm_project_reference
1699 ,p_attribute2 => ''
1700 ,p_attribute3 => ''
1701 ,p_attribute4 => ''
1702 ,p_attribute5 => '');
1703 END IF;
1704 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1705 p_return_status := FND_API.G_RET_STS_ERROR;
1706 RAISE FND_API.G_EXC_ERROR;
1707
1708 END IF;
1709
1710 ELSIF l_override_fields_tab(i).pa_field_name = 'PUBLIC_SECTOR_FLAG' THEN
1711 IF l_project_in_rec.public_sector_flag IS NULL
1712 OR l_project_in_rec.public_sector_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1713 THEN
1714
1715 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1716 THEN
1717 pa_interface_utils_pub.map_new_amg_msg
1718 ( p_old_message_code => 'PA_PUB_SECTOR_FLAG_IS_NULL'
1719 ,p_msg_attribute => 'CHANGE'
1720 ,p_resize_flag => 'N'
1721 ,p_msg_context => 'PROJ'
1722 ,p_attribute1 => l_project_in_rec.pm_project_reference
1723 ,p_attribute2 => ''
1724 ,p_attribute3 => ''
1725 ,p_attribute4 => ''
1726 ,p_attribute5 => '');
1727 END IF;
1728 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1729 p_return_status := FND_API.G_RET_STS_ERROR;
1730 RAISE FND_API.G_EXC_ERROR;
1731
1732 END IF;
1733
1734 ELSIF l_override_fields_tab(i).pa_field_name = 'TEAM_TEMPLATE_ID' THEN
1735 IF l_project_in_rec.team_template_id IS NULL
1736 OR l_project_in_rec.team_template_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1737 THEN
1738
1739 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1740 THEN
1741 pa_interface_utils_pub.map_new_amg_msg
1742 ( p_old_message_code => 'PA_TEAM_TMPLT_ID_IS_NULL'
1743 ,p_msg_attribute => 'CHANGE'
1744 ,p_resize_flag => 'N'
1745 ,p_msg_context => 'PROJ'
1746 ,p_attribute1 => l_project_in_rec.pm_project_reference
1747 ,p_attribute2 => ''
1748 ,p_attribute3 => ''
1749 ,p_attribute4 => ''
1750 ,p_attribute5 => '');
1751 END IF;
1752 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1753 p_return_status := FND_API.G_RET_STS_ERROR;
1754 RAISE FND_API.G_EXC_ERROR;
1755
1756 END IF;
1757
1758 ELSIF l_override_fields_tab(i).pa_field_name = 'COUNTRY' THEN
1759 IF l_project_in_rec.country_code IS NULL
1760 OR l_project_in_rec.country_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1761 THEN
1762
1763 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1764 THEN
1765 pa_interface_utils_pub.map_new_amg_msg
1766 ( p_old_message_code => 'PA_COUNTRY_CODE_IS_NULL'
1767 ,p_msg_attribute => 'CHANGE'
1768 ,p_resize_flag => 'N'
1769 ,p_msg_context => 'PROJ'
1770 ,p_attribute1 => l_project_in_rec.pm_project_reference
1771 ,p_attribute2 => ''
1772 ,p_attribute3 => ''
1773 ,p_attribute4 => ''
1774 ,p_attribute5 => '');
1775 END IF;
1776 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1777 p_return_status := FND_API.G_RET_STS_ERROR;
1778 RAISE FND_API.G_EXC_ERROR;
1779
1780 END IF;
1781
1782 ELSIF l_override_fields_tab(i).pa_field_name = 'STATE_REGION' THEN
1783 IF l_project_in_rec.region IS NULL
1784 OR l_project_in_rec.region = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1785 THEN
1786
1787 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1788 THEN
1789 pa_interface_utils_pub.map_new_amg_msg
1790 ( p_old_message_code => 'PA_REGION_IS_NULL'
1791 ,p_msg_attribute => 'CHANGE'
1792 ,p_resize_flag => 'N'
1793 ,p_msg_context => 'PROJ'
1794 ,p_attribute1 => l_project_in_rec.pm_project_reference
1795 ,p_attribute2 => ''
1796 ,p_attribute3 => ''
1797 ,p_attribute4 => ''
1798 ,p_attribute5 => '');
1799 END IF;
1800 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1801 p_return_status := FND_API.G_RET_STS_ERROR;
1802 RAISE FND_API.G_EXC_ERROR;
1803
1804 END IF;
1805
1806 ELSIF l_override_fields_tab(i).pa_field_name = 'CITY' THEN
1807 IF l_project_in_rec.city IS NULL
1808 OR l_project_in_rec.city = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1809 THEN
1810
1811 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1812 THEN
1813 pa_interface_utils_pub.map_new_amg_msg
1814 ( p_old_message_code => 'PA_CITY_IS_NULL'
1815 ,p_msg_attribute => 'CHANGE'
1816 ,p_resize_flag => 'N'
1817 ,p_msg_context => 'PROJ'
1818 ,p_attribute1 => l_project_in_rec.pm_project_reference
1819 ,p_attribute2 => ''
1820 ,p_attribute3 => ''
1821 ,p_attribute4 => ''
1822 ,p_attribute5 => '');
1823 END IF;
1824 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1825 p_return_status := FND_API.G_RET_STS_ERROR;
1826 RAISE FND_API.G_EXC_ERROR;
1827
1828 END IF;
1829
1830 ELSIF l_override_fields_tab(i).pa_field_name = 'EXPECTED_APPROVAL_DATE' THEN
1831 IF l_project_in_rec.expected_approval_date IS NULL
1832 OR l_project_in_rec.expected_approval_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
1833 THEN
1834
1835 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1836 THEN
1837 pa_interface_utils_pub.map_new_amg_msg
1838 ( p_old_message_code => 'PA_EXP_APPR_DATE_IS_NULL'
1839 ,p_msg_attribute => 'CHANGE'
1840 ,p_resize_flag => 'N'
1841 ,p_msg_context => 'PROJ'
1842 ,p_attribute1 => l_project_in_rec.pm_project_reference
1843 ,p_attribute2 => ''
1844 ,p_attribute3 => ''
1845 ,p_attribute4 => ''
1846 ,p_attribute5 => '');
1847 END IF;
1848 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1849 p_return_status := FND_API.G_RET_STS_ERROR;
1850 RAISE FND_API.G_EXC_ERROR;
1851
1852 END IF;
1853
1854 ELSIF l_override_fields_tab(i).pa_field_name = 'PROBABILITY_MEMBER_ID' THEN
1855 IF l_project_in_rec.probability_member_id IS NULL
1856 OR l_project_in_rec.probability_member_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1857 THEN
1858
1859 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1860 THEN
1861 pa_interface_utils_pub.map_new_amg_msg
1862 ( p_old_message_code => 'PA_PROB_MEMBER_ID_IS_NULL'
1863 ,p_msg_attribute => 'CHANGE'
1864 ,p_resize_flag => 'N'
1865 ,p_msg_context => 'PROJ'
1866 ,p_attribute1 => l_project_in_rec.pm_project_reference
1867 ,p_attribute2 => ''
1868 ,p_attribute3 => ''
1869 ,p_attribute4 => ''
1870 ,p_attribute5 => '');
1871 END IF;
1872 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1873 p_return_status := FND_API.G_RET_STS_ERROR;
1874 RAISE FND_API.G_EXC_ERROR;
1875
1876 END IF;
1877
1878 ELSIF l_override_fields_tab(i).pa_field_name = 'PROJECT_VALUE' THEN
1879 IF l_project_in_rec.project_value IS NULL
1880 OR l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1881 THEN
1882
1883 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1884 THEN
1885 pa_interface_utils_pub.map_new_amg_msg
1886 ( p_old_message_code => 'PA_PROJECT_VALUE_IS_NULL'
1887 ,p_msg_attribute => 'CHANGE'
1888 ,p_resize_flag => 'N'
1889 ,p_msg_context => 'PROJ'
1890 ,p_attribute1 => l_project_in_rec.pm_project_reference
1891 ,p_attribute2 => ''
1892 ,p_attribute3 => ''
1893 ,p_attribute4 => ''
1894 ,p_attribute5 => '');
1895 END IF;
1896 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1897 p_return_status := FND_API.G_RET_STS_ERROR;
1898 RAISE FND_API.G_EXC_ERROR;
1899
1900 END IF;
1901
1902 -- anlee opportunity value changes
1903 ELSIF l_override_fields_tab(i).pa_field_name = 'OPP_VALUE_CURRENCY_CODE' THEN
1904 IF l_project_in_rec.project_value IS NULL
1905 OR l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
1906 THEN
1907
1908 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1909 THEN
1910 pa_interface_utils_pub.map_new_amg_msg
1911 ( p_old_message_code => 'PA_OPP_CURR_CODE_IS_NULL'
1912 ,p_msg_attribute => 'CHANGE'
1913 ,p_resize_flag => 'N'
1914 ,p_msg_context => 'PROJ'
1915 ,p_attribute1 => l_project_in_rec.pm_project_reference
1916 ,p_attribute2 => ''
1917 ,p_attribute3 => ''
1918 ,p_attribute4 => ''
1919 ,p_attribute5 => '');
1920 END IF;
1921 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1922 p_return_status := FND_API.G_RET_STS_ERROR;
1923 RAISE FND_API.G_EXC_ERROR;
1924
1925 END IF;
1926
1927 -- anlee org role changes
1928 ELSIF l_override_fields_tab(i).pa_field_name = 'ORG_ROLE' THEN
1929
1930 l_org_roles := p_org_roles;
1931 j := l_org_roles.first;
1932
1933 IF j IS NULL THEN
1934
1935 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1936 THEN
1937 pa_interface_utils_pub.map_new_amg_msg
1938 ( p_old_message_code => 'PA_ORG_ROLE_IS_NULL'
1939 ,p_msg_attribute => 'CHANGE'
1940 ,p_resize_flag => 'N'
1941 ,p_msg_context => 'PROJ'
1942 ,p_attribute1 => l_project_in_rec.pm_project_reference
1943 ,p_attribute2 => ''
1944 ,p_attribute3 => ''
1945 ,p_attribute4 => ''
1946 ,p_attribute5 => '');
1947 END IF;
1948 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1949 p_return_status := FND_API.G_RET_STS_ERROR;
1950 RAISE FND_API.G_EXC_ERROR;
1951
1952 END IF;
1953
1954 l_org_role := 0;
1955
1956 WHILE j IS NOT NULL LOOP
1957 IF upper(l_override_fields_tab(i).type) = upper(l_org_roles(j).project_role_type)
1958 AND l_org_roles(j).person_id IS NOT NULL
1959 THEN
1960 l_org_role := 1;
1961 EXIT;
1962 END IF;
1963 j := l_org_roles.next(j);
1964 END LOOP;
1965
1966 IF l_org_role <> 1
1967 THEN
1968 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1969 THEN
1970 pa_interface_utils_pub.map_new_amg_msg
1971 ( p_old_message_code => 'PA_ORG_ROLE_IS_NULL'
1972 ,p_msg_attribute => 'CHANGE'
1973 ,p_resize_flag => 'N'
1974 ,p_msg_context => 'PROJ'
1975 ,p_attribute1 => l_project_in_rec.pm_project_reference
1976 ,p_attribute2 => ''
1977 ,p_attribute3 => ''
1978 ,p_attribute4 => ''
1979 ,p_attribute5 => '');
1980 END IF;
1981 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
1982 p_return_status := FND_API.G_RET_STS_ERROR;
1983 RAISE FND_API.G_EXC_ERROR;
1984 END IF;
1985
1986 /* Added this code for bug#2672646 if Long Name is an Quick Entry Field */
1987
1988 ELSIF l_override_fields_tab(i).pa_field_name = 'LONG_NAME' THEN
1989 IF l_project_in_rec.long_name IS NULL
1990 OR l_project_in_rec.long_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
1991 THEN
1992 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1993 THEN
1994 pa_interface_utils_pub.map_new_amg_msg
1995 ( p_old_message_code => 'PA_PRJ_LONG_NAME_IS_NULL'
1996 ,p_msg_attribute => 'CHANGE'
1997 ,p_resize_flag => 'N'
1998 ,p_msg_context => 'PROJ'
1999 ,p_attribute1 => l_project_in_rec.pm_project_reference
2000 ,p_attribute2 => ''
2001 ,p_attribute3 => ''
2002 ,p_attribute4 => ''
2003 ,p_attribute5 => '');
2004 END IF;
2005 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
2006 p_return_status := FND_API.G_RET_STS_ERROR;
2007 RAISE FND_API.G_EXC_ERROR;
2008 END IF;
2009
2010 /* End of code added for bug#2672646 */
2011
2012 END IF; /* l_override_fields_tab(i).pa_field_name */
2013 END IF; /* mandatory_flag = 'Y' */
2014 i := l_override_fields_tab.next(i);
2015 END LOOP;
2016
2017 /* code added for the bug#1891621, ends here */
2018
2019
2020 /* Bug#2672646 - If long name is passed as null or has default value, then we must default to the project name,
2021 This if loop will succeed only if long name is not a mandatory quick entry field, otherwise error
2022 would have been given above itself
2023 Start of code for bug#2672646 */
2024
2025 IF l_project_in_rec.long_name IS NULL
2026 OR l_project_in_rec.long_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2027 THEN
2028 l_project_in_rec.long_name := l_project_in_rec.project_name;
2029 END IF;
2030
2031 /* End of code for bug#2672646 */
2032
2033 -- Need to get the project type of the source template, to validate
2034 -- distribution rule
2035 -- Validates the ID of the source template as well.
2036
2037 OPEN l_source_project_type_csr(l_project_in_rec.created_from_project_id);
2038 FETCH l_source_project_type_csr INTO l_source_project_type;
2039
2040 IF l_source_project_type_csr%NOTFOUND
2041 THEN
2042 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2043 THEN
2044 pa_interface_utils_pub.map_new_amg_msg
2045 ( p_old_message_code => 'PA_SOURCE_TEMPLATE_INVALID'
2046 ,p_msg_attribute => 'CHANGE'
2047 ,p_resize_flag => 'N'
2048 ,p_msg_context => 'PROJ'
2049 ,p_attribute1 => l_project_in_rec.pm_project_reference
2050 ,p_attribute2 => ''
2051 ,p_attribute3 => ''
2052 ,p_attribute4 => ''
2053 ,p_attribute5 => '');
2054 END IF;
2055
2056 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
2057 CLOSE l_source_project_type_csr;
2058 RAISE FND_API.G_EXC_ERROR;
2059 END IF;
2060
2061 CLOSE l_source_project_type_csr;
2062
2063 IF l_project_in_rec.distribution_rule <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2064 AND l_project_in_rec.distribution_rule IS NOT NULL
2065 THEN
2066 IF pa_project_pvt.check_valid_dist_rule
2067 (l_source_project_type,
2068 l_project_in_rec.distribution_rule,
2069 l_project_in_rec.enable_top_task_inv_mth_flag ) = 'N' --Bug 3279981
2070 THEN
2071 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2072 THEN
2073 pa_interface_utils_pub.map_new_amg_msg
2074 ( p_old_message_code => 'PA_INVALID_DIST_RULE'
2075 ,p_msg_attribute => 'CHANGE'
2076 ,p_resize_flag => 'N'
2077 ,p_msg_context => 'PROJ'
2078 ,p_attribute1 => l_project_in_rec.pm_project_reference
2079 ,p_attribute2 => ''
2080 ,p_attribute3 => ''
2081 ,p_attribute4 => ''
2082 ,p_attribute5 => '');
2083 END IF;
2084
2085 RAISE FND_API.G_EXC_ERROR;
2086 END IF;
2087 END IF;
2088
2089 IF l_project_in_rec.carrying_out_organization_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2090 AND l_project_in_rec.carrying_out_organization_id IS NOT NULL
2091 THEN
2092 IF pa_project_pvt.check_valid_org
2093 (l_project_in_rec.carrying_out_organization_id) = 'N'
2094 THEN
2095 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2096 THEN
2097 pa_interface_utils_pub.map_new_amg_msg
2098 ( p_old_message_code => 'PA_INVALID_ORG'
2099 ,p_msg_attribute => 'CHANGE'
2100 ,p_resize_flag => 'N'
2101 ,p_msg_context => 'PROJ'
2102 ,p_attribute1 => l_project_in_rec.pm_project_reference
2103 ,p_attribute2 => ''
2104 ,p_attribute3 => ''
2105 ,p_attribute4 => ''
2106 ,p_attribute5 => '');
2107 END IF;
2108
2109 RAISE FND_API.G_EXC_ERROR;
2110 END IF;
2111 END IF;
2112
2113 l_project_start_date := l_project_in_rec.start_date;
2114 l_project_completion_date := l_project_in_rec.completion_date;
2115
2116 -- completion date can be specified only if there is a start date
2117 IF l_project_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2118 AND ( l_project_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2119 OR l_project_start_date IS NULL )
2120 THEN
2121 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2122 THEN
2123 pa_interface_utils_pub.map_new_amg_msg
2124 ( p_old_message_code => 'PA_PR_START_DATE_NEEDED'
2125 ,p_msg_attribute => 'CHANGE'
2126 ,p_resize_flag => 'N'
2127 ,p_msg_context => 'PROJ'
2128 ,p_attribute1 => l_project_in_rec.pm_project_reference
2129 ,p_attribute2 => ''
2130 ,p_attribute3 => ''
2131 ,p_attribute4 => ''
2132 ,p_attribute5 => '');
2133 END IF;
2134 RAISE FND_API.G_EXC_ERROR;
2135 END IF;
2136
2137 -- completion date cannot be less than start date
2138 IF l_project_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2139 AND l_project_start_date IS NOT NULL
2140 AND l_project_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2141 AND l_project_completion_date IS NOT NULL
2142 AND l_project_completion_date < l_project_start_date
2143 THEN
2144
2145 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2146 THEN
2147
2148 -- 5182972 Commented below code , which was throwing wrong error message
2149 /*
2150 pa_interface_utils_pub.map_new_amg_msg
2151 ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
2152 ,p_msg_attribute => 'CHANGE'
2153 ,p_resize_flag => 'N'
2154 ,p_msg_context => 'PROJ'
2155 ,p_attribute1 => l_project_in_rec.pm_project_reference
2156 ,p_attribute2 => ''
2157 ,p_attribute3 => ''
2158 ,p_attribute4 => ''
2159 ,p_attribute5 => '');
2160 */
2161
2162 -- Added below code which throws correct error message
2163 pa_utils.add_message
2164 (
2165 p_app_short_name => 'PA'
2166 ,p_msg_name => 'PA_SU_INVALID_DATES'
2167 );
2168
2169 -- 5182972 end
2170 END IF;
2171
2172 RAISE FND_API.G_EXC_ERROR;
2173 END IF;
2174 /*
2175 IF l_project_in_rec.actual_start_date IS NULL OR
2176 l_project_in_rec.actual_start_date =
2177 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2178 l_actual_start_date := NULL;
2179 ELSE
2180 l_actual_start_date := l_project_in_rec.actual_start_date;
2181 END IF;
2182
2183 IF l_project_in_rec.actual_finish_date IS NULL OR
2184 l_project_in_rec.actual_finish_date =
2185 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2186 l_actual_finish_date := NULL;
2187 ELSE
2188 l_actual_finish_date := l_project_in_rec.actual_finish_date;
2189 END IF;
2190 */
2191
2192 l_actual_start_date := null;
2193 l_actual_finish_date := null;
2194 --Task progress changes. These dates will be passed from task progress
2195
2196 IF l_project_in_rec.early_start_date IS NULL OR
2197 l_project_in_rec.early_start_date =
2198 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2199 l_early_start_date := NULL;
2200 ELSE
2201 l_early_start_date := l_project_in_rec.early_start_date;
2202 END IF;
2203
2204
2205 IF l_project_in_rec.early_start_date IS NULL OR
2206 l_project_in_rec.early_start_date =
2207 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2208 l_early_start_date := NULL;
2209 ELSE
2210 l_early_start_date := l_project_in_rec.early_start_date;
2211 END IF;
2212
2213
2214
2215 IF l_project_in_rec.early_finish_date IS NULL OR
2216 l_project_in_rec.early_finish_date =
2217 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2218 l_early_finish_date := NULL;
2219 ELSIF l_early_start_date IS NOT NULL THEN
2220 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
2221 IF l_project_in_rec.early_finish_date < l_early_start_date THEN
2222
2223 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2224
2225 pa_utils.add_message
2226 (
2227 p_app_short_name => 'PA'
2228 ,p_msg_name => 'PA_SU_INVALID_DATES'
2229 );
2230
2231 END IF;
2232
2233 RAISE FND_API.G_EXC_ERROR;
2234 END IF;
2235 l_early_finish_date := l_project_in_rec.early_finish_date;
2236
2237 ELSE --End of Logic added to check whether the finish date is earlier than the start date.Bug#5185673
2238 l_early_finish_date := l_project_in_rec.early_finish_date;
2239 END IF;
2240
2241
2242 IF l_project_in_rec.late_start_date IS NULL OR
2243 l_project_in_rec.late_start_date =
2244 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2245 l_late_start_date := NULL;
2246 ELSE
2247 l_late_start_date := l_project_in_rec.late_start_date;
2248 END IF;
2249
2250 IF l_project_in_rec.late_finish_date IS NULL OR
2251 l_project_in_rec.late_finish_date =
2252 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2253 l_late_finish_date := NULL;
2254 ELSIF l_late_start_date IS NOT NULL THEN
2255 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
2256 IF l_project_in_rec.late_finish_date < l_late_start_date THEN
2257
2258 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2259
2260 pa_utils.add_message
2261 (
2262 p_app_short_name => 'PA'
2263 ,p_msg_name => 'PA_SU_INVALID_DATES'
2264 );
2265
2266 END IF;
2267
2268 RAISE FND_API.G_EXC_ERROR;
2269 END IF;
2270 l_late_finish_date := l_project_in_rec.late_finish_date;
2271 ELSE --End of Logic added to check whether the finish date is earlier than the start date.Bug#5185673
2272 l_late_finish_date := l_project_in_rec.late_finish_date;
2273 END IF;
2274
2275 IF l_project_in_rec.scheduled_start_date IS NULL OR
2276 l_project_in_rec.scheduled_start_date =
2277 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2278 l_scheduled_start_date := NULL;
2279 ELSE
2280 l_scheduled_start_date := l_project_in_rec.scheduled_start_date;
2281 END IF;
2282
2283 IF l_project_in_rec.scheduled_finish_date IS NULL OR
2284 l_project_in_rec.scheduled_finish_date =
2285 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2286 l_scheduled_finish_date := NULL;
2287 ELSE
2288 l_scheduled_finish_date := l_project_in_rec.scheduled_finish_date;
2289 END IF;
2290
2291 -- Call the client extension to override the default values for
2292 -- project start/completion dates
2293
2294 PA_Client_Extn_PM.customize_dates (
2295 p_pm_project_reference => l_project_in_rec.pm_project_reference,
2296 p_pm_product_code => p_pm_product_code,
2297 p_in_start_date => l_project_in_rec.start_date,
2298 p_in_completion_date => l_project_in_rec.completion_date,
2299 p_actual_start_date => l_actual_start_date,
2300 p_actual_finish_date => l_actual_finish_date,
2301 p_early_start_date => l_early_start_date,
2302 p_early_finish_date => l_early_finish_date,
2303 p_late_start_date => l_late_start_date,
2304 p_late_finish_date => l_late_finish_date,
2305 p_scheduled_start_date => l_scheduled_start_date,
2306 p_scheduled_finish_date => l_scheduled_finish_date,
2307 p_out_start_date => l_out_start_date,
2308 p_out_completion_date => l_out_completion_date,
2309 p_error_code => l_error_code,
2310 p_error_message => l_error_message );
2311
2312 IF l_error_code <> 0 THEN
2313 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2314 pa_interface_utils_pub.map_new_amg_msg
2315 ( p_old_message_code => 'PA_ERROR_IN_CLIENT_EXTN'
2316 ,p_msg_attribute => 'CHANGE'
2317 ,p_resize_flag => 'N'
2318 ,p_msg_context => 'PROJ'
2319 ,p_attribute1 => l_project_in_rec.pm_project_reference
2320 ,p_attribute2 => ''
2321 ,p_attribute3 => ''
2322 ,p_attribute4 => ''
2323 ,p_attribute5 => '');
2324 END IF;
2325 RAISE FND_API.G_EXC_ERROR;
2326 END IF;
2327
2328
2329 -- Check to ensure that the dates returned by the API are valid
2330 -- the out completion date cannot be less than out start date
2331 IF l_out_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2332 AND l_out_start_date IS NOT NULL
2333 AND l_out_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2334 AND l_out_completion_date IS NOT NULL
2335 AND l_out_completion_date < l_out_start_date
2336 THEN
2337 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2338 THEN
2339
2340 -- 5182972 Commented below code , which was throwing wrong error message
2341 /*
2342 pa_interface_utils_pub.map_new_amg_msg
2343 ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
2344 ,p_msg_attribute => 'CHANGE'
2345 ,p_resize_flag => 'N'
2346 ,p_msg_context => 'PROJ'
2347 ,p_attribute1 => l_project_in_rec.pm_project_reference
2348 ,p_attribute2 => ''
2349 ,p_attribute3 => ''
2350 ,p_attribute4 => ''
2351 ,p_attribute5 => '');
2352 */
2353
2354 -- Added below code which throws correct error message
2355 pa_utils.add_message
2356 (
2357 p_app_short_name => 'PA'
2358 ,p_msg_name => 'PA_SU_INVALID_DATES'
2359 );
2360
2361 -- 5182972 end
2362 END IF;
2363
2364 RAISE FND_API.G_EXC_ERROR;
2365 END IF;
2366
2367 --Since this is an insert API (and not an update API),
2368 --all missing incoming parameters will be defaulted to NULL
2369
2370 IF l_project_in_rec.description = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2371 THEN l_project_in_rec.description := NULL;
2372 END IF;
2373
2374 IF l_project_in_rec.project_status_code =
2375 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2376 OR l_project_in_rec.project_status_code IS NULL THEN
2377 l_project_in_rec.project_status_code :=
2378 pa_project_stus_utils.Get_Default_Starting_Status
2379 (x_project_type => l_source_project_type);
2380 ELSE
2381 IF pa_project_pvt.check_valid_project_status
2382 ( p_project_status => l_project_in_rec.project_status_code ) = 'N'
2383 THEN
2384 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2385 THEN
2386 pa_interface_utils_pub.map_new_amg_msg
2387 ( p_old_message_code => 'PA_PROJECT_STATUS_INVALID'
2388 ,p_msg_attribute => 'CHANGE'
2389 ,p_resize_flag => 'N'
2390 ,p_msg_context => 'PROJ'
2391 ,p_attribute1 => l_project_in_rec.pm_project_reference
2392 ,p_attribute2 => ''
2393 ,p_attribute3 => ''
2394 ,p_attribute4 => ''
2395 ,p_attribute5 => '');
2396 END IF;
2397 RAISE FND_API.G_EXC_ERROR;
2398 END IF;
2399 IF pa_project_stus_utils.Is_Starting_Status
2400 (l_project_in_rec.project_status_code) = 'N' THEN
2401 pa_interface_utils_pub.map_new_amg_msg
2402 ( p_old_message_code => 'PA_NOT_STARTING_STATUS'
2403 ,p_msg_attribute => 'CHANGE'
2404 ,p_resize_flag => 'N'
2405 ,p_msg_context => 'PROJ'
2406 ,p_attribute1 => l_project_in_rec.pm_project_reference
2407 ,p_attribute2 => ''
2408 ,p_attribute3 => ''
2409 ,p_attribute4 => ''
2410 ,p_attribute5 => '');
2411 RAISE FND_API.G_EXC_ERROR;
2412 END IF;
2413
2414 END IF;
2415
2416
2417 IF l_project_in_rec.distribution_rule = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2418 THEN l_project_in_rec.distribution_rule := NULL;
2419 END IF;
2420
2421
2422 IF l_project_in_rec.public_sector_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2423 OR l_project_in_rec.public_sector_flag IS NULL
2424 THEN l_project_in_rec.public_sector_flag := NULL;
2425 ELSE
2426 IF l_project_in_rec.public_sector_flag NOT IN ('Y','N')
2427 THEN
2428 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
2429 THEN
2430 pa_interface_utils_pub.map_new_amg_msg
2431 ( p_old_message_code => 'PA_PUBLIC_SECTOR_INVALID'
2432 ,p_msg_attribute => 'CHANGE'
2433 ,p_resize_flag => 'N'
2434 ,p_msg_context => 'PROJ'
2435 ,p_attribute1 => l_project_in_rec.pm_project_reference
2436 ,p_attribute2 => ''
2437 ,p_attribute3 => ''
2438 ,p_attribute4 => ''
2439 ,p_attribute5 => '');
2440 END IF;
2441 RAISE FND_API.G_EXC_ERROR;
2442 END IF;
2443 END IF;
2444
2445 --When descriptive flex fields are not passed set them to NULL
2446
2447 IF l_project_in_rec.attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2448 THEN
2449 l_attribute_category := NULL;
2450 ELSE
2451 l_attribute_category := l_project_in_rec.attribute_category;
2452 END IF;
2453 IF l_project_in_rec.attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2454 THEN
2455 l_attribute1 := NULL;
2456 ELSE
2457 l_attribute1 := l_project_in_rec.attribute1;
2458 END IF;
2459 IF l_project_in_rec.attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2460 THEN
2461 l_attribute2 := NULL;
2462 ELSE
2463 l_attribute2 := l_project_in_rec.attribute2;
2464 END IF;
2465 IF l_project_in_rec.attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2466 THEN
2467 l_attribute3 := NULL;
2468 ELSE
2469 l_attribute3 := l_project_in_rec.attribute3;
2470 END IF;
2471 IF l_project_in_rec.attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2472 THEN
2473 l_attribute4 := NULL;
2474 ELSE
2475 l_attribute4 := l_project_in_rec.attribute4;
2476 END IF;
2477
2478 IF l_project_in_rec.attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2479 THEN
2480 l_attribute5 := NULL;
2481 ELSE
2482 l_attribute5 := l_project_in_rec.attribute5;
2483
2484 END IF;
2485
2486 IF l_project_in_rec.attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2487 THEN
2488 l_attribute6 := NULL;
2489 ELSE
2490 l_attribute6 := l_project_in_rec.attribute6;
2491 END IF;
2492
2493 IF l_project_in_rec.attribute7 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2494 THEN
2495 l_attribute7 := NULL;
2496 ELSE
2497 l_attribute7 := l_project_in_rec.attribute7;
2498 END IF;
2499
2500 IF l_project_in_rec.attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2501 THEN
2502 l_attribute8 := NULL;
2503 ELSE
2504 l_attribute8 := l_project_in_rec.attribute8;
2505 END IF;
2506 IF l_project_in_rec.attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2507 THEN
2508 l_attribute9 := NULL;
2509 ELSE
2510 l_attribute9 := l_project_in_rec.attribute9;
2511 END IF;
2512 IF l_project_in_rec.attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2513 THEN
2514 l_attribute10 := NULL;
2515 ELSE
2516 l_attribute10 := l_project_in_rec.attribute10;
2517 END IF;
2518
2519 -- Team template parameters
2520 IF l_project_in_rec.team_template_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2521 THEN
2522 l_team_template_id := NULL;
2523 ELSE
2524 l_team_template_id := l_project_in_rec.team_template_id;
2525 END IF;
2526 IF l_project_in_rec.country_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2527 THEN
2528 l_country_code := NULL;
2529 ELSE
2530 l_country_code := l_project_in_rec.country_code;
2531 END IF;
2532 IF l_project_in_rec.region = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2533 THEN
2534 l_region := NULL;
2535 ELSE
2536 l_region := l_project_in_rec.region;
2537 END IF;
2538 IF l_project_in_rec.city = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2539 THEN
2540 l_city := NULL;
2541 ELSE
2542 l_city := l_project_in_rec.city;
2543 END IF;
2544
2545 -- Tax Code changes starts ...
2546
2547 IF l_project_in_rec.output_tax_code =
2548 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2549 THEN
2550 l_output_tax_code := NULL;
2551 ELSE
2552 l_output_tax_code := l_project_in_rec.output_tax_code;
2553 END IF;
2554
2555 IF l_project_in_rec.retention_tax_code =
2556 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2557 THEN
2558 l_retention_tax_code := NULL;
2559 ELSE
2560 l_retention_tax_code := l_project_in_rec.retention_tax_code;
2561 END IF;
2562
2563 -- Tax Code changes Ends ...
2564
2565 -- IC AND Multi National Currency Changes starts here ...
2566
2567 IF l_project_in_rec.project_currency_code =
2568 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2569 --Bugfix 2293158 issue 2 --Start
2570 /* Changing AND to OR and IS NOT NULL condition to IS NULL as The if condition has to be true
2571 when l_project_in_rec.project_currency_code is NULL or the default G_PA_MISS_ CHAR */
2572 /* AND */
2573 OR l_project_in_rec.project_currency_code IS NULL /* NOT NULL */
2574 --Bugfix 2293158 issue 2 --end.
2575 THEN
2576 --Bugfix 2293158 issue 1 --Start
2577 -- l_project_currency_code := 'USD';
2578 l_project_currency_code := pa_multi_currency.get_acct_currency_code;
2579 --Bugfix 2293158 issue 1 --End
2580 ELSE
2581 l_project_currency_code := l_project_in_rec.project_currency_code;
2582 END IF;
2583
2584 IF l_project_in_rec.allow_cross_charge_flag =
2585 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2586 THEN
2587 l_allow_cross_charge_flag := 'N';
2588 ELSE
2589 l_allow_cross_charge_flag := l_project_in_rec.allow_cross_charge_flag;
2590 END IF;
2591
2592 IF l_project_in_rec.project_rate_date =
2593 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2594 THEN
2595 l_project_rate_date := NULL;
2596 ELSE
2597 l_project_rate_date := l_project_in_rec.project_rate_date;
2598 END IF;
2599
2600 IF l_project_in_rec.project_rate_type =
2601 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2602 THEN
2603 l_project_rate_type := NULL;
2604 ELSE
2605 l_project_rate_type := l_project_in_rec.project_rate_type;
2606 END IF;
2607
2608 IF l_project_in_rec.cc_process_labor_flag =
2609 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2610 THEN
2611 l_cc_process_labor_flag := 'N';
2612 ELSE
2613 l_cc_process_labor_flag := l_project_in_rec.cc_process_labor_flag;
2614 END IF;
2615
2616 IF l_project_in_rec.labor_tp_schedule_id =
2617 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2618 THEN
2619 l_labor_tp_schedule_id := NULL;
2620 ELSE
2621 l_labor_tp_schedule_id := l_project_in_rec.labor_tp_schedule_id;
2622 END IF;
2623
2624 IF l_project_in_rec.labor_tp_fixed_date =
2625 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2626 THEN
2627 l_labor_tp_fixed_date := NULL;
2628 ELSE
2629 l_labor_tp_fixed_date := l_project_in_rec.labor_tp_fixed_date;
2630 END IF;
2631
2632 IF l_project_in_rec.cc_process_nl_flag =
2633 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2634 THEN
2635 l_cc_process_nl_flag := 'N';
2636 ELSE
2637 l_cc_process_nl_flag := l_project_in_rec.cc_process_nl_flag;
2638 END IF;
2639
2640 IF l_project_in_rec.nl_tp_schedule_id =
2641 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2642 THEN
2643 l_nl_tp_schedule_id := NULL;
2644 ELSE
2645 l_nl_tp_schedule_id := l_project_in_rec.nl_tp_schedule_id;
2646 END IF;
2647
2648 IF l_project_in_rec.nl_tp_fixed_date =
2649 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2650 THEN
2651 l_nl_tp_fixed_date := NULL;
2652 ELSE
2653 l_nl_tp_fixed_date := l_project_in_rec.nl_tp_fixed_date;
2654 END IF;
2655
2656 IF l_project_in_rec.cc_tax_task_id =
2657 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2658 THEN
2659 l_cc_tax_task_id := NULL;
2660 ELSE
2661 l_cc_tax_task_id := l_project_in_rec.cc_tax_task_id;
2662 END IF;
2663
2664 -- IC and Multi National Currency Changes Ends here ...
2665
2666 -- ORM Code change starts here ...
2667
2668 IF l_project_in_rec.role_list_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2669 THEN
2670 l_role_list_id := NULL;
2671 ELSE
2672 l_role_list_id := l_project_in_rec.role_list_id;
2673 END IF;
2674
2675 IF l_project_in_rec.work_type_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2676 THEN
2677 -- If work type attribute change to NOT Null, we need to call default API here.
2678 l_work_type_id := NULL;
2679 ELSE
2680 l_work_type_id := l_project_in_rec.work_type_id;
2681 END IF;
2682
2683 IF l_project_in_rec.calendar_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2684 THEN
2685 l_calendar_id := NULL;
2686 ELSE
2687 l_calendar_id := l_project_in_rec.calendar_id;
2688 END IF;
2689
2690 IF l_project_in_rec.location_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2691 THEN
2692 l_location_id := NULL;
2693 ELSE
2694 l_location_id := l_project_in_rec.location_id;
2695 END IF;
2696
2697 IF ( nvl(l_project_in_rec.probability_member_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
2698 THEN
2699 l_probability_member_id := NULL;
2700 ELSE
2701 --Bug#5191521 included validation for probability_member_id
2702
2703 OPEN cur_validate_prob_member( l_project_in_rec.created_from_project_id,l_project_in_rec.probability_member_id);
2704 FETCH cur_validate_prob_member INTO l_check_prob_id;
2705 CLOSE cur_validate_prob_member;
2706
2707 IF l_check_prob_id ='Y' THEN
2708
2709 l_probability_member_id := l_project_in_rec.probability_member_id;
2710 ELSE
2711 l_probability_member_id := NULL;
2712 END IF;
2713 -- ENd of changes for Bug#5191521.
2714
2715 END IF;
2716
2717 IF l_project_in_rec.project_value = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2718 THEN
2719 l_project_value := NULL;
2720
2721 ELSE
2722 --Added for bug 5214431
2723 IF l_project_in_rec.project_value IS NOT NULL AND l_project_in_rec.project_value < 0 THEN
2724 PA_UTILS.ADD_MESSAGE
2725 ( p_app_short_name => 'PA'
2726 ,p_msg_name => 'PA_INVLD_OPPORTUNITY_VALUE');
2727 RAISE FND_API.G_EXC_ERROR;
2728 ELSE
2729 l_project_value := l_project_in_rec.project_value;
2730 END IF;
2731 END IF;
2732
2733
2734 IF l_project_in_rec.expected_approval_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2735 THEN
2736 l_expected_approval_date := NULL;
2737 ELSE
2738 l_expected_approval_date := l_project_in_rec.expected_approval_date;
2739 END IF;
2740
2741 IF l_project_in_rec.cost_job_group_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2742 THEN
2743 l_cost_job_group_id := NULL;
2744 ELSE
2745 l_cost_job_group_id := l_project_in_rec.cost_job_group_id;
2746 END IF;
2747
2748 IF l_project_in_rec.bill_job_group_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2749 THEN
2750 l_bill_job_group_id := NULL;
2751 ELSE
2752 l_bill_job_group_id := l_project_in_rec.bill_job_group_id;
2753 END IF;
2754
2755 -- ORM Code change ends here ...
2756
2757 -- Bug 6144566: Changes start
2758 -- Bug 6144566: Introduced MCB related validations
2759
2760 IF l_project_in_rec.multi_currency_billing_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2761 OR l_project_in_rec.multi_currency_billing_flag IS NULL THEN
2762 l_project_in_rec.multi_currency_billing_flag :=null;
2763 ELSE
2764 IF l_project_in_rec.multi_currency_billing_flag = 'Y' THEN
2765 -- do MCB related validations
2766
2767 -- Project Currency related attributes
2768 IF l_project_in_rec.PROJECT_BIL_RATE_TYPE is NULL
2769 OR l_project_in_rec.PROJECT_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PROJ_RATE_TYPE_INV_AMG:The project exchage rate type is invalid
2770 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2771 FND_MESSAGE.SET_NAME('PA','PA_PROJ_RATE_TYPE_INV_AMG');
2772 FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
2773 FND_MSG_PUB.ADD;
2774 RAISE FND_API.G_EXC_ERROR;
2775 END IF;
2776 ELSE
2777 IF l_project_in_rec.PROJECT_BIL_RATE_TYPE = 'User' THEN
2778 IF l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE is NULL
2779 OR l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2780 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PC_AMG:Project Exchange Rate cannot be null when project rate type is User.
2781 FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PC_AMG');
2782 FND_MSG_PUB.ADD;
2783 RAISE FND_API.G_EXC_ERROR;
2784 END IF;
2785 END IF;
2786 ELSE -- non-User type
2787 IF l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE is NULL
2788 OR l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2789
2790 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2791 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2792 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
2793 FND_MSG_PUB.ADD;
2794 RAISE FND_API.G_EXC_ERROR;
2795 END IF;
2796 ELSE
2797 IF l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE = 'FIXED_DATE' THEN --Modified for bug 6332591
2798 IF l_project_in_rec.PROJECT_BIL_RATE_DATE is NULL
2799 OR l_project_in_rec.PROJECT_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2800 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2801 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2802 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
2803 FND_MSG_PUB.ADD;
2804 RAISE FND_API.G_EXC_ERROR;
2805 END IF;
2806 END IF;
2807 END IF;
2808 END IF;
2809 END IF;
2810 END IF;
2811
2812 -- Project Functional Currency related attributes
2813 IF l_project_in_rec.PROJFUNC_BIL_RATE_TYPE is NULL
2814 OR l_project_in_rec.PROJFUNC_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PFC_RATE_TYPE_INV_AMG:The project functional exchage rate type is invalid
2815 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2816 FND_MESSAGE.SET_NAME('PA','PA_PFC_RATE_TYPE_INV_AMG');
2817 FND_MSG_PUB.ADD;
2818 RAISE FND_API.G_EXC_ERROR;
2819 END IF;
2820 ELSE
2821 IF l_project_in_rec.PROJFUNC_BIL_RATE_TYPE = 'User' THEN
2822 IF l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE is NULL
2823 OR l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2824 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PF_AMG:Project Functional Exchange Rate cannot be null when project functional rate type is User.
2825 FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PF_AMG');
2826 FND_MSG_PUB.ADD;
2827 RAISE FND_API.G_EXC_ERROR;
2828 END IF;
2829 END IF;
2830
2831 ELSE -- non-User type
2832 IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE is NULL
2833 OR l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2834 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2835 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2836 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
2837 FND_MSG_PUB.ADD;
2838 RAISE FND_API.G_EXC_ERROR;
2839 END IF;
2840 ELSE
2841 IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE = 'FIXED_DATE' THEN --Modified for bug 6332591
2842 IF l_project_in_rec.PROJFUNC_BIL_RATE_DATE is NULL
2843 OR l_project_in_rec.PROJFUNC_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2844 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2845 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2846 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
2847 FND_MSG_PUB.ADD;
2848 RAISE FND_API.G_EXC_ERROR;
2849 END IF;
2850 END IF;
2851 END IF;
2852 END IF;
2853 END IF;
2854 END IF;
2855
2856
2857 -- Funding Currency related attributes
2858 IF l_project_in_rec.FUNDING_RATE_TYPE is NULL
2859 OR l_project_in_rec.FUNDING_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_FUND_RATE_TYPE_INV_AMG:The funding exchage rate type is invalid
2860 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2861 FND_MESSAGE.SET_NAME('PA','PA_FUND_RATE_TYPE_INV_AMG');
2862 FND_MSG_PUB.ADD;
2863 RAISE FND_API.G_EXC_ERROR;
2864 END IF;
2865 ELSE
2866 IF l_project_in_rec.FUNDING_RATE_TYPE = 'User' THEN
2867 IF l_project_in_rec.FUNDING_EXCHANGE_RATE is NULL
2868 OR l_project_in_rec.FUNDING_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
2869 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCHANGE_RATE_NULL:Exchange rate cannot be null when rate type is User.
2870 FND_MESSAGE.SET_NAME('PA','PA_EXCHANGE_RATE_NULL');
2871 FND_MSG_PUB.ADD;
2872 RAISE FND_API.G_EXC_ERROR;
2873 END IF;
2874 END IF;
2875
2876 ELSE -- non-User type
2877 IF l_project_in_rec.FUNDING_RATE_DATE_CODE is NULL
2878 OR l_project_in_rec.FUNDING_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
2879 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2880 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
2881 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
2882 FND_MSG_PUB.ADD;
2883 RAISE FND_API.G_EXC_ERROR;
2884 END IF;
2885 ELSE
2886 IF l_project_in_rec.FUNDING_RATE_DATE_CODE = 'FIXED_DATE' THEN --Modified for bug 6332591
2887 IF l_project_in_rec.FUNDING_RATE_DATE is NULL
2888 OR l_project_in_rec.FUNDING_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
2889 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2890 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
2891 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
2892 FND_MSG_PUB.ADD;
2893 RAISE FND_API.G_EXC_ERROR;
2894 END IF;
2895 END IF;
2896 END IF;
2897 END IF;
2898 END IF;
2899 END IF;
2900
2901 ELSE -- MCB flag is not 'Y'
2902 -- set all currency conversion attributes to NULL
2903
2904 l_project_in_rec.PROJECT_BIL_RATE_TYPE := NULL;
2905 l_project_in_rec.PROJECT_BIL_EXCHANGE_RATE := NULL;
2906 l_project_in_rec.PROJECT_BIL_RATE_DATE_CODE := NULL;
2907 l_project_in_rec.PROJECT_BIL_RATE_DATE := NULL;
2908
2909 l_project_in_rec.PROJFUNC_BIL_RATE_TYPE := NULL;
2910 l_project_in_rec.PROJFUNC_BIL_EXCHANGE_RATE := NULL;
2911 l_project_in_rec.PROJFUNC_BIL_RATE_DATE_CODE := NULL;
2912 l_project_in_rec.PROJFUNC_BIL_RATE_DATE := NULL;
2913
2914 l_project_in_rec.FUNDING_RATE_TYPE := NULL;
2915 l_project_in_rec.FUNDING_EXCHANGE_RATE := NULL;
2916 l_project_in_rec.FUNDING_RATE_DATE_CODE := NULL;
2917 l_project_in_rec.FUNDING_RATE_DATE := NULL;
2918
2919 END IF;
2920 END IF;
2921
2922 -- Bug 6144566: Changes end
2923
2924 IF l_project_in_rec.emp_bill_rate_schedule_id =
2925 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2926 THEN
2927 l_emp_bill_rate_schedule_id := NULL;
2928 ELSE
2929 l_emp_bill_rate_schedule_id := l_project_in_rec.emp_bill_rate_schedule_id;
2930 END IF;
2931
2932 IF l_project_in_rec.job_bill_rate_schedule_id =
2933 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2934 THEN
2935 l_job_bill_rate_schedule_id := NULL;
2936 ELSE
2937 l_job_bill_rate_schedule_id := l_project_in_rec.job_bill_rate_schedule_id;
2938 END IF;
2939
2940 IF l_project_in_rec.carrying_out_organization_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
2941 THEN l_project_in_rec.carrying_out_organization_id := NULL;
2942 END IF;
2943
2944
2945 IF l_project_in_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2946 THEN l_project_in_rec.start_date := NULL;
2947 END IF;
2948
2949
2950 IF l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
2951 THEN l_project_in_rec.completion_date := NULL;
2952 END IF;
2953
2954
2955 --added to remove bug# 604762 : Ashia Bagai - 9-jan-98
2956 IF l_out_start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE Then
2957 l_out_start_date := NULL ;
2958 END IF ;
2959
2960 IF l_out_completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE Then
2961 l_out_completion_date := NULL ;
2962 END IF ;
2963
2964 --end of addition to remove bug# 604762
2965
2966 -- opportunity value changes
2967 -- anlee
2968 IF l_project_in_rec.opp_value_currency_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2969 THEN
2970 l_opp_value_currency_code := NULL;
2971 ELSE
2972 l_opp_value_currency_code := l_project_in_rec.opp_value_currency_code;
2973 END IF;
2974
2975 --Priority code
2976
2977 IF l_project_in_rec.priority_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
2978 THEN
2979 l_priority_code := NULL;
2980 ELSE
2981 l_priority_code := l_project_in_rec.priority_code;
2982 END IF;
2983
2984 -- 5191417 validate l_priority_code for valid value
2985
2986 IF l_priority_code IS NOT NULL THEN
2987
2988 OPEN priority_code_csr(l_priority_code);
2989 FETCH priority_code_csr into l_valid_prio_code;
2990 CLOSE priority_code_csr;
2991
2992 -- if not valid throw , error message
2993
2994 IF l_valid_prio_code = 'N' THEN
2995
2996 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
2997
2998 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
2999 ,p_msg_name => 'PA_INVALID_PRIORITY_CODE');
3000
3001 l_return_status := FND_API.G_RET_STS_ERROR;
3002
3003 RAISE FND_API.G_EXC_ERROR;
3004
3005 END IF;
3006
3007 END IF;
3008
3009 END IF;
3010
3011 -- 5191417 end
3012
3013 IF l_project_in_rec.security_level = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3014
3015 l_security_level := NULL;
3016 ELSE
3017 --Modified this else part for security level validations.Bug#5191699.
3018 --If the user passes an invalid value or if the user passes explicitly as null,
3019 --we need to handle that as,
3020 --security level is mandatory parameter and cant be null and it can take values only
3021 --from the lookup.Hence we update with default value 'Enterprise'.
3022
3023 OPEN cur_check_sec_level(l_project_in_rec.security_level);
3024 FETCH cur_check_sec_level INTO l_check_sec_level;
3025 CLOSE cur_check_sec_level;
3026
3027 IF l_check_sec_level = 'Y' THEN
3028 -- Not null and a Valid value has been passed
3029 l_security_level := l_project_in_rec.security_level;
3030 ELSE
3031 -- Either null has been explicitly passed or invalid value
3032 -- is passed. Then update it with default value of 'Enterprise'
3033 -- as this will be always present and cant be deleted or end dated.
3034
3035 l_security_level := 1; --1 lookup_code corresponds to 'Enterprise'.
3036 END IF;
3037 --End if code changes for Bug#5191699.
3038 END IF;
3039 /*Addtion started for bug 3825528*/
3040 /* Code added for tracking bug by aditi */
3041 -- --dbms_output.put_line('value of p_customers_in(1).customer_id'||p_customers_in(1).customer_id);
3042 IF l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3043 /* End of Code changes */
3044 -- IF l_project_in_rec.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM Commented for tracking bug
3045 THEN
3046 l_in_customer_id := NULL;
3047 -- ELSE
3048 -- l_in_customer_id := l_project_in_rec.customer_id;
3049 END IF;
3050 ----dbms_output.put_line('value of l_in_customer_id at the end '||l_in_customer_id);
3051 /*Addtion ends for bug 3825528*/
3052
3053
3054
3055 --sunkalya:federal changes bug#5511353
3056
3057 OPEN get_date_eff_funds_flag(l_project_in_rec.created_from_project_id);
3058 FETCH get_date_eff_funds_flag INTO l_orig_date_eff_funds_flag;
3059 CLOSE get_date_eff_funds_flag;
3060
3061 OPEN get_ar_rec_notify_flag(l_project_in_rec.created_from_project_id); -- 7508661 : EnC : Added
3062 FETCH get_ar_rec_notify_flag INTO l_orig_ar_rec_notify_flag;
3063 CLOSE get_ar_rec_notify_flag;
3064
3065 OPEN get_auto_release_pwp_inv(l_project_in_rec.created_from_project_id); -- 7508661 : EnC : Added
3066 FETCH get_auto_release_pwp_inv INTO l_orig_auto_release_pwp_inv;
3067 CLOSE get_auto_release_pwp_inv;
3068 /* Added for 12.2Payroll billing ER 11899223 */
3069 /*OPEN get_bill_labor_accrual(l_project_in_rec.created_from_project_id); -- 7508661 : EnC : Added
3070 FETCH get_bill_labor_accrual INTO l_orig_bill_labor_accrual;
3071 CLOSE get_bill_labor_accrual;
3072
3073 OPEN get_adj_on_std_inv(l_project_in_rec.created_from_project_id); -- 7508661 : EnC : Added
3074 FETCH get_adj_on_std_inv INTO l_orig_adj_on_std_inv;
3075 CLOSE get_adj_on_std_inv; */
3076 /* Added for 12.2Payroll billing ER 11899223 */
3077 OPEN cur_get_orig_tt_cust_flag(l_project_in_rec.created_from_project_id);
3078 FETCH cur_get_orig_tt_cust_flag INTO l_orig_def_tt_flag;
3079 CLOSE cur_get_orig_tt_cust_flag;
3080
3081
3082 IF (l_project_in_rec.date_eff_funds_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3083 (l_project_in_rec.date_eff_funds_flag IS NULL)
3084 THEN
3085
3086 l_date_eff_funds_flag := NULL;
3087
3088 ELSE
3089
3090 OPEN cur_enable_funds_flag(l_project_in_rec.created_from_project_id);
3091 FETCH cur_enable_funds_flag INTO l_enable_funds_flag;
3092 CLOSE cur_enable_funds_flag;
3093
3094 /*
3095 OPEN cur_rev_inv(l_project_in_rec.created_from_project_id);
3096 FETCH cur_rev_inv INTO l_chk_rev_inv_flag;
3097 CLOSE cur_rev_inv;
3098 */
3099 IF nvl(l_enable_funds_flag,'N')='N' AND l_project_in_rec.date_eff_funds_flag ='Y' THEN
3100
3101 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3102 ,p_msg_name => 'PA_FUNDS_FLAG_CANT_ENABLED'
3103 );
3104
3105 l_return_status := FND_API.G_RET_STS_ERROR;
3106
3107 RAISE FND_API.G_EXC_ERROR;
3108 END IF;
3109 /*
3110 IF nvl(l_chk_rev_inv_flag,'N') ='Y' AND l_project_in_rec.date_eff_funds_flag <> l_orig_date_eff_funds_flag THEN
3111
3112 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
3113 ,p_msg_name => 'PA_FUNDS_FLAG_NOT_UPDATBL'
3114 );
3115
3116 l_return_status := FND_API.G_RET_STS_ERROR;
3117
3118 RAISE FND_API.G_EXC_ERROR;
3119 END IF;
3120 */
3121 l_date_eff_funds_flag := l_project_in_rec.date_eff_funds_flag;
3122 END IF;
3123 --sunkalya:federal changes bug#5511353
3124
3125
3126 /* 7508661 : EnC : Start */
3127
3128 IF (l_project_in_rec.ar_rec_notify_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3129 (l_project_in_rec.ar_rec_notify_flag IS NULL)
3130 THEN
3131 l_ar_rec_notify_flag := 'N';
3132 ELSE
3133 l_ar_rec_notify_flag := l_orig_ar_rec_notify_flag;
3134 END IF;
3135
3136 IF (l_project_in_rec.auto_release_pwp_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3137 (l_project_in_rec.auto_release_pwp_inv IS NULL)
3138 THEN
3139 l_auto_release_pwp_inv := 'Y';
3140 ELSE
3141 l_auto_release_pwp_inv := l_orig_auto_release_pwp_inv;
3142 END IF;
3143
3144 /* 7508661 : EnC : End */
3145
3146 /* Added for 12.2Payroll billing ER 11899223 */
3147 IF (l_project_in_rec.bill_labor_accrual = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3148 (l_project_in_rec.bill_labor_accrual IS NULL)
3149 THEN
3150 l_bill_labor_accrual := 'N';
3151 ELSE
3152 l_bill_labor_accrual := l_bill_labor_accrual;
3153 END IF;
3154
3155 IF (l_project_in_rec.adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3156 (l_project_in_rec.adj_on_std_inv IS NULL)
3157 THEN
3158 l_adj_on_std_inv := 'N';
3159 ELSE
3160 l_adj_on_std_inv := l_adj_on_std_inv;
3161
3162 END IF;
3163 /* Added for 12.2Payroll billing ER 11899223 */
3164
3165
3166
3167 --Bug 3279981 Review
3168 IF (l_project_in_rec.enable_top_task_customer_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) OR
3169 (p_project_in.enable_top_task_customer_flag IS NULL) --Added or condition for bug 4762153
3170 THEN
3171 l_en_top_task_customer_flag := NULL;
3172 ELSE
3173 IF l_project_in_rec.enable_top_task_customer_flag IN ('Y','N') THEN
3174 -- Function Security Check
3175 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3176 ( p_api_version_number => p_api_version_number,
3177 p_responsibility_id => l_resp_id,
3178 p_function_name => 'PA_PAXPREPR_CUST_TOP_TASK',
3179 p_msg_count => l_msg_count,
3180 p_msg_data => l_msg_data,
3181 p_return_status => l_return_status,
3182 p_function_allowed => l_function_allowed);
3183 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3184 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3185 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3186 RAISE FND_API.G_EXC_ERROR;
3187 END IF;
3188
3189 IF l_function_allowed = 'N' THEN
3190 pa_interface_utils_pub.map_new_amg_msg
3191 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3192 ,p_msg_attribute => 'CHANGE'
3193 ,p_resize_flag => 'Y'
3194 ,p_msg_context => 'GENERAL'
3195 ,p_attribute1 => ''
3196 ,p_attribute2 => ''
3197 ,p_attribute3 => ''
3198 ,p_attribute4 => ''
3199 ,p_attribute5 => '');
3200 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3201 RAISE FND_API.G_EXC_ERROR;
3202 END IF;
3203 ELSE
3204 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3205 pa_interface_utils_pub.map_new_amg_msg
3206 ( p_old_message_code => 'PA_TOP_TASK_CUST_FLAG_INVALID'
3207 ,p_msg_attribute => 'NOCHANGE' -- Changed to NOCHANGE for Bug 4762153
3208 ,p_resize_flag => 'N'
3209 ,p_msg_context => 'PROJ'
3210 ,p_attribute1 => l_project_in_rec.pm_project_reference
3211 ,p_attribute2 => ''
3212 ,p_attribute3 => ''
3213 ,p_attribute4 => ''
3214 ,p_attribute5 => '');
3215 END IF;
3216 RAISE FND_API.G_EXC_ERROR;
3217 END IF;
3218 l_en_top_task_customer_flag := l_project_in_rec.enable_top_task_customer_flag;
3219 END IF;
3220
3221 IF l_project_in_rec.enable_top_task_inv_mth_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
3222 l_en_top_task_inv_mth_flag := NULL;
3223 ELSE
3224 IF l_project_in_rec.enable_top_task_inv_mth_flag IN ('Y','N') THEN
3225 -- Function Security Check
3226 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
3227 ( p_api_version_number => p_api_version_number,
3228 p_responsibility_id => l_resp_id,
3229 p_function_name => 'PA_PAXPREPR_INV_MTH_TOP_TASK',
3230 p_msg_count => l_msg_count,
3231 p_msg_data => l_msg_data,
3232 p_return_status => l_return_status,
3233 p_function_allowed => l_function_allowed);
3234 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3235 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3236 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3237 RAISE FND_API.G_EXC_ERROR;
3238 END IF;
3239
3240 IF l_function_allowed = 'N' THEN
3241 pa_interface_utils_pub.map_new_amg_msg
3242 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
3243 ,p_msg_attribute => 'CHANGE'
3244 ,p_resize_flag => 'Y'
3245 ,p_msg_context => 'GENERAL'
3246 ,p_attribute1 => ''
3247 ,p_attribute2 => ''
3248 ,p_attribute3 => ''
3249 ,p_attribute4 => ''
3250 ,p_attribute5 => '');
3251 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3252 RAISE FND_API.G_EXC_ERROR;
3253 END IF;
3254 ELSE
3255 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
3256 pa_interface_utils_pub.map_new_amg_msg
3257 ( p_old_message_code => 'PA_TT_INV_MTH_FLAG_INVALID'
3258 ,p_msg_attribute => 'CHANGE'
3259 ,p_resize_flag => 'N'
3260 ,p_msg_context => 'PROJ'
3261 ,p_attribute1 => l_project_in_rec.pm_project_reference
3262 ,p_attribute2 => ''
3263 ,p_attribute3 => ''
3264 ,p_attribute4 => ''
3265 ,p_attribute5 => '');
3266 END IF;
3267 RAISE FND_API.G_EXC_ERROR;
3268 END IF;
3269 l_en_top_task_inv_mth_flag := l_project_in_rec.enable_top_task_inv_mth_flag;
3270 END IF;
3271 --Bug 3279981 Review
3272
3273 --PROJECT
3274 --create a new project using a template or other project as basis
3275 ----dbms_output.put_line('before calling Copy_Project');
3276 pa_project_core1.copy_project (
3277 x_orig_project_id => l_project_in_rec.created_from_project_id
3278 ,x_project_name => RTRIM(l_project_in_rec.project_name)
3279 ,x_long_name => RTRIM(l_project_in_rec.long_name)
3280 ,x_project_number => RTRIM(l_create_project_number)
3281 ,x_description => RTRIM(l_project_in_rec.description)
3282 ,x_project_type => NULL --project_type is always defaulted from template
3283 ,x_project_status_code => l_project_in_rec.project_status_code
3284 ,x_distribution_rule => l_project_in_rec.distribution_rule
3285 ,x_public_sector_flag => l_project_in_rec.public_sector_flag
3286 ,x_organization_id => l_project_in_rec.carrying_out_organization_id
3287 ,x_start_date => l_out_start_date
3288 ,x_completion_date => l_out_completion_date
3289 ,x_probability_member_id => l_probability_member_id
3290 ,x_project_value => l_project_value
3291 ,x_expected_approval_date => l_expected_approval_date
3292 --Sakthi MCB
3293 ,x_agreement_currency => l_agreement_currency
3294 ,x_agreement_amount => l_agreement_amount
3295 ,x_agreement_org_id => l_agreement_org_id
3296 --Sakthi MCB
3297 ,x_copy_task_flag => l_copy_task_flag
3298 ,x_copy_budget_flag => l_copy_budget_flag
3299 ,x_use_override_flag => l_use_override_flag
3300 ,x_copy_assignment_flag => l_copy_assignment_flag
3301 ,x_template_flag => l_template_flag
3302 ,x_project_id => l_project_id
3303 ,x_err_code => l_err_code
3304 ,x_err_stage => l_err_stage
3305 ,x_err_stack => l_err_stack
3306 ,x_new_project_number => l_project_number_out
3307 ,x_pm_product_code => p_pm_product_code
3308 ,x_pm_project_reference => RTRIM(l_project_in_rec.pm_project_reference)
3309 ,x_project_currency_code => l_project_currency_code /* 8297384 */
3310 ,x_attribute_category => RTRIM(l_attribute_category)
3311 ,x_attribute1 => RTRIM(l_attribute1)
3312 ,x_attribute2 => RTRIM(l_attribute2)
3313 ,x_attribute3 => RTRIM(l_attribute3)
3314 ,x_attribute4 => RTRIM(l_attribute4)
3315 ,x_attribute5 => RTRIM(l_attribute5)
3316 ,x_attribute6 => RTRIM(l_attribute6)
3317 ,x_attribute7 => RTRIM(l_attribute7)
3318 ,x_attribute8 => RTRIM(l_attribute8)
3319 ,x_attribute9 => RTRIM(l_attribute9)
3320 ,x_attribute10 => RTRIM(l_attribute10)
3321 ,x_actual_start_date => l_actual_start_date
3322 ,x_actual_finish_date => l_actual_finish_date
3323 ,x_early_start_date => l_early_start_date
3324 ,x_early_finish_date => l_early_finish_date
3325 ,x_late_start_date => l_late_start_date
3326 ,x_late_finish_date => l_late_finish_date
3327 ,x_scheduled_start_date => l_scheduled_start_date
3328 ,x_scheduled_finish_date => l_scheduled_finish_date
3329 ,x_team_template_id => l_team_template_id
3330 ,x_country_code => l_country_code
3331 ,x_region => l_region
3332 ,x_city => l_city
3333 -- anlee opportunity changes
3334 ,x_opp_value_currency_code => l_opp_value_currency_code
3335 ,x_org_project_copy_flag => 'N'
3336 ,x_priority_code => l_priority_code
3337 ,x_security_level => l_security_level
3338 ,x_customer_id => l_in_customer_id --Modified for bug 3825528 l_project_in_rec.customer_id Bug no 3106256
3339 --Bug 3279981 Review FP_M development
3340 ,p_en_top_task_cust_flag => l_en_top_task_customer_flag
3341 ,p_en_top_task_inv_mth_flag => l_en_top_task_inv_mth_flag
3342 ,p_date_eff_funds_flag => l_date_eff_funds_flag --sunkalya:federal changes bug#5511353
3343 ,p_ar_rec_notify_flag => l_ar_rec_notify_flag -- 7508661 : EnC
3344 ,p_auto_release_pwp_inv => l_auto_release_pwp_inv -- 7508661 : EnC
3345 );
3346
3347 IF l_err_code > 0
3348 then
3349 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3350
3351 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3352 THEN
3353
3354 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3355 THEN
3356
3357 pa_interface_utils_pub.map_new_amg_msg('PA_COPY_PROJECT_FAILED','CHANGE','N',
3358 'PROJ',l_project_in_rec.pm_project_reference,
3359 '','','','');
3360 ELSE
3361
3362
3363 pa_interface_utils_pub.map_new_amg_msg(l_err_stage,'CHANGE','Y',
3364 'PROJ',l_project_in_rec.pm_project_reference,
3365 '','','','');
3366 END IF;
3367
3368 END IF;
3369
3370 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3371 RAISE FND_API.G_EXC_ERROR;
3372
3373 ELSIF l_err_code < 0
3374 then
3375
3376 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3377
3378 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3379 THEN
3380 pa_interface_utils_pub.map_new_amg_msg('PA_COPY_PROJECT_FAILED','CHANGE','N',
3381 'PROJ',l_project_in_rec.pm_project_reference,
3382 '','','','');
3383 /* Added the following code for bug 3725338 */
3384 FND_MESSAGE.SET_NAME('PA','PA_UNEXPECTED_ERR_AMG');
3385 FND_MESSAGE.SET_TOKEN('ORAERR', l_err_stage);
3386 FND_MSG_PUB.add;
3387 /* Code addition ended for bug 3725338 */
3388 END IF;
3389
3390 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3391 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3392
3393 end IF;
3394
3395
3396 --Added for 14539941 to copy the budgetary control information
3397 If(l_project_id is not null) then
3398 PA_BUDGET_FUND_PKG.Copy_Budgetary_Controls
3399 ( p_from_project_id => l_project_in_rec.created_from_project_id,
3400 p_to_project_id => l_project_id,
3401 x_return_status => l_return_status,
3402 x_msg_count => l_msg_count,
3403 x_msg_data => l_msg_data);
3404
3405 IF(l_return_status <> 'S') Then
3406 l_err_code := 725;
3407 l_err_stage := pa_project_core1.get_message_from_stack('PA_ERR_COPY_BUDGT_CONTRL');
3408 l_err_stack := l_err_stack||'->PA_BUDGET_FUND_PKG.Copy_Budgetary_Controls';
3409 RAISE FND_API.G_EXC_ERROR;
3410 END IF;
3411 end if; -- end of 14539941
3412
3413 /* Not required anymore since they are passed as input to copy project
3414 UPDATE pa_projects
3415 SET pm_project_reference = l_project_in_rec.pm_project_reference
3416 , pm_product_code = p_pm_product_code
3417 WHERE project_id = l_project_id;
3418 */
3419
3420 --get the values associated to the project
3421 OPEN l_project_csr(l_project_id);
3422 FETCH l_project_csr INTO l_project_rec;
3423 CLOSE l_project_csr;
3424
3425 -- ADD CUSTOMERS
3426 -- add overridable Primary Customers and their contacts
3427
3428 /* IF l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3429 AND l_project_in_rec.customer_id IS NOT NULL */ --commented for tracking bug
3430 IF l_in_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3431 AND l_in_customer_id IS NOT NULL
3432
3433 THEN
3434
3435 l_is_overridable := FALSE;
3436 i := l_override_fields_tab.first;
3437 WHILE i IS NOT NULL LOOP
3438
3439
3440 IF l_override_fields_tab(i).pa_field_name = 'CUSTOMER_NAME'
3441 THEN
3442 l_is_overridable := TRUE;
3443 l_project_relationship_code := l_override_fields_tab(i).type; --introduced for Bug#5517655
3444 --l_relationship_type := l_override_fields_tab(i).type; commented for Bug#5517655
3445 EXIT;
3446 END IF;
3447 i := l_override_fields_tab.next(i);
3448 END LOOP;
3449
3450 IF NOT l_is_overridable
3451 THEN
3452 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3453 THEN
3454 pa_interface_utils_pub.map_new_amg_msg
3455 ( p_old_message_code => 'PA_CUSTOMER_NOT_OVERRIDABLE'
3456 ,p_msg_attribute => 'CHANGE'
3457 ,p_resize_flag => 'Y'
3458 ,p_msg_context => 'PROJ'
3459 ,p_attribute1 => l_project_in_rec.pm_project_reference
3460 ,p_attribute2 => ''
3461 ,p_attribute3 => ''
3462 ,p_attribute4 => ''
3463 ,p_attribute5 => '');
3464 END IF;
3465
3466 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3467 RAISE FND_API.G_EXC_ERROR;
3468
3469 END IF;
3470
3471 /*Customer Account Relationship Changes*/
3472 IF l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3473 AND l_bill_to_customer_id IS NOT NULL
3474 THEN
3475
3476 l_is_overridable := FALSE;
3477 i := l_override_fields_tab.first;
3478 WHILE i IS NOT NULL LOOP
3479
3480
3481 IF l_override_fields_tab(i).pa_field_name = 'BILL_TO_CUSTOMER'
3482 THEN
3483 l_is_overridable := TRUE;
3484 EXIT;
3485 END IF;
3486 i := l_override_fields_tab.next(i);
3487 END LOOP;
3488
3489 IF NOT l_is_overridable
3490 THEN
3491 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3492 THEN
3493 pa_interface_utils_pub.map_new_amg_msg
3494 ( p_old_message_code => 'PA_BILL_TO_NOT_OVERRIDABLE'
3495 ,p_msg_attribute => 'CHANGE'
3496 ,p_resize_flag => 'Y'
3497 ,p_msg_context => 'PROJ'
3498 ,p_attribute1 => l_project_in_rec.pm_project_reference
3499 ,p_attribute2 => ''
3500 ,p_attribute3 => ''
3501 ,p_attribute4 => ''
3502 ,p_attribute5 => '');
3503 END IF;
3504
3505 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3506 RAISE FND_API.G_EXC_ERROR;
3507
3508 END IF;
3509 END IF;
3510
3511 IF l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3512 AND l_ship_to_customer_id IS NOT NULL
3513 THEN
3514
3515 l_is_overridable := FALSE;
3516 i := l_override_fields_tab.first;
3517 WHILE i IS NOT NULL LOOP
3518
3519
3520 IF l_override_fields_tab(i).pa_field_name = 'SHIP_TO_CUSTOMER'
3521 THEN
3522 l_is_overridable := TRUE;
3523 EXIT;
3524 END IF;
3525 i := l_override_fields_tab.next(i);
3526 END LOOP;
3527
3528 IF NOT l_is_overridable
3529 THEN
3530 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3531 THEN
3532 pa_interface_utils_pub.map_new_amg_msg
3533 ( p_old_message_code => 'PA_SHIP_TO_NOT_OVERRIDABLE'
3534 ,p_msg_attribute => 'CHANGE'
3535 ,p_resize_flag => 'Y'
3536 ,p_msg_context => 'PROJ'
3537 ,p_attribute1 => l_project_in_rec.pm_project_reference
3538 ,p_attribute2 => ''
3539 ,p_attribute3 => ''
3540 ,p_attribute4 => ''
3541 ,p_attribute5 => '');
3542 END IF;
3543
3544 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3545 RAISE FND_API.G_EXC_ERROR;
3546
3547 END IF;
3548 END IF;
3549 ----dbms_output.put_line('Does the control come till here');
3550 /*Customer account relationship changes */
3551 /* Tracking bug ..customer code added in a loop */
3552 i := p_customers_in.first;
3553 ----dbms_output.put_line('value of i'||i);
3554 IF p_customers_in.exists(i) THEN
3555 ----dbms_output.put_line('if CUSTOMER ARE PASSED TO CREATE_PROJECT ');
3556 ----dbms_output.put_line('Value of p_project_in.customer_id'||p_customers_in(i).customer_id);
3557
3558 /*
3559 These assignments have already been done
3560 l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
3561 l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
3562 --added for bug 3911782
3563 l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
3564 l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
3565 l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
3566 l_cust_bill_split := p_customers_in(i).Customer_Bill_Split; */
3567 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3568 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3569 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3570 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3571 --changes end for Bug 3911782
3572 IF p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3573 /* Commented the below code for Bug#5517655 */
3574
3575 /*IF p_customers_in(i).project_relationship_code IS NULL OR
3576 p_customers_in(i).project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
3577 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3578 THEN
3579 pa_utils.add_message
3580 ( p_app_short_name => 'PA'-- new message for AA TRACKING
3581 ,p_msg_name => 'PA_RELATIONSHIP_CODE_REQD'
3582 ,p_token1 => 'PROJECT_NAME'
3583 ,p_value1 => l_project_rec.segment1
3584 ,p_token2 => 'CUSTOMER_ID'
3585 ,p_value2 => p_customers_in(i).customer_id
3586 );
3587 END IF;
3588 RAISE FND_API.G_EXC_ERROR;
3589 END IF;
3590 */ --End of commenting for Bug#5517655
3591
3592 IF p_customers_in(i).CUSTOMER_BILL_SPLIT IS NULL OR
3593 p_customers_in(i).CUSTOMER_BILL_SPLIT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
3594 l_cust_bill_split := 100; --Default it to 100
3595 END If;
3596 /* End of tracking changes */
3597 END IF;
3598 /* Code added for tracking bug */
3599 ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
3600 If (p_customers_in(i).CONTACT_ID IS NOT NULL) AND (p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3601 then
3602 ----dbms_output.put_line('is this fired');
3603
3604 IF (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE IS NULL) OR (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )THEN
3605 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3606 THEN
3607 pa_utils.add_message
3608 ( p_app_short_name => 'PA'-- new message for tracking bug
3609 ,p_msg_name => 'PA_CONTACT_TYPE_REQD'
3610 ,p_token1 => 'PROJECT_NAME'
3611 ,p_value1 => l_project_in_rec.pm_project_reference
3612 ,p_token2 => 'CUSTOMER_ID'
3613 ,p_value2 => p_customers_in(i).customer_id
3614 ,p_token3 => 'CONTACT_ID'
3615 ,p_value3 => p_customers_in(i).CONTACT_ID
3616 );
3617 END IF;
3618 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3619 p_return_status := FND_API.G_RET_STS_ERROR;
3620 RAISE FND_API.G_EXC_ERROR;
3621 END IF;
3622 end if;
3623 ----dbms_output.put_line('Error is hrown soon after this');
3624 If p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
3625 l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
3626 l_ship_to_contact_id := NULL; -- Bug 5622539
3627 ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
3628 l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
3629 l_bill_to_contact_id := NULL; -- Bug 5622539
3630 Else
3631 l_bill_to_contact_id := NULL;
3632 l_ship_to_contact_id := NULL;
3633 End If;
3634 /** end of chnages for tracking bug by aditi **/
3635 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
3636 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
3637 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
3638
3639 /* Code changes end for tracking bug */
3640 If (l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3641 OR (l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3642 OR (p_customers_in(1).CONTACT_ID IS NOT NULL AND p_customers_in(1).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)--added for tracking bug by aditi
3643
3644 --bug 3716805
3645 THEN
3646 If l_in_customer_id IS NULL OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3647 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3648 THEN
3649 pa_interface_utils_pub.map_new_amg_msg
3650 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
3651 ,p_msg_attribute => 'CHANGE'
3652 ,p_resize_flag => 'N'
3653 ,p_msg_context => 'PROJ'
3654 ,p_attribute1 => l_project_in_rec.pm_project_reference
3655 ,p_attribute2 => ''
3656 ,p_attribute3 => ''
3657 ,p_attribute4 => ''
3658 ,p_attribute5 => '');
3659 END IF;
3660 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3661 p_return_status := FND_API.G_RET_STS_ERROR;
3662 RAISE FND_API.G_EXC_ERROR;
3663 end if;
3664
3665 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
3666 END if; -- end here
3667 -------------------------------------------------------------------------------------------
3668 ----dbms_output.put_line('before calling get_customer_info');
3669 ----dbms_output.put_line('If project_in_rec_type is there - then control will directl come here');
3670
3671
3672 If (l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3673 OR (l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
3674
3675 --bug 3716805
3676 THEN
3677 If l_in_customer_id IS NULL OR l_in_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3678 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3679 THEN
3680 pa_interface_utils_pub.map_new_amg_msg
3681 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
3682 ,p_msg_attribute => 'CHANGE'
3683 ,p_resize_flag => 'N'
3684 ,p_msg_context => 'PROJ'
3685 ,p_attribute1 => l_project_in_rec.pm_project_reference
3686 ,p_attribute2 => ''
3687 ,p_attribute3 => ''
3688 ,p_attribute4 => ''
3689 ,p_attribute5 => '');
3690 END IF;
3691 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3692 p_return_status := FND_API.G_RET_STS_ERROR;
3693 RAISE FND_API.G_EXC_ERROR;
3694 end if;
3695
3696 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
3697
3698
3699 /* Bug 3077676 Begin */
3700
3701 -- Not adding this error message in get_customer_info as that is called from lot of other places too
3702 -- and it would be a risk changing that.
3703
3704 OPEN get_cust_acc_rel_code;
3705 FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
3706 CLOSE get_cust_acc_rel_code;
3707 -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
3708 -- relations ship code is N.
3709 /* CODE COMMENTED FOR TRACKING BUG
3710 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
3711 l_project_in_rec.customer_id IS NOT NULL AND l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
3712 ((l_project_in_rec.bill_to_customer_id IS NOT NULL AND l_project_in_rec.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3713 l_project_in_rec.customer_id <> l_project_in_rec.bill_to_customer_id
3714 ) or
3715 (
3716 l_project_in_rec.ship_to_customer_id IS NOT NULL AND l_project_in_rec.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3717 l_project_in_rec.customer_id <> l_project_in_rec.ship_to_customer_id
3718 ))
3719 THEN
3720 pa_interface_utils_pub.map_new_amg_msg
3721 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3722 ,p_msg_attribute => 'CHANGE'
3723 ,p_resize_flag => 'Y'
3724 ,p_msg_context => 'PROJ'
3725 ,p_attribute1 => l_project_in_rec.pm_project_reference
3726 ,p_attribute2 => ''
3727 ,p_attribute3 => ''
3728 ,p_attribute4 => ''
3729 ,p_attribute5 => '');
3730 RAISE FND_API.G_EXC_ERROR;
3731 END IF; */
3732 /* Code added for tracking bug */
3733 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
3734 l_in_customer_id IS NOT NULL AND l_in_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
3735 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3736 l_in_customer_id <> l_bill_to_customer_id
3737 ) or
3738 (
3739 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
3740 l_in_customer_id <> l_ship_to_customer_id
3741 ))
3742 THEN
3743 pa_interface_utils_pub.map_new_amg_msg
3744 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3745 ,p_msg_attribute => 'CHANGE'
3746 ,p_resize_flag => 'Y'
3747 ,p_msg_context => 'PROJ'
3748 ,p_attribute1 => l_project_in_rec.pm_project_reference
3749 ,p_attribute2 => ''
3750 ,p_attribute3 => ''
3751 ,p_attribute4 => ''
3752 ,p_attribute5 => '');
3753 RAISE FND_API.G_EXC_ERROR;
3754 END IF;
3755
3756 /* End of part 1 tracking */
3757
3758
3759 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done above.
3760 IF NVL(l_cust_acc_rel_code,'N') ='N'
3761 AND l_project_in_rec.customer_id IS NOT NULL AND l_project_in_rec.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3762 AND l_project_in_rec.bill_to_customer_id IS NOT NULL AND l_project_in_rec.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3763 AND l_project_in_rec.ship_to_customer_id IS NOT NULL AND l_project_in_rec.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3764 AND l_project_in_rec.customer_id <> l_project_in_rec.bill_to_customer_id
3765 AND l_project_in_rec.customer_id <> l_project_in_rec.ship_to_customer_id
3766 THEN
3767 pa_interface_utils_pub.map_new_amg_msg
3768 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
3769 ,p_msg_attribute => 'CHANGE'
3770 ,p_resize_flag => 'Y'
3771 ,p_msg_context => 'PROJ'
3772 ,p_attribute1 => l_project_in_rec.pm_project_reference
3773 ,p_attribute2 => ''
3774 ,p_attribute3 => ''
3775 ,p_attribute4 => ''
3776 ,p_attribute5 => '');
3777 RAISE FND_API.G_EXC_ERROR;
3778
3779 END IF;
3780 */
3781 /* Bug 3077676 End */
3782
3783 -- 4193743 IF bill_to_cutomer_id and ship_to_customer_id are not passed set it to NULL
3784 -- as get_customer_info relies on NULL value not the PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3785 -- Using the local variables l_ship_to_customer_id and l_bill_to_customer_id for further processing
3786 /* The code below is being commented by aditi for tracking bug..these assignmentd have already been made
3787 at the begiinning of the customers addition code
3788
3789 IF l_project_in_rec.bill_to_customer_id IS NOT NULL AND
3790 l_project_in_rec.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3791 THEN
3792 l_bill_to_customer_id := NULL;
3793 ELSE
3794 -- if value is passed assign it to local variable
3795 l_bill_to_customer_id := l_project_in_rec.bill_to_customer_id; -- 4193743 review comment
3796 END IF;
3797
3798 IF l_project_in_rec.ship_to_customer_id IS NOT NULL AND
3799 l_project_in_rec.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
3800 THEN
3801 l_ship_to_customer_id := NULL;
3802 ELSE
3803 -- if value is passed assign it to local variable
3804 l_ship_to_customer_id := l_project_in_rec.ship_to_customer_id; -- 4193743 review comment
3805 END IF;
3806
3807 -- 4193743 end */
3808
3809 /* Start of changes for bug 5482997 */
3810
3811 IF l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3812 l_bill_to_customer_id := NULL;
3813 END IF;
3814
3815 IF l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
3816 l_ship_to_customer_id := NULL;
3817 END IF;
3818
3819 /* End of changes for bug 5482997 */
3820
3821
3822 ----dbms_output.put_line('Before CALLING get_cstomer_info');
3823 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3824 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3825 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3826 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3827 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3828 ----dbms_output.put_line('Value of l_bill_to_contact_id'||l_bill_to_contact_id);
3829 ----dbms_output.put_line('Value of l_ship_to_contact_id'||l_ship_to_contact_id);
3830 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3831
3832 /* Bug 5731766 This code was moved to before get_customer_info call
3833 We need to bypass call get_customer_info if l_proj_type_class
3834 is 'contract'.*/
3835 IF l_project_id IS NOT NULL THEN
3836 OPEN c_prj(l_project_id);
3837 FETCH c_prj INTO l_proj_status, l_proj_type_class;
3838 CLOSE c_prj;
3839 END IF;
3840
3841 --if condition introduced for bug 5731766
3842 --dbms_output.put_line('Value of l_source_project_type '||l_proj_type_class);
3843 If nvl(l_proj_type_class,'NONE') = 'CONTRACT' then
3844 pa_customer_info.get_customer_info( X_project_ID => l_project_id --CAR changes
3845 ,X_Customer_Id => l_in_customer_id -- l_project_in_rec.customer_id tracking
3846 ,X_Bill_To_Customer_Id => l_bill_to_customer_id -- 4193743 l_project_in_rec.bill_to_customer_id -- car changes
3847 ,X_Ship_To_Customer_Id => l_ship_to_customer_id -- 4193743 l_project_in_rec.ship_to_customer_id -- car changes
3848 ,X_Bill_To_Address_Id => l_bill_to_address_id
3849 ,X_Ship_To_Address_Id => l_ship_to_address_id
3850 ,X_Bill_To_Contact_Id => l_bill_to_contact_id
3851 ,X_Ship_To_Contact_Id => l_ship_to_contact_id
3852 ,X_Err_Code => l_err_code
3853 ,X_Err_Stage => l_err_stage
3854 ,X_Err_Stack => l_err_stack
3855 ,p_calling_module => 'AMG' --added for Bug#4770535
3856 );
3857
3858
3859 ----dbms_output.put_line('AFTER calling get_customer_info l_err_code'||l_err_code);
3860 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3861 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
3862 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
3863 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
3864 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
3865 ----dbms_output.put_line('Value of l_bill_to_contact_id'||l_bill_to_contact_id);
3866 ----dbms_output.put_line('Value of l_ship_to_contact_id'||l_ship_to_contact_id);
3867 ----dbms_output.put_line('Value of l_in_customer_id'||l_in_customer_id);
3868 -- For this API,error code 10 is a warning.Anything above 10 is an error
3869 IF l_err_code > 10
3870 THEN
3871
3872 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
3873 THEN
3874
3875 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
3876 THEN
3877 pa_interface_utils_pub.map_new_amg_msg
3878 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
3879 ,p_msg_attribute => 'CHANGE'
3880 ,p_resize_flag => 'Y'
3881 ,p_msg_context => 'PROJ'
3882 ,p_attribute1 => l_project_in_rec.pm_project_reference
3883 ,p_attribute2 => ''
3884 ,p_attribute3 => ''
3885 ,p_attribute4 => ''
3886 ,p_attribute5 => '');
3887 ELSE
3888 pa_interface_utils_pub.map_new_amg_msg
3889 ( p_old_message_code => l_err_stage
3890 ,p_msg_attribute => 'CHANGE'
3891 ,p_resize_flag => 'Y'
3892 ,p_msg_context => 'PROJ'
3893 ,p_attribute1 => l_project_in_rec.pm_project_reference
3894 ,p_attribute2 => ''
3895 ,p_attribute3 => ''
3896 ,p_attribute4 => ''
3897 ,p_attribute5 => '');
3898 END IF;
3899
3900 END IF;
3901
3902 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
3903 RAISE FND_API.G_EXC_ERROR;
3904
3905 ELSIF l_err_code < 0
3906 THEN
3907
3908 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3909 THEN
3910 pa_interface_utils_pub.map_new_amg_msg
3911 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
3912 ,p_msg_attribute => 'CHANGE'
3913 ,p_resize_flag => 'Y'
3914 ,p_msg_context => 'PROJ'
3915 ,p_attribute1 => l_project_in_rec.pm_project_reference
3916 ,p_attribute2 => ''
3917 ,p_attribute3 => ''
3918 ,p_attribute4 => ''
3919 ,p_attribute5 => '');
3920 END IF;
3921
3922 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3923 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3924 END IF;
3925 end if; --bug 5731766
3926 --bug 5731766
3927 If l_bill_to_customer_id is null then
3928 l_bill_to_customer_id := l_in_customer_id;
3929 end if;
3930
3931 If l_ship_to_customer_id is null then
3932 l_ship_to_customer_id := l_in_customer_id;
3933 end if;
3934 --bug 5731766
3935
3936 -- IC and Multi National Currency Changes starts here ...
3937
3938 /* commented for bug 3000981*/
3939 /* OPEN l_customer_csr (l_project_in_rec.customer_id);
3940 FETCH l_customer_csr INTO l_inv_currency_code,
3941 l_inv_rate_type,
3942 l_inv_rate_date,
3943 l_inv_exchange_rate,
3944 l_allow_inv_rate_type_fg,
3945 l_bill_another_prj_flag,
3946 l_receiver_task_id;
3947 CLOSE l_customer_csr;
3948 */
3949 /* commented till here for bug 3000981*/
3950
3951 /* added for bug 3000981*/
3952 OPEN cur_pa_impl;
3953 FETCH cur_pa_impl INTO l_inv_rate_type;
3954 CLOSE cur_pa_impl;
3955 /* added till for bug 3000981*/
3956
3957
3958 -- IC and Multi National Currency Changes ends here ...
3959
3960 -- Removed because of the ALL OR NOTHING decision
3961 -- --only create customer when there is a billing and shipping address
3962 -- IF l_err_code <> 20
3963 -- THEN
3964
3965 -- Bug 3279981
3966 -- Set the values of customer bill split and default top task customer flag colums based on
3967 -- whether the top task customer flag is checked or not
3968
3969 --sunkalya federal changes. Bug#5511353
3970
3971 IF l_project_in_rec.enable_top_task_customer_flag = 'Y' OR l_project_in_rec.date_eff_funds_flag ='Y' THEN
3972
3973 l_cust_bill_split := null;
3974
3975 IF (l_project_in_rec.enable_top_task_customer_flag = 'Y') THEN
3976
3977 l_def_tt_cust_flag := 'Y';
3978 ELSE
3979 l_def_tt_cust_flag := 'N';
3980 END IF;
3981
3982 ELSIF l_project_in_rec.enable_top_task_customer_flag = 'N' AND l_project_in_rec.date_eff_funds_flag ='N' THEN
3983 l_cust_bill_split := 100;
3984 l_def_tt_cust_flag := 'N';
3985
3986 ELSIF l_project_in_rec.enable_top_task_customer_flag ='N' OR l_project_in_rec.date_eff_funds_flag ='N' THEN
3987
3988 IF l_project_in_rec.enable_top_task_customer_flag ='N' THEN
3989 IF l_orig_date_eff_funds_flag ='Y' THEN
3990 l_cust_bill_split := null;
3991 l_def_tt_cust_flag := 'N';
3992 ELSE
3993 l_cust_bill_split := 100;
3994 l_def_tt_cust_flag := 'N';
3995 END IF;
3996 ELSIF l_project_in_rec.date_eff_funds_flag ='N' THEN
3997 IF l_orig_def_tt_flag ='Y' THEN
3998 l_cust_bill_split := null;
3999 l_def_tt_cust_flag := 'Y';
4000 ELSE
4001 l_cust_bill_split := 100;
4002 l_def_tt_cust_flag := 'N';
4003 END IF;
4004 END IF;
4005
4006 ELSIF l_orig_def_tt_flag = 'Y' OR l_orig_date_eff_funds_flag ='Y' THEN
4007
4008 l_cust_bill_split := null;
4009
4010 IF l_orig_def_tt_flag = 'Y' THEN
4011 l_def_tt_cust_flag := 'Y';
4012 END IF;
4013 ELSE
4014
4015 l_cust_bill_split := 100;
4016 l_def_tt_cust_flag := 'N';
4017
4018 END IF;
4019 --sunkalya:federal changes bug#5511353
4020 ----dbms_output.put_line('Before Calling create_customer_contacts');
4021
4022 pa_customer_info.create_customer_contacts
4023 ( l_project_id
4024 ,l_in_customer_id -- l_project_in_rec.customer_id
4025 ,l_project_relationship_code -- l_relationship_type tracking
4026 --Bug 3279981
4027 --,100
4028 ,l_cust_bill_split
4029 ,l_bill_to_customer_id -- 4193743 l_project_in_rec.bill_to_customer_id -- car changes
4030 ,l_ship_to_customer_id -- 4193743 l_project_in_rec.ship_to_customer_id -- car changes
4031 ,l_bill_to_address_id
4032 ,l_ship_to_address_id
4033 ,l_bill_to_contact_id
4034 ,l_ship_to_contact_id
4035 --bug 2293158
4036 --,nvl(l_inv_currency_code, l_project_currency_code)
4037 ,l_project_currency_code -- bug 3000981
4038 ,l_inv_rate_type
4039 ,l_inv_rate_date
4040 ,l_inv_exchange_rate
4041 ,l_allow_inv_rate_type_fg
4042 ,l_bill_another_prj_flag
4043 ,l_receiver_task_id
4044 ,l_def_tt_cust_flag --Bug 3279981
4045 ,fnd_global.user_id
4046 ,fnd_global.login_id
4047 ,l_err_code
4048 ,l_err_stage
4049 ,l_err_stack );
4050 ----dbms_output.put_line('After Calling create_customer_contacts l_err_code'||l_err_code);
4051
4052
4053 IF l_err_code > 0
4054 THEN
4055
4056 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4057 THEN
4058
4059 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
4060 THEN
4061 pa_interface_utils_pub.map_new_amg_msg
4062 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
4063 ,p_msg_attribute => 'CHANGE'
4064 ,p_resize_flag => 'N'
4065 ,p_msg_context => 'PROJ'
4066 ,p_attribute1 => l_project_in_rec.pm_project_reference
4067 ,p_attribute2 => ''
4068 ,p_attribute3 => ''
4069 ,p_attribute4 => ''
4070 ,p_attribute5 => '');
4071 ELSE
4072 pa_interface_utils_pub.map_new_amg_msg
4073 ( p_old_message_code => l_err_stage
4074 ,p_msg_attribute => 'CHANGE'
4075 ,p_resize_flag => 'N'
4076 ,p_msg_context => 'PROJ'
4077 ,p_attribute1 => l_project_in_rec.pm_project_reference
4078 ,p_attribute2 => ''
4079 ,p_attribute3 => ''
4080 ,p_attribute4 => ''
4081 ,p_attribute5 => '');
4082 END IF;
4083
4084 END IF;
4085
4086 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4087 RAISE FND_API.G_EXC_ERROR;
4088
4089 ELSIF l_err_code < 0
4090 THEN
4091
4092 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4093 THEN
4094 pa_interface_utils_pub.map_new_amg_msg
4095 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
4096 ,p_msg_attribute => 'CHANGE'
4097 ,p_resize_flag => 'N'
4098 ,p_msg_context => 'PROJ'
4099 ,p_attribute1 => l_project_in_rec.pm_project_reference
4100 ,p_attribute2 => ''
4101 ,p_attribute3 => ''
4102 ,p_attribute4 => ''
4103 ,p_attribute5 => '');
4104 END IF;
4105
4106 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4107 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4108 END IF;
4109 --END if;
4110
4111 --Call copy retention after all customers are created.
4112 DECLARE
4113 BEGIN
4114 pa_retention_util.copy_retention_setup (
4115 p_fr_project_id => l_project_in_rec.created_from_project_id
4116 ,p_to_project_id => l_project_id
4117 ,p_fr_date => l_project_rec.start_date
4118 ,p_to_date => l_project_rec.completion_date
4119 ,x_return_status => l_return_status
4120 ,x_msg_count => l_msg_count
4121 ,x_msg_data => l_msg_data);
4122
4123 l_msg_count := FND_MSG_PUB.count_msg;
4124 IF l_msg_count > 0 THEN
4125 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4126 RAISE FND_API.G_EXC_ERROR;
4127 END IF;
4128 END;
4129 --End copy retention changes.
4130
4131 -- END IF; --l_err_code <> 20
4132
4133 -- anlee org role changes
4134 -- create a project party if the added customer is an organization
4135 l_party_id := null;
4136 l_project_party_id := null;
4137 OPEN l_check_org_csr(l_in_customer_id);
4138 FETCH l_check_org_csr INTO l_party_id;
4139 IF l_check_org_csr%NOTFOUND then
4140 l_party_id := null;
4141 END IF;
4142 CLOSE l_check_org_csr;
4143
4144 if l_party_id is not null then
4145
4146 PA_PROJECT_PARTIES_PUB.CREATE_PROJECT_PARTY(
4147 p_validate_only => FND_API.G_FALSE
4148 , p_object_id => l_project_id
4149 , p_OBJECT_TYPE => 'PA_PROJECTS'
4150 , p_project_role_id => 100
4151 , p_project_role_type => 'CUSTOMER_ORG'
4152 , p_RESOURCE_TYPE_ID => 112
4153 , p_resource_source_id => l_party_id
4154 , p_start_date_active => null
4155 , p_calling_module => 'FORM'
4156 , p_project_id => l_project_id
4157 , p_project_end_date => null
4158 , p_end_date_active => l_end_date_active
4159 , x_project_party_id => l_project_party_id
4160 , x_resource_id => l_resource_id
4161 , x_wf_item_type => l_wf_item_type
4162 , x_wf_type => l_wf_type
4163 , x_wf_process => l_wf_party_process
4164 , x_assignment_id => l_assignment_id
4165 , x_return_status => l_return_status
4166 , x_msg_count => l_msg_count
4167 , x_msg_data => l_msg_data );
4168
4169 l_msg_count := FND_MSG_PUB.count_msg;
4170 IF l_msg_count > 0 THEN
4171 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4172 RAISE FND_API.G_EXC_ERROR;
4173 END IF;
4174
4175 -- Add the new project party ID to the customers row
4176 UPDATE PA_PROJECT_CUSTOMERS
4177 SET project_party_id = l_project_party_id
4178 WHERE project_id = l_project_id
4179 AND customer_id = l_in_customer_id; -- l_project_in_rec.customer_id; Tracking
4180 end if;
4181
4182 END IF; --customer exists
4183 /*
4184
4185 --Sunkalya federal. Bug#5511353
4186 OPEN count_cust(l_project_id);
4187 FETCH count_cust INTO l_count_cust;
4188 CLOSE count_cust;
4189
4190 OPEN chk_task_level_funding(l_project_id);
4191 FETCH chk_task_level_funding INTO l_chk_task_level_funding;
4192 CLOSE chk_task_level_funding;
4193
4194
4195 IF l_count_cust > 1 AND
4196 l_chk_task_level_funding = 'Y' AND
4197 l_project_in_rec.date_eff_funds_flag = 'N' AND
4198 l_orig_date_eff_funds_flag= 'Y' AND
4199 (
4200 l_project_in_rec.enable_top_task_customer_flag = 'N' OR
4201 (
4202 nvl(l_project_in_rec.enable_top_task_customer_flag,
4203 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
4204 l_orig_def_tt_flag = 'N'
4205 )
4206 )
4207 THEN
4208 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
4209 ,p_msg_name => 'PA_TASK_FUNDING_EXIST'
4210 );
4211
4212 l_return_status := FND_API.G_RET_STS_ERROR;
4213
4214 RAISE FND_API.G_EXC_ERROR;
4215
4216 END IF;
4217 --Sunkalya federal. Bug#5511353
4218
4219 */
4220
4221 -- KEY_MEMBER
4222 -- add overridable Key Members
4223
4224 -- l_key_members := p_key_members; Commented for Bug 6408593
4225
4226 i := l_key_members.first;
4227
4228 IF l_key_members.exists(i)
4229 THEN
4230
4231 --checking for overridability is done in the called procedure add_key_members
4232
4233 WHILE i IS NOT NULL LOOP
4234
4235 /*Commented the below code for the bug 2910972 since the defaulting is handled in the
4236 pa_project_parties_pub.create_project_party when a null value is passed*/
4237
4238 /*IF l_key_members(i).start_date IS NULL
4239 OR l_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4240 THEN IF l_project_rec.start_date IS NULL
4241 OR l_project_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4242 THEN l_key_members(i).start_date := trunc(sysdate);
4243 ELSE l_key_members(i).start_date := l_project_rec.start_date;
4244 END IF;
4245 END IF;*/
4246
4247 /*Bug#2910972-Adding the below code*/
4248
4249 IF l_key_members(i).start_date =
4250 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4251 THEN
4252 l_key_members(i).start_date := NULL;
4253 END IF;
4254
4255 /*
4256 -- Not required.Key member end date can be left blank.Otherwise poses
4257 -- problems with security,since a key member has to be currently active
4258 -- to be able to update a project and defaulting the end date to the
4259 -- project's end date would result in inability to update projects
4260 -- with earlier completion dates
4261
4262 IF l_key_members(i).end_date IS NULL
4263 OR l_key_members(i).end_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4264 THEN IF l_project_rec.completion_date IS NULL
4265 OR l_project_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4266 THEN l_key_members(i).end_date := NULL;
4267 ELSE l_key_members(i).end_date := l_project_rec.completion_date;
4268 END IF;
4269 END IF;
4270 */
4271 IF l_key_members(i).end_date =
4272 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
4273 l_key_members(i).end_date := NULL;
4274 END IF;
4275
4276 i := l_key_members.next(i);
4277
4278 END LOOP;
4279
4280 pa_project_pvt.add_key_members(l_return_status
4281 ,l_project_in_rec.created_from_project_id
4282 ,l_project_id
4283 ,l_key_members
4284 );
4285
4286 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4287 THEN
4288 p_project_out.return_status := l_return_status;
4289 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4290
4291 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4292 THEN
4293 p_project_out.return_status := l_return_status;
4294 RAISE FND_API.G_EXC_ERROR;
4295 END IF;
4296
4297 /* Start of code for bug #2111806
4298 Call the check_manager_date_range to check if the Project
4299 Manager exists for the complete duration of the Project. */
4300
4301 pa_project_check_pvt.check_manager_date_range(p_project_id => l_project_id
4302 ,p_return_status => l_return_status);
4303
4304 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4305 THEN
4306 p_project_out.return_status := l_return_status;
4307 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4308
4309 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4310 THEN
4311 p_project_out.return_status := l_return_status;
4312 RAISE FND_API.G_EXC_ERROR;
4313 END IF;
4314 /* End of code for bug #2111806 */
4315
4316 END IF;
4317
4318 /* Start of code for bug #2111806
4319 Throw an error if there are no Project Managers assigned.
4320 This has to be thrown irrespective of whether there are any Key Member records
4321 being passed or not. So, it cannot be done in the above IF condition. */
4322
4323
4324 /* Bug 5731766 This code was moved to before get_customer_info call
4325 We need to bypass call get_customer_info if l_proj_type_class
4326 is 'contract'.
4327 IF l_project_id IS NOT NULL THEN
4328 OPEN c_prj(l_project_id);
4329 FETCH c_prj INTO l_proj_status, l_proj_type_class;
4330 CLOSE c_prj;
4331 END IF;
4332 */
4333 /* The check has to be done only for an Approved Contract Type project. */
4334 IF (nvl(l_proj_type_class,'NONE') = 'CONTRACT' AND
4335 nvl(l_proj_status,'UNAPPROVED') = 'APPROVED') THEN
4336 OPEN c_prj_count(l_project_id);
4337 FETCH c_prj_count INTO l_prj_mgr_count;
4338 CLOSE c_prj_count;
4339 IF l_prj_mgr_count = 0 THEN
4340 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
4341 pa_utils.add_message
4342 ( p_app_short_name => 'PA'
4343 ,p_msg_name => 'PA_PR_INSUF_PROJ_MGR'
4344 );
4345 RAISE FND_API.G_EXC_ERROR;
4346 END IF;
4347 END IF;
4348 END IF;
4349 /* End of code for bug #2111806 */
4350
4351 -- anlee org role changes
4352 -- ORG_ROLE
4353 -- add overridable Org Roles
4354
4355 l_org_roles := p_org_roles;
4356
4357 i := l_org_roles.first;
4358
4359 IF l_org_roles.exists(i)
4360 THEN
4361
4362 --checking for overridability is done in the called procedure add_org_roles
4363
4364 WHILE i IS NOT NULL LOOP
4365
4366 IF l_org_roles(i).start_date IS NULL
4367 OR l_org_roles(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4368 THEN IF l_project_rec.start_date IS NULL
4369 OR l_project_rec.start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
4370 THEN l_org_roles(i).start_date := trunc(sysdate);
4371 ELSE l_org_roles(i).start_date := l_project_rec.start_date;
4372 END IF;
4373 END IF;
4374
4375 IF l_org_roles(i).end_date =
4376 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
4377 l_org_roles(i).end_date := NULL;
4378 END IF;
4379
4380 i := l_org_roles.next(i);
4381
4382 END LOOP;
4383
4384 pa_project_pvt.add_org_roles(l_return_status
4385 ,l_project_in_rec.created_from_project_id
4386 ,l_project_id
4387 ,l_org_roles
4388 );
4389
4390 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4391 THEN
4392 p_project_out.return_status := l_return_status;
4393 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4394
4395 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4396 THEN
4397 p_project_out.return_status := l_return_status;
4398 RAISE FND_API.G_EXC_ERROR;
4399 END IF;
4400
4401 END IF;
4402
4403
4404 --CLASS_CATEGORY
4405 --add overidable Class Categories
4406
4407
4408 i := p_class_categories.first;
4409
4410 IF p_class_categories.exists(i)
4411 THEN
4412
4413 --checking for overridability is done in the called procedure add_class_categories
4414
4415 pa_project_pvt.add_class_categories(l_return_status
4416 ,l_project_in_rec.created_from_project_id
4417 ,l_project_id
4418 ,p_class_categories
4419 );
4420
4421 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4422 THEN
4423 p_project_out.return_status := l_return_status;
4424 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4425
4426 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4427 THEN
4428 p_project_out.return_status := l_return_status;
4429 RAISE FND_API.G_EXC_ERROR;
4430 END IF;
4431
4432 END IF;
4433
4434
4435 -- need to understand feature of p_multiple_task_msg := 'F';
4436
4437 --Project Structure Integration
4438 --This creates the
4439 /* not required as
4440 l_delta := PA_PROJ_TASK_STRUC_PUB.get_proj_dates_delta(
4441 l_project_in_rec.created_from_project_id
4442 ,l_out_start_date );
4443 */
4444
4445 /*--bug 2805602 we dont this anymore as copy project will take care of creating structures only
4446 PA_PROJ_TASK_STRUC_PUB.COPY_STRUCTURE(
4447 p_dest_project_id => l_project_id
4448 ,p_src_project_id => l_project_in_rec.created_from_project_id
4449 ,p_delta => l_delta
4450 ,p_copy_task_flag => 'N'
4451 ,x_msg_count => l_msg_count
4452 ,x_msg_data => l_msg_data
4453 ,x_return_status => l_return_status );
4454
4455 --The following code is copied from create_project_party call above.
4456 l_msg_count := FND_MSG_PUB.count_msg;
4457 IF l_msg_count > 0 THEN
4458 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
4459 RAISE FND_API.G_EXC_ERROR;
4460 END IF;
4461 */
4462
4463 --Project Connect 4.0
4464 PA_PROJECT_PVT.get_structure_version(
4465 p_project_id => l_project_id
4466 ,p_structure_versions_out => g_struc_out_tbl
4467 );
4468
4469 --Project Connect 4.0
4470
4471 --syns up pa_proj_elements with pa_tasks
4472 /* not required this anymore
4473
4474 --Clean up first the unwanted tasks that are created by copy_structure in pa_proj_elements
4475 --although they had not been created in pa_tasks.
4476
4477 PA_PROJ_TASK_STRUC_PUB.Clean_unwanted_tasks(
4478 p_project_id => l_project_id
4479 ,x_msg_count => l_msg_count
4480 ,x_msg_data => l_msg_data
4481 ,x_return_status => l_return_status
4482 );
4483
4484 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4485 THEN
4486 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4487
4488 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4489 THEN
4490 RAISE FND_API.G_EXC_ERROR;
4491 END IF;
4492 */
4493
4494 --Project Structure Integration
4495
4496 --bug 2738747 --create project api. Here ther is actually no pupose of this call
4497 G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
4498 G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
4499 G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
4500 --bug 2738747
4501
4502 G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
4503 --Begin Add by rtarway FP.M changes for mapping
4504 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
4505 --End Add by rtarway FP.M changes for mapping
4506
4507 --TASK
4508 --add tasks to the just created project
4509
4510 --ISSUE
4511 --Where do I get the info about automatic numbering for SEGMENT1
4512
4513 -- l_structure_type := p_structure_in.structure_type;
4514
4515 i := p_tasks_in.first;
4516
4517 v_first_index := i; --proj conn
4518
4519 -- Bug 4146369 : Added following condition so that the error comes if user has passed tasks
4520 -- and when both the structures are disbaled in the source project.
4521 -- If we do not raise error here, then user will get Invalid Paramters passed error
4522 -- which will not make much sense to users.
4523 l_bug_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.check_workplan_enabled( l_project_in_rec.created_from_project_id );
4524 l_bug_fp_enabled := PA_PROJECT_STRUCTURE_UTILS.check_financial_enabled( l_project_in_rec.created_from_project_id );
4525
4526 IF l_bug_wp_enabled = 'N' AND l_bug_fp_enabled = 'N' AND p_tasks_in.exists(i)
4527 THEN
4528 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4529 p_msg_name =>'PA_WRONG_STR_TYPE_AMG'); -- 'PA_TASKS_NOT_ALLOWD_AMG' -- It is decided to use the same message in this case too
4530 -- Workplan or Financial Structures must be enabled at source project/template level in order to enter Tasks.
4531 RAISE FND_API.G_EXC_ERROR ;
4532 ELSIF l_bug_wp_enabled = 'Y' AND l_bug_fp_enabled = 'N' AND p_tasks_in.exists(i) AND l_structure_in_rec.structure_type = 'FINANCIAL'
4533 THEN
4534 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4535 p_msg_name => 'PA_WRONG_STR_TYPE_AMG' );
4536 -- Please enter the correct structure type or enable the Workplan/Financial structure at the source project/template level.
4537 RAISE FND_API.G_EXC_ERROR ;
4538 ELSIF l_bug_wp_enabled = 'N' AND l_bug_fp_enabled = 'Y' AND p_tasks_in.exists(i) AND l_structure_in_rec.structure_type = 'WORKPLAN'
4539 THEN
4540 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
4541 p_msg_name => 'PA_WRONG_STR_TYPE_AMG' );
4542 -- Please enter the correct structure type or enable the Workplan/Financial structure at the source project/template level.
4543 RAISE FND_API.G_EXC_ERROR ;
4544 END IF;
4545
4546 IF p_tasks_in.exists(i)
4547 --Project Structures
4548 AND l_structure_in_rec.structure_type = 'FINANCIAL'
4549 --Project Structures
4550 THEN
4551
4552 --Inserting tasks will be done in 2 steps
4553 --1> an INSERT step to get a task_id linked to task_reference
4554 --2> and then an UPDATE step to get the appropriate parent id and toptask id.
4555 --This second step will also be used to default data from parents to children.
4556
4557 --get the project_type_class_code and service_code associated to the project_type
4558
4559 OPEN l_project_type_csr(l_project_rec.project_type);
4560 FETCH l_project_type_csr INTO l_project_type_rec;
4561 CLOSE l_project_type_csr;
4562
4563
4564 --ROUND TRIP 1
4565
4566 WHILE i IS NOT NULL LOOP
4567
4568 --initialize return status to success
4569 p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
4570
4571 l_task_in_rec := p_tasks_in(i);
4572
4573 pa_project_pvt.validate_billing_info (
4574 p_project_id =>l_project_id, -- Added for Bug 5643876
4575 p_project_class_code =>l_project_type_rec.project_type_class_code,
4576 p_in_task_rec =>l_task_in_rec,
4577 p_return_status =>l_return_status
4578 );
4579
4580
4581 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4582 THEN
4583 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4584
4585 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4586 THEN
4587 p_multiple_task_msg := 'F';
4588 -- RAISE FND_API.G_EXC_ERROR;
4589 END IF;
4590
4591 IF l_task_in_rec.adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4592 THEN
4593 t_adj_on_std_inv := NULL;
4594 ELSE
4595 t_adj_on_std_inv := l_task_in_rec.adj_on_std_inv;
4596 END IF;
4597
4598 if t_adj_on_std_inv is not null then
4599 OPEN c_adj_on_std_inv(t_adj_on_std_inv);
4600 FETCH c_adj_on_std_inv into task_adj_on_std_inv;
4601 CLOSE c_adj_on_std_inv;
4602
4603 if task_adj_on_std_inv <> 'X' then
4604
4605 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
4606 ,p_msg_name => 'PA_INVALID_ADJ_ON_STD_INV');
4607
4608 l_return_status := FND_API.G_RET_STS_ERROR;
4609
4610 RAISE FND_API.G_EXC_ERROR;
4611
4612
4613
4614 END IF;
4615
4616 end if;
4617
4618 -- Actions performed using the APIs would be subject to
4619 -- function security. If the responsibility does not allow
4620 -- such functions to be executed, the API should not proceed further
4621 -- since the user does not have access to such functions
4622
4623 -- Function security procedure check whether user have the
4624 -- privilege to add task or not
4625
4626 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
4627 --above before checking for create_project function.
4628
4629 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
4630 (p_api_version_number => p_api_version_number,
4631 p_responsibility_id => l_resp_id,
4632 p_function_name => 'PA_PM_ADD_TASK',
4633 p_msg_count => l_msg_count,
4634 p_msg_data => l_msg_data,
4635 p_return_status => l_return_status,
4636 p_function_allowed => l_function_allowed);
4637
4638
4639 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4640 THEN
4641 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4642
4643 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4644 THEN
4645 p_multiple_task_msg := 'F';
4646 -- RAISE FND_API.G_EXC_ERROR;
4647 END IF;
4648
4649 IF l_function_allowed = 'N' THEN
4650 pa_interface_utils_pub.map_new_amg_msg
4651 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
4652 ,p_msg_attribute => 'CHANGE'
4653 ,p_resize_flag => 'Y'
4654 ,p_msg_context => 'GENERAL'
4655 ,p_attribute1 => ''
4656 ,p_attribute2 => ''
4657 ,p_attribute3 => ''
4658 ,p_attribute4 => ''
4659 ,p_attribute5 => '');
4660 p_return_status := FND_API.G_RET_STS_ERROR;
4661 p_multiple_task_msg := 'F';
4662 -- RAISE FND_API.G_EXC_ERROR;
4663 END IF;
4664
4665 /*Code added for bug 2982057*/
4666
4667 IF l_task_in_rec.long_task_name IS NULL
4668 OR l_task_in_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4669 THEN
4670 l_task_in_rec.long_task_name := l_task_in_rec.task_name;
4671 ELSE
4672 l_task_in_rec.long_task_name := l_task_in_rec.long_task_name;
4673 END IF;
4674
4675 /*Code addition for bug 2982057 ends*/
4676
4677 pa_project_pvt.add_task_round_one(l_return_status
4678 ,l_project_rec
4679 ,l_task_in_rec
4680 ,l_project_type_rec.project_type_class_code
4681 ,l_project_type_rec.service_type_code
4682 ,l_task_id);
4683
4684 -- assign the appropriate values to the task out record
4685 p_tasks_out(i).return_status := l_return_status;
4686 p_tasks_out(i).pa_task_id := l_task_id;
4687 p_tasks_out(i).pm_task_reference := l_task_in_rec.pm_task_reference;
4688
4689 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4690 THEN
4691 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4692
4693 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4694 THEN
4695 p_multiple_task_msg := 'F';
4696 -- RAISE FND_API.G_EXC_ERROR;
4697 END IF;
4698
4699 i := p_tasks_in.next(i);
4700
4701 END LOOP;
4702
4703 --ROUND TRIP 2
4704
4705 i := p_tasks_in.first;
4706
4707 WHILE i IS NOT NULL LOOP
4708
4709 --move the incoming record to a local record
4710 l_task_in_rec := p_tasks_in(i);
4711
4712 --get the unique task ID for this task
4713 l_task_id := p_tasks_out(i).pa_task_id;
4714
4715 pa_project_pvt.add_task_round_two(l_return_status
4716 ,l_project_rec
4717 ,l_task_id
4718 ,l_task_in_rec
4719 --project structures
4720 ,null
4721 ,p_tasks_in
4722 ,p_tasks_out
4723 ,l_task_version_id
4724 ,'N' -- Bug 2931183 p_create_task_structure param.
4725 -- distinguishes bulk calling context.
4726 --project structures
4727 );
4728
4729 -- assign the return_status to the task out record
4730 p_tasks_out(i).return_status := l_return_status;
4731 p_tasks_out(i).task_version_id := l_task_version_id;
4732
4733 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4734 THEN
4735 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4736
4737 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4738 THEN
4739 p_multiple_task_msg := 'F';
4740 -- RAISE FND_API.G_EXC_ERROR;
4741 END IF;
4742
4743 --move to next task in task pl/sql table
4744 i := p_tasks_in.next(i);
4745
4746 END LOOP;
4747
4748 --Project Structures
4749 ELSIF p_tasks_in.exists(i)
4750 AND l_structure_in_rec.structure_type = 'WORKPLAN'
4751 THEN
4752
4753 IF G_WP_STR_EXISTS = 'N' OR
4754 G_IS_WP_SEPARATE_FROM_FN = 'N' --bug 2876703 --create project
4755 THEN
4756 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4757 THEN
4758 pa_interface_utils_pub.map_new_amg_msg
4759 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
4760 ,p_msg_attribute => 'CHANGE'
4761 ,p_resize_flag => 'N'
4762 ,p_msg_context => 'GENERAL'
4763 ,p_attribute1 => ''
4764 ,p_attribute2 => ''
4765 ,p_attribute3 => ''
4766 ,p_attribute4 => ''
4767 ,p_attribute5 => '');
4768 END IF;
4769 RAISE FND_API.G_EXC_ERROR;
4770 END IF;
4771
4772
4773
4774 -- Actions performed using the APIs would be subject to
4775 -- function security. If the responsibility does not allow
4776 -- such functions to be executed, the API should not proceed further
4777 -- since the user does not have access to such functions
4778
4779 -- Function security procedure check whether user have the
4780 -- privilege to add task or not
4781
4782 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
4783 --above before checking for create_project function.
4784
4785 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
4786 (p_api_version_number => p_api_version_number,
4787 p_responsibility_id => l_resp_id,
4788 p_function_name => 'PA_PM_ADD_TASK',
4789 p_msg_count => l_msg_count,
4790 p_msg_data => l_msg_data,
4791 p_return_status => l_return_status,
4792 p_function_allowed => l_function_allowed);
4793
4794
4795 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4796 THEN
4797 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4798
4799 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4800 THEN
4801 p_multiple_task_msg := 'F';
4802 RAISE FND_API.G_EXC_ERROR;
4803 END IF;
4804
4805 IF l_function_allowed = 'N' THEN
4806 pa_interface_utils_pub.map_new_amg_msg
4807 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
4808 ,p_msg_attribute => 'CHANGE'
4809 ,p_resize_flag => 'Y'
4810 ,p_msg_context => 'GENERAL'
4811 ,p_attribute1 => ''
4812 ,p_attribute2 => ''
4813 ,p_attribute3 => ''
4814 ,p_attribute4 => ''
4815 ,p_attribute5 => '');
4816 p_return_status := FND_API.G_RET_STS_ERROR;
4817 p_multiple_task_msg := 'F';
4818 RAISE FND_API.G_EXC_ERROR;
4819 END IF;
4820 /*
4821 FP K one off Bug 2931183
4822 Commenting out this loop. Instead of this processing, we will call process_task_structure_bulk
4823 API which needs to be called only once.
4824
4825
4826
4827 WHILE i IS NOT NULL LOOP
4828
4829 --initialize return status to success
4830 p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
4831
4832 l_task_in_rec := p_tasks_in(i);
4833
4834 IF (l_task_in_rec.pa_parent_task_id IS NOT NULL
4835 AND l_task_in_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
4836 THEN
4837 v_parent_task_id := l_task_in_rec.pa_parent_task_id;
4838 ELSIF (l_task_in_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
4839 AND l_task_in_rec.pm_parent_task_reference IS NOT NULL)
4840 THEN
4841 --convert pm_parent_task_reference to parent_task_id.
4842 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
4843 PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
4844 p_pm_parent_task_reference => l_task_in_rec.pm_parent_task_reference
4845 ,p_project_id => l_project_id
4846 ,x_parent_task_id => v_parent_task_id
4847 ,x_return_status => l_return_status
4848 );
4849
4850 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
4851 THEN
4852 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
4853 THEN
4854 pa_interface_utils_pub.map_new_amg_msg
4855 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
4856 ,p_msg_attribute => 'CHANGE'
4857 ,p_resize_flag => 'N'
4858 ,p_msg_context => 'TASK'
4859 ,p_attribute1 => l_amg_segment1
4860 ,p_attribute2 => l_amg_task_number
4861 ,p_attribute3 => ''
4862 ,p_attribute4 => ''
4863 ,p_attribute5 => '');
4864 END IF;
4865 RAISE FND_API.G_EXC_ERROR;
4866 END IF;
4867
4868 ELSE
4869 v_parent_task_id := null;
4870 END IF;
4871
4872 --proj conn
4873 IF i = v_first_index
4874 THEN
4875 l_ref_task_id := null;
4876 ELSE
4877 l_ref_task_id := v_task_id;
4878 END IF;
4879 --proj conn
4880
4881 PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
4882 p_project_id => l_project_id
4883 ,p_task_id => l_task_in_rec.pa_task_id
4884 ,p_parent_task_id => v_parent_task_id
4885 ,p_ref_task_id => l_ref_task_id --proj conn
4886 ,p_task_number => l_task_in_rec.pa_task_number
4887 ,p_task_name => l_task_in_rec.long_task_name --bug 2833194
4888 ,p_task_description => l_task_in_rec.task_description
4889 ,p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id
4890 ,p_calling_module => 'AMG'
4891 ,p_structure_type => l_structure_in_rec.structure_type
4892 ,p_OBLIGATION_START_DATE => l_task_in_rec.OBLIGATION_START_DATE
4893 ,p_OBLIGATION_FINISH_DATE => l_task_in_rec.OBLIGATION_FINISH_DATE
4894 ,p_ESTIMATED_START_DATE => l_task_in_rec.ESTIMATED_START_DATE
4895 ,p_ESTIMATED_FINISH_DATE => l_task_in_rec.ESTIMATED_FINISH_DATE
4896 ,p_BASELINE_START_DATE => l_task_in_rec.BASELINE_START_DATE
4897 ,p_BASELINE_FINISH_DATE => l_task_in_rec.BASELINE_FINISH_DATE
4898 ,p_CLOSED_DATE => l_task_in_rec.CLOSED_DATE
4899 ,p_WQ_UOM_CODE => l_task_in_rec.WQ_UOM_CODE
4900 ,p_WQ_ITEM_CODE => l_task_in_rec.WQ_ITEM_CODE
4901 ,p_STATUS_CODE => l_task_in_rec.STATUS_CODE
4902 ,p_WF_STATUS_CODE => l_task_in_rec.WF_STATUS_CODE
4903 ,p_PM_SOURCE_CODE => p_PM_product_code
4904 ,p_PRIORITY_CODE => l_task_in_rec.PRIORITY_CODE
4905 ,p_MILESTONE_FLAG => l_task_in_rec.MILESTONE_FLAG
4906 ,p_CRITICAL_FLAG => l_task_in_rec.CRITICAL_FLAG
4907 ,p_INC_PROJ_PROGRESS_FLAG => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
4908 ,p_LINK_TASK_FLAG => l_task_in_rec.LINK_TASK_FLAG
4909 ,p_CALENDAR_ID => l_task_in_rec.CALENDAR_ID
4910 ,p_PLANNED_EFFORT => l_task_in_rec.PLANNED_EFFORT
4911 ,p_DURATION => l_task_in_rec.DURATION
4912 ,p_PLANNED_WORK_QUANTITY => l_task_in_rec.PLANNED_WORK_QUANTITY
4913 ,p_TASK_TYPE => l_task_in_rec.TASK_TYPE
4914 ,p_actual_start_date => l_task_in_rec.actual_start_date
4915 ,p_actual_finish_date => l_task_in_rec.actual_finish_date
4916 ,p_early_start_date => l_task_in_rec.early_start_date
4917 ,p_early_finish_date => l_task_in_rec.early_finish_date
4918 ,p_late_start_date => l_task_in_rec.late_start_date
4919 ,p_late_finish_date => l_task_in_rec.late_finish_date
4920 ,p_scheduled_start_date => l_task_in_rec.scheduled_start_date
4921 ,p_scheduled_finish_date => l_task_in_rec.scheduled_finish_date
4922 ,P_PM_SOURCE_reference => l_task_in_rec.pm_task_reference
4923 ,p_location_id => l_task_in_rec.address_id
4924 ,p_manager_person_id => l_task_in_rec.task_manager_person_id
4925 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
4926 ,p_ext_act_duration => l_task_in_rec.ext_act_duration
4927 ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
4928 ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
4929 -- (End venkat) new params for bug #3450684 -------------------------------------------------
4930 ,x_task_version_id => l_task_version_id
4931 ,x_task_id => v_task_id
4932 ,x_msg_count => l_msg_count
4933 ,x_msg_data => l_msg_data
4934 ,x_return_status => l_return_status
4935 );
4936
4937 -- assign the appropriate values to the task out record
4938 p_tasks_out(i).return_status := l_return_status;
4939 p_tasks_out(i).pa_task_id := v_task_id;
4940 p_tasks_out(i).task_version_id := l_task_version_id;
4941 p_tasks_out(i).pm_task_reference := l_task_in_rec.pm_task_reference;
4942
4943 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4944 THEN
4945 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4946
4947 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4948 THEN
4949 p_multiple_task_msg := 'F';
4950 RAISE FND_API.G_EXC_ERROR;
4951 END IF;
4952
4953 i := p_tasks_in.next(i);
4954
4955 END LOOP;
4956
4957 FP K one off Bug 2931183
4958 */
4959 --Project Structures
4960
4961 END IF; --p_tasks_in.exists(i)
4962
4963 -- Bug 5622539
4964 pa_project_pvt.validate_data(
4965 p_calling_context => 'CREATE_PROJECT',
4966 p_project_id => l_project_id,
4967 x_msg_count => l_msg_count,
4968 x_msg_data => l_msg_data,
4969 x_return_status => l_return_status
4970 );
4971 p_return_status := l_return_status;
4972
4973 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
4974 THEN
4975 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4976
4977 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
4978 THEN
4979 RAISE FND_API.G_EXC_ERROR;
4980 END IF;
4981
4982 -- Made the following changes for post FP K one off. Bug 2931183
4983 -- Performance changes.
4984 IF l_debug_mode = 'Y' THEN
4985 pa_debug.g_err_stage := 'Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
4986 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
4987 END IF;
4988
4989 --Set the global variable G_OP_VALIDATE_FLAG.
4990 --BUG 4218977
4991 G_OP_VALIDATE_FLAG := p_op_validate_flag;
4992
4993 PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK
4994 ( p_api_version_number => p_api_version_number
4995 ,p_commit => FND_API.G_FALSE --p_commit : Bug 3668424: passing p_commit as FND_API.G_FALSE
4996 ,p_project_id => l_project_id -- Changed during UT.
4997 ,p_source_project_id => l_project_in_rec.created_from_project_id --ADUT. Included this new param.
4998 ,p_pm_product_code => p_pm_product_code
4999 ,p_structure_type => p_structure_in.structure_type
5000 ,p_tasks_in_tbl => p_tasks_in
5001 ,p_wp_str_exists => G_WP_STR_EXISTS
5002 ,p_is_wp_separate_from_fn => G_IS_WP_SEPARATE_FROM_FN
5003 ,p_is_wp_versioning_enabled => G_IS_WP_VERSIONING_ENABLED
5004 ,p_structure_version_id => null
5005 ,p_process_mode => l_project_in_rec.process_mode -- PA L Changes 3010538
5006 ,px_tasks_out_tbl => p_tasks_out
5007 ,x_return_status => p_return_status
5008 ,x_msg_count => p_msg_count
5009 ,x_msg_data => p_msg_data
5010 );
5011
5012 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5013 IF l_debug_mode = 'Y' THEN
5014 pa_debug.g_err_stage := 'Errors in PROCESS_TASK_STRUCTURE_BULK ' ;
5015 pa_debug.write(g_module_name,pa_debug.g_err_stage,4);
5016 END IF;
5017 p_multiple_task_msg := 'F';
5018 END IF;
5019
5020 IF l_debug_mode = 'Y' THEN
5021 pa_debug.g_err_stage := 'Returned from PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
5022 pa_debug.write(g_module_name,pa_debug.g_err_stage,3);
5023 END IF;
5024
5025 /* Post FP K one off. Bug 2931183
5026 Commenting this code as this is done in PA_PROJ_TASK_STRUC_PUB.process_task_structure_bulk.
5027 --bug 2732895 --create_project
5028 IF ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
5029 ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND l_structure_in_rec.structure_type = 'WORKPLAN' ) --should not call fif tasks are added to financial structure version
5030 THEN
5031 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
5032 p_tasks_in => p_tasks_out
5033 ,p_task_version_id => null
5034 ,x_msg_count => l_msg_count
5035 ,x_msg_data => l_msg_data
5036 ,x_return_status => l_return_status
5037 );
5038
5039 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5040 THEN
5041 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5042
5043 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5044 THEN
5045 p_multiple_task_msg := 'F';
5046 RAISE FND_API.G_EXC_ERROR;
5047 END IF;
5048
5049 --bug 2856033
5050
5051 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
5052 p_tasks_in => p_tasks_out
5053 ,p_task_version_id => null
5054 ,p_project_id => l_project_id
5055 ,P_structure_version_id => null
5056 ,x_msg_count => l_msg_count
5057 ,x_msg_data => l_msg_data
5058 ,x_return_status => l_return_status
5059 );
5060
5061 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5062 THEN
5063 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5064
5065 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5066 THEN
5067 p_multiple_task_msg := 'F';
5068 RAISE FND_API.G_EXC_ERROR;
5069 END IF;
5070
5071 --bug 2856033
5072
5073 END IF;
5074 --bug 2732895
5075 Post FP K one off. Bug 2931183
5076 */
5077 IF p_multiple_task_msg = 'F'
5078 THEN
5079 RAISE FND_API.G_EXC_ERROR;
5080 END IF;
5081
5082 -- FP-M Bug # 3301192 --create project
5083 l_d_loop_count := p_tasks_in.first;
5084 WHILE l_d_loop_count IS NOT NULL LOOP
5085 l_task_in_rec := p_tasks_in(l_d_loop_count);
5086
5087 /*PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_project_out.pa_project_id
5088 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
5089 ,p_out_task_id => l_d_task_id
5090 ,p_return_status => l_return_status);*/
5091
5092 --Begin Comment by rtarway for FP.M Changes,
5093 --This call is redundant because Task Id is already available,
5094 --Also CONVERT_PM_TASKREF_TO_ID will fail is Spilt_mapping
5095 -- p_project_out.pa_project_id is not available till this point. Should be replaced by following.
5096 -- l_d_task_id := p_tasks_out(l_d_loop_count).pa_task_id;
5097
5098 --Commented by rtarway FP.M Changes for Mapping
5099 --IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(p_project_out.pa_project_id) = 'Y') THEN
5100 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
5101
5102 --maansari5/18 replaced api call CONVERT_PM_TASKREF_TO_ID to CONVERT_PM_TASKREF_TO_ID_all
5103 IF l_d_task_id IS NULL AND
5104 l_task_in_rec.pm_task_reference IS NOT NULL AND
5105 l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5106 THEN
5107 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id
5108 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
5109 ,p_structure_type => p_structure_in.structure_type
5110 ,p_out_task_id => l_d_task_id
5111 ,p_return_status => l_return_status);
5112
5113 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5114 THEN
5115 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5116 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5117 THEN
5118 p_multiple_task_msg := 'F';
5119 RAISE FND_API.G_EXC_ERROR;
5120 END IF;
5121 END IF;
5122 --maansari5/18
5123
5124 --Set the global variable G_OP_VALIDATE_FLAG before going for dependence validation.
5125
5126 IF NVL(PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED,'N') = 'Y'
5127 THEN
5128 l_d_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
5129 ELSE
5130 l_d_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID( l_project_id, 'WORKPLAN');
5131 END IF;
5132
5133 l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_d_structure_version_id
5134 ,p_task_id => l_d_task_id);
5135
5136 pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
5137 ,p_delimeter => l_task_in_rec.pred_delimiter
5138 ,p_task_version_Id => l_d_task_ver_id
5139 ,x_return_status => l_return_status
5140 ,x_msg_count => l_msg_count
5141 ,x_msg_data => l_msg_data);
5142
5143 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5144 THEN
5145 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5146 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5147 THEN
5148 p_multiple_task_msg := 'F';
5149 RAISE FND_API.G_EXC_ERROR;
5150 END IF;
5151 l_d_task_id := null;
5152
5153 END IF;
5154 l_d_loop_count := p_tasks_in.next(l_d_loop_count);
5155 END LOOP;
5156 -- Check to see if WF had been enabled by Copy projects
5157 -- If so, then need to commit.
5158
5159 OPEN l_get_wf_status_csr (l_project_id);
5160 FETCH l_get_wf_status_csr INTO l_wf_status_code;
5161 CLOSE l_get_wf_status_csr;
5162
5163 p_project_out.pa_project_id := l_project_id;
5164 p_project_out.pa_project_number := l_project_number_out;
5165
5166 -- Need to commit if either workflow had been started
5167 -- or p_commit was TRUE
5168
5169 -- 22-DEC-97, jwhite ----------------------------------------------------------
5170 -- Added new OUT-paramter p_workflow_started
5171
5172 IF (l_wf_status_code = 'IN_ROUTE' )
5173 THEN
5174 p_workflow_started := 'Y';
5175 END IF;
5176 -- -----------------------------------------------------------------------------------
5177
5178 --<EA Add Project/Task level Extensible Attributes>
5179
5180 i := p_ext_attr_tbl_in.first;
5181
5182 IF p_ext_attr_tbl_in.exists(i)
5183 THEN
5184 PA_USER_ATTR_PUB.Process_User_Attrs_Data(
5185 p_ext_attr_data_table => p_ext_attr_tbl_in,
5186 p_project_id => l_project_id,
5187 p_structure_type => l_structure_in_rec.structure_type,
5188 x_failed_row_id_list => l_failed_row_id_list,
5189 x_errorcode => l_errorcode,
5190 x_msg_count => l_msg_count,
5191 x_msg_data => l_msg_data,
5192 x_return_status => l_return_status );
5193
5194 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
5195 THEN
5196 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5197 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
5198 THEN
5199 RAISE FND_API.G_EXC_ERROR;
5200 END IF;
5201 END IF;
5202 --</EA Add Project/Task level Extensible Attributes>
5203 --Begin Add by rtarway for set financial task
5204
5205 IF (G_PROJECT_SHARING_TYPE='SHARE_PARTIAL' AND l_structure_in_rec.structure_type = 'FINANCIAL' )
5206 THEN
5207 i := p_tasks_in.first();
5208
5209 WHILE i IS NOT NULL LOOP
5210 --Initialize the return status to success
5211 p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
5212 l_task_in_rec := p_tasks_in(i);
5213 l_patask_record_version_number := NULL;
5214 --No Function Security Check required
5215
5216 --Get record version number from pa_tasks table
5217 OPEN c_get_pa_record_version_number ( p_tasks_out(i).task_version_id , l_project_id);
5218 FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
5219 CLOSE c_get_pa_record_version_number;
5220
5221 --If the record version Number is null, initialize it to 1 , considering in create project, It will be new record
5222 IF (l_patask_record_version_number IS NULL)
5223 THEN l_patask_record_version_number := 1;
5224 END IF;
5225
5226 IF (
5227 l_task_in_rec.financial_task_flag IS NOT NULL
5228 AND
5229 l_task_in_rec.financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5230 )
5231 THEN
5232
5233 PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
5234 (
5235 p_api_version => p_api_version_number
5236 , p_init_msg_list => FND_API.G_FALSE
5237 , p_commit => FND_API.G_FALSE--BUG 3766967
5238 , p_calling_module => 'AMG'
5239 , p_debug_mode => FND_API.G_TRUE
5240 , p_task_version_id => p_tasks_out(i).task_version_id
5241 , p_checked_flag => l_task_in_rec.financial_task_flag
5242 , p_record_version_number => l_patask_record_version_number
5243 , p_project_id => l_project_id
5244 , p_published_version_exists => G_Published_version_exists
5245 , x_return_status => l_return_status
5246 , x_msg_count => l_msg_count
5247 , x_msg_data => l_msg_data
5248 );
5249
5250 -- Populating the appropriate values in task out records
5251 p_tasks_out(i).return_status := l_return_status;
5252 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5253 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5254 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5255 RAISE FND_API.G_EXC_ERROR;
5256 END IF;
5257 END IF;
5258 i := p_tasks_in.next(i);
5259 END LOOP;
5260 END IF;
5261 --End Set Financial Task Changes
5262 --End Add by rtarway FP.M Changes for Set Financial Tasks
5263
5264 --Begin Add by rtarway FP.M Changes for Mapping
5265 --Add the call to create mapping
5266 IF (G_PROJECT_SHARING_TYPE='SPLIT_MAPPING' AND l_structure_in_rec.structure_type = 'WORKPLAN' )
5267 THEN
5268 i := p_tasks_in.first();
5269 WHILE i IS NOT NULL LOOP
5270 --Initialize the return status to success
5271 l_return_status := FND_API.G_RET_STS_SUCCESS;
5272 l_task_in_rec := p_tasks_in(i);
5273
5274 -- rbruno added for bug 9491704 - start
5275 -- If mapped_task_reference is NULL and mapped_task_id is 0 then make the
5276 -- mapped_task_id also NULL as 0 is not a valid value for an id. MSP is by
5277 -- default passing 0 for Number fields if there is no value assigned to them.
5278 l_mapped_task_id := p_tasks_in(i).mapped_task_id;
5279 IF ( (p_tasks_in(i).mapped_task_reference IS NULL OR p_tasks_in(i).mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5280 AND p_tasks_in(i).mapped_task_id = 0 ) THEN
5281 l_mapped_task_id := NULL;
5282 END IF;
5283
5284 --No Function Security Check required
5285 --Call the create_mapping only id p_mapped_task_reference or p_mapped_task_id is passed
5286 --rbruno bug 9540263 start
5287 IF (
5288 ( l_mapped_task_id IS NOT NULL AND l_mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
5289 --rbruno bug 9540263 end
5290 OR
5291 ( p_tasks_in(i).mapped_task_reference IS NOT NULL AND p_tasks_in(i).mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
5292 )
5293 THEN
5294 pa_project_pub.create_mapping
5295 (
5296 p_api_version => p_api_version_number
5297 , p_init_msg_list => FND_API.G_FALSE
5298 , p_commit => FND_API.G_FALSE--bug 3766967
5299 , p_debug_mode => FND_API.G_TRUE
5300 , p_project_id => l_project_id
5301 , p_proj_source_reference => null
5302 , p_wkp_structure_version_id => l_d_structure_version_id
5303 , p_wkp_task_id => p_tasks_out(i).pa_task_id--Since the tasks are already created , this will have task Ids
5304 , px_mapped_task_id => p_tasks_in(i).mapped_task_id
5305 , p_mapped_task_reference => p_tasks_in(i).mapped_task_reference
5306 , x_return_status => l_return_status
5307 , x_msg_count => l_msg_count
5308 , x_msg_data => l_msg_data
5309 );
5310 -- Populating the appropriate values in task out records
5311 p_tasks_out(i).return_status := l_return_status;
5312 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5313 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5314 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5315 RAISE FND_API.G_EXC_ERROR;
5316 END IF;
5317 END IF;
5318 i := p_tasks_in.next(i);
5319 END LOOP;
5320 END IF;
5321 --End Create Mapping
5322 --End Add by rtarway FP.M Changes for Mapping
5323
5324 ------ 3435905 : FP M : Deliverables Changes For AMG Start-----------
5325
5326 -- 3700247, added code to check for source template/project deliverable is enabled or not
5327 -- if deliverable is enabled for source, call enable_deliverable api to enable deliverable for target project
5328 -- if deliverable is not enabled for source and for target deliverables are loaded, throw error message
5329
5330 G_DLVR_STRUCTURE_ENABLED := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_in_rec.created_from_project_id);
5331
5332 IF l_debug_mode = 'Y' THEN
5333 pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
5334 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
5335 END IF;
5336
5337 i := p_deliverables_in.first();
5338
5339 IF ( G_DLVR_STRUCTURE_ENABLED = 'Y' ) THEN
5340 Pa_Deliverable_Utils.enable_deliverable(
5341 p_api_version => p_api_version_number
5342 , p_init_msg_list => FND_API.G_FALSE
5343 , p_commit => FND_API.G_FALSE--bug 3766967
5344 , p_debug_mode => l_debug_mode
5345 , p_validate_only => FND_API.G_FALSE
5346 , p_project_id => l_project_id
5347 , x_return_status => l_return_status
5348 , x_msg_count => l_msg_count
5349 , x_msg_data => l_msg_data
5350 );
5351
5352 -- 3700247 Added code to validate return status after enable_deliverabl call
5353 -- if return status is not 'S', raise the exception
5354
5355 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5356 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5357 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5358 RAISE FND_API.G_EXC_ERROR;
5359 END IF;
5360
5361 ELSE
5362 IF i IS NOT NULL THEN
5363 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
5364 ,p_msg_name => 'PA_DLV_STRUCTURE_DISABLED');
5365 l_return_status := FND_API.G_RET_STS_ERROR;
5366 RAISE FND_API.G_EXC_ERROR;
5367 END IF;
5368 END IF;
5369
5370 WHILE i IS NOT NULL LOOP
5371 l_deliverable_id := null;
5372
5373 -- A call to Create_Deliverables api creates one deliverable and its
5374 -- assoicated actions.
5375
5376 -- Invoking the Create Deliverable API
5377 Pa_Project_Pub.create_deliverable
5378 ( p_api_version => p_api_version_number
5379 , p_init_msg_list => p_init_msg_list
5380 -- 3735792, passing p_commit as false to next level api calls
5381 , p_commit => FND_API.G_FALSE
5382 , x_return_status => l_return_status
5383 , p_deliverable_name => p_deliverables_in(i).deliverable_name
5384 , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
5385 , p_deliverable_type_id => p_deliverables_in(i).deliverable_type_id
5386 , p_deliverable_owner_id => p_deliverables_in(i).deliverable_owner_id
5387 , p_description => p_deliverables_in(i).description
5388 , p_status_code => p_deliverables_in(i).status_code
5389 , p_due_date => p_deliverables_in(i).due_date
5390 , p_completion_date => p_deliverables_in(i).completion_date
5391 , p_progress_weight => p_deliverables_in(i).progress_weight
5392 , px_deliverable_id => l_deliverable_id
5393 , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
5394 -- for bug# 3729250
5395 -- , p_carrying_out_org_id => p_deliverables_in(i).carrying_out_org_id
5396 , p_task_id => p_deliverables_in(i).task_id
5397 , p_task_source_reference => p_deliverables_in(i).task_source_reference
5398 , p_project_id => l_project_id
5399 , p_proj_source_reference => null
5400 , p_action_in_tbl => p_deliverable_actions_in
5401 -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
5402 -- , x_action_out_tbl => p_deliverable_actions_out
5403 , x_action_out_tbl => G_deliverable_actions_out_tbl
5404 , p_item_id => p_deliverables_in(i).item_id --Added for bug 3630378
5405 , p_inventory_org_id => p_deliverables_in(i).inventory_org_id
5406 , p_quantity => p_deliverables_in(i).quantity
5407 , p_uom_code => p_deliverables_in(i).uom_code
5408 -- for bug# 3729250
5409 -- , p_item_description => p_deliverables_in(i).item_description
5410 , p_unit_price => p_deliverables_in(i).unit_price
5411 , p_unit_number => p_deliverables_in(i).unit_number
5412 , p_currency_code => p_deliverables_in(i).currency_code
5413 , p_pm_source_code => p_pm_product_code /* Bug no. 3651113 */
5414 , x_msg_count => l_msg_count
5415 , x_msg_data => l_msg_data
5416 );
5417
5418 G_deliverables_out_tbl(i).return_status := l_return_status;
5419 G_deliverables_out_tbl(i).deliverable_id := l_deliverable_id;
5420
5421 -- Populating the appropriate values in deliverables out records
5422
5423 -- 3435905 return status and deliverable id is directly assigned to
5424 -- global deliverable table
5425 -- removed the p_deliverables_out parameter and added global table
5426 -- p_deliverables_out(i).return_status := l_return_status;
5427 -- p_deliverables_out(i).deliverable_id := l_deliverable_id;
5428
5429 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5430 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5431 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5432 RAISE FND_API.G_EXC_ERROR;
5433 END IF;
5434
5435 i := p_deliverables_in.next(i);
5436
5437 END LOOP;
5438
5439 ------ 3435905 : FP M : Deliverables Changes For AMG END-----------
5440 --4218977, rtarway, unset this global variable upon successfull completion of create project
5441 G_OP_VALIDATE_FLAG := null;
5442 IF (FND_API.to_boolean( p_commit ) OR
5443 l_wf_status_code = 'IN_ROUTE' )
5444 THEN
5445 COMMIT WORK;
5446 END IF;
5447
5448
5449 EXCEPTION
5450 WHEN FND_API.G_EXC_ERROR
5451 THEN
5452
5453 -- ROLLBACK TO create_project_pub;
5454 --start: cklee fix bug: 9065594
5455 begin
5456 ROLLBACK TO create_project_pub;
5457 exception when others then rollback;
5458
5459 end;
5460 --end: cklee fix bug: 9065594
5461
5462 -- Bug 7335526
5463 IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5464 PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name => 'PA_PROJECTS',
5465 p_user_id => FND_GLOBAL.USER_ID,
5466 p_unique_number => to_number(l_project_number_out));
5467 END IF;
5468
5469 --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5470 G_OP_VALIDATE_FLAG := null;
5471 p_return_status := FND_API.G_RET_STS_ERROR;
5472
5473 FND_MSG_PUB.Count_And_Get
5474 ( p_count => p_msg_count ,
5475 p_data => p_msg_data );
5476
5477 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
5478 THEN
5479 -- ROLLBACK TO create_project_pub;
5480 --start: cklee fix bug: 9065594
5481 begin
5482 ROLLBACK TO create_project_pub;
5483 exception when others then rollback;
5484
5485 end;
5486 --end: cklee fix bug: 9065594
5487
5488 -- Bug 7335526
5489 IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5490 PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name => 'PA_PROJECTS',
5491 p_user_id => FND_GLOBAL.USER_ID,
5492 p_unique_number => to_number(l_project_number_out));
5493 END IF;
5494
5495 --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5496 G_OP_VALIDATE_FLAG := null;
5497 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5498
5499 FND_MSG_PUB.Count_And_Get
5500 ( p_count => p_msg_count ,
5501 p_data => p_msg_data );
5502
5503 WHEN OTHERS
5504 THEN
5505 -- ROLLBACK TO create_project_pub;
5506 --start: cklee fix bug: 9065594
5507 begin
5508 ROLLBACK TO create_project_pub;
5509 exception when others then rollback;
5510
5511 end;
5512 --end: cklee fix bug: 9065594
5513
5514 -- Bug 7335526
5515 IF G_PROJECT_NUMBER_GEN_MODE = 'AUTOMATIC' THEN
5516 PA_UTILS_SQNUM_PKG.revert_unique_proj_num(p_table_name => 'PA_PROJECTS',
5517 p_user_id => FND_GLOBAL.USER_ID,
5518 p_unique_number => to_number(l_project_number_out));
5519 END IF;
5520
5521 --4218977, rtarway, unset this global variable upon unsuccessfull completion of create project
5522 G_OP_VALIDATE_FLAG := null;
5523 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5524
5525 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5526 THEN
5527 FND_MSG_PUB.add_exc_msg
5528 ( p_pkg_name => G_PKG_NAME
5529 , p_procedure_name => l_api_name );
5530
5531 END IF;
5532
5533 FND_MSG_PUB.Count_And_Get
5534 ( p_count => p_msg_count ,
5535 p_data => p_msg_data );
5536
5537 END create_project;
5538
5539 --------------------------------------------------------------------------------
5540 --Name: add_task
5541 --Type: Procedure
5542 --Description: This procedure adds a task to a OP project, when this is allowed.
5543 --
5544 --
5545 --
5546 --Called subprograms: check_add_subtask_ok
5547 --
5548 --
5549 --
5550 --History:
5551 -- 28-AUG-1996 L. de Werker Created
5552 -- 28-NOV-1996 L. de Werker Added 11 parameters for descriptive flexfields
5553 -- 10-DEC-1996 L. de Werker Added parameter p_address_id
5554 -- 27-MAY-1999 ODEO Added parameter p_pa_parent_task_id *O
5555 --
5556 -- 09-MAY-02 Maansari - Project Structure Integration
5557 -- - Added call to PA_PROJ_TASK_STRUC.CREATE_DEFAULT_TASK_STRUCTURE api.
5558 -- 17-APR-2002 amksingh Bug 2316713 initialized the
5559 -- l_task_in_rec.pa_parent_task_id with the Appropriate
5560 -- parent_task_id.
5561 -- 15-jul-2003 sramesh -- Added the code for bug 2982057.
5562 -- Changed the logic to populate the long_task_name
5563 -- with task_name when the long_task_name is null.
5564 -- 31-Jul-2003 Amit Bug 3075623 : Added condition in add_task to throw error
5565 -- if no ref task id is passed
5566 -- 12-Aug-2003 sacgupta Bug 3086001. initialized l_task_in_rec.task_type with the
5567 -- appropriate value.
5568 --
5569 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
5570 -- dependency_type and lag days to tasks and create dependencies.
5571 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
5572 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
5573
5574 -- 07-JUL-2004 Rakesh Raghavan Bug # 3663166. Modified API: add_task().
5575 -- 09-01-2006 vkadimes Bug 4689326 Modified the customer_id validation part.
5576
5577 PROCEDURE add_task
5578 ( p_api_version_number IN NUMBER
5579 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
5580 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
5581 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
5582 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5583 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5584 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5585 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5586 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5587 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5588 ,p_pa_task_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5589 --Project Structures
5590 ,p_ref_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5591 --Project Structures
5592
5593 ,p_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5594 ,p_long_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5595 ,p_task_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5596 ,p_task_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5597 ,p_task_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5598 ,p_pm_parent_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5599 ,p_pa_parent_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5600 ,p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5601 ,p_carrying_out_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5602 ,p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5603 ,p_task_manager_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5604 ,p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5605 ,p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5606 ,p_ready_to_bill_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5607 ,p_ready_to_distribute_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5608 ,p_limit_to_txn_controls_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5609 ,p_labor_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5610 ,p_labor_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5611 ,p_labor_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5612 ,p_labor_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5613 ,p_nl_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5614 ,p_nl_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5615 ,p_nl_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5616 ,p_nl_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5617 ,p_labor_cost_multiplier_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5618 ,p_cost_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5619 ,p_rev_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5620 ,p_inv_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5621 ,p_cost_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5622 ,p_rev_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5623 ,p_inv_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5624 ,p_labor_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5625 ,p_nl_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5626 ,p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5627 ,p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5628 ,p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5629 ,p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5630 ,p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5631 ,p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5632 ,p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5633 ,p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5634 ,p_tasks_dff IN VARCHAR2 := 'N' --bug 6153503
5635 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5636 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5637 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5638 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5639 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5640 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5641 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5642 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5643 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5644 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5645 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5646 --bug 6153503
5647 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5648 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5649 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5650 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5651 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5652 --end bug 6153503
5653 ,p_allow_cross_charge_flag IN VARCHAR2 :=
5654 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5655 ,p_project_rate_date IN DATE :=
5656 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5657 ,p_project_rate_type IN VARCHAR2 :=
5658 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5659 ,p_cc_process_labor_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5660 ,p_labor_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5661 ,p_labor_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5662 ,p_cc_process_nl_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5663 ,p_nl_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5664 ,p_nl_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5665 ,p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5666 ,p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5667 ,p_emp_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5668 ,p_job_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5669 --Sakthi MCB
5670 ,p_non_lab_std_bill_rt_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5671 ,p_taskfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5672 ,p_taskfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5673 --Sakthi MCB
5674 --Project Structures
5675 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
5676 ,p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5677 ,P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5678 ,P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5679 ,P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5680 ,P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5681 ,P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5682 ,P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5683 ,P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5684 ,P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5685 ,P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5686 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5687 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5688 ,P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5689 ,P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5690 ,P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5691 ,P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5692 ,P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5693 ,P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5694 ,P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5695 ,P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5696 ,P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5697 ,P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5698 ,P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5699 --Project Structures
5700 ,p_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5701 ,p_non_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5702 --PA L changes -- bug 2872708 --Add task
5703 ,p_retirement_cost_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5704 ,p_cint_eligible_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5705 ,p_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5706 --end PA L changes -- bug 2872708
5707 ,p_pa_project_id_out OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
5708 ,p_pa_project_number_out OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
5709 ,p_task_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
5710 -- PA L Changes 3010538
5711 ,p_process_mode IN VARCHAR2 := 'ONLINE'
5712 -- FP-M Bug # 3301192
5713 ,p_pred_string IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5714 -- ,p_pred_delimiter VARCHAR2 DEFAULT ','
5715 ,p_pred_delimiter IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5716 -- FP M changes begin (venkat)
5717 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5718 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5719 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5720 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
5721 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5722 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5723 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5724 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5725 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5726 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5727 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5728 -- FP M changes end (venkat)
5729 -- FP M changes start (Mapping )
5730 ,p_financial_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5731 ,p_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
5732 ,p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5733 -- FP M changes end (Mapping )
5734 ,p_deliverable IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5735 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM -- 3661788 added IN parameter
5736 -- (Begin venkat) Bug #3450684 ------------------------------------------------------------------
5737 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5738 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5739 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
5740 -- (End venkat) Bug #3450684 -------------------------------------------------------------------
5741 ,p_op_validate_flag IN VARCHAR2 := 'Y' --added by rtarway for bug 4218977
5742 ,p_structure_updates_flag IN VARCHAR2 := 'Y' --Added for Bug 7264422
5743 ,p_adj_on_std_inv IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR /* Added for 12.2Payroll billing ER 11899223 */
5744
5745
5746 )
5747 IS
5748
5749 l_api_name CONSTANT VARCHAR2(30) := 'add_task';
5750 l_return_status VARCHAR2(1);
5751 l_add_subtask_ok_flag VARCHAR2(1);
5752
5753 -- FP-M Bug # 3301192
5754 l_d_task_id NUMBER;
5755 l_d_task_ver_id NUMBER;
5756 l_d_struct_ver_id NUMBER;
5757
5758 --custom parameters
5759 l_project_type_rec pa_project_types%rowtype;
5760 l_project_rec pa_projects%rowtype;
5761 l_task_in_rec task_in_rec_type;
5762 l_project_id pa_projects.project_id%type;
5763 l_task_id pa_tasks.task_id%type;
5764 l_msg_count NUMBER ;
5765 l_msg_data VARCHAR2(2000);
5766 l_function_allowed VARCHAR2(1);
5767 l_resp_id NUMBER := 0;
5768 l_user_id NUMBER := 0;
5769 l_module_name VARCHAR2(80);
5770 l_process_code VARCHAR2(30) ;
5771 l_task_weight_basis_code VARCHAR2(30) ;
5772 l_update_wbs_flag VARCHAR2(1) ;
5773 l_customer_name VARCHAR2(360); -- Added for Bug 4689888 -- Modified to VARCHAR2(360) for bug 5856469
5774 --needed to get the field values associated to a AMG message
5775
5776 CURSOR l_amg_project_csr
5777 (p_pa_project_id pa_projects.project_id%type)
5778 IS
5779 SELECT segment1
5780 FROM pa_projects p
5781 WHERE p.project_id = p_pa_project_id;
5782
5783 --Added for bug 3280610
5784 --needed to get task_id of a task using project_id and task_reference.
5785 CURSOR l_task_ref_to_id_csr
5786 (cp_project_id pa_tasks.project_id%TYPE
5787 ,cp_pm_task_reference pa_tasks.pm_task_reference%TYPE)
5788 IS
5789 SELECT t.task_id
5790 FROM pa_tasks t
5791 WHERE t.project_id = cp_project_id
5792 AND t.pm_task_reference = cp_pm_task_reference;
5793
5794 --Bug 3279981. Fetch project information
5795 CURSOR cur_get_proj_billing_info IS
5796 SELECT enable_top_task_customer_flag, enable_top_task_inv_mth_flag,
5797 revenue_accrual_method, invoice_method, project_type
5798 FROM pa_projects_all
5799 WHERE project_id = p_pa_project_id;
5800
5801 CURSOR cur_check_proj_cust_exist (c_customer_id IN NUMBER ) IS
5802 SELECT 'Y'
5803 FROM pa_project_customers
5804 WHERE project_id = p_pa_project_id
5805 AND customer_id = c_customer_id ;
5806
5807 --Added for bug 3746912
5808 CURSOR cur_get_str_type_from_str_id( c_structure_version_id IN NUMBER ) IS
5809 SELECT pst.structure_type
5810 FROM pa_proj_element_versions ppev
5811 ,pa_proj_structure_types ppst
5812 ,pa_structure_types pst
5813 WHERE ppev.element_version_id = c_structure_version_id
5814 AND ppev.proj_element_id = ppst.proj_element_id
5815 AND ppst.structure_type_id = pst.structure_type_id ;
5816 -- Added This cursor for Bug No 4689326
5817 CURSOR l_cur_customer_name(l_customer_id NUMBER)
5818 IS
5819 SELECT customer_name from PA_CUSTOMERS_V
5820 WHERE customer_id = l_customer_id;
5821
5822 l_str_type VARCHAR2(150);
5823 --End : added for bug 3746912
5824
5825 l_amg_segment1 VARCHAR2(25);
5826 l_amg_task_number VARCHAR2(50);
5827
5828 --Project Structures
5829 l_ref_task_id NUMBER;
5830 l_tasks_in pa_project_pub.task_in_tbl_type; --dummy variables.
5831 l_tasks_out pa_project_pub.task_out_tbl_type ; --dummy variables.
5832 --Project Structures
5833 --bug 2738747
5834 l_structure_type VARCHAR2(25);
5835 --bug 2738747
5836 l_task_version_id NUMBER;
5837
5838 -- Bug 3091798.
5839 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
5840
5841 --bug 3098668
5842 struct_ver_updatable VARCHAR2(1);
5843 l_str_ver_type VARCHAR2(1);
5844 --bug 3098668
5845
5846 -- Bug 3106457
5847 l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
5848 --Begin Add by rtarway For FP.M Changes for Mapping and Set Financial Task
5849 l_patask_record_version_number NUMBER;
5850 --End Add by rtarway For FP.M Changes for Mapping and Set Financial Task
5851 --Bug 3279981 To store the project's flags
5852 l_proj_top_task_customer_flag VARCHAR2(1);
5853 l_proj_top_task_inv_mth_flag VARCHAR2(1);
5854 l_proj_revenue_acc_method VARCHAR2(30);
5855 l_proj_invoice_method VARCHAR2(30);
5856 l_proj_type VARCHAR2(20);
5857 l_dummy VARCHAR2(1);
5858
5859 l_deliverable_id NUMBER := NULL; -- 3661788 added local variable
5860
5861 -- Begin fix for Bug # 4373055.
5862
5863 l_str_ver_id NUMBER:= null;
5864 l_conc_request_id NUMBER := null;
5865 l_message_name VARCHAR2(30) := null;
5866 l_message_type VARCHAR2(30) := null;
5867
5868 -- End fix for Bug # 4373055.
5869
5870 --Added for Bug 6026370
5871 CURSOR l_default_parent_task_csr (c_pa_parent_task_id pa_tasks.task_id%type) IS
5872 SELECT allow_cross_charge_flag,
5873 cc_process_labor_flag,
5874 labor_tp_schedule_id,
5875 labor_tp_fixed_date,
5876 cc_process_nl_flag,
5877 nl_tp_schedule_id,
5878 nl_tp_fixed_date
5879 FROM pa_tasks
5880 WHERE task_id = c_pa_parent_task_id;
5881
5882
5883
5884 Cursor c_adj_on_std_inv (p_adj_on_std_inv IN VARCHAR2)
5885 Is
5886 Select 'X'
5887 from pa_lookups
5888 where lookup_type='PA_ADJ_ON_STD_INV'
5889 and lookup_code = p_adj_on_std_inv;
5890
5891
5892 --Initializiing all the CC attributes to missing values so that if the new task is top task then values of these CC attibites
5893 --will be populated from project CC attributes in pa_project_pvt.add_task_round_one api
5894 l_allow_cross_charge_flag VARCHAR(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5895 l_cc_process_labor_flag VARCHAR(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5896 l_labor_tp_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
5897 l_labor_tp_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
5898 l_cc_process_nl_flag VARCHAR(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
5899 l_nl_tp_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
5900 l_nl_tp_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
5901
5902 --End for Bug 6026370
5903
5904 --bug 6153503
5905 l_validate_dff VARCHAR2(1);
5906 l_attribute_category VARCHAR2(30);
5907 l_attribute1 VARCHAR2(150);
5908 l_attribute2 VARCHAR2(150);
5909 l_attribute3 VARCHAR2(150);
5910 l_attribute4 VARCHAR2(150);
5911 l_attribute5 VARCHAR2(150);
5912 l_attribute6 VARCHAR2(150);
5913 l_attribute7 VARCHAR2(150);
5914 l_attribute8 VARCHAR2(150);
5915 l_attribute9 VARCHAR2(150);
5916 l_attribute10 VARCHAR2(150);
5917 l_attribute11 VARCHAR2(150);
5918 l_attribute12 VARCHAR2(150);
5919 l_attribute13 VARCHAR2(150);
5920 l_attribute14 VARCHAR2(150);
5921 l_attribute15 VARCHAR2(150);
5922
5923 -- Bug 6410745
5924 l_financial_task_flag VARCHAR2(1);
5925 l_share_code VARCHAR2(30);
5926 l_shared VARCHAR(1) := 'N';
5927
5928 task_adj_on_std_inv varchar2(1) :='N';
5929 t_adj_on_std_inv varchar2(2);
5930
5931 BEGIN
5932
5933 -- Standard begin of API savepoint
5934
5935 SAVEPOINT add_task_pub;
5936
5937 -- Standard call to check for call compatibility.
5938
5939 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
5940 p_api_version_number ,
5941 l_api_name ,
5942 G_PKG_NAME )
5943 THEN
5944
5945 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5946
5947 END IF;
5948
5949
5950 -- Initialize the message table if requested.
5951 -- pm_product_code is mandatory
5952
5953 --bug 2841158
5954 -- IF p_pm_product_code IS NULL
5955 -- OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5956 IF p_pm_product_code IS NOT NULL
5957 AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
5958 --bug 2841158
5959 THEN
5960
5961 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
5962 THEN
5963 pa_interface_utils_pub.map_new_amg_msg
5964 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
5965 ,p_msg_attribute => 'CHANGE'
5966 ,p_resize_flag => 'N'
5967 ,p_msg_context => 'GENERAL'
5968 ,p_attribute1 => ''
5969 ,p_attribute2 => ''
5970 ,p_attribute3 => ''
5971 ,p_attribute4 => ''
5972 ,p_attribute5 => '');
5973 END IF;
5974 RAISE FND_API.G_EXC_ERROR;
5975 END IF;
5976
5977 /*
5978 * Bug 9379239
5979 * As per bug 2841158, the following validations are done for pm_product_code
5980 * 1. Throw PA_PRODUCT_CODE_IS_MISSING only if p_pm_product_code is g_miss_char
5981 * 2. Do not validate p_pm_product_code if its null or 'WORKPLAN' against pa_lookups
5982 */
5983 IF (p_pm_product_code IS NOT NULL) AND (p_pm_product_code <> 'WORKPLAN') THEN
5984
5985 l_pm_product_code := 'Z'; -- Reset global variable l_pm_product_code
5986 OPEN p_product_code_csr(p_pm_product_code);
5987 FETCH p_product_code_csr INTO l_pm_product_code;
5988 CLOSE p_product_code_csr;
5989
5990 IF l_pm_product_code <> 'X' THEN
5991 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
5992 pa_interface_utils_pub.map_new_amg_msg
5993 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
5994 ,p_msg_attribute => 'CHANGE'
5995 ,p_resize_flag => 'N'
5996 ,p_msg_context => 'GENERAL'
5997 ,p_attribute1 => ''
5998 ,p_attribute2 => ''
5999 ,p_attribute3 => ''
6000 ,p_attribute4 => ''
6001 ,p_attribute5 => ''
6002 );
6003 END IF;
6004 RAISE FND_API.G_EXC_ERROR;
6005 END IF;
6006
6007 END IF;
6008
6009 IF p_adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6010 THEN
6011 t_adj_on_std_inv := NULL;
6012 ELSE
6013 t_adj_on_std_inv := p_adj_on_std_inv;
6014 END IF;
6015
6016 if t_adj_on_std_inv is not null then
6017 OPEN c_adj_on_std_inv(t_adj_on_std_inv);
6018 FETCH c_adj_on_std_inv into task_adj_on_std_inv;
6019 CLOSE c_adj_on_std_inv;
6020
6021 if task_adj_on_std_inv <> 'X'then
6022
6023 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
6024 ,p_msg_name => 'PA_INVALID_ADJ_ON_STD_INV');
6025
6026 l_return_status := FND_API.G_RET_STS_ERROR;
6027
6028 RAISE FND_API.G_EXC_ERROR;
6029
6030
6031
6032 END IF;
6033
6034 end if;
6035
6036 l_resp_id := FND_GLOBAL.Resp_id;
6037 l_user_id := FND_GLOBAL.User_id;
6038 --l_module_name := p_pm_product_code||'.'||'PA_PM_ADD_TASK';
6039 l_module_name := 'PA_PM_ADD_TASK';
6040
6041 --Moved from below for bug 2471668
6042 -- get the project ID
6043
6044 PA_PROJECT_PVT.Convert_pm_projref_to_id
6045 ( p_pm_project_reference => p_pm_project_reference
6046 , p_pa_project_id => p_pa_project_id
6047 , p_out_project_id => l_project_id
6048 , p_return_status => l_return_status
6049 );
6050
6051
6052 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6053
6054 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6055
6056 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
6057
6058 RAISE FND_API.G_EXC_ERROR;
6059 END IF;
6060 --Moved from below for bug 2471668
6061
6062 -- Added for bug 3746912, reopened rtarway
6063 --Added initialization code for l_str_type for reopened bug , now l_str_type will always be initialized with passed structure type
6064 --and will be overridden if structure version id is passed.
6065 l_str_type := p_structure_type;
6066
6067 -- Added for bug 3746912
6068 --If the structure version id is passed, it gets priority over the structure type.
6069 --And the structure type should be derived from the version id in such a case
6070 IF p_structure_version_id IS NOT NULL AND p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6071 OPEN cur_get_str_type_from_str_id(p_structure_version_id);
6072 FETCH cur_get_str_type_from_str_id INTO l_str_type;
6073 IF cur_get_str_type_from_str_id%NOTFOUND THEN
6074 l_str_type := p_structure_type;
6075 --Foll IF condition added for Bug 3810365
6076 ELSIF 'N' = PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) THEN
6077 l_str_type := 'FINANCIAL';
6078 END IF;
6079 CLOSE cur_get_str_type_from_str_id;
6080 END IF;
6081 -- End : Added for bug 3746912
6082
6083 -- Moved from above for bug 3106457. The customer might pass only the project reference and not the project
6084 -- id. So we should derive the id and use it.
6085 -- PA L Changes 3010538
6086 -- Need not use map new amg msg api here as we donot have context information to be displayed and
6087 -- _AMG messages are not defined.
6088 -- Using PA_UTILS.ADD_MESSAGE
6089 --IF p_structure_type IS NOT NULL THEN Replaced p_structure_type by l_str_type for 3746912
6090 IF l_str_type IS NOT NULL THEN
6091
6092 -- Begin fix for Bug # 4373055.
6093
6094 /*
6095
6096 l_process_code :=
6097 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id --p_pa_project_id 3106457
6098 ,p_structure_type => l_str_type ); --p_structure_type 3746912
6099 IF nvl(l_process_code,'-1') = 'WUP' THEN
6100 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id -- bug 3106457 p_pa_project_id -- Bug 3091798
6101 ,p_structure_type => l_str_type ); --p_structure_type 3746912
6102
6103 PA_UTILS.ADD_MESSAGE
6104 (p_app_short_name => 'PA',
6105 --p_msg_name => 'PA_PS_VD_UPDWBS_PRC_INPROC');
6106 p_msg_name => 'PA_PS_UPDWBS_PRC_INPROC_AMG', -- Bug 3091798. Message includes the request id.
6107 p_token1 => 'REQUESTID',
6108 p_value1 => l_request_id);
6109
6110
6111 RAISE FND_API.G_EXC_ERROR;
6112
6113 ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
6114 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id -- bug 3106457 p_pa_project_id -- Bug 3091798
6115 ,p_structure_type => l_str_type ); --p_structure_type 3746912
6116
6117 PA_UTILS.ADD_MESSAGE
6118 (p_app_short_name => 'PA',
6119 -- p_msg_name => 'PA_PS_VD_UPD_WBS_PRC_ERR');
6120 p_msg_name => 'PA_PS_UPDWBS_PRC_ERR_AMG', -- Bug 3091798. Message includes the request id.
6121 p_token1 => 'REQUESTID',
6122 p_value1 => l_request_id);
6123
6124
6125 RAISE FND_API.G_EXC_ERROR;
6126
6127 END IF;
6128
6129 */
6130
6131 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
6132 p_project_id => l_project_id
6133 , p_structure_type => l_str_type
6134 , p_structure_version_id => null
6135 , p_context => 'UPDATE_AMG'
6136 , x_message_name => l_message_name
6137 , x_message_type => l_message_type
6138 , x_structure_version_id => l_str_ver_id
6139 , x_conc_request_id => l_conc_request_id);
6140
6141
6142 if l_message_name is not null then
6143
6144 PA_UTILS.ADD_MESSAGE(
6145 p_app_short_name => 'PA'
6146 , p_msg_name => l_message_name
6147 , p_token1 => 'REQUESTID'
6148 , p_value1 => l_conc_request_id);
6149
6150 RAISE FND_API.G_EXC_ERROR;
6151 end if;
6152
6153 -- End fix for Bug # 4373055.
6154
6155 END IF ;
6156 -- END IF ;
6157
6158 -- PA L Changes 3010538
6159
6160 -- As part of enforcing project security, which would determine
6161 -- whether the user has the necessary privileges to update the project
6162 -- need to call the pa_security package
6163
6164 pa_security.initialize (X_user_id => l_user_id,
6165 X_calling_module => l_module_name);
6166
6167 -- Actions performed using the APIs would be subject to
6168 -- function security. If the responsibility does not allow
6169 -- such functions to be executed, the API should not proceed further
6170 -- since the user does not have access to such functions
6171
6172 -- Function security procedure check whether user have the
6173 -- privilege to add task or not
6174
6175 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id; --bug 2471668 ( in the project context )
6176
6177 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
6178 (p_api_version_number => p_api_version_number,
6179 p_responsibility_id => l_resp_id,
6180 p_function_name => 'PA_PM_ADD_TASK',
6181 p_msg_count => l_msg_count,
6182 p_msg_data => l_msg_data,
6183 p_return_status => l_return_status,
6184 p_function_allowed => l_function_allowed);
6185
6186 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6187 THEN
6188 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6189
6190 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6191 THEN
6192 RAISE FND_API.G_EXC_ERROR;
6193 END IF;
6194
6195 IF l_function_allowed = 'N' THEN
6196 pa_interface_utils_pub.map_new_amg_msg
6197 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
6198 ,p_msg_attribute => 'CHANGE'
6199 ,p_resize_flag => 'Y'
6200 ,p_msg_context => 'GENERAL'
6201 ,p_attribute1 => ''
6202 ,p_attribute2 => ''
6203 ,p_attribute3 => ''
6204 ,p_attribute4 => ''
6205 ,p_attribute5 => '');
6206 p_return_status := FND_API.G_RET_STS_ERROR;
6207 RAISE FND_API.G_EXC_ERROR;
6208 END IF;
6209
6210 IF FND_API.TO_BOOLEAN( p_init_msg_list )
6211 THEN
6212
6213 FND_MSG_PUB.initialize;
6214
6215 END IF;
6216
6217 -- Set API return status to success
6218
6219 p_return_status := FND_API.G_RET_STS_SUCCESS;
6220
6221
6222 /* Moving this code before calling the security API. Although p_pa_project_id contains the project id but
6223 it is converted and l_project_id is used subsequently.
6224 --bug 2471668
6225 -- get the project ID
6226
6227 PA_PROJECT_PVT.Convert_pm_projref_to_id
6228 ( p_pm_project_reference => p_pm_project_reference
6229 , p_pa_project_id => p_pa_project_id
6230 , p_out_project_id => l_project_id
6231 , p_return_status => l_return_status
6232 );
6233
6234
6235 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
6236
6237 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6238
6239 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
6240
6241 RAISE FND_API.G_EXC_ERROR;
6242 END IF;
6243 */
6244
6245 -- Now verify whether project security allows the user to update
6246 -- the project
6247
6248 IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
6249
6250 -- The user does not have query privileges on this project
6251 -- Hence, cannot update the project.Raise error
6252 pa_interface_utils_pub.map_new_amg_msg
6253 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
6254 ,p_msg_attribute => 'CHANGE'
6255 ,p_resize_flag => 'Y'
6256 ,p_msg_context => 'GENERAL'
6257 ,p_attribute1 => ''
6258 ,p_attribute2 => ''
6259 ,p_attribute3 => ''
6260 ,p_attribute4 => ''
6261 ,p_attribute5 => '');
6262 p_return_status := FND_API.G_RET_STS_ERROR;
6263 RAISE FND_API.G_EXC_ERROR;
6264 ELSE
6265 -- If the user has query privileges, then check whether
6266 -- update privileges are also available
6267 IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
6268
6269 -- The user does not have update privileges on this project
6270 -- Hence , raise error
6271
6272 pa_interface_utils_pub.map_new_amg_msg
6273 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
6274 ,p_msg_attribute => 'CHANGE'
6275 ,p_resize_flag => 'Y'
6276 ,p_msg_context => 'GENERAL'
6277 ,p_attribute1 => ''
6278 ,p_attribute2 => ''
6279 ,p_attribute3 => ''
6280 ,p_attribute4 => ''
6281 ,p_attribute5 => '');
6282 p_return_status := FND_API.G_RET_STS_ERROR;
6283 RAISE FND_API.G_EXC_ERROR;
6284 END IF;
6285 END IF;
6286
6287 -- Get segment1 for AMG messages
6288
6289 OPEN l_amg_project_csr( l_project_id );
6290 FETCH l_amg_project_csr INTO l_amg_segment1;
6291 CLOSE l_amg_project_csr;
6292
6293 --bug 2738747 ---Add task
6294 G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
6295 G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
6296 G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
6297 --bug 2738747
6298 G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
6299 G_OP_VALIDATE_FLAG := p_op_validate_flag; --added by rtarway for bug 4218977
6300
6301 --bug 2876703 --Add_task
6302 IF G_IS_WP_SEPARATE_FROM_FN = 'N' AND
6303 l_str_type = 'WORKPLAN' --p_structure_type = 'WORKPLAN' 3746912
6304 THEN
6305 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6306 THEN
6307 pa_interface_utils_pub.map_new_amg_msg
6308 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
6309 ,p_msg_attribute => 'CHANGE'
6310 ,p_resize_flag => 'N'
6311 ,p_msg_context => 'GENERAL'
6312 ,p_attribute1 => ''
6313 ,p_attribute2 => ''
6314 ,p_attribute3 => ''
6315 ,p_attribute4 => ''
6316 ,p_attribute5 => '');
6317 END IF;
6318 RAISE FND_API.G_EXC_ERROR;
6319 END IF;
6320 --bug 2876703
6321
6322 --bug 2738747
6323 IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
6324 AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
6325 AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
6326 AND l_str_type /*p_structure_type 3746912*/= 'FINANCIAL'
6327 THEN
6328 --Change the flow to WORKPLAN
6329 l_structure_type := 'WORKPLAN';
6330
6331 ELSE
6332 l_structure_type := l_str_type; --p_structure_type 3746912
6333 END IF;
6334 --bug 2738747
6335
6336 /* Though it does not matter but for clarity should only be done for Financial
6337 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6338 (p_task_number=> p_task_name
6339 ,p_task_reference => p_pm_task_reference
6340 ,p_task_id => '');
6341 */
6342
6343 --check for parent task,when no parent task is given,the new task will become a
6344 --top task and a top task can alway be added.
6345 --modified to allow creation of sub-task for a parent not create through AMG
6346 --A non AMG created task could have its pm_parent_task_reference NULL. *O
6347
6348 --project structure
6349 --This validation should be done for only FINANCIAL structrues
6350 --IF p_structure_type = 'FINANCIAL' bug 2738747
6351 IF l_structure_type = 'FINANCIAL' --bug 2738747
6352 THEN
6353 --project structure
6354
6355 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6356 (p_task_number=> p_task_name
6357 ,p_task_reference => p_pm_task_reference
6358 ,p_task_id => '');
6359
6360 IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
6361 (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
6362 THEN
6363
6364 check_add_subtask_ok( p_api_version_number => p_api_version_number
6365 ,p_init_msg_list => FND_API.G_FALSE
6366 ,p_msg_data => p_msg_data
6367 ,p_msg_count => p_msg_count
6368 ,p_return_status => l_return_status
6369 ,p_project_id => l_project_id
6370 ,p_pm_project_reference => NULL
6371 ,p_task_id => p_pa_parent_task_id
6372 ,p_pm_task_reference => p_pm_parent_task_reference
6373 ,p_add_subtask_ok_flag => l_add_subtask_ok_flag );
6374
6375 END IF;
6376
6377 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6378 THEN
6379 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6380
6381 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
6382 THEN
6383
6384 RAISE FND_API.G_EXC_ERROR;
6385 END IF;
6386
6387 IF l_add_subtask_ok_flag <> 'Y'
6388 then
6389 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6390 THEN
6391 pa_interface_utils_pub.map_new_amg_msg
6392 ( p_old_message_code => 'PA_TASK_CAN_NOT_BE_ADDED'
6393 ,p_msg_attribute => 'CHANGE'
6394 ,p_resize_flag => 'N'
6395 ,p_msg_context => 'TASK'
6396 ,p_attribute1 => l_amg_segment1
6397 ,p_attribute2 => l_amg_task_number
6398 ,p_attribute3 => ''
6399 ,p_attribute4 => ''
6400 ,p_attribute5 => '');
6401 END IF;
6402
6403 RAISE FND_API.G_EXC_ERROR;
6404
6405 end IF;
6406
6407 END IF; --<<l_structrue_type = 'FINANCIAL' >>
6408
6409 -- Bug 3279981. FP_M Changes for customer and invoice method at top task
6410 -- Validate and set invoice method and customer id for the task
6411 OPEN cur_get_proj_billing_info;
6412 FETCH cur_get_proj_billing_info INTO l_proj_top_task_customer_flag, l_proj_top_task_inv_mth_flag,
6413 l_proj_revenue_acc_method, l_proj_invoice_method, l_proj_type;
6414 CLOSE cur_get_proj_billing_info;
6415
6416 IF 'Y' = l_proj_top_task_inv_mth_flag
6417 AND p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6418 IF pa_project_pvt.check_valid_dist_rule
6419 ( l_proj_type,
6420 l_proj_revenue_acc_method||'/'||p_invoice_method,
6421 l_proj_top_task_inv_mth_flag ) = 'N' THEN
6422 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6423 pa_interface_utils_pub.map_new_amg_msg
6424 ( p_old_message_code => 'PA_INV_TASK_INVOICE_METHOD' -- 4146813 changed error message code
6425 ,p_msg_attribute => 'CHANGE'
6426 ,p_resize_flag => 'N'
6427 ,p_msg_context => 'TASK'
6428 ,p_attribute1 => p_invoice_method
6429 ,p_attribute2 => ''
6430 ,p_attribute3 => ''
6431 ,p_attribute4 => ''
6432 ,p_attribute5 => '');
6433 END IF;
6434 RAISE FND_API.G_EXC_ERROR;
6435 ELSE
6436 l_task_in_rec.invoice_method := p_invoice_method;
6437 END IF;
6438 ELSE
6439 l_task_in_rec.invoice_method := NULL;
6440 END IF;
6441
6442 IF 'Y' = l_proj_top_task_customer_flag THEN
6443 -- If condition is changed for Bug Number 4689326
6444 IF p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6445 OPEN cur_check_proj_cust_exist(p_customer_id);
6446 FETCH cur_check_proj_cust_exist INTO l_dummy;
6447 IF cur_check_proj_cust_exist%NOTFOUND THEN
6448 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6449 /*Commented for Bug Number 4689326
6450 pa_interface_utils_pub.map_new_amg_msg
6451 ( p_old_message_code => 'PA_INVALID_TASK_CUSTOMER'
6452 ,p_msg_attribute => 'CHANGE'
6453 ,p_resize_flag => 'N'
6454 ,p_msg_context => 'TASK'
6455 ,p_attribute1 => p_customer_id
6456 ,p_attribute2 => ''
6457 ,p_attribute3 => ''
6458 ,p_attribute4 => ''
6459 ,p_attribute5 => '');*/
6460 -- Start of Bug Number 4689326
6461 OPEN l_cur_customer_name(p_customer_id);
6462 FETCH l_cur_customer_name INTO l_customer_name;
6463 CLOSE l_cur_customer_name;
6464 IF (l_customer_name IS NULL OR l_customer_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6465 -- Checking whether the specified customer exits or not
6466 pa_interface_utils_pub.map_new_amg_msg
6467 ( p_old_message_code => 'PA_CUSTOMER_NOT_EXIST'
6468 ,p_msg_attribute => 'CHANGE'
6469 ,p_resize_flag => 'N'
6470 ,p_msg_context => 'GENERAL'
6471 ,p_attribute1 => ''
6472 ,p_attribute2 => ''
6473 ,p_attribute3 => ''
6474 ,p_attribute4 => ''
6475 ,p_attribute5 => '');
6476 ELSE
6477 PA_UTILS.ADD_MESSAGE
6478 (p_app_short_name => 'PA',
6479 p_msg_name => 'PA_INVALID_PROJECT_CUSTOMER',
6480 p_token1 => 'CUSTOMER_NAME',
6481 p_value1 => l_customer_name
6482 );
6483 END IF;
6484 -- End of Bug Number 4689326.
6485 END IF;
6486 CLOSE cur_check_proj_cust_exist;
6487 RAISE FND_API.G_EXC_ERROR;
6488 ELSE
6489 l_task_in_rec.customer_id := p_customer_id;
6490 CLOSE cur_check_proj_cust_exist;
6491 END IF;
6492 ELSE
6493 -- Added for Bug Number 4689326
6494 -- Start of Bug Number 4689326
6495 IF p_customer_id IS NULL THEN
6496 pa_interface_utils_pub.map_new_amg_msg
6497 ( p_old_message_code => 'PA_INVALID_CUST'
6498 ,p_msg_attribute => 'CHANGE'
6499 ,p_resize_flag => 'N'
6500 ,p_msg_context => 'GENERAL'
6501 ,p_attribute1 => ''
6502 ,p_attribute2 => ''
6503 ,p_attribute3 => ''
6504 ,p_attribute4 => ''
6505 ,p_attribute5 => '');
6506 RAISE FND_API.G_EXC_ERROR;
6507 ELSE
6508 l_task_in_rec.customer_id :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM; -- when the customer_id is Miss Num we are passing Miss num to add_task_roundone.
6509 END IF;
6510 -- End of Bug Number 4689326
6511 END IF;
6512 ELSE
6513 l_task_in_rec.customer_id := NULL;
6514 END IF;
6515
6516 --Binding the incoming parameters to the local task record
6517 l_task_in_rec.pm_task_reference := p_pm_task_reference;
6518 IF p_pa_task_number IS NULL OR
6519 p_pa_task_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6520 l_task_in_rec.pa_task_number := p_pm_task_reference;
6521 ELSE
6522 l_task_in_rec.pa_task_number := p_pa_task_number;
6523 END IF;
6524 l_task_in_rec.pa_task_id := NULL;
6525 l_task_in_rec.task_name := p_task_name;
6526 -- l_task_in_rec.long_task_name := p_long_task_name;
6527 /* Commented the above line of code for bug 2982057 and add the below code*/
6528 IF p_long_task_name IS NULL
6529 OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6530 THEN
6531 l_task_in_rec.long_task_name := p_task_name;
6532 ELSE
6533 l_task_in_rec.long_task_name := p_long_task_name;
6534 END IF;
6535 /* Code addition for bug 2982057 ends*/
6536 l_task_in_rec.task_description := p_task_description;
6537 l_task_in_rec.task_start_date := p_task_start_date;
6538 l_task_in_rec.task_completion_date := p_task_completion_date;
6539 l_task_in_rec.pa_parent_task_id := p_pa_parent_task_id; -- Added for Bug2316713
6540 l_task_in_rec.pm_parent_task_reference := p_pm_parent_task_reference;
6541 l_task_in_rec.address_id := p_address_id;
6542 l_task_in_rec.carrying_out_organization_id := p_carrying_out_organization_id;
6543 l_task_in_rec.service_type_code := p_service_type_code;
6544 l_task_in_rec.task_manager_person_id := p_task_manager_person_id;
6545 l_task_in_rec.billable_flag := p_billable_flag;
6546 l_task_in_rec.chargeable_flag := p_chargeable_flag;
6547 l_task_in_rec.ready_to_bill_flag := p_ready_to_bill_flag;
6548 l_task_in_rec.ready_to_distribute_flag := p_ready_to_distribute_flag;
6549 l_task_in_rec.limit_to_txn_controls_flag := p_limit_to_txn_controls_flag;
6550 l_task_in_rec.labor_bill_rate_org_id := p_labor_bill_rate_org_id;
6551 l_task_in_rec.labor_std_bill_rate_schdl := p_labor_std_bill_rate_schdl;
6552 l_task_in_rec.labor_schedule_fixed_date := p_labor_schedule_fixed_date;
6553 l_task_in_rec.labor_schedule_discount := p_labor_schedule_discount;
6554 l_task_in_rec.non_labor_bill_rate_org_id := p_nl_bill_rate_org_id;
6555 l_task_in_rec.non_labor_std_bill_rate_schdl := p_nl_std_bill_rate_schdl;
6556 l_task_in_rec.non_labor_schedule_fixed_date := p_nl_schedule_fixed_date;
6557 l_task_in_rec.non_labor_schedule_discount := p_nl_schedule_discount;
6558 l_task_in_rec.labor_cost_multiplier_name := p_labor_cost_multiplier_name;
6559 l_task_in_rec.cost_ind_rate_sch_id := p_cost_ind_rate_sch_id;
6560 l_task_in_rec.rev_ind_rate_sch_id := p_rev_ind_rate_sch_id;
6561 l_task_in_rec.inv_ind_rate_sch_id := p_inv_ind_rate_sch_id;
6562 l_task_in_rec.cost_ind_sch_fixed_date := p_cost_ind_sch_fixed_date;
6563 l_task_in_rec.rev_ind_sch_fixed_date := p_rev_ind_sch_fixed_date;
6564 l_task_in_rec.inv_ind_sch_fixed_date := p_inv_ind_sch_fixed_date;
6565 l_task_in_rec.labor_sch_type := p_labor_sch_type;
6566 l_task_in_rec.non_labor_sch_type := p_nl_sch_type;
6567 l_task_in_rec.actual_start_date := p_actual_start_date;
6568 l_task_in_rec.actual_finish_date := p_actual_finish_date;
6569 l_task_in_rec.early_start_date := p_early_start_date;
6570 l_task_in_rec.early_finish_date := p_early_finish_date;
6571 l_task_in_rec.late_start_date := p_late_start_date;
6572 l_task_in_rec.late_finish_date := p_late_finish_date;
6573 l_task_in_rec.scheduled_start_date := p_scheduled_start_date;
6574 l_task_in_rec.scheduled_finish_date := p_scheduled_finish_date;
6575 l_task_in_rec.tasks_dff := p_tasks_dff; --bug 6153503
6576 l_task_in_rec.attribute_category := p_attribute_category;
6577 l_task_in_rec.attribute1 := p_attribute1;
6578 l_task_in_rec.attribute2 := p_attribute2;
6579 l_task_in_rec.attribute3 := p_attribute3;
6580 l_task_in_rec.attribute4 := p_attribute4;
6581 l_task_in_rec.attribute5 := p_attribute5;
6582 l_task_in_rec.attribute6 := p_attribute6;
6583 l_task_in_rec.attribute7 := p_attribute7;
6584 l_task_in_rec.attribute8 := p_attribute8;
6585 l_task_in_rec.attribute9 := p_attribute9;
6586 l_task_in_rec.attribute10 := p_attribute10;
6587 --bug 6153503
6588 l_task_in_rec.attribute11 := p_attribute11;
6589 l_task_in_rec.attribute12 := p_attribute12;
6590 l_task_in_rec.attribute13 := p_attribute13;
6591 l_task_in_rec.attribute14 := p_attribute14;
6592 l_task_in_rec.attribute15 := p_attribute15;
6593 l_task_in_rec.adj_on_std_inv := p_adj_on_std_inv; /* Added for 12.2Payroll billing ER 11899223 */
6594
6595 IF l_task_in_rec.tasks_dff = 'Y' THEN
6596 l_validate_dff := 'N';
6597 l_attribute_category := null;
6598 l_attribute1 := null;
6599 l_attribute2 := null;
6600 l_attribute3 := null;
6601 l_attribute4 := null;
6602 l_attribute5 := null;
6603 l_attribute6 := null;
6604 l_attribute7 := null;
6605 l_attribute8 := null;
6606 l_attribute9 := null;
6607 l_attribute10 := null;
6608 l_attribute11 := null;
6609 l_attribute12 := null;
6610 l_attribute13 := null;
6611 l_attribute14 := null;
6612 l_attribute15 := null;
6613
6614 ELSIF l_task_in_rec.tasks_dff = 'N' THEN
6615
6616 l_validate_dff := 'Y';
6617 l_attribute_category := l_task_in_rec.attribute_category;
6618 l_attribute1 := l_task_in_rec.attribute1;
6619 l_attribute2 := l_task_in_rec.attribute2;
6620 l_attribute3 := l_task_in_rec.attribute3;
6621 l_attribute4 := l_task_in_rec.attribute4;
6622 l_attribute5 := l_task_in_rec.attribute5;
6623 l_attribute6 := l_task_in_rec.attribute6;
6624 l_attribute7 := l_task_in_rec.attribute7;
6625 l_attribute8 := l_task_in_rec.attribute8;
6626 l_attribute9 := l_task_in_rec.attribute9;
6627 l_attribute10 := l_task_in_rec.attribute10;
6628 l_attribute11 := l_task_in_rec.attribute11;
6629 l_attribute12 := l_task_in_rec.attribute12;
6630 l_attribute13 := l_task_in_rec.attribute13;
6631 l_attribute14 := l_task_in_rec.attribute14;
6632 l_attribute15 := l_task_in_rec.attribute15;
6633 END IF;
6634 --end bug 6153503
6635
6636 l_task_in_rec.task_type := p_task_type; -- Added for bug 3086001
6637
6638 --bug 3281110
6639 l_task_in_rec.retirement_cost_flag := p_retirement_cost_flag;
6640 l_task_in_rec.cint_eligible_flag := p_cint_eligible_flag;
6641 l_task_in_rec.cint_stop_date := p_cint_stop_date;
6642 --bug 3281110
6643
6644 -- FP-M Bug # 3301192
6645 l_task_in_rec.pred_string := p_pred_string;
6646 l_task_in_rec.pred_delimiter := p_pred_delimiter;
6647
6648 --Added for Bug 6026370
6649 IF p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6650 OPEN l_default_parent_task_csr( p_pa_parent_task_id );
6651 FETCH l_default_parent_task_csr
6652 INTO l_allow_cross_charge_flag,
6653 l_cc_process_labor_flag,
6654 l_labor_tp_schedule_id,
6655 l_labor_tp_fixed_date,
6656 l_cc_process_nl_flag,
6657 l_nl_tp_schedule_id,
6658 l_nl_tp_fixed_date;
6659 CLOSE l_default_parent_task_csr;
6660 END IF;
6661 -- Changes End for Bug 6026370
6662
6663 -- IC AND Multi National Currency Changes Starts Here ...
6664 IF p_allow_cross_charge_flag IS NULL THEN --Added null condition for Bug 6026370
6665
6666 l_task_in_rec.allow_cross_charge_flag := 'N';
6667
6668 ELSIF p_allow_cross_charge_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6669 -- l_task_in_rec.allow_cross_charge_flag := 'N'; -- Bug 6026370
6670 l_task_in_rec.allow_cross_charge_flag := l_allow_cross_charge_flag; -- Bug 6026370
6671
6672 ELSE
6673 l_task_in_rec.allow_cross_charge_flag := p_allow_cross_charge_flag;
6674 END IF;
6675
6676 l_task_in_rec.project_rate_type := p_project_rate_type;
6677 l_task_in_rec.project_rate_date := p_project_rate_date;
6678
6679 /* Commented for Bug 6026370
6680 IF p_cc_process_labor_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6681 THEN
6682 l_task_in_rec.cc_process_labor_flag := 'N';
6683 ELSE
6684 l_task_in_rec.cc_process_labor_flag := p_cc_process_labor_flag;
6685 END IF;
6686
6687 IF p_cc_process_nl_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
6688 THEN
6689 l_task_in_rec.cc_process_nl_flag := 'N';
6690 ELSE
6691 l_task_in_rec.cc_process_nl_flag := p_cc_process_nl_flag;
6692 END IF;
6693 */
6694
6695 -- Added for Bug 6026370
6696 IF p_cc_process_labor_flag IS NULL THEN
6697 l_task_in_rec.cc_process_labor_flag := 'N';
6698 l_labor_tp_schedule_id := NULL;
6699 l_labor_tp_fixed_date := NULL;
6700 ELSIF p_cc_process_labor_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6701 -- l_task_in_rec.cc_process_labor_flag := 'N'; -- Bug 6026370
6702 l_task_in_rec.cc_process_labor_flag := l_cc_process_labor_flag; -- Bug 6026370
6703 ELSE
6704 l_task_in_rec.cc_process_labor_flag := p_cc_process_labor_flag;
6705 IF p_cc_process_labor_flag = 'Y' THEN
6706 IF (p_labor_tp_schedule_id IS NULL OR p_labor_tp_schedule_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6707 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6708 pa_interface_utils_pub.map_new_amg_msg
6709 ( p_old_message_code => 'PA_TASK_LAB_TP_SCH_MAND'
6710 ,p_msg_attribute => 'CHANGE'
6711 ,p_resize_flag => 'N'
6712 ,p_msg_context => 'TASK'
6713 ,p_attribute1 => ''
6714 ,p_attribute2 => ''
6715 ,p_attribute3 => ''
6716 ,p_attribute4 => ''
6717 ,p_attribute5 => '');
6718 END IF;
6719 RAISE FND_API.G_EXC_ERROR;
6720 ELSE
6721 /*As of now we are not doing the basic validation check for p_labor_tp_schedule_id */
6722 l_labor_tp_schedule_id := p_labor_tp_schedule_id;
6723 IF p_labor_tp_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6724 l_labor_tp_fixed_date := NULL;
6725 ELSE
6726 l_labor_tp_fixed_date := p_labor_tp_fixed_date;
6727 END IF;
6728 END IF;
6729 ELSE
6730 --- If we pass p_cc_process_labor_flag = 'N' then we will not honor the values passed in
6731 -- p_labor_tp_schedule_id and p_labor_tp_fixed_date
6732 l_labor_tp_schedule_id := NULL;
6733 l_labor_tp_fixed_date := NULL;
6734 END IF;
6735 END IF;
6736
6737 -- End Bug 6026370
6738
6739 -- Added for Bug 6026370
6740 IF p_cc_process_nl_flag IS NULL THEN
6741 l_task_in_rec.cc_process_nl_flag := 'N';
6742 l_nl_tp_schedule_id := NULL;
6743 l_nl_tp_fixed_date := NULL;
6744 ELSIF p_cc_process_nl_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6745 -- l_task_in_rec.cc_process_labor_flag := 'N'; -- Bug 6026370
6746 l_task_in_rec.cc_process_nl_flag := l_cc_process_nl_flag; -- Bug 6026370
6747 ELSE
6748 l_task_in_rec.cc_process_nl_flag := p_cc_process_nl_flag;
6749 IF p_cc_process_nl_flag = 'Y' THEN
6750 IF p_nl_tp_schedule_id IS NULL OR p_nl_tp_schedule_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
6751 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
6752 pa_interface_utils_pub.map_new_amg_msg
6753 ( p_old_message_code => 'PA_TASK_NL_TP_SCH_MAND'
6754 ,p_msg_attribute => 'CHANGE'
6755 ,p_resize_flag => 'N'
6756 ,p_msg_context => 'TASK'
6757 ,p_attribute1 => ''
6758 ,p_attribute2 => ''
6759 ,p_attribute3 => ''
6760 ,p_attribute4 => ''
6761 ,p_attribute5 => '');
6762 END IF;
6763 RAISE FND_API.G_EXC_ERROR;
6764 ELSE
6765 /*As of now we are not doing the basic validation check for p_nl_tp_schedule_id */
6766 l_nl_tp_schedule_id := p_nl_tp_schedule_id;
6767 IF p_nl_tp_fixed_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
6768 l_nl_tp_fixed_date := NULL;
6769 ELSE
6770 l_nl_tp_fixed_date := p_nl_tp_fixed_date;
6771 END IF;
6772 END IF;
6773 ELSE
6774 --- If we pass p_cc_process_nl_flag = 'N' then we will not honor the values passed in
6775 -- p_nl_tp_schedule_id and p_nl_tp_fixed_date
6776 l_nl_tp_schedule_id := NULL;
6777 l_nl_tp_fixed_date := NULL;
6778 END IF;
6779 END IF;
6780 -- End Bug 6026370
6781
6782 --Project Structures
6783 IF p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
6784 THEN
6785 l_ref_task_id := null;
6786 ELSE
6787 l_ref_task_id := p_ref_task_id;
6788 END IF;
6789 --Project Structures
6790 -- For bug 3280610 Commented the below code and added code for
6791 -- if l_ref_task_id is not passed then we pass parent Task id instead of throwing an error message
6792 -- Bug 3075623 : Added following condition to throw error if no ref task id
6793 -- IF (( (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
6794 -- (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
6795 -- AND l_ref_task_id is null ) THEN
6796 -- PA_UTILS.ADD_MESSAGE
6797 -- (p_app_short_name => 'PA',
6798 -- p_msg_name => 'PA_PS_INV_REF_TASK_ID');
6799 --
6800 -- RAISE FND_API.G_EXC_ERROR;
6801 -- END IF;
6802 IF l_ref_task_id is null THEN
6803
6804 IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
6805
6806 l_ref_task_id := p_pa_parent_task_id;
6807
6808 ELSIF (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
6809
6810 --Begin change by rtarway for BUG 3661788, use Convert_pm_taskref_to_id_all to get task id instead of using l_task_ref_to_id_csr
6811 --OPEN l_task_ref_to_id_csr(l_project_id,p_pm_parent_task_reference);
6812 --FETCH l_task_ref_to_id_csr INTO l_ref_task_id;
6813 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
6814 (
6815 p_pa_project_id => l_project_id ,
6816 p_structure_type => l_structure_type,
6817 p_pm_task_reference => p_pm_parent_task_reference ,
6818 p_out_task_id => l_ref_task_id,
6819 p_return_status => l_return_status
6820 );
6821
6822 --changed by rtarway for BUG 3661788
6823 --IF l_task_ref_to_id_csr%NOTFOUND
6824 IF (l_return_status <> 'S')
6825 THEN
6826 --rtarway , 3661788, comment close command
6827 --CLOSE l_task_ref_to_id_csr;
6828 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
6829 THEN
6830 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
6831 (p_task_number=> p_task_name
6832 ,p_task_reference => p_pm_task_reference
6833 ,p_task_id => '');
6834
6835 pa_interface_utils_pub.map_new_amg_msg
6836 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
6837 ,p_msg_attribute => 'CHANGE'
6838 ,p_resize_flag => 'N'
6839 ,p_msg_context => 'TASK'
6840 ,p_attribute1 => l_amg_segment1
6841 ,p_attribute2 => l_amg_task_number
6842 ,p_attribute3 => ''
6843 ,p_attribute4 => ''
6844 ,p_attribute5 => '');
6845 END IF;
6846 RAISE FND_API.G_EXC_ERROR;
6847 END IF;
6848 --rtarway , 3661788, comment close command
6849 --CLOSE l_task_ref_to_id_csr;
6850 END IF;
6851 END IF;
6852 --Bug 13923366 changes start here
6853 l_task_in_rec.PM_SOURCE_CODE := p_pm_source_code;
6854 --Bug 13923366 changes end here
6855 -- End for changes done for bug 3280610
6856
6857 /*Commented for Bug 6026370
6858 l_task_in_rec.labor_tp_schedule_id := p_labor_tp_schedule_id;
6859 l_task_in_rec.labor_tp_fixed_date := p_labor_tp_fixed_date;
6860 l_task_in_rec.nl_tp_schedule_id := p_labor_tp_schedule_id;
6861 l_task_in_rec.nl_tp_fixed_date := p_labor_tp_fixed_date;*/
6862
6863 --Added for Bug 6026370
6864 l_task_in_rec.labor_tp_schedule_id := l_labor_tp_schedule_id;
6865 l_task_in_rec.labor_tp_fixed_date := l_labor_tp_fixed_date;
6866 l_task_in_rec.nl_tp_schedule_id := l_nl_tp_schedule_id;
6867 l_task_in_rec.nl_tp_fixed_date := l_nl_tp_fixed_date;
6868 l_task_in_rec.receive_project_invoice_flag := p_receive_project_invoice_flag;
6869 l_task_in_rec.work_type_id := p_work_type_id;
6870 l_task_in_rec.emp_bill_rate_schedule_id := p_emp_bill_rate_schedule_id;
6871 l_task_in_rec.job_bill_rate_schedule_id := p_job_bill_rate_schedule_id;
6872
6873 -- IC AND Multi National Currency Changes Ends Here ...
6874
6875 --Sakthi MCB
6876
6877 l_task_in_rec.non_lab_std_bill_rt_sch_id := p_non_lab_std_bill_rt_sch_id;
6878 l_task_in_rec.taskfunc_cost_rate_type := p_taskfunc_cost_rate_type;
6879 l_task_in_rec.taskfunc_cost_rate_date := p_taskfunc_cost_rate_date;
6880
6881 --Sakthi MCB
6882
6883 l_task_in_rec.labor_disc_reason_code := p_labor_disc_reason_code;
6884 l_task_in_rec.non_labor_disc_reason_code := p_non_labor_disc_reason_code;
6885
6886 -- (begin venkat) new params for bug #3450684 ------------------------
6887 l_task_in_rec.ext_act_duration := p_ext_act_duration;
6888 l_task_in_rec.ext_remain_duration := p_ext_remain_duration;
6889 l_task_in_rec.ext_sch_duration := p_ext_sch_duration;
6890 -- (end venkat) new params for bug #3450684 ---------------------------
6891
6892 -- set the new params - bug #3654243 ----------------------------------------------
6893 G_tasks_in_tbl(G_tasks_tbl_count).base_percent_comp_deriv_code := p_base_percent_comp_deriv_code;
6894 G_tasks_in_tbl(G_tasks_tbl_count).sch_tool_tsk_type_code := p_sch_tool_tsk_type_code;
6895 G_tasks_in_tbl(G_tasks_tbl_count).constraint_type_code := p_constraint_type_code;
6896 G_tasks_in_tbl(G_tasks_tbl_count).constraint_date := p_constraint_date;
6897 G_tasks_in_tbl(G_tasks_tbl_count).free_slack := p_free_slack;
6898 G_tasks_in_tbl(G_tasks_tbl_count).total_slack := p_total_slack;
6899 G_tasks_in_tbl(G_tasks_tbl_count).effort_driven_flag := p_effort_driven_flag;
6900 G_tasks_in_tbl(G_tasks_tbl_count).level_assignments_flag := p_level_assignments_flag;
6901 G_tasks_in_tbl(G_tasks_tbl_count).invoice_method := p_invoice_method;
6902 G_tasks_in_tbl(G_tasks_tbl_count).customer_id := p_customer_id;
6903 G_tasks_in_tbl(G_tasks_tbl_count).gen_etc_source_code := p_gen_etc_source_code;
6904 -- set the new params - bug #3654243 -------------------------------------------------
6905
6906 l_task_in_rec.gen_etc_source_code := p_gen_etc_source_code; -- added for bug#13864323
6907
6908 --Bug 6410745 Changes done to set default value for financial task flag.
6909 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(l_project_id);
6910 l_Share_Code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id);
6911
6912 IF l_shared = 'Y'
6913 THEN
6914 If l_Share_Code = 'SHARE_PARTIAL' then
6915 l_financial_task_flag := NVL(p_financial_task_flag,'N');
6916 Else
6917 l_financial_task_flag := 'Y';
6918 End If;
6919 ELSE
6920 If l_structure_type = 'WORKPLAN' THEN
6921 l_financial_task_flag := 'N';
6922 Else
6923 l_financial_task_flag := 'Y';
6924 End If;
6925 End IF;
6926
6927 IF l_financial_task_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
6928 PA_UTILS.ADD_MESSAGE('PA', 'PA_AMG_RES_INV_PARAMS',
6929 'INVALID_PARAMS', 'FINANCIAL_TASK_FLAG');
6930 RAISE FND_API.G_EXC_ERROR;
6931 End If;
6932 --Bug 6410745 End Changes
6933
6934 --Begin Add by rtarway for FP.M Set Financial Task and Mapping
6935 l_task_in_rec.financial_task_flag := l_financial_task_flag; --Bug 6410745
6936 l_task_in_rec.mapped_task_id := p_mapped_task_id;
6937 l_task_in_rec.mapped_task_reference := p_mapped_task_reference;
6938 --End Add by rtarway For FP.M set financial task and Mapping
6939
6940 l_task_in_rec.MILESTONE_FLAG := p_MILESTONE_FLAG; --bug#14095637
6941 --project structure
6942 --FINANCIAL structrues
6943
6944 -- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
6945 IF PA_PROJECT_PUB.G_MASS_ADD_TASKS = 'Y' OR PA_PROJECT_PUB.G_MASS_UPDATE_TASKS = 'Y' THEN
6946
6947 l_task_in_rec.PLANNED_WORK_QUANTITY := p_PLANNED_WORK_QUANTITY;
6948 l_task_in_rec.TASK_TYPE := p_TASK_TYPE;
6949 l_task_in_rec.WQ_UOM_CODE := p_WQ_UOM_CODE;
6950 l_task_in_rec.CRITICAL_FLAG := p_CRITICAL_FLAG;
6951
6952 END IF;
6953 --Bug 13923366 changes start here
6954 l_task_in_rec.PM_SOURCE_CODE := p_pm_source_code;
6955 --Bug 13923366 changes end here
6956 /* End of code changes for new parameters */
6957
6958 IF l_structure_type = 'FINANCIAL' --bug 2738747
6959 THEN
6960 --project structure
6961
6962
6963 --Inserting a task will be done in 2 steps
6964 --1> an INSERT step to get a task_id linked to task_reference
6965 --2> and then an UPDATE step to get the appropriate parent id and toptask id.
6966 --This second step will also be used to default data from parents to children.
6967
6968 --get the values associated to the project
6969 OPEN l_project_csr(l_project_id);
6970 FETCH l_project_csr INTO l_project_rec;
6971 CLOSE l_project_csr;
6972
6973 --get the project_type_class_code and service_code associated to the project_type
6974
6975 OPEN l_project_type_csr(l_project_rec.project_type);
6976 FETCH l_project_type_csr INTO l_project_type_rec;
6977 CLOSE l_project_type_csr;
6978
6979
6980 --ROUND TRIP 1
6981
6982
6983 pa_project_pvt.add_task_round_one(p_return_status => l_return_status
6984 ,p_project_rec => l_project_rec
6985 ,p_task_rec => l_task_in_rec
6986 ,p_project_type_class_code => l_project_type_rec.project_type_class_code
6987 ,p_service_type_code => l_project_type_rec.service_type_code
6988 ,p_task_id => l_task_id);
6989
6990 -- assign the return_status to the out parameter
6991 p_return_status := l_return_status;
6992
6993 --ISSUE
6994 --return the related task Reference as well?
6995
6996
6997 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
6998 THEN
6999 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7000
7001 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7002 THEN
7003 RAISE FND_API.G_EXC_ERROR;
7004 END IF;
7005
7006 --we need to update to pm_product_code because it will be inherited
7007 --from the project in add_task_round_one
7008
7009 UPDATE pa_tasks
7010 SET pm_product_code = p_pm_product_code
7011 WHERE task_id = l_task_id;
7012
7013
7014 --ROUND TRIP 2
7015
7016 pa_project_pvt.add_task_round_two(p_return_status => l_return_status
7017 ,p_project_rec => l_project_rec
7018 ,p_task_id => l_task_id
7019 ,p_task_rec => l_task_in_rec
7020 --Project structures
7021 ,p_ref_task_id => l_ref_task_id
7022 ,p_tasks_in => l_tasks_in
7023 ,p_tasks_out => l_tasks_out
7024 ,p_task_version_id => l_task_version_id
7025 --Project structures
7026 );
7027
7028 -- assign the return_status to the out parameter
7029 p_return_status := l_return_status;
7030
7031 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7032 THEN
7033 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7034
7035 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7036 THEN
7037 RAISE FND_API.G_EXC_ERROR;
7038 END IF;
7039 --ELSIF p_structure_type = 'WORKPLAN'
7040 ELSIF l_structure_type = 'WORKPLAN' --bug 2738747
7041 THEN
7042
7043 IF G_WP_STR_EXISTS = 'N'
7044 THEN
7045 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7046 THEN
7047 pa_interface_utils_pub.map_new_amg_msg
7048 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
7049 ,p_msg_attribute => 'CHANGE'
7050 ,p_resize_flag => 'N'
7051 ,p_msg_context => 'GENERAL'
7052 ,p_attribute1 => ''
7053 ,p_attribute2 => ''
7054 ,p_attribute3 => ''
7055 ,p_attribute4 => ''
7056 ,p_attribute5 => '');
7057 END IF;
7058 RAISE FND_API.G_EXC_ERROR;
7059 END IF;
7060
7061 IF ( p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
7062 p_structure_version_id IS NULL )
7063 THEN
7064 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7065 THEN
7066 pa_interface_utils_pub.map_new_amg_msg
7067 ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
7068 ,p_msg_attribute => 'CHANGE'
7069 ,p_resize_flag => 'N'
7070 ,p_msg_context => 'GENERAL'
7071 ,p_attribute1 => ''
7072 ,p_attribute2 => ''
7073 ,p_attribute3 => ''
7074 ,p_attribute4 => ''
7075 ,p_attribute5 => '');
7076 END IF;
7077 RAISE FND_API.G_EXC_ERROR;
7078 --bug 3098668
7079 ELSE
7080 l_str_ver_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id,l_structure_type);
7081 struct_ver_updatable := PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable(p_structure_version_id);
7082 IF (struct_ver_updatable IS NULL OR
7083 struct_ver_updatable = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR
7084 struct_ver_updatable = 'N' OR
7085 NVL( l_str_ver_type, 'N' ) = 'N' )
7086 THEN
7087 -- add error message to stack and throw exception
7088 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7089 THEN
7090 pa_interface_utils_pub.map_new_amg_msg
7091 ( p_old_message_code => 'PA_STRUCT_VER_NO_UPDATE'
7092 ,p_msg_attribute => 'CHANGE'
7093 ,p_resize_flag => 'N'
7094 ,p_msg_context => 'GENERAL'
7095 ,p_attribute1 => ''
7096 ,p_attribute2 => ''
7097 ,p_attribute3 => ''
7098 ,p_attribute4 => ''
7099 ,p_attribute5 => '');
7100 END IF;
7101 RAISE FND_API.G_EXC_ERROR;
7102 END IF;
7103 --bug 3098668
7104 END IF;
7105
7106 -- FP-M Bug # 3301192 --add_task
7107 /*
7108 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_pa_project_id
7109 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
7110 ,p_out_task_id => l_d_task_id
7111 ,p_return_status => l_return_status);
7112 */
7113
7114 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(p_pa_project_id) = 'Y') THEN
7115
7116 IF l_d_task_id IS NULL AND l_task_in_rec.pm_task_reference IS NOT NULL AND
7117 l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7118 THEN
7119
7120 /* Start commenting out the following code for issue in bug # 3663166.
7121
7122 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => p_pa_project_id
7123 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
7124 ,p_out_task_id => l_d_task_id
7125 ,p_return_status => l_return_status);
7126
7127 End commenting out the following code for issue in bug # 3663166.*/
7128
7129
7130 /* Start adding code for issue in bug # 3663166. */
7131
7132 l_d_task_id := l_task_id;
7133
7134 /* End adding code for issue in bug # 3663166. */
7135
7136 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7137 THEN
7138 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7139
7140 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7141 THEN
7142 RAISE FND_API.G_EXC_ERROR;
7143 END IF;
7144
7145 END IF;
7146
7147 IF p_structure_version_id IS NULL OR p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7148 THEN
7149 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id) = 'Y') THEN
7150 l_d_struct_ver_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(p_pa_project_id);
7151 ELSE
7152 l_d_struct_ver_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(p_pa_project_id, 'WORKPLAN');
7153 END IF;
7154 ELSE
7155 l_d_struct_ver_id := p_structure_version_id;
7156 END IF;
7157
7158 l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_d_struct_ver_id
7159 ,p_task_id => l_d_task_id);
7160
7161 pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
7162 ,p_delimeter => l_task_in_rec.pred_delimiter
7163 ,p_task_version_Id => l_d_task_ver_id
7164 ,x_return_status => l_return_status
7165 ,x_msg_count => l_msg_count
7166 ,x_msg_data => l_msg_data);
7167
7168 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7169 THEN
7170 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7171
7172 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7173 THEN
7174 RAISE FND_API.G_EXC_ERROR;
7175 END IF;
7176 l_d_task_id := null;
7177
7178 END IF;
7179
7180 l_task_in_rec.OBLIGATION_START_DATE := p_OBLIGATION_START_DATE;
7181 l_task_in_rec.OBLIGATION_FINISH_DATE := p_OBLIGATION_FINISH_DATE;
7182 l_task_in_rec.ESTIMATED_START_DATE := p_ESTIMATED_START_DATE;
7183 l_task_in_rec.ESTIMATED_FINISH_DATE := p_ESTIMATED_FINISH_DATE;
7184 l_task_in_rec.BASELINE_START_DATE := p_BASELINE_START_DATE;
7185 l_task_in_rec.BASELINE_FINISH_DATE := p_BASELINE_FINISH_DATE;
7186 l_task_in_rec.CLOSED_DATE := p_CLOSED_DATE;
7187 l_task_in_rec.WQ_UOM_CODE := p_WQ_UOM_CODE;
7188 l_task_in_rec.WQ_ITEM_CODE := p_WQ_ITEM_CODE;
7189 l_task_in_rec.STATUS_CODE := p_STATUS_CODE;
7190 l_task_in_rec.WF_STATUS_CODE := p_WF_STATUS_CODE;
7191 l_task_in_rec.PM_SOURCE_CODE := nvl(p_pm_source_code,p_pm_product_code); --Bug 13923366 changes
7192 l_task_in_rec.PRIORITY_CODE := p_PRIORITY_CODE;
7193 l_task_in_rec.MILESTONE_FLAG := p_MILESTONE_FLAG;
7194 l_task_in_rec.CRITICAL_FLAG := p_CRITICAL_FLAG;
7195 l_task_in_rec.INC_PROJ_PROGRESS_FLAG := p_INC_PROJ_PROGRESS_FLAG;
7196 l_task_in_rec.LINK_TASK_FLAG := p_LINK_TASK_FLAG;
7197 l_task_in_rec.CALENDAR_ID := p_CALENDAR_ID;
7198 --Bug No 3802240
7199 IF ( p_PLANNED_EFFORT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND p_PLANNED_EFFORT IS NOT NULL )
7200 THEN
7201 l_task_in_rec.PLANNED_EFFORT := null;
7202 ELSE
7203 l_task_in_rec.PLANNED_EFFORT := p_PLANNED_EFFORT;
7204 END IF;
7205 -- l_task_in_rec.PLANNED_EFFORT := p_PLANNED_EFFORT; --Bug No 3802240
7206 l_task_in_rec.DURATION := p_DURATION;
7207 l_task_in_rec.PLANNED_WORK_QUANTITY := p_PLANNED_WORK_QUANTITY;
7208 l_task_in_rec.TASK_TYPE := p_TASK_TYPE;
7209 l_task_in_rec.actual_start_date := p_actual_start_date;
7210 l_task_in_rec.actual_finish_date := p_actual_finish_date;
7211 l_task_in_rec.early_start_date := p_early_start_date;
7212 l_task_in_rec.early_finish_date := p_early_finish_date;
7213 l_task_in_rec.late_start_date := p_late_start_date;
7214 l_task_in_rec.late_finish_date := p_late_finish_date;
7215 l_task_in_rec.scheduled_start_date := p_scheduled_start_date;
7216 l_task_in_rec.scheduled_finish_date := p_scheduled_finish_date;
7217 l_task_in_rec.PM_task_reference := p_pm_task_reference;
7218
7219 PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
7220 p_project_id => l_project_id
7221 ,p_task_id => l_task_in_rec.pa_task_id
7222 ,p_parent_task_id => l_task_in_rec.pa_parent_task_id
7223 ,p_ref_task_id => l_ref_task_id --proj conn
7224 ,p_task_number => l_task_in_rec.pa_task_number
7225 ,p_task_name => l_task_in_rec.long_task_name --bug 2833194
7226 ,p_task_description => l_task_in_rec.task_description
7227 ,p_carrying_out_organization_id => l_task_in_rec.carrying_out_organization_id
7228 ,p_calling_module => 'AMG'
7229 ,p_structure_type => l_structure_type --bug 2738747
7230 ,p_OBLIGATION_START_DATE => l_task_in_rec.OBLIGATION_START_DATE
7231 ,p_OBLIGATION_FINISH_DATE => l_task_in_rec.OBLIGATION_FINISH_DATE
7232 ,p_ESTIMATED_START_DATE => l_task_in_rec.ESTIMATED_START_DATE
7233 ,p_ESTIMATED_FINISH_DATE => l_task_in_rec.ESTIMATED_FINISH_DATE
7234 ,p_BASELINE_START_DATE => l_task_in_rec.BASELINE_START_DATE
7235 ,p_BASELINE_FINISH_DATE => l_task_in_rec.BASELINE_FINISH_DATE
7236 ,p_CLOSED_DATE => l_task_in_rec.CLOSED_DATE
7237 ,p_WQ_UOM_CODE => l_task_in_rec.WQ_UOM_CODE
7238 ,p_WQ_ITEM_CODE => l_task_in_rec.WQ_ITEM_CODE
7239 ,p_STATUS_CODE => l_task_in_rec.STATUS_CODE
7240 ,p_WF_STATUS_CODE => l_task_in_rec.WF_STATUS_CODE
7241 ,p_PM_SOURCE_CODE => l_task_in_rec.PM_source_CODE
7242 ,p_PRIORITY_CODE => l_task_in_rec.PRIORITY_CODE
7243 ,p_MILESTONE_FLAG => l_task_in_rec.MILESTONE_FLAG
7244 ,p_CRITICAL_FLAG => l_task_in_rec.CRITICAL_FLAG
7245 ,p_INC_PROJ_PROGRESS_FLAG => l_task_in_rec.INC_PROJ_PROGRESS_FLAG
7246 ,p_LINK_TASK_FLAG => l_task_in_rec.LINK_TASK_FLAG
7247 ,p_CALENDAR_ID => l_task_in_rec.CALENDAR_ID
7248 ,p_PLANNED_EFFORT => l_task_in_rec.PLANNED_EFFORT
7249 ,p_DURATION => l_task_in_rec.DURATION
7250 ,p_PLANNED_WORK_QUANTITY => l_task_in_rec.PLANNED_WORK_QUANTITY
7251 ,p_TASK_TYPE => l_task_in_rec.TASK_TYPE
7252 ,p_actual_start_date => l_task_in_rec.actual_start_date
7253 ,p_actual_finish_date => l_task_in_rec.actual_finish_date
7254 ,p_early_start_date => l_task_in_rec.early_start_date
7255 ,p_early_finish_date => l_task_in_rec.early_finish_date
7256 ,p_late_start_date => l_task_in_rec.late_start_date
7257 ,p_late_finish_date => l_task_in_rec.late_finish_date
7258 ,p_scheduled_start_date => l_task_in_rec.scheduled_start_date
7259 ,p_scheduled_finish_date => l_task_in_rec.scheduled_finish_date
7260 ,P_PM_SOURCE_reference => l_task_in_rec.pm_task_reference
7261 ,p_location_id => l_task_in_rec.address_id
7262 ,p_manager_person_id => l_task_in_rec.task_manager_person_id
7263 , p_structure_version_id => p_structure_version_id --Bug 3098668
7264 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
7265 ,p_ext_act_duration => l_task_in_rec.ext_act_duration
7266 ,p_ext_remain_duration => l_task_in_rec.ext_remain_duration
7267 ,p_ext_sch_duration => l_task_in_rec.ext_sch_duration
7268 -- (End venkat) new params for bug #3450684 -------------------------------------------------
7269 ,p_financial_task_flag => l_task_in_rec.financial_task_flag --Bug 4482903
7270 --bug 6153503
7271 ,p_validate_dff => l_validate_dff
7272 ,p_attribute_category => l_attribute_category
7273 ,p_attribute1 => l_attribute1
7274 ,p_attribute2 => l_attribute2
7275 ,p_attribute3 => l_attribute3
7276 ,p_attribute4 => l_attribute4
7277 ,p_attribute5 => l_attribute5
7278 ,p_attribute6 => l_attribute6
7279 ,p_attribute7 => l_attribute7
7280 ,p_attribute8 => l_attribute8
7281 ,p_attribute9 => l_attribute9
7282 ,p_attribute10 => l_attribute10
7283 ,p_attribute11 => l_attribute11
7284 ,p_attribute12 => l_attribute12
7285 ,p_attribute13 => l_attribute13
7286 ,p_attribute14 => l_attribute14
7287 ,p_attribute15 => l_attribute15
7288 --end bug 6153503
7289 ,x_task_version_id => l_task_version_id
7290 ,x_task_id => l_task_id
7291 ,x_msg_count => l_msg_count
7292 ,x_msg_data => l_msg_data
7293 ,x_return_status => l_return_status
7294 );
7295
7296 p_return_status := l_return_status;
7297
7298 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7299 THEN
7300 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7301
7302 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7303 THEN
7304 RAISE FND_API.G_EXC_ERROR;
7305 END IF;
7306
7307 END IF; --<< n_structure_type >>
7308
7309 p_task_id := l_task_id;
7310 p_pa_project_id_out := l_project_rec.project_id;
7311 p_pa_project_number_out := l_project_rec.segment1; --this is the project_number field in PA_PROJECTS
7312
7313 --Begin Add by rtarway FP.M Development
7314 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
7315 IF (G_PROJECT_SHARING_TYPE='SPLIT_MAPPING' AND l_structure_type = 'WORKPLAN' ) THEN
7316 IF (
7317 ( l_task_in_rec.mapped_task_id IS NOT NULL AND l_task_in_rec.mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
7318 OR
7319 ( l_task_in_rec.mapped_task_reference IS NOT NULL AND l_task_in_rec.mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7320 )
7321 THEN
7322
7323 pa_project_pub.create_mapping
7324 (
7325 p_api_version => p_api_version_number
7326 , p_init_msg_list => FND_API.G_FALSE
7327 , p_commit => FND_API.G_FALSE--bug 3766967
7328 , p_debug_mode => FND_API.G_TRUE
7329 , p_project_id => l_project_id
7330 , p_proj_source_reference => null
7331 , p_wkp_structure_version_id => p_structure_version_id
7332 , p_wkp_task_id => l_task_id--Since the tasks are already created , this will have task Ids
7333 , px_mapped_task_id => l_task_in_rec.mapped_task_id
7334 , p_mapped_task_reference => l_task_in_rec.mapped_task_reference
7335 , x_return_status => l_return_status
7336 , x_msg_count => l_msg_count
7337 , x_msg_data => l_msg_data
7338
7339 );
7340 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7341 THEN
7342 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7343
7344 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7345 THEN
7346 RAISE FND_API.G_EXC_ERROR;
7347 END IF;
7348 END IF;
7349 END IF;
7350 IF (G_PROJECT_SHARING_TYPE = 'SHARE_PARTIAL' and l_structure_type /*p_structure_type 3746912*/= 'FINANCIAL') THEN
7351 --Get the task Version Id
7352 --l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id, l_task_id);
7353 OPEN c_get_pa_record_version_number ( l_task_version_id , l_project_id);
7354 FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
7355 CLOSE c_get_pa_record_version_number;
7356 IF
7357 (p_financial_task_flag IS NOT NULL AND p_financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
7358 THEN
7359 PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
7360 (
7361 p_api_version => p_api_version_number
7362 , p_init_msg_list => FND_API.G_FALSE
7363 , p_commit => FND_API.G_FALSE--bug 3766967
7364 , p_calling_module => 'AMG'
7365 , p_debug_mode => FND_API.G_TRUE
7366 , p_task_version_id => l_task_version_id
7367 , p_checked_flag => p_financial_task_flag
7368 , p_record_version_number => l_patask_record_version_number
7369 , p_project_id => l_project_id
7370 , p_published_version_exists => G_Published_version_exists
7371 , x_return_status => l_return_status
7372 , x_msg_count => l_msg_count
7373 , x_msg_data => l_msg_data
7374 );
7375 -- Added for 4537865 : Check for Return Status after API call
7376 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7377 THEN
7378 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7379
7380 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7381 THEN
7382 RAISE FND_API.G_EXC_ERROR;
7383 END IF;
7384 END IF;
7385 END IF;
7386 --End Add by rtarway FP.M Development
7387
7388 --bug 2732895 --Add_Task
7389
7390 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
7391 IF (NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' AND (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
7392 ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y'
7393 AND l_structure_type /*p_structure_type 3746912*/ = 'WORKPLAN' ))) --should not call if new task is added to FINANCIAL structure version
7394 THEN
7395
7396 --bug 2856033
7397
7398 -- The rollup of dates must be completed before we do
7399 -- the task weightage calculation.
7400
7401 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
7402 p_tasks_in => l_tasks_out --null if called for one task
7403 ,p_task_version_id => l_task_version_id
7404 ,p_project_id => l_project_id
7405 ,P_structure_version_id => null
7406 ,x_msg_count => l_msg_count
7407 ,x_msg_data => l_msg_data
7408 ,x_return_status => l_return_status
7409 );
7410
7411 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7412 THEN
7413 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7414
7415 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7416 THEN
7417 RAISE FND_API.G_EXC_ERROR;
7418 END IF;
7419 --bug 2856033
7420
7421 l_task_weight_basis_code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id => p_pa_project_id) ;
7422
7423 -- PA L Changes 3010538
7424 -- In new model PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings
7425 -- needs to be called only when task weight basis code is
7426 -- MANUAL.
7427 IF nvl(l_task_weight_basis_code,'-1') = 'MANUAL' THEN
7428
7429 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
7430 p_tasks_in => l_tasks_out --null if called for one task
7431 ,p_task_version_id => l_task_version_id
7432 ,x_msg_count => l_msg_count
7433 ,x_msg_data => l_msg_data
7434 ,x_return_status => l_return_status
7435 );
7436
7437 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7438 THEN
7439 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7440
7441 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7442 THEN
7443 RAISE FND_API.G_EXC_ERROR;
7444 END IF;
7445 END IF ;
7446 -- PA L Changes 3010538
7447 END IF;
7448 --bug 2732895
7449
7450 -- This block has been added for the bug 3106457 to derive the structure version id.
7451 declare
7452 cursor cur_str_ver(c_task_version_id pa_proj_element_versions.element_version_id%TYPE)
7453 is
7454 select parent_structure_version_id
7455 from pa_proj_element_versions
7456 where element_version_id = c_task_version_id;
7457 begin
7458 open cur_str_ver(l_task_version_id);
7459 fetch cur_str_ver into l_structure_version_id;
7460 close cur_str_ver;
7461 end;
7462
7463 -- PA L Changes 3010538
7464
7465 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
7466 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
7467 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
7468 PA_PROJECT_PUB.G_Published_version_exists = 'N')
7469 THEN
7470
7471 /* Starts added for Bug# 7264422 */
7472 IF (nvl(p_structure_updates_flag, 'Y') = 'N') THEN
7473 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
7474 ( p_calling_context => 'AMG'
7475 ,p_project_id => l_project_id
7476 ,p_structure_version_id => l_structure_version_id
7477 ,p_update_wbs_flag => 'Y'
7478 ,x_return_status => l_return_status
7479 ,x_msg_count => l_msg_count
7480 ,x_msg_data => l_msg_data);
7481
7482 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
7483 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7484 end if;
7485
7486 ELSE
7487 /* Ends added for Bug# 7264422 */
7488
7489 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id -- bug 3106457 p_pa_project_id
7490 ,p_structure_version_id => l_structure_version_id); -- bug 3106457 p_structure_version_id ) ;
7491
7492 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
7493 IF p_process_mode = 'ONLINE' THEN
7494
7495 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
7496 ,p_project_id => l_project_id -- bug 3106457 p_pa_project_id
7497 ,p_structure_version_id => l_structure_version_id -- bug 3106457 p_structure_version_id
7498 ,x_return_status => l_return_status
7499 ,x_msg_count => l_msg_count
7500 ,x_msg_data => l_msg_data ) ;
7501
7502 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7503 THEN
7504 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7505 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7506 THEN
7507 RAISE FND_API.G_EXC_ERROR;
7508 END IF;
7509 ELSIF p_process_mode = 'CONCURRENT' THEN
7510
7511 PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE' -- Bug 6842218 'CON_UPDATE'
7512 ,p_project_id => l_project_id -- bug 3106457 p_pa_project_id
7513 ,p_structure_version_id => l_structure_version_id -- bug 3106457 p_structure_version_id
7514 ,x_return_status => l_return_status
7515 ,x_msg_count => l_msg_count
7516 ,x_msg_data => l_msg_data ) ;
7517
7518 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7519 THEN
7520 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7521 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
7522 THEN
7523 RAISE FND_API.G_EXC_ERROR;
7524 END IF;
7525
7526
7527 END IF ;
7528 END IF ;
7529 END IF; /* Added for Bug# 7264422 */
7530 END IF ;
7531
7532 -- PA L Changes 3010538
7533 -- Commented by rtarway, for BUG 3661788 and 3665745, Changed If Condition
7534 -- IF (p_deliverable IS NOT NULL OR p_Deliverable <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
7535
7536 -- 3661788 If deliverable id or deliverable reference is passed , validate it and convert deliverable reference
7537 -- to deliverable id, if required
7538
7539 IF ( ( p_deliverable_id IS NOT NULL AND p_deliverable_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
7540 ( p_deliverable IS NOT NULL AND p_deliverable <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) ) THEN
7541
7542 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
7543 ( p_deliverable_reference => p_deliverable
7544 , p_deliverable_id => p_deliverable_id
7545 , p_project_id => l_project_id
7546 , p_out_deliverable_id => l_deliverable_id
7547 , p_return_status => l_return_status
7548 );
7549
7550 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7551 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7552 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
7553 RAISE FND_API.G_EXC_ERROR;
7554 END IF;
7555
7556 -- 3661788 pass validated deliverable id to association api
7557
7558 pa_project_pub.ASSOCIATE_DLV_TO_TASK (
7559 p_api_version => p_api_version_number
7560 , p_init_msg_list => p_init_msg_list
7561 -- 3735792, passing p_commit as false to next level api calls
7562 , p_commit => FND_API.G_FALSE
7563 , p_debug_mode => 'Y'
7564 , p_pm_source_code => p_pm_product_code
7565 , p_project_id => l_project_id
7566 , p_task_id => l_task_id
7567 , p_deliverable_id => l_deliverable_id -- 3661788 changed from p_deliverable to l_deliverable_id
7568 , x_return_status => l_return_status
7569 , x_msg_count => l_msg_count
7570 , x_msg_data => l_msg_data
7571 );
7572
7573 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7574 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7575 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
7576 RAISE FND_API.G_EXC_ERROR;
7577 END IF;
7578 END IF;
7579
7580 IF FND_API.to_boolean( p_commit )
7581 THEN
7582 COMMIT;
7583 END IF;
7584 --Unset this gloabl variable upon sucessfull completion
7585 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7586
7587 EXCEPTION
7588
7589 WHEN FND_API.G_EXC_ERROR
7590 THEN
7591 ROLLBACK TO add_task_pub;
7592 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7593 p_return_status := FND_API.G_RET_STS_ERROR;
7594
7595 -- Added for 4537865
7596 p_pa_project_id_out := NULL ;
7597 p_pa_project_number_out := NULL ;
7598 p_task_id := NULL ;
7599 -- End : 4537865
7600
7601 FND_MSG_PUB.Count_And_Get
7602 ( p_count => p_msg_count ,
7603 p_data => p_msg_data );
7604
7605 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7606 THEN
7607 ROLLBACK TO add_task_pub;
7608 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7609 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7610
7611 -- Added for 4537865
7612 p_pa_project_id_out := NULL ;
7613 p_pa_project_number_out := NULL ;
7614 p_task_id := NULL ;
7615 -- End : 4537865
7616
7617 FND_MSG_PUB.Count_And_Get
7618 ( p_count => p_msg_count ,
7619 p_data => p_msg_data );
7620
7621 WHEN OTHERS THEN
7622 ROLLBACK TO add_task_pub;
7623 G_OP_VALIDATE_FLAG := null;--added by rtarway for bug 4218977
7624 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7625
7626 -- Added for 4537865
7627 p_pa_project_id_out := NULL ;
7628 p_pa_project_number_out := NULL ;
7629 p_task_id := NULL ;
7630 -- End : 4537865
7631
7632 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7633 THEN
7634 FND_MSG_PUB.add_exc_msg
7635 ( p_pkg_name => G_PKG_NAME
7636 , p_procedure_name => l_api_name );
7637
7638 END IF;
7639
7640 FND_MSG_PUB.Count_And_Get
7641 ( p_count => p_msg_count ,
7642 p_data => p_msg_data );
7643
7644 END add_task;
7645
7646
7647 -----------------------------------------------------------------------------------------
7648 --Name: delete_task
7649 --Type: Procedure
7650 --Description: This procedure delete a task from a project when this is allowed.
7651 -- It either deletes only this task, and moves the children up, OR
7652 -- it deletes this tasks and all his children, depending on
7653 -- the cascaded_delete_flag.
7654 --
7655 --
7656 --Called subprograms: check_delete_task_ok
7657 --
7658 --
7659 --
7660 --History:
7661 -- 21-AUG-1996 L. de Werker Created
7662 -- 06-DEC-1996 L. de Werker Added locking mechanism.
7663 --
7664 --
7665 PROCEDURE delete_task ( p_api_version_number IN NUMBER := 1.0 -- for bug# 3802319
7666 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
7667 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
7668 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7669 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
7670 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
7671 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7672 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7673 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7674 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7675 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7676 ,p_cascaded_delete_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
7677 ,p_project_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7678 ,p_task_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
7679 ,p_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7680 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
7681 ,p_process_mode IN VARCHAR2 := 'ONLINE'
7682 ,p_structure_updates_flag IN VARCHAR2 := 'Y'
7683 )
7684 IS
7685
7686 l_return_status VARCHAR2(1); --bug 2471668
7687 l_project_id NUMBER; --bug 2471668
7688 l_structure_type VARCHAR2(25) := p_structure_type; -- <Bug#2886014/>
7689 l_update_wbs_flag VARCHAR2(1) ;
7690 l_structure_version_id NUMBER ;
7691
7692 -- Bug 3010538
7693 l_process_code pa_lookups.lookup_code%TYPE;
7694
7695 l_request_id pa_proj_elem_ver_structure.conc_request_id%TYPE;
7696
7697 -- Bug 3106457. Obtain the structure version id give the task version id.
7698 cursor cur_str_ver(c_task_version_id pa_proj_element_versions.element_version_id%TYPE)
7699 is
7700 select parent_structure_version_id
7701 from pa_proj_element_versions
7702 where element_version_id = c_task_version_id;
7703
7704 -- Begin fix for Bug # 4373055.
7705
7706 l_str_ver_id NUMBER:= null;
7707 l_conc_request_id NUMBER := null;
7708 l_message_name VARCHAR2(30) := null;
7709 l_message_type VARCHAR2(30) := null;
7710
7711 -- End fix for Bug # 4373055.
7712
7713 BEGIN
7714
7715 p_return_status := FND_API.G_RET_STS_SUCCESS ; -- 4537865 (Initialize p_return_status to Success)
7716 --bug 2471668.
7717 --We need to call this API here toget the corrct project id. This is also
7718 --called from the private API. But I discussed with Sakthi and he is ok to ca ll this
7719 --twice once here and second time in private API. The idea is to make the adv anced security changes
7720 --only in public APIs.
7721
7722 PA_PROJECT_PVT.Convert_pm_projref_to_id
7723 ( p_pm_project_reference => p_pm_project_reference
7724 , p_pa_project_id => p_pa_project_id
7725 , p_out_project_id => l_project_id
7726 , p_return_status => l_return_status
7727 );
7728
7729
7730 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
7731
7732 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7733 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
7734 RAISE FND_API.G_EXC_ERROR;
7735 END IF;
7736
7737 PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id; --bug 2471668 ( in the project context )
7738 --end of bug 24771668
7739
7740 IF p_structure_type = 'WORKPLAN'
7741 THEN
7742 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
7743 PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) = 'N' -- 2876703 --delete_task
7744 THEN
7745 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7746 THEN
7747 pa_interface_utils_pub.map_new_amg_msg
7748 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
7749 ,p_msg_attribute => 'CHANGE'
7750 ,p_resize_flag => 'N'
7751 ,p_msg_context => 'GENERAL'
7752 ,p_attribute1 => ''
7753 ,p_attribute2 => ''
7754 ,p_attribute3 => ''
7755 ,p_attribute4 => ''
7756 ,p_attribute5 => '');
7757 END IF;
7758 RAISE FND_API.G_EXC_ERROR;
7759 END IF;
7760
7761 IF p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
7762 OR p_task_version_id IS NULL
7763 THEN
7764 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
7765 THEN
7766 pa_interface_utils_pub.map_new_amg_msg
7767 ( p_old_message_code => 'PA_PS_TSK_VER_REQ_WP'
7768 ,p_msg_attribute => 'CHANGE'
7769 ,p_resize_flag => 'N'
7770 ,p_msg_context => 'GENERAL'
7771 ,p_attribute1 => ''
7772 ,p_attribute2 => ''
7773 ,p_attribute3 => ''
7774 ,p_attribute4 => ''
7775 ,p_attribute5 => '');
7776 END IF;
7777 RAISE FND_API.G_EXC_ERROR;
7778 END IF;
7779
7780 -- Bug 3106457. Derive the structure version id from the task version id.
7781 open cur_str_ver(p_task_version_id);
7782 fetch cur_str_ver into l_structure_version_id;
7783 close cur_str_ver;
7784
7785 ELSIF p_structure_type = 'FINANCIAL' THEN -- Obtain the structure version id. Bug 3106457.
7786 IF p_task_version_id IS NULL
7787 OR p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3174639
7788 THEN
7789 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
7790 ELSE
7791 open cur_str_ver(p_task_version_id);
7792 fetch cur_str_ver into l_structure_version_id;
7793 close cur_str_ver;
7794 END IF;
7795 END IF; --<< p_structure_type >>
7796
7797 -- <Bug#2886014>
7798 -- If the following criteria is satisfied,
7799 -- switch flow to WORKPLAN
7800 -- i) Workplan is enabled;
7801 -- ii) Structure is SHARED;
7802 -- iii) Published version exists;
7803 G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
7804 G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
7805 G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
7806
7807 IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
7808 AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
7809 AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
7810 AND p_structure_type = 'FINANCIAL'
7811 THEN
7812 --Change the flow to WORKPLAN
7813 l_structure_type := 'WORKPLAN';
7814 END IF;
7815 -- </Bug#2886014>
7816
7817
7818 -- Check for the status of the process before deleting the task.
7819 -- PA L Changes 3010538
7820
7821 IF p_structure_type is not NULL THEN
7822
7823 -- Begin fix for Bug # 4373055.
7824
7825 /*
7826
7827 l_process_code :=
7828 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id --Bug 3091798.
7829 ,p_structure_type => p_structure_type );
7830
7831 IF nvl(l_process_code,'-1') = 'WUP' THEN
7832 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id -- Bug 3091798
7833 ,p_structure_type => p_structure_type );
7834
7835 PA_UTILS.ADD_MESSAGE
7836 (p_app_short_name => 'PA',
7837 -- p_msg_name => 'PA_PS_VD_UPDWBS_PRC_INPROC');
7838 p_msg_name => 'PA_PS_UPDWBS_PRC_INPROC_AMG', -- Bug 3091798. Message includes the request id.
7839 p_token1 => 'REQUESTID',
7840 p_value1 => l_request_id);
7841
7842 RAISE FND_API.G_EXC_ERROR;
7843
7844 ELSIF nvl(l_process_code,'-1') = 'WUE' THEN
7845 l_request_id := PA_PROJECT_STRUCTURE_UTILS.GET_CONC_REQUEST_ID(p_project_id => l_project_id --Bug 3091798
7846 ,p_structure_type => p_structure_type );
7847
7848 PA_UTILS.ADD_MESSAGE
7849 (p_app_short_name => 'PA',
7850 -- p_msg_name => 'PA_PS_VD_UPD_WBS_PRC_ERR');
7851 p_msg_name => 'PA_PS_UPDWBS_PRC_ERR_AMG', -- Bug 3091798. Message includes the request id.
7852 p_token1 => 'REQUESTID',
7853 p_value1 => l_request_id);
7854
7855 RAISE FND_API.G_EXC_ERROR;
7856
7857 END IF;
7858
7859 */
7860
7861 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
7862 p_project_id => l_project_id
7863 , p_structure_type => p_structure_type
7864 , p_structure_version_id => null
7865 , p_context => 'UPDATE_AMG'
7866 , x_message_name => l_message_name
7867 , x_message_type => l_message_type
7868 , x_structure_version_id => l_str_ver_id
7869 , x_conc_request_id => l_conc_request_id);
7870
7871
7872 if l_message_name is not null then
7873
7874 PA_UTILS.ADD_MESSAGE(
7875 p_app_short_name => 'PA'
7876 , p_msg_name => l_message_name
7877 , p_token1 => 'REQUESTID'
7878 , p_value1 => l_conc_request_id);
7879
7880 RAISE FND_API.G_EXC_ERROR;
7881 end if;
7882
7883 -- End fix for Bug # 4373055.
7884
7885
7886 END IF ;
7887
7888 /* This is buggy.... Bug 3106457
7889 -- Obtain the structure version id before deleting the task.
7890 -- Bug 3010538
7891 BEGIN
7892 SELECT parent_structure_version_id
7893 INTO l_structure_version_id
7894 FROM pa_proj_element_versions
7895 WHERE element_version_id = p_task_version_id ;
7896 EXCEPTION
7897 WHEN NO_DATA_FOUND THEN
7898 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7899 END ;
7900 */
7901
7902 pa_project_pvt.delete_task1
7903 ( p_api_version_number => p_api_version_number
7904 ,p_commit => FND_API.G_FALSE--bug 3766967
7905 ,p_init_msg_list => p_init_msg_list
7906 ,p_msg_count => p_msg_count
7907 ,p_msg_data => p_msg_data
7908 ,p_return_status => p_return_status
7909 ,p_pm_product_code => p_pm_product_code
7910 ,p_pm_project_reference => p_pm_project_reference
7911 ,p_pa_project_id => p_pa_project_id
7912 ,p_pm_task_reference => p_pm_task_reference
7913 ,p_pa_task_id => p_pa_task_id
7914 ,p_cascaded_delete_flag => p_cascaded_delete_flag
7915 ,p_project_id => p_project_id
7916 ,p_task_id => p_task_id
7917 ,p_task_version_id => p_task_version_id
7918 ,p_structure_type => l_structure_type -- </Bug#2886014>
7919 );
7920
7921 -- PA L Changes 3010538
7922
7923 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
7924 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
7925 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
7926 PA_PROJECT_PUB.G_Published_version_exists = 'N')
7927 THEN
7928
7929 -- Fetch the structure version id for the task version id.
7930
7931 -- PA L Changes 3010538
7932
7933 -- Bug 7390781
7934 IF (nvl(p_structure_updates_flag, 'Y') = 'Y') THEN
7935
7936 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id --Bug 3106457 p_pa_project_id
7937 ,p_structure_version_id => l_structure_version_id ) ;
7938
7939 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
7940 IF p_process_mode = 'ONLINE' THEN
7941
7942 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
7943 ,p_project_id => l_project_id --Bug 3106457 p_pa_project_id
7944 ,p_structure_version_id => l_structure_version_id
7945 ,x_return_status => p_return_status
7946 ,x_msg_count => p_msg_count
7947 ,x_msg_data => p_msg_data ) ;
7948
7949 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7950 THEN
7951 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7952 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
7953 THEN
7954 RAISE FND_API.G_EXC_ERROR;
7955 END IF;
7956 ELSIF p_process_mode = 'CONCURRENT' THEN
7957
7958 PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
7959 ,p_project_id => l_project_id -- Bug 3106457 p_pa_project_id
7960 ,p_structure_version_id => l_structure_version_id
7961 ,x_return_status => p_return_status
7962 ,x_msg_count => p_msg_count
7963 ,x_msg_data => p_msg_data ) ;
7964
7965 IF p_return_status = FND_API.G_RET_STS_UNEXP_ERROR
7966 THEN
7967 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7968 ELSIF p_return_status = FND_API.G_RET_STS_ERROR
7969 THEN
7970 RAISE FND_API.G_EXC_ERROR;
7971 END IF;
7972
7973
7974 END IF ;
7975 END IF ;
7976 END IF;
7977 END IF ;
7978
7979 -- PA L Changes 3010538
7980
7981 EXCEPTION
7982 WHEN FND_API.G_EXC_ERROR
7983 THEN
7984 p_return_status := FND_API.G_RET_STS_ERROR;
7985 p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7986
7987 p_project_id := NULL ; -- 4537865
7988 p_task_id := NULL; -- 4537865
7989
7990 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
7991 THEN
7992
7993 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7994 p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
7995
7996 p_project_id := NULL ; -- 4537865
7997 p_task_id := NULL; -- 4537865
7998
7999 WHEN OTHERS THEN
8000 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8001 p_msg_count := FND_MSG_PUB.count_msg; -- For Bug 4033410
8002
8003 p_project_id := NULL ; -- 4537865
8004 p_task_id := NULL; -- 4537865
8005
8006 END delete_task;
8007
8008
8009 --------------------------------------------------------------------------------
8010 --Name: init_project
8011 --Type: Procedure
8012 --Description: This procedure can be used to initialize the global PL/SQL
8013 -- tables that are used by a LOAD/EXECUTE/FETCH cycle.
8014 --
8015 --
8016 --Called subprograms:
8017 --
8018 --
8019 --
8020 --History:
8021 -- 16-AUG-1996 L. de Werker Created
8022 -- 30-AUG-1996 L. de Werker Parameterlist removed.
8023 -- 10-JAN-1997 L. de Werker Changed name from INIT_CREATE_PROJECT to INIT_PROJECT
8024 --
8025 PROCEDURE init_project
8026
8027 IS
8028
8029 BEGIN
8030
8031 FND_MSG_PUB.Initialize;
8032
8033 -- Initialize global table and record types
8034
8035 G_project_in_rec := G_project_in_null_rec;
8036 G_key_members_in_tbl.delete;
8037 G_deliverables_in_tbl.delete;
8038 G_deliverable_actions_in_tbl.delete; --bug 343590
8039 G_class_categories_in_tbl.delete; --bug 343590
8040 G_tasks_in_tbl.delete;
8041 -- anlee org role changes
8042 G_org_roles_in_tbl.delete;
8043
8044 G_key_members_tbl_count := 0;
8045 G_deliverables_in_tbl_count := 0; --bug 343590
8046 G_dlvr_actions_in_tbl_count := 0; --bug 343590
8047 G_class_categories_tbl_count := 0;
8048 G_tasks_tbl_count := 0;
8049 -- anlee org role changes
8050 G_org_roles_tbl_count := 0;
8051
8052 G_project_out_rec := G_project_out_null_rec;
8053 G_tasks_out_tbl.delete;
8054 --Project Connect 4.0
8055 G_struc_out_tbl.delete;
8056 --Project Connect 4.0
8057
8058 -- <EA Extensible Attributes changes>
8059 G_ext_attr_in_tbl.delete;
8060 G_ext_attr_tbl_count := 0;
8061 -- </EA Extensible Attributes changes>
8062 --Bug#3646465. Clear the Task assignment tables.
8063 PA_TASK_ASSIGNMENTS_PUB.init_task_assignments;
8064 END init_project;
8065
8066
8067 --------------------------------------------------------------------------------
8068 --Name: load_project
8069 --Type: Procedure
8070 --Description: This procedure can be used to move the project related
8071 -- parameters from the client side to a record on the server side
8072 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8073 --
8074 --Called subprograms:
8075 --
8076 --
8077 --
8078 --History:
8079 -- 19-AUG-1996 L. de Werker Created
8080
8081 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
8082 -- 28-NOV-1996 L. de Werker Added 11 parameters for descriptive flexfields
8083 --
8084 --
8085
8086 PROCEDURE load_project
8087 ( p_api_version_number IN NUMBER
8088 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8089 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8090 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8091 ,p_pa_project_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8092 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8093 ,p_project_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8094 ,p_long_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8095 ,p_created_from_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8096 ,p_carrying_out_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8097 ,p_public_sector_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8098 ,p_project_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8099 ,p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8100 ,p_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8101 ,p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8102 ,p_distribution_rule IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8103 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8104 ,p_project_relationship_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8105 ,p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8106 ,p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8107 ,p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8108 ,p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8109 ,p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8110 ,p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8111 ,p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8112 ,p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8113 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8114 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8115 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8116 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8117 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8118 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8119 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8120 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8121 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8122 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8123 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8124 ,p_output_tax_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8125 ,p_retention_tax_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8126 ,p_project_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8127 ,p_allow_cross_charge_flag IN VARCHAR2 :=
8128 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8129 ,p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8130 ,p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8131 ,p_cc_process_labor_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8132 ,p_labor_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8133 ,p_labor_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8134 ,p_cc_process_nl_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8135 ,p_nl_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8136 ,p_nl_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8137 ,p_cc_tax_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8138 ,p_role_list_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8139 ,p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8140 ,p_calendar_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8141 ,p_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8142 ,p_probability_member_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8143 ,p_project_value IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8144 ,p_expected_approval_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8145 ,p_cost_job_group_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8146 ,p_bill_job_group_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8147 ,p_emp_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8148 ,p_job_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8149 --Sakthi MCB
8150 ,p_invproc_currency_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8151 ,p_revproc_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8152 ,p_project_bil_rate_date_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8153 ,p_project_bil_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8154 ,p_project_bil_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8155 ,p_project_bil_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8156 ,p_projfunc_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8157 ,p_projfunc_bil_rate_date_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8158 ,p_projfunc_bil_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8159 ,p_projfunc_bil_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8160 ,p_projfunc_bil_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8161 ,p_funding_rate_date_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8162 ,p_funding_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8163 ,p_funding_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8164 ,p_funding_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8165 ,p_baseline_funding_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8166 ,p_multi_currency_billing_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8167 ,p_competence_match_wt IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8168 ,p_availability_match_wt IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8169 ,p_job_level_match_wt IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8170 ,p_enable_automated_search IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8171 ,p_search_min_availability IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8172 ,p_search_org_hier_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8173 ,p_search_starting_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8174 ,p_search_country_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8175 ,p_min_cand_score_reqd_for_nom IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8176 ,p_max_num_of_sys_nom_cand IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8177 ,p_non_lab_std_bill_rt_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8178 ,p_search_country_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8179 ,p_inv_by_bill_trans_curr_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8180 ,p_projfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8181 ,p_projfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8182 --Sakthi MCB
8183 --Sakthi Structure
8184 ,p_assign_precedes_task IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8185 ,p_split_cost_from_wokplan_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8186 ,p_split_cost_from_bill_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8187 --Sakthi Structure
8188 --Advertisement
8189 ,p_adv_action_set_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8190 ,p_start_adv_action_set_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8191 --Advertisement
8192 --Project Setup
8193 ,p_priority_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8194 --Project Setup
8195 --Retention
8196 ,p_retn_billing_inv_format_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8197 ,p_retn_accounting_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8198 --Retention
8199 -- anlee opportunity changes
8200 ,p_opp_value_currency_code VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8201 -- anlee
8202 -- patchset K changes
8203 ,p_revaluate_funding_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8204 ,p_include_gains_losses_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8205 -- msundare
8206 ,p_security_level IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8207 ,p_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8208 ,p_non_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8209 -- End of changes
8210 --PA L changes -- bug 2872708 --load_project
8211 ,p_asset_allocation_method VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8212 ,p_capital_event_processing VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8213 ,p_cint_rate_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8214 ,p_cint_eligible_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8215 ,p_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8216 --end PA L changes -- bug 2872708
8217 -- car changes
8218 ,p_bill_To_Customer_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug 3728734
8219 ,p_ship_To_Customer_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug 3728734
8220 -- car changes
8221 -- PA L Changes 3010538
8222 ,p_process_mode VARCHAR2 :='ONLINE'
8223 -- FP M changes begin (venkat)
8224 ,p_sys_program_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8225 , p_allow_multi_program_rollup IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Bug # 5072032.
8226 ,p_enable_top_task_cust_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8227 ,p_enable_top_task_inv_mth_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8228 ,p_projfunc_attr_for_ar_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8229 -- FP M changes end (venkat)
8230 ,p_ar_rec_notify_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 7508661 : EnC
8231 ,p_auto_release_pwp_inv IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 7508661 : EnC
8232 ,p_bill_labor_accrual IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR /* Added for 12.2Payroll billing ER 11899223 */
8233 --,p_adj_on_std_inv IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR /* Added for 12.2Payroll billing ER 11899223 */
8234 )
8235
8236 IS
8237
8238 l_api_name CONSTANT VARCHAR2(30) := 'load_project';
8239
8240
8241 BEGIN
8242
8243 -- Standard begin of API savepoint
8244
8245 SAVEPOINT load_project_pub;
8246
8247 -- Standard call to check for call compatibility.
8248
8249 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
8250 p_api_version_number ,
8251 l_api_name ,
8252 G_PKG_NAME )
8253 THEN
8254
8255 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8256
8257 END IF;
8258
8259 -- Initialize the message table if requested.
8260
8261 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8262 THEN
8263
8264 FND_MSG_PUB.initialize;
8265
8266 END IF;
8267
8268 -- Set API return status to success
8269
8270 p_return_status := FND_API.G_RET_STS_SUCCESS;
8271
8272 -- assign incoming parameters to the fields of global project record
8273
8274 G_project_in_rec.pa_project_id := p_pa_project_id;
8275 G_project_in_rec.pa_project_number := p_pa_project_number;
8276 -- G_project_in_rec.pm_project_reference := p_pm_project_reference;
8277 G_project_in_rec.pm_project_reference := substrb(p_pm_project_reference,1,25); -- modified for bug 4998328
8278 G_project_in_rec.project_name := p_project_name;
8279 G_project_in_rec.long_name := p_long_name;
8280 G_project_in_rec.created_from_project_id := p_created_from_project_id;
8281 G_project_in_rec.carrying_out_organization_id := p_carrying_out_organization_id;
8282 G_project_in_rec.public_sector_flag := p_public_sector_flag;
8283 G_project_in_rec.project_status_code := p_project_status_code;
8284 G_project_in_rec.description := p_description;
8285 G_project_in_rec.start_date := p_start_date;
8286 G_project_in_rec.completion_date := p_completion_date;
8287 G_project_in_rec.distribution_rule := p_distribution_rule;
8288 G_project_in_rec.customer_id := p_customer_id;
8289 G_project_in_rec.project_relationship_code := p_project_relationship_code;
8290 G_project_in_rec.actual_start_date := p_actual_start_date;
8291 G_project_in_rec.actual_finish_date := p_actual_finish_date;
8292 G_project_in_rec.early_start_date := p_early_start_date;
8293 G_project_in_rec.early_finish_date := p_early_finish_date;
8294 G_project_in_rec.late_start_date := p_late_start_date;
8295 G_project_in_rec.late_finish_date := p_late_finish_date;
8296 G_project_in_rec.scheduled_start_date :=
8297 p_scheduled_start_date;
8298 G_project_in_rec.scheduled_finish_date :=
8299 p_scheduled_finish_date;
8300 G_project_in_rec.attribute_category := p_attribute_category;
8301 G_project_in_rec.attribute1 := p_attribute1;
8302 G_project_in_rec.attribute2 := p_attribute2;
8303 G_project_in_rec.attribute3 := p_attribute3;
8304 G_project_in_rec.attribute4 := p_attribute4;
8305 G_project_in_rec.attribute5 := p_attribute5;
8306 G_project_in_rec.attribute6 := p_attribute6;
8307 G_project_in_rec.attribute7 := p_attribute7;
8308 G_project_in_rec.attribute8 := p_attribute8;
8309 G_project_in_rec.attribute9 := p_attribute9;
8310 G_project_in_rec.attribute10 := p_attribute10;
8311
8312 -- Tax Code Changes starts ...
8313
8314 G_project_in_rec.output_tax_code := p_output_tax_code;
8315 G_project_in_rec.output_tax_code := p_retention_tax_code;
8316
8317 -- IC and Multi National Currency changes Starts ...
8318
8319 G_project_in_rec.project_currency_code := p_project_currency_code;
8320 G_project_in_rec.allow_cross_charge_flag := p_allow_cross_charge_flag;
8321 G_project_in_rec.project_rate_date := p_project_rate_date;
8322 G_project_in_rec.project_rate_type := p_project_rate_type;
8323
8324 G_project_in_rec.cc_process_labor_flag := p_cc_process_labor_flag;
8325 G_project_in_rec.labor_tp_schedule_id := p_labor_tp_schedule_id;
8326 G_project_in_rec.labor_tp_fixed_date := p_labor_tp_fixed_date;
8327 G_project_in_rec.cc_process_nl_flag := p_cc_process_nl_flag;
8328 G_project_in_rec.nl_tp_schedule_id := p_nl_tp_schedule_id;
8329 G_project_in_rec.nl_tp_fixed_date := p_nl_tp_fixed_date;
8330 G_project_in_rec.cc_tax_task_id := p_cc_tax_task_id;
8331
8332 -- IC and Multi National Currency changes Ends ...
8333
8334 -- ORM Code change starts here ...
8335
8336 G_project_in_rec.role_list_id := p_role_list_id;
8337 G_project_in_rec.work_type_id := p_work_type_id;
8338 G_project_in_rec.calendar_id := p_calendar_id;
8339 G_project_in_rec.probability_member_id := p_probability_member_id;
8340 G_project_in_rec.project_value := p_project_value;
8341 G_project_in_rec.expected_approval_date := p_expected_approval_date;
8342 G_project_in_rec.cost_job_group_id := p_cost_job_group_id;
8343 G_project_in_rec.bill_job_group_id := p_bill_job_group_id;
8344
8345 -- ORM Code change ends here ...
8346
8347 G_project_in_rec.emp_bill_rate_schedule_id := p_emp_bill_rate_schedule_id;
8348 G_project_in_rec.job_bill_rate_schedule_id := p_job_bill_rate_schedule_id;
8349
8350 --Sakthi MCB
8351 G_project_in_rec.competence_match_wt := p_competence_match_wt;
8352 G_project_in_rec.availability_match_wt := p_availability_match_wt;
8353 G_project_in_rec.job_level_match_wt := p_job_level_match_wt;
8354 G_project_in_rec.enable_automated_search := p_enable_automated_search;
8355 G_project_in_rec.search_min_availability := p_search_min_availability;
8356 G_project_in_rec.search_org_hier_id := p_search_org_hier_id;
8357 G_project_in_rec.search_starting_org_id := p_search_starting_org_id;
8358 G_project_in_rec.search_country_code := p_search_country_code;
8359 G_project_in_rec.min_cand_score_reqd_for_nom := p_min_cand_score_reqd_for_nom;
8360 G_project_in_rec.non_lab_std_bill_rt_sch_id := p_non_lab_std_bill_rt_sch_id;
8361 G_project_in_rec.invproc_currency_type := p_invproc_currency_type;
8362 G_project_in_rec.revproc_currency_code := p_revproc_currency_code;
8363 G_project_in_rec.project_bil_rate_date_code := p_project_bil_rate_date_code;
8364 G_project_in_rec.project_bil_rate_type := p_project_bil_rate_type;
8365 G_project_in_rec.project_bil_rate_date := p_project_bil_rate_date;
8366 G_project_in_rec.project_bil_exchange_rate := p_project_bil_exchange_rate;
8367 G_project_in_rec.projfunc_currency_code := p_projfunc_currency_code;
8368 G_project_in_rec.projfunc_bil_rate_date_code := p_projfunc_bil_rate_date_code;
8369 G_project_in_rec.projfunc_bil_rate_type := p_projfunc_bil_rate_type;
8370 G_project_in_rec.projfunc_bil_rate_date := p_projfunc_bil_rate_date;
8371 G_project_in_rec.projfunc_bil_exchange_rate := p_projfunc_bil_exchange_rate;
8372 G_project_in_rec.funding_rate_date_code := p_funding_rate_date_code;
8373 G_project_in_rec.funding_rate_type := p_funding_rate_type;
8374 G_project_in_rec.funding_rate_date := p_funding_rate_date;
8375 G_project_in_rec.funding_exchange_rate := p_funding_exchange_rate;
8376 G_project_in_rec.baseline_funding_flag := p_baseline_funding_flag;
8377 G_project_in_rec.projfunc_cost_rate_type := p_projfunc_cost_rate_type;
8378 G_project_in_rec.projfunc_cost_rate_date := p_projfunc_cost_rate_date;
8379 G_project_in_rec.inv_by_bill_trans_curr_flag := p_inv_by_bill_trans_curr_flag;
8380 G_project_in_rec.multi_currency_billing_flag := p_multi_currency_billing_flag;
8381 --Sakthi MCB
8382 --Sakthi Structure
8383 G_project_in_rec.assign_precedes_task := p_assign_precedes_task;
8384 G_project_in_rec.split_cost_from_workplan_flag := p_split_cost_from_wokplan_flag;
8385 G_project_in_rec.split_cost_from_bill_flag := p_split_cost_from_bill_flag;
8386 --Sakthi Structure
8387 --Advertisement
8388 G_project_in_rec.adv_action_set_id := p_adv_action_set_id;
8389 G_project_in_rec.start_adv_action_set_flag := p_start_adv_action_set_flag;
8390 --Advertisement
8391 --Project Setup
8392 G_project_in_rec.priority_code := p_priority_code;
8393 --Project Setup
8394 --Retention
8395 G_project_in_rec.retn_billing_inv_format_id := p_retn_billing_inv_format_id;
8396 G_project_in_rec.retn_accounting_flag := p_retn_accounting_flag;
8397 --Retention
8398
8399 -- anlee opportunity changes
8400 G_project_in_rec.opp_value_currency_code := p_opp_value_currency_code;
8401
8402 -- anlee
8403 -- patchset K changes
8404 G_project_in_rec.revaluate_funding_flag := p_revaluate_funding_flag;
8405 G_project_in_rec.include_gains_losses_flag := p_include_gains_losses_flag;
8406 -- msundare
8407 G_project_in_rec.security_level := p_security_level;
8408 G_project_in_rec.labor_disc_reason_code := p_labor_disc_reason_code;
8409 G_project_in_rec.non_labor_disc_reason_code := p_non_labor_disc_reason_code;
8410 -- End of changes
8411
8412 --PA L Changes 2872708
8413 G_project_in_rec.asset_allocation_method := p_asset_allocation_method;
8414 G_project_in_rec.capital_event_processing := p_capital_event_processing;
8415 G_project_in_rec.cint_rate_sch_id := p_cint_rate_sch_id;
8416 G_project_in_rec.cint_eligible_flag := p_cint_eligible_flag;
8417 G_project_in_rec.cint_stop_date := p_cint_stop_date;
8418 --PA L Changes 2872708
8419
8420 --CAR changes: bug 2943284
8421 G_project_in_rec.Bill_to_customer_id :=P_bill_to_customer_id;
8422 G_project_in_rec.Ship_to_customer_id :=P_Ship_To_customer_id;
8423
8424 -- PA L Changes 3010538
8425 G_project_in_rec.process_mode :=p_process_mode ;
8426
8427 -- FP_M changes begin (venkat)
8428 G_project_in_rec.sys_program_flag := p_sys_program_flag;
8429 G_project_in_rec.allow_multi_program_rollup := p_allow_multi_program_rollup; -- Bug # 5072032.
8430
8431 -- FP_M changes end (venkat)
8432 --Bug 3279981. FP_M Project setup changes
8433 G_project_in_rec.enable_top_task_customer_flag := p_enable_top_task_cust_flag ;
8434 G_project_in_rec.enable_top_task_inv_mth_flag := p_enable_top_task_inv_mth_flag ;
8435 --Bug 3279981. FP_M Project setup changes
8436 G_project_in_rec.ar_rec_notify_flag := p_ar_rec_notify_flag ;
8437 G_project_in_rec.auto_release_pwp_inv := p_auto_release_pwp_inv ;
8438
8439 G_project_in_rec.bill_labor_accrual := p_bill_labor_accrual ; /* Added for 12.2Payroll billing ER 11899223 */
8440 -- G_project_in_rec.adj_on_std_inv := p_adj_on_std_inv ; /* Added for 12.2Payroll billing ER 11899223 */
8441
8442
8443 EXCEPTION
8444
8445 WHEN FND_API.G_EXC_ERROR
8446 THEN
8447 ROLLBACK TO load_project_pub;
8448
8449 p_return_status := FND_API.G_RET_STS_ERROR;
8450
8451
8452 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8453 THEN
8454 ROLLBACK TO load_project_pub;
8455
8456 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8457
8458
8459 WHEN OTHERS THEN
8460 ROLLBACK TO load_project_pub;
8461
8462 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8463
8464 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8465 THEN
8466 FND_MSG_PUB.add_exc_msg
8467 ( p_pkg_name => G_PKG_NAME
8468 , p_procedure_name => l_api_name );
8469
8470 END IF;
8471
8472
8473 END load_project;
8474
8475
8476 --------------------------------------------------------------------------------
8477 --Name: load_key_member
8478 --Type: Procedure
8479 --Description: This procedure can be used to move a key member
8480 -- from the client side to a PL/SQL table on the server side
8481 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8482 --
8483 --Called subprograms:
8484 --
8485 --
8486 --
8487 --History:
8488 -- 19-AUG-1996 L. de Werker Created
8489 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
8490 --
8491
8492 PROCEDURE load_key_member
8493 ( p_api_version_number IN NUMBER
8494 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8495 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8496 ,p_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8497 ,p_project_role_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8498 ,p_project_role_meaning IN VARCHAR2:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added for Bug 6408593
8499 ,p_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8500 ,p_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE )
8501
8502 IS
8503
8504 l_api_name CONSTANT VARCHAR2(30) := 'load_key_member';
8505 i NUMBER;
8506
8507
8508 BEGIN
8509
8510 -- Standard begin of API savepoint
8511
8512 SAVEPOINT load_key_member_pub;
8513
8514 -- Standard call to check for call compatibility.
8515
8516 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
8517 p_api_version_number ,
8518 l_api_name ,
8519 G_PKG_NAME )
8520 THEN
8521
8522 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8523
8524 END IF;
8525
8526 -- Initialize the message table if requested.
8527
8528 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8529 THEN
8530
8531 FND_MSG_PUB.initialize;
8532
8533 END IF;
8534
8535 -- Set API return status to success
8536
8537 p_return_status := FND_API.G_RET_STS_SUCCESS;
8538
8539 -- Load the table only if a valid person id is passed
8540
8541 IF (p_person_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8542 (p_person_id IS NOT NULL) THEN
8543
8544 -- assign a value to the global counter for this table
8545 G_key_members_tbl_count := G_key_members_tbl_count + 1;
8546 -- assign incoming parameters to the global table fields
8547 G_key_members_in_tbl(G_key_members_tbl_count).person_id := p_person_id;
8548 G_key_members_in_tbl(G_key_members_tbl_count).project_role_type
8549 := p_project_role_type;
8550 G_key_members_in_tbl(G_key_members_tbl_count).project_role_meaning
8551 := p_project_role_meaning; --Added for bug 6408593
8552 G_key_members_in_tbl(G_key_members_tbl_count).start_date := p_start_date;
8553 G_key_members_in_tbl(G_key_members_tbl_count).end_date := p_end_date;
8554
8555 END IF;
8556
8557
8558 EXCEPTION
8559
8560 WHEN FND_API.G_EXC_ERROR
8561 THEN
8562 ROLLBACK TO load_key_member_pub;
8563
8564 p_return_status := FND_API.G_RET_STS_ERROR;
8565
8566
8567 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8568 THEN
8569 ROLLBACK TO load_key_member_pub;
8570
8571 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8572
8573
8574 WHEN OTHERS THEN
8575 ROLLBACK TO load_key_member_pub;
8576
8577 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8578
8579 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8580 THEN
8581 FND_MSG_PUB.add_exc_msg
8582 ( p_pkg_name => G_PKG_NAME
8583 , p_procedure_name => l_api_name );
8584
8585 END IF;
8586
8587
8588 END load_key_member;
8589
8590
8591 -- anlee org role changes
8592 --------------------------------------------------------------------------------
8593 --Name: load_org_role
8594 --Type: Procedure
8595 --Description: This procedure can be used to move an org role
8596 -- from the client side to a PL/SQL table on the server side
8597 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8598 --
8599 --Called subprograms:
8600 --
8601 --
8602 --
8603 --History:
8604 -- 20-MAR-2002 anlee Created
8605
8606 PROCEDURE load_org_role
8607 ( p_api_version_number IN NUMBER
8608 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8609 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8610 ,p_resource_source_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8611 ,p_project_role_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8612 ,p_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8613 ,p_end_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE )
8614
8615 IS
8616
8617 l_api_name CONSTANT VARCHAR2(30) := 'load_org_role';
8618 i NUMBER;
8619
8620
8621 BEGIN
8622
8623 -- Standard begin of API savepoint
8624
8625 SAVEPOINT load_org_role_pub;
8626
8627 -- Standard call to check for call compatibility.
8628
8629 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
8630 p_api_version_number ,
8631 l_api_name ,
8632 G_PKG_NAME )
8633 THEN
8634
8635 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8636
8637 END IF;
8638
8639 -- Initialize the message table if requested.
8640
8641 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8642 THEN
8643
8644 FND_MSG_PUB.initialize;
8645
8646 END IF;
8647
8648 -- Set API return status to success
8649
8650 p_return_status := FND_API.G_RET_STS_SUCCESS;
8651
8652 -- Load the table only if a valid resource source id is passed
8653
8654 IF (p_resource_source_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
8655 (p_resource_source_id IS NOT NULL) THEN
8656
8657 -- assign a value to the global counter for this table
8658 G_org_roles_tbl_count := G_org_roles_tbl_count + 1;
8659 -- assign incoming parameters to the global table fields
8660 G_org_roles_in_tbl(G_org_roles_tbl_count).person_id := p_resource_source_id;
8661 G_org_roles_in_tbl(G_org_roles_tbl_count).project_role_type
8662 := p_project_role_type;
8663 G_org_roles_in_tbl(G_org_roles_tbl_count).start_date := p_start_date;
8664 G_org_roles_in_tbl(G_org_roles_tbl_count).end_date := p_end_date;
8665
8666 END IF;
8667
8668
8669 EXCEPTION
8670
8671 WHEN FND_API.G_EXC_ERROR
8672 THEN
8673 ROLLBACK TO load_org_role_pub;
8674
8675 p_return_status := FND_API.G_RET_STS_ERROR;
8676
8677
8678 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8679 THEN
8680 ROLLBACK TO load_org_role_pub;
8681
8682 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8683
8684
8685 WHEN OTHERS THEN
8686 ROLLBACK TO load_org_role_pub;
8687
8688 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8689
8690 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8691 THEN
8692 FND_MSG_PUB.add_exc_msg
8693 ( p_pkg_name => G_PKG_NAME
8694 , p_procedure_name => l_api_name );
8695
8696 END IF;
8697
8698
8699 END load_org_role;
8700
8701
8702
8703 --------------------------------------------------------------------------------
8704 --Name: load_class_category
8705 --Type: Procedure
8706 --Description: This procedure can be used to move a class category
8707 -- from the client side to a PL/SQL table on the server side
8708 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8709 --
8710 --Called subprograms:
8711 --
8712 --
8713 --
8714 --History:
8715 -- 19-AUG-1996 L. de Werker Created
8716 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
8717 --
8718
8719 PROCEDURE load_class_category
8720 ( p_api_version_number IN NUMBER
8721 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8722 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8723 ,p_class_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8724 ,p_class_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8725 ,p_new_class_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added for Bug 7028230
8726 ,p_code_percentage IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
8727
8728 IS
8729
8730 l_api_name CONSTANT VARCHAR2(30) := 'load_class_categories';
8731 i NUMBER;
8732 l_code_percentage NUMBER;
8733 l_new_class_code VARCHAR2(30); -- Added for Bug 7028230
8734
8735 BEGIN
8736
8737 -- Standard begin of API savepoint
8738
8739 SAVEPOINT load_class_category_pub;
8740
8741 -- Standard call to check for call compatibility.
8742
8743 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
8744 p_api_version_number ,
8745 l_api_name ,
8746 G_PKG_NAME )
8747 THEN
8748
8749 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8750
8751 END IF;
8752
8753 -- Initialize the message table if requested.
8754
8755 IF FND_API.TO_BOOLEAN( p_init_msg_list )
8756 THEN
8757
8758 FND_MSG_PUB.initialize;
8759
8760 END IF;
8761
8762 -- Set API return status to success
8763
8764 p_return_status := FND_API.G_RET_STS_SUCCESS;
8765
8766 -- Load the table only if a valid class category id is passed
8767
8768 IF (p_class_category <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
8769 (p_class_category IS NOT NULL )
8770 AND (p_class_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
8771 (p_class_code IS NOT NULL ) THEN
8772
8773 -- assign a value to the global counter for this table
8774 G_class_categories_tbl_count := G_class_categories_tbl_count + 1;
8775
8776 if p_code_percentage = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
8777 l_code_percentage := NULL;
8778 else
8779 l_code_percentage := p_code_percentage;
8780 end if;
8781
8782 /* Added for Bug 7028230 */
8783 if p_new_class_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
8784 l_code_percentage := NULL;
8785 else
8786 l_new_class_code := p_new_class_code;
8787 end if;
8788
8789 -- assign incoming parameters to the global table fields
8790 G_class_categories_in_tbl(G_class_categories_tbl_count).class_category
8791 := p_class_category;
8792 G_class_categories_in_tbl(G_class_categories_tbl_count).class_code
8793 := p_class_code;
8794 G_class_categories_in_tbl(G_class_categories_tbl_count).code_percentage
8795 := l_code_percentage;
8796 /* Added for Bug 7028230 */
8797 G_class_categories_in_tbl(G_class_categories_tbl_count).new_class_code := l_new_class_code;
8798
8799 END IF;
8800
8801
8802 EXCEPTION
8803
8804 WHEN FND_API.G_EXC_ERROR
8805 THEN
8806 ROLLBACK TO load_class_category_pub;
8807
8808 p_return_status := FND_API.G_RET_STS_ERROR;
8809
8810
8811 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
8812 THEN
8813 ROLLBACK TO load_class_category_pub;
8814
8815 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8816
8817
8818 WHEN OTHERS THEN
8819 ROLLBACK TO load_class_category_pub;
8820
8821 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8822
8823 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
8824 THEN
8825 FND_MSG_PUB.add_exc_msg
8826 ( p_pkg_name => G_PKG_NAME
8827 , p_procedure_name => l_api_name );
8828
8829 END IF;
8830
8831 END load_class_category;
8832
8833 --------------------------------------------------------------------------------
8834 --Name: load_task
8835 --Type: Procedure
8836 --Description: This procedure can be used to move a task
8837 -- from the client side to a PL/SQL table on the server side
8838 -- , where it will be used by a LOAD/EXECUTE/FETCH cycle.
8839 --
8840 --Called subprograms:
8841 --
8842 --
8843 --
8844 --History:
8845 -- 19-AUG-1996 L. de Werker Created
8846 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
8847 -- 28-NOV-1996 L. de Werker Added 11 parameters for descriptive flexfields
8848 -- 10-DEC-1996 L. de Werker Added parameter p_pa_parent_task_id
8849 -- Added parameter p_address_id
8850 -- 15-JUL-2003 sramesh Commented a code for bug 2982057
8851 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
8852 -- dependency_type and lag days to tasks and create dependencies.
8853 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
8854 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
8855 -- 19-FEB-2004 Rakesh Raghavan Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK.
8856 -- 05-APR-2004 Rakesh Raghavan Progress Management Changes. Bug # 3420093.
8857
8858 PROCEDURE load_task
8859 ( p_api_version_number IN NUMBER
8860 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
8861 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
8862 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8863 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8864 ,p_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8865 ,p_long_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8866 ,p_pa_task_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8867 ,p_task_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8868 ,p_task_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8869 ,p_task_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8870 ,p_pm_parent_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8871 ,p_pa_parent_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8872 ,p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8873 ,p_carrying_out_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8874 ,p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8875 ,p_task_manager_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8876 ,p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8877 ,p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8878 ,p_ready_to_bill_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8879 ,p_ready_to_distribute_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8880 ,p_limit_to_txn_controls_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8881 ,p_labor_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8882 ,p_labor_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8883 ,p_labor_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8884 ,p_labor_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8885 ,p_nl_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8886 ,p_nl_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8887 ,p_nl_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8888 ,p_nl_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8889 ,p_labor_cost_multiplier_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8890 ,p_cost_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8891 ,p_rev_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8892 ,p_inv_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8893 ,p_cost_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8894 ,p_rev_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8895 ,p_inv_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8896 ,p_labor_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8897 ,p_nl_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8898 , p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8899 , p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8900 , p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8901 , p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8902 , p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8903 , p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8904 , p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8905 , p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8906 ,p_tasks_dff IN VARCHAR2 := 'N' --bug 6153503
8907 ,p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8908 ,p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8909 ,p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8910 ,p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8911 ,p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8912 ,p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8913 ,p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8914 ,p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8915 ,p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8916 ,p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8917 ,p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8918 --bug 6153503
8919 ,p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8920 ,p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8921 ,p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8922 ,p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8923 ,p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8924 --end bug 6153503
8925 ,p_allow_cross_charge_flag IN VARCHAR2 :=
8926 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8927 ,p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8928 ,p_project_rate_type IN VARCHAR2 :=
8929 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8930 ,p_cc_process_labor_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8931 ,p_labor_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8932 ,p_labor_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8933 ,p_cc_process_nl_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8934 ,p_nl_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8935 ,p_nl_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8936 ,p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8937 ,p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8938 ,p_emp_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8939 ,p_job_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8940 --Sakthi MCB
8941 ,p_non_lab_std_bill_rt_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8942 ,p_taskfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8943 ,p_taskfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8944 --Sakthi MCB
8945 ,p_display_sequence IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8946 ,p_wbs_level IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8947 --Project Structure
8948 ,P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8949 ,P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8950 ,P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8951 ,P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8952 ,P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8953 ,P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8954 ,P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8955 ,P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8956 ,P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8957 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8958 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8959 ,P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8960 ,P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8961 ,P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8962 ,P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8963 ,P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8964 ,P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8965 ,P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8966 ,P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8967 ,P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8968 ,P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8969 ,P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8970 --Project Structure
8971 ,p_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8972 ,p_non_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8973 --PA L changes -- bug 2872708
8974 ,p_retirement_cost_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8975 ,p_cint_eligible_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8976 ,p_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8977 --end PA L changes -- bug 2872708
8978 -- FP-M Bug # 3301192
8979 ,p_pred_string VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8980 -- ,p_pred_delimiter VARCHAR2 DEFAULT ','
8981 ,p_pred_delimiter IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8982 -- FP M changes begin (venkat)
8983 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8984 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8985 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8986 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
8987 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8988 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8989 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8990 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8991 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8992 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8993 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8994 -- FP M changes end (venkat)
8995 -- FP M changes start (Mapping )
8996 ,p_financial_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8997 ,p_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
8998 ,p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
8999 -- FP M changes end (Mapping )
9000 ,p_deliverable IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9001 ,p_deliverable_id IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM -- 3661788 Added IN parameter
9002 -- (begin venkat) new params for bug #3450684 --------------------------------------
9003 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
9004 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
9005 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
9006 -- (end venkat) new params for bug #3450684 ----------------------------------------
9007
9008 -- Progress Management Changes. Bug # 3420093.
9009 ,p_etc_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9010 ,p_percent_complete IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9011 ,p_adj_on_std_inv IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR /* Added for 12.2Payroll billing ER 11899223 */
9012 -- Progress Management Changes. Bug # 3420093.
9013
9014 )
9015 IS
9016
9017 l_api_name CONSTANT VARCHAR2(30) := 'load_task';
9018 i NUMBER;
9019
9020
9021 BEGIN
9022
9023 -- Standard begin of API savepoint
9024
9025 SAVEPOINT load_task_pub;
9026
9027 -- Standard call to check for call compatibility.
9028
9029 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
9030 p_api_version_number ,
9031 l_api_name ,
9032 G_PKG_NAME )
9033 THEN
9034
9035 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9036
9037 END IF;
9038
9039 -- Initialize the message table if requested.
9040
9041 IF FND_API.TO_BOOLEAN( p_init_msg_list )
9042 THEN
9043
9044 FND_MSG_PUB.initialize;
9045
9046 END IF;
9047
9048 -- Set API return status to success
9049
9050 p_return_status := FND_API.G_RET_STS_SUCCESS;
9051
9052
9053 -- assign a value to the global counter for this table
9054 G_tasks_tbl_count := G_tasks_tbl_count + 1;
9055
9056
9057 -- assign incoming parameters to the global table fields
9058 --!!not needed G_tasks_in_tbl(G_tasks_tbl_count).pm_project_reference := p_pm_project_reference;
9059 G_tasks_in_tbl(G_tasks_tbl_count).pm_task_reference := p_pm_task_reference;
9060 -- Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK.
9061 G_tasks_in_tbl(G_tasks_tbl_count).task_name := substrb(p_task_name,1,240); --Bug 6193314
9062 --bug 2874207
9063 /* Commented the code for bug 2982057 and handling it in create_project and update_project
9064 IF p_long_task_name IS NULL OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9065 THEN
9066 G_tasks_in_tbl(G_tasks_tbl_count).long_task_name := p_task_name;
9067 ELSE
9068 */
9069 --As part of bug 2982057, there were changes done in create_proejct, update project apis which
9070 --copies the long task name from this global variable. If user passes long_task_name
9071 --then we need the following line be uncommented.
9072
9073 G_tasks_in_tbl(G_tasks_tbl_count).long_task_name := p_long_task_name;
9074
9075 -- END IF;
9076 --bug 2874207
9077 -- Modifications for Bug # 3379677 to fix: PA_PROJECT_PUB.LOAD_TASK
9078
9079 G_tasks_in_tbl(G_tasks_tbl_count).pa_task_number := substrb(p_pa_task_number,1,100); --Bug 6193314
9080
9081
9082
9083 G_tasks_in_tbl(G_tasks_tbl_count).task_description := substrb(p_task_description,1,250); -- Fix for Bug # 4513291.
9084 G_tasks_in_tbl(G_tasks_tbl_count).task_start_date := p_task_start_date;
9085 G_tasks_in_tbl(G_tasks_tbl_count).task_completion_date := p_task_completion_date;
9086 G_tasks_in_tbl(G_tasks_tbl_count).pm_parent_task_reference := p_pm_parent_task_reference;
9087 G_tasks_in_tbl(G_tasks_tbl_count).pa_parent_task_id := p_pa_parent_task_id;
9088 G_tasks_in_tbl(G_tasks_tbl_count).address_id := p_address_id;
9089 G_tasks_in_tbl(G_tasks_tbl_count).carrying_out_organization_id := p_carrying_out_organization_id;
9090 G_tasks_in_tbl(G_tasks_tbl_count).service_type_code := p_service_type_code;
9091 G_tasks_in_tbl(G_tasks_tbl_count).task_manager_person_id := p_task_manager_person_id;
9092 G_tasks_in_tbl(G_tasks_tbl_count).billable_flag := p_billable_flag;
9093 G_tasks_in_tbl(G_tasks_tbl_count).chargeable_flag := p_chargeable_flag;
9094 G_tasks_in_tbl(G_tasks_tbl_count).ready_to_bill_flag := p_ready_to_bill_flag;
9095 G_tasks_in_tbl(G_tasks_tbl_count).ready_to_distribute_flag := p_ready_to_distribute_flag;
9096 G_tasks_in_tbl(G_tasks_tbl_count).limit_to_txn_controls_flag := p_limit_to_txn_controls_flag;
9097 G_tasks_in_tbl(G_tasks_tbl_count).labor_bill_rate_org_id := p_labor_bill_rate_org_id;
9098 G_tasks_in_tbl(G_tasks_tbl_count).labor_std_bill_rate_schdl := p_labor_std_bill_rate_schdl;
9099 G_tasks_in_tbl(G_tasks_tbl_count).labor_schedule_fixed_date := p_labor_schedule_fixed_date;
9100 G_tasks_in_tbl(G_tasks_tbl_count).labor_schedule_discount := p_labor_schedule_discount;
9101 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_bill_rate_org_id := p_nl_bill_rate_org_id;
9102 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_std_bill_rate_schdl := p_nl_std_bill_rate_schdl;
9103 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_schedule_fixed_date := p_nl_schedule_fixed_date;
9104 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_schedule_discount := p_nl_schedule_discount;
9105 G_tasks_in_tbl(G_tasks_tbl_count).labor_cost_multiplier_name := p_labor_cost_multiplier_name;
9106 G_tasks_in_tbl(G_tasks_tbl_count).cost_ind_rate_sch_id := p_cost_ind_rate_sch_id;
9107 G_tasks_in_tbl(G_tasks_tbl_count).rev_ind_rate_sch_id := p_rev_ind_rate_sch_id;
9108 G_tasks_in_tbl(G_tasks_tbl_count).inv_ind_rate_sch_id := p_inv_ind_rate_sch_id;
9109 G_tasks_in_tbl(G_tasks_tbl_count).cost_ind_sch_fixed_date := p_cost_ind_sch_fixed_date;
9110 G_tasks_in_tbl(G_tasks_tbl_count).rev_ind_sch_fixed_date := p_rev_ind_sch_fixed_date;
9111 G_tasks_in_tbl(G_tasks_tbl_count).inv_ind_sch_fixed_date := p_inv_ind_sch_fixed_date;
9112 G_tasks_in_tbl(G_tasks_tbl_count).labor_sch_type := p_labor_sch_type;
9113 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_sch_type := p_nl_sch_type;
9114 G_tasks_in_tbl(G_tasks_tbl_count).pa_task_id := p_pa_task_id;
9115 G_tasks_in_tbl(G_tasks_tbl_count).actual_start_date :=
9116 p_actual_start_date;
9117 G_tasks_in_tbl(G_tasks_tbl_count).actual_finish_date :=
9118 p_actual_finish_date;
9119 G_tasks_in_tbl(G_tasks_tbl_count).early_start_date :=
9120 p_early_start_date;
9121 G_tasks_in_tbl(G_tasks_tbl_count).early_finish_date :=
9122 p_early_finish_date;
9123 G_tasks_in_tbl(G_tasks_tbl_count).late_start_date :=
9124 p_late_start_date;
9125 G_tasks_in_tbl(G_tasks_tbl_count).late_finish_date :=
9126 p_late_finish_date;
9127 G_tasks_in_tbl(G_tasks_tbl_count).scheduled_start_date :=
9128 p_scheduled_start_date;
9129 G_tasks_in_tbl(G_tasks_tbl_count).scheduled_finish_date :=
9130 p_scheduled_finish_date;
9131 G_tasks_in_tbl(G_tasks_tbl_count).tasks_dff :=p_tasks_dff; --bug 6153503
9132 G_tasks_in_tbl(G_tasks_tbl_count).attribute_category :=
9133 p_attribute_category;
9134 G_tasks_in_tbl(G_tasks_tbl_count).attribute1 :=
9135 p_attribute1;
9136 G_tasks_in_tbl(G_tasks_tbl_count).attribute2 :=
9137 p_attribute2;
9138 G_tasks_in_tbl(G_tasks_tbl_count).attribute3 :=
9139 p_attribute3;
9140 G_tasks_in_tbl(G_tasks_tbl_count).attribute4 :=
9141 p_attribute4;
9142 G_tasks_in_tbl(G_tasks_tbl_count).attribute5 :=
9143 p_attribute5;
9144 G_tasks_in_tbl(G_tasks_tbl_count).attribute6 :=
9145 p_attribute6;
9146 G_tasks_in_tbl(G_tasks_tbl_count).attribute7 :=
9147 p_attribute7;
9148 G_tasks_in_tbl(G_tasks_tbl_count).attribute8 :=
9149 p_attribute8;
9150 G_tasks_in_tbl(G_tasks_tbl_count).attribute9 :=
9151 p_attribute9;
9152 G_tasks_in_tbl(G_tasks_tbl_count).attribute10 :=
9153 p_attribute10;
9154 --bug 6153503
9155 G_tasks_in_tbl(G_tasks_tbl_count).attribute11 :=
9156 p_attribute11;
9157 G_tasks_in_tbl(G_tasks_tbl_count).attribute12 :=
9158 p_attribute12;
9159 G_tasks_in_tbl(G_tasks_tbl_count).attribute13 :=
9160 p_attribute13;
9161 G_tasks_in_tbl(G_tasks_tbl_count).attribute14 :=
9162 p_attribute14;
9163 G_tasks_in_tbl(G_tasks_tbl_count).attribute15 :=
9164 p_attribute15;
9165 --end bug 6153503
9166
9167 -- IC and Multi National Currency changes Starts ...
9168
9169 G_tasks_in_tbl(G_tasks_tbl_count).allow_cross_charge_flag :=
9170 p_allow_cross_charge_flag;
9171 G_tasks_in_tbl(G_tasks_tbl_count).project_rate_type :=
9172 p_project_rate_type;
9173 G_tasks_in_tbl(G_tasks_tbl_count).project_rate_date :=
9174 p_project_rate_date;
9175 G_tasks_in_tbl(G_tasks_tbl_count).cc_process_labor_flag :=
9176 p_cc_process_labor_flag;
9177 G_tasks_in_tbl(G_tasks_tbl_count).labor_tp_schedule_id :=
9178 p_labor_tp_schedule_id;
9179 G_tasks_in_tbl(G_tasks_tbl_count).labor_tp_fixed_date :=
9180 p_labor_tp_fixed_date;
9181 G_tasks_in_tbl(G_tasks_tbl_count).cc_process_nl_flag :=
9182 p_cc_process_nl_flag;
9183 G_tasks_in_tbl(G_tasks_tbl_count).nl_tp_schedule_id :=
9184 p_nl_tp_schedule_id;
9185 G_tasks_in_tbl(G_tasks_tbl_count).nl_tp_fixed_date :=
9186 p_nl_tp_fixed_date;
9187 G_tasks_in_tbl(G_tasks_tbl_count).receive_project_invoice_flag :=
9188 p_receive_project_invoice_flag;
9189 G_tasks_in_tbl(G_tasks_tbl_count).work_type_id :=
9190 p_work_type_id;
9191 G_tasks_in_tbl(G_tasks_tbl_count).emp_bill_rate_schedule_id :=
9192 p_emp_bill_rate_schedule_id;
9193 G_tasks_in_tbl(G_tasks_tbl_count).job_bill_rate_schedule_id :=
9194 p_job_bill_rate_schedule_id;
9195
9196 -- IC and Multi National Currency changes Ends ...
9197
9198 --Sakthi MCB
9199
9200 G_tasks_in_tbl(G_tasks_tbl_count).non_lab_std_bill_rt_sch_id :=
9201 p_non_lab_std_bill_rt_sch_id;
9202 G_tasks_in_tbl(G_tasks_tbl_count).taskfunc_cost_rate_type :=
9203 p_taskfunc_cost_rate_type;
9204 G_tasks_in_tbl(G_tasks_tbl_count).taskfunc_cost_rate_date :=
9205 p_taskfunc_cost_rate_date;
9206
9207 --Sakthi MCB
9208 G_tasks_in_tbl(G_tasks_tbl_count).display_sequence :=
9209 p_display_sequence;
9210 G_tasks_in_tbl(G_tasks_tbl_count).wbs_level :=
9211 p_wbs_level;
9212
9213 --Project Structures
9214 G_tasks_in_tbl(G_tasks_tbl_count).OBLIGATION_START_DATE := P_OBLIGATION_START_DATE;
9215 G_tasks_in_tbl(G_tasks_tbl_count).OBLIGATION_FINISH_DATE := P_OBLIGATION_FINISH_DATE;
9216 G_tasks_in_tbl(G_tasks_tbl_count).ESTIMATED_START_DATE := P_ESTIMATED_START_DATE;
9217 G_tasks_in_tbl(G_tasks_tbl_count).ESTIMATED_FINISH_DATE := P_ESTIMATED_FINISH_DATE;
9218 G_tasks_in_tbl(G_tasks_tbl_count).BASELINE_START_DATE := P_BASELINE_START_DATE;
9219 G_tasks_in_tbl(G_tasks_tbl_count).BASELINE_FINISH_DATE := P_BASELINE_FINISH_DATE;
9220 G_tasks_in_tbl(G_tasks_tbl_count).CLOSED_DATE := P_CLOSED_DATE;
9221 G_tasks_in_tbl(G_tasks_tbl_count).WQ_UOM_CODE := P_WQ_UOM_CODE;
9222 G_tasks_in_tbl(G_tasks_tbl_count).WQ_ITEM_CODE := P_WQ_ITEM_CODE;
9223 G_tasks_in_tbl(G_tasks_tbl_count).STATUS_CODE := P_STATUS_CODE;
9224 G_tasks_in_tbl(G_tasks_tbl_count).WF_STATUS_CODE := P_WF_STATUS_CODE;
9225 G_tasks_in_tbl(G_tasks_tbl_count).PM_SOURCE_CODE := P_PM_SOURCE_CODE;
9226 G_tasks_in_tbl(G_tasks_tbl_count).PRIORITY_CODE := P_PRIORITY_CODE;
9227 G_tasks_in_tbl(G_tasks_tbl_count).MILESTONE_FLAG := P_MILESTONE_FLAG;
9228 G_tasks_in_tbl(G_tasks_tbl_count).CRITICAL_FLAG := P_CRITICAL_FLAG;
9229 G_tasks_in_tbl(G_tasks_tbl_count).INC_PROJ_PROGRESS_FLAG := P_INC_PROJ_PROGRESS_FLAG;
9230 G_tasks_in_tbl(G_tasks_tbl_count).LINK_TASK_FLAG := P_LINK_TASK_FLAG;
9231 G_tasks_in_tbl(G_tasks_tbl_count).CALENDAR_ID := P_CALENDAR_ID;
9232 G_tasks_in_tbl(G_tasks_tbl_count).PLANNED_EFFORT := P_PLANNED_EFFORT;
9233 G_tasks_in_tbl(G_tasks_tbl_count).DURATION := P_DURATION;
9234 G_tasks_in_tbl(G_tasks_tbl_count).PLANNED_WORK_QUANTITY := P_PLANNED_WORK_QUANTITY;
9235 G_tasks_in_tbl(G_tasks_tbl_count).TASK_TYPE := P_TASK_TYPE;
9236 --Project Structures
9237 G_tasks_in_tbl(G_tasks_tbl_count).labor_disc_reason_code := p_labor_disc_reason_code;
9238 G_tasks_in_tbl(G_tasks_tbl_count).non_labor_disc_reason_code := p_non_labor_disc_reason_code;
9239
9240 --PA L changes bug 2872708
9241 G_tasks_in_tbl(G_tasks_tbl_count).retirement_cost_flag := p_retirement_cost_flag;
9242 G_tasks_in_tbl(G_tasks_tbl_count).cint_eligible_flag := p_cint_eligible_flag;
9243 G_tasks_in_tbl(G_tasks_tbl_count).cint_stop_date := p_cint_stop_date;
9244
9245 -- FP-M Bug # 3301192
9246 G_tasks_in_tbl(G_tasks_tbl_count).pred_string := p_pred_string;
9247 G_tasks_in_tbl(G_tasks_tbl_count).pred_delimiter := p_pred_delimiter;
9248 --Bug 3279981 FP_M customer and invoice method at top task
9249 G_tasks_in_tbl(G_tasks_tbl_count).invoice_method := p_invoice_method;
9250 G_tasks_in_tbl(G_tasks_tbl_count).customer_id := p_customer_id;
9251 --SMukka
9252 G_tasks_in_tbl(G_tasks_tbl_count).financial_task_flag :=p_financial_task_flag;
9253 G_tasks_in_tbl(G_tasks_tbl_count).mapped_task_id :=p_mapped_task_id;
9254 G_tasks_in_tbl(G_tasks_tbl_count).mapped_task_reference:=p_mapped_task_reference;
9255 G_tasks_in_tbl(G_tasks_tbl_count).deliverable :=p_deliverable;
9256 -- 3661788 Assinging deliverable id
9257 G_tasks_in_tbl(G_tasks_tbl_count).deliverable_id :=p_deliverable_id;
9258 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
9259 G_tasks_in_tbl(G_tasks_tbl_count).ext_act_duration := p_ext_act_duration;
9260 G_tasks_in_tbl(G_tasks_tbl_count).ext_remain_duration := p_ext_remain_duration;
9261 G_tasks_in_tbl(G_tasks_tbl_count).ext_sch_duration := p_ext_sch_duration;
9262 -- (end venkat) new params for bug #3450684 -------------------------------------------------
9263
9264 -- set the new params - bug #3654243 ----------------------------------------------
9265 G_tasks_in_tbl(G_tasks_tbl_count).base_percent_comp_deriv_code := p_base_percent_comp_deriv_code;
9266 G_tasks_in_tbl(G_tasks_tbl_count).sch_tool_tsk_type_code := p_sch_tool_tsk_type_code;
9267 G_tasks_in_tbl(G_tasks_tbl_count).constraint_type_code := p_constraint_type_code;
9268 G_tasks_in_tbl(G_tasks_tbl_count).constraint_date := p_constraint_date;
9269 G_tasks_in_tbl(G_tasks_tbl_count).free_slack := p_free_slack;
9270 G_tasks_in_tbl(G_tasks_tbl_count).total_slack := p_total_slack;
9271 G_tasks_in_tbl(G_tasks_tbl_count).effort_driven_flag := p_effort_driven_flag;
9272 G_tasks_in_tbl(G_tasks_tbl_count).level_assignments_flag := p_level_assignments_flag;
9273 G_tasks_in_tbl(G_tasks_tbl_count).invoice_method := p_invoice_method;
9274 G_tasks_in_tbl(G_tasks_tbl_count).customer_id := p_customer_id;
9275 G_tasks_in_tbl(G_tasks_tbl_count).gen_etc_source_code := p_gen_etc_source_code;
9276 G_tasks_in_tbl(G_tasks_tbl_count).adj_on_std_inv := p_adj_on_std_inv;
9277 -- set the new params - bug #3654243 -------------------------------------------------
9278
9279 pa_debug.write('load_tasks','p_etc_effort'||p_etc_effort,3);
9280 pa_debug.write('load_tasks','p_percent_complete'||p_percent_complete,3);
9281
9282 -- Progress Management Changes. Bug # 3420093.
9283 G_tasks_in_tbl(G_tasks_tbl_count).etc_effort := p_etc_effort;
9284 G_tasks_in_tbl(G_tasks_tbl_count).percent_complete := p_percent_complete;
9285 -- Progress Management Changes. Bug # 3420093.
9286
9287 EXCEPTION
9288
9289 WHEN FND_API.G_EXC_ERROR
9290 THEN
9291 ROLLBACK TO load_task_pub;
9292
9293 p_return_status := FND_API.G_RET_STS_ERROR;
9294
9295
9296 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9297 THEN
9298 ROLLBACK TO load_task_pub;
9299
9300 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9301
9302
9303 WHEN OTHERS THEN
9304 ROLLBACK TO load_task_pub;
9305
9306 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9307
9308 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9309 THEN
9310 FND_MSG_PUB.add_exc_msg
9311 ( p_pkg_name => G_PKG_NAME
9312 , p_procedure_name => l_api_name );
9313
9314 END IF;
9315
9316 END load_task;
9317
9318
9319 --------------------------------------------------------------------------------
9320 --Name: execute_create_project
9321 --Type: Procedure
9322 --Description: This procedure can be used to create a project
9323 -- using global PL/SQL tables.
9324 --
9325 --Called subprograms:
9326 --
9327 --
9328 --
9329 --History:
9330 -- 19-AUG-1996 L. de Werker Created
9331 -- 22-DEC-97 jwhite - Added OUT-parameter p_workflow_started
9332 -- for workflow.
9333 --
9334
9335 PROCEDURE execute_create_project
9336 ( p_api_version_number IN NUMBER
9337 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9338 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
9339 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9340 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9341 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9342 ,p_workflow_started OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9343 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
9344 ,p_op_validate_flag IN VARCHAR2 := 'Y'--added by rtarway, 4218977
9345 ,p_pa_project_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9346 ,p_pa_project_number OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9347 )
9348
9349 IS
9350
9351 l_api_name CONSTANT VARCHAR2(30) := 'execute_create_project';
9352
9353 i NUMBER;
9354 l_return_status VARCHAR2(1);
9355 l_err_stage VARCHAR2(120);
9356
9357 BEGIN
9358
9359 -- Standard begin of API savepoint
9360
9361 SAVEPOINT execute_create_project_pub;
9362
9363 -- Standard call to check for call compatibility.
9364
9365 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
9366 p_api_version_number ,
9367 l_api_name ,
9368 G_PKG_NAME )
9369 THEN
9370
9371 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9372
9373 END IF;
9374
9375 -- Initialize the message table if requested.
9376
9377 IF FND_API.TO_BOOLEAN( p_init_msg_list )
9378 THEN
9379
9380 FND_MSG_PUB.initialize;
9381
9382 END IF;
9383
9384
9385 -- Set API return status to success
9386
9387 p_return_status := FND_API.G_RET_STS_SUCCESS;
9388
9389 create_project( p_api_version_number => p_api_version_number
9390 ,p_commit => FND_API.G_FALSE
9391 ,p_init_msg_list => FND_API.G_FALSE
9392 ,p_msg_count => p_msg_count
9393 ,p_msg_data => p_msg_data
9394 ,p_return_status => l_return_status
9395 ,p_workflow_started => p_workflow_started
9396 ,p_pm_product_code => p_pm_product_code
9397 ,p_op_validate_flag => p_op_validate_flag--added by rtarway 4218977
9398 ,p_project_in => g_project_in_rec
9399 ,p_project_out => g_project_out_rec
9400 ,p_key_members => g_key_members_in_tbl
9401 ,p_class_categories => g_class_categories_in_tbl
9402 ,p_tasks_in => g_tasks_in_tbl
9403 ,p_tasks_out => g_tasks_out_tbl
9404 -- anlee org role changes
9405 ,p_org_roles => g_org_roles_in_tbl
9406 ,p_structure_in => G_structure_in_rec
9407 --bug 3096203
9408 ,p_ext_attr_tbl_in => G_ext_attr_in_tbl
9409 --bug 3096203
9410 --FP M : deliverables
9411 ,p_deliverables_in => G_deliverables_in_tbl
9412 -- ,p_deliverables_out => G_deliverables_out_tbl
9413 ,p_deliverable_actions_in => G_deliverable_actions_in_tbl
9414 -- ,p_deliverable_actions_out => G_deliverable_actions_out_tbl
9415 --FP M : deliverables
9416 );
9417
9418
9419 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
9420 THEN
9421
9422 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9423
9424 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
9425 THEN
9426
9427 RAISE FND_API.G_EXC_ERROR;
9428 END IF;
9429
9430 --assign appropriate values to outgoing parameters
9431 IF g_project_out_rec.pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
9432 p_pa_project_id := NULL;
9433 ELSE
9434 p_pa_project_id := g_project_out_rec.pa_project_id;
9435 END IF;
9436 IF g_project_out_rec.pa_project_number = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
9437 p_pa_project_number := NULL;
9438 ELSE
9439 p_pa_project_number := g_project_out_rec.pa_project_number;
9440 END IF;
9441
9442 IF FND_API.to_boolean( p_commit )
9443 THEN
9444 COMMIT;
9445 END IF;
9446
9447
9448 EXCEPTION
9449
9450 WHEN FND_API.G_EXC_ERROR
9451 THEN
9452 ROLLBACK TO execute_create_project_pub;
9453
9454 p_return_status := FND_API.G_RET_STS_ERROR;
9455
9456 -- 4537865
9457 p_workflow_started := NULL ;
9458 p_pa_project_id := NULL ;
9459 p_pa_project_number := NULL ;
9460 -- 4537865
9461
9462 FND_MSG_PUB.Count_And_Get
9463 ( p_count => p_msg_count ,
9464 p_data => p_msg_data );
9465
9466 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9467 THEN
9468 ROLLBACK TO execute_create_project_pub;
9469
9470 -- 4537865
9471 p_workflow_started := NULL ;
9472 p_pa_project_id := NULL ;
9473 p_pa_project_number := NULL ;
9474 -- 4537865
9475
9476 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9477
9478 FND_MSG_PUB.Count_And_Get
9479 ( p_count => p_msg_count ,
9480 p_data => p_msg_data );
9481
9482 WHEN OTHERS THEN
9483 ROLLBACK TO execute_create_project_pub;
9484
9485 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9486
9487 -- 4537865
9488 p_workflow_started := NULL ;
9489 p_pa_project_id := NULL ;
9490 p_pa_project_number := NULL ;
9491 -- 4537865
9492
9493 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9494 THEN
9495 FND_MSG_PUB.add_exc_msg
9496 ( p_pkg_name => G_PKG_NAME
9497 , p_procedure_name => l_api_name );
9498
9499 END IF;
9500
9501 FND_MSG_PUB.Count_And_Get
9502 ( p_count => p_msg_count ,
9503 p_data => p_msg_data );
9504
9505 END execute_create_project;
9506
9507 --------------------------------------------------------------------------------
9508 --Name: fetch_task
9509 --Type: Procedure
9510 --Description: This procedure can be used to get the task related output data
9511 -- to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
9512 --
9513 --Called subprograms:
9514 --
9515 --
9516 --
9517 --History:
9518 -- 19-AUG-1996 L. de Werker Created
9519 -- 25-OCT-1996 L. de Werker p_msg_count and p_msg_data removed from parameterlist
9520 --
9521
9522 PROCEDURE fetch_task
9523 ( p_api_version_number IN NUMBER
9524 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
9525 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9526 ,p_task_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9527 ,p_pa_task_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9528 ,p_pm_task_reference OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9529 ,p_task_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9530 )
9531 IS
9532
9533 l_api_name CONSTANT VARCHAR2(30) := 'fetch_task';
9534 l_index NUMBER;
9535 i NUMBER;
9536
9537 BEGIN
9538
9539 -- Standard begin of API savepoint
9540
9541 SAVEPOINT fetch_task_pub;
9542
9543 -- Standard call to check for call compatibility.
9544
9545 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
9546 p_api_version_number ,
9547 l_api_name ,
9548 G_PKG_NAME )
9549 THEN
9550
9551 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9552
9553 END IF;
9554
9555 -- Initialize the message table if requested.
9556
9557 IF FND_API.TO_BOOLEAN( p_init_msg_list )
9558 THEN
9559
9560 FND_MSG_PUB.initialize;
9561
9562 END IF;
9563
9564 -- Set API return status to success
9565
9566 p_return_status := FND_API.G_RET_STS_SUCCESS;
9567
9568 -- Check Task index value, when they don't provide an index we will error out
9569 IF p_task_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9570 OR p_task_index IS NULL
9571 THEN
9572 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
9573 THEN
9574 pa_interface_utils_pub.map_new_amg_msg
9575 ( p_old_message_code => 'PA_INDEX_NOT_PROVIDED'
9576 ,p_msg_attribute => 'CHANGE'
9577 ,p_resize_flag => 'N'
9578 ,p_msg_context => 'GENERAL'
9579 ,p_attribute1 => ''
9580 ,p_attribute2 => ''
9581 ,p_attribute3 => ''
9582 ,p_attribute4 => ''
9583 ,p_attribute5 => '');
9584 END IF;
9585
9586 p_return_status := FND_API.G_RET_STS_ERROR;
9587 RAISE FND_API.G_EXC_ERROR;
9588 ELSE
9589 l_index := p_task_index;
9590 END IF;
9591 If G_Tasks_out_tbl.exists(l_index) THEN
9592 -- assign global table fields to the outgoing parameter
9593 -- we don't want to return the big number G_PA_MISS_NUM
9594
9595 IF G_tasks_out_tbl(l_index).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
9596 THEN
9597 p_pa_task_id := NULL;
9598 ELSE
9599
9600 p_pa_task_id := G_tasks_out_tbl(l_index).pa_task_id;
9601
9602 END IF;
9603
9604 p_pm_task_reference := G_tasks_out_tbl(l_index).pm_task_reference;
9605 p_task_return_status := G_tasks_out_tbl(l_index).return_status;
9606
9607 END IF;
9608
9609 EXCEPTION
9610
9611 WHEN FND_API.G_EXC_ERROR
9612 THEN
9613 ROLLBACK TO fetch_task_pub;
9614
9615 p_return_status := FND_API.G_RET_STS_ERROR;
9616
9617 -- 4537865
9618 p_pa_task_id := NULL ;
9619 p_pm_task_reference := NULL ;
9620 p_task_return_status := FND_API.G_RET_STS_ERROR ;
9621 -- 4537865
9622
9623
9624 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
9625 THEN
9626 ROLLBACK TO fetch_task_pub;
9627
9628 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9629
9630 -- 4537865
9631 p_pa_task_id := NULL ;
9632 p_pm_task_reference := NULL ;
9633 p_task_return_status := FND_API.G_RET_STS_ERROR ;
9634 -- 4537865
9635
9636
9637 WHEN OTHERS THEN
9638 ROLLBACK TO fetch_task_pub;
9639
9640 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9641
9642 -- 4537865
9643 p_pa_task_id := NULL ;
9644 p_pm_task_reference := NULL ;
9645 p_task_return_status := FND_API.G_RET_STS_ERROR ;
9646 -- 4537865
9647
9648 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
9649 THEN
9650 FND_MSG_PUB.add_exc_msg
9651 ( p_pkg_name => G_PKG_NAME
9652 , p_procedure_name => l_api_name );
9653
9654 END IF;
9655
9656
9657 END fetch_task;
9658
9659 --------------------------------------------------------------------------------
9660 --Name: clear_project
9661 --Type: Procedure
9662 --Description: This procedure can be used to clear the global PL/SQL
9663 -- tables that are used by a LOAD/EXECUTE/FETCH cycle.
9664 --
9665 --
9666 --Called subprograms: init_project
9667 --
9668 --
9669 --
9670 --History:
9671 -- 20-AUG-1996 L. de Werker Created
9672 -- 30-AUG-1996 L. de Werker Parameterlist removed.
9673 -- 10-JAN-1997 L. de Werker Changed name from CLEAR_CREATE_PROJECT to CLEAR_PROJECT
9674 --
9675 PROCEDURE clear_project
9676
9677 IS
9678
9679 l_api_name CONSTANT VARCHAR2(30) := 'clear_project';
9680
9681 BEGIN
9682
9683
9684 init_project;
9685
9686
9687 END clear_project;
9688
9689 --------------------------------------------------------------------------------
9690 --Name: Update_Project
9691 --Type: Procedure
9692 --Description: This procedure can be used to update a project
9693 --
9694 --
9695 --Called subprograms: PA_PROJECT_STUS_UTILS.Check_Wf_Enabled
9696 --
9697 --
9698 --
9699 --History:
9700 -- 31-JUL-1996 R. Krishnamurthy - Created
9701 -- 03-DEC-1996 L. de Werker - Debugged errors + added checking of NULL values.
9702 -- 05-DEC-1996 L. de Werker - Added WHO columns update in dynamic SQL string
9703 -- 06-DEC-1996 L. de Werker - Added locking mechanism
9704 -- 30-SEP-97 jwhite - Workflow had been added in XX-AUG-97. I made
9705 -- fixes as per unit testing.
9706 -- 22-DEC-97 jwhite - Added OUT-parameter p_workflow_started
9707 -- for workflow.
9708 -- 03-MAY-2000 Rakesh Raghavan - Fixed Bug # 1289156.
9709 -- 12-JUL-2000 Mohnish
9710 -- added code for ROLE BASED SECURITY:
9711 -- added the call to PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY
9712 -- 19-JUL-2000 Mohnish incorporated PA_PROJECT_PARTIES_PUB API changes
9713 -- 23-MAY-2002 MAansari Added call to create_default_task_structure
9714 -- 15-MAR-2003 SRAMESH - Added an OR condition for the bug 2846478
9715 -- in the before the update_project_party call in
9716 -- the procedure CHECK_FOR_ONE_MANAGER_PVT.
9717 -- 26-MAR-2003 SRAMESH - Added calls for the the procedures Check_Schedule_type and Validate_Schedule_Values.
9718 -- the procedure update_project
9719 -- - Also added the update statements for the columns
9720 -- LABOR_SCHEDULE_FIXED_DATE , LABOR_SCHEDULE_DISCOUNT, NON_LABOR_STD_BILL_RATE_SCHDL
9721 -- NON_LABOR_BILL_RATE_ORG_ID, NON_LABOR_SCHEDULE_FIXED_DATE, NON_LABOR_SCHEDULE_DISCOUNT
9722 -- REV_IND_RATE_SCH_ID, INV_IND_RATE_SCH_ID, REV_IND_SCH_FIXED_DATE, INV_IND_SCH_FIXED_DATE
9723 -- Default value for p_structure_type is financial
9724 --Logic used to derive the struture version id
9725 -- If p_structure_type is financial then
9726 -- If Split case then
9727 -- Get the version id of the published structure
9728 -- If no published structure Then
9729 -- Get the version id of the Working Structure
9730 -- IF Shared case and Versioning disabled then
9731 -- Get the version id of the published structure
9732 -- If no published structure Then
9733 -- Get the version id of the Working Structure
9734 -- IF Shared case and versioning enabled but no published version exists then
9735 -- Get the version id of the Working Structure
9736 -- IF Shared case and versioning enabled and published version exists then
9737 -- populate the l_structure_type as 'WORKPLAN'
9738 --Else IF p_structure_type is WORKPLAN then
9739 -- IF Shared case Then
9740 -- Throw an error PA_PS_WP_NOT_SEP_FN
9741 -- IF Split Case and Versioning disabled then
9742 -- Get the version id of the published structure
9743 -- IF Split Case and Versioning Enabled then
9744 -- IF No working versions then
9745 -- create a working version
9746 -- Else
9747 -- get the version id of the last updated working version
9748 -- IF Unable to get version Id
9749 -- Throw an error PA_PS_STRUC_VER_REQ
9750 --End if
9751 -- 19-may-2003 sramesh -Fixed the bug 2910972.Defaulting of the key member start
9752 -- date
9753 -- 10-jun-2003 sramesh -Fixed the bug 2891513.Added the conditions before the update statement
9754 -- of revaluate_funding_flag and include_gains_losses_flag in the
9755 -- update_project API.
9756 -- 15-jul-2003 sramesh -- Added the code for bug 2982057.
9757 -- Changed the logic to populate the long_task_name
9758 -- with task_name when the long_task_name is null.
9759 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
9760 -- dependency_type and lag days to tasks and create dependencies.
9761 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
9762 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
9763 -- 17-Mar-2006 sunkalya - Bug#5210872.Modified the update logic for
9764 -- the parameter 'probability_member_id'.Change tagged with Bug#5210872.
9765 -- 18-May-2006 vkadimes - Bug 5188246 Added validation for output_tax_code and retention_tax_code .
9766 -- Changes are tagged with Bug No.
9767 PROCEDURE Update_Project
9768 ( p_api_version_number IN NUMBER
9769 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
9770 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
9771 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
9772 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9773 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9774 ,p_workflow_started OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
9775 ,p_pm_product_code IN VARCHAR2
9776 ,p_op_validate_flag IN varchar2 := 'Y'
9777 ,p_project_in IN pa_project_pub.project_in_rec_type
9778 ,p_project_out OUT NOCOPY pa_project_pub.project_out_rec_type /*added the nocopy check for the 2674619*/
9779 /* Added for tracking bug - add customers */
9780 ,p_customers_in IN pa_project_pub.customer_tbl_type := G_customers_in_tbl
9781 /* Added Default Value for p_key_members and p_class_categories*/
9782 ,p_key_members IN pa_project_pub.project_role_tbl_type := G_key_members_in_tbl
9783 ,p_class_categories IN pa_project_pub.class_category_tbl_type := G_class_categories_in_tbl
9784 ,p_tasks_in IN pa_project_pub.task_in_tbl_type
9785 ,p_tasks_out OUT NOCOPY pa_project_pub.task_out_tbl_type /*added the nocopy check for the bug 2674619*/
9786 -- anlee org role changes
9787 ,p_org_roles IN pa_project_pub.project_role_tbl_type := G_org_roles_in_tbl
9788 --project structures
9789 ,p_structure_in IN structure_in_rec_type := G_structure_in_rec
9790 ,p_ext_attr_tbl_in IN PA_EXT_ATTR_TABLE_TYPE := G_ext_attr_in_tbl
9791 -- ,p_structure_out OUT structure_out_rec_type
9792 ,p_pass_entire_structure IN VARCHAR2 := 'N' -- Added for bug 3548473 : Bug 3627124
9793 -- If user passes entire strucutre in p_structure_in rec type, p_pass_entire_structure should be set to 'Y'.
9794 --project structures
9795 --FP M : deliverables
9796 ,p_deliverables_in IN deliverable_in_tbl_type := G_deliverables_in_tbl -- 3435905 passing default
9797 -- ,p_deliverables_out OUT NOCOPY deliverable_out_tbl_type -- 3435905 removed out parameter
9798 ,p_deliverable_actions_in IN action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
9799 -- ,p_deliverable_actions_out OUT NOCOPY action_out_tbl_type -- 3435905 removed out parameter
9800 --FP M : deliverables
9801 ,p_update_mode IN VARCHAR2 := 'PA_UPD_WBS_ATTR' --rtarway, for DHI ER, BUG 4413568 --bug 4534919
9802 ) IS
9803
9804 -- Added for bug 5222506
9805 CURSOR l_cur_calendar_id(l_calendar_id NUMBER) IS
9806 SELECT 'Y' FROM jtf_calendars_vl WHERE
9807 trunc(nvl(end_date_active, sysdate)) >= trunc(sysdate)
9808 AND calendar_id= l_calendar_id;
9809
9810 -- Added for Bug 5225146
9811 CURSOR l_cur_project_rate_type (l_project_rate_type VARCHAR )IS
9812 SELECT 'Y' FROM pa_conversion_types_v
9813 WHERE conversion_type <> 'User' AND user_conversion_type = l_project_rate_type;
9814
9815 -- Added for Bug 5188246
9816 CURSOR l_cur_retention_tax_code (l_retention_tax_code VARCHAR ) IS
9817 SELECT 'Y' FROM pa_output_tax_code_setup_v
9818 WHERE tax_code = l_retention_tax_code;
9819 --needed to get default data of a project using it's ID
9820 CURSOR l_project_csr
9821 (l_pa_project_id NUMBER)
9822 IS
9823 SELECT *
9824 FROM pa_projects p
9825 WHERE p.project_id = l_pa_project_id;
9826
9827 /**************************************
9828 ** The following cursor l_get_org_csr is not used anywhere in this
9829 package. So commenting this cursor for changes made for
9830 Non-mergable to Mergable View . ***
9831 ***************************************
9832
9833 CURSOR l_get_org_csr (l_org_id NUMBER )
9834
9835 IS
9836 SELECT organization_id
9837 FROM pa_organizations_project_v
9838 WHERE organization_id = l_org_id
9839 AND active_flag = 'N';
9840
9841 ****************************************/
9842
9843 CURSOR l_get_dist_rule_csr (l_dist_rule VARCHAR2, l_project_type VARCHAR2)
9844 IS
9845 SELECT 'x'
9846 FROM pa_project_type_distributions d
9847 WHERE d.project_type = l_project_type
9848 AND d.distribution_rule = l_dist_rule;
9849
9850 CURSOR l_min_task_start_date_csr (l_project_id NUMBER) IS
9851 SELECT MIN(start_date)
9852 FROM pa_tasks
9853 WHERE project_id = l_project_id
9854 AND start_date IS NOT NULL;
9855
9856 CURSOR l_max_task_end_date_csr (l_project_id NUMBER) IS
9857 SELECT MAX(completion_date)
9858 FROM pa_tasks
9859 WHERE project_id = l_project_id
9860 AND completion_date IS NOT NULL;
9861
9862 --needed to get the project_type_class_code and service_type_code associated
9863 --with the project_type
9864
9865 CURSOR l_project_type_csr
9866 (p_pa_project_id NUMBER)
9867 IS
9868 SELECT pt.project_type_class_code
9869 , pt.service_type_code
9870 , pt.revaluate_funding_flag /*Bug 2891513 : selecting the columns revaluate_funding_flag and include_gains_losses_flag*/
9871 , pt.include_gains_losses_flag
9872 FROM pa_project_types pt
9873 , pa_projects p
9874 WHERE p.project_type = pt.project_type
9875 AND p.project_id = p_pa_project_id;
9876
9877 --needed to check whether given project number is unique
9878 CURSOR l_project_number_unique_csr( p_project_number VARCHAR2)
9879 IS
9880 SELECT 'x'
9881 FROM pa_projects_all
9882 WHERE segment1 = p_project_number;
9883
9884 --needed to check whether given project name is unique
9885 CURSOR l_project_name_unique_csr( p_project_name VARCHAR2)
9886 IS
9887 SELECT 'x'
9888 FROM pa_projects_all
9889 WHERE name = p_project_name;
9890
9891 --needed to check whether given long name is unique
9892 CURSOR l_long_name_unique_csr( p_long_name VARCHAR2)
9893 IS
9894 SELECT 'x'
9895 FROM pa_projects_all
9896 WHERE long_name = p_long_name;
9897
9898 /* Modidified the cursor l_key_member_csr to add start_date_active as logical
9899 primary key */
9900 CURSOR l_key_member_csr (l_project_id NUMBER,l_person_id NUMBER,
9901 l_role_type VARCHAR2 ,
9902 l_start_date_active DATE)
9903 IS
9904 SELECT pa_project_players.* --,rowid /*rowid id commented for bug 1939295 */
9905 FROM pa_project_players
9906 WHERE project_id = l_project_id
9907 AND person_id = l_person_id
9908 AND project_role_type = l_role_type
9909 AND start_date_active = l_start_date_active;
9910
9911 /*Customer Account Relationships -CAR changes*/
9912
9913 Cursor Cur_Customer(x_project_id NUMBER,l_customer_id in number) IS
9914 Select pa_project_customers.*
9915 From pa_project_customers
9916 where project_id=x_project_id
9917 and customer_id=l_customer_id;
9918
9919 /*CAR changes end*/
9920
9921
9922 CURSOR l_class_categories_csr (l_project_id NUMBER,
9923 l_class_category VARCHAR2 )
9924 IS
9925 SELECT class_code
9926 FROM pa_project_classes
9927 WHERE project_id = l_project_id
9928 AND class_category = l_class_category;
9929
9930 CURSOR l_get_task_csr (l_project_id NUMBER,l_pm_task_reference VARCHAR2) IS
9931 SELECT task_id FROM
9932 pa_tasks
9933 WHERE project_id = l_project_id
9934 AND pm_task_reference = l_pm_task_reference;
9935
9936 --needed to get the data of the project manager that might conflict with this new project manager
9937
9938 CURSOR l_project_man_current_csr (p_project_id NUMBER, p_start_date DATE )
9939 IS
9940 SELECT person_id,
9941 start_date_active,
9942 end_date_active
9943 FROM pa_project_players
9944 WHERE project_id = p_project_id
9945 AND project_role_type = 'PROJECT MANAGER'
9946 AND nvl(end_date_active,p_start_date) >= p_start_date;
9947
9948
9949 /* bug 4541103
9950 CURSOR l_lock_rows_csr( p_project_id NUMBER)
9951 IS
9952 SELECT 'x'
9953 FROM pa_projects p
9954 WHERE p.project_id = p_project_id
9955 FOR UPDATE OF p.project_id NOWAIT;
9956 */
9957
9958 -- anlee org role changes
9959
9960 -- 3693229 start
9961 -- for peformance fix changed the below cursor definition
9962 -- earlier select was quering on view
9963 -- now, select is directly retrieving the data from the tables
9964 -- for more detail please refer bug
9965 /*
9966 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9967 l_role_type VARCHAR2 )
9968 IS
9969 SELECT *
9970 FROM pa_project_parties_v
9971 WHERE project_id = l_project_id
9972 AND resource_source_id = l_resource_source_id
9973 AND project_role_type = l_role_type
9974 AND party_type = 'ORGANIZATION';
9975 */
9976
9977 -- 4656866 commented below cursor
9978
9979 /*
9980 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
9981 l_role_type VARCHAR2 )
9982 IS
9983 SELECT
9984 ppp.project_party_id PROJECT_PARTY_ID,
9985 ppp.object_id OBJECT_ID,
9986 ppp.object_type OBJECT_TYPE,
9987 ppp.project_id PROJECT_ID,
9988 ppp.resource_id RESOURCE_ID,
9989 ppp.resource_type_id RESOURCE_TYPE_ID,
9990 ppp.resource_source_id RESOURCE_SOURCE_ID,
9991 hzo.party_name RESOURCE_SOURCE_NAME,
9992 ppp.project_role_id PROJECT_ROLE_ID,
9993 pprt.project_role_type PROJECT_ROLE_TYPE,
9994 pprt.meaning PROJECT_ROLE_MEANING,
9995 pprt.role_party_class ROLE_PARTY_CLASS,
9996 ppp.start_date_active START_DATE_ACTIVE,
9997 ppp.end_date_active END_DATE_ACTIVE,
9998 ppp.scheduled_flag SCHEDULED_FLAG,
9999 ppp.record_version_number RECORD_VERSION_NUMBER,
10000 ppa.start_date PROJECT_START_DATE,
10001 ppa.completion_date PROJECT_END_DATE,
10002 ppp.grant_id GRANT_ID,
10003 -999 ASSIGNMENT_ID,
10004 -999 ASSIGN_RECORD_VERSION_NUMBER,
10005 'N' PENDING_APPROVAL,
10006 -999 ORGANIZATION_ID,
10007 NULL ORGANIZATION_NAME,
10008 hzcp.phone_area_code || decode(hzcp.phone_number,NULL,NULL,decode(hzcp.phone_area_code,NULL,hzcp.phone_number,'-' || hzcp.phone_number) ) || decode(hzcp.phone_extension,NULL,NULL,'+' || hzcp.phone_extension) PHONE_NUMBER,
10009 hzo.email_address EMAIL_ADDRESS,
10010 NULL JOB_TITLE,
10011 'ORGANIZATION' PARTY_TYPE,
10012 PA_PROJECT_PARTIES_UTILS.ACTIVE_PARTY(PPP.START_DATE_ACTIVE,PPP.END_DATE_ACTIVE) ACTIVE,
10013 NULL USER_NAME,
10014 -999 USER_ID,
10015 ppp.resource_source_id RESOURCE_PARTY_ID
10016 FROM pa_project_parties ppp,
10017 pa_projects_all ppa,
10018 pa_project_role_types_vl pprt,
10019 hz_parties hzo,
10020 hz_contact_points hzcp
10021 WHERE ppp.resource_type_id = 112
10022 AND ppp.project_id = ppa.project_id
10023 AND ppp.project_role_id = pprt.project_role_id
10024 AND ppp.resource_source_id = hzo.party_id
10025 AND hzo.party_type = 'ORGANIZATION'
10026 AND hzcp.owner_table_name (+)= 'HZ_PARTIES'
10027 AND hzcp.owner_table_id (+)= hzo.party_id
10028 AND hzcp.contact_point_type (+)= 'PHONE'
10029 AND hzcp.phone_line_type (+)= 'GEN'
10030 AND hzcp.primary_flag (+)= 'Y'
10031 and PPA.project_id = l_project_id
10032 AND PPP.resource_source_id = l_resource_source_id
10033 AND PPRT.project_role_type = l_role_type;
10034 */
10035
10036 -- Added same cursor with changed select query , removed hz_contact_points references
10037 -- using hz_parties columns for primary phone number details
10038 -- ( like primary_phone_area_code , primary_phone_number , primary_phone_extension )
10039 -- for more refer bug description
10040
10041 CURSOR l_org_role_csr (l_project_id NUMBER,l_resource_source_id NUMBER,
10042 l_role_type VARCHAR2 )
10043 IS
10044 SELECT
10045 ppp.project_party_id PROJECT_PARTY_ID,
10046 ppp.object_id OBJECT_ID,
10047 ppp.object_type OBJECT_TYPE,
10048 ppp.project_id PROJECT_ID,
10049 ppp.resource_id RESOURCE_ID,
10050 ppp.resource_type_id RESOURCE_TYPE_ID,
10051 ppp.resource_source_id RESOURCE_SOURCE_ID,
10052 hzo.party_name RESOURCE_SOURCE_NAME,
10053 ppp.project_role_id PROJECT_ROLE_ID,
10054 pprt.project_role_type PROJECT_ROLE_TYPE,
10055 pprt.meaning PROJECT_ROLE_MEANING,
10056 pprt.role_party_class ROLE_PARTY_CLASS,
10057 ppp.start_date_active START_DATE_ACTIVE,
10058 ppp.end_date_active END_DATE_ACTIVE,
10059 ppp.scheduled_flag SCHEDULED_FLAG,
10060 ppp.record_version_number RECORD_VERSION_NUMBER,
10061 ppa.start_date PROJECT_START_DATE,
10062 ppa.completion_date PROJECT_END_DATE,
10063 ppp.grant_id GRANT_ID,
10064 -999 ASSIGNMENT_ID,
10065 -999 ASSIGN_RECORD_VERSION_NUMBER,
10066 'N' PENDING_APPROVAL,
10067 -999 ORGANIZATION_ID,
10068 NULL ORGANIZATION_NAME,
10069 hzo.primary_phone_area_code || decode(hzo.primary_phone_number,NULL,NULL,decode(hzo.primary_phone_area_code,NULL,hzo.primary_phone_number,'-' || hzo.primary_phone_number) )
10070 || decode(hzo.primary_phone_extension,NULL,NULL,'+' || hzo.primary_phone_extension) PHONE_NUMBER,
10071 hzo.email_address EMAIL_ADDRESS,
10072 NULL JOB_TITLE,
10073 'ORGANIZATION' PARTY_TYPE,
10074 PA_PROJECT_PARTIES_UTILS.ACTIVE_PARTY(PPP.START_DATE_ACTIVE,PPP.END_DATE_ACTIVE) ACTIVE,
10075 NULL USER_NAME,
10076 -999 USER_ID,
10077 ppp.resource_source_id RESOURCE_PARTY_ID
10078 FROM pa_project_parties ppp,
10079 pa_projects_all ppa,
10080 pa_project_role_types_vl pprt,
10081 hz_parties hzo
10082 WHERE ppp.resource_type_id = 112
10083 AND ppp.project_id = ppa.project_id
10084 AND ppp.project_role_id = pprt.project_role_id
10085 AND ppp.resource_source_id = hzo.party_id
10086 AND hzo.party_type = 'ORGANIZATION'
10087 and PPA.project_id = l_project_id
10088 AND PPP.resource_source_id = l_resource_source_id
10089 AND PPRT.project_role_type = l_role_type;
10090
10091 -- 4656866 end
10092
10093 -- 3693229 end
10094
10095 --Cursor to get the current published version when structure type and project id is known
10096 CURSOR cur_struc_ver_fin(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
10097 IS
10098 SELECT c.element_version_id
10099 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
10100 ,pa_proj_elem_ver_structure d
10101 WHERE c.project_id = c_project_id
10102 AND a.structure_type_id = b.structure_type_id
10103 AND b.proj_element_id = c.proj_element_id
10104 AND a.structure_type = c_structure_type
10105 AND d.project_id = c.project_id
10106 AND d.element_version_id = c.element_version_id
10107 AND d.status_code = 'STRUCTURE_PUBLISHED'
10108 AND d.latest_eff_published_flag = 'Y';
10109
10110 --Cursor to get the working version when structure type and project id is known
10111 CURSOR cur_struc_ver_wp(c_project_id pa_projects_all.project_id%TYPE, c_structure_type pa_structure_types.structure_type%TYPE)
10112 IS
10113 SELECT c.element_version_id
10114 FROM pa_proj_element_versions c, pa_structure_types a, pa_proj_structure_types b
10115 ,pa_proj_elem_ver_structure d
10116 WHERE c.project_id = c_project_id
10117 AND a.structure_type_id = b.structure_type_id
10118 AND b.proj_element_id = c.proj_element_id
10119 AND a.structure_type = c_structure_type
10120 AND d.project_id = c.project_id
10121 AND d.element_version_id = c.element_version_id
10122 AND d.status_code = 'STRUCTURE_WORKING';
10123
10124 -- Cursor to get the Project's System Status Code Bug 3611598
10125 CURSOR c_project_sys_status_code IS
10126 SELECT project_system_status_code
10127 FROM PA_PROJECT_STATUSES sta,PA_PROJECTS_ALL pa
10128 WHERE pa.project_id = p_project_in.pa_project_id
10129 AND sta.project_status_code = pa.project_status_code;
10130
10131 Cursor c_adj_on_std_inv (p_adj_on_std_inv IN VARCHAR2)
10132 Is
10133 Select 'X'
10134 from pa_lookups
10135 where lookup_type='PA_ADJ_ON_STD_INV'
10136 and lookup_code = p_adj_on_std_inv;
10137 proj_adj_on_std_inv varchar2(1) :='N';
10138 t_adj_on_std_inv varchar2(2);
10139
10140 TYPE deferred_tasks_rec IS RECORD
10141 (task_index NUMBER);
10142
10143 TYPE deferred_tasks_tbl_typ IS TABLE OF deferred_tasks_rec
10144 INDEX BY BINARY_INTEGER;
10145
10146 l_dummy_calendar_id VARCHAR2(1) := 'N' ; -- Added for bug 5222506
10147 l_dummy_project_rate_type VARCHAR2(1) :='N'; -- Added For bug 5225146
10148 l_dummy_cur_retention_tax_code VARCHAR2(1) :='N';
10149 l_dummy_cur_output_tax_code VARCHAR2(1) :='N'; -- Added For Bug 5188246.
10150 l_status_code PA_PROJECT_STATUSES.project_system_status_code%TYPE; -- Bug 3611598
10151 l_deferred_tasks_index_tbl deferred_tasks_tbl_typ;
10152
10153 l_project_rec pa_projects%ROWTYPE;
10154 l_project_in_rec pa_project_pub.project_in_rec_type;
10155 l_temp_org_id NUMBER;
10156 l_temp VARCHAR2(1);
10157
10158 l_api_name CONSTANT VARCHAR2(30):= 'update_project';
10159 j NUMBER;
10160 i NUMBER;
10161
10162 l_tasks_out pa_project_pub.task_out_tbl_type;
10163 l_return_status VARCHAR2(1);
10164
10165 l_err_code NUMBER := 0;
10166 l_err_stage VARCHAR2(2000);
10167 l_err_stack VARCHAR2(2000);
10168 l_dummy VARCHAR2(1);
10169
10170 l_project_id NUMBER ;
10171 l_task_id NUMBER ;
10172 l_cursor INTEGER;
10173 --l_statement VARCHAR2(2000); --bug 2955326
10174 l_statement VARCHAR2(30000); --bug 2955326
10175 l_rows INTEGER;
10176 l_project_start_date DATE;
10177 l_project_completion_date DATE;
10178 l_max_task_date DATE;
10179 l_min_task_date DATE;
10180
10181 l_deferred_new_tasks_tbl pa_project_pub.task_in_tbl_type;
10182 l_deferred_tasks_count NUMBER := 0;
10183 l_added_task_tbl pa_project_pub.task_in_tbl_type;
10184 l_task_id_tbl pa_project_pub.task_out_tbl_type;
10185 l_count NUMBER;
10186 l_task_rec pa_project_pub.task_in_rec_type;
10187 l_project_type_class_code pa_project_types.project_type_class_code%type;
10188 l_service_type_code pa_project_types.service_type_code%type;
10189
10190 l_key_members_tbl pa_project_pub.project_role_tbl_type;
10191 l_key_members_in_rec pa_project_pub.project_role_rec_type;
10192 l_key_members_current_rec l_key_member_csr%ROWTYPE;
10193 l_key_members_rec l_key_member_csr%ROWTYPE;
10194 l_project_man_current_rec l_project_man_current_csr%ROWTYPE;
10195
10196 /*Customer account relationships */
10197
10198 Cur_Customer_rec Cur_Customer%ROWTYPE;
10199 l_bill_to_customer_id Number;
10200 l_ship_to_customer_id Number;
10201 l_bill_to_address_id NUMBER := NULL; --Initialized to NULL for Bug 3911782
10202 l_ship_to_address_id NUMBER := NULL; --Initialized to NULL for Bug 3911782
10203 l_bill_to_contact_id NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : BUg 4153629
10204 l_ship_to_contact_id NUMBER := NULL; --Initialized to NULL for tracking bug AMG API Gap Analysis : BUg 4153629
10205 /* Variables sadded for tracking bug */
10206 l_project_relationship_code PA_PROJECT_CUSTOMERS.PROJECT_RELATIONSHIP_CODE%TYPE;
10207 l_customer_bill_split PA_PROJECT_CUSTOMERS.CUSTOMER_BILL_SPLIT%TYPE;
10208 l_customer_id NUMBER;
10209 l_msg_index_out NUMBER;
10210 tot_contribution NUMBER;
10211 /* Variables sadded for tracking bug */
10212 /* Variables added for tracking bug 4153629*/
10213 l_bill_another_project_flag VARCHAR2(1);
10214 l_receiver_task_id NUMBER;
10215 /* Variables added for tracking bug 4153629*/
10216 /*CAR changes ends*/
10217
10218
10219 -- anlee org role changes
10220 l_org_roles_tbl pa_project_pub.project_role_tbl_type;
10221 l_org_roles_in_rec pa_project_pub.project_role_rec_type;
10222 l_org_roles_current_rec l_org_role_csr%ROWTYPE;
10223 l_org_roles_rec l_org_role_csr%ROWTYPE;
10224
10225 l_class_categories_tbl pa_project_pub.class_category_tbl_type ;
10226 l_temp_start_date DATE;
10227 l_temp_end_date DATE;
10228 l_update_yes_flag VARCHAR2(1) := 'N';
10229 l_out_pa_task_id NUMBER;
10230 l_out_pm_task_reference VARCHAR2(30);
10231 l_update_start_date_flag VARCHAR2(1);
10232 l_update_end_date_flag VARCHAR2(1);
10233 l_class_code VARCHAR2(30);
10234 l_msg_count NUMBER ;
10235 l_msg_data VARCHAR2(2000);
10236 l_function_allowed VARCHAR2(1);
10237 l_resp_id NUMBER := 0;
10238 l_user_id NUMBER := 0;
10239 l_module_name VARCHAR2(80) := 'PA_PM_UPDATE_PROJECT';
10240 l_proceed_with_update_flag VARCHAR2(1);
10241 l_array_index NUMBER := 0;
10242 l_temp_i NUMBER := 0;
10243 l_orig_index NUMBER := 0;
10244 l_text VARCHAR2(500);
10245 l_verify_ok_flag VARCHAR2(1);
10246 l_wf_enabled_flag VARCHAR2(1);
10247 l_err_msg_count NUMBER := 0;
10248 l_warnings_only_flag VARCHAR2(1);
10249 l_project_status_changed VARCHAR2(1) := 'N';
10250 l_status_changeable VARCHAR2(1); --Bug 14100051
10251 l_closing_project VARCHAR2(1) := 'N';
10252 l_reopening_project VARCHAR2(1) := 'N';
10253 l_wf_status_code VARCHAR2(30) := 'IN_ROUTE';
10254 l_proj_num_numeric NUMBER;
10255 l_wf_type VARCHAR2(250);
10256 l_wf_item_type VARCHAR2(250);
10257 l_wf_process VARCHAR2(250);
10258 l_assignment_id NUMBER;
10259 l_task_id_out NUMBER := 0;
10260 l_amg_task_number VARCHAR2(50);
10261 l_org_func_security VARCHAR2(1); /* Bug#1968394 */
10262
10263 -- FP-M Bug # 3301192
10264 l_d_task_id NUMBER;
10265 l_d_task_ver_id NUMBER;
10266 l_d_struct_ver_id NUMBER;
10267 l_d_loop_count NUMBER;
10268 l_task_in_rec task_in_rec_type;
10269
10270 /*Variables added for bug 2802984*/
10271
10272 l_out_labor_sch_type VARCHAR2(1);
10273 l_out_nl_labor_sch_type VARCHAR2(1);
10274 l_rev_rate_sch_type VARCHAR2(1);
10275 l_inv_rate_sch_type VARCHAR2(1);
10276 l_std_bill_rate_schedule VARCHAR2(40);
10277
10278 /*Bug# 2891513 : Added the local variables*/
10279 l_revaluate_funding VARCHAR2(1);
10280 l_include_gains_and_losses VARCHAR2(1);
10281 /*Variables added for bug 2802984 ends*/
10282
10283 --added by rtarway FP.M Devlopment
10284 l_patask_record_version_number NUMBER;
10285 --added by rtarway FP.M Devlopment
10286 --needed to get the field values associated to a AMG message
10287
10288 CURSOR l_amg_project_csr
10289 (p_pa_project_id pa_projects.project_id%type)
10290 IS
10291 SELECT segment1
10292 FROM pa_projects p
10293 WHERE p.project_id = p_pa_project_id;
10294
10295 l_amg_segment1 VARCHAR2(25);
10296
10297 p_multiple_task_msg VARCHAR2(1) := 'T';
10298 x_return_status VARCHAR2(255);
10299 x_msg_count NUMBER;
10300 x_msg_data VARCHAR2(2000);
10301 V_COMPLETION_DATE DATE;
10302 v_null_char VARCHAR2(1):=to_char(NULL);
10303
10304 --Project Structures
10305 v_first_index NUMBER;
10306 v_last_index NUMBER;
10307 v_ref_task_id NUMBER;
10308 v_parent_task_id NUMBER;
10309 v_task_id NUMBER;
10310 l_structure_version_id NUMBER;
10311 l_structure_id NUMBER;
10312 l_task_version_id NUMBER;
10313 --Project Structures
10314
10315 -- anlee
10316 -- Added for intermedia search
10317 l_ctx_proj_name VARCHAR2(30);
10318 l_ctx_proj_number VARCHAR2(25);
10319 l_ctx_long_name VARCHAR2(240);
10320 l_ctx_desc VARCHAR2(250);
10321 l_ctx_update_flag VARCHAR2(1);
10322 -- End of changes
10323
10324 --bug 2738747
10325 l_structure_type VARCHAR2(25);
10326 --bug 2738747
10327
10328 --<Bug#2881768/>
10329 struct_ver_updatable VARCHAR(1);
10330
10331 --For Bug 2931183
10332 l_update_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
10333 l_debug_mode varchar2(1);
10334
10335 -- <EA>
10336 l_failed_row_id_list VARCHAR2(32767);
10337 l_errorcode VARCHAR2(150);
10338 -- </EA>
10339
10340 --bug 2955326
10341 l_b_segment1_flag VARCHAR2(1) := 'N';
10342 l_b_proj_name_flag VARCHAR2(1) := 'N';
10343 l_b_long_name_flag VARCHAR2(1) := 'N';
10344 l_b_pm_proj_ref_flag VARCHAR2(1) := 'N';
10345 l_b_co_org_id_flag VARCHAR2(1) := 'N';
10346 l_b_pub_sec_flag VARCHAR2(1) := 'N';
10347 l_b_dist_rule_flag VARCHAR2(1) := 'N';
10348 l_b_desc_flag VARCHAR2(1) := 'N';
10349 l_b_start_date_flag VARCHAR2(1) := 'N';
10350 l_b_comp_date_flag VARCHAR2(1) := 'N';
10351 l_b_early_sd_flag VARCHAR2(1) := 'N';
10352 l_b_early_fd_flag VARCHAR2(1) := 'N';
10353 l_b_late_sd_flag VARCHAR2(1) := 'N';
10354 l_b_late_fd_flag VARCHAR2(1) := 'N';
10355 l_b_sch_sd_flag VARCHAR2(1) := 'N';
10356 l_b_sch_fd_flag VARCHAR2(1) := 'N';
10357 l_b_attr_cat_flag VARCHAR2(1) := 'N';
10358 l_b_attr1_flag VARCHAR2(1) := 'N';
10359 l_b_attr2_flag VARCHAR2(1) := 'N';
10360 l_b_attr3_flag VARCHAR2(1) := 'N';
10361 l_b_attr4_flag VARCHAR2(1) := 'N';
10362 l_b_attr5_flag VARCHAR2(1) := 'N';
10363 l_b_attr6_flag VARCHAR2(1) := 'N';
10364 l_b_attr7_flag VARCHAR2(1) := 'N';
10365 l_b_attr8_flag VARCHAR2(1) := 'N';
10366 l_b_attr9_flag VARCHAR2(1) := 'N';
10367 l_b_attr10_flag VARCHAR2(1) := 'N';
10368 l_b_output_tx_code_flag VARCHAR2(1) := 'N';
10369 l_b_ret_tx_code_flag VARCHAR2(1) := 'N';
10370 l_b_proj_cur_code_flag VARCHAR2(1) := 'N';
10371 l_b_allow_x_chg_flag VARCHAR2(1) := 'N';
10372 l_b_proj_rt_date_flag VARCHAR2(1) := 'N';
10373 l_b_proj_rt_tp_flag VARCHAR2(1) := 'N';
10374 l_cc_proc_lb_flag VARCHAR2(1) := 'N';
10375 l_b_lb_tp_sch_id_flag VARCHAR2(1) := 'N';
10376 l_b_lb_tp_fixed_dt_flag VARCHAR2(1) := 'N';
10377 l_b_cc_proc_nl_flag VARCHAR2(1) := 'N';
10378 l_b_nl_tp_sch_id_flag VARCHAR2(1) := 'N';
10379 l_b_nl_tp_fx_dt_flag VARCHAR2(1) := 'N';
10380 l_b_role_list_id_flag VARCHAR2(1) := 'N';
10381 l_b_work_type_id_flag VARCHAR2(1) := 'N';
10382 l_b_cal_id_flag VARCHAR2(1) := 'N';
10383 l_b_loc_id_flag VARCHAR2(1) := 'N';
10384 l_b_prob_memb_id_flag VARCHAR2(1) := 'N';
10385 l_b_proj_value_flag VARCHAR2(1) := 'N';
10386 l_b_exp_apprv_dt_flag VARCHAR2(1) := 'N';
10387 l_b_cst_jb_gp_id_flag VARCHAR2(1) := 'N';
10388 l_b_bill_jb_gp_id_flag VARCHAR2(1) := 'N';
10389 l_b_emp_bill_rt_sch_id_flag VARCHAR2(1) := 'N';
10390 l_b_jb_bill_rt_sch_id_flag VARCHAR2(1) := 'N';
10391 l_b_comp_mtch_wt_flag VARCHAR2(1) := 'N';
10392 l_b_avail_mtch_wt_flag VARCHAR2(1) := 'N';
10393 l_b_jb_lvl_mt_wt_flag VARCHAR2(1) := 'N';
10394 l_b_search_min_avail_flag VARCHAR2(1) := 'N';
10395 l_b_srch_org_hier_id_flag VARCHAR2(1) := 'N';
10396 l_b_srch_st_org_id_flag VARCHAR2(1) := 'N';
10397 l_b_min_can_sc_req_for_nom VARCHAR2(1) := 'N';
10398 /* l_b_nn_lb_std_bl_rt_sch_id_f VARCHAR2(1) := 'N'; Commented for bug #4630836 */
10399 l_b_proj_bil_xch_rt_flag VARCHAR2(1) := 'N';
10400 l_b_pjfnc_bil_xch_rt_flag VARCHAR2(1) := 'N';
10401 l_b_fnding_xch_rt_flag VARCHAR2(1) := 'N';
10402 l_b_enable_auto_srch_flag VARCHAR2(1) := 'N';
10403 l_b_srch_cntry_code_flag VARCHAR2(1) := 'N';
10404 l_b_invproc_crncy_tp_flag VARCHAR2(1) := 'N';
10405 l_b_revproc_crncy_cd_flag VARCHAR2(1) := 'N';
10406 l_b_prj_bil_rt_dt_code_flag VARCHAR2(1) := 'N';
10407 l_b_proj_bil_rt_tp_flag VARCHAR2(1) := 'N';
10408 l_b_prjfnc_crncy_code_flag VARCHAR2(1) := 'N';
10409 l_b_prjfnc_bil_rt_dt_cd_f VARCHAR2(1) := 'N';
10410 l_b_prjfnc_bil_rt_tp_flag VARCHAR2(1) := 'N';
10411 l_b_fndng_rt_dt_cd_flag VARCHAR2(1) := 'N';
10412 l_b_fnding_rt_type_flag VARCHAR2(1) := 'N';
10413 l_b_bsln_fnding_flag VARCHAR2(1) := 'N';
10414 l_b_prjfnc_cst_rt_tp_flag VARCHAR2(1) := 'N';
10415 l_b_inv_bill_txn_cur_flag VARCHAR2(1) := 'N';
10416 l_b_multi_crncy_bil_flag VARCHAR2(1) := 'N';
10417 l_b_prj_bil_rt_dt_flag VARCHAR2(1) := 'N';
10418 l_b_prjfnc_bil_rt_dt_flag VARCHAR2(1) := 'N';
10419 l_b_fnding_rt_dt_flag VARCHAR2(1) := 'N';
10420 l_b_prjfnc_cst_rt_dt_flag VARCHAR2(1) := 'N';
10421 l_b_asgn_prec_tsk_flag VARCHAR2(1) := 'N';
10422 l_b_splt_cst_fm_wp_flag VARCHAR2(1) := 'N';
10423 l_b_splt_cst_fm_bill_flag VARCHAR2(1) := 'N';
10424 l_b_adv_act_set_id_flag VARCHAR2(1) := 'N';
10425 l_b_st_adv_act_set_flag VARCHAR2(1) := 'N';
10426 l_b_pri_code_flag VARCHAR2(1) := 'N';
10427 l_b_retn_bil_inv_fmt_id_flg VARCHAR2(1) := 'N';
10428 l_b_retn_acnt_flag VARCHAR2(1) := 'N';
10429 l_b_reval_fndng_flag VARCHAR2(1) := 'N';
10430 l_b_sec_lvl_flag VARCHAR2(1) := 'N';
10431 l_b_lbr_disc_rsn_code_flg VARCHAR2(1) := 'N';
10432 l_b_nn_lbr_disc_rsn_cd_flg VARCHAR2(1) := 'N';
10433 l_b_inc_gn_los_flag VARCHAR2(1) := 'N';
10434
10435 l_b_lb_sch_tp_fg VARCHAR2(1) := 'N';
10436 l_b_nn_lb_sch_tp_fg VARCHAR2(1) := 'N';
10437 l_b_emp_bill_rt_sch_id_fg2 VARCHAR2(1) := 'N';
10438 l_b_jb_bill_rt_sch_id_fg2 VARCHAR2(1) := 'N';
10439 l_b_lb_sch_fx_dt_fg VARCHAR2(1) := 'N';
10440 l_b_lb_sch_dsct_fg VARCHAR2(1) := 'N';
10441 l_b_lb_disc_rn_cd_fg2 VARCHAR2(1) := 'N';
10442 l_b_rv_ind_rt_sch_id_fg VARCHAR2(1) := 'N';
10443 l_b_inv_ind_rt_sch_id_fg VARCHAR2(1) := 'N';
10444 l_b_ind_sch_fx_dt_fg VARCHAR2(1) := 'N';
10445 l_b_inv_ind_sch_fx_dt_fg VARCHAR2(1) := 'N';
10446 l_b_nn_lb_bill_rt_org_id_fg VARCHAR2(1) := 'N';
10447 l_b_n_lb_st_bl_rt_sc_id_fg2 VARCHAR2(1) := 'N';
10448 l_b_nn_lb_sch_fx_dt_fg VARCHAR2(1) := 'N';
10449 l_b_nn_lb_sch_dst_fg VARCHAR2(1) := 'N';
10450 l_b_n_lb_disc_rsn_cd_fg2 VARCHAR2(1) := 'N';
10451 l_b_as_alloc_mth_fg VARCHAR2(1) := 'N';
10452 l_b_cp_evt_proc_fg VARCHAR2(1) := 'N';
10453 l_b_cint_rt_sch_id_fg VARCHAR2(1) := 'N';
10454 l_b_cint_elg_fg VARCHAR2(1) := 'N';
10455 l_b_cint_stp_dt_fg VARCHAR2(1) := 'N';
10456 --end bug 2955326
10457 l_update_task_structure VARCHAR2(1) := 'N'; -- Added for Bug 3548473 : 3627124
10458 l_ref_task_id NUMBER := null; -- aditi added for Bug 3801314 : 3627124
10459 l_update_wbs_flag VARCHAR2(1) := 'N'; -- Added for Bug #3931805
10460 -- Bug 3075609. In update project context it is possible
10461 -- that we can create a new structure version when already some
10462 -- working versions exist. This is true in split workplan context.
10463 -- This info will be passed to the process_task_structure_bulk api
10464 -- through this variable.
10465 l_create_task_versions_only VARCHAR2(1) := 'N';
10466 -- Bug 6248841
10467 l_b_cc_tax_task_id VARCHAR2(1) := 'N';
10468 l_cc_tax_task_numb PA_TASKS.TASK_NUMBER%TYPE;
10469
10470 /* Bug 3077676 */
10471 l_cust_acc_rel_code pa_implementations.cust_acc_rel_code%TYPE;
10472 CURSOR get_cust_acc_rel_code IS
10473 Select cust_acc_rel_code
10474 From pa_implementations;
10475
10476 l_deliverable_id NUMBER; -- 3435905
10477 -- 3773373 removed below local variable usage
10478 -- i_dlvr NUMBER := 0; -- 3435905
10479 i_actn NUMBER := 0; -- 3435905
10480 l_dlvr_dml_action VARCHAR2(30) := null ; -- 3435905
10481 l_unique_flag VARCHAR2(1) := null ; -- 3435905
10482 l_is_wp_seperate_from_fn VARCHAR2(1) := 'N'; -- Added for Bug#3451073
10483
10484 ---------------------- FP_M changes begin (venkat) 1 ---------------------------
10485
10486 ----Comment ---- l_sys_program_flag VARCHAR2(1) := 'N'; --------------------
10487 l_b_sys_program_flag_fg VARCHAR2(1) := 'N'; -- Bug # 5072032.
10488 l_b_allow_multi_prog_rollup_fg VARCHAR2(1) := 'N'; -- Bug # 5072032.
10489
10490 l_enable_top_task_cust_flag VARCHAR2(1) := 'N';
10491 l_enable_top_task_inv_mth_flag VARCHAR2(1) := 'N';
10492 l_projfunc_attr_for_ar_flag VARCHAR2(1) :='N';
10493
10494 --------------------- FP_M changes end (venkat) ---------------------------------
10495
10496 /* Start of code for bug #2111806 */
10497 -- Start of Bug fix 4878696
10498 -- Commented this cursor for Performance Bug 4878696
10499 -- CURSOR c_prj(c_project_id IN NUMBER ) IS
10500 -- select project_system_status_code
10501 -- ,project_type_class_code
10502 -- from pa_projects_v
10503 -- where project_id = c_project_id;
10504
10505 -- Added the following cursor instead of the commented one as above for Performance Bug 4878696
10506 CURSOR c_prj(c_project_id IN NUMBER ) IS
10507 select PROJECT_SYSTEM_STATUS_CODE , PROJECT_TYPE_CLASS_CODE
10508 from pa_projects_all ppa,pa_project_statuses pps,pa_project_types ppt
10509 where ppa.project_id = c_project_id
10510 and ppa.PROJECT_STATUS_CODE = pps.PROJECT_STATUS_CODE
10511 and ppa.PROJECT_TYPE = ppt.PROJECT_TYPE
10512 and pps.STATUS_TYPE = 'PROJECT'
10513 and ppt.ORG_ID= ppa.ORG_ID ;
10514
10515 -- End of Bug fix 4878696
10516
10517 CURSOR c_prj_count(c_project_id IN NUMBER ) IS
10518 select count(*)
10519 from pa_project_players
10520 where project_id = c_project_id
10521 and project_role_type='PROJECT MANAGER';
10522
10523 l_proj_status pa_projects_all.project_status_code%TYPE;
10524 l_proj_type_class pa_project_types_all.project_type_class_code%TYPE;
10525 l_prj_mgr_count NUMBER;
10526 /* End of code for bug #2111806. */
10527
10528 l_old_cust_top_task_flag varchar2(1); -- 4188765 Added local variable
10529 l_old_date_eff_funds_flag varchar2(1); -- sunkalya federal Bug#5511353
10530
10531 -- Start of Addition for bug 4191009.
10532 CURSOR l_code_percentage_csr (l_project_id NUMBER,
10533 l_class_category VARCHAR2,
10534 l_class_code VARCHAR2 )
10535 IS
10536 SELECT code_percentage
10537 FROM pa_project_classes
10538 WHERE project_id = l_project_id
10539 AND class_category = l_class_category
10540 AND class_code = l_class_code;
10541
10542 TYPE class_code_tbl_type IS TABLE OF pa_project_classes.class_code%type
10543 INDEX BY BINARY_INTEGER;
10544
10545 class_code_tbl class_code_tbl_type;
10546 l_code_percentage pa_project_classes.code_percentage%type;
10547
10548 -- END of Addition for bug 4191009.
10549
10550 -- 5348726 :: Start of Addition for bug#5294891.
10551 CURSOR c_get_class_code_id(l_class_category VARCHAR2,
10552 l_class_code VARCHAR2 )
10553 IS
10554 SELECT class_code_id
10555 FROM PA_CLASS_CODES
10556 WHERE class_category = l_class_category
10557 AND class_code = l_class_code;
10558
10559 l_old_class_code_id pa_class_codes.class_code_id%type;
10560 l_new_class_code_id pa_class_codes.class_code_id%type;
10561 -- END of Addition for bug# 5294891.
10562
10563 -- for opportunity value changes
10564 -- adarora --Changes BEGIN for Bug 4473105
10565 l_expected_approval_date DATE;
10566 l_projfunc_currency_code VARCHAR2(15);
10567 l_project_currency_code VARCHAR2(15);
10568 l_opportunity_value NUMBER;
10569 l_opp_value_currency_code VARCHAR2(15);
10570
10571
10572 CURSOR l_get_details_for_opp_csr (c_project_id IN NUMBER) IS
10573 SELECT expected_approval_date, projfunc_currency_code, project_currency_code
10574 FROM pa_projects
10575 WHERE project_id = c_project_id;
10576
10577 CURSOR l_get_details_for_opp_csr2 (c_project_id IN NUMBER) IS
10578 SELECT opportunity_value, opp_value_currency_code
10579 FROM pa_project_opp_attrs
10580 WHERE project_id = c_project_id;
10581
10582 --Changes END for Bug 4473105
10583
10584 -- Begin Bug # 4582750.
10585
10586 l_x_return_status VARCHAR2(255);
10587 l_x_msg_count NUMBER;
10588 l_x_msg_data VARCHAR2(2000);
10589 l_prev_locked_status VARCHAR2(1) := null;
10590
10591 -- End Bug # 4582750.
10592 l_valid_proj_flag BOOLEAN := false; --tracking
10593 l_error_msg_code VARCHAR2(200);
10594
10595 -- Bug # 4329284.
10596
10597 cursor cur_proj_name (c_project_id NUMBER) is
10598 select ppa.name
10599 from pa_projects_all ppa
10600 where ppa.project_id = c_project_id;
10601
10602 cursor cur_prog_name (c_project_id NUMBER) is
10603 select ppa.name
10604 from pa_projects_all ppa, pa_object_relationships por
10605 where ppa.project_id = por.object_id_to2
10606 and por.object_id_to2 = c_project_id
10607 and por.relationship_type in ('LW','LF')
10608 union all
10609 select ppa.name
10610 from pa_projects_all ppa, pa_object_relationships por
10611 where ppa.project_id = por.object_id_from2
10612 and por.object_id_from2 = c_project_id
10613 and por.relationship_type in ('LW','LF');
10614
10615 l_proj_name VARCHAR2(30);
10616 l_prog_name VARCHAR2(30);
10617
10618 -- Bug # 4329284.
10619
10620 --Bug#5131471. Added the following cursors and the local variables --Sunkalya
10621
10622 CURSOR cur_customer_status(l_customer_id number)
10623 IS
10624 SELECT Nvl(cust_acct.status,'A')
10625 FROM hz_parties party,
10626 hz_cust_accounts cust_acct
10627 WHERE
10628 cust_acct.party_id = party.party_id AND
10629 cust_acct.cust_account_id = l_customer_id;
10630
10631 l_cust_status VARCHAR2(1) := null;
10632 --End of code change for Bug#5131471.
10633
10634 -- 5191417 Added below cursor to validate priority_code
10635
10636 l_valid_prio_code VARCHAR2(1) := 'N';
10637
10638 CURSOR priority_code_csr(p_priority_code IN VARCHAR2) IS
10639 Select
10640 'Y'
10641 from
10642 pa_lookups
10643 where
10644 lookup_type = 'PA_PROJECT_PRIORITY_CODE'
10645 and lookup_code = p_priority_code ;
10646
10647 -- 5191417 end
10648
10649 -- Bug#5191699. Added the cursor and the local variable below for validating
10650 -- project security level.This can be either 'Enterprise' or 'Secured'.
10651
10652 l_check_sec_level VARCHAR2(1) := 'N';
10653
10654 CURSOR cur_check_sec_level(p_proj_sec_level IN VARCHAR2 ) IS
10655 SELECT 'Y' FROM
10656 dual
10657 WHERE EXISTS
10658 (SELECT NULL FROM pa_lookups
10659 WHERE
10660 lookup_type = 'PA_PROJECT_ACCESS_LEVEL' AND
10661 lookup_code = p_proj_sec_level
10662 );
10663 -- End of code changes for Bug#5191699 in declare section
10664
10665
10666 --Bug#5191521. Added the cursor and the local variable below for validating
10667 -- probability member id.
10668
10669 l_check_prob_id VARCHAR2(1) := 'N';
10670
10671 CURSOR cur_validate_prob_member( p_project_id IN NUMBER ,p_probability_member_id IN NUMBER )
10672 IS
10673 SELECT 'Y' FROM dual
10674 WHERE EXISTS
10675 (
10676 SELECT
10677 NULL
10678 FROM
10679 pa_probability_members ppm,
10680 pa_projects pp,
10681 pa_project_types ppt
10682 WHERE
10683 pp.project_type = ppt.project_type AND
10684 pp.org_id = ppt.org_id AND
10685 ppt.probability_list_id = ppm.probability_list_id AND
10686 pp.project_id = p_project_id AND
10687 ppm.probability_member_id = p_probability_member_id AND
10688 trunc(sysdate) BETWEEN ppm.start_date_active AND nvl(ppm.end_date_active,trunc(sysdate))
10689 );
10690 --End of code changes for Bug#5191521 in declare section
10691
10692 --Bug#5222248. The following cursor and local vairable are added for validating the work type id passed
10693
10694 CURSOR cur_check_work_type(p_project_id IN NUMBER ,p_work_type_id IN NUMBER ) IS
10695 SELECT
10696 'Y'
10697 FROM
10698 pa_work_types_vl pwt,
10699 pa_projects pp,
10700 pa_project_types ppt
10701 WHERE
10702 trunc(sysdate) BETWEEN pwt.start_date_active AND nvl(pwt.end_date_active,trunc(SYSDATE)) AND
10703 pp.project_type = ppt.project_type AND
10704 pp.org_id = ppt.org_id AND
10705 pwt.billable_capitalizable_flag = Decode(ppt.project_type_class_code,'INDIRECT', 'N', pwt.billable_capitalizable_flag) AND
10706 pp.project_id = p_project_id AND
10707 pwt.work_type_id = p_work_type_id;
10708
10709 l_check_work_type VARCHAR2(1) := 'N';
10710
10711 --Bug#5222248.
10712
10713 --Bug#5188931. Added the following cursors and local variables for validating project currency code
10714
10715 CURSOR cur_check_cur_code(p_currency_code IN VARCHAR2 )
10716 IS
10717 SELECT
10718 'Y'
10719 FROM
10720 fnd_currencies_vl
10721 WHERE
10722 NVL(enabled_flag, 'Y') = 'Y' AND
10723 SYSDATE BETWEEN NVL(start_date_active,SYSDATE) AND
10724 NVL(end_date_active, SYSDATE) AND
10725 currency_code = p_currency_code;
10726
10727 CURSOR cur_check_prvdr_flag(p_project_id IN NUMBER )
10728 IS
10729 SELECT
10730 ppt.cc_prvdr_flag
10731 FROM
10732 pa_projects pp,
10733 pa_project_types ppt
10734 WHERE
10735 pp.project_type = ppt.project_type AND
10736 pp.org_id = ppt.org_id AND --this condition is not mandatory
10737 pp.project_id = p_project_id;
10738
10739 l_check_cur_code_flag VARCHAR2(1) := 'N';
10740 l_allow_update_flag VARCHAR2(1) := 'Y';
10741 l_prvdr_flag VARCHAR2(1);
10742
10743 --Bug#5188931.
10744
10745 --This cursor is introduced for Bug#5196996 to validate the role type passed thru key member record
10746
10747 CURSOR l_project_role_types_csr (p_role_type IN VARCHAR2,p_project_id IN number)
10748 IS
10749 select 'x'
10750 from pa_project_role_types_v roles,
10751 pa_role_controls controls,
10752 pa_projects_all proj
10753 where proj.project_id=p_project_id
10754 and proj.ROLE_LIST_ID is null
10755 and roles.project_role_id=controls.project_role_id
10756 and roles.PROJECT_ROLE_TYPE=p_role_type
10757 and controls.role_control_code='ALLOW_AS_PROJ_MEMBER'
10758 and trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate)
10759 union all
10760 select 'x'
10761 from pa_project_role_types_v roles,
10762 pa_role_controls controls,
10763 pa_projects_all proj,
10764 pa_role_list_members prlm
10765 where proj.project_id=p_project_id
10766 and proj.ROLE_LIST_ID =prlm.role_list_id
10767 and prlm.project_role_id = roles.project_role_id
10768 and roles.project_role_id=controls.project_role_id
10769 and roles.PROJECT_ROLE_TYPE=p_role_type
10770 and controls.role_control_code='ALLOW_AS_PROJ_MEMBER'
10771 and trunc(sysdate) between start_date_active and nvl(end_date_active,sysdate);
10772
10773 --Bug#5196996
10774
10775 l_cc_process_labor_flag varchar2(1) ; /* Added for Bug 5395048 */
10776 l_cc_process_nl_flag varchar2(1) ; /* Added for Bug 5395048 */
10777
10778 --sunkalya federal bug#5511353
10779
10780 CURSOR cur_enable_funds_flag(p_project_id IN VARCHAR2)
10781 IS
10782 SELECT 'Y'
10783 FROM
10784 pa_projects_all p,
10785 pa_project_types_all pt
10786 WHERE
10787 p.project_id = p_project_id AND
10788 pt.project_type_class_code = 'CONTRACT' AND
10789 p.project_type = pt.project_type AND
10790 pt.CC_PRVDR_FLAG = 'N' AND
10791 pt.org_id = p.org_id;
10792
10793 l_enable_funds_flag VARCHAR2(1);
10794 l_date_eff_funds_flag VARCHAR2(1) := NULL;
10795
10796 l_ar_rec_notify_flag VARCHAR2(1) := NULL; -- 7508661 : EnC
10797 l_auto_release_pwp_inv VARCHAR2(1) := NULL; -- 7508661 : EnC
10798
10799 /* Added for 12.2Payroll billing ER 11899223 */
10800 l_bill_labor_accrual varchar2(1) := null;
10801 l_adj_on_std_inv varchar2(2) := null;
10802
10803 /* Added for 12.2Payroll billing ER 11899223 */
10804 CURSOR cur_rev_inv(p_project_id IN VARCHAR2)
10805 IS
10806 SELECT 'Y'
10807 FROM dual
10808 WHERE EXISTS
10809 (SELECT NULL
10810 FROM
10811 pa_draft_revenues r
10812 WHERE
10813 r.project_id = p_project_id
10814 )
10815 OR EXISTS
10816 (SELECT NULL
10817 FROM
10818 pa_draft_invoices i
10819 WHERE
10820 i.project_id = p_project_id
10821 );
10822 l_chk_rev_inv_flag VARCHAR2(1) := NULL;
10823
10824
10825 CURSOR chk_task_level_funding(p_project_id IN VARCHAR2)
10826 IS
10827 SELECT 'Y'
10828 FROM dual
10829 WHERE exists
10830 ( select 1
10831 from pa_summary_project_fundings
10832 where project_id = p_project_id
10833 and task_id is not null
10834 );
10835
10836 l_chk_task_level_funding VARCHAR2(1) := NULL;
10837
10838 CURSOR count_cust(p_project_id IN VARCHAR2)
10839 IS
10840 SELECT count(*)
10841 FROM pa_project_customers
10842 WHERE project_id = p_project_id;
10843
10844 l_count_cust NUMBER := 0; -- bug# 12972554, Changed datatype of l_count_cust from VARCHAR2(1) TO NUMBER.
10845
10846 --sunkalya federal bug#5511353
10847
10848
10849 --bug#5554475
10850
10851 CURSOR cur_pa_impl
10852 IS
10853 SELECT default_rate_type
10854 FROM pa_implementations;
10855
10856 l_ALLOW_INV_USER_RATE_FLAG VARCHAR2(1) ;
10857 l_INV_RATE_DATE DATE;
10858 l_INV_RATE_TYPE VARCHAR2 (256) ;
10859 l_USER_INV_RATE_TYPE VARCHAR2 (256) ;
10860 l_INV_CURRENCY_CODE VARCHAR (15) ;
10861 l_INV_EXCHANGE_RATE NUMBER ;
10862 l_mcb_flag varchar2(1);
10863 l_cc_prvdr_flag varchar2(1);
10864
10865 --bug#5554475
10866
10867 l_default_top_task_cust_flag varchar2(1); --bug 5554578
10868
10869 --Bug#9110781
10870 l_rowid VARCHAR2(255);
10871 l_obj_status_change_id NUMBER;
10872 l_old_sys_status VARCHAR2(30);
10873 l_new_sys_status VARCHAR2(30);
10874
10875 CURSOR cur_get_system_status(c_status_code IN VARCHAR2) IS
10876 SELECT pps.project_system_status_code
10877 FROM pa_project_statuses pps
10878 WHERE pps.project_status_code = nvl(c_status_code,' ');
10879
10880 /*Adding new cursor for bug 10043448 */
10881 CURSOR cur_inv_date(x_task_id pa_tasks.task_id%type) IS
10882 SELECT MAX(EXPENDITURE_ITEM_DATE)
10883 FROM ap_invoice_distributions_all aid
10884 WHERE project_id = p_project_in.pa_project_id AND
10885 aid.task_id IN (SELECT p.task_id
10886 FROM pa_tasks p
10887 START WITH p.task_id= x_task_id
10888 CONNECT BY PRIOR p.task_id = p.parent_task_id) ;
10889
10890 x_si_date ap_invoices_all.invoice_date%TYPE ;
10891
10892 BEGIN
10893
10894 SAVEPOINT Update_project_pub;
10895
10896 IF FND_API.TO_BOOLEAN( p_init_msg_list )
10897 THEN
10898 FND_MSG_PUB.Initialize;
10899 END IF;
10900
10901 --4218977, rtarway
10902 --we need to set this parameter only when called in AMG/MSP and not in publish flow
10903 --dbms_output.put_line('p_project_in.project_relationship_code'||p_project_in.project_relationship_code);
10904 if (p_pm_product_code <> 'WORKPLAN') then
10905 G_OP_VALIDATE_FLAG := p_op_validate_flag ;
10906 G_TASK_STR_UPDATE_MODE := p_update_mode ; -- DHI ER , rtarway BUG 4413568
10907 end if;
10908
10909 -- Standard call to check for call compatibility.
10910 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
10911 p_api_version_number ,
10912 l_api_name ,
10913 G_PKG_NAME )
10914 THEN
10915 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10916 END IF;
10917
10918 p_return_status := FND_API.G_RET_STS_SUCCESS;
10919
10920 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
10921
10922 -- <Bug#2881768>
10923 -- If structure_version_id has been provided
10924 -- check to see if this version is updatable
10925 -- if not, then throw error and return
10926
10927 l_structure_version_id := p_structure_in.structure_version_id;
10928
10929 --3703440, rtarway
10930 G_structure_in_rec.pa_project_id := p_structure_in.pa_project_id;
10931 G_structure_in_rec.structure_type := p_structure_in.structure_type;
10932 G_structure_in_rec.structure_version_name := p_structure_in.structure_version_name;
10933 G_structure_in_rec.structure_version_id := p_structure_in.structure_version_id;
10934 G_structure_in_rec.DESCRIPTION := p_structure_in.DESCRIPTION;
10935
10936
10937 --bug 4619824
10938 IF l_debug_mode = 'Y' THEN
10939 pa_debug.g_err_stage := 'Checking if the project is a program project';
10940 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10941 END IF;
10942
10943 IF p_pm_product_code IS NOT NULL
10944 AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
10945 AND p_pm_product_code <> 'WORKPLAN' --bug 4621311
10946 AND PA_RELATIONSHIP_UTILS.Check_subproject_link_exists( p_project_in.pa_project_id ) = 'Y'
10947 AND p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- Added the condition for Bug 7248969
10948 AND p_tasks_in.count > 0 -- Added the condition for Bug 7248969
10949 THEN
10950 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10951 p_msg_name => 'PA_PS_CANT_UPDATE_PROG_PRJ');
10952 RAISE FND_API.G_EXC_ERROR;
10953 END IF;
10954 --end bug 4619824
10955
10956 IF l_debug_mode = 'Y' THEN
10957 pa_debug.g_err_stage := 'Calling PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable' || p_structure_in.structure_version_id;
10958 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10959 END IF;
10960
10961 IF ( l_structure_version_id IS NOT NULL AND l_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
10962 THEN
10963
10964 --bug 4538849
10965
10966 -- Begin Bug # 4582750.
10967
10968 l_prev_locked_status := PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,l_structure_version_id);
10969
10970 if ( l_prev_locked_status = 'O' ) then
10971
10972 -- End Bug # 4582750.
10973
10974 --if yes, raise error.
10975 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
10976 p_msg_name => 'PA_STR_LOCKED_BY_OTHER');
10977 RAISE FND_API.G_EXC_ERROR;
10978
10979 -- Begin Bug # 4582750.
10980
10981 elsif ( l_prev_locked_status = 'N' ) then
10982
10983 if (p_update_mode = 'PA_UPD_WBS_ATTR') and (p_pm_product_code <> 'WORKPLAN') then -- Bug # 4758888.
10984
10985 IF l_debug_mode = 'Y' THEN
10986 pa_debug.g_err_stage := 'Before calling pa_project_structure_utils.lock_unlock_wp_str_autonomous for LOCKING'||
10987 'p_project_in.pa_project_id='||p_project_in.pa_project_id||
10988 '-l_structure_version_id='||l_structure_version_id;
10989 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
10990 END IF;
10991
10992 pa_project_structure_utils.lock_unlock_wp_str_autonomous
10993 (p_project_id => p_project_in.pa_project_id
10994 ,p_structure_version_id => p_structure_in.structure_version_id
10995 ,p_lock_status_code => 'LOCKED'
10996 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
10997 ,x_return_status => l_x_return_status
10998 ,x_msg_count => l_x_msg_count
10999 ,x_msg_data => l_x_msg_data);
11000
11001 IF l_debug_mode = 'Y' THEN
11002 pa_debug.g_err_stage := 'After calling pa_project_structure_utils.lock_unlock_wp_str_autonomous for LOCKING'||
11003 'l_x_return_status='||l_x_return_status;
11004 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11005 END IF;
11006
11007 IF l_x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
11008 THEN
11009 p_project_out.return_status := l_x_return_status;
11010 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11011
11012 ELSIF l_x_return_status = FND_API.G_RET_STS_ERROR
11013 THEN
11014 p_project_out.return_status := l_x_return_status;
11015 RAISE FND_API.G_EXC_ERROR;
11016 END IF;
11017
11018 end if;
11019
11020 -- End Bug # 4582750.
11021
11022 end if;
11023 --end bug 4538849
11024
11025 IF p_project_in.adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11026 THEN
11027 proj_adj_on_std_inv := NULL;
11028 ELSE
11029 proj_adj_on_std_inv := p_project_in.adj_on_std_inv;
11030 END IF;
11031
11032
11033 if proj_adj_on_std_inv is not null then
11034 OPEN c_adj_on_std_inv(proj_adj_on_std_inv);
11035 FETCH c_adj_on_std_inv into t_adj_on_std_inv;
11036 CLOSE c_adj_on_std_inv;
11037
11038 if t_adj_on_std_inv <> 'X' then
11039
11040 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
11041 ,p_msg_name => 'PA_INVALID_ADJ_ON_STD_INV');
11042
11043 l_return_status := FND_API.G_RET_STS_ERROR;
11044
11045 RAISE FND_API.G_EXC_ERROR;
11046
11047
11048
11049 END IF;
11050
11051 end if;
11052
11053 struct_ver_updatable := PA_PROJECT_STRUCTURE_UTILS.is_structure_version_updatable(l_structure_version_id);
11054
11055 IF l_debug_mode = 'Y' THEN
11056 pa_debug.g_err_stage := 'struct_ver_updatable='||struct_ver_updatable;
11057 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11058 END IF;
11059
11060 IF (struct_ver_updatable IS NULL OR struct_ver_updatable = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11061 OR struct_ver_updatable = 'N')
11062 THEN
11063 -- add error message to stack and throw exception
11064 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11065 THEN
11066 pa_interface_utils_pub.map_new_amg_msg
11067 ( p_old_message_code => 'PA_STRUCT_VER_NO_UPDATE'
11068 ,p_msg_attribute => 'CHANGE'
11069 ,p_resize_flag => 'N'
11070 ,p_msg_context => 'GENERAL'
11071 ,p_attribute1 => ''
11072 ,p_attribute2 => ''
11073 ,p_attribute3 => ''
11074 ,p_attribute4 => ''
11075 ,p_attribute5 => '');
11076 END IF;
11077 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11078 RAISE FND_API.G_EXC_ERROR;
11079 /* bug 4538849
11080 --bug 4413568, DHI ER, rtarway
11081 ELSIF (struct_ver_updatable = 'Y') THEN
11082 -- structure version is locked by another user check must be done in both update modes. bug 4519809
11083 --IF (p_update_mode = 'PA_UPD_TASK_ATTR') THEN --bug 4534919
11084 --Check if str version is locked by another user
11085 if ( PA_PROJECT_STRUCTURE_UTILS.IS_STRUC_VER_LOCKED_BY_USER(FND_GLOBAL.USER_ID,l_structure_version_id) = 'O' ) then
11086 --if yes, raise error.
11087 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
11088 p_msg_name => 'PA_STR_LOCKED_BY_OTHER');
11089 RAISE FND_API.G_EXC_ERROR;
11090 end if;
11091 --END IF;
11092 */
11093 END IF;
11094 END IF;
11095 l_structure_version_id := null;
11096 -- </Bug#2881768>
11097
11098 --Organization Forecasting.
11099 --Do not allow updating an org project
11100 IF PA_FP_ORG_FCST_UTILS.check_org_project(
11101 p_project_id => p_project_in.pa_project_id
11102 ,x_return_status => l_return_status
11103 ,x_err_code => l_err_code
11104 ) = 'Y'
11105 THEN
11106 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11107 THEN
11108 pa_interface_utils_pub.map_new_amg_msg
11109 ( p_old_message_code => 'PA_CANT_UPD_ORG_PRJ'
11110 ,p_msg_attribute => 'CHANGE'
11111 ,p_resize_flag => 'N'
11112 ,p_msg_context => 'GENERAL'
11113 ,p_attribute1 => ''
11114 ,p_attribute2 => ''
11115 ,p_attribute3 => ''
11116 ,p_attribute4 => ''
11117 ,p_attribute5 => '');
11118 END IF;
11119
11120 -- PA_UTILS.ADD_MESSAGE('PA', 'PA_ORG_FC_CANT_UPD_ORG_PRJ');
11121 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11122 RAISE FND_API.G_EXC_ERROR;
11123 END IF;
11124 --Organization Forecasting.
11125 --Do not allow updating an org project
11126
11127 -- 22-DEC-97, jwhite:
11128 -- Initialize New OUT-parameter to indicate workflow status
11129
11130 -- Set Worflow Started Status -------------------------------------------------
11131
11132 p_workflow_started := 'N';
11133 -- ------------------------------------------------------------------------------------
11134
11135
11136 -- pm_product_code is mandatory
11137
11138 --bug 2841158
11139 -- IF ( p_pm_product_code IS NULL
11140 -- OR p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
11141 IF ( p_pm_product_code IS NOT NULL
11142 AND p_pm_product_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
11143 --bug 284115
11144 AND p_pm_product_code <> 'WORKPLAN' --bug 2665656
11145 THEN
11146
11147 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11148 THEN
11149 pa_interface_utils_pub.map_new_amg_msg
11150 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_MISSING'
11151 ,p_msg_attribute => 'CHANGE'
11152 ,p_resize_flag => 'N'
11153 ,p_msg_context => 'GENERAL'
11154 ,p_attribute1 => ''
11155 ,p_attribute2 => ''
11156 ,p_attribute3 => ''
11157 ,p_attribute4 => ''
11158 ,p_attribute5 => '');
11159 END IF;
11160 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11161 RAISE FND_API.G_EXC_ERROR;
11162 END IF;
11163
11164 --bug 2841158
11165 IF p_pm_product_code <> 'WORKPLAN'
11166 AND p_pm_product_code IS NOT NULL
11167 AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11168 THEN
11169 --bug 2841158
11170
11171 /*added for bug no :2413400*/
11172 OPEN p_product_code_csr (p_pm_product_code);
11173 FETCH p_product_code_csr INTO l_pm_product_code;
11174 CLOSE p_product_code_csr;
11175
11176 IF l_pm_product_code <> 'X'
11177 AND p_pm_product_code <> 'WORKPLAN' --bug 2665656
11178 THEN
11179
11180 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11181 THEN
11182 pa_interface_utils_pub.map_new_amg_msg
11183 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
11184 ,p_msg_attribute => 'CHANGE'
11185 ,p_resize_flag => 'N'
11186 ,p_msg_context => 'GENERAL'
11187 ,p_attribute1 => ''
11188 ,p_attribute2 => ''
11189 ,p_attribute3 => ''
11190 ,p_attribute4 => ''
11191 ,p_attribute5 => '');
11192 END IF;
11193 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11194 p_return_status := FND_API.G_RET_STS_ERROR;
11195 RAISE FND_API.G_EXC_ERROR;
11196 END IF;
11197 END IF; --bug 2841158
11198
11199 l_resp_id := FND_GLOBAL.Resp_id;
11200 l_user_id := FND_GLOBAL.User_id;
11201 --l_module_name := p_pm_product_code||'.'||'PA_PM_UPDATE_PROJECT';
11202 l_module_name := 'PA_PM_UPDATE_PROJECT';
11203
11204 --bug 2665656
11205 IF NVL( p_pm_product_code, 'WORKPLAN' ) = 'WORKPLAN'
11206 THEN
11207 l_pm_product_code := null;
11208 END IF;
11209 --bug 2665656
11210
11211
11212 --Moved this code here before calling security check to get project id in l_project_i d
11213 --bug 2471668
11214 -- convert pm_project_reference to id
11215
11216 IF l_debug_mode = 'Y' THEN
11217 pa_debug.g_err_stage := 'Performing ref to id conversion...';
11218 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11219 END IF;
11220
11221
11222 Pa_project_pvt.Convert_pm_projref_to_id (
11223 p_pm_project_reference => p_project_in.pm_project_reference,
11224 p_pa_project_id => p_project_in.pa_project_id,
11225 p_out_project_id => l_project_id,
11226 p_return_status => l_return_status );
11227
11228
11229 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
11230 THEN
11231 p_project_out.return_status := l_return_status;
11232 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11233
11234 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11235 THEN
11236 p_project_out.return_status := l_return_status;
11237 RAISE FND_API.G_EXC_ERROR;
11238 END IF;
11239 --bug 2471668
11240
11241
11242 IF l_debug_mode = 'Y' THEN
11243 pa_debug.g_err_stage := 'Performing security check...';
11244 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11245 END IF;
11246
11247 -- As part of enforcing project security, which would determine
11248 -- whether the user has the necessary privileges to update the project
11249 -- need to call the pa_security package
11250
11251 pa_security.initialize (X_user_id => l_user_id,
11252 X_calling_module => l_module_name);
11253
11254 -- Actions performed using the APIs would be subject to
11255 -- function security. If the responsibility does not allow
11256 -- such functions to be executed, the API should not proceed further
11257 -- since the user does not have access to such functions
11258
11259 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id; --bug 2471668 ( in the project context )
11260
11261 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
11262 (p_api_version_number => p_api_version_number,
11263 p_responsibility_id => l_resp_id,
11264 p_function_name => 'PA_PM_UPDATE_PROJECT',
11265 p_msg_count => l_msg_count,
11266 p_msg_data => l_msg_data,
11267 p_return_status => l_return_status,
11268 p_function_allowed => l_function_allowed );
11269
11270
11271 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
11272 THEN
11273 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11274
11275 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11276 THEN
11277 RAISE FND_API.G_EXC_ERROR;
11278 END IF;
11279 IF l_function_allowed = 'N' THEN
11280 pa_interface_utils_pub.map_new_amg_msg
11281 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
11282 ,p_msg_attribute => 'CHANGE'
11283 ,p_resize_flag => 'Y'
11284 ,p_msg_context => 'GENERAL'
11285 ,p_attribute1 => ''
11286 ,p_attribute2 => ''
11287 ,p_attribute3 => ''
11288 ,p_attribute4 => ''
11289 ,p_attribute5 => '');
11290 p_return_status := FND_API.G_RET_STS_ERROR;
11291 RAISE FND_API.G_EXC_ERROR;
11292 END IF;
11293
11294
11295 /* Moving this code before doing security check for bug 2471668
11296 -- convert pm_project_reference to id
11297
11298 Pa_project_pvt.Convert_pm_projref_to_id (
11299 p_pm_project_reference => p_project_in.pm_project_reference,
11300 p_pa_project_id => p_project_in.pa_project_id,
11301 p_out_project_id => l_project_id,
11302 p_return_status => l_return_status );
11303
11304
11305 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
11306 THEN
11307 p_project_out.return_status := l_return_status;
11308 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11309
11310 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
11311 THEN
11312 p_project_out.return_status := l_return_status;
11313 RAISE FND_API.G_EXC_ERROR;
11314 END IF;
11315 */ --bug 2471668
11316
11317 -- Get segment1 for AMG messages
11318
11319 OPEN l_amg_project_csr( l_project_id );
11320 FETCH l_amg_project_csr INTO l_amg_segment1;
11321 CLOSE l_amg_project_csr;
11322
11323
11324 -- Now verify whether project security allows the user to update
11325 -- project
11326
11327 IF pa_security.allow_query (x_project_id => l_project_id ) = 'N' THEN
11328
11329 -- The user does not have query privileges on this project
11330 -- Hence, cannot update the project.Raise error
11331 pa_interface_utils_pub.map_new_amg_msg
11332 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
11333 ,p_msg_attribute => 'CHANGE'
11334 ,p_resize_flag => 'Y'
11335 ,p_msg_context => 'GENERAL'
11336 ,p_attribute1 => ''
11337 ,p_attribute2 => ''
11338 ,p_attribute3 => ''
11339 ,p_attribute4 => ''
11340 ,p_attribute5 => '');
11341 p_return_status := FND_API.G_RET_STS_ERROR;
11342 RAISE FND_API.G_EXC_ERROR;
11343 ELSE
11344 -- If the user has query privileges, then check whether
11345 -- update privileges are also available
11346 IF pa_security.allow_update (x_project_id => l_project_id ) = 'N' THEN
11347
11348 -- The user does not have update privileges on this project
11349 -- Hence , raise error
11350 pa_interface_utils_pub.map_new_amg_msg
11351 ( p_old_message_code => 'PA_PROJECT_SECURITY_ENFORCED'
11352 ,p_msg_attribute => 'CHANGE'
11353 ,p_resize_flag => 'Y'
11354 ,p_msg_context => 'GENERAL'
11355 ,p_attribute1 => ''
11356 ,p_attribute2 => ''
11357 ,p_attribute3 => ''
11358 ,p_attribute4 => ''
11359 ,p_attribute5 => '');
11360 p_return_status := FND_API.G_RET_STS_ERROR;
11361 RAISE FND_API.G_EXC_ERROR;
11362 END IF;
11363 END IF;
11364
11365 -- Lock this project and it's tasks for update
11366 -- bug 4541103 OPEN l_lock_rows_csr( l_project_id );
11367
11368 -- Need to get the current project data
11369
11370 OPEN l_project_csr (l_project_id);
11371 FETCH l_project_csr INTO l_project_rec;
11372 CLOSE l_project_csr;
11373
11374 -- 4188765 , setting customer top task flag db value in local variable
11375 l_old_cust_top_task_flag := l_project_rec.enable_top_task_customer_flag;
11376 l_old_date_eff_funds_flag := l_project_rec.date_eff_funds_consumption; --sunkalya federal Bug#5511353
11377
11378 -- anlee
11379 -- Added for intermedia search
11380 l_ctx_proj_name := l_project_rec.name;
11381 l_ctx_proj_number := l_project_rec.segment1;
11382 l_ctx_long_name := l_project_rec.long_name;
11383 l_ctx_desc := l_project_rec.description;
11384 l_ctx_update_flag := 'N';
11385 -- End of changes
11386
11387 --bug 2738747 --update project
11388 G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
11389 G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
11390 G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
11391 --bug 2738747
11392 G_WP_STR_EXISTS := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id );
11393
11394 IF l_debug_mode = 'Y' THEN
11395 pa_debug.g_err_stage := 'G_Published_version_exists='||G_Published_version_exists;
11396 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11397 pa_debug.g_err_stage := 'G_IS_WP_SEPARATE_FROM_FN='||G_IS_WP_SEPARATE_FROM_FN;
11398 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11399 pa_debug.g_err_stage := 'G_IS_WP_VERSIONING_ENABLED='||G_IS_WP_VERSIONING_ENABLED;
11400 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11401 pa_debug.g_err_stage := 'G_WP_STR_EXISTS='||G_WP_STR_EXISTS;
11402 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11403 END IF;
11404
11405
11406 --bug 2876703 --update_project
11407 IF G_IS_WP_SEPARATE_FROM_FN = 'N' AND
11408 p_structure_in.structure_type = 'WORKPLAN'
11409 THEN
11410 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11411 THEN
11412 pa_interface_utils_pub.map_new_amg_msg
11413 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
11414 ,p_msg_attribute => 'CHANGE'
11415 ,p_resize_flag => 'N'
11416 ,p_msg_context => 'GENERAL'
11417 ,p_attribute1 => ''
11418 ,p_attribute2 => ''
11419 ,p_attribute3 => ''
11420 ,p_attribute4 => ''
11421 ,p_attribute5 => '');
11422 END IF;
11423 RAISE FND_API.G_EXC_ERROR;
11424 END IF;
11425 --bug 2876703
11426
11427 -- "Change Project Currency" changes By avaithia for Bug 3912783
11428 -- << Start >>
11429 -- Functionality :-
11430 -- If Project Currency is changed ,then we should check whether this Project has any subprojects
11431 -- (or) whether this Project is a subproject of some other project
11432 -- If any of the above two is true ,then the Project Currency Change should not be allowed .
11433
11434 -- Note : In the following "IF" statement ,it may look like "the case where project_currency_code is passed as NULL
11435 -- is not taken care of" . But existing code already takes care of this scenario (l_b_proj_cur_code value logic)
11436
11437 -- This flag is set as 'Y' Only if the passed value is not null
11438 -- And dbms bind will happen for this project currency code ,Only if the l_b_proj_cur_code value is 'Y'
11439
11440 IF ( p_project_in.project_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11441 AND ( p_project_in.project_currency_code IS NOT NULL)
11442 THEN
11443 IF nvl(p_project_in.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11444 <> nvl(l_project_rec.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11445 THEN
11446 IF PA_RELATIONSHIP_UTILS.Check_link_exists(l_project_id) = 'Y'
11447 THEN
11448 -- Throw Error Message
11449 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11450 THEN
11451
11452 -- Bug # 4329284.
11453
11454 /*
11455 pa_interface_utils_pub.map_new_amg_msg
11456 (p_old_message_code => 'PA_PS_PRJ_CURR_LNK_ERR'
11457 ,p_msg_attribute => 'CHANGE'
11458 ,p_resize_flag => 'N'
11459 ,p_msg_context => 'GENERAL'
11460 ,p_attribute1 => ''
11461 ,p_attribute2 => ''
11462 ,p_attribute3 => ''
11463 ,p_attribute4 => ''
11464 ,p_attribute5 => '');
11465 */
11466
11467 open cur_proj_name(l_project_id);
11468 fetch cur_proj_name into l_proj_name;
11469 close cur_proj_name;
11470
11471 open cur_prog_name(l_project_id);
11472 fetch cur_prog_name into l_prog_name;
11473 close cur_prog_name;
11474
11475 PA_UTILS.ADD_MESSAGE('PA','PA_PS_PRJ_CURR_LNK_ERR','PROJ',l_proj_name,'PROG',l_prog_name); -- Bug # 4329284.
11476
11477 -- Bug # 4329284.
11478
11479 END IF ;
11480 p_return_status := FND_API.G_RET_STS_ERROR;
11481 RAISE FND_API.G_EXC_ERROR;
11482 END IF ;
11483 END IF ;
11484 END IF ;
11485 -- << End >>
11486 -- "Change Project Currency" changes By avaithia
11487
11488 --bug 2738747
11489 ----dbms_output.put_line('PA_PROJECT_PUB.G_Published_version_exists'||PA_PROJECT_PUB.G_Published_version_exists);
11490 ----dbms_output.put_line('PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN'||PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN);
11491 ----dbms_output.put_line('PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED'||PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED);
11492 ----dbms_output.put_line('p_structure_in.structure_type'||p_structure_in.structure_type);
11493 ----dbms_output.put_line('p_pm_product_code'||p_pm_product_code);
11494 IF PA_PROJECT_PUB.G_Published_version_exists = 'Y'
11495 AND PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N'
11496 AND PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y'
11497 AND p_structure_in.structure_type = 'FINANCIAL'
11498 AND p_pm_product_code <> 'WORKPLAN' --This parameter should be checked bcoz for publishing we want it to syn up with pa_tasks . For publishing p_pm_product_code will have 'WORKPLAN'
11499 THEN
11500 --Change the flow to WORKPLAN
11501 l_structure_type := 'WORKPLAN';
11502
11503
11504 ELSE
11505 l_structure_type := p_structure_in.structure_type;
11506 END IF;
11507 --bug 2738747
11508
11509 IF l_debug_mode = 'Y' THEN
11510 pa_debug.g_err_stage := 'l_structure_type='||l_structure_type;
11511 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11512 END IF;
11513
11514
11515 -- Need to fetch information from pa_project_types
11516
11517 /* Bug# 2891513- Added the variables for l_revaluate_funding and l_include_gains_and_losses */
11518
11519 OPEN l_project_type_csr(l_project_id);
11520 FETCH l_project_type_csr INTO l_project_type_class_code,
11521 l_service_type_code, l_revaluate_funding,l_include_gains_and_losses;
11522 CLOSE l_project_type_csr;
11523
11524 IF l_debug_mode = 'Y' THEN
11525 pa_debug.g_err_stage := 'Preparing to update project level data...';
11526 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
11527 END IF;
11528
11529
11530
11531 l_update_yes_flag := 'N';
11532 l_statement := 'UPDATE PA_PROJECTS SET ';
11533
11534 --PROJECT NUMBER
11535 -- Check for implementation defined Project number generation mode
11536 -- If project number generation is automatic then ignore the input
11537 -- project number ,since it cannot be modified.Hence,the following
11538 -- checks will be done only if the mode was 'MANUAL'
11539
11540 IF G_PROJECT_NUMBER_GEN_MODE = 'MANUAL' THEN
11541 IF p_project_in.pa_project_number <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11542 AND p_project_in.pa_project_number IS NOT NULL
11543 THEN
11544 IF p_project_in.pa_project_number <> l_project_rec.segment1
11545 THEN
11546 pa_project_utils.change_proj_num_ok
11547 (l_project_id,
11548 l_err_code,
11549 l_err_stage,
11550 l_err_stack );
11551 IF l_err_code > 0
11552 THEN
11553
11554 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11555 THEN
11556 IF NOT pa_project_pvt.check_valid_message (l_err_stage)
11557 THEN
11558 pa_interface_utils_pub.map_new_amg_msg
11559 ( p_old_message_code => 'PA_CANT_CHANGE_PROJ_NUM'
11560 ,p_msg_attribute => 'CHANGE'
11561 ,p_resize_flag => 'N'
11562 ,p_msg_context => 'PROJ'
11563 ,p_attribute1 => l_project_rec.segment1
11564 ,p_attribute2 => ''
11565 ,p_attribute3 => ''
11566 ,p_attribute4 => ''
11567 ,p_attribute5 => '');
11568 ELSE
11569 pa_interface_utils_pub.map_new_amg_msg
11570 ( p_old_message_code => l_err_stage
11571 ,p_msg_attribute => 'CHANGE'
11572 ,p_resize_flag => 'N'
11573 ,p_msg_context => 'PROJ'
11574 ,p_attribute1 => l_project_rec.segment1
11575 ,p_attribute2 => ''
11576 ,p_attribute3 => ''
11577 ,p_attribute4 => ''
11578 ,p_attribute5 => '');
11579 END IF;
11580 END IF;
11581
11582 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11583
11584 RAISE FND_API.G_EXC_ERROR;
11585
11586 ELSIF l_err_code < 0
11587 THEN
11588
11589 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11590
11591 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11592 END IF;
11593 -- BEGIN MSP interface patch
11594
11595 -- Check for project number being numeric if project number type is
11596 -- defined as numeric
11597
11598 BEGIN
11599 IF G_PROJECT_NUMBER_TYPE = 'NUMERIC' THEN
11600 l_proj_num_numeric :=
11601 TO_NUMBER(p_project_in.pa_project_number);
11602 END IF;
11603 EXCEPTION
11604 WHEN VALUE_ERROR THEN
11605 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11606 THEN
11607 pa_interface_utils_pub.map_new_amg_msg
11608 ( p_old_message_code => 'PA_PR_NUMERIC_NUM_REQ'
11609 ,p_msg_attribute => 'CHANGE'
11610 ,p_resize_flag => 'N'
11611 ,p_msg_context => 'PROJ'
11612 ,p_attribute1 => l_project_rec.segment1
11613 ,p_attribute2 => ''
11614 ,p_attribute3 => ''
11615 ,p_attribute4 => ''
11616 ,p_attribute5 => '');
11617 END IF;
11618 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11619 p_return_status := FND_API.G_RET_STS_ERROR;
11620 RAISE FND_API.G_EXC_ERROR;
11621 END ;
11622
11623 -- END MSP interface patch -- Ensure that l_proj_num_numeric is defined
11624
11625 OPEN l_project_number_unique_csr( p_project_in.pa_project_number );
11626 FETCH l_project_number_unique_csr INTO l_DUMMY;
11627
11628 IF l_project_number_unique_csr%FOUND
11629 THEN
11630 CLOSE l_project_number_unique_csr;
11631
11632 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11633 THEN
11634 pa_interface_utils_pub.map_new_amg_msg
11635 ( p_old_message_code => 'PA_PR_EPR_PROJ_NUM_NOT_UNIQUE'
11636 ,p_msg_attribute => 'CHANGE'
11637 ,p_resize_flag => 'Y'
11638 ,p_msg_context => 'MODP'
11639 ,p_attribute1 => l_project_rec.segment1
11640 ,p_attribute2 => ''
11641 ,p_attribute3 => ''
11642 ,p_attribute4 => ''
11643 ,p_attribute5 => '');
11644 END IF;
11645
11646 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11647
11648 RAISE FND_API.G_EXC_ERROR;
11649 END IF;
11650
11651 CLOSE l_project_number_unique_csr;
11652
11653 --bug 2955326
11654 /*
11655 l_statement := l_statement ||
11656 ' SEGMENT1 = '||''''||
11657 RTRIM(p_project_in.pa_project_number)||''''||',';
11658 */
11659 l_statement := l_statement ||
11660 ' SEGMENT1 = :segment1,';
11661 l_b_segment1_flag := 'Y';
11662 --end bug 2955326
11663 l_update_yes_flag := 'Y';
11664
11665 -- anlee
11666 -- added for intermedia search
11667 l_ctx_proj_number := RTRIM(p_project_in.pa_project_number);
11668 l_ctx_update_flag := 'Y';
11669 -- End of changes
11670
11671 END IF;
11672 END IF;
11673 END IF;
11674
11675 --PROJECT NAME
11676
11677 IF p_project_in.project_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11678 AND p_project_in.project_name IS NOT NULL
11679 THEN
11680 IF p_project_in.project_name <> l_project_rec.name
11681 THEN
11682
11683 OPEN l_project_name_unique_csr( p_project_in.project_name );
11684 FETCH l_project_name_unique_csr INTO l_dummy;
11685
11686 IF l_project_name_unique_csr%FOUND
11687 THEN
11688 CLOSE l_project_name_unique_csr;
11689
11690 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11691 THEN
11692 pa_interface_utils_pub.map_new_amg_msg
11693 ( p_old_message_code => 'PA_PR_EPR_PROJ_NAME_NOT_UNIQUE'
11694 ,p_msg_attribute => 'CHANGE'
11695 ,p_resize_flag => 'Y'
11696 ,p_msg_context => 'MODP'
11697 ,p_attribute1 => l_project_rec.segment1
11698 ,p_attribute2 => ''
11699 ,p_attribute3 => ''
11700 ,p_attribute4 => ''
11701 ,p_attribute5 => '');
11702 END IF;
11703
11704 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11705
11706 RAISE FND_API.G_EXC_ERROR;
11707 END IF;
11708
11709 CLOSE l_project_name_unique_csr;
11710
11711 --bug 2955326
11712 /*
11713 l_statement := l_statement ||
11714 ' NAME = '||''''||
11715 RTRIM(p_project_in.project_name)||''''||',' ;
11716 */
11717 l_statement := l_statement ||
11718 ' NAME = :project_name, ';
11719 l_b_proj_name_flag := 'Y';
11720 --end bug 2955326
11721 l_update_yes_flag := 'Y';
11722
11723 -- anlee
11724 -- Added for intermedia search
11725 l_ctx_proj_name := RTRIM(p_project_in.project_name);
11726 l_ctx_update_flag := 'Y';
11727 -- End of changes
11728 END IF;
11729 END IF;
11730
11731 --LONG NAME
11732
11733 IF p_project_in.long_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11734 AND p_project_in.long_name IS NOT NULL
11735 THEN
11736 IF p_project_in.long_name <> l_project_rec.long_name
11737 THEN
11738
11739 OPEN l_long_name_unique_csr( p_project_in.long_name );
11740 FETCH l_long_name_unique_csr INTO l_dummy;
11741
11742 IF l_long_name_unique_csr%FOUND
11743 THEN
11744 CLOSE l_long_name_unique_csr;
11745
11746 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11747 THEN
11748 pa_interface_utils_pub.map_new_amg_msg
11749 ( p_old_message_code => 'PA_PR_EPR_LONG_NAME_NOT_UNIQUE'
11750 ,p_msg_attribute => 'CHANGE'
11751 ,p_resize_flag => 'Y'
11752 ,p_msg_context => 'MODP'
11753 ,p_attribute1 => l_project_rec.segment1
11754 ,p_attribute2 => ''
11755 ,p_attribute3 => ''
11756 ,p_attribute4 => ''
11757 ,p_attribute5 => '');
11758 END IF;
11759
11760 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11761
11762 RAISE FND_API.G_EXC_ERROR;
11763 END IF;
11764
11765 CLOSE l_long_name_unique_csr;
11766
11767 --bug 2955326
11768 /*
11769 l_statement := l_statement ||
11770 ' LONG_NAME = '||''''||
11771 RTRIM(p_project_in.long_name)||''''||',' ;
11772 */
11773 l_statement := l_statement ||
11774 ' LONG_NAME = :long_name,';
11775 l_b_long_name_flag := 'Y';
11776 --end bug 2955326
11777 l_update_yes_flag := 'Y';
11778
11779 -- anlee
11780 -- Added for intermedia search
11781 l_ctx_long_name := RTRIM(p_project_in.long_name);
11782 l_ctx_update_flag := 'Y';
11783 -- End of changes
11784 END IF;
11785 END IF;
11786
11787
11788 IF p_project_in.pm_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11789 AND nvl(p_project_in.pm_project_reference,
11790 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
11791 <> nvl(l_project_rec.pm_project_reference,
11792 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
11793 AND p_project_in.pm_project_reference IS NOT NULL THEN
11794 --bug 2955326
11795 /*
11796 l_statement := l_statement ||
11797 ' PM_PROJECT_REFERENCE = '||''''||
11798 RTRIM(p_project_in.pm_project_reference)||''''||',';
11799 */
11800 l_statement := l_statement ||
11801 ' PM_PROJECT_REFERENCE = :pm_project_reference ,';
11802 l_b_pm_proj_ref_flag := 'Y';
11803 --end bug 2955326
11804 l_update_yes_flag := 'Y';
11805
11806 END IF;
11807
11808 --CARRYING_OUT_ORGANIZATION_ID
11809 IF p_project_in.carrying_out_organization_id
11810 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11811 AND p_project_in.carrying_out_organization_id IS NOT NULL THEN
11812 IF p_project_in.carrying_out_organization_id <>
11813 l_project_rec.carrying_out_organization_id THEN
11814 -- check whether this is a valid organization
11815 IF pa_project_pvt.check_valid_org
11816 (p_project_in.carrying_out_organization_id) = 'N' THEN
11817 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11818 THEN
11819 pa_interface_utils_pub.map_new_amg_msg
11820 ( p_old_message_code => 'PA_INVALID_ORG'
11821 ,p_msg_attribute => 'CHANGE'
11822 ,p_resize_flag => 'N'
11823 ,p_msg_context => 'PROJ'
11824 ,p_attribute1 => l_project_rec.segment1
11825 ,p_attribute2 => ''
11826 ,p_attribute3 => ''
11827 ,p_attribute4 => ''
11828 ,p_attribute5 => '');
11829 END IF;
11830 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11831 RAISE FND_API.G_EXC_ERROR;
11832 END IF;
11833
11834 -- Code Added for the bug#1968394
11835 -- Test the function security for Org changes
11836 --
11837 IF (fnd_function.test('PA_PAXPREPR_UPDATE_ORG') = TRUE) THEN
11838 l_org_func_security := 'Y';
11839 ELSE
11840 l_org_func_security := 'N';
11841 END IF;
11842
11843
11844 pa_project_utils2.validate_attribute_change(
11845 X_Context => 'ORGANIZATION_VALIDATION'
11846 ,X_insert_update_mode => NULL
11847 ,X_calling_module => 'UPDATE_PROJECT'
11848 ,X_project_id => l_project_id
11849 ,X_task_id => NULL
11850 ,X_old_value =>
11851 To_char(l_project_rec.carrying_out_organization_id)
11852 ,X_new_value =>
11853 To_char(p_project_in.carrying_out_organization_id)
11854 ,X_project_type => l_project_rec.project_type
11855 ,X_project_start_date => l_project_rec.start_date
11856 ,X_project_end_date => l_project_rec.completion_date
11857 ,X_public_sector_flag => l_project_rec.public_sector_flag
11858 ,X_task_manager_person_id => NULL
11859 ,X_Service_type => NULL
11860 ,X_task_start_date => NULL
11861 ,X_task_end_date => NULL
11862 ,X_entered_by_user_id => FND_GLOBAL.USER_ID
11863 ,X_attribute_category => l_project_rec.attribute_category
11864 ,X_attribute1 => l_project_rec.attribute1
11865 ,X_attribute2 => l_project_rec.attribute2
11866 ,X_attribute3 => l_project_rec.attribute3
11867 ,X_attribute4 => l_project_rec.attribute4
11868 ,X_attribute5 => l_project_rec.attribute5
11869 ,X_attribute6 => l_project_rec.attribute6
11870 ,X_attribute7 => l_project_rec.attribute7
11871 ,X_attribute8 => l_project_rec.attribute8
11872 ,X_attribute9 => l_project_rec.attribute9
11873 ,X_attribute10 => l_project_rec.attribute10
11874 ,X_pm_product_code => l_project_rec.pm_product_code
11875 ,X_pm_project_reference => l_project_rec.pm_project_reference
11876 ,X_pm_task_reference => NULL
11877 -- ,X_functional_security_flag => NULL /*bug#1968394 */
11878 ,X_functional_security_flag => l_org_func_security /*bug#1968394 */
11879 ,x_warnings_only_flag => l_warnings_only_flag --bug3134205
11880 ,X_err_code => l_err_code
11881 ,X_err_stage => l_err_stage
11882 ,X_err_stack => l_err_stack );
11883
11884 IF l_err_code > 0 THEN
11885 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
11886 IF NOT pa_project_pvt.check_valid_message (l_err_stage) THEN
11887 pa_interface_utils_pub.map_new_amg_msg
11888 ( p_old_message_code => 'PA_PR_CANT_CHG_PROJ_TYPE'
11889 ,p_msg_attribute => 'CHANGE'
11890 ,p_resize_flag => 'N'
11891 ,p_msg_context => 'PROJ'
11892 ,p_attribute1 => l_project_rec.segment1
11893 ,p_attribute2 => ''
11894 ,p_attribute3 => ''
11895 ,p_attribute4 => ''
11896 ,p_attribute5 => '');
11897 ELSE
11898 pa_interface_utils_pub.map_new_amg_msg
11899 ( p_old_message_code => l_err_stage
11900 ,p_msg_attribute => 'CHANGE'
11901 ,p_resize_flag => 'N'
11902 ,p_msg_context => 'PROJ'
11903 ,p_attribute1 => l_project_rec.segment1
11904 ,p_attribute2 => ''
11905 ,p_attribute3 => ''
11906 ,p_attribute4 => ''
11907 ,p_attribute5 => '');
11908 END IF;
11909 END IF;
11910 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11911 RAISE FND_API.G_EXC_ERROR;
11912 ELSIF l_err_code < 0 THEN
11913 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11914 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11915 END IF;
11916
11917 --bug 2955326
11918 /*
11919 l_statement := l_statement || ' CARRYING_OUT_ORGANIZATION_ID = ' ||
11920 TO_CHAR(p_project_in.carrying_out_organization_id)||',';
11921 */
11922 l_statement := l_statement || ' CARRYING_OUT_ORGANIZATION_ID = :carrying_out_org_id ,';
11923 l_b_co_org_id_flag := 'Y';
11924 --end bug 2955326
11925 l_update_yes_flag := 'Y';
11926
11927 END IF; -- IF p_project_in.carrying_out_organization_id <>
11928 -- PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
11929 END IF; -- IF p_project_in.carrying_out_organization_id <>
11930 -- l_project_rec.carrying_out_organization_id
11931
11932 --PUBLIC_SECTOR_FLAG
11933
11934 IF p_project_in.public_sector_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11935 AND p_project_in.public_sector_flag IS NOT NULL --NULL will be ignored
11936 THEN
11937 IF p_project_in.public_sector_flag <> l_project_rec.public_sector_flag
11938 THEN
11939
11940 IF p_project_in.public_sector_flag NOT IN ('Y','N')
11941 THEN
11942 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11943 THEN
11944 pa_interface_utils_pub.map_new_amg_msg
11945 ( p_old_message_code => 'PA_PUBLIC_SECTOR_INVALID'
11946 ,p_msg_attribute => 'CHANGE'
11947 ,p_resize_flag => 'N'
11948 ,p_msg_context => 'PROJ'
11949 ,p_attribute1 => l_project_rec.segment1
11950 ,p_attribute2 => ''
11951 ,p_attribute3 => ''
11952 ,p_attribute4 => ''
11953 ,p_attribute5 => '');
11954 END IF;
11955
11956 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
11957 RAISE FND_API.G_EXC_ERROR;
11958 END IF;
11959
11960 --bug 2955326
11961 /*
11962 l_statement := l_statement ||
11963 ' PUBLIC_SECTOR_FLAG = '||''''||
11964 p_project_in.public_sector_flag||''''||',';
11965
11966 */
11967 l_statement := l_statement ||
11968 ' PUBLIC_SECTOR_FLAG = :public_sector_flag ,';
11969 l_b_pub_sec_flag := 'Y';
11970 --end bug 2955326
11971 l_update_yes_flag := 'Y';
11972 END IF;
11973 END IF;
11974
11975 --DISTRIBUTION_RULE
11976
11977 IF p_project_in.distribution_rule <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
11978 OR p_project_in.distribution_rule IS NULL
11979 THEN
11980
11981 IF p_project_in.distribution_rule IS NULL
11982 AND l_project_type_class_code = 'CONTRACT'
11983 THEN
11984
11985 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
11986 THEN
11987 pa_interface_utils_pub.map_new_amg_msg
11988 ( p_old_message_code => 'PA_CONTRACT_DIST_RULE_NULL'
11989 ,p_msg_attribute => 'CHANGE'
11990 ,p_resize_flag => 'N'
11991 ,p_msg_context => 'PROJ'
11992 ,p_attribute1 => l_project_rec.segment1
11993 ,p_attribute2 => ''
11994 ,p_attribute3 => ''
11995 ,p_attribute4 => ''
11996 ,p_attribute5 => '');
11997 END IF;
11998
11999 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12000 RAISE FND_API.G_EXC_ERROR;
12001 ELSE
12002
12003 IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12004 <> nvl(l_project_rec.distribution_rule, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12005
12006 THEN
12007
12008 -- Verify whether the dist rule is a valid one
12009 IF pa_project_pvt.check_valid_dist_rule
12010 (l_project_rec.project_type,
12011 p_project_in.distribution_rule,
12012 p_project_in.enable_top_task_inv_mth_flag ) = 'N' --Bug 3279981
12013 THEN
12014 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12015 THEN
12016 pa_interface_utils_pub.map_new_amg_msg
12017 ( p_old_message_code => 'PA_INVALID_DIST_RULE'
12018 ,p_msg_attribute => 'CHANGE'
12019 ,p_resize_flag => 'N'
12020 ,p_msg_context => 'PROJ'
12021 ,p_attribute1 => l_project_rec.segment1
12022 ,p_attribute2 => ''
12023 ,p_attribute3 => ''
12024 ,p_attribute4 => ''
12025 ,p_attribute5 => '');
12026 END IF;
12027
12028 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12029 RAISE FND_API.G_EXC_ERROR;
12030 END IF;
12031
12032 pa_project_utils.check_dist_rule_chg_ok ( l_project_id,
12033 l_project_rec.distribution_rule,
12034 p_project_in.distribution_rule,
12035 l_err_code,
12036 l_err_stage,
12037 l_err_stack );
12038
12039 IF l_err_code > 0
12040 THEN
12041
12042 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
12043 THEN
12044 IF NOT pa_project_pvt.check_valid_message (l_err_stage)
12045 THEN
12046 pa_interface_utils_pub.map_new_amg_msg
12047 ( p_old_message_code => 'PA_CANT_CHANGE_DIST_RULE'
12048 ,p_msg_attribute => 'CHANGE'
12049 ,p_resize_flag => 'N'
12050 ,p_msg_context => 'PROJ'
12051 ,p_attribute1 => l_project_rec.segment1
12052 ,p_attribute2 => ''
12053 ,p_attribute3 => ''
12054 ,p_attribute4 => ''
12055 ,p_attribute5 => '');
12056 ELSE
12057 pa_interface_utils_pub.map_new_amg_msg
12058 ( p_old_message_code => l_err_stage
12059 ,p_msg_attribute => 'CHANGE'
12060 ,p_resize_flag => 'N'
12061 ,p_msg_context => 'PROJ'
12062 ,p_attribute1 => l_project_rec.segment1
12063 ,p_attribute2 => ''
12064 ,p_attribute3 => ''
12065 ,p_attribute4 => ''
12066 ,p_attribute5 => '');
12067 END IF;
12068 END IF;
12069
12070 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12071 RAISE FND_API.G_EXC_ERROR;
12072
12073 ELSIF l_err_code < 0
12074 THEN
12075
12076 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12077 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12078 END IF;
12079
12080 --bug 2955326
12081 /*
12082 l_statement := l_statement ||
12083 ' DISTRIBUTION_RULE = '||''''||
12084 p_project_in.distribution_rule||''''||',';
12085 */
12086 l_statement := l_statement ||
12087 ' DISTRIBUTION_RULE = :dist_rule ,';
12088 --Bug 3279981 Review
12089 l_statement := l_statement ||' REVENUE_ACCRUAL_METHOD = :rev_acc_mth ,';
12090 l_statement := l_statement ||' INVOICE_METHOD = :inv_mth ,';
12091
12092 l_b_dist_rule_flag := 'Y';
12093 --end bug 2955326
12094 l_update_yes_flag := 'Y';
12095 END IF;
12096 END IF;
12097 END IF;
12098
12099 --DESCRIPTION
12100
12101 IF p_project_in.description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12102 OR p_project_in.description IS NULL
12103 THEN
12104 IF nvl(p_project_in.description,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12105 <> nvl(l_project_rec.description, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12106 THEN
12107 --bug 2955326
12108 /*
12109 l_statement := l_statement ||
12110 ' DESCRIPTION = '||''''||
12111 RTRIM(p_project_in.description)||''''||',';
12112 */
12113 l_statement := l_statement ||
12114 ' DESCRIPTION = :descrp ,';
12115 l_b_desc_flag := 'Y';
12116 --end bug 2955326
12117 l_update_yes_flag := 'Y';
12118
12119 -- anlee
12120 -- Added for intermedia search
12121 l_ctx_desc := RTRIM(p_project_in.description);
12122 l_ctx_update_flag := 'Y';
12123 -- End of changes
12124 END IF;
12125 END IF;
12126
12127 --PROJECT_STATUS_CODE
12128
12129 IF p_project_in.project_status_code <>
12130 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12131 AND p_project_in.project_status_code IS NOT NULL --NULL will be ignored
12132 THEN
12133 IF p_project_in.project_status_code <>
12134 l_project_rec.project_status_code THEN
12135 IF pa_project_pvt.check_valid_project_status
12136 (p_project_status => p_project_in.project_status_code ) = 'N'
12137 THEN
12138 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12139 pa_interface_utils_pub.map_new_amg_msg
12140 ( p_old_message_code => 'PA_PROJECT_STATUS_INVALID'
12141 ,p_msg_attribute => 'CHANGE'
12142 ,p_resize_flag => 'N'
12143 ,p_msg_context => 'PROJ'
12144 ,p_attribute1 => l_project_rec.segment1
12145 ,p_attribute2 => ''
12146 ,p_attribute3 => ''
12147 ,p_attribute4 => ''
12148 ,p_attribute5 => '');
12149 END IF;
12150 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12151 RAISE FND_API.G_EXC_ERROR;
12152 END IF;
12153
12154 -- special case for update to and from 'CLOSED'
12155 IF Pa_project_stus_utils.is_project_status_closed
12156 (p_project_in.project_status_code) = 'Y' THEN
12157 l_closing_project := 'Y';
12158 l_project_status_changed := 'Y';
12159 ELSIF Pa_project_stus_utils.is_project_status_closed
12160 (l_project_rec.project_status_code) = 'Y' THEN
12161 l_reopening_project := 'Y';
12162 l_project_status_changed := 'Y';
12163 ELSE
12164 l_project_status_changed := 'Y';
12165 END IF;
12166 END IF;
12167 END IF;
12168
12169 --PROJECT_START_DATE and PROJECT_COMPLETION_DATE
12170
12171 l_project_start_date := p_project_in.start_date;
12172 l_project_completion_date := p_project_in.completion_date;
12173
12174 -- Bug 7520570: Do not update project dates when the flow is from MSP for the workplan structure
12175 --IF p_pm_product_code = 'MSPROJECT' AND p_structure_in.structure_type = 'WORKPLAN' THEN
12176 -- bug 10071456 : Do not update project dates when the flow is from MSP
12177 IF p_pm_product_code = 'MSPROJECT' THEN
12178 l_project_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
12179 l_project_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
12180 END IF;
12181
12182 -- Bug 503976 Project Completion is set to default g_miss_date ... Starts
12183
12184 IF l_project_in_rec.completion_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12185 THEN l_project_in_rec.completion_date := NULL;
12186 END IF;
12187
12188 -- Bug 503976 Project Completion is set to default g_miss_date ... Ends
12189
12190 pa_project_pvt.check_start_end_date
12191 (p_old_start_date => l_project_rec.start_date
12192 ,p_new_start_date => l_project_start_date
12193 ,p_old_end_date => l_project_rec.completion_date
12194 ,p_new_end_date => l_project_completion_date
12195 ,p_update_start_date_flag => l_update_start_date_flag
12196 ,p_update_end_date_flag => l_update_end_date_flag
12197 ,p_return_status => l_return_status );
12198
12199 /*--Bug 6511907 PJR Date Validation Enhancement ----- Start--*/
12200 /*-- Validating Project Start and Completion Date against
12201 Resource Request/Assignments Min Start and Max End dates --*/
12202
12203 Declare
12204 l_validate VARCHAR2(10);
12205 l_start_date_status VARCHAR2(10);
12206 l_end_date_status VARCHAR2(10);
12207 Begin
12208 If l_project_start_date is not null or l_project_completion_date is not null then
12209
12210 PA_PROJECT_DATES_UTILS.Validate_Project_Dates
12211 (l_project_id, l_project_start_date, l_project_completion_date,
12212 l_validate, l_start_date_status, l_end_date_status);
12213
12214 If l_validate = 'Y' and l_start_date_status = 'I' Then
12215
12216 pa_utils.add_message
12217 ( p_app_short_name => 'PA'
12218 ,p_msg_name => 'PA_PROJ_DATE_START_ERROR'
12219 ,p_token1 => ''
12220 ,p_value1 => ''
12221 ,p_token2 => ''
12222 ,p_value2 => ''
12223 ,p_token3 => ''
12224 ,p_value3 => ''
12225 );
12226
12227 RAISE FND_API.G_EXC_ERROR;
12228 End If;
12229
12230 If l_validate = 'Y' and l_end_date_status = 'I' Then
12231
12232 pa_utils.add_message
12233 ( p_app_short_name => 'PA'
12234 ,p_msg_name => 'PA_PROJ_DATE_FINISH_ERROR'
12235 ,p_token1 => ''
12236 ,p_value1 => ''
12237 ,p_token2 => ''
12238 ,p_value2 => ''
12239 ,p_token3 => ''
12240 ,p_value3 => ''
12241 );
12242
12243 RAISE FND_API.G_EXC_ERROR;
12244 End If;
12245 End If;
12246 End;
12247
12248 /*--Bug 6511907 PJR Date Validation Enhancement ----- End--*/
12249 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12250 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
12251 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12252 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
12253 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12254 RAISE FND_API.G_EXC_ERROR;
12255 END IF;
12256
12257 -- Checking of valid project start and end date is done after adding and updating the tasks,
12258 -- since dates of tasks might change to be within the project begin and end date.
12259
12260
12261 IF l_update_start_date_flag = 'Y'
12262 THEN
12263 --bug 2955326
12264 /*
12265 l_statement := l_statement ||
12266 ' START_DATE = to_date('''||
12267 to_char(l_project_start_date,'YYYY/MM/DD')||
12268 ''', ''YYYY/MM/DD''),';
12269 */
12270 l_statement := l_statement ||
12271 ' START_DATE = :start_date ,';
12272 l_b_start_date_flag := 'Y';
12273 --end bug 2955326
12274 l_update_yes_flag := 'Y';
12275 END IF;
12276
12277 IF l_update_end_date_flag = 'Y'
12278 THEN
12279 --bug 2955326
12280 /*
12281 l_statement := l_statement ||
12282 ' COMPLETION_DATE = to_date('''||
12283 to_char(l_project_completion_date,'YYYY/MM/DD')||
12284 ''', ''YYYY/MM/DD''),';
12285 */
12286 l_statement := l_statement ||
12287 ' COMPLETION_DATE = :comp_date ,';
12288 l_b_comp_date_flag := 'Y';
12289 --end bug 2955326
12290 l_update_yes_flag := 'Y';
12291 END IF;
12292
12293 -- Update other date fields which are maintained only in the external system
12294
12295 -- update Actual start date and actual finish date
12296
12297 /* Task progress changes : Actual start date should be updated from task progress and ignored from AMG
12298 IF (p_project_in.actual_start_date IS NOT NULL AND
12299 p_project_in.actual_start_date <>
12300 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12301 NVL(l_project_rec.actual_start_date,
12302 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12303 p_project_in.actual_start_date THEN
12304
12305 l_statement := l_statement ||
12306 ' ACTUAL_START_DATE = to_date('''||
12307 to_char(p_project_in.actual_start_date,'YYYY/MM/DD')||
12308 ''', ''YYYY/MM/DD''),';
12309
12310
12311 l_update_yes_flag := 'Y';
12312 END IF;
12313
12314
12315 IF (p_project_in.actual_finish_date IS NOT NULL AND
12316 p_project_in.actual_finish_date <>
12317 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12318 NVL(l_project_rec.actual_finish_date,
12319 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12320 p_project_in.actual_finish_date THEN
12321
12322 l_statement := l_statement ||
12323 ' ACTUAL_FINISH_DATE = to_date('''||
12324 to_char(p_project_in.actual_finish_date,'YYYY/MM/DD')||
12325 ''', ''YYYY/MM/DD''),';
12326 l_update_yes_flag := 'Y';
12327 END IF;
12328 */
12329
12330 -- update early start date and early finish date
12331 IF (p_project_in.early_start_date IS NOT NULL AND
12332 p_project_in.early_start_date <>
12333 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12334 NVL(l_project_rec.early_start_date,
12335 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12336 p_project_in.early_start_date THEN
12337 --bug 2955326
12338 /*
12339 l_statement := l_statement ||
12340 ' EARLY_START_DATE = to_date('''||
12341 to_char(p_project_in.early_start_date,'YYYY/MM/DD')||
12342 ''', ''YYYY/MM/DD''),';
12343 */
12344 l_statement := l_statement ||
12345 ' EARLY_START_DATE = :early_start_date ,';
12346 l_b_early_sd_flag := 'Y';
12347 --end bug 2955326
12348 l_update_yes_flag := 'Y';
12349 END IF;
12350
12351 IF (p_project_in.early_finish_date IS NOT NULL AND
12352 p_project_in.early_finish_date <>
12353 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12354 NVL(l_project_rec.early_finish_date,
12355 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12356 p_project_in.early_finish_date THEN
12357 --bug 2955326
12358 /*
12359 l_statement := l_statement ||
12360 ' EARLY_FINISH_DATE = to_date('''||
12361 to_char(p_project_in.early_finish_date,'YYYY/MM/DD')||
12362 ''', ''YYYY/MM/DD''),';
12363 */
12364 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
12365 IF p_project_in.early_start_date IS NOT NULL AND p_project_in.early_start_date <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12366
12367 IF p_project_in.early_finish_date < p_project_in.early_start_date THEN
12368
12369 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12370
12371 pa_utils.add_message
12372 (
12373 p_app_short_name => 'PA'
12374 ,p_msg_name => 'PA_SU_INVALID_DATES'
12375 );
12376
12377 END IF;
12378
12379 RAISE FND_API.G_EXC_ERROR;
12380 END IF;
12381 l_statement := l_statement ||
12382 ' EARLY_FINISH_DATE = :early_finish_date ,';
12383 l_b_early_fd_flag := 'Y';
12384 l_update_yes_flag := 'Y';
12385
12386 ELSIF l_project_rec.early_start_date IS NOT NULL THEN
12387
12388 IF p_project_in.early_finish_date < l_project_rec.early_start_date THEN
12389
12390 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12391
12392 pa_utils.add_message
12393 (
12394 p_app_short_name => 'PA'
12395 ,p_msg_name => 'PA_SU_INVALID_DATES'
12396 );
12397
12398 END IF;
12399
12400 RAISE FND_API.G_EXC_ERROR;
12401 END IF;
12402 l_statement := l_statement ||
12403 ' EARLY_FINISH_DATE = :early_finish_date ,';
12404 l_b_early_fd_flag := 'Y';
12405 l_update_yes_flag := 'Y';
12406 ELSE
12407
12408 l_statement := l_statement ||
12409 ' EARLY_FINISH_DATE = :early_finish_date ,';
12410 l_b_early_fd_flag := 'Y';
12411 --end bug 2955326
12412 l_update_yes_flag := 'Y';
12413
12414 END IF; --End of Logic added for Bug#5185673
12415 END IF;
12416
12417 -- update Late start date and Late finish date
12418
12419 IF (p_project_in.late_start_date IS NOT NULL AND
12420 p_project_in.late_start_date <>
12421 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12422 NVL(l_project_rec.late_start_date,
12423 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12424 p_project_in.late_start_date THEN
12425 --bug 2955326
12426 /*
12427 l_statement := l_statement ||
12428 ' LATE_START_DATE = to_date('''||
12429 to_char(p_project_in.late_start_date,'YYYY/MM/DD')||
12430 ''', ''YYYY/MM/DD''),';
12431 */
12432
12433 l_statement := l_statement ||
12434 ' LATE_START_DATE = :late_start_date ,';
12435 l_b_late_sd_flag := 'Y';
12436 --end bug 2955326
12437 l_update_yes_flag := 'Y';
12438 END IF;
12439
12440
12441 IF (p_project_in.late_finish_date IS NOT NULL AND
12442 p_project_in.late_finish_date <>
12443 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12444 NVL(l_project_rec.late_finish_date,
12445 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12446 p_project_in.late_finish_date THEN
12447 --bug 2955326
12448 /*
12449 l_statement := l_statement ||
12450 ' LATE_FINISH_DATE = to_date('''||
12451 to_char(p_project_in.late_finish_date,'YYYY/MM/DD')||
12452 ''', ''YYYY/MM/DD''),';
12453 */
12454 --Added the following error message to check whether the finish date is earlier than the start date.Bug#5185673
12455 IF p_project_in.late_start_date IS NOT NULL AND p_project_in.late_start_date <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
12456
12457 IF p_project_in.late_finish_date < p_project_in.late_start_date THEN
12458
12459 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12460
12461 pa_utils.add_message
12462 (
12463 p_app_short_name => 'PA'
12464 ,p_msg_name => 'PA_SU_INVALID_DATES'
12465 );
12466
12467 END IF;
12468
12469 RAISE FND_API.G_EXC_ERROR;
12470 END IF;
12471 l_statement := l_statement ||
12472 ' LATE_FINISH_DATE = :late_finish_date ,';
12473 l_b_late_fd_flag := 'Y';
12474 l_update_yes_flag := 'Y';
12475 ELSIF l_project_rec.late_start_date IS NOT NULL THEN
12476 IF p_project_in.late_finish_date < l_project_rec.late_start_date THEN
12477
12478 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12479
12480 pa_utils.add_message
12481 (
12482 p_app_short_name => 'PA'
12483 ,p_msg_name => 'PA_SU_INVALID_DATES'
12484 );
12485
12486 END IF;
12487
12488 RAISE FND_API.G_EXC_ERROR;
12489 END IF;
12490 l_statement := l_statement ||
12491 ' LATE_FINISH_DATE = :late_finish_date ,';
12492 l_b_late_fd_flag := 'Y';
12493 l_update_yes_flag := 'Y';
12494 ELSE
12495 l_statement := l_statement ||
12496 ' LATE_FINISH_DATE = :late_finish_date ,';
12497 l_b_late_fd_flag := 'Y';
12498 --end bug 2955326
12499 l_update_yes_flag := 'Y';
12500
12501 END IF; --End of Logic added for Bug#5185673.
12502 END IF;
12503
12504
12505 -- update scheduled start date and scheduled finish date
12506
12507 IF (p_project_in.scheduled_start_date IS NOT NULL AND
12508 p_project_in.scheduled_start_date <>
12509 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12510 NVL(l_project_rec.scheduled_start_date,
12511 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12512 p_project_in.scheduled_start_date THEN
12513 --bug 2955326
12514 /*
12515 l_statement := l_statement ||
12516 ' SCHEDULED_START_DATE = to_date('''||
12517 to_char(p_project_in.scheduled_start_date,'YYYY/MM/DD')||
12518 ''', ''YYYY/MM/DD''),';
12519
12520 */
12521 l_statement := l_statement ||
12522 ' SCHEDULED_START_DATE = :sch_start_date ,';
12523 l_b_sch_sd_flag := 'Y';
12524 --end bug 2955326
12525 l_update_yes_flag := 'Y';
12526 END IF;
12527
12528
12529 IF (p_project_in.scheduled_finish_date IS NOT NULL AND
12530 p_project_in.scheduled_finish_date <>
12531 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) AND
12532 NVL(l_project_rec.scheduled_finish_date,
12533 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) <>
12534 p_project_in.scheduled_finish_date THEN
12535 --bug 2955326
12536 /*
12537 l_statement := l_statement ||
12538 ' SCHEDULED_FINISH_DATE = to_date('''||
12539 to_char(p_project_in.scheduled_finish_date,'YYYY/MM/DD')||
12540 ''', ''YYYY/MM/DD''),';
12541 */
12542 l_statement := l_statement ||
12543 ' SCHEDULED_FINISH_DATE = :sch_finish_date ,';
12544 l_b_sch_fd_flag := 'Y';
12545 --end bug 2955326
12546 l_update_yes_flag := 'Y';
12547 END IF;
12548
12549 -- Check if any of the df columns have changed (attribute1 to attribute10)
12550 -- 04/11/97
12551 -- Bug 7277032
12552
12553 IF p_project_in.attribute_category <>
12554 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12555 OR p_project_in.attribute_category IS NULL THEN
12556 IF NVL(p_project_in.attribute_category,
12557 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12558 <> NVL(l_project_rec.attribute_category,
12559 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
12560 --bug 2955326
12561 /*
12562 l_statement := l_statement ||
12563 ' ATTRIBUTE_CATEGORY = '||''''||
12564 RTRIM(p_project_in.attribute_category)||''''||',';
12565 */
12566 l_statement := l_statement ||
12567 ' ATTRIBUTE_CATEGORY = :attr_cat ,';
12568 l_b_attr_cat_flag := 'Y';
12569 --end bug 2955326
12570 l_update_yes_flag := 'Y';
12571 END IF;
12572 END IF;
12573
12574 -- Bug 7277032
12575 IF p_project_in.attribute1 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12576 OR p_project_in.attribute1 IS NULL THEN
12577 IF NVL(p_project_in.attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12578 <> NVL(l_project_rec.attribute1,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12579 THEN
12580 --bug 2955326
12581 /*
12582 l_statement := l_statement ||
12583 ' ATTRIBUTE1 = '||''''||
12584 RTRIM(p_project_in.attribute1)||''''||',';
12585 */
12586 l_statement := l_statement ||
12587 ' ATTRIBUTE1 = :attr1 ,';
12588 l_b_attr1_flag := 'Y';
12589 --end bug 2955326
12590 l_update_yes_flag := 'Y';
12591 END IF;
12592 END IF;
12593
12594 -- Bug 7277032
12595 IF p_project_in.attribute2 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12596 OR p_project_in.attribute2 IS NULL THEN
12597 IF NVL(p_project_in.attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12598 <> NVL(l_project_rec.attribute2,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12599 THEN
12600 --bug 2955326
12601 /*
12602 l_statement := l_statement ||
12603 ' ATTRIBUTE2 = '||''''||
12604 RTRIM(p_project_in.attribute2)||''''||',';
12605 */
12606 l_statement := l_statement ||
12607 ' ATTRIBUTE2 = :attr2 ,';
12608 l_b_attr2_flag := 'Y';
12609 --end bug 2955326
12610 l_update_yes_flag := 'Y';
12611 END IF;
12612 END IF;
12613
12614 -- Bug 7277032
12615 IF p_project_in.attribute3 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12616 OR p_project_in.attribute3 IS NULL THEN
12617 IF NVL(p_project_in.attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12618 <> NVL(l_project_rec.attribute3,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12619 THEN
12620 --bug 2955326
12621 /*
12622 l_statement := l_statement ||
12623 ' ATTRIBUTE3 = '||''''||
12624 RTRIM(p_project_in.attribute3)||''''||',';
12625 */
12626 l_statement := l_statement ||
12627 ' ATTRIBUTE3 = :attr3 ,';
12628 l_b_attr3_flag := 'Y';
12629 --end bug 2955326
12630 l_update_yes_flag := 'Y';
12631 END IF;
12632 END IF;
12633
12634 -- Bug 7277032
12635 IF p_project_in.attribute4 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12636 OR p_project_in.attribute4 IS NULL THEN
12637 IF NVL(p_project_in.attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12638 <> NVL(l_project_rec.attribute4,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12639 THEN
12640 --bug 2955326
12641 /*
12642 l_statement := l_statement ||
12643 ' ATTRIBUTE4 = '||''''||
12644 RTRIM(p_project_in.attribute4)||''''||',';
12645 */
12646 l_statement := l_statement ||
12647 ' ATTRIBUTE4 = :attr4 ,';
12648 l_b_attr4_flag := 'Y';
12649 --end bug 2955326
12650 l_update_yes_flag := 'Y';
12651 END IF;
12652 END IF;
12653
12654 -- Bug 7277032
12655 IF p_project_in.attribute5 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12656 OR p_project_in.attribute5 IS NULL THEN
12657 IF NVL(p_project_in.attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12658 <> NVL(l_project_rec.attribute5,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12659 THEN
12660 --bug 2955326
12661 /*
12662 l_statement := l_statement ||
12663 ' ATTRIBUTE5 = '||''''||
12664 RTRIM(p_project_in.attribute5)||''''||',';
12665 */
12666 l_statement := l_statement ||
12667 ' ATTRIBUTE5 = :attr5 ,';
12668 l_b_attr5_flag := 'Y';
12669 --end bug 2955326
12670 l_update_yes_flag := 'Y';
12671 END IF;
12672 END IF;
12673
12674 -- Bug 7277032
12675 IF p_project_in.attribute6 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12676 OR p_project_in.attribute6 IS NULL THEN
12677 IF NVL(p_project_in.attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12678 <> NVL(l_project_rec.attribute6,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12679 THEN
12680 --bug 2955326
12681 /*
12682 l_statement := l_statement ||
12683 ' ATTRIBUTE6 = '||''''||
12684 RTRIM(p_project_in.attribute6)||''''||',';
12685 */
12686 l_statement := l_statement ||
12687 ' ATTRIBUTE6 = :attr6 ,';
12688 l_b_attr6_flag := 'Y';
12689 --end bug 2955326
12690 l_update_yes_flag := 'Y';
12691 END IF;
12692 END IF;
12693
12694 -- Bug 7277032
12695 IF p_project_in.attribute7 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12696 OR p_project_in.attribute7 IS NULL THEN
12697 IF NVL(p_project_in.attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12698 <> NVL(l_project_rec.attribute7,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12699 THEN
12700 --bug 2955326
12701 /*
12702 l_statement := l_statement ||
12703 ' ATTRIBUTE7 = '||''''||
12704 RTRIM(p_project_in.attribute7)||''''||',';
12705 */
12706 l_statement := l_statement ||
12707 ' ATTRIBUTE7 = :attr7 ,';
12708 l_b_attr7_flag := 'Y';
12709 --end bug 2955326
12710 l_update_yes_flag := 'Y';
12711 END IF;
12712 END IF;
12713
12714 -- Bug 7277032
12715 IF p_project_in.attribute8 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12716 OR p_project_in.attribute8 IS NULL THEN
12717 IF NVL(p_project_in.attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12718 <> NVL(l_project_rec.attribute8,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12719 THEN
12720 --bug 2955326
12721 /*
12722 l_statement := l_statement ||
12723 ' ATTRIBUTE8 = '||''''||
12724 RTRIM(p_project_in.attribute8)||''''||',';
12725 */
12726 l_statement := l_statement ||
12727 ' ATTRIBUTE8 = :attr8 ,';
12728 l_b_attr8_flag := 'Y';
12729 --end bug 2955326
12730 l_update_yes_flag := 'Y';
12731 END IF;
12732 END IF;
12733
12734 -- Bug 7277032
12735 IF p_project_in.attribute9 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12736 OR p_project_in.attribute9 IS NULL THEN
12737 IF NVL(p_project_in.attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12738 <> NVL(l_project_rec.attribute9,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12739 THEN
12740 --bug 2955326
12741 /*
12742 l_statement := l_statement ||
12743 ' ATTRIBUTE9 = '||''''||
12744 RTRIM(p_project_in.attribute9)||''''||',';
12745 */
12746 l_statement := l_statement ||
12747 ' ATTRIBUTE9 = :attr9 ,';
12748 l_b_attr9_flag := 'Y';
12749 --end bug 2955326
12750 l_update_yes_flag := 'Y';
12751 END IF;
12752 END IF;
12753
12754 -- Bug 7277032
12755 IF p_project_in.attribute10 <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12756 OR p_project_in.attribute10 IS NULL THEN
12757 IF NVL(p_project_in.attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12758 <> NVL(l_project_rec.attribute10,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12759 THEN
12760 --bug 2955326
12761 /*
12762 l_statement := l_statement ||
12763 ' ATTRIBUTE10 = '||''''||
12764 RTRIM(p_project_in.attribute10)||''''||',';
12765 */
12766 l_statement := l_statement ||
12767 ' ATTRIBUTE10 = :attr10 ,';
12768 l_b_attr10_flag := 'Y';
12769 --end bug 2955326
12770 l_update_yes_flag := 'Y';
12771 END IF;
12772 END IF;
12773
12774 -- Tax Code Changes Starts here ...
12775
12776 --Bug 4606925: Modified below condition so that output_tax_code can be updated to null
12777 IF ((p_project_in.output_tax_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12778 AND p_project_in.output_tax_code IS NOT NULL) OR (p_project_in.output_tax_code IS NULL)) THEN
12779 IF NVL(p_project_in.output_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12780 <> NVL(l_project_rec.output_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12781 THEN
12782 --bug 2955326
12783 /*
12784 l_statement := l_statement ||
12785 ' OUTPUT_TAX_CODE = '||''''||
12786 RTRIM(p_project_in.output_tax_code)||''''||',';
12787 */ -- Added for 5188246
12788 IF p_project_in.output_tax_code IS NOT NULL THEN
12789
12790 OPEN l_cur_retention_tax_code(p_project_in.output_tax_code);
12791 FETCH l_cur_retention_tax_code INTO l_dummy_cur_output_tax_code;
12792 CLOSE l_cur_retention_tax_code;
12793
12794 IF l_dummy_cur_output_tax_code <> 'Y' THEN
12795 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12796 p_msg_name => 'PA_INVLD_OUTPUT_TAX_CODE');
12797
12798 p_return_status := FND_API.G_RET_STS_ERROR;
12799 RAISE FND_API.G_EXC_ERROR;
12800
12801 END IF;
12802
12803
12804 END IF ;
12805 -- End of 5188246
12806 l_statement := l_statement ||
12807 ' OUTPUT_TAX_CODE = :output_tx_code ,';
12808 l_b_output_tx_code_flag := 'Y';
12809 --end bug 2955326
12810 l_update_yes_flag := 'Y';
12811 END IF;
12812 END IF;
12813
12814 --Bug 4606925: Modified below condition so that retention_tax_code can be updated to null
12815 IF ((p_project_in.retention_tax_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12816 AND p_project_in.retention_tax_code IS NOT NULL) OR (p_project_in.retention_tax_code IS NULL)) THEN
12817 IF NVL(p_project_in.retention_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12818 <> NVL(l_project_rec.retention_tax_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12819 THEN
12820 --bug 2955326
12821 /*
12822 l_statement := l_statement ||
12823 ' RETENTION_TAX_CODE = '||''''||
12824 RTRIM(p_project_in.retention_tax_code)||''''||',';
12825 */ -- Added for Bug 5188246
12826 IF p_project_in.retention_tax_code IS NOT NULL THEN
12827
12828 OPEN l_cur_retention_tax_code(p_project_in.retention_tax_code);
12829 FETCH l_cur_retention_tax_code INTO l_dummy_cur_retention_tax_code;
12830 CLOSE l_cur_retention_tax_code;
12831
12832 IF l_dummy_cur_retention_tax_code <> 'Y' THEN
12833 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
12834 p_msg_name => 'PA_INVLD_RETENTION_TAX_CODE');
12835
12836 p_return_status := FND_API.G_RET_STS_ERROR;
12837 RAISE FND_API.G_EXC_ERROR;
12838
12839 END IF;
12840
12841
12842 END IF ;
12843 -- End of Bug 5188246.
12844 l_statement := l_statement ||
12845 ' RETENTION_TAX_CODE = :ret_tx_code ,';
12846 l_b_ret_tx_code_flag := 'Y';
12847 --end bug 2955326
12848 l_update_yes_flag := 'Y';
12849 END IF;
12850 END IF;
12851
12852 -- IC and Multi National Currency changes Starts ...
12853 -- Bug#5188931
12854 IF (p_project_in.project_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR p_project_in.project_currency_code IS NULL) THEN
12855
12856 IF NVL(p_project_in.project_currency_code,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.project_currency_code,
12857 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
12858
12859 -- Added the following Logic here to validate passed currency code.Bug#5188931
12860 -- Checking whether passed currency code is a valid value and not a junk value
12861 OPEN cur_check_cur_code( p_project_in.project_currency_code );
12862 FETCH cur_check_cur_code INTO l_check_cur_code_flag;
12863 CLOSE cur_check_cur_code;
12864
12865 IF (l_check_cur_code_flag = 'Y') THEN
12866
12867 --This means the currency code passed is not null and valid. Hence validate whether update is allowed.
12868
12869 --1. Check whether bill intercompany invoices flag is checked at the project type level
12870 OPEN cur_check_prvdr_flag(p_project_in.pa_project_id);
12871 FETCH cur_check_prvdr_flag INTO l_prvdr_flag;
12872 CLOSE cur_check_prvdr_flag;
12873
12874 IF l_prvdr_flag ='Y' THEN
12875 l_allow_update_flag := 'N';
12876
12877
12878 --2. Check whether project value ,funding ,event,expenditure item, budget transaction exist
12879 --If any one of these exist, then the update should not be allowed. The check for existence of
12880 --sub projects is not done here as this has been already done above thru Bug#3912783.
12881
12882 ELSIF ( NVL( pa_multi_currency_billing.check_mcb_trans_exist ( p_project_in.pa_project_id ), 'N' ) = 'Y' OR
12883 l_project_rec.project_value IS NOT NULL OR
12884 PA_IMPL_OPTIONS_PUB.check_budget_trans_exists( p_project_in.pa_project_id ) = 'Y'
12885 ) THEN
12886
12887 l_allow_update_flag := 'N';
12888 END IF;
12889
12890 IF l_allow_update_flag = 'N' THEN
12891
12892 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12893
12894 pa_utils.add_message
12895 (
12896 p_app_short_name => 'PA'
12897 ,p_msg_name => 'PA_CURR_CODE_NOT_UPDATBL'
12898 );
12899
12900 END IF;
12901
12902 RAISE FND_API.G_EXC_ERROR;
12903 ELSE
12904
12905 --bug 2955326
12906 /*
12907 l_statement := l_statement ||
12908 ' PROJECT_CURRENCY_CODE = '||''''||
12909 RTRIM(p_project_in.project_currency_code)||''''||',';
12910 */
12911 l_statement := l_statement ||
12912 ' PROJECT_CURRENCY_CODE = :proj_cur_code ,';
12913 l_b_proj_cur_code_flag := 'Y';
12914 --end bud 2955326
12915 l_update_yes_flag := 'Y';
12916 END IF;
12917
12918 ELSE
12919
12920 --invalid currency code has been passed hence throw error
12921 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
12922
12923 pa_utils.add_message
12924 (
12925 p_app_short_name => 'PA'
12926 ,p_msg_name => 'PA_INVALID_PROJ_CURR_CODE'
12927 );
12928
12929 END IF;
12930
12931 RAISE FND_API.G_EXC_ERROR;
12932 END IF;
12933
12934 END IF;
12935
12936 END IF; --End of changes Bug#5188931
12937
12938 IF p_project_in.allow_cross_charge_flag <>
12939 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12940 AND p_project_in.allow_cross_charge_flag IS NOT NULL THEN
12941 IF NVL(p_project_in.allow_cross_charge_flag,
12942 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12943 <> NVL(l_project_rec.allow_cross_charge_flag,
12944 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12945 THEN
12946 --bug 2955326
12947 /*
12948 l_statement := l_statement ||
12949 ' ALLOW_CROSS_CHARGE_FLAG = '||''''||
12950 RTRIM(p_project_in.allow_cross_charge_flag)||''''||',';
12951 */
12952 l_statement := l_statement ||
12953 ' ALLOW_CROSS_CHARGE_FLAG = :allow_x_chg_flag ,';
12954 l_b_allow_x_chg_flag := 'Y';
12955 --end bug 2955326
12956 l_update_yes_flag := 'Y';
12957 END IF;
12958 END IF;
12959
12960 IF p_project_in.project_rate_date <>
12961 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
12962 AND p_project_in.project_rate_date IS NOT NULL THEN
12963 IF NVL(p_project_in.project_rate_date,
12964 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12965 <> NVL(l_project_rec.project_rate_date,
12966 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
12967 THEN
12968 --bug 2955326
12969 /*
12970 l_statement := l_statement ||
12971 ' PROJECT_RATE_DATE = to_date('''||
12972 to_char(p_project_in.project_rate_date,'YYYY/MM/DD')||
12973 ''', ''YYYY/MM/DD''),';
12974 */
12975 l_statement := l_statement ||
12976 ' PROJECT_RATE_DATE = :proj_rt_date ,';
12977 l_b_proj_rt_date_flag := 'Y';
12978 --end bug 2955326
12979 l_update_yes_flag := 'Y';
12980 END IF;
12981 END IF;
12982
12983 --dbms_output.put_line('p_project_in.project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ' || p_project_in.project_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
12984 IF ((p_project_in.project_rate_type <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
12985 AND p_project_in.project_rate_type IS NOT NULL )
12986 OR p_project_in.project_rate_type IS NULL ) THEN-- changed this if condition for bug no 5225146
12987
12988 IF NVL(p_project_in.project_rate_type,
12989 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12990 <> NVL(l_project_rec.project_rate_type,
12991 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
12992 THEN
12993 --bug 2955326
12994 /*
12995 l_statement := l_statement ||
12996 ' PROJECT_RATE_TYPE = '||''''||
12997 RTRIM(p_project_in.project_rate_type)||''''||',';
12998 */
12999 -- Added for bug 5225146
13000 IF p_project_in.project_rate_type IS NOT NULL THEN
13001
13002 OPEN l_cur_project_rate_type(p_project_in.project_rate_type);
13003 FETCH l_cur_project_rate_type INTO l_dummy_project_rate_type;
13004 CLOSE l_cur_project_rate_type;
13005
13006 IF l_dummy_project_rate_type <> 'Y' THEN
13007
13008 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
13009 p_msg_name => 'PA_INVLD_PROJ_RATE_TYPE');
13010 p_return_status := FND_API.G_RET_STS_ERROR;
13011 RAISE FND_API.G_EXC_ERROR;
13012 END IF ;
13013 END IF ;
13014
13015 l_statement := l_statement ||
13016 ' PROJECT_RATE_TYPE = :proj_rt_tp ,';
13017 l_b_proj_rt_tp_flag := 'Y';
13018 --bug 2955326
13019 l_update_yes_flag := 'Y';
13020 END IF;
13021 END IF;
13022
13023 IF p_project_in.cc_process_labor_flag <>
13024 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13025 AND p_project_in.cc_process_labor_flag IS NOT NULL THEN
13026 IF NVL(p_project_in.cc_process_labor_flag,
13027 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13028 <> NVL(l_project_rec.cc_process_labor_flag,
13029 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13030 THEN
13031 --bug 2955326
13032 /*
13033 l_statement := l_statement ||
13034 ' CC_PROCESS_LABOR_FLAG = '||''''||
13035 RTRIM(p_project_in.cc_process_labor_flag)||''''||',';
13036 */
13037 l_statement := l_statement ||
13038 ' CC_PROCESS_LABOR_FLAG = :cc_proc_lb_flag ,';
13039 l_cc_proc_lb_flag := 'Y';
13040 --end bug 2955326
13041 l_update_yes_flag := 'Y';
13042 END IF;
13043 END IF;
13044
13045 -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
13046 IF ( (p_project_in.labor_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13047 AND p_project_in.labor_tp_schedule_id IS NOT NULL) OR
13048 (p_project_in.labor_tp_schedule_id IS NULL) )
13049 THEN
13050 -- 5402979 for pqe bug 5395048 :: added p_project_in.labor_tp_schedule_id IS NULL condition
13051 IF ( (p_project_in.labor_tp_schedule_id <> NVL(l_project_rec.labor_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
13052 OR (p_project_in.labor_tp_schedule_id IS NULL) )
13053 THEN
13054 --bug 2955326
13055 /*
13056 l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = ' ||
13057 TO_CHAR(p_project_in.labor_tp_schedule_id)||',';
13058 */
13059
13060 l_cc_process_labor_flag := p_project_in.cc_process_labor_flag; /* Added for Bug 5395048 */
13061 l_statement := l_statement || ' LABOR_TP_SCHEDULE_ID = :lb_tp_sch_id ,';
13062 l_b_lb_tp_sch_id_flag := 'Y'; -- added for Bug 5395048
13063 l_update_yes_flag := 'Y';
13064
13065 -- 5402979 :: Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
13066 -- we need to set the project cross charge process labor flag to 'N'
13067 IF p_project_in.labor_tp_schedule_id IS NULL THEN
13068 l_cc_process_labor_flag := 'N';
13069
13070 IF l_cc_proc_lb_flag = 'N' THEN
13071 l_statement := l_statement ||
13072 ' CC_PROCESS_LABOR_FLAG = :cc_proc_lb_flag ,';
13073 END IF;
13074
13075 l_cc_proc_lb_flag := 'Y';
13076 l_update_yes_flag := 'Y';
13077 END IF;
13078 -- code changes end for Bug 5395048
13079
13080 END IF;
13081 END IF;
13082
13083 IF p_project_in.labor_tp_fixed_date <>
13084 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13085 AND p_project_in.labor_tp_fixed_date IS NOT NULL THEN
13086 IF NVL(p_project_in.labor_tp_fixed_date,
13087 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13088 <> NVL(l_project_rec.labor_tp_fixed_date,
13089 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13090 THEN
13091 --bug 2955326
13092 /*
13093 l_statement := l_statement ||
13094 ' LABOR_TP_FIXED_DATE = to_date('''||
13095 to_char(p_project_in.labor_tp_fixed_date,'YYYY/MM/DD')||
13096 ''', ''YYYY/MM/DD''),';
13097 */
13098 l_statement := l_statement ||
13099 ' LABOR_TP_FIXED_DATE = :lb_tp_fixed_dt ,';
13100 l_b_lb_tp_fixed_dt_flag := 'Y';
13101 --end bug 2955326
13102 l_update_yes_flag := 'Y';
13103 END IF;
13104 END IF;
13105
13106 IF p_project_in.cc_process_nl_flag <>
13107 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13108 AND p_project_in.cc_process_nl_flag IS NOT NULL THEN
13109 IF NVL(p_project_in.cc_process_nl_flag,
13110 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13111 <> NVL(l_project_rec.cc_process_nl_flag,
13112 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13113 THEN
13114 --bug 2955326
13115 /*
13116 l_statement := l_statement ||
13117 ' CC_PROCESS_NL_FLAG = '||''''||
13118 RTRIM(p_project_in.cc_process_nl_flag)||''''||',';
13119 */
13120 l_statement := l_statement ||
13121 ' CC_PROCESS_NL_FLAG = :cc_proc_nl_flag ,';
13122 l_b_cc_proc_nl_flag := 'Y';
13123 --end bug 2955326
13124 l_update_yes_flag := 'Y';
13125 END IF;
13126 END IF;
13127
13128 IF ( (p_project_in.nl_tp_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13129 AND p_project_in.nl_tp_schedule_id IS NOT NULL)
13130 OR (p_project_in.nl_tp_schedule_id IS NULL) )
13131 THEN
13132 IF ((p_project_in.nl_tp_schedule_id <> NVL(l_project_rec.nl_tp_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
13133 OR (p_project_in.nl_tp_schedule_id IS NULL))
13134 THEN
13135 --bug 2955326
13136 /*
13137 l_statement := l_statement || ' NL_TP_SCHEDULE_ID = ' ||
13138 TO_CHAR(p_project_in.nl_tp_schedule_id)||',';
13139 */
13140 l_cc_process_nl_flag := p_project_in.cc_process_nl_flag; /* Added for Bug 5395048 */
13141 l_statement := l_statement || ' NL_TP_SCHEDULE_ID = :nl_tp_sch_id ,';
13142 l_b_nl_tp_sch_id_flag := 'Y';
13143 --bug 2955326
13144 l_update_yes_flag := 'Y';
13145
13146 -- Added the code below for Bug 5395048. If labor schedule id is being NULLed out, then
13147 -- we need to set the project cross charge process labor flag to 'N'
13148 IF p_project_in.nl_tp_schedule_id IS NULL THEN
13149 l_cc_process_nl_flag := 'N';
13150
13151 IF l_b_cc_proc_nl_flag = 'N' THEN
13152 l_statement := l_statement ||
13153 ' CC_PROCESS_NL_FLAG = :cc_proc_nl_flag ,';
13154 END IF;
13155
13156 l_b_cc_proc_nl_flag := 'Y';
13157 l_update_yes_flag := 'Y';
13158 END IF;
13159 -- Code changes end for Bug 5395048
13160 END IF;
13161 END IF;
13162
13163 IF p_project_in.nl_tp_fixed_date <>
13164 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13165 AND p_project_in.nl_tp_fixed_date IS NOT NULL THEN
13166 IF NVL(p_project_in.nl_tp_fixed_date,
13167 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13168 <> NVL(l_project_rec.nl_tp_fixed_date,
13169 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13170 THEN
13171 --bug 2955326
13172 /*
13173 l_statement := l_statement ||
13174 ' NL_TP_FIXED_DATE = to_date('''||
13175 to_char(p_project_in.nl_tp_fixed_date,'YYYY/MM/DD')||
13176 ''', ''YYYY/MM/DD''),';
13177 */
13178 l_statement := l_statement ||
13179 ' NL_TP_FIXED_DATE = :nl_tp_fx_dt ,';
13180 l_b_nl_tp_fx_dt_flag := 'Y';
13181 --end bug 2955326
13182 l_update_yes_flag := 'Y';
13183 END IF;
13184 END IF;
13185
13186 -- IC and Multi National Currency changes Ends ...
13187
13188 -- ORM Code change starts here ...
13189
13190 IF p_project_in.role_list_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13191 AND p_project_in.role_list_id IS NOT NULL THEN
13192 IF p_project_in.role_list_id <> l_project_rec.role_list_id
13193 THEN
13194 --bug 2955326
13195 /*
13196 l_statement := l_statement || ' ROLE_LIST_ID = ' ||
13197 TO_CHAR(p_project_in.role_list_id)||',';
13198 */
13199 l_statement := l_statement || ' ROLE_LIST_ID = :role_list_id ,';
13200 l_b_role_list_id_flag := 'Y';
13201 --end bug 2955326
13202 l_update_yes_flag := 'Y';
13203 END IF;
13204 END IF;
13205
13206 --Added for bug 5745545
13207 IF nvl(p_project_in.work_type_id,-999) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
13208
13209 IF (nvl(fnd_profile.value('PA_EN_NEW_WORK_TYPE_PROCESS'),'N') = 'Y') OR (nvl(pa_install.is_prm_licensed(),'N') = 'Y' ) THEN
13210
13211 IF p_project_in.work_type_id IS NULL AND (NOT (PA_GMS_API.vert_install)) THEN
13212
13213 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
13214 pa_interface_utils_pub.map_new_amg_msg
13215 ( p_old_message_code => 'PA_PR_WORK_TYPE_MANDATORY'
13216 ,p_msg_attribute => 'CHANGE'
13217 ,p_resize_flag => 'Y'
13218 ,p_msg_context => 'PROJ'
13219 ,p_attribute1 => l_project_rec.segment1
13220 ,p_attribute2 => ''
13221 ,p_attribute3 => ''
13222 ,p_attribute4 => ''
13223 ,p_attribute5 => '');
13224 END IF;
13225 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
13226 RAISE FND_API.G_EXC_ERROR;
13227 ELSE
13228 IF nvl(p_project_in.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> nvl(l_project_rec.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13229
13230 --Added the following logic to update the work type id.Bug#5222248
13231 OPEN cur_check_work_type(p_project_in.pa_project_id,p_project_in.work_type_id);
13232 FETCH cur_check_work_type INTO l_check_work_type;
13233 CLOSE cur_check_work_type;
13234
13235 IF l_check_work_type = 'Y' THEN
13236
13237 l_statement := l_statement || ' WORK_TYPE_ID = :work_type_id ,';
13238 l_b_work_type_id_flag := 'Y';
13239 l_update_yes_flag := 'Y';
13240 END IF;
13241 --End of code change for Bug#5222248.
13242 END IF;
13243 END IF;
13244
13245 ELSE -- Null work_type_id is allowed
13246 IF nvl(p_project_in.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> nvl(l_project_rec.work_type_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
13247
13248 l_statement := l_statement || ' WORK_TYPE_ID = :work_type_id ,';
13249 l_b_work_type_id_flag := 'Y';
13250 l_update_yes_flag := 'Y';
13251 END IF;
13252 END IF;
13253 END IF;
13254 --End of addition for bug 5745545
13255
13256 IF p_project_in.calendar_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13257 AND p_project_in.calendar_id IS NOT NULL THEN
13258 /* IF p_project_in.calendar_id <> l_project_rec.calendar_id Commented for bug 5620624*/
13259 IF p_project_in.calendar_id <> nvl(l_project_rec.calendar_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --Bug#5620624
13260 THEN
13261 --bug 2955326
13262 /*
13263 l_statement := l_statement || ' CALENDAR_ID = ' ||
13264 TO_CHAR(p_project_in.calendar_id)||',';
13265 */
13266 OPEN l_cur_calendar_id(p_project_in.calendar_id);
13267 FETCH l_cur_calendar_id INTO l_dummy_calendar_id;
13268 CLOSE l_cur_calendar_id ;
13269 -- Added this if condition for 5222506
13270 IF l_dummy_calendar_id = 'Y' THEN
13271 l_statement := l_statement || ' CALENDAR_ID = :cal_id ,';
13272 l_b_cal_id_flag := 'Y';
13273 --end bug 2955326
13274 l_update_yes_flag := 'Y';
13275 END IF ;
13276 -- End of bug 5222506
13277 END IF;
13278 END IF;
13279
13280 IF p_project_in.location_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13281 AND p_project_in.location_id IS NOT NULL THEN
13282 IF p_project_in.location_id <> l_project_rec.location_id
13283 THEN
13284 --bug 2955326
13285 /*
13286 l_statement := l_statement || ' LOCATION_ID = ' ||
13287 TO_CHAR(p_project_in.location_id)||',';
13288 */
13289 l_statement := l_statement || ' LOCATION_ID = :loc_id ,';
13290 l_b_loc_id_flag := 'Y';
13291 --end bug 2955326
13292 l_update_yes_flag := 'Y';
13293 END IF;
13294 END IF;
13295
13296 IF p_project_in.probability_member_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13297 AND p_project_in.probability_member_id IS NOT NULL THEN
13298 --Modified the if condition below for Bug#5210872.
13299
13300 IF (p_project_in.probability_member_id <> nvl(l_project_rec.probability_member_id,-99)) THEN
13301
13302 --End of code change for Bug#5210872.
13303 --bug 2955326
13304 /*
13305 l_statement := l_statement || ' PROBABILITY_MEMBER_ID = ' ||
13306 TO_CHAR(p_project_in.probability_member_id)||',';
13307 */
13308
13309 --Bug#5191521.Included validation for probability_member_id below.
13310
13311 OPEN cur_validate_prob_member( p_project_in.pa_project_id,p_project_in.probability_member_id);
13312 FETCH cur_validate_prob_member INTO l_check_prob_id;
13313 CLOSE cur_validate_prob_member;
13314
13315 IF l_check_prob_id ='Y' THEN --only if a valid probability id is passed
13316 --update will be done.Otherwise old value will remain.
13317
13318 l_statement := l_statement || ' PROBABILITY_MEMBER_ID = :prob_memb_id ,';
13319 l_b_prob_memb_id_flag := 'Y';
13320 l_update_yes_flag := 'Y';
13321 ELSE
13322
13323 l_b_prob_memb_id_flag :='N';
13324 END IF;
13325 --End of code change for Bug#5191521.
13326
13327 --end bug 2955326
13328
13329
13330
13331 END IF;
13332 END IF;
13333
13334 IF ((p_project_in.project_value <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13335 AND p_project_in.project_value IS NOT NULL ) OR p_project_in.project_value IS NULL) THEN
13336 IF p_project_in.project_value <> l_project_rec.project_value
13337 THEN
13338 --bug 2955326
13339 /*
13340 l_statement := l_statement || ' PROJECT_VALUE = ' ||
13341 TO_CHAR(p_project_in.project_value)||',';
13342 */--Added for bug 5214431
13343 -- changed from l_project_in_rec.project_value to p_project_in.project_value
13344 IF p_project_in.project_value IS NOT NULL AND p_project_in.project_value < 0 THEN
13345 PA_UTILS.ADD_MESSAGE
13346 ( p_app_short_name => 'PA'
13347 ,p_msg_name => 'PA_INVLD_OPPORTUNITY_VALUE');
13348 RAISE FND_API.G_EXC_ERROR;
13349 END IF;
13350 -- end of bug 5214431.
13351 l_statement := l_statement || ' PROJECT_VALUE = :proj_value ,';
13352 l_b_proj_value_flag := 'Y';
13353 --end bug 2955326
13354 l_update_yes_flag := 'Y';
13355 END IF;
13356 END IF;
13357
13358 IF p_project_in.expected_approval_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13359 AND p_project_in.expected_approval_date IS NOT NULL THEN
13360 IF NVL(p_project_in.expected_approval_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13361 <> NVL(l_project_rec.expected_approval_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13362 THEN
13363 --bug 2955326
13364 /*
13365 l_statement := l_statement || ' EXPECTED_APPROVAL_DATE = to_date('''||
13366 to_char(p_project_in.expected_approval_date,'YYYY/MM/DD')||
13367 ''', ''YYYY/MM/DD''),';
13368 */
13369 l_statement := l_statement || ' EXPECTED_APPROVAL_DATE = :exp_apprv_date ,';
13370 l_b_exp_apprv_dt_flag := 'Y';
13371 --end bug 2955326
13372 l_update_yes_flag := 'Y';
13373 END IF;
13374 END IF;
13375
13376 IF p_project_in.cost_job_group_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13377 AND p_project_in.cost_job_group_id IS NOT NULL THEN
13378 IF p_project_in.cost_job_group_id <> l_project_rec.cost_job_group_id
13379 THEN
13380 --bug 2955326
13381 /*
13382 l_statement := l_statement || ' COST_JOB_BILL_ID = ' ||
13383 TO_CHAR(p_project_in.cost_job_group_id)||',';
13384 */
13385 l_statement := l_statement || ' COST_JOB_GROUP_ID = :cst_jb_gp_id ,'; -- Bug 8831203 : Changed COST_JOB_BILL_ID to COST_JOB_GROUP_ID
13386 l_b_cst_jb_gp_id_flag := 'Y';
13387 --end bug 2955326
13388 l_update_yes_flag := 'Y';
13389 END IF;
13390 END IF;
13391
13392 IF p_project_in.bill_job_group_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13393 AND p_project_in.bill_job_group_id IS NOT NULL THEN
13394 IF p_project_in.bill_job_group_id <> l_project_rec.bill_job_group_id
13395 THEN
13396 --bug 2955326
13397 /*
13398 l_statement := l_statement || ' BILL_JOB_BILL_ID = ' ||
13399 TO_CHAR(p_project_in.bill_job_group_id)||',';
13400 */
13401 l_statement := l_statement || ' BILL_JOB_GROUP_ID = :bill_jb_gp_id ,'; --Bug 5739298 Changed BILL_JOB_BILL_ID to BILL_JOB_GROUP_ID
13402 l_b_bill_jb_gp_id_flag := 'Y';
13403 --end bug 2955326
13404 l_update_yes_flag := 'Y';
13405 END IF;
13406 END IF;
13407
13408 -- ORM Code change ends here ...
13409 /*Commented the below code for bug 2802984*/
13410 /*IF p_project_in.emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13411 AND p_project_in.emp_bill_rate_schedule_id IS NOT NULL THEN
13412 IF p_project_in.emp_bill_rate_schedule_id <> l_project_rec.emp_bill_rate_schedule_id
13413 THEN
13414 l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = ' ||
13415 TO_CHAR(p_project_in.emp_bill_rate_schedule_id)||',';
13416 l_update_yes_flag := 'Y';
13417 END IF;
13418 END IF;
13419
13420 IF p_project_in.job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13421 AND p_project_in.job_bill_rate_schedule_id IS NOT NULL THEN
13422 IF p_project_in.job_bill_rate_schedule_id <> l_project_rec.job_bill_rate_schedule_id
13423 THEN
13424 l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = ' ||
13425 TO_CHAR(p_project_in.job_bill_rate_schedule_id)||',';
13426 l_update_yes_flag := 'Y';
13427 END IF;
13428 END IF;*/
13429 /*Commenting till here for bug 2802984 */
13430
13431 /* Code for the bug 2802984 starts*/
13432
13433 pa_project_pvt.Check_Schedule_type
13434 (p_pa_task_id => '',
13435 p_pa_project_id => l_project_id,
13436 p_in_labor_sch_type => p_project_in.labor_sch_type,
13437 p_in_nl_sch_type => p_project_in.non_labor_sch_type,
13438 p_task_name => '',
13439 p_pm_task_reference => '',
13440 p_out_labor_sch_type => l_out_labor_sch_type,
13441 p_out_nl_labor_sch_type => l_out_nl_labor_sch_type,
13442 p_return_status => l_return_status
13443 );
13444
13445 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13446 THEN
13447 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13448
13449 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13450 THEN
13451 RAISE FND_API.G_EXC_ERROR;
13452 END IF;
13453
13454
13455 pa_project_pvt.validate_schedule_values
13456 (p_pa_project_id => l_project_id,
13457 p_pa_task_id => '',
13458 p_task_name => '',
13459 p_pm_task_reference => '',
13460 p_lab_db_sch_type => l_project_rec.labor_sch_type,
13461 p_nl_db_sch_type => l_project_rec.non_labor_sch_type,
13462 p_labor_sch_type => l_out_labor_sch_type,
13463 p_nl_sch_type => l_out_nl_labor_sch_type,
13464 p_emp_bill_rate_schedule_id => p_project_in.EMP_BILL_RATE_SCHEDULE_ID,
13465 p_job_bill_rate_schedule_id => p_project_in.JOB_BILL_RATE_SCHEDULE_ID,
13466 p_labor_schedule_fixed_date => p_project_in.LABOR_SCHEDULE_FIXED_DATE,
13467 p_labor_schedule_discount => p_project_in.LABOR_SCHEDULE_DISCOUNT,
13468 p_labor_disc_reason_code => p_project_in.LABOR_DISC_REASON_CODE,
13469 p_nl_bill_rate_org_id => p_project_in.NON_LABOR_BILL_RATE_ORG_ID,
13470 p_non_lab_std_bill_rt_sch_id => p_project_in.NON_LAB_STD_BILL_RT_SCH_ID,
13471 p_nl_schedule_fixed_date => p_project_in.NON_LABOR_SCHEDULE_FIXED_DATE,
13472 p_nl_schedule_discount => p_project_in.NON_LABOR_SCHEDULE_DISCOUNT,
13473 p_non_labor_disc_reason_code => p_project_in.NON_LABOR_DISC_REASON_CODE,
13474 p_rev_ind_rate_sch_id => p_project_in.REV_IND_RATE_SCH_ID,
13475 p_inv_ind_rate_sch_id => p_project_in.INV_IND_RATE_SCH_ID,
13476 p_rev_ind_sch_fixed_date => p_project_in.REV_IND_SCH_FIXED_DATE,
13477 p_inv_ind_sch_fixed_date => p_project_in.INV_IND_SCH_FIXED_DATE,
13478 p_return_status => l_return_status
13479 );
13480
13481
13482 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
13483 THEN
13484
13485 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13486
13487 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
13488 THEN
13489
13490 RAISE FND_API.G_EXC_ERROR;
13491 END IF;
13492
13493 IF p_project_in.labor_sch_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13494 AND p_project_in.labor_sch_type IS NOT NULL
13495 THEN
13496 IF p_project_in.labor_sch_type <> NVL(l_task_rec.LABOR_SCH_TYPE,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13497 THEN
13498 --bug 2955326
13499 /*
13500 l_statement := l_statement ||' LABOR_SCH_TYPE = '||''''||
13501 RTRIM(p_project_in.labor_sch_type)||''''||',';
13502 */
13503 l_statement := l_statement ||' LABOR_SCH_TYPE = :lb_sch_type ,';
13504 l_b_lb_sch_tp_fg := 'Y';
13505 --end bug 2955326
13506 l_update_yes_flag := 'Y';
13507 END IF;
13508 END IF;
13509
13510 IF p_project_in.non_labor_sch_type <>
13511 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13512 AND p_project_in.non_labor_sch_type IS NOT NULL
13513 THEN
13514 IF p_project_in.non_labor_sch_type
13515 <> NVL(l_task_rec.NON_LABOR_SCH_TYPE,
13516 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
13517 THEN
13518 --bug 2955326
13519 /*
13520 l_statement := l_statement ||
13521 ' NON_LABOR_SCH_TYPE = '||''''||
13522 RTRIM(p_project_in.non_labor_sch_type)||''''||',';
13523 */
13524 l_statement := l_statement ||
13525 ' NON_LABOR_SCH_TYPE = :nn_lb_sch_tp ,';
13526 l_b_nn_lb_sch_tp_fg := 'Y';
13527 --end bug 2955326
13528 l_update_yes_flag := 'Y';
13529 END IF;
13530 END IF;
13531
13532 IF l_out_labor_sch_type = 'B' THEN
13533
13534 /* Should be able to update null since this is not mandatory*/
13535
13536 IF ((p_project_in.emp_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13537 AND p_project_in.emp_bill_rate_schedule_id IS NOT NULL) OR (p_project_in.emp_bill_rate_schedule_id IS NULL))
13538 THEN
13539 IF ((p_project_in.emp_bill_rate_schedule_id <>
13540 NVL(l_project_rec.emp_bill_rate_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))
13541 OR (p_project_in.emp_bill_rate_schedule_id IS NULL))
13542 THEN
13543 --bug 2955326
13544 /*
13545 l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = ' ||
13546 TO_CHAR(p_project_in.emp_bill_rate_schedule_id)||',';
13547 */
13548 l_statement := l_statement || ' EMP_BILL_RATE_SCHEDULE_ID = :emp_bill_rt_sch_id2 ,';
13549 l_b_emp_bill_rt_sch_id_fg2 := 'Y';
13550 --end bug 2955326
13551 l_update_yes_flag := 'Y';
13552 END IF;
13553 END IF;
13554
13555 /*
13556 1)Should be able to update null when prm is not licensed.
13557 2) When prm is licensed then it is mandatory.
13558 */
13559
13560 IF ((p_project_in.job_bill_rate_schedule_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13561 AND p_project_in.job_bill_rate_schedule_id IS NOT NULL)
13562 OR (p_project_in.job_bill_rate_schedule_id is NULL and pa_install.is_prm_licensed = 'N'))
13563 THEN
13564 IF (p_project_in.job_bill_rate_schedule_id <> NVL(l_project_rec.job_bill_rate_schedule_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13565 OR (p_project_in.job_bill_rate_schedule_id IS NULL))
13566 THEN
13567 --bug 2955326
13568 /*
13569 l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = ' ||
13570 TO_CHAR(p_project_in.job_bill_rate_schedule_id)||',';
13571 */
13572 l_statement := l_statement || ' JOB_BILL_RATE_SCHEDULE_ID = :jb_bill_rt_sch_id2,';
13573 l_b_jb_bill_rt_sch_id_fg2 := 'Y';
13574 --end bug 2955326
13575 l_update_yes_flag := 'Y';
13576 END IF;
13577 END IF;
13578
13579 /* Should be able to update null*/
13580
13581 IF ((p_project_in.labor_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13582 AND p_project_in.labor_schedule_fixed_date IS NOT NULL) OR (p_project_in.labor_schedule_fixed_date IS NULL))
13583 THEN
13584 IF (p_project_in.labor_schedule_fixed_date <>
13585 NVL(l_project_rec.labor_schedule_fixed_date,PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
13586 OR (l_project_rec.labor_schedule_fixed_date IS NULL))
13587 THEN
13588 --bug 2955326
13589 /*
13590 l_statement := l_statement ||
13591 ' LABOR_SCHEDULE_FIXED_DATE = to_date('''||
13592 to_char(p_project_in.labor_schedule_fixed_date,'YYYY/MM/DD')||
13593 ''', ''YYYY/MM/DD''),';
13594 */
13595 l_statement := l_statement ||
13596 ' LABOR_SCHEDULE_FIXED_DATE = :lb_sch_fx_dt ,';
13597 l_b_lb_sch_fx_dt_fg := 'Y';
13598 --end bug 2955326
13599 l_update_yes_flag := 'Y';
13600 END IF;
13601 END IF;
13602
13603 /* Should be able to update null*/
13604 IF ((p_project_in.labor_schedule_discount <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13605 AND p_project_in.labor_schedule_discount IS NOT NULL)
13606 OR (p_project_in.labor_schedule_discount IS NULL)) THEN
13607 IF ((p_project_in.labor_schedule_discount
13608 <> NVL(l_project_rec.labor_schedule_discount,
13609 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) OR (p_project_in.labor_schedule_discount IS NULL))
13610 THEN
13611 --bug 2955326
13612 /*
13613 l_statement := l_statement ||
13614 ' LABOR_SCHEDULE_DISCOUNT = '||''''||
13615 TO_NUMBER(p_project_in.labor_schedule_discount)||''''||',';
13616 */
13617 l_statement := l_statement ||
13618 ' LABOR_SCHEDULE_DISCOUNT = :lb_sch_dsct ,';
13619 l_b_lb_sch_dsct_fg := 'Y';
13620 --end bug 2955326
13621 l_update_yes_flag := 'Y';
13622 END IF;
13623 END IF;
13624
13625 IF p_project_in.labor_schedule_discount IS NULL THEN
13626 l_statement := l_statement ||
13627 ' LABOR_DISC_REASON_CODE = '''''||',';
13628 l_update_yes_flag := 'Y';
13629 ELSE
13630 IF p_project_in.labor_disc_reason_code <>
13631 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
13632 AND p_project_in.labor_disc_reason_code IS NOT NULL
13633 THEN
13634 IF (p_project_in.labor_disc_reason_code
13635 <> NVL(l_project_rec.labor_disc_reason_code,
13636 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
13637 THEN
13638 --bug 2955326
13639 /*
13640 l_statement := l_statement ||
13641 ' LABOR_DISC_REASON_CODE = '||''''||
13642 RTRIM(p_project_in.labor_disc_reason_code)||''''||',';
13643 */
13644 l_statement := l_statement ||
13645 ' LABOR_DISC_REASON_CODE = :lb_disc_rn_cd ,';
13646 l_b_lb_disc_rn_cd_fg2 := 'Y';
13647 --end bug 2955326
13648 l_update_yes_flag := 'Y';
13649 END IF;
13650 END IF;
13651 END IF;
13652
13653 ELSE
13654
13655 l_statement := l_statement ||
13656 ' LABOR_SCHEDULE_FIXED_DATE = '''''||',';
13657
13658 l_statement := l_statement ||
13659 ' LABOR_SCHEDULE_DISCOUNT = '''''||',';
13660
13661 l_statement := l_statement ||
13662 ' LABOR_DISC_REASON_CODE = '''''||',';
13663
13664 l_statement := l_statement ||
13665 ' EMP_BILL_RATE_SCHEDULE_ID = '''''||',';
13666
13667 l_statement := l_statement ||
13668 ' JOB_BILL_RATE_SCHEDULE_ID = '''''||',';
13669
13670
13671 l_update_yes_flag := 'Y';
13672 END IF;
13673
13674 IF l_out_labor_sch_type = 'I' OR l_out_nl_labor_sch_type = 'I' THEN
13675
13676 IF p_project_in.REV_IND_RATE_SCH_ID <>
13677 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13678 AND p_project_in.REV_IND_RATE_SCH_ID IS NOT NULL THEN
13679 IF NVL(p_project_in.REV_IND_RATE_SCH_ID,
13680 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13681 <> NVL(l_project_rec.REV_IND_RATE_SCH_ID,
13682 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13683 THEN
13684 --bug 2955326
13685 /*
13686 l_statement := l_statement ||
13687 ' REV_IND_RATE_SCH_ID = '||''''||
13688 TO_CHAR(p_project_in.REV_IND_RATE_SCH_ID)||''''||',';
13689 */
13690 l_statement := l_statement ||
13691 ' REV_IND_RATE_SCH_ID = :rv_ind_rt_sch_id ,';
13692 l_b_rv_ind_rt_sch_id_fg := 'Y';
13693 --end bug 2955326
13694 l_update_yes_flag := 'Y';
13695 END IF;
13696 END IF;
13697
13698
13699 IF p_project_in.INV_IND_RATE_SCH_ID <>
13700 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13701 AND p_project_in.INV_IND_RATE_SCH_ID IS NOT NULL THEN
13702 IF NVL(p_project_in.INV_IND_RATE_SCH_ID,
13703 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13704 <> NVL(l_project_rec.INV_IND_RATE_SCH_ID,
13705 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13706 THEN
13707 --bug 2955326
13708 /*
13709 l_statement := l_statement ||
13710 ' INV_IND_RATE_SCH_ID = '||''''||
13711 TO_CHAR(p_project_in.INV_IND_RATE_SCH_ID)||''''||',';
13712 */
13713 l_statement := l_statement ||
13714 ' INV_IND_RATE_SCH_ID = :inv_ind_rt_sch_id,';
13715 l_b_inv_ind_rt_sch_id_fg := 'Y';
13716 --end bug 2955326
13717 l_update_yes_flag := 'Y';
13718 END IF;
13719 END IF;
13720
13721 IF p_project_in.REV_IND_RATE_SCH_ID <>
13722 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13723 AND p_project_in.REV_IND_RATE_SCH_ID IS NOT NULL THEN
13724
13725 BEGIN
13726
13727 SELECT ind_rate_schedule_type INTO l_rev_rate_sch_type
13728 FROM pa_ind_rate_schedules
13729 WHERE ind_rate_sch_id = p_project_in.REV_IND_RATE_SCH_ID
13730 AND trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
13731
13732
13733 EXCEPTION
13734 WHEN NO_DATA_FOUND THEN
13735 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13736 THEN
13737 pa_interface_utils_pub.map_new_amg_msg
13738 ( p_old_message_code => 'PA_INVALID_REV_SCH_ID'
13739 ,p_msg_attribute => 'CHANGE'
13740 ,p_resize_flag => 'Y'
13741 ,p_msg_context => 'PROJ'
13742 ,p_attribute1 => l_project_rec.segment1
13743 ,p_attribute2 => ''
13744 ,p_attribute3 => ''
13745 ,p_attribute4 => ''
13746 ,p_attribute5 => '');
13747 END IF;
13748 RAISE FND_API.G_EXC_ERROR;
13749 END;
13750
13751 ELSE
13752
13753 IF l_project_rec.REV_IND_RATE_SCH_ID IS NOT NULL
13754 THEN
13755
13756 SELECT ind_rate_schedule_type INTO l_rev_rate_sch_type
13757 FROM pa_ind_rate_schedules
13758 WHERE ind_rate_sch_id = l_project_rec.REV_IND_RATE_SCH_ID;
13759 -- Bug 3657709
13760 /* AND trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
13761
13762 END IF;
13763
13764 END IF;
13765
13766 IF p_project_in.INV_IND_RATE_SCH_ID <>
13767 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13768 AND p_project_in.INV_IND_RATE_SCH_ID IS NOT NULL THEN
13769
13770 BEGIN
13771
13772 SELECT ind_rate_schedule_type INTO l_inv_rate_sch_type
13773 FROM pa_ind_rate_schedules
13774 WHERE ind_rate_sch_id = p_project_in.INV_IND_RATE_SCH_ID
13775 AND trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate));
13776
13777
13778 EXCEPTION
13779 WHEN NO_DATA_FOUND THEN
13780 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13781 THEN
13782 pa_interface_utils_pub.map_new_amg_msg
13783 ( p_old_message_code => 'PA_INVALID_INV_SCH_ID'
13784 ,p_msg_attribute => 'CHANGE'
13785 ,p_resize_flag => 'Y'
13786 ,p_msg_context => 'PROJ'
13787 ,p_attribute1 => l_project_rec.segment1
13788 ,p_attribute2 => ''
13789 ,p_attribute3 => ''
13790 ,p_attribute4 => ''
13791 ,p_attribute5 => '');
13792 END IF;
13793 RAISE FND_API.G_EXC_ERROR;
13794 END;
13795
13796 ELSE
13797 IF l_project_rec.INV_IND_RATE_SCH_ID IS NOT NULL
13798 THEN
13799
13800 SELECT ind_rate_schedule_type INTO l_inv_rate_sch_type
13801 FROM pa_ind_rate_schedules
13802 WHERE ind_rate_sch_id = l_project_rec.INV_IND_RATE_SCH_ID;
13803 -- Bug 3657709
13804 /* AND trunc(sysdate) between trunc(start_date_active) and nvl(end_date_active,trunc(sysdate)); */
13805
13806 END IF;
13807
13808 END IF;
13809
13810
13811 IF l_rev_rate_sch_type = 'P' AND l_project_rec.REV_IND_SCH_FIXED_DATE IS NOT NULL THEN
13812 l_statement := l_statement ||
13813 ' REV_IND_SCH_FIXED_DATE = '''''||',';
13814 l_update_yes_flag := 'Y';
13815 ELSE
13816 IF ((p_project_in.rev_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13817 AND p_project_in.rev_ind_sch_fixed_date IS NOT NULL) OR (p_project_in.rev_ind_sch_fixed_date IS NULL))
13818 THEN
13819 IF (p_project_in.rev_ind_sch_fixed_date
13820 <> NVL(l_project_rec.rev_ind_sch_fixed_date,
13821 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (l_project_rec.rev_ind_sch_fixed_date IS NULL))
13822 THEN
13823 --bug 2955326
13824 /*
13825 l_statement := l_statement ||
13826 ' rev_ind_sch_fixed_date = to_date('''||
13827 to_char(p_project_in.rev_ind_sch_fixed_date,'YYYY/MM/DD')||
13828 ''', ''YYYY/MM/DD''),';
13829 */
13830 l_statement := l_statement ||
13831 ' rev_ind_sch_fixed_date = :rev_ind_sch_fx_dt ,';
13832 l_b_ind_sch_fx_dt_fg := 'Y';
13833 --end bug 2955326
13834 l_update_yes_flag := 'Y';
13835 END IF;
13836 END IF;
13837 END IF;
13838
13839 IF l_inv_rate_sch_type = 'P' AND l_project_rec.INV_IND_SCH_FIXED_DATE IS NOT NULL
13840 THEN
13841 l_statement := l_statement ||
13842 ' INV_IND_SCH_FIXED_DATE = '''''||',';
13843 l_update_yes_flag := 'Y';
13844 ELSE
13845 IF ((p_project_in.inv_ind_sch_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13846 AND p_project_in.inv_ind_sch_fixed_date IS NOT NULL) OR (p_project_in.inv_ind_sch_fixed_date IS NULL))
13847 THEN
13848 IF (p_project_in.inv_ind_sch_fixed_date
13849 <> NVL(l_project_rec.inv_ind_sch_fixed_date,
13850 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) OR (p_project_in.inv_ind_sch_fixed_date IS NULL))
13851 THEN
13852 --bug 2955326
13853 /*
13854 l_statement := l_statement ||
13855 ' inv_ind_sch_fixed_date = to_date('''||
13856 to_char(p_project_in.inv_ind_sch_fixed_date,'YYYY/MM/DD')||
13857 ''', ''YYYY/MM/DD''),';
13858 */
13859 l_statement := l_statement ||
13860 ' inv_ind_sch_fixed_date = :inv_ind_sch_fx_dt,';
13861 l_b_inv_ind_sch_fx_dt_fg := 'Y';
13862 --end bug 2955326
13863 l_update_yes_flag := 'Y';
13864 END IF;
13865 END IF;
13866 END IF;
13867
13868 ELSE
13869 l_statement := l_statement ||
13870 ' REV_IND_RATE_SCH_ID = '''''||',';
13871
13872
13873 l_statement := l_statement ||
13874 ' INV_IND_RATE_SCH_ID = '''''||',';
13875
13876
13877 l_statement := l_statement ||
13878 ' REV_IND_SCH_FIXED_DATE = '''''||',';
13879
13880 l_statement := l_statement ||
13881 ' INV_IND_SCH_FIXED_DATE = '''''||',';
13882 l_update_yes_flag := 'Y';
13883 END IF;
13884
13885 IF l_out_nl_labor_sch_type = 'B' THEN
13886
13887 IF (p_project_in.non_labor_bill_rate_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13888 AND p_project_in.non_labor_bill_rate_org_id IS NOT NULL)
13889 THEN
13890 IF p_project_in.non_labor_bill_rate_org_id <>
13891 NVL(l_project_rec.non_labor_bill_rate_org_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13892 THEN
13893 --bug 2955326
13894 /*
13895 l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ' ||
13896 TO_CHAR(p_project_in.non_labor_bill_rate_org_id)||',';
13897 */
13898 l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = :nn_lb_bill_rt_org_id,';
13899 l_b_nn_lb_bill_rt_org_id_fg := 'Y';
13900 --bug 2955326
13901 l_update_yes_flag := 'Y';
13902 END IF;
13903 END IF;
13904
13905 IF (p_project_in.non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13906 AND p_project_in.non_lab_std_bill_rt_sch_id IS NOT NULL)
13907 THEN
13908 IF NVL(p_project_in.non_lab_std_bill_rt_sch_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13909 <> NVL(l_project_rec.non_lab_std_bill_rt_sch_id,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
13910 THEN
13911
13912
13913 BEGIN
13914 SELECT std_bill_rate_schedule INTO l_std_bill_rate_schedule
13915 FROM pa_std_bill_rate_schedules_all
13916 WHERE bill_rate_sch_id = p_project_in.non_lab_std_bill_rt_sch_id;
13917
13918 --bug 2955326
13919 /*
13920 l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||''''||
13921 TO_CHAR(p_project_in.non_lab_std_bill_rt_sch_id)||''''||',';
13922 */
13923 /*
13924 l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ' ||''''||
13925 RTRIM(l_std_bill_rate_schedule)||''''||',';
13926 */
13927 l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = :nn_lab_std_bill_rt_sch_id,';
13928 l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = :nn_lb_std_bill_rt_sch,';
13929 l_b_n_lb_st_bl_rt_sc_id_fg2 := 'Y';
13930 --end bug 2955326
13931 l_update_yes_flag := 'Y';
13932 EXCEPTION
13933 WHEN NO_DATA_FOUND THEN
13934 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
13935 THEN
13936 pa_interface_utils_pub.map_new_amg_msg
13937 ( p_old_message_code => 'PA_PRJ_NL_SCHEDULE_ID'
13938 ,p_msg_attribute => 'CHANGE'
13939 ,p_resize_flag => 'Y'
13940 ,p_msg_context => 'TASK'
13941 ,p_attribute1 => l_amg_segment1
13942 ,p_attribute2 => l_amg_task_number
13943 ,p_attribute3 => ''
13944 ,p_attribute4 => ''
13945 ,p_attribute5 => '');
13946 END IF;
13947 RAISE FND_API.G_EXC_ERROR;
13948 END;
13949
13950 END IF;
13951 END IF;
13952
13953 /* Should be able to update null*/
13954 IF ((p_project_in.non_labor_schedule_fixed_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
13955 AND p_project_in.non_labor_schedule_fixed_date IS NOT NULL) OR (p_project_in.non_labor_schedule_fixed_date IS NULL))
13956 THEN
13957 IF ((p_project_in.non_labor_schedule_fixed_date
13958 <> NVL(l_project_rec.non_labor_schedule_fixed_date,
13959 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)) OR (p_project_in.non_labor_schedule_fixed_date IS NULL))
13960 THEN
13961 --bug 2955326
13962 /*
13963 l_statement := l_statement ||
13964 ' NON_LABOR_SCHEDULE_FIXED_DATE = to_date('''||
13965 to_char(p_project_in.non_labor_schedule_fixed_date,'YYYY/MM/DD')||
13966 ''', ''YYYY/MM/DD''),';
13967 */
13968 l_statement := l_statement ||
13969 ' NON_LABOR_SCHEDULE_FIXED_DATE = :nn_lb_sch_fx_dt,';
13970 l_b_nn_lb_sch_fx_dt_fg := 'Y';
13971 --end bug 2955326
13972 l_update_yes_flag := 'Y';
13973 END IF;
13974 END IF;
13975
13976 /* Should be able to update null*/
13977 IF ((p_project_in.non_labor_schedule_discount <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
13978 AND p_project_in.non_labor_schedule_discount IS NOT NULL) OR (p_project_in.non_labor_schedule_discount IS NULL))
13979 THEN
13980 -- bug 8975097
13981 IF (p_project_in.non_labor_schedule_discount <> NVL(l_project_rec.non_labor_schedule_discount,
13982 PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR (p_project_in.non_labor_schedule_discount IS NULL))
13983 THEN
13984 --bug 2955326
13985 /*
13986 l_statement := l_statement ||
13987 ' NON_LABOR_SCHEDULE_DISCOUNT = '||''''||
13988 TO_CHAR(p_project_in.non_labor_schedule_discount)||''''||',';
13989 */
13990 l_statement := l_statement ||
13991 ' NON_LABOR_SCHEDULE_DISCOUNT = :nn_lb_sch_dst ,';
13992 l_b_nn_lb_sch_dst_fg := 'Y';
13993 --end bug 2955326
13994 l_update_yes_flag := 'Y';
13995 END IF;
13996 END IF;
13997
13998 IF p_project_in.non_labor_schedule_discount IS NULL
13999 THEN
14000 l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
14001 l_update_yes_flag := 'Y';
14002 ELSE
14003 IF (p_project_in.non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14004 AND p_project_in.non_labor_disc_reason_code IS NOT NULL)
14005 THEN
14006 IF NVL(p_project_in.non_labor_disc_reason_code,
14007 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14008 <> NVL(l_project_rec.non_labor_disc_reason_code,
14009 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14010 THEN
14011 --bug 2955326
14012 /*
14013 l_statement := l_statement ||
14014 ' NON_LABOR_DISC_REASON_CODE = '||''''||
14015 RTRIM(p_project_in.non_labor_disc_reason_code)||''''||',';
14016 */
14017 l_statement := l_statement ||
14018 ' NON_LABOR_DISC_REASON_CODE = :n_lb_dis_rn_cd,';
14019 l_b_n_lb_disc_rsn_cd_fg2 := 'Y';
14020 --end bug 2955326
14021 l_update_yes_flag := 'Y';
14022 END IF;
14023 END IF;
14024 END IF;
14025
14026 ELSE
14027
14028 l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = '''''||',';
14029
14030 l_statement := l_statement || ' NON_LABOR_SCHEDULE_FIXED_DATE = ''''' ||',';
14031
14032 l_statement := l_statement || ' NON_LABOR_SCHEDULE_DISCOUNT = '''''||',';
14033
14034 l_statement := l_statement || ' NON_LABOR_DISC_REASON_CODE = ''''' ||',';
14035
14036 l_statement := l_statement || ' NON_LABOR_STD_BILL_RATE_SCHDL = ''''' ||',';
14037
14038 l_statement := l_statement || ' NON_LABOR_BILL_RATE_ORG_ID = ''''' ||',';
14039 l_update_yes_flag := 'Y';
14040 END IF;
14041
14042 /* Code for the bug 2802984 ends*/
14043
14044 --Sakthi MCB
14045
14046 IF p_project_in.competence_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14047 AND p_project_in.competence_match_wt IS NOT NULL THEN
14048 IF p_project_in.competence_match_wt <> l_project_rec.competence_match_wt
14049 THEN
14050 --bug 2955326
14051 /*
14052 l_statement := l_statement || ' COMPETENCE_MATCH_WT = ' ||
14053 TO_CHAR(p_project_in.competence_match_wt)||',';
14054 */
14055 l_statement := l_statement || ' COMPETENCE_MATCH_WT = :comp_match_wt ,';
14056 l_b_comp_mtch_wt_flag := 'Y';
14057 --end bug 2955326
14058 l_update_yes_flag := 'Y';
14059 END IF;
14060 END IF;
14061
14062 IF p_project_in.availability_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14063 AND p_project_in.availability_match_wt IS NOT NULL THEN
14064 IF p_project_in.availability_match_wt <> l_project_rec.availability_match_wt
14065 THEN
14066 --bug 2955326
14067 /*
14068 l_statement := l_statement || ' AVAILABILITY_MATCH_WT = ' ||
14069 TO_CHAR(p_project_in.availability_match_wt)||',';
14070 */
14071 l_statement := l_statement || ' AVAILABILITY_MATCH_WT = :avail_mtch_wt ,';
14072 l_b_avail_mtch_wt_flag := 'Y';
14073 --end bug 2955326
14074 l_update_yes_flag := 'Y';
14075 END IF;
14076 END IF;
14077
14078 IF p_project_in.job_level_match_wt <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14079 AND p_project_in.job_level_match_wt IS NOT NULL THEN
14080 IF p_project_in.job_level_match_wt <> l_project_rec.job_level_match_wt
14081 THEN
14082 --bug 2955326
14083 /*
14084 l_statement := l_statement || ' JOB_LEVEL_MATCH_WT = ' ||
14085 TO_CHAR(p_project_in.job_level_match_wt)||',';
14086 */
14087 l_statement := l_statement || ' JOB_LEVEL_MATCH_WT = :jb_lvl_mt_wt ,';
14088 l_b_jb_lvl_mt_wt_flag := 'Y';
14089 --end bug 2955326
14090 l_update_yes_flag := 'Y';
14091 END IF;
14092 END IF;
14093
14094 IF p_project_in.search_min_availability <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14095 AND p_project_in.search_min_availability IS NOT NULL THEN
14096 IF p_project_in.search_min_availability <> l_project_rec.search_min_availability
14097 THEN
14098 --bug 2955326
14099 /*
14100 l_statement := l_statement || ' SEARCH_MIN_AVAILABILITY = ' ||
14101 TO_CHAR(p_project_in.search_min_availability)||',';
14102 */
14103 l_statement := l_statement || ' SEARCH_MIN_AVAILABILITY = :srch_min_avail ,';
14104 l_b_search_min_avail_flag := 'Y';
14105 --end bug 2955326
14106 l_update_yes_flag := 'Y';
14107 END IF;
14108 END IF;
14109
14110 IF p_project_in.search_org_hier_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14111 AND p_project_in.search_org_hier_id IS NOT NULL THEN
14112 IF p_project_in.search_org_hier_id <> l_project_rec.search_org_hier_id
14113 THEN
14114 --bug 2955326
14115 /*
14116 l_statement := l_statement || ' SEARCH_ORG_HIER_ID = ' ||
14117 TO_CHAR(p_project_in.search_org_hier_id)||',';
14118 */
14119 l_statement := l_statement || ' SEARCH_ORG_HIER_ID = :srch_org_hier_id ,';
14120 l_b_srch_org_hier_id_flag := 'Y';
14121 --end bug 2955326
14122 l_update_yes_flag := 'Y';
14123 END IF;
14124 END IF;
14125
14126 IF p_project_in.search_starting_org_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14127 AND p_project_in.search_starting_org_id IS NOT NULL THEN
14128 IF p_project_in.search_starting_org_id <> l_project_rec.search_starting_org_id
14129 THEN
14130 --bug 2955326
14131 /*
14132 l_statement := l_statement || ' SEARCH_ORG_HIER_ID = ' ||
14133 TO_CHAR(p_project_in.search_starting_org_id)||',';
14134 */
14135 l_statement := l_statement || ' SEARCH_ORG_HIER_ID = :srch_org_hier_id ,';
14136 l_b_srch_st_org_id_flag := 'Y';
14137 --end bug 2955326
14138 l_update_yes_flag := 'Y';
14139 END IF;
14140 END IF;
14141
14142 IF p_project_in.min_cand_score_reqd_for_nom <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14143 AND p_project_in.min_cand_score_reqd_for_nom IS NOT NULL THEN
14144 IF p_project_in.min_cand_score_reqd_for_nom <> l_project_rec.min_cand_score_reqd_for_nom
14145 THEN
14146 --bug 2955326
14147 /*
14148 l_statement := l_statement || ' MIN_CAND_SCORE_REQD_FOR_NOM = ' ||
14149 TO_CHAR(p_project_in.min_cand_score_reqd_for_nom)||',';
14150 */
14151 l_statement := l_statement || ' MIN_CAND_SCORE_REQD_FOR_NOM = :min_can_sc_req_for_nom ,';
14152 l_b_min_can_sc_req_for_nom := 'Y';
14153 --end bug 2955326
14154 l_update_yes_flag := 'Y';
14155 END IF;
14156 END IF;
14157
14158 -- Bug 6144566: Changes start
14159 -- Bug 6144566: Introduced MCB related validations
14160
14161 IF p_project_in.multi_currency_billing_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14162 AND p_project_in.multi_currency_billing_flag IS NOT NULL THEN
14163 IF NVL(p_project_in.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14164 <> NVL(l_project_rec.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14165 -- if attempting to change MCB flag; check if it can be allowed
14166 IF NVL(pa_multi_currency_billing.check_mcb_trans_exist(p_project_in.pa_project_id),'N') = 'Y'
14167 OR NVL(pa_multi_currency_billing.check_mcb_setup_exists(p_project_in.pa_project_id),'N') = 'Y' THEN
14168 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14169 FND_MESSAGE.SET_NAME('PA','PA_MCB_ALLOW_NO_CHG_AMG'); -- Cannot change MCB flag
14170 FND_MSG_PUB.ADD;
14171 RAISE FND_API.G_EXC_ERROR;
14172 END IF;
14173
14174 END IF;
14175
14176 l_statement := l_statement || ' MULTI_CURRENCY_BILLING_FLAG = :multi_crncy_bil_flag ,';
14177 l_b_multi_crncy_bil_flag := 'Y';
14178 l_update_yes_flag := 'Y';
14179
14180 END IF;
14181
14182 -- do MCB related validations, if MCB flag is 'Y'
14183 IF p_project_in.multi_currency_billing_flag = 'Y' THEN -- do MCB related validations
14184
14185 -- Project Currency related attributes
14186 IF p_project_in.PROJECT_BIL_RATE_TYPE is NULL
14187 OR p_project_in.PROJECT_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PROJ_RATE_TYPE_INV_AMG:The project exchage rate type is invalid
14188 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14189 FND_MESSAGE.SET_NAME('PA','PA_PROJ_RATE_TYPE_INV_AMG');
14190 FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
14191 FND_MSG_PUB.ADD;
14192 RAISE FND_API.G_EXC_ERROR;
14193 END IF;
14194 ELSE
14195 IF p_project_in.PROJECT_BIL_RATE_TYPE = 'User' THEN
14196 IF p_project_in.PROJECT_BIL_EXCHANGE_RATE is NULL
14197 OR p_project_in.PROJECT_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14198 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PC_AMG:Project Exchange Rate cannot be null when project rate type is User.
14199 FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PC_AMG');
14200 FND_MSG_PUB.ADD;
14201 RAISE FND_API.G_EXC_ERROR;
14202 END IF;
14203 END IF;
14204
14205 l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14206 l_b_proj_bil_xch_rt_flag := 'Y';
14207 l_update_yes_flag := 'Y';
14208
14209 ELSE -- non-User type
14210 IF p_project_in.PROJECT_BIL_RATE_DATE_CODE is NULL
14211 OR p_project_in.PROJECT_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14212
14213 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14214 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
14215 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
14216 FND_MSG_PUB.ADD;
14217 RAISE FND_API.G_EXC_ERROR;
14218 END IF;
14219 ELSE
14220 IF p_project_in.PROJECT_BIL_RATE_DATE_CODE = 'FIXED_DATE' THEN --Modified for bug 6332591
14221 IF p_project_in.PROJECT_BIL_RATE_DATE is NULL
14222 OR p_project_in.PROJECT_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
14223 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14224 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
14225 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Currency');
14226 FND_MSG_PUB.ADD;
14227 RAISE FND_API.G_EXC_ERROR;
14228 END IF;
14229 END IF;
14230 END IF;
14231 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14232 l_b_prj_bil_rt_dt_flag := 'Y';
14233 l_update_yes_flag := 'Y';
14234 END IF;
14235
14236 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14237 l_b_prj_bil_rt_dt_code_flag := 'Y';
14238 l_update_yes_flag := 'Y';
14239
14240 END IF;
14241
14242 l_statement := l_statement || ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14243 l_b_proj_bil_rt_tp_flag := 'Y';
14244 l_update_yes_flag := 'Y';
14245
14246 END IF;
14247
14248
14249 -- Project Functional Currency related attributes
14250 IF p_project_in.PROJFUNC_BIL_RATE_TYPE is NULL
14251 OR p_project_in.PROJFUNC_BIL_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_PFC_RATE_TYPE_INV_AMG:The project functional exchage rate type is invalid
14252 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14253 FND_MESSAGE.SET_NAME('PA','PA_PFC_RATE_TYPE_INV_AMG');
14254 FND_MSG_PUB.ADD;
14255 RAISE FND_API.G_EXC_ERROR;
14256 END IF;
14257 ELSE
14258 IF p_project_in.PROJFUNC_BIL_RATE_TYPE = 'User' THEN
14259 IF p_project_in.PROJFUNC_BIL_EXCHANGE_RATE is NULL
14260 OR p_project_in.PROJFUNC_BIL_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14261 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCH_RATE_NULL_PF_AMG:Project Functional Exchange Rate cannot be null when project functional rate type is User.
14262 FND_MESSAGE.SET_NAME('PA','PA_EXCH_RATE_NULL_PF_AMG');
14263 FND_MSG_PUB.ADD;
14264 RAISE FND_API.G_EXC_ERROR;
14265 END IF;
14266 END IF;
14267
14268 l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14269 l_b_pjfnc_bil_xch_rt_flag := 'Y';
14270 l_update_yes_flag := 'Y';
14271
14272 ELSE -- non-User type
14273 IF p_project_in.PROJFUNC_BIL_RATE_DATE_CODE is NULL
14274 OR p_project_in.PROJFUNC_BIL_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14275
14276 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14277 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
14278 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
14279 FND_MSG_PUB.ADD;
14280 RAISE FND_API.G_EXC_ERROR;
14281 END IF;
14282 ELSE
14283 IF p_project_in.PROJFUNC_BIL_RATE_DATE_CODE = 'FIXED_DATE' THEN --Modified for bug 6332591
14284 IF p_project_in.PROJFUNC_BIL_RATE_DATE is NULL
14285 OR p_project_in.PROJFUNC_BIL_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
14286 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14287 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
14288 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Project Functional Currency');
14289 FND_MSG_PUB.ADD;
14290 RAISE FND_API.G_EXC_ERROR;
14291 END IF;
14292 END IF;
14293 END IF;
14294 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14295 l_b_prjfnc_bil_rt_dt_flag := 'Y';
14296 l_update_yes_flag := 'Y';
14297 END IF;
14298 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14299 l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14300 l_update_yes_flag := 'Y';
14301 END IF;
14302
14303 l_statement := l_statement || ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14304 l_b_prjfnc_bil_rt_tp_flag := 'Y';
14305 l_update_yes_flag := 'Y';
14306
14307 END IF;
14308
14309
14310 -- Funding Currency related attributes
14311 IF p_project_in.FUNDING_RATE_TYPE is NULL
14312 OR p_project_in.FUNDING_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN -- PA_FUND_RATE_TYPE_INV_AMG:The funding exchage rate type is invalid
14313 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14314 FND_MESSAGE.SET_NAME('PA','PA_FUND_RATE_TYPE_INV_AMG');
14315 FND_MSG_PUB.ADD;
14316 RAISE FND_API.G_EXC_ERROR;
14317 END IF;
14318 ELSE
14319 IF p_project_in.FUNDING_RATE_TYPE = 'User' THEN
14320 IF p_project_in.FUNDING_EXCHANGE_RATE is NULL
14321 OR p_project_in.FUNDING_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
14322 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN -- PA_EXCHANGE_RATE_NULL:Exchange rate cannot be null when rate type is User.
14323 FND_MESSAGE.SET_NAME('PA','PA_EXCHANGE_RATE_NULL');
14324 FND_MSG_PUB.ADD;
14325 RAISE FND_API.G_EXC_ERROR;
14326 END IF;
14327 END IF;
14328 l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14329 l_b_fnding_xch_rt_flag := 'Y';
14330 l_update_yes_flag := 'Y';
14331
14332 ELSE -- non-User type
14333 IF p_project_in.FUNDING_RATE_DATE_CODE is NULL
14334 OR p_project_in.FUNDING_RATE_DATE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
14335
14336 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14337 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_TYPE_INVALID_AMG');
14338 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
14339 FND_MSG_PUB.ADD;
14340 RAISE FND_API.G_EXC_ERROR;
14341 END IF;
14342 ELSE
14343 IF p_project_in.FUNDING_RATE_DATE_CODE = 'FIXED_DATE' THEN --Modified for bug 6332591
14344 IF p_project_in.FUNDING_RATE_DATE is NULL
14345 OR p_project_in.FUNDING_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
14346 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
14347 FND_MESSAGE.SET_NAME('PA','PA_RATE_DATE_INVALID_AMG');
14348 FND_MESSAGE.SET_TOKEN('CURR_TYPE','Funding Currency');
14349 FND_MSG_PUB.ADD;
14350 RAISE FND_API.G_EXC_ERROR;
14351 END IF;
14352 END IF;
14353 END IF;
14354 l_statement := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14355 l_b_fnding_rt_dt_flag := 'Y';
14356 l_update_yes_flag := 'Y';
14357 END IF;
14358 l_statement := l_statement || ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14359 l_b_fndng_rt_dt_cd_flag := 'Y';
14360 l_update_yes_flag := 'Y';
14361 END IF;
14362
14363 l_statement := l_statement || ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14364 l_b_fnding_rt_type_flag := 'Y';
14365 l_update_yes_flag := 'Y';
14366
14367 END IF;
14368
14369 ELSE -- do no MCB related validations
14370
14371 IF ((p_project_in.project_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14372 AND p_project_in.project_bil_exchange_rate IS NOT NULL)
14373 OR p_project_in.project_bil_exchange_rate IS NULL) THEN
14374 IF NVL(p_project_in.project_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14375 <> NVL(l_project_rec.project_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14376 l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14377 l_b_proj_bil_xch_rt_flag := 'Y';
14378 l_update_yes_flag := 'Y';
14379 END IF;
14380 END IF;
14381
14382 IF ((p_project_in.project_bil_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14383 AND p_project_in.project_bil_rate_date_code IS NOT NULL)
14384 OR p_project_in.project_bil_rate_date_code IS NULL) THEN
14385 IF NVL(p_project_in.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14386 <> NVL(l_project_rec.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14387 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14388 l_b_prj_bil_rt_dt_code_flag := 'Y';
14389 l_update_yes_flag := 'Y';
14390 END IF;
14391 END IF;
14392
14393 IF ((p_project_in.project_bil_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14394 AND p_project_in.project_bil_rate_type IS NOT NULL)
14395 OR p_project_in.project_bil_rate_type IS NULL) THEN
14396 IF NVL(p_project_in.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14397 <> NVL(l_project_rec.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14398 l_statement := l_statement || ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14399 l_b_proj_bil_rt_tp_flag := 'Y';
14400 l_update_yes_flag := 'Y';
14401 END IF;
14402 END IF;
14403
14404 IF ((p_project_in.project_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14405 AND p_project_in.project_bil_rate_date IS NOT NULL)
14406 OR p_project_in.project_bil_rate_date IS NULL) THEN
14407 IF NVL(p_project_in.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14408 <> NVL(l_project_rec.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14409 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14410 l_b_prj_bil_rt_dt_flag := 'Y';
14411 l_update_yes_flag := 'Y';
14412 END IF;
14413 END IF;
14414
14415 IF ((p_project_in.projfunc_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14416 AND p_project_in.projfunc_bil_exchange_rate IS NOT NULL)
14417 OR p_project_in.projfunc_bil_exchange_rate IS NULL) THEN
14418 IF NVL(p_project_in.projfunc_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
14419 <> NVL(l_project_rec.projfunc_bil_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14420 l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14421 l_b_pjfnc_bil_xch_rt_flag := 'Y';
14422 l_update_yes_flag := 'Y';
14423 END IF;
14424 END IF;
14425
14426 IF ((p_project_in.projfunc_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14427 AND p_project_in.projfunc_bil_rate_date IS NOT NULL)
14428 OR p_project_in.projfunc_bil_rate_date IS NULL) THEN
14429 IF NVL(p_project_in.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14430 <> NVL(l_project_rec.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14431 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14432 l_b_prjfnc_bil_rt_dt_flag := 'Y';
14433 l_update_yes_flag := 'Y';
14434 END IF;
14435 END IF;
14436
14437 IF ((p_project_in.projfunc_bil_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14438 AND p_project_in.projfunc_bil_rate_date_code IS NOT NULL)
14439 OR p_project_in.projfunc_bil_rate_date_code IS NULL) THEN
14440 IF NVL(p_project_in.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14441 <> NVL(l_project_rec.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14442 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14443 l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14444 l_update_yes_flag := 'Y';
14445 END IF;
14446 END IF;
14447
14448 IF ((p_project_in.projfunc_bil_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14449 AND p_project_in.projfunc_bil_rate_type IS NOT NULL)
14450 OR p_project_in.projfunc_bil_rate_type IS NULL) THEN
14451 IF NVL(p_project_in.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14452 <> NVL(l_project_rec.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14453 l_statement := l_statement || ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14454 l_b_prjfnc_bil_rt_tp_flag := 'Y';
14455 l_update_yes_flag := 'Y';
14456 END IF;
14457 END IF;
14458
14459 IF ((p_project_in.funding_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14460 AND p_project_in.funding_exchange_rate IS NOT NULL)
14461 OR p_project_in.funding_exchange_rate IS NULL) THEN
14462 IF NVL(p_project_in.funding_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <>
14463 NVL(l_project_rec.funding_exchange_rate,PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
14464 l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14465 l_b_fnding_xch_rt_flag := 'Y';
14466 l_update_yes_flag := 'Y';
14467 END IF;
14468 END IF;
14469
14470 IF ((p_project_in.funding_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14471 AND p_project_in.funding_rate_date IS NOT NULL)
14472 OR p_project_in.funding_rate_date IS NULL) THEN
14473 IF NVL(p_project_in.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14474 <> NVL(l_project_rec.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
14475 l_statement := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14476 l_b_fnding_rt_dt_flag := 'Y';
14477 l_update_yes_flag := 'Y';
14478 END IF;
14479 END IF;
14480
14481 IF ((p_project_in.funding_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14482 AND p_project_in.funding_rate_date_code IS NOT NULL)
14483 OR p_project_in.funding_rate_date_code IS NULL) THEN
14484 IF NVL(p_project_in.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14485 <> NVL(l_project_rec.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14486 l_statement := l_statement || ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14487 l_b_fndng_rt_dt_cd_flag := 'Y';
14488 l_update_yes_flag := 'Y';
14489 END IF;
14490 END IF;
14491
14492 IF ((p_project_in.funding_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14493 AND p_project_in.funding_rate_type IS NOT NULL)
14494 OR p_project_in.funding_rate_type IS NULL) THEN
14495 IF NVL(p_project_in.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14496 <> NVL(l_project_rec.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
14497 l_statement := l_statement || ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14498 l_b_fnding_rt_type_flag := 'Y';
14499 l_update_yes_flag := 'Y';
14500 END IF;
14501 END IF;
14502
14503 END IF;
14504
14505 END IF;
14506
14507 -- Bug 6144566: Changes end
14508
14509 /* Commenting the below code for bug #4630836 as the 'non_lab_std_bill_rt_sch_id' column
14510 is getting updated in the code added as part of the fix for the bug 2802984 and the below
14511 code is causing duplicate column updation error.
14512
14513 IF p_project_in.non_lab_std_bill_rt_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14514 AND p_project_in.non_lab_std_bill_rt_sch_id IS NOT NULL THEN
14515 IF p_project_in.non_lab_std_bill_rt_sch_id <> l_project_rec.non_lab_std_bill_rt_sch_id
14516 THEN
14517 --bug 2955326
14518 --
14519 -- l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = ' ||
14520 -- TO_CHAR(p_project_in.non_lab_std_bill_rt_sch_id)||',';
14521 --
14522 l_statement := l_statement || ' NON_LAB_STD_BILL_RT_SCH_ID = :n_lb_std_bill_rt_sch_id ,';
14523 l_b_nn_lb_std_bl_rt_sch_id_f := 'Y';
14524 --end bug 2955326
14525 l_update_yes_flag := 'Y';
14526 END IF;
14527 END IF; */
14528
14529 -- Bug 6144566: Changes start
14530 /*
14531 IF p_project_in.project_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14532 AND p_project_in.project_bil_exchange_rate IS NOT NULL THEN
14533 IF p_project_in.project_bil_exchange_rate <> l_project_rec.project_bil_exchange_rate
14534 THEN
14535 --bug 2955326
14536
14537 l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = ' ||
14538 TO_CHAR(p_project_in.project_bil_exchange_rate)||',';
14539
14540 l_statement := l_statement || ' PROJECT_BIL_EXCHANGE_RATE = :proj_bil_xch_rt ,';
14541 l_b_proj_bil_xch_rt_flag := 'Y';
14542 --end bug 2955326
14543 l_update_yes_flag := 'Y';
14544 END IF;
14545 END IF;
14546
14547 IF p_project_in.projfunc_bil_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14548 AND p_project_in.projfunc_bil_exchange_rate IS NOT NULL THEN
14549 IF p_project_in.projfunc_bil_exchange_rate <> l_project_rec.projfunc_bil_exchange_rate
14550 THEN
14551 --bug 2955326
14552
14553 l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = ' ||
14554 TO_CHAR(p_project_in.projfunc_bil_exchange_rate)||',';
14555
14556 l_statement := l_statement || ' PROJFUNC_BIL_EXCHANGE_RATE = :pjfnc_bil_xch_rt ,';
14557 l_b_pjfnc_bil_xch_rt_flag := 'Y';
14558 --end bug 2955326
14559 l_update_yes_flag := 'Y';
14560 END IF;
14561 END IF;
14562
14563 IF p_project_in.funding_exchange_rate <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
14564 AND p_project_in.funding_exchange_rate IS NOT NULL THEN
14565 IF p_project_in.funding_exchange_rate <> l_project_rec.funding_exchange_rate
14566 THEN
14567 --bug 2955326
14568
14569 l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = ' ||
14570 TO_CHAR(p_project_in.funding_exchange_rate)||',';
14571
14572 l_statement := l_statement || ' FUNDING_EXCHANGE_RATE = :fnding_xch_rt,';
14573 l_b_fnding_xch_rt_flag := 'Y';
14574 --end bug 2955326
14575 l_update_yes_flag := 'Y';
14576 END IF;
14577 END IF;
14578 */
14579 -- Bug 6144566: Changes end
14580
14581 IF p_project_in.enable_automated_search <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14582 AND p_project_in.enable_automated_search IS NOT NULL THEN
14583 IF NVL(p_project_in.enable_automated_search, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14584 <> NVL(l_project_rec.enable_automated_search, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14585 THEN
14586 --bug 2955326
14587 /*
14588 l_statement := l_statement ||
14589 ' ENABLE_AUTOMATED_SEARCH = '||''''||
14590 RTRIM(p_project_in.enable_automated_search)||''''||',';
14591 */
14592 l_statement := l_statement ||
14593 ' ENABLE_AUTOMATED_SEARCH = :enable_auto_srch ,';
14594 l_b_enable_auto_srch_flag := 'Y';
14595 --end bug 2955326
14596 l_update_yes_flag := 'Y';
14597 END IF;
14598 END IF;
14599
14600 IF p_project_in.search_country_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14601 AND p_project_in.search_country_code IS NOT NULL THEN
14602 IF NVL(p_project_in.search_country_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14603 <> NVL(l_project_rec.search_country_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14604 THEN
14605 --bug 2955326
14606 /*
14607 l_statement := l_statement ||
14608 ' SEARCH_COUNTRY_CODE = '||''''||
14609 RTRIM(p_project_in.search_country_code)||''''||',';
14610 */
14611 l_statement := l_statement ||
14612 ' SEARCH_COUNTRY_CODE = :srch_cntry_code ,';
14613 l_b_srch_cntry_code_flag := 'Y';
14614 --end bug 2955326
14615 l_update_yes_flag := 'Y';
14616 END IF;
14617 END IF;
14618
14619 IF p_project_in.invproc_currency_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14620 AND p_project_in.invproc_currency_type IS NOT NULL THEN
14621 IF NVL(p_project_in.invproc_currency_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14622 <> NVL(l_project_rec.invproc_currency_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14623 THEN
14624 --bug 2955326
14625 /*
14626 l_statement := l_statement ||
14627 ' INVPROC_CURRENCY_TYPE = '||''''||
14628 RTRIM(p_project_in.invproc_currency_type)||''''||',';
14629 */
14630 l_statement := l_statement ||
14631 ' INVPROC_CURRENCY_TYPE = :invproc_currency_type ,';
14632 l_b_invproc_crncy_tp_flag := 'Y';
14633 --end bug 2955326
14634 l_update_yes_flag := 'Y';
14635 END IF;
14636 END IF;
14637
14638 IF p_project_in.revproc_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14639 AND p_project_in.revproc_currency_code IS NOT NULL THEN
14640 IF NVL(p_project_in.revproc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14641 <> NVL(l_project_rec.revproc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14642 THEN
14643 --bug 2955326
14644 /*
14645 l_statement := l_statement ||
14646 ' REVPROC_CURRENCY_CODE = '||''''||
14647 RTRIM(p_project_in.revproc_currency_code)||''''||',';
14648 */
14649 l_statement := l_statement ||
14650 ' REVPROC_CURRENCY_CODE = :revproc_currency_code ,';
14651 l_b_revproc_crncy_cd_flag := 'Y';
14652 --end bug 2955326
14653 l_update_yes_flag := 'Y';
14654 END IF;
14655 END IF;
14656
14657 -- Bug 6144566: Changes start
14658 /*
14659 IF p_project_in.project_bil_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14660 AND p_project_in.project_bil_rate_date_code IS NOT NULL THEN
14661 IF NVL(p_project_in.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14662 <> NVL(l_project_rec.project_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14663 THEN
14664 --bug 2955326
14665
14666 l_statement := l_statement ||
14667 ' PROJECT_BIL_RATE_DATE_CODE = '||''''||
14668 RTRIM(p_project_in.project_bil_rate_date_code)||''''||',';
14669
14670 l_statement := l_statement ||
14671 ' PROJECT_BIL_RATE_DATE_CODE = :proj_bil_rate_date_code ,';
14672 l_b_prj_bil_rt_dt_code_flag := 'Y';
14673 --end bug 2955326
14674 l_update_yes_flag := 'Y';
14675 END IF;
14676 END IF;
14677
14678 IF p_project_in.project_bil_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14679 AND p_project_in.project_bil_rate_type IS NOT NULL THEN
14680 IF NVL(p_project_in.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14681 <> NVL(l_project_rec.project_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14682 THEN
14683 --bug 2955326
14684
14685 l_statement := l_statement ||
14686 ' PROJECT_BIL_RATE_TYPE = '||''''||
14687 RTRIM(p_project_in.project_bil_rate_type)||''''||',';
14688
14689 l_statement := l_statement ||
14690 ' PROJECT_BIL_RATE_TYPE = :proj_bil_rt_type ,';
14691 l_b_proj_bil_rt_tp_flag := 'Y';
14692 --end bug 2955326
14693 l_update_yes_flag := 'Y';
14694 END IF;
14695 END IF;
14696 */
14697 -- Bug 6144566: Changes end
14698
14699 IF p_project_in.projfunc_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14700 AND p_project_in.projfunc_currency_code IS NOT NULL THEN
14701 IF NVL(p_project_in.projfunc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14702 <> NVL(l_project_rec.projfunc_currency_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14703 THEN
14704 --bug 2955326
14705 /*
14706 l_statement := l_statement ||
14707 ' PROJFUNC_CURRENCY_CODE = '||''''||
14708 RTRIM(p_project_in.projfunc_currency_code)||''''||',';
14709 */
14710 l_statement := l_statement ||
14711 ' PROJFUNC_CURRENCY_CODE = :prjfnc_currency_code ,';
14712 l_b_prjfnc_crncy_code_flag := 'Y';
14713 --end bug 2955326
14714 l_update_yes_flag := 'Y';
14715 END IF;
14716 END IF;
14717
14718 -- Bug 6144566: Changes start
14719 /*
14720 IF p_project_in.projfunc_bil_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14721 AND p_project_in.projfunc_bil_rate_date_code IS NOT NULL THEN
14722 IF NVL(p_project_in.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14723 <> NVL(l_project_rec.projfunc_bil_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14724 THEN
14725 --bug 2955326
14726
14727 l_statement := l_statement ||
14728 ' PROJFUNC_BIL_RATE_DATE_CODE = '||''''||
14729 RTRIM(p_project_in.projfunc_bil_rate_date_code)||''''||',';
14730
14731 l_statement := l_statement ||
14732 ' PROJFUNC_BIL_RATE_DATE_CODE = :prjfnc_bil_rt_dt_code ,';
14733 l_b_prjfnc_bil_rt_dt_cd_f := 'Y';
14734 --end bug 2955326
14735 l_update_yes_flag := 'Y';
14736 END IF;
14737 END IF;
14738
14739 IF p_project_in.projfunc_bil_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14740 AND p_project_in.projfunc_bil_rate_type IS NOT NULL THEN
14741 IF NVL(p_project_in.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14742 <> NVL(l_project_rec.projfunc_bil_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14743 THEN
14744 --bug 2955326
14745
14746 l_statement := l_statement ||
14747 ' PROJFUNC_BIL_RATE_TYPE = '||''''||
14748 RTRIM(p_project_in.projfunc_bil_rate_type)||''''||',';
14749
14750 l_statement := l_statement ||
14751 ' PROJFUNC_BIL_RATE_TYPE = :prjfnc_bil_rate_type ,';
14752 l_b_prjfnc_bil_rt_tp_flag := 'Y';
14753 --end bug 2955326
14754 l_update_yes_flag := 'Y';
14755 END IF;
14756 END IF;
14757
14758 IF p_project_in.funding_rate_date_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14759 AND p_project_in.funding_rate_date_code IS NOT NULL THEN
14760 IF NVL(p_project_in.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14761 <> NVL(l_project_rec.funding_rate_date_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14762 THEN
14763 --bug 2955326
14764
14765 l_statement := l_statement ||
14766 ' FUNDING_RATE_DATE_CODE = '||''''||
14767 RTRIM(p_project_in.funding_rate_date_code)||''''||',';
14768
14769 l_statement := l_statement ||
14770 ' FUNDING_RATE_DATE_CODE = :fnding_rate_date_code ,';
14771 l_b_fndng_rt_dt_cd_flag := 'Y';
14772 --end bug 2955326
14773 l_update_yes_flag := 'Y';
14774 END IF;
14775 END IF;
14776
14777 IF p_project_in.funding_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14778 AND p_project_in.funding_rate_type IS NOT NULL THEN
14779 IF NVL(p_project_in.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14780 <> NVL(l_project_rec.funding_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14781 THEN
14782 --bug 2955326
14783
14784 l_statement := l_statement ||
14785 ' FUNDING_RATE_TYPE = '||''''||
14786 RTRIM(p_project_in.funding_rate_type)||''''||',';
14787
14788 l_statement := l_statement ||
14789 ' FUNDING_RATE_TYPE = :fnding_rate_type ,';
14790 l_b_fnding_rt_type_flag := 'Y';
14791 --end bug 2955326
14792 l_update_yes_flag := 'Y';
14793 END IF;
14794 END IF;
14795 */
14796 -- Bug 6144566: Changes end
14797
14798 IF p_project_in.baseline_funding_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14799 AND p_project_in.baseline_funding_flag IS NOT NULL THEN
14800 IF NVL(p_project_in.baseline_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14801 <> NVL(l_project_rec.baseline_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14802 THEN
14803 --bug 2955326
14804 /*
14805 l_statement := l_statement ||
14806 ' BASELINE_FUNDING_FLAG = '||''''||
14807 RTRIM(p_project_in.baseline_funding_flag)||''''||',';
14808 */
14809 l_statement := l_statement ||
14810 ' BASELINE_FUNDING_FLAG = :bsln_fnding_flag ,';
14811 l_b_bsln_fnding_flag := 'Y';
14812 --end bug 2955326
14813 l_update_yes_flag := 'Y';
14814 END IF;
14815 END IF;
14816
14817 IF p_project_in.projfunc_cost_rate_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14818 AND p_project_in.projfunc_cost_rate_type IS NOT NULL THEN
14819 IF NVL(p_project_in.projfunc_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14820 <> NVL(l_project_rec.projfunc_cost_rate_type, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14821 THEN
14822 --bug 2955326
14823 /*
14824 l_statement := l_statement ||
14825 ' PROJFUNC_COST_RATE_TYPE = '||''''||
14826 RTRIM(p_project_in.projfunc_cost_rate_type)||''''||',';
14827 */
14828 l_statement := l_statement ||
14829 ' PROJFUNC_COST_RATE_TYPE = :projfnc_cost_rate_type ,';
14830 l_b_prjfnc_cst_rt_tp_flag := 'Y';
14831 --end bug 2955326
14832 l_update_yes_flag := 'Y';
14833 END IF;
14834 END IF;
14835
14836 IF p_project_in.inv_by_bill_trans_curr_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14837 AND p_project_in.inv_by_bill_trans_curr_flag IS NOT NULL THEN
14838 IF NVL(p_project_in.inv_by_bill_trans_curr_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14839 <> NVL(l_project_rec.inv_by_bill_trans_curr_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14840 THEN
14841 --bug 2955326
14842 /*
14843 l_statement := l_statement ||
14844 ' INV_BY_BILL_TRANS_CURR_FLAG = '||''''||
14845 RTRIM(p_project_in.inv_by_bill_trans_curr_flag)||''''||',';
14846 */
14847 l_statement := l_statement ||
14848 ' INV_BY_BILL_TRANS_CURR_FLAG = :inv_by_bil_txn_cur_flag ,';
14849 l_b_inv_bill_txn_cur_flag := 'Y';
14850 --end bug 2955326
14851 l_update_yes_flag := 'Y';
14852 END IF;
14853 END IF;
14854
14855 -- Bug 6144566: Changes start
14856 /*
14857 IF p_project_in.multi_currency_billing_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14858 AND p_project_in.multi_currency_billing_flag IS NOT NULL THEN
14859 IF NVL(p_project_in.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14860 <> NVL(l_project_rec.multi_currency_billing_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14861 THEN
14862 --bug 2955326
14863
14864 l_statement := l_statement ||
14865 ' MULTI_CURRENCY_BILLING_FLAG = '||''''||
14866 RTRIM(p_project_in.multi_currency_billing_flag)||''''||',';
14867
14868 l_statement := l_statement ||
14869 ' MULTI_CURRENCY_BILLING_FLAG = :multi_crncy_bil_flag ,';
14870 l_b_multi_crncy_bil_flag := 'Y';
14871 --end bug 2955326
14872 l_update_yes_flag := 'Y';
14873 END IF;
14874 END IF;
14875
14876 IF p_project_in.project_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14877 AND p_project_in.project_bil_rate_date IS NOT NULL THEN
14878 IF NVL(p_project_in.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14879 <> NVL(l_project_rec.project_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14880 THEN
14881 --bug 2955326
14882
14883 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE = to_date('''||
14884 to_char(p_project_in.project_bil_rate_date,'YYYY/MM/DD')||
14885 ''', ''YYYY/MM/DD''),';
14886
14887 l_statement := l_statement || ' PROJECT_BIL_RATE_DATE = :prj_bil_rt_date ,';
14888 l_b_prj_bil_rt_dt_flag := 'Y';
14889 --end bug 2955326
14890 l_update_yes_flag := 'Y';
14891 END IF;
14892 END IF;
14893
14894 IF p_project_in.projfunc_bil_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14895 AND p_project_in.projfunc_bil_rate_date IS NOT NULL THEN
14896 IF NVL(p_project_in.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14897 <> NVL(l_project_rec.projfunc_bil_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14898 THEN
14899 --bug 2955326
14900
14901 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE = to_date('''||
14902 to_char(p_project_in.projfunc_bil_rate_date,'YYYY/MM/DD')||
14903 ''', ''YYYY/MM/DD''),';
14904
14905 l_statement := l_statement || ' PROJFUNC_BIL_RATE_DATE = :prjfnc_bil_rt_date , ';
14906 l_b_prjfnc_bil_rt_dt_flag := 'Y';
14907 --end bug 2955326
14908 l_update_yes_flag := 'Y';
14909 END IF;
14910 END IF;
14911
14912 IF p_project_in.funding_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14913 AND p_project_in.funding_rate_date IS NOT NULL THEN
14914 IF NVL(p_project_in.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14915 <> NVL(l_project_rec.funding_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14916 THEN
14917 --bug 2955326
14918
14919 l_statement := l_statement || ' FUNDING_RATE_DATE = to_date('''||
14920 to_char(p_project_in.funding_rate_date,'YYYY/MM/DD')||
14921 ''', ''YYYY/MM/DD''),';
14922
14923 l_statement := l_statement || ' FUNDING_RATE_DATE = :fnding_rt_date ,';
14924 l_b_fnding_rt_dt_flag := 'Y';
14925 --end bug 2955326
14926 l_update_yes_flag := 'Y';
14927 END IF;
14928 END IF;
14929 */
14930 -- Bug 6144566: Changes end
14931
14932 IF p_project_in.projfunc_cost_rate_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
14933 AND p_project_in.projfunc_cost_rate_date IS NOT NULL THEN
14934 IF NVL(p_project_in.projfunc_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14935 <> NVL(l_project_rec.projfunc_cost_rate_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
14936 THEN
14937 --bug 2955326
14938 /*
14939 l_statement := l_statement || ' PROJFUNC_COST_RATE_DATE = to_date('''||
14940 to_char(p_project_in.projfunc_cost_rate_date,'YYYY/MM/DD')||
14941 ''', ''YYYY/MM/DD''),';
14942 */
14943 l_statement := l_statement || ' PROJFUNC_COST_RATE_DATE = :prjfnc_cst_rt_date ,';
14944 l_b_prjfnc_cst_rt_dt_flag := 'Y';
14945 --end bug 2955326
14946 l_update_yes_flag := 'Y';
14947 END IF;
14948 END IF;
14949
14950 --Sakthi MCB
14951 --Sakthi Structure
14952 IF p_project_in.assign_precedes_task <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14953 AND p_project_in.assign_precedes_task IS NOT NULL THEN
14954 IF NVL(p_project_in.assign_precedes_task, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14955 <> NVL(l_project_rec.assign_precedes_task, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14956 THEN
14957 --bug 2955326
14958 /*
14959 l_statement := l_statement ||
14960 ' ASSIGN_PRECEDES_TASK = '||''''||
14961 RTRIM(p_project_in.assign_precedes_task)||''''||',';
14962 */
14963 l_statement := l_statement ||
14964 ' ASSIGN_PRECEDES_TASK = :asgn_prec_tsk_flg ,';
14965 l_b_asgn_prec_tsk_flag := 'Y';
14966 --end bug 2955326
14967 l_update_yes_flag := 'Y';
14968 END IF;
14969 END IF;
14970
14971 IF p_project_in.split_cost_from_workplan_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14972 AND p_project_in.split_cost_from_workplan_flag IS NOT NULL THEN
14973 IF NVL(p_project_in.split_cost_from_workplan_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14974 <> NVL(l_project_rec.split_cost_from_workplan_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14975 THEN
14976 --bug 2955326
14977 /*
14978 l_statement := l_statement ||
14979 ' SPLIT_COST_FROM_WORKPLAN_FLAG = '||''''||
14980 RTRIM(p_project_in.split_cost_from_workplan_flag)||''''||',';
14981 */
14982 l_statement := l_statement ||
14983 ' SPLIT_COST_FROM_WORKPLAN_FLAG = :splt_cst_fm_wp_flag ,';
14984 l_b_splt_cst_fm_wp_flag := 'Y';
14985 --end bug 2955326
14986 l_update_yes_flag := 'Y';
14987 END IF;
14988 END IF;
14989
14990 IF p_project_in.split_cost_from_bill_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
14991 AND p_project_in.split_cost_from_bill_flag IS NOT NULL THEN
14992 IF NVL(p_project_in.split_cost_from_bill_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14993 <> NVL(l_project_rec.split_cost_from_bill_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
14994 THEN
14995 --bug 2955326
14996 /*
14997 l_statement := l_statement ||
14998 ' SPLIT_COST_FROM_BILL_FLAG = '||''''||
14999 RTRIM(p_project_in.split_cost_from_bill_flag)||''''||',';
15000 */
15001 l_statement := l_statement ||
15002 ' SPLIT_COST_FROM_BILL_FLAG = :splt_cst_fm_bill_flag ,';
15003 l_b_splt_cst_fm_bill_flag := 'Y';
15004 --end bug 2955326
15005 l_update_yes_flag := 'Y';
15006 END IF;
15007 END IF;
15008
15009 --Sakthi Structure
15010 --Advertisement
15011
15012 IF p_project_in.adv_action_set_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15013 AND p_project_in.adv_action_set_id IS NOT NULL THEN
15014 IF NVL(p_project_in.adv_action_set_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15015 <> NVL(l_project_rec.adv_action_set_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15016 THEN
15017 --bug 2955326
15018 /*
15019 l_statement := l_statement || ' ADV_ACTION_SET_ID = '||
15020 TO_CHAR(p_project_in.adv_action_set_id)||',';
15021 */
15022 l_statement := l_statement || ' ADV_ACTION_SET_ID = :adv_act_set_id ,';
15023 l_b_adv_act_set_id_flag := 'Y';
15024 --end bug 2955326
15025 l_update_yes_flag := 'Y';
15026 END IF;
15027 END IF;
15028
15029 IF p_project_in.start_adv_action_set_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15030 AND p_project_in.start_adv_action_set_flag IS NOT NULL THEN
15031 IF NVL(p_project_in.start_adv_action_set_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15032 <> NVL(l_project_rec.start_adv_action_set_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15033 THEN
15034 --bug 2955326
15035 /*
15036 l_statement := l_statement ||
15037 ' START_ADV_ACTION_SET_FLAG = '||''''||
15038 RTRIM(p_project_in.start_adv_action_set_flag)||''''||',';
15039 */
15040 l_statement := l_statement ||
15041 ' START_ADV_ACTION_SET_FLAG = :st_adv_act_set_flag ,';
15042 l_b_st_adv_act_set_flag := 'Y';
15043 --end bug 2955326
15044 l_update_yes_flag := 'Y';
15045 END IF;
15046 END IF;
15047
15048 --Advertisement
15049
15050 --Project Setup
15051
15052 IF p_project_in.priority_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15053 AND p_project_in.priority_code IS NOT NULL THEN
15054 IF NVL(p_project_in.priority_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15055 <> NVL(l_project_rec.priority_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15056 THEN
15057 --bug 2955326
15058 /*
15059 l_statement := l_statement ||
15060 ' PRIORITY_CODE = '||''''||
15061 RTRIM(p_project_in.priority_code)||''''||',';
15062 */
15063
15064 -- 5191417 validate passed priority_code value
15065
15066 OPEN priority_code_csr(p_project_in.priority_code);
15067 FETCH priority_code_csr into l_valid_prio_code;
15068 CLOSE priority_code_csr;
15069
15070 -- if not valid, throw error message
15071
15072 IF l_valid_prio_code = 'N' THEN
15073
15074 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15075
15076 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
15077 ,p_msg_name => 'PA_INVALID_PRIORITY_CODE');
15078
15079 l_return_status := FND_API.G_RET_STS_ERROR;
15080
15081 RAISE FND_API.G_EXC_ERROR;
15082
15083 END IF;
15084
15085 END IF;
15086
15087 -- 5191417 end
15088
15089 l_statement := l_statement ||
15090 ' PRIORITY_CODE = :pri_code ,';
15091 l_b_pri_code_flag := 'Y';
15092 --end bug 2955326
15093 l_update_yes_flag := 'Y';
15094 END IF;
15095 END IF;
15096
15097 --Project Setup
15098
15099 --Retention
15100 IF p_project_in.retn_billing_inv_format_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15101 AND p_project_in.retn_billing_inv_format_id IS NOT NULL THEN
15102 IF NVL(p_project_in.retn_billing_inv_format_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15103 <> NVL(l_project_rec.retn_billing_inv_format_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15104 THEN
15105 --bug 2955326
15106 /*
15107 l_statement := l_statement || ' RETN_BILLING_INV_FORMAT_ID = '||
15108 TO_CHAR(p_project_in.retn_billing_inv_format_id)||',';
15109 */
15110 l_statement := l_statement || ' RETN_BILLING_INV_FORMAT_ID = :retn_bil_inv_fmt_id ,';
15111 l_b_retn_bil_inv_fmt_id_flg := 'Y';
15112 --end bug 2955326
15113 l_update_yes_flag := 'Y';
15114 END IF;
15115 END IF;
15116
15117 IF p_project_in.retn_accounting_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15118 AND p_project_in.retn_accounting_flag IS NOT NULL THEN
15119 IF NVL(p_project_in.retn_accounting_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15120 <> NVL(l_project_rec.retn_accounting_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15121 THEN
15122 --bug 2955326
15123 /*
15124 l_statement := l_statement ||
15125 ' RETN_ACCOUNTING_FLAG = '||''''||
15126 RTRIM(p_project_in.retn_accounting_flag)||''''||',';
15127 */
15128 l_statement := l_statement ||
15129 ' RETN_ACCOUNTING_FLAG = :retn_acnt_flag ,';
15130 l_b_retn_acnt_flag := 'Y';
15131 --end bug 2955326
15132 l_update_yes_flag := 'Y';
15133 END IF;
15134 END IF;
15135 --Retention
15136
15137 -- anlee
15138 -- patchset K changes
15139 IF p_project_in.revaluate_funding_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15140 AND p_project_in.revaluate_funding_flag IS NOT NULL THEN
15141 IF NVL(p_project_in.revaluate_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15142 <> NVL(l_project_rec.revaluate_funding_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15143 THEN
15144 /*Bug #2891513 Added the below code for bug 2891513*/
15145 IF p_project_in.include_gains_losses_flag = 'N'
15146 THEN
15147 --bug 2955326
15148 /*
15149 l_statement := l_statement ||
15150 ' revaluate_funding_flag = '||''''||
15151 RTRIM(p_project_in.revaluate_funding_flag)||''''||',';
15152 */
15153 l_statement := l_statement ||
15154 ' revaluate_funding_flag = :reval_fndng_flg ,';
15155 l_b_reval_fndng_flag := 'Y';
15156 --end bug 2955326
15157 l_update_yes_flag := 'Y';
15158 ELSE
15159
15160 IF ((p_project_in.include_gains_losses_flag = 'Y' OR l_project_rec.include_gains_losses_flag ='Y')
15161 AND (p_project_in.revaluate_funding_flag = 'N'))
15162 THEN
15163 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15164 THEN
15165 pa_interface_utils_pub.map_new_amg_msg
15166 ( p_old_message_code => 'PA_CANT_UPDATE_REV_FUN'
15167 ,p_msg_attribute => 'CHANGE'
15168 ,p_resize_flag => 'Y'
15169 ,p_msg_context => 'PROJ'
15170 ,p_attribute1 => l_project_rec.segment1
15171 ,p_attribute2 => ''
15172 ,p_attribute3 => ''
15173 ,p_attribute4 => ''
15174 ,p_attribute5 => '');
15175 END IF;
15176 RAISE FND_API.G_EXC_ERROR;
15177 /*bug 2891513 -Code ends*/
15178 ELSE
15179 l_statement := l_statement ||
15180 ' revaluate_funding_flag = :reval_fndng_flg ,';
15181 l_b_reval_fndng_flag := 'Y';
15182 l_update_yes_flag := 'Y';
15183 END IF;
15184 END IF;
15185 END IF;
15186 END IF;
15187
15188 -- msundare
15189 IF p_project_in.security_level <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15190 AND p_project_in.security_level IS NOT NULL THEN
15191 IF NVL(p_project_in.security_level, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15192 <> NVL(l_project_rec.security_level, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15193 THEN
15194 --bug 2955326
15195 /*
15196 l_statement := l_statement ||
15197 ' security_level = '||''''||
15198 RTRIM(p_project_in.security_level)||''''||',';
15199 */
15200
15201 --Included logic here to validate the Project Security Level
15202 --For Bug#5191699.
15203 --If the user passes an invalid value ,we need to handle that as,
15204 --security level can take values only
15205 --from the lookup.Hence we dont update and the existing value will remain.
15206
15207 OPEN cur_check_sec_level(p_project_in.security_level);
15208 FETCH cur_check_sec_level INTO l_check_sec_level;
15209 CLOSE cur_check_sec_level;
15210
15211 IF l_check_sec_level = 'Y' THEN
15212 -- A Valid value has been passed hecne update
15213
15214 l_statement := l_statement ||
15215 ' security_level = :sec_lvl ,';
15216 l_b_sec_lvl_flag := 'Y';
15217 --end bug 2955326
15218 l_update_yes_flag := 'Y';
15219 ELSE
15220 l_b_sec_lvl_flag := 'N';
15221 END IF; -- End of changes Bug#5191699.
15222 END IF;
15223 END IF;
15224
15225 /* Bug 8840472 : Commenting out the below code as the labor_disc_reason_code and
15226 non_labor_disc_reason_code should be populated only for 'Bill Rate' schedule type
15227 */
15228
15229 /* -- Bug 8840472 .. start
15230 IF p_project_in.labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15231 AND p_project_in.labor_disc_reason_code IS NOT NULL THEN
15232 IF NVL(p_project_in.labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15233 THEN
15234 --bug 2955326
15235
15236 l_statement := l_statement ||
15237 ' labor_disc_reason_code = '||''''||
15238 RTRIM(p_project_in.labor_disc_reason_code)||''''||',';
15239
15240 l_statement := l_statement ||
15241 ' labor_disc_reason_code = :lbr_disc_rsn_code ,';
15242 l_b_lbr_disc_rsn_code_flg := 'Y';
15243 --end bug 2955326
15244 l_update_yes_flag := 'Y';
15245 END IF;
15246 END IF;
15247
15248 IF p_project_in.non_labor_disc_reason_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15249 AND p_project_in.labor_disc_reason_code IS NOT NULL THEN
15250 IF NVL(p_project_in.non_labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> NVL(l_project_rec.non_labor_disc_reason_code, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15251 THEN
15252 --bug 2955326
15253
15254 l_statement := l_statement ||
15255 ' non_labor_disc_reason_code = '||''''||
15256 RTRIM(p_project_in.non_labor_disc_reason_code)||''''||',';
15257
15258 l_statement := l_statement ||
15259 ' non_labor_disc_reason_code = :nn_lbr_disc_rsn_cd ,';
15260 l_b_nn_lbr_disc_rsn_cd_flg := 'Y';
15261 --end bug 2955326
15262 l_update_yes_flag := 'Y';
15263 END IF;
15264 END IF;
15265 */ -- Bug 8840472 End.
15266 -- End msundare
15267
15268 IF p_project_in.include_gains_losses_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15269 AND p_project_in.include_gains_losses_flag IS NOT NULL THEN
15270 IF NVL(p_project_in.include_gains_losses_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15271 <> NVL(l_project_rec.include_gains_losses_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15272 THEN
15273 /*Added the below condition for bug 2891513*/
15274 IF (l_include_gains_and_losses = 'Y' AND
15275 (p_project_in.revaluate_funding_flag = 'Y' OR l_project_rec.revaluate_funding_flag ='Y'))
15276 THEN
15277 --bug 2955326
15278 /*
15279 l_statement := l_statement ||
15280 ' include_gains_losses_flag = '||''''||
15281 RTRIM(p_project_in.include_gains_losses_flag)||''''||',';
15282 */
15283 l_statement := l_statement ||
15284 ' include_gains_losses_flag = :inc_gn_los_flg ,';
15285 l_b_inc_gn_los_flag := 'Y';
15286 --end bug 2955326
15287 l_update_yes_flag := 'Y';
15288 /*Added the else part of the code for bug 2891513*/
15289 ELSE
15290 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15291 THEN
15292 pa_interface_utils_pub.map_new_amg_msg
15293 ( p_old_message_code => 'PA_CANT_UPDATE_GAIN_LOSSES'
15294 ,p_msg_attribute => 'CHANGE'
15295 ,p_resize_flag => 'Y'
15296 ,p_msg_context => 'PROJ'
15297 ,p_attribute1 => l_project_rec.segment1
15298 ,p_attribute2 => ''
15299 ,p_attribute3 => ''
15300 ,p_attribute4 => ''
15301 ,p_attribute5 => '');
15302 END IF;
15303 RAISE FND_API.G_EXC_ERROR;
15304 END IF;
15305 END IF;
15306 END IF;
15307
15308 -- End of changes
15309
15310 --PA L Changes bug 2872708
15311 IF p_project_in.asset_allocation_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15312 AND p_project_in.asset_allocation_method IS NOT NULL THEN
15313 IF NVL(p_project_in.asset_allocation_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15314 <> NVL(l_project_rec.asset_allocation_method, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15315 THEN
15316 --bug 2955326
15317 /*
15318 l_statement := l_statement ||
15319 ' asset_allocation_method = '||''''||
15320 RTRIM(p_project_in.asset_allocation_method)||''''||',';
15321 */
15322
15323 --From patchset L we need to perform vlaidation for all new columns added in AMG also.
15324 --Call validation API here
15325 PA_IMPL_OPTIONS_PUB.check_asset_alloc_method(
15326 p_asset_allocation_method => RTRIM(p_project_in.asset_allocation_method)
15327 ,p_amg_segment1 => l_amg_segment1
15328 ,x_msg_count => l_msg_count
15329 ,x_msg_data => l_msg_data
15330 ,x_return_status => l_return_status
15331 );
15332 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15333 THEN
15334 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15335
15336 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15337 THEN
15338 p_multiple_task_msg := 'F';
15339 RAISE FND_API.G_EXC_ERROR;
15340 END IF;
15341
15342 l_statement := l_statement ||
15343 ' asset_allocation_method = :as_alloc_mth ,';
15344 l_b_as_alloc_mth_fg := 'Y';
15345 --end bug 2955326
15346 l_update_yes_flag := 'Y';
15347 END IF;
15348 END IF;
15349
15350 IF p_project_in.capital_event_processing <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15351 AND p_project_in.capital_event_processing IS NOT NULL THEN
15352 IF NVL(p_project_in.capital_event_processing, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15353 <> NVL(l_project_rec.capital_event_processing, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15354 THEN
15355 --bug 2955326
15356 /*
15357 l_statement := l_statement ||
15358 ' capital_event_processing = '||''''||
15359 RTRIM(p_project_in.capital_event_processing)||''''||',';
15360 */
15361 --Call validation API here
15362 PA_IMPL_OPTIONS_PUB.check_cap_event_method(
15363 p_capital_event_processing => RTRIM(p_project_in.capital_event_processing)
15364 ,p_amg_segment1 => l_amg_segment1
15365 ,x_msg_count => l_msg_count
15366 ,x_msg_data => l_msg_data
15367 ,x_return_status => l_return_status
15368 );
15369 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15370 THEN
15371 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15372
15373 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15374 THEN
15375 p_multiple_task_msg := 'F';
15376 RAISE FND_API.G_EXC_ERROR;
15377 END IF;
15378
15379 l_statement := l_statement ||
15380 ' capital_event_processing = :cp_evt_proc,';
15381 l_b_cp_evt_proc_fg := 'Y';
15382 --end bug 2955326
15383 l_update_yes_flag := 'Y';
15384 END IF;
15385 END IF;
15386
15387 IF p_project_in.cint_rate_sch_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15388 AND p_project_in.cint_rate_sch_id IS NOT NULL THEN
15389 IF NVL(p_project_in.cint_rate_sch_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15390 <> NVL(l_project_rec.cint_rate_sch_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
15391 THEN
15392 --bug 2955326
15393 /*
15394 l_statement := l_statement ||
15395 ' cint_rate_sch_id = '||''''||
15396 RTRIM(p_project_in.cint_rate_sch_id)||''''||',';
15397 */
15398 --Call validation API here
15399 PA_IMPL_OPTIONS_PUB.check_cint_schedule(
15400 p_cint_rate_sch_id => p_project_in.cint_rate_sch_id
15401 ,p_amg_segment1 => l_amg_segment1
15402 ,x_msg_count => l_msg_count
15403 ,x_msg_data => l_msg_data
15404 ,x_return_status => l_return_status
15405 );
15406 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15407 THEN
15408 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15409
15410 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15411 THEN
15412 p_multiple_task_msg := 'F';
15413 RAISE FND_API.G_EXC_ERROR;
15414 END IF;
15415
15416 l_statement := l_statement ||
15417 ' cint_rate_sch_id = :cint_rt_sch ,';
15418 l_b_cint_rt_sch_id_fg := 'Y';
15419 --end bug 2955326
15420 l_update_yes_flag := 'Y';
15421 END IF;
15422 END IF;
15423
15424 IF p_project_in.cint_eligible_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
15425 AND p_project_in.cint_eligible_flag IS NOT NULL THEN
15426 IF NVL(p_project_in.cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15427 <> NVL(l_project_rec.cint_eligible_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15428 THEN
15429 --bug 2955326
15430 /*
15431 l_statement := l_statement ||
15432 ' cint_eligible_flag = '||''''||
15433 RTRIM(p_project_in.cint_eligible_flag)||''''||',';
15434 */
15435 l_statement := l_statement ||
15436 ' cint_eligible_flag = :cint_elg_fg ,';
15437 l_b_cint_elg_fg := 'Y';
15438 --end bug 2955326
15439 l_update_yes_flag := 'Y';
15440 END IF;
15441 END IF;
15442
15443 IF p_project_in.cint_stop_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
15444 AND p_project_in.cint_stop_date IS NOT NULL THEN
15445 IF NVL(p_project_in.cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
15446 <> NVL(l_project_rec.cint_stop_date, PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
15447 THEN
15448 --bug 2955326
15449 /*
15450 l_statement := l_statement ||
15451 ' cint_stop_date = '||''''||
15452 RTRIM(p_project_in.cint_stop_date)||''''||',';
15453 */
15454 l_statement := l_statement ||
15455 ' cint_stop_date = :cint_stp_dt ,';
15456 l_b_cint_stp_dt_fg := 'Y';
15457 --end bug 2955326
15458 l_update_yes_flag := 'Y';
15459 END IF;
15460 END IF;
15461 --End PA L changes
15462
15463 ------------------- FP_M changes begin (venkat) 2 -----------------------------------------------
15464
15465 /* ------ Begin Commented for now as the column sys_program_flag not exist in the pa_projects -----
15466
15467 IF (p_project_in.sys_program_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15468 (p_project_in.sys_program_flag IS NOT NULL)
15469 THEN
15470 IF NVL(p_project_in.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15471 NVL(l_project_rec.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15472 THEN
15473 l_statement := l_statement || ' sys_program_flag = :sys_program_flg ,';
15474 l_sys_program_flag := 'Y';
15475 l_update_yes_flag := 'Y';
15476 END IF;
15477 END IF;
15478 ---------------------------------End Comment----------------------------------------------------- */
15479
15480 -- Bug # 5072032.
15481
15482 IF (p_project_in.sys_program_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15483 (p_project_in.sys_program_flag IS NOT NULL)
15484 THEN
15485 IF NVL(p_project_in.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15486 NVL(l_project_rec.sys_program_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15487 THEN
15488 l_statement := l_statement || ' sys_program_flag = :sys_program_flag ,';
15489 l_b_sys_program_flag_fg := 'Y';
15490 l_update_yes_flag := 'Y';
15491 END IF;
15492 END IF;
15493
15494 IF (p_project_in.allow_multi_program_rollup <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15495 (p_project_in.allow_multi_program_rollup IS NOT NULL)
15496 THEN
15497 IF NVL(p_project_in.allow_multi_program_rollup, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15498 NVL(l_project_rec.allow_multi_program_rollup, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15499 THEN
15500 l_statement := l_statement || ' allow_multi_program_rollup = :allow_multi_program_rollup ,';
15501 l_b_allow_multi_prog_rollup_fg := 'Y';
15502 l_update_yes_flag := 'Y';
15503 END IF;
15504 END IF;
15505
15506 IF l_debug_mode = 'Y' THEN
15507 pa_debug.write(l_module_name,'l_b_sys_program_flag_fg=' || l_b_sys_program_flag_fg,3);
15508 pa_debug.write(l_module_name,'l_b_allow_multi_prog_rollup_fg='||l_b_allow_multi_prog_rollup_fg,3);
15509 END IF;
15510
15511 IF l_b_sys_program_flag_fg = 'Y' OR
15512 l_b_allow_multi_prog_rollup_fg = 'Y'
15513 THEN
15514
15515 IF l_debug_mode = 'Y' THEN
15516 pa_debug.write(l_module_name,'Before Calling SETUP_PROJECT_AS_PROGRAM in Update_Project flow' ,3);
15517 pa_debug.write(l_module_name,'l_project_id='||l_project_id,3);
15518 pa_debug.write(l_module_name,'p_project_in.sys_program_flag='||p_project_in.sys_program_flag,3);
15519 pa_debug.write(l_module_name,'p_project_in.allow_multi_program_rollup='||p_project_in.allow_multi_program_rollup,3);
15520 END IF;
15521
15522 PA_PROJECT_PUB.SETUP_PROJECT_AS_PROGRAM(
15523 p_api_version => p_api_version_number
15524 , p_init_msg_list => p_init_msg_list
15525 , p_commit => p_commit
15526 , p_max_msg_count => p_msg_count
15527 , p_project_id => l_project_id -- Project Id is already derived/converted therfore no need to pass project reference to this API.
15528 , p_sys_program_flag => p_project_in.sys_program_flag
15529 , p_allow_multi_program_rollup => p_project_in.allow_multi_program_rollup
15530 , x_msg_count => l_msg_count
15531 , x_msg_data => l_msg_data
15532 , x_return_status => l_return_status
15533 );
15534
15535 IF l_debug_mode = 'Y' THEN
15536 pa_debug.write(l_module_name,'After Calling SETUP_PROJECT_AS_PROGRAM in Update_Project flow' ,3);
15537 pa_debug.write(l_module_name,'l_project_id='||l_project_id,3);
15538 pa_debug.write(l_module_name,'l_return_status='||l_return_status,3);
15539 END IF;
15540
15541 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
15542 THEN
15543 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15544 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
15545 THEN
15546 p_multiple_task_msg := 'F';
15547 RAISE FND_API.G_EXC_ERROR;
15548 END IF;
15549
15550 END IF;
15551
15552 -- End of Bug # 5072032.
15553
15554 IF (p_project_in.enable_top_task_customer_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15555 (p_project_in.enable_top_task_customer_flag IS NOT NULL)
15556 THEN
15557 IF NVL(p_project_in.enable_top_task_customer_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15558 NVL(l_project_rec.enable_top_task_customer_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15559 THEN
15560 --Bug 3279981 Review
15561 IF p_project_in.enable_top_task_customer_flag IN ('Y','N') THEN
15562 -- Function Security Check
15563 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
15564 ( p_api_version_number => p_api_version_number,
15565 p_responsibility_id => l_resp_id,
15566 p_function_name => 'PA_PAXPREPR_CUST_TOP_TASK',
15567 p_msg_count => l_msg_count,
15568 p_msg_data => l_msg_data,
15569 p_return_status => l_return_status,
15570 p_function_allowed => l_function_allowed);
15571 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15572 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15573 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
15574 RAISE FND_API.G_EXC_ERROR;
15575 END IF;
15576
15577 IF l_function_allowed = 'N' THEN
15578 pa_interface_utils_pub.map_new_amg_msg
15579 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
15580 ,p_msg_attribute => 'CHANGE'
15581 ,p_resize_flag => 'Y'
15582 ,p_msg_context => 'GENERAL'
15583 ,p_attribute1 => ''
15584 ,p_attribute2 => ''
15585 ,p_attribute3 => ''
15586 ,p_attribute4 => ''
15587 ,p_attribute5 => '');
15588 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15589 RAISE FND_API.G_EXC_ERROR;
15590 END IF;
15591 ELSE
15592 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15593 pa_interface_utils_pub.map_new_amg_msg
15594 ( p_old_message_code => 'PA_TOP_TASK_CUST_FLAG_INVALID'
15595 ,p_msg_attribute => 'NOCHANGE'--Changed to NOCHANGE for Bug- 4762153
15596 ,p_resize_flag => 'N'
15597 ,p_msg_context => 'PROJ'
15598 ,p_attribute1 => l_project_rec.segment1
15599 ,p_attribute2 => ''
15600 ,p_attribute3 => ''
15601 ,p_attribute4 => ''
15602 ,p_attribute5 => '');
15603 END IF;
15604 RAISE FND_API.G_EXC_ERROR;
15605 END IF;
15606
15607 IF ( PA_BILLING_CORE.Update_Top_Task_Cust_Flag( l_project_id ) = 'Y' ) THEN
15608 l_statement := l_statement || ' enable_top_task_customer_flag = :enable_top_task_cust_flg ,';
15609 l_enable_top_task_cust_flag := 'Y';
15610 l_update_yes_flag := 'Y';
15611 ELSE--Added by rtarway for BUG 4168069
15612 --Add the error message in the pl/sql stack and raise exception
15613 PA_UTILS.ADD_MESSAGE(
15614 p_app_short_name => 'PA',
15615 p_msg_name =>'PA_NO_TOP_TASK_CUST_ALLOWED'
15616 );
15617 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15618 RAISE FND_API.G_EXC_ERROR;
15619 END IF;
15620 --Bug 3279981 Review
15621 END IF;
15622 END IF;
15623
15624 IF (p_project_in.enable_top_task_inv_mth_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15625 (p_project_in.enable_top_task_inv_mth_flag IS NOT NULL)
15626 THEN
15627 IF NVL(p_project_in.enable_top_task_inv_mth_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15628 NVL(l_project_rec.enable_top_task_inv_mth_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15629 THEN
15630 --Bug 3279981 Review
15631 IF p_project_in.enable_top_task_inv_mth_flag IN ('Y','N') THEN
15632 -- Function Security Check
15633 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
15634 ( p_api_version_number => p_api_version_number,
15635 p_responsibility_id => l_resp_id,
15636 p_function_name => 'PA_PAXPREPR_INV_MTH_TOP_TASK',
15637 p_msg_count => l_msg_count,
15638 p_msg_data => l_msg_data,
15639 p_return_status => l_return_status,
15640 p_function_allowed => l_function_allowed);
15641 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15642 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15643 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
15644 RAISE FND_API.G_EXC_ERROR;
15645 END IF;
15646
15647 IF l_function_allowed = 'N' THEN
15648 pa_interface_utils_pub.map_new_amg_msg
15649 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
15650 ,p_msg_attribute => 'CHANGE'
15651 ,p_resize_flag => 'Y'
15652 ,p_msg_context => 'GENERAL'
15653 ,p_attribute1 => ''
15654 ,p_attribute2 => ''
15655 ,p_attribute3 => ''
15656 ,p_attribute4 => ''
15657 ,p_attribute5 => '');
15658 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15659 RAISE FND_API.G_EXC_ERROR;
15660 END IF;
15661 ELSE
15662 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
15663 pa_interface_utils_pub.map_new_amg_msg
15664 ( p_old_message_code => 'PA_TT_INV_MTH_FLAG_INVALID'
15665 ,p_msg_attribute => 'CHANGE'
15666 ,p_resize_flag => 'N'
15667 ,p_msg_context => 'PROJ'
15668 ,p_attribute1 => l_project_rec.segment1
15669 ,p_attribute2 => ''
15670 ,p_attribute3 => ''
15671 ,p_attribute4 => ''
15672 ,p_attribute5 => '');
15673 END IF;
15674 RAISE FND_API.G_EXC_ERROR;
15675 END IF;
15676
15677 IF ( PA_BILLING_CORE.Update_Top_Task_Inv_Mthd_Flag( l_project_id ) = 'Y'
15678 AND l_project_rec.invoice_method <> 'COST' ) THEN
15679 l_statement := l_statement || ' enable_top_task_inv_mth_flag = :enable_top_task_inv_mth_flg ,';
15680 l_enable_top_task_inv_mth_flag := 'Y';
15681 l_update_yes_flag := 'Y';
15682 ELSE --Added for Bug 4193730
15683 PA_UTILS.ADD_MESSAGE(
15684 p_app_short_name => 'PA',
15685 p_msg_name => 'PA_INV_MTH_TT_NOT_SET'
15686 );
15687 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15688 RAISE FND_API.G_EXC_ERROR;
15689 END IF;
15690 --Bug 3279981 Review
15691 END IF;
15692 END IF;
15693
15694 IF (p_project_in.projfunc_attr_for_ar_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15695 (p_project_in.projfunc_attr_for_ar_flag IS NOT NULL)
15696 THEN
15697 IF NVL(p_project_in.projfunc_attr_for_ar_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15698 NVL(l_project_rec.projfunc_attr_for_ar_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15699 THEN
15700 l_statement := l_statement || ' projfunc_attr_for_ar_flag = :projfunc_attr_for_ar_flg ,';
15701 l_projfunc_attr_for_ar_flag := 'Y';
15702 l_update_yes_flag := 'Y';
15703 END IF;
15704 END IF;
15705
15706 /* Added the following code for Bug 6248841 to update the cc_tax_task_id */
15707
15708 IF (p_project_in.cc_tax_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
15709 AND p_project_in.cc_tax_task_id IS NOT NULL)
15710 THEN
15711
15712 BEGIN
15713 SELECT task_number INTO l_cc_tax_task_numb
15714 FROM pa_tasks
15715 WHERE project_id = l_project_id
15716 AND task_id = p_project_in.cc_tax_task_id;
15717
15718 l_statement := l_statement || ' CC_TAX_TASK_ID = :prj_cc_tax_task_id,';
15719 l_b_cc_tax_task_id := 'Y';
15720 l_update_yes_flag := 'Y';
15721 EXCEPTION
15722 WHEN NO_DATA_FOUND THEN
15723 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
15724 THEN
15725 pa_interface_utils_pub.map_new_amg_msg
15726 ( p_old_message_code => 'PA_INVALID_TAX_TASK_ID'
15727 ,p_msg_attribute => 'CHANGE'
15728 ,p_resize_flag => 'Y'
15729 ,p_msg_context => 'PROJ'
15730 ,p_attribute1 => l_project_rec.segment1
15731 ,p_attribute2 => ''
15732 ,p_attribute3 => ''
15733 ,p_attribute4 => ''
15734 ,p_attribute5 => '');
15735 END IF;
15736 RAISE FND_API.G_EXC_ERROR;
15737 END;
15738
15739 END IF;
15740
15741 -------------------- FP_M changes end (venkat) ----------------------------------------------
15742
15743 --Sunkalya federal changes bug#5511353
15744
15745
15746 IF (p_project_in.date_eff_funds_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15747 (p_project_in.date_eff_funds_flag IS NOT NULL)
15748 THEN
15749 IF NVL(p_project_in.date_eff_funds_flag, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <>
15750 NVL(l_project_rec.date_eff_funds_consumption, PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
15751 THEN
15752
15753 OPEN cur_enable_funds_flag(l_project_id);
15754 FETCH cur_enable_funds_flag INTO l_enable_funds_flag;
15755 CLOSE cur_enable_funds_flag;
15756
15757 OPEN cur_rev_inv(l_project_id);
15758 FETCH cur_rev_inv INTO l_chk_rev_inv_flag;
15759 CLOSE cur_rev_inv;
15760
15761 IF nvl(l_enable_funds_flag,'N')='N' AND p_project_in.date_eff_funds_flag ='Y' THEN
15762
15763 PA_UTILS.ADD_MESSAGE(
15764 p_app_short_name => 'PA',
15765 p_msg_name => 'PA_FUNDS_FLAG_CANT_ENABLED'
15766 );
15767 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15768 RAISE FND_API.G_EXC_ERROR;
15769 END IF;
15770
15771 IF nvl(l_chk_rev_inv_flag,'N')= 'Y' THEN
15772
15773 PA_UTILS.ADD_MESSAGE(
15774 p_app_short_name => 'PA',
15775 p_msg_name => 'PA_FUNDS_FLAG_NOT_UPDATBL'
15776 );
15777 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
15778 RAISE FND_API.G_EXC_ERROR;
15779 END IF;
15780
15781 l_statement := l_statement || ' date_eff_funds_consumption = :date_eff_funds_consumption ,';
15782 l_date_eff_funds_flag := 'Y';
15783 l_update_yes_flag := 'Y';
15784 END IF;
15785 END IF;
15786
15787 --Sunkalya federal changes bug#5511353
15788
15789 /* 7508661 : EnC : Start */
15790
15791 IF (p_project_in.ar_rec_notify_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15792 (p_project_in.ar_rec_notify_flag IS NOT NULL)
15793 THEN
15794 l_statement := l_statement || ' ar_rec_notify_flag = :ar_rec_notify_flag ,';
15795 l_ar_rec_notify_flag := 'Y';
15796 End If;
15797
15798 IF (p_project_in.auto_release_pwp_inv <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15799 (p_project_in.auto_release_pwp_inv IS NOT NULL)
15800 THEN
15801 l_statement := l_statement || ' auto_release_pwp_inv = :auto_release_pwp_inv ,';
15802 l_auto_release_pwp_inv := 'Y';
15803 End If;
15804
15805 /* 7508661 : EnC : End */
15806 /* Added for 12.2Payroll billing ER 11899223 */
15807 IF (p_project_in.bill_labor_accrual <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15808 (p_project_in.bill_labor_accrual IS NOT NULL)
15809 THEN
15810 l_statement := l_statement || ' bill_labor_accrual = :bill_labor_accrual ,';
15811 l_bill_labor_accrual := 'Y';
15812 End If;
15813
15814
15815
15816 IF (p_project_in.adj_on_std_inv <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
15817 (p_project_in.adj_on_std_inv IS NOT NULL)
15818 THEN
15819 l_statement := l_statement || ' adj_on_std_inv = :adj_on_std_inv ,';
15820 l_adj_on_std_inv := 'Y';
15821 End If;
15822 /* Added for 12.2Payroll billing ER 11899223 */
15823 IF l_update_yes_flag = 'Y'
15824 THEN
15825 /* Code commented and added for the bug#1752494, starts here */
15826 /*
15827 l_statement := l_statement ||
15828 ' LAST_UPDATE_DATE = '||''''||
15829 SYSDATE||''''||',';
15830 */
15831 l_statement := l_statement ||
15832 ' LAST_UPDATE_DATE = SYSDATE'||',';
15833
15834 /* Code commented and added for the bug#1752494, ends here */
15835 l_statement := l_statement ||
15836 -- ' LAST_UPDATED_BY = '||G_USER_ID||','; --bug 2955326
15837 ' LAST_UPDATED_BY = :g_usr_id ,'; --bug 2955326
15838
15839 l_statement := l_statement ||
15840 -- ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID; --2955326
15841 ' LAST_UPDATE_LOGIN = :g_login_id'; --bug 2955326
15842
15843 l_statement := l_statement ||
15844 -- ' WHERE PROJECT_ID = '|| TO_CHAR(l_project_id);
15845 ' WHERE PROJECT_ID = :prj_id'; --bug 2955326
15846 IF NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' THEN
15847 l_cursor := dbms_sql.open_cursor;
15848 dbms_sql.parse(l_cursor, l_statement, dbms_sql.native);
15849
15850 --bug 2955326
15851 IF l_b_segment1_flag = 'Y' THEN
15852 DBMS_SQL.BIND_VARIABLE(l_cursor, ':segment1', RTRIM(p_project_in.pa_project_number));
15853 END IF;
15854
15855 IF l_b_proj_name_flag = 'Y' THEN
15856 DBMS_SQL.BIND_VARIABLE(l_cursor, ':project_name', RTRIM(p_project_in.project_name));
15857 END IF;
15858
15859 IF l_b_long_name_flag = 'Y' THEN
15860 DBMS_SQL.BIND_VARIABLE(l_cursor, ':long_name', RTRIM(p_project_in.long_name));
15861 END IF;
15862
15863 IF l_b_pm_proj_ref_flag = 'Y' THEN
15864 DBMS_SQL.BIND_VARIABLE(l_cursor, ':pm_project_reference', RTRIM(p_project_in.pm_project_reference));
15865 END IF;
15866
15867 IF l_b_co_org_id_flag = 'Y' THEN
15868 DBMS_SQL.BIND_VARIABLE(l_cursor, ':carrying_out_org_id', TO_CHAR(p_project_in.carrying_out_organization_id));
15869 END IF;
15870
15871 IF l_b_pub_sec_flag = 'Y' THEN
15872 DBMS_SQL.BIND_VARIABLE(l_cursor, ':public_sector_flag', p_project_in.public_sector_flag);
15873 END IF;
15874
15875 IF l_b_dist_rule_flag = 'Y' THEN
15876 DBMS_SQL.BIND_VARIABLE(l_cursor, ':dist_rule', p_project_in.distribution_rule);
15877 --Bug 3279981 Review. Added two bind variables below
15878 DBMS_SQL.BIND_VARIABLE(l_cursor, ':rev_acc_mth',
15879 substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) );
15880 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_mth',
15881 substr(p_project_in.distribution_rule, instr(p_project_in.distribution_rule,'/')+1) );
15882 END IF;
15883
15884 IF l_b_desc_flag = 'Y' THEN
15885 DBMS_SQL.BIND_VARIABLE(l_cursor, ':descrp', RTRIM(p_project_in.description));
15886 END IF;
15887
15888 IF l_b_start_date_flag = 'Y' THEN
15889 DBMS_SQL.BIND_VARIABLE(l_cursor, ':start_date', l_project_start_date);
15890 END IF;
15891
15892 IF l_b_comp_date_flag = 'Y' THEN
15893 DBMS_SQL.BIND_VARIABLE(l_cursor, ':comp_date', l_project_completion_date);
15894 END IF;
15895
15896 IF l_b_early_sd_flag = 'Y' THEN
15897 DBMS_SQL.BIND_VARIABLE(l_cursor, ':early_start_date', p_project_in.early_start_date);
15898 END IF;
15899
15900 IF l_b_early_fd_flag = 'Y' THEN
15901 DBMS_SQL.BIND_VARIABLE(l_cursor, ':early_finish_date', p_project_in.early_finish_date);
15902 END IF;
15903
15904 IF l_b_late_sd_flag = 'Y' THEN
15905 DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_start_date', p_project_in.late_start_date);
15906 END IF;
15907
15908 IF l_b_late_sd_flag = 'Y' THEN
15909 DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_start_date', p_project_in.late_start_date);
15910 END IF;
15911
15912 IF l_b_late_fd_flag = 'Y' THEN
15913 DBMS_SQL.BIND_VARIABLE(l_cursor, ':late_finish_date', p_project_in.late_finish_date);
15914 END IF;
15915
15916 IF l_b_sch_sd_flag = 'Y' THEN
15917 DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_start_date', p_project_in.scheduled_start_date);
15918 END IF;
15919
15920 IF l_b_sch_fd_flag = 'Y' THEN
15921 DBMS_SQL.BIND_VARIABLE(l_cursor, ':sch_finish_date', p_project_in.scheduled_finish_date);
15922 END IF;
15923
15924 IF l_b_attr_cat_flag = 'Y' THEN
15925 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr_cat', RTRIM(p_project_in.attribute_category));
15926 END IF;
15927
15928 IF l_b_attr1_flag = 'Y' THEN
15929 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr1', RTRIM(p_project_in.attribute1));
15930 END IF;
15931
15932 IF l_b_attr2_flag = 'Y' THEN
15933 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr2', RTRIM(p_project_in.attribute2));
15934 END IF;
15935
15936 IF l_b_attr3_flag = 'Y' THEN
15937 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr3', RTRIM(p_project_in.attribute3));
15938 END IF;
15939
15940 IF l_b_attr4_flag = 'Y' THEN
15941 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr4', RTRIM(p_project_in.attribute4));
15942 END IF;
15943
15944 IF l_b_attr5_flag = 'Y' THEN
15945 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr5', RTRIM(p_project_in.attribute5));
15946 END IF;
15947
15948 IF l_b_attr6_flag = 'Y' THEN
15949 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr6', RTRIM(p_project_in.attribute6));
15950 END IF;
15951
15952 IF l_b_attr7_flag = 'Y' THEN
15953 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr7', RTRIM(p_project_in.attribute7));
15954 END IF;
15955
15956 IF l_b_attr8_flag = 'Y' THEN
15957 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr8', RTRIM(p_project_in.attribute8));
15958 END IF;
15959
15960 IF l_b_attr9_flag = 'Y' THEN
15961 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr9', RTRIM(p_project_in.attribute9));
15962 END IF;
15963
15964 IF l_b_attr10_flag = 'Y' THEN
15965 DBMS_SQL.BIND_VARIABLE(l_cursor, ':attr10', RTRIM(p_project_in.attribute10));
15966 END IF;
15967
15968 IF l_b_output_tx_code_flag = 'Y' THEN
15969 DBMS_SQL.BIND_VARIABLE(l_cursor, ':output_tx_code', RTRIM(p_project_in.output_tax_code));
15970 END IF;
15971
15972 IF l_b_ret_tx_code_flag = 'Y' THEN
15973 DBMS_SQL.BIND_VARIABLE(l_cursor, ':ret_tx_code', RTRIM(p_project_in.retention_tax_code));
15974 END IF;
15975
15976 IF l_b_proj_cur_code_flag = 'Y' THEN
15977 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_cur_code', RTRIM(p_project_in.project_currency_code));
15978 END IF;
15979
15980 IF l_b_allow_x_chg_flag = 'Y' THEN
15981 DBMS_SQL.BIND_VARIABLE(l_cursor, ':allow_x_chg_flag', RTRIM(p_project_in.allow_cross_charge_flag));
15982 END IF;
15983
15984 IF l_b_proj_rt_date_flag = 'Y' THEN
15985 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_rt_date', p_project_in.project_rate_date);
15986 END IF;
15987
15988 IF l_b_proj_rt_tp_flag = 'Y' THEN
15989 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_rt_tp', RTRIM(p_project_in.project_rate_type));
15990 END IF;
15991
15992 IF l_cc_proc_lb_flag = 'Y' THEN
15993 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_lb_flag', RTRIM(l_cc_process_labor_flag)); -- Changed to local variable for Bug 5395048
15994 END IF;
15995
15996 IF l_b_lb_tp_sch_id_flag = 'Y' THEN
15997 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_tp_sch_id', p_project_in.labor_tp_schedule_id );
15998 END IF;
15999
16000 IF l_b_lb_tp_fixed_dt_flag = 'Y' THEN
16001 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_tp_fixed_dt', p_project_in.labor_tp_fixed_date);
16002 END IF;
16003
16004 IF l_b_cc_proc_nl_flag = 'Y' THEN
16005 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cc_proc_nl_flag', RTRIM(l_cc_process_nl_flag)); -- Changed to local variable for Bug 5395048
16006 END IF;
16007
16008 IF l_b_nl_tp_sch_id_flag = 'Y' THEN
16009 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_sch_id', p_project_in.nl_tp_schedule_id);
16010 END IF;
16011
16012 IF l_b_nl_tp_fx_dt_flag = 'Y' THEN
16013 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nl_tp_fx_dt', p_project_in.nl_tp_fixed_date);
16014 END IF;
16015
16016 IF l_b_role_list_id_flag = 'Y' THEN
16017 DBMS_SQL.BIND_VARIABLE(l_cursor, ':role_list_id', p_project_in.role_list_id);
16018 END IF;
16019
16020 IF l_b_work_type_id_flag = 'Y' THEN
16021 DBMS_SQL.BIND_VARIABLE(l_cursor, ':work_type_id', p_project_in.work_type_id);
16022 END IF;
16023
16024 IF l_b_cal_id_flag = 'Y' THEN
16025 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cal_id', p_project_in.calendar_id);
16026 END IF;
16027
16028 IF l_b_loc_id_flag = 'Y' THEN
16029 DBMS_SQL.BIND_VARIABLE(l_cursor, ':loc_id', p_project_in.location_id);
16030 END IF;
16031
16032 IF l_b_prob_memb_id_flag = 'Y' THEN
16033 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prob_memb_id', p_project_in.probability_member_id);
16034 END IF;
16035
16036 IF l_b_proj_value_flag = 'Y' THEN
16037 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_value', p_project_in.project_value);
16038 END IF;
16039
16040 IF l_b_exp_apprv_dt_flag = 'Y' THEN
16041 DBMS_SQL.BIND_VARIABLE(l_cursor, ':exp_apprv_date', p_project_in.expected_approval_date);
16042 END IF;
16043
16044 IF l_b_cst_jb_gp_id_flag = 'Y' THEN
16045 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cst_jb_gp_id', p_project_in.cost_job_group_id);
16046 END IF;
16047
16048 IF l_b_bill_jb_gp_id_flag = 'Y' THEN
16049 DBMS_SQL.BIND_VARIABLE(l_cursor, ':bill_jb_gp_id', p_project_in.bill_job_group_id);
16050 END IF;
16051
16052 IF l_b_emp_bill_rt_sch_id_flag = 'Y' THEN
16053 DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id', p_project_in.emp_bill_rate_schedule_id);
16054 END IF;
16055
16056 IF l_b_jb_bill_rt_sch_id_flag = 'Y' THEN
16057 DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id', p_project_in.job_bill_rate_schedule_id);
16058 END IF;
16059
16060 IF l_b_comp_mtch_wt_flag = 'Y' THEN
16061 DBMS_SQL.BIND_VARIABLE(l_cursor, ':comp_match_wt', p_project_in.competence_match_wt);
16062 END IF;
16063
16064 IF l_b_avail_mtch_wt_flag = 'Y' THEN
16065 DBMS_SQL.BIND_VARIABLE(l_cursor, ':avail_mtch_wt', p_project_in.availability_match_wt);
16066 END IF;
16067
16068 IF l_b_jb_lvl_mt_wt_flag = 'Y' THEN
16069 DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_lvl_mt_wt', p_project_in.job_level_match_wt);
16070 END IF;
16071
16072 IF l_b_search_min_avail_flag = 'Y' THEN
16073 DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_min_avail', p_project_in.search_min_availability);
16074 END IF;
16075
16076 IF l_b_srch_org_hier_id_flag = 'Y' THEN
16077 DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_org_hier_id', p_project_in.search_org_hier_id);
16078 END IF;
16079
16080 IF l_b_srch_st_org_id_flag = 'Y' THEN
16081 DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_org_hier_id', p_project_in.search_starting_org_id);
16082 END IF;
16083
16084 IF l_b_min_can_sc_req_for_nom = 'Y' THEN
16085 DBMS_SQL.BIND_VARIABLE(l_cursor, ':min_can_sc_req_for_nom', p_project_in.min_cand_score_reqd_for_nom);
16086 END IF;
16087
16088 /* Commented the code for bug 4630836:
16089 IF l_b_nn_lb_std_bl_rt_sch_id_f = 'Y' THEN
16090 DBMS_SQL.BIND_VARIABLE(l_cursor, ':n_lb_std_bill_rt_sch_id', p_project_in.non_lab_std_bill_rt_sch_id);
16091 END IF; */
16092
16093 IF l_b_proj_bil_xch_rt_flag = 'Y' THEN
16094 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_xch_rt', p_project_in.project_bil_exchange_rate);
16095 END IF;
16096
16097 IF l_b_pjfnc_bil_xch_rt_flag = 'Y' THEN
16098 DBMS_SQL.BIND_VARIABLE(l_cursor, ':pjfnc_bil_xch_rt', p_project_in.projfunc_bil_exchange_rate);
16099 END IF;
16100
16101 IF l_b_fnding_xch_rt_flag = 'Y' THEN
16102 DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_xch_rt', p_project_in.funding_exchange_rate);
16103 END IF;
16104
16105 IF l_b_enable_auto_srch_flag = 'Y' THEN
16106 DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_auto_srch', p_project_in.enable_automated_search);
16107 END IF;
16108
16109 IF l_b_srch_cntry_code_flag = 'Y' THEN
16110 DBMS_SQL.BIND_VARIABLE(l_cursor, ':srch_cntry_code', RTRIM(p_project_in.search_country_code));
16111 END IF;
16112
16113 IF l_b_invproc_crncy_tp_flag = 'Y' THEN
16114 DBMS_SQL.BIND_VARIABLE(l_cursor, ':invproc_currency_type', RTRIM(p_project_in.invproc_currency_type));
16115 END IF;
16116
16117 IF l_b_revproc_crncy_cd_flag = 'Y' THEN
16118 DBMS_SQL.BIND_VARIABLE(l_cursor, ':revproc_currency_code', RTRIM(p_project_in.revproc_currency_code));
16119 END IF;
16120
16121 IF l_b_prj_bil_rt_dt_code_flag = 'Y' THEN
16122 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_rate_date_code', RTRIM(p_project_in.project_bil_rate_date_code));
16123 END IF;
16124
16125 IF l_b_proj_bil_rt_tp_flag = 'Y' THEN
16126 DBMS_SQL.BIND_VARIABLE(l_cursor, ':proj_bil_rt_type', RTRIM(p_project_in.project_bil_rate_type));
16127 END IF;
16128
16129 IF l_b_prjfnc_crncy_code_flag = 'Y' THEN
16130 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_currency_code', RTRIM(p_project_in.projfunc_currency_code));
16131 END IF;
16132
16133 IF l_b_prjfnc_bil_rt_dt_cd_f = 'Y' THEN
16134 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rt_dt_code', RTRIM(p_project_in.projfunc_bil_rate_date_code));
16135 END IF;
16136
16137 IF l_b_prjfnc_bil_rt_tp_flag = 'Y' THEN
16138 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rate_type', RTRIM(p_project_in.projfunc_bil_rate_type));
16139 END IF;
16140
16141 IF l_b_fndng_rt_dt_cd_flag = 'Y' THEN
16142 DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rate_date_code', RTRIM(p_project_in.funding_rate_date_code));
16143 END IF;
16144
16145 IF l_b_fnding_rt_type_flag = 'Y' THEN
16146 DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rate_type', RTRIM(p_project_in.funding_rate_type));
16147 END IF;
16148
16149 IF l_b_bsln_fnding_flag = 'Y' THEN
16150 DBMS_SQL.BIND_VARIABLE(l_cursor, ':bsln_fnding_flag', RTRIM(p_project_in.baseline_funding_flag));
16151 END IF;
16152
16153 IF l_b_prjfnc_cst_rt_tp_flag = 'Y' THEN
16154 DBMS_SQL.BIND_VARIABLE(l_cursor, ':projfnc_cost_rate_type', RTRIM(p_project_in.projfunc_cost_rate_type));
16155 END IF;
16156
16157 IF l_b_inv_bill_txn_cur_flag = 'Y' THEN
16158 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_by_bil_txn_cur_flag', RTRIM(p_project_in.inv_by_bill_trans_curr_flag));
16159 END IF;
16160
16161 IF l_b_multi_crncy_bil_flag = 'Y' THEN
16162 DBMS_SQL.BIND_VARIABLE(l_cursor, ':multi_crncy_bil_flag', RTRIM(p_project_in.multi_currency_billing_flag));
16163 END IF;
16164
16165 IF l_b_prj_bil_rt_dt_flag = 'Y' THEN
16166 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_bil_rt_date', p_project_in.project_bil_rate_date);
16167 END IF;
16168
16169 IF l_b_prjfnc_bil_rt_dt_flag = 'Y' THEN
16170 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_bil_rt_date', p_project_in.projfunc_bil_rate_date);
16171 END IF;
16172
16173 IF l_b_fnding_rt_dt_flag = 'Y' THEN
16174 DBMS_SQL.BIND_VARIABLE(l_cursor, ':fnding_rt_date', p_project_in.funding_rate_date);
16175 END IF;
16176
16177 IF l_b_prjfnc_cst_rt_dt_flag = 'Y' THEN
16178 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prjfnc_cst_rt_date', p_project_in.projfunc_cost_rate_date);
16179 END IF;
16180
16181 IF l_b_asgn_prec_tsk_flag = 'Y' THEN
16182 DBMS_SQL.BIND_VARIABLE(l_cursor, ':asgn_prec_tsk_flg', RTRIM(p_project_in.assign_precedes_task));
16183 END IF;
16184
16185 IF l_b_splt_cst_fm_wp_flag = 'Y' THEN
16186 DBMS_SQL.BIND_VARIABLE(l_cursor, ':splt_cst_fm_wp_flag', RTRIM(p_project_in.split_cost_from_workplan_flag));
16187 END IF;
16188
16189 IF l_b_splt_cst_fm_bill_flag = 'Y' THEN
16190 DBMS_SQL.BIND_VARIABLE(l_cursor, ':splt_cst_fm_bill_flag', RTRIM(p_project_in.split_cost_from_bill_flag));
16191 END IF;
16192
16193 IF l_b_adv_act_set_id_flag = 'Y' THEN
16194 DBMS_SQL.BIND_VARIABLE(l_cursor, ':adv_act_set_id', p_project_in.adv_action_set_id);
16195 END IF;
16196
16197 IF l_b_st_adv_act_set_flag = 'Y' THEN
16198 DBMS_SQL.BIND_VARIABLE(l_cursor, ':st_adv_act_set_flag', RTRIM(p_project_in.start_adv_action_set_flag));
16199 END IF;
16200
16201 IF l_b_pri_code_flag = 'Y' THEN
16202 DBMS_SQL.BIND_VARIABLE(l_cursor, ':pri_code', RTRIM(p_project_in.priority_code));
16203 END IF;
16204
16205 IF l_b_retn_bil_inv_fmt_id_flg = 'Y' THEN
16206 DBMS_SQL.BIND_VARIABLE(l_cursor, ':retn_bil_inv_fmt_id', TO_CHAR(p_project_in.retn_billing_inv_format_id));
16207 END IF;
16208
16209 IF l_b_retn_acnt_flag = 'Y' THEN
16210 DBMS_SQL.BIND_VARIABLE(l_cursor, ':retn_acnt_flag', RTRIM(p_project_in.retn_accounting_flag));
16211 END IF;
16212
16213 IF l_b_reval_fndng_flag = 'Y' THEN
16214 DBMS_SQL.BIND_VARIABLE(l_cursor, ':reval_fndng_flg', RTRIM(p_project_in.revaluate_funding_flag));
16215 END IF;
16216
16217 IF l_b_sec_lvl_flag = 'Y' THEN
16218 DBMS_SQL.BIND_VARIABLE(l_cursor, ':sec_lvl', RTRIM(p_project_in.security_level));
16219 END IF;
16220
16221 IF l_b_lbr_disc_rsn_code_flg = 'Y' THEN
16222 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lbr_disc_rsn_code', RTRIM(p_project_in.labor_disc_reason_code));
16223 END IF;
16224
16225 IF l_b_nn_lbr_disc_rsn_cd_flg = 'Y' THEN
16226 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lbr_disc_rsn_cd', RTRIM(p_project_in.non_labor_disc_reason_code));
16227 END IF;
16228
16229 IF l_b_inc_gn_los_flag = 'Y' THEN
16230 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inc_gn_los_flg', RTRIM(p_project_in.include_gains_losses_flag));
16231 END IF;
16232
16233
16234 IF l_b_lb_sch_tp_fg = 'Y' THEN
16235 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_type', RTRIM(p_project_in.labor_sch_type));
16236 END IF;
16237
16238 IF l_b_nn_lb_sch_tp_fg = 'Y' THEN
16239 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_tp', RTRIM(p_project_in.non_labor_sch_type));
16240 END IF;
16241
16242 IF l_b_emp_bill_rt_sch_id_fg2 = 'Y' THEN
16243 DBMS_SQL.BIND_VARIABLE(l_cursor, ':emp_bill_rt_sch_id2', p_project_in.emp_bill_rate_schedule_id);
16244 END IF;
16245
16246 IF l_b_jb_bill_rt_sch_id_fg2 = 'Y' THEN
16247 DBMS_SQL.BIND_VARIABLE(l_cursor, ':jb_bill_rt_sch_id2', p_project_in.job_bill_rate_schedule_id);
16248 END IF;
16249
16250 IF l_b_lb_sch_fx_dt_fg = 'Y' THEN
16251 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_fx_dt', p_project_in.labor_schedule_fixed_date);
16252 END IF;
16253
16254 IF l_b_lb_sch_dsct_fg = 'Y' THEN
16255 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_sch_dsct', p_project_in.labor_schedule_discount);
16256 END IF;
16257
16258 IF l_b_lb_disc_rn_cd_fg2 = 'Y' THEN
16259 DBMS_SQL.BIND_VARIABLE(l_cursor, ':lb_disc_rn_cd', RTRIM(p_project_in.labor_disc_reason_code));
16260 END IF;
16261
16262 IF l_b_rv_ind_rt_sch_id_fg = 'Y' THEN
16263 DBMS_SQL.BIND_VARIABLE(l_cursor, ':rv_ind_rt_sch_id', p_project_in.REV_IND_RATE_SCH_ID);
16264 END IF;
16265
16266 IF l_b_inv_ind_rt_sch_id_fg = 'Y' THEN
16267 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_ind_rt_sch_id', p_project_in.INV_IND_RATE_SCH_ID);
16268 END IF;
16269
16270 IF l_b_ind_sch_fx_dt_fg = 'Y' THEN
16271 DBMS_SQL.BIND_VARIABLE(l_cursor, ':rev_ind_sch_fx_dt', p_project_in.rev_ind_sch_fixed_date);
16272 END IF;
16273
16274 IF l_b_inv_ind_sch_fx_dt_fg = 'Y' THEN
16275 DBMS_SQL.BIND_VARIABLE(l_cursor, ':inv_ind_sch_fx_dt', p_project_in.inv_ind_sch_fixed_date);
16276 END IF;
16277
16278 IF l_b_nn_lb_bill_rt_org_id_fg = 'Y' THEN
16279 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_bill_rt_org_id', p_project_in.non_labor_bill_rate_org_id);
16280 END IF;
16281
16282 IF l_b_n_lb_st_bl_rt_sc_id_fg2 = 'Y' THEN
16283 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lab_std_bill_rt_sch_id', p_project_in.non_lab_std_bill_rt_sch_id);
16284 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_std_bill_rt_sch', RTRIM(l_std_bill_rate_schedule));
16285 END IF;
16286
16287 IF l_b_nn_lb_sch_fx_dt_fg = 'Y' THEN
16288 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_fx_dt', p_project_in.non_labor_schedule_fixed_date);
16289 END IF;
16290
16291 IF l_b_nn_lb_sch_dst_fg = 'Y' THEN
16292 DBMS_SQL.BIND_VARIABLE(l_cursor, ':nn_lb_sch_dst', p_project_in.non_labor_schedule_discount);
16293 END IF;
16294
16295 IF l_b_n_lb_disc_rsn_cd_fg2 = 'Y' THEN
16296 DBMS_SQL.BIND_VARIABLE(l_cursor, ':n_lb_dis_rn_cd', RTRIM(p_project_in.non_labor_disc_reason_code));
16297 END IF;
16298
16299 IF l_b_as_alloc_mth_fg = 'Y' THEN
16300 DBMS_SQL.BIND_VARIABLE(l_cursor, ':as_alloc_mth', RTRIM(p_project_in.asset_allocation_method));
16301 END IF;
16302
16303 IF l_b_cp_evt_proc_fg = 'Y' THEN
16304 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cp_evt_proc', RTRIM(p_project_in.capital_event_processing));
16305 END IF;
16306
16307 IF l_b_cint_rt_sch_id_fg = 'Y' THEN
16308 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_rt_sch', p_project_in.cint_rate_sch_id);
16309 END IF;
16310
16311 IF l_b_cint_elg_fg = 'Y' THEN
16312 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_elg_fg', RTRIM(p_project_in.cint_eligible_flag));
16313 END IF;
16314
16315 IF l_b_cint_stp_dt_fg = 'Y' THEN
16316 DBMS_SQL.BIND_VARIABLE(l_cursor, ':cint_stp_dt', p_project_in.cint_stop_date);
16317 END IF;
16318
16319 /* Added for bug 6248841 */
16320 IF l_b_cc_tax_task_id = 'Y' THEN
16321 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_cc_tax_task_id', p_project_in.cc_tax_task_id);
16322 END IF;
16323
16324 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_usr_id', G_USER_ID);
16325 DBMS_SQL.BIND_VARIABLE(l_cursor, ':g_login_id', G_LOGIN_ID);
16326 DBMS_SQL.BIND_VARIABLE(l_cursor, ':prj_id', l_project_id);
16327
16328 --end bug 2955326
16329
16330 -- FP_M changes begin (venkat) 3
16331
16332 -- COMMENT BEGIN --
16333 -------------- Begin Comment : Diable for now as the col sys_program_flag not in pa_projects -------
16334 -- IF l_sys_program_flag = 'Y' THEN
16335 -- DBMS_SQL.BIND_VARIABLE(l_cursor, ':sys_program_flg', RTRIM(p_project_in.sys_program_flag));
16336 -- END IF;
16337 -------------- end Comment : Diable for now as the col sys_program_flag not in pa_projects ---------
16338 -- COMMENT END --
16339
16340 -- Bug # 5072032.
16341
16342 IF l_b_sys_program_flag_fg = 'Y' THEN
16343 DBMS_SQL.BIND_VARIABLE(l_cursor, ':sys_program_flag', RTRIM(p_project_in.sys_program_flag));
16344 END IF;
16345
16346 IF l_b_allow_multi_prog_rollup_fg = 'Y' THEN
16347 DBMS_SQL.BIND_VARIABLE(l_cursor, ':allow_multi_program_rollup', RTRIM(p_project_in.allow_multi_program_rollup));
16348 END IF;
16349
16350 -- End of Bug # 5072032.
16351
16352
16353 IF l_enable_top_task_cust_flag = 'Y' THEN
16354 DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_top_task_cust_flg', RTRIM(p_project_in.enable_top_task_customer_flag));
16355 END IF;
16356
16357 IF l_enable_top_task_inv_mth_flag = 'Y' THEN
16358 DBMS_SQL.BIND_VARIABLE(l_cursor, ':enable_top_task_inv_mth_flg', RTRIM(p_project_in.enable_top_task_inv_mth_flag));
16359 END IF;
16360
16361 IF l_projfunc_attr_for_ar_flag = 'Y' THEN
16362 DBMS_SQL.BIND_VARIABLE(l_cursor, ':projfunc_attr_for_ar_flg', RTRIM(p_project_in.projfunc_attr_for_ar_flag));
16363 END IF;
16364
16365 -- FP_M changes end (venkat)
16366
16367 --sunkalya federal bug#5511353
16368 IF l_date_eff_funds_flag = 'Y' THEN
16369 DBMS_SQL.BIND_VARIABLE(l_cursor, ':date_eff_funds_consumption', RTRIM(p_project_in.date_eff_funds_flag));
16370 END IF;
16371
16372 --sunkalya federal bug#5511353
16373
16374 /* 7508661 : EnC : Start */
16375 IF l_ar_rec_notify_flag = 'Y' THEN
16376 DBMS_SQL.BIND_VARIABLE(l_cursor, ':ar_rec_notify_flag', RTRIM(p_project_in.ar_rec_notify_flag));
16377 END IF;
16378
16379 IF l_auto_release_pwp_inv = 'Y' THEN
16380 DBMS_SQL.BIND_VARIABLE(l_cursor, ':auto_release_pwp_inv', RTRIM(p_project_in.auto_release_pwp_inv));
16381 END IF;
16382 /* 7508661 : EnC : End */
16383 /* Added for 12.2Payroll billing ER 11899223 */
16384 IF l_bill_labor_accrual = 'Y' THEN
16385 DBMS_SQL.BIND_VARIABLE(l_cursor, ':bill_labor_accrual', RTRIM(p_project_in.bill_labor_accrual));
16386 END IF;
16387
16388 IF l_adj_on_std_inv = 'Y' THEN
16389 DBMS_SQL.BIND_VARIABLE(l_cursor, ':adj_on_std_inv', RTRIM(p_project_in.adj_on_std_inv));
16390 END IF;
16391 /* Added for 12.2Payroll billing ER 11899223 */
16392
16393 l_rows := dbms_sql.execute(l_cursor);
16394
16395 IF dbms_sql.is_open (l_cursor)
16396 THEN
16397 dbms_sql.close_cursor (l_cursor);
16398 END IF;
16399 END IF;-- Skip below update to avoid locking issue when called from Bulk_Update_Task_Lite
16400 IF l_debug_mode = 'Y' THEN
16401 pa_debug.g_err_stage := 'Done with updating project level data...';
16402 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16403 END IF;
16404
16405 -- anlee
16406 -- Added for intermedia search
16407 if l_ctx_update_flag = 'Y' then
16408 PA_PROJECT_CTX_SEARCH_PVT.UPDATE_ROW (
16409 p_project_id => l_project_id
16410 ,p_template_flag => l_project_rec.template_flag
16411 ,p_project_name => l_ctx_proj_name
16412 ,p_project_number => l_ctx_proj_number
16413 ,p_project_long_name => l_ctx_long_name
16414 ,p_project_description => l_ctx_desc
16415 ,x_return_status => l_return_status );
16416
16417 IF l_debug_mode = 'Y' THEN
16418 pa_debug.g_err_stage := 'After calling PA_PROJECT_CTX_SEARCH_PVT.UPDATE_ROW l_return_status='||l_return_status;
16419 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16420 END IF;
16421
16422
16423 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16424 THEN
16425 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16426
16427 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16428 THEN
16429 RAISE FND_API.G_EXC_ERROR;
16430 END IF;
16431
16432 end if;
16433 -- End of changes
16434 END IF;
16435 -- Modify opportunity value attributes with values entered in quick entry
16436 --Added By Aditi For Bug 4473105
16437
16438 OPEN l_get_details_for_opp_csr(l_project_id);
16439 FETCH l_get_details_for_opp_csr INTO l_expected_approval_date, l_projfunc_currency_code, l_project_currency_code;
16440 CLOSE l_get_details_for_opp_csr;
16441
16442 OPEN l_get_details_for_opp_csr2(l_project_id);
16443 FETCH l_get_details_for_opp_csr2 INTO l_opportunity_value, l_opp_value_currency_code;
16444 CLOSE l_get_details_for_opp_csr2;
16445
16446 If (p_project_in.project_value IS NOT NULL) AND (p_project_in.project_value <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
16447 Then
16448 l_opportunity_value := p_project_in.project_value;
16449 End if;
16450 If (p_project_in.opp_value_currency_code) IS NOT NULL AND (p_project_in.opp_value_currency_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
16451 Then
16452 l_opp_value_currency_code := p_project_in.opp_value_currency_code;
16453 End if;
16454 If (p_project_in.expected_approval_date IS NOT NULL) AND (p_project_in.expected_approval_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
16455 Then
16456 l_expected_approval_date := p_project_in.expected_approval_date;
16457 End if;
16458
16459 -- Skip below update to avoid locking issue when called from Bulk_Update_Task_Lite
16460 IF NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' THEN
16461 PA_OPPORTUNITY_MGT_PVT.MODIFY_PROJECT_ATTRIBUTES
16462 ( p_project_id => l_project_id
16463 ,p_opportunity_value => l_opportunity_value
16464 ,p_opp_value_currency_code => l_opp_value_currency_code
16465 ,p_expected_approval_date => l_expected_approval_date
16466 ,x_return_status => l_return_status
16467 ,x_msg_count => l_msg_count
16468 ,x_msg_data => l_msg_data);
16469
16470 IF l_debug_mode = 'Y' THEN
16471 pa_debug.g_err_stage := 'After calling PA_OPPORTUNITY_MGT_PVT.MODIFY_PROJECT_ATTRIBUTES l_return_status='||l_return_status;
16472 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16473 END IF;
16474
16475
16476 if l_return_status <> 'S' then
16477 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA',
16478 p_msg_name => 'PA_ERR_MOD_PROJ_OPP_ATTR');
16479 RAISE FND_API.G_EXC_ERROR;
16480 end if;
16481 END IF;
16482 -- End of code changes for bug 4473105
16483
16484
16485 --Bug 3279981 Review :
16486 --Perform the various updates for change of revenue accrual method, invoice method, top task invoice method flag
16487 --and also for populating distribution rule's invoice method as 'WORK' internally when top task invoice method flag
16488 --is enabled
16489 DECLARE
16490 --The foll. three variables will hold the valid values for revenue accrual method , invoice method
16491 --and invoice method at top task flag of the project. They will be refreshed with the new values in
16492 --case new values have been passed
16493 l_proj_rev_acc_method VARCHAR2(30) := l_project_rec.revenue_accrual_method;
16494 l_proj_invoice_method VARCHAR2(30) := l_project_rec.invoice_method;
16495 l_proj_top_task_inv_mth_flag VARCHAR2(1) := l_project_rec.enable_top_task_inv_mth_flag;
16496 l_return_status VARCHAR2(10);
16497 l_msg_count NUMBER := 0;
16498 l_msg_data VARCHAR2(2000);
16499 BEGIN
16500 IF p_project_in.enable_top_task_inv_mth_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16501 AND p_project_in.enable_top_task_inv_mth_flag IS NOT NULL
16502 AND p_project_in.enable_top_task_inv_mth_flag <> l_project_rec.enable_top_task_inv_mth_flag THEN
16503 l_proj_top_task_inv_mth_flag := p_project_in.enable_top_task_inv_mth_flag;
16504 END IF;
16505
16506 --The revenue accrual method for the project has changed. Therefore, call the api to default the new revenue accrual
16507 --method to the tasks
16508 IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16509 AND upper( substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) )
16510 <> upper( l_project_rec.revenue_accrual_method ) THEN
16511
16512 l_proj_rev_acc_method := upper( substr(p_project_in.distribution_rule, 1, instr(p_project_in.distribution_rule,'/')-1) );
16513 pa_top_task_cust_invoice_pvt.Set_Rev_Acc_At_Top_Task( P_API_VERSION => 1.0
16514 , P_INIT_MSG_LIST => 'T'
16515 , P_COMMIT => 'F'
16516 , P_VALIDATE_ONLY => 'F'
16517 , P_VALIDATION_LEVEL => 100
16518 , P_DEBUG_MODE => 'N'
16519 , p_calling_module => 'AMG'
16520 , p_project_id => l_project_id
16521 , p_rev_acc => l_proj_rev_acc_method
16522 , x_return_status => l_return_status
16523 , x_msg_count => l_msg_count
16524 , x_msg_data => l_msg_data );
16525 END IF;
16526
16527 --The invoice method for the project has changed. Call the api to update the invoice method for the tasks only if
16528 --invoice method at top task is unchecked
16529 IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16530 AND upper( substr(p_project_in.distribution_rule,instr(p_project_in.distribution_rule,'/')+1) )
16531 <> upper( l_project_rec.invoice_method ) THEN
16532
16533 l_proj_invoice_method := upper( substr(p_project_in.distribution_rule,instr(p_project_in.distribution_rule,'/')+1) );
16534 IF 'N' = l_proj_top_task_inv_mth_flag THEN
16535 pa_top_task_cust_invoice_pvt.Set_Inv_Mth_At_Top_Task( P_API_VERSION => 1.0
16536 , P_INIT_MSG_LIST => 'T'
16537 , P_COMMIT => 'F'
16538 , P_VALIDATE_ONLY => 'F'
16539 , P_VALIDATION_LEVEL => 100
16540 , P_DEBUG_MODE => 'N'
16541 , p_calling_module => 'AMG'
16542 , p_project_id => l_project_id
16543 , p_inv_mth => l_proj_invoice_method
16544 , x_return_status => l_return_status
16545 , x_msg_count => l_msg_count
16546 , x_msg_data => l_msg_data );
16547 END IF;
16548
16549 END IF;
16550
16551 --IF the invoice method at top task flag has changed from 'Y' to 'N' :
16552 --Update the distribution rule with the correct invoice method, if no distribution rule has been passed
16553 --Call the api to default the invoice method to the tasks
16554 IF 'Y' = l_enable_top_task_inv_mth_flag AND 'N' = p_project_in.enable_top_task_inv_mth_flag THEN
16555 IF nvl(p_project_in.distribution_rule,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
16556 UPDATE pa_projects_all
16557 SET distribution_rule =
16558 substr(distribution_rule,1,instr(distribution_rule,'/')-1)||'/'||l_proj_invoice_method
16559 WHERE project_id = l_project_id;
16560 END IF;
16561 pa_top_task_cust_invoice_pvt.Set_Inv_Mth_At_Top_Task( P_API_VERSION => 1.0
16562 , P_INIT_MSG_LIST => 'T'
16563 , P_COMMIT => 'F'
16564 , P_VALIDATE_ONLY => 'F'
16565 , P_VALIDATION_LEVEL => 100
16566 , P_DEBUG_MODE => 'N'
16567 , p_calling_module => 'AMG'
16568 , p_project_id => l_project_id
16569 , p_inv_mth => l_proj_invoice_method
16570 , x_return_status => l_return_status
16571 , x_msg_count => l_msg_count
16572 , x_msg_data => l_msg_data );
16573 --IF the invoice method at top task flag has changed from 'N' to 'Y' :
16574 --Call the api to set the top task funding level
16575 ELSIF 'Y' = l_enable_top_task_inv_mth_flag AND 'Y' = p_project_in.enable_top_task_inv_mth_flag THEN
16576 pa_top_task_cust_invoice_pvt.set_top_task_funding_level( P_API_VERSION => 1.0
16577 , P_INIT_MSG_LIST => 'T'
16578 , P_COMMIT => 'F'
16579 , P_VALIDATE_ONLY => 'F'
16580 , P_VALIDATION_LEVEL => 100
16581 , P_DEBUG_MODE => 'N'
16582 , p_calling_module => 'AMG'
16583 , p_project_id => l_project_id
16584 , x_return_status => l_return_status
16585 , x_msg_count => l_msg_count
16586 , x_msg_data => l_msg_data );
16587
16588 END IF;
16589
16590 --IF the invoice method at top task flag is checked,
16591 --invoice method of the distribution rule must internally be populated as WORK
16592 IF 'Y' = l_proj_top_task_inv_mth_flag THEN
16593 UPDATE pa_projects_all
16594 SET distribution_rule =
16595 substr(distribution_rule,1,instr(distribution_rule,'/')-1)||'/'||'WORK'
16596 WHERE project_id = l_project_id;
16597 END IF;
16598 END;
16599 --Bug 3279981 Review
16600
16601 --Project Structures
16602 --dbms_output.put_line ('After executing dynamic sql for updating project ');
16603 --Project Structures
16604 -- Bug 3548473 : 3627124 If the parameter p_pass_entire_structure = 'N' and
16605 -- structure_type = 'WORKPLAN' throw an error. For workplan structure, user
16606 -- needs to pass the all tasks in the structure in proper order.
16607 -- Same holds true for SHARED structure also.
16608
16609 --dbms_output.put_line ('p_pass_entire_structure : ' || p_pass_entire_structure);
16610 --dbms_output.put_line ('l_structure_type : ' || l_structure_type);
16611 --dbms_output.put_line ('G_IS_WP_SEPARATE_FROM_FN : ' || G_IS_WP_SEPARATE_FROM_FN);
16612
16613 -- Bug # 5077599.
16614
16615 if (p_update_mode = 'PA_UPD_TASK_ATTR'
16616 and p_pass_entire_structure = 'N'
16617 and (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' )
16618 OR ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND p_structure_in.structure_type = 'WORKPLAN' ))) then
16619
16620 i:= p_tasks_in.first;
16621
16622 while i is not null
16623 loop
16624
16625 if (p_tasks_in(i).pa_task_id is null or p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) then
16626
16627 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16628 THEN
16629 pa_interface_utils_pub.map_new_amg_msg
16630 (p_old_message_code => 'PA_TASK_ID_IS_MISS'-- new message for bug 3548473: 3627124
16631 ,p_msg_attribute => 'CHANGE'
16632 ,p_resize_flag => 'N'
16633 ,p_msg_context => 'PROJ'
16634 ,p_attribute1 => l_project_rec.segment1
16635 ,p_attribute2 => ''
16636 ,p_attribute3 => ''
16637 ,p_attribute4 => ''
16638 ,p_attribute5 => '');
16639 END IF;
16640
16641 p_multiple_task_msg := 'F';
16642 RAISE FND_API.G_EXC_ERROR;
16643 end if;
16644
16645 i := p_tasks_in.next(i);
16646 end loop;
16647
16648 end if;
16649
16650 -- End of Bug # 5077599.
16651
16652 -- 3858251 Added code to check, whether tasks are passed or not
16653
16654 i:= p_tasks_in.first;
16655
16656 IF p_tasks_in.exists(i) THEN
16657 -- 3858251 if tasks are passed to update_project api , then and then only below
16658 -- validation should get called
16659 -- Bug # 5077599.
16660 /*
16661 IF (p_pass_entire_structure = 'N' AND l_structure_type = 'WORKPLAN') OR -- bhaskar
16662 (p_pass_entire_structure = 'N' AND G_IS_WP_SEPARATE_FROM_FN = 'N') THEN
16663 */
16664
16665 IF -- Bug # 5077599.
16666 (p_pass_entire_structure = 'N' AND l_structure_type = 'WORKPLAN' and p_update_mode <> 'PA_UPD_TASK_ATTR') OR -- bhaskar
16667 (p_pass_entire_structure = 'N' AND G_IS_WP_SEPARATE_FROM_FN = 'N' and p_update_mode <> 'PA_UPD_TASK_ATTR') THEN
16668 -- Bug # 5077599.
16669 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16670 THEN
16671 pa_interface_utils_pub.map_new_amg_msg
16672 ( p_old_message_code => 'PA_TASK_STRUCT_NOT_ORDRD'-- new message for bug 3548473: 3627124
16673 ,p_msg_attribute => 'CHANGE'
16674 ,p_resize_flag => 'N'
16675 ,p_msg_context => 'PROJ'
16676 ,p_attribute1 => l_project_rec.segment1
16677 ,p_attribute2 => ''
16678 ,p_attribute3 => ''
16679 ,p_attribute4 => ''
16680 ,p_attribute5 => '');
16681 END IF;
16682
16683 p_multiple_task_msg := 'F';
16684 RAISE FND_API.G_EXC_ERROR;
16685 END IF; -- bug 3548473 : 3627124
16686 END IF;
16687
16688 -- 3858251 end
16689
16690 IF p_pass_entire_structure = 'N' THEN
16691 l_update_task_structure := 'Y';
16692 ELSE
16693 l_update_task_structure := 'N';
16694 END IF; -- bug 3548473 : 3627124
16695
16696 --dbms_output.put_line ('l_update_task_structure : ' || l_update_task_structure);
16697 --dbms_output.put_line ('before calling PA_PROJ_TASK_STRUC_PUB.create_structure ');
16698 --Creating a WORKPLAN structure
16699 IF p_structure_in.structure_type = 'WORKPLAN' --This should only be done for a WORKPLAN structure
16700 THEN
16701 PA_PROJ_TASK_STRUC_PUB.create_structure(
16702 p_project_id => l_project_id
16703 ,p_structure_type =>l_structure_type --BUg 3548473 3627124 aditi
16704 ,p_structure_version_name => p_structure_in.structure_version_name
16705 ,p_description => p_structure_in.description
16706 ,x_structure_id => l_structure_id
16707 ,x_structure_version_id => l_structure_version_id
16708 ,x_msg_count => l_msg_count
16709 ,x_msg_data => l_msg_data
16710 ,x_return_status => l_return_status
16711 );
16712
16713 IF l_debug_mode = 'Y' THEN
16714 pa_debug.g_err_stage := 'After calling PA_PROJ_TASK_STRUC_PUB.create_structure l_return_status='||l_return_status;
16715 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16716 END IF;
16717
16718
16719 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16720 THEN
16721 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16722
16723 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16724 THEN
16725 RAISE FND_API.G_EXC_ERROR;
16726 END IF;
16727
16728 END IF; -- p_structure_in.structure_type = 'WORKPLAN'
16729
16730 IF ( ( ( p_structure_in.structure_version_name IS NOT NULL AND
16731 p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) OR
16732 ( p_structure_in.description IS NOT NULL AND
16733 p_structure_in.description <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) AND
16734 ( p_structure_in.structure_version_id IS NOT NULL AND
16735 p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) ) OR
16736 --updating structure version
16737 ( ( p_structure_in.structure_version_name IS NOT NULL AND
16738 p_structure_in.structure_version_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
16739 ( p_structure_in.structure_version_id IS NULL OR
16740 p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) )
16741 --creating structure version
16742 THEN
16743 IF l_structure_version_id IS NULL
16744 AND NVL( l_project_rec.template_flag,'N') = 'N'
16745 AND NVL( PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED(l_project_id), 'N' ) = 'Y'
16746 AND p_pm_product_code <> 'WORKPLAN' -- Bug 2871353
16747 THEN
16748 PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver(
16749 p_project_id => l_project_id
16750 ,p_structure_type => p_structure_in.structure_type --no need to change this actual parameter for bug 2738747. The API takes care of financial stuff.
16751 ,p_structure_version_name => p_structure_in.structure_version_name
16752 ,p_structure_version_id => p_structure_in.structure_version_id
16753 ,p_description => p_structure_in.description
16754 ,x_structure_version_id => l_structure_version_id
16755 ,x_msg_count => l_msg_count
16756 ,x_msg_data => l_msg_data
16757 ,x_return_status => l_return_status
16758 );
16759
16760 IF l_debug_mode = 'Y' THEN
16761 pa_debug.g_err_stage := 'After calling PA_PROJ_TASK_STRUC_PUB.create_update_struct_ver l_return_status='||l_return_status;
16762 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16763 END IF;
16764
16765
16766 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16767 THEN
16768 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16769
16770 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16771 THEN
16772 RAISE FND_API.G_EXC_ERROR;
16773 END IF;
16774 END IF; --<<structure_version_id is null >>
16775
16776 END IF;
16777 --Project Connect 4.0
16778 IF l_structure_version_id IS NOT NULL
16779 AND p_pm_product_code <> 'WORKPLAN' -- Bug 2871353
16780 THEN
16781 g_struc_out_tbl(1).structure_type := p_structure_in.structure_type; --<Bug#2862350>
16782 --g_struc_out_tbl(1).structure_type := 'WORKPLAN';
16783 g_struc_out_tbl(1).structure_version_id := l_structure_version_id;
16784
16785 -- Bug 3075609.
16786 l_create_task_versions_only := 'Y';
16787
16788 --Call create_tasks_versions_only api to create new task versions for the
16789 --existing tasks and add them to the new structure version.
16790 PA_PROJ_TASK_STRUC_PUB.create_tasks_versions_only(
16791 p_calling_module => 'AMG'
16792 --,p_structure_type => p_structure_in.structure_type --bug 2738747
16793 ,p_structure_type => l_structure_type --bug 2738747
16794 ,p_project_id => l_project_id
16795 ,p_structure_version_id => l_structure_version_id
16796 ,p_pm_product_code => l_pm_product_code
16797 ,p_tasks_in => p_tasks_in
16798 ,x_msg_count => l_msg_count
16799 ,x_msg_data => l_msg_data
16800 ,x_return_status => l_return_status );
16801
16802 IF l_debug_mode = 'Y' THEN
16803 pa_debug.g_err_stage := 'After calling PA_PROJ_TASK_STRUC_PUB.create_tasks_versions_only l_return_status='||l_return_status;
16804 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16805 END IF;
16806
16807
16808 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16809 THEN
16810 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16811
16812 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16813 THEN
16814 RAISE FND_API.G_EXC_ERROR;
16815 END IF;
16816 END IF;
16817 --Project Connect 4.0
16818
16819
16820 -- For bug2931183 Adding to keep a track of structure version id to be updated
16821 IF l_debug_mode = 'Y' THEN
16822 pa_debug.g_err_stage := ' the value of l_structure_type' || l_structure_type;
16823 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16824 END IF;
16825
16826 IF l_structure_version_id IS NULL
16827 THEN
16828 IF (p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
16829 p_structure_in.structure_version_id IS NULL) AND (l_structure_type <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_structure_type IS NOT NULL)
16830 THEN
16831 IF l_structure_type = 'FINANCIAL'
16832 THEN
16833 OPEN cur_struc_ver_fin(l_project_id,'FINANCIAL');
16834 FETCH cur_struc_ver_fin INTO l_update_structure_version_id;
16835 IF cur_struc_ver_fin%NOTFOUND
16836 THEN
16837 OPEN cur_struc_ver_wp(l_project_id,'FINANCIAL');
16838 FETCH cur_struc_ver_wp INTO l_update_structure_version_id;
16839 CLOSE cur_struc_ver_wp;
16840 END IF;
16841 CLOSE cur_struc_ver_fin;
16842 END IF;
16843
16844 ELSE
16845 l_update_structure_version_id := p_structure_in.structure_version_id;
16846 END IF;
16847 ELSE
16848 l_update_structure_version_id := l_structure_version_id;
16849 END IF;
16850
16851 IF l_debug_mode = 'Y' THEN
16852 pa_debug.g_err_stage := ' the value of l_update_structure_version_id' || l_update_structure_version_id;
16853 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
16854 END IF;
16855
16856
16857 --Project Structures
16858
16859 -- Since we maybe adding new tasks, need to pass the project record to
16860 -- the Add_task_round_one api. Project may have been updated in the previous lines.
16861 -- Hence need to fetch the updated record once again
16862
16863 OPEN l_project_csr (l_project_id);
16864 FETCH l_project_csr INTO l_project_rec;
16865 CLOSE l_project_csr;
16866
16867
16868 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
16869 pa_project_check_pvt.G_index_counter := 0;
16870 l_deferred_new_tasks_tbl.delete;
16871 l_deferred_tasks_count := 0;
16872 i := p_tasks_in.first;
16873
16874 G_ParChildTsk_chks_deferred := 'Y'; -- Bug 10127973
16875
16876 --project structure
16877 --IF p_structure_in.structure_type = 'FINANCIAL' --bug 2738747
16878 IF l_structure_type = 'FINANCIAL' --bug 2738747
16879 --project structure
16880 THEN
16881
16882 IF p_tasks_in.exists(i)
16883 THEN
16884 -- G_ParChildTsk_chks_deferred := 'Y'; -- Bug 10127973
16885 -- initialize the special global tables and counter set up
16886 -- to handle task number changes
16887
16888 l_is_wp_seperate_from_fn := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Added for Bug#3451073
16889 WHILE i IS NOT NULL LOOP
16890
16891 l_task_id := NULL;
16892
16893 l_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
16894
16895 IF (p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
16896 OR p_tasks_in(i).pa_task_id IS NULL )
16897 THEN
16898 IF p_tasks_in(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
16899 OR p_tasks_in(i).pm_task_reference IS NULL
16900 THEN
16901 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
16902 THEN
16903 pa_interface_utils_pub.map_new_amg_msg
16904 ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
16905 ,p_msg_attribute => 'CHANGE'
16906 ,p_resize_flag => 'N'
16907 ,p_msg_context => 'PROJ'
16908 ,p_attribute1 => l_project_rec.segment1
16909 ,p_attribute2 => ''
16910 ,p_attribute3 => ''
16911 ,p_attribute4 => ''
16912 ,p_attribute5 => '');
16913 END IF;
16914
16915 l_tasks_out(i).return_status := FND_API.G_RET_STS_ERROR ;
16916 p_multiple_task_msg := 'F';
16917 -- RAISE FND_API.G_EXC_ERROR;
16918 ELSE
16919 OPEN l_get_task_csr
16920 (l_project_id,p_tasks_in(i).pm_task_reference);
16921 FETCH l_get_task_csr INTO l_task_id;
16922 CLOSE l_get_task_csr;
16923 END IF;
16924
16925 ELSE --if task_id is given, check it's validity
16926 --pambu1('Check Task ID validity');
16927 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
16928 -- pa_project_pvt.convert_pm_taskref_to_id_all
16929 pa_project_pvt.convert_pm_taskref_to_id_all
16930 (p_pa_project_id => l_project_id
16931 ,p_structure_type => l_structure_type
16932 ,p_pa_task_id => p_tasks_in(i).pa_task_id
16933 ,p_pm_task_reference => NULL
16934 ,p_out_task_id => l_task_id
16935 ,p_return_status => l_return_status );
16936 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16937 THEN
16938 l_tasks_out(i).return_status := l_return_status;
16939 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16940
16941 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16942 THEN
16943 l_tasks_out(i).return_status := l_return_status;
16944 p_multiple_task_msg := 'F';
16945 -- RAISE FND_API.G_EXC_ERROR;
16946 END IF;
16947 END IF;
16948
16949 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
16950 (p_task_number=> p_tasks_in(i).task_name
16951 ,p_task_reference => p_tasks_in(i).pm_task_reference
16952 ,p_task_id => l_task_id);
16953 IF l_task_id IS NULL
16954 THEN
16955
16956 -- Actions performed using the APIs would be subject to
16957 -- function security. If the responsibility does not allow
16958 -- such functions to be executed, the API should not proceed further
16959 -- since the user does not have access to such functions
16960
16961 -- Function security procedure check whether user have the
16962 -- privilege to add task or not
16963
16964 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
16965 --above before checking for update_project function.
16966
16967 --BUG 4413568 DHI ER , rtarway, if p_update_mode is PA_UPD_TASK_ATTR, WBS/FBS hierarchy can not be changed.
16968 --if l_task_id is null, means this is a new task, so we should be raising an error at this point itself
16969 IF ( p_update_mode = 'PA_UPD_TASK_ATTR') THEN
16970 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
16971 p_msg_name => 'PA_WBS_CANT_CHANGE');
16972 RAISE FND_API.G_EXC_ERROR;
16973 END IF;
16974
16975 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
16976 (p_api_version_number => p_api_version_number,
16977 p_responsibility_id => l_resp_id,
16978 p_function_name => 'PA_PM_ADD_TASK',
16979 p_msg_count => l_msg_count,
16980 p_msg_data => l_msg_data,
16981 p_return_status => l_return_status,
16982 p_function_allowed => l_function_allowed);
16983
16984 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
16985 THEN
16986 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
16987
16988 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
16989 THEN
16990 p_multiple_task_msg := 'F';
16991 -- RAISE FND_API.G_EXC_ERROR;
16992 END IF;
16993
16994 IF l_function_allowed = 'N' THEN
16995 pa_interface_utils_pub.map_new_amg_msg
16996 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
16997 ,p_msg_attribute => 'CHANGE'
16998 ,p_resize_flag => 'Y'
16999 ,p_msg_context => 'GENERAL'
17000 ,p_attribute1 => ''
17001 ,p_attribute2 => ''
17002 ,p_attribute3 => ''
17003 ,p_attribute4 => ''
17004 ,p_attribute5 => '');
17005 p_return_status := FND_API.G_RET_STS_ERROR;
17006 p_multiple_task_msg := 'F';
17007 -- RAISE FND_API.G_EXC_ERROR;
17008 END IF;
17009
17010 -- check whether the input task number is unique
17011 IF pa_task_utils.check_unique_task_number
17012 (l_project_id, p_tasks_in(i).pa_task_number,NULL) = 0 THEN
17013 -- this means that the task number will not be unique
17014 -- however,the existing task with that task number may get
17015 -- changed during the update process. Hence,we need to process this
17016 -- task only after all tasks have been processed
17017 l_deferred_tasks_count := l_deferred_tasks_count +1;
17018 l_deferred_new_tasks_tbl(l_deferred_tasks_count) := p_tasks_in(i);
17019 l_deferred_tasks_index_tbl(l_deferred_tasks_count).task_index
17020 := i;
17021 -- l_deferred_tasks_index_tbl(l_deferred_tasks_count).task_index );
17022 ELSE
17023 --l_count := i;
17024 IF l_added_task_tbl.exists(1) THEN
17025 l_count := l_added_task_tbl.COUNT + 1;
17026 ELSE
17027 l_count := 1;
17028 END IF;
17029 l_added_task_tbl(l_count) := p_tasks_in(i);
17030 l_task_rec := l_added_task_tbl(l_count);
17031
17032 -- Check whether the Parent_Task_Reference is not null
17033 -- Following checking will allow you to create only sub_tasks
17034 -- under parent task.
17035 -- *O
17036 IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
17037 (p_tasks_in(i).pm_parent_task_reference IS NOT NULL
17038 AND p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
17039 THEN
17040 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
17041 -- pa_project_pvt.convert_pm_taskref_to_id_all
17042 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
17043 ( p_pa_project_id => l_project_id
17044 , p_structure_type => l_structure_type
17045 , p_pa_task_id => p_tasks_in(i).pa_parent_task_id
17046 , p_pm_task_reference => p_tasks_in(i).pm_parent_task_reference
17047 , p_out_task_id => l_task_id_out
17048 , p_return_status => l_return_status );
17049 l_ref_task_id := l_task_id_out; --aditi Added for Bug 3801314 : Bug 3627124
17050 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
17051 THEN
17052
17053 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17054
17055 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR)
17056 THEN
17057 p_multiple_task_msg := 'F';
17058 -- RAISE FND_API.G_EXC_ERROR;
17059 END IF;
17060
17061 PA_TASK_UTILS.Check_Create_Subtask_Ok
17062 ( x_task_id => l_task_id_out
17063 --bug 3010538 , x_validation_mode => 'R' --bug 2947492
17064 , x_err_code => l_err_code
17065 , x_err_stage => l_err_stage
17066 , x_err_stack => l_err_stack );
17067
17068 IF l_err_code <> 0
17069 THEN
17070 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
17071 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
17072 THEN
17073 pa_interface_utils_pub.map_new_amg_msg
17074 ( p_old_message_code => 'PA_CHECK_ADD_SUBTASK_FAILED'
17075 ,p_msg_attribute => 'CHANGE'
17076 ,p_resize_flag => 'Y'
17077 ,p_msg_context => 'ADDT'
17078 ,p_attribute1 => l_project_rec.segment1
17079 ,p_attribute2 => l_amg_task_number
17080 ,p_attribute3 => ''
17081 ,p_attribute4 => ''
17082 ,p_attribute5 => '');
17083 ELSE
17084 pa_interface_utils_pub.map_new_amg_msg
17085 ( p_old_message_code => l_err_stage
17086 ,p_msg_attribute => 'SPLIT'
17087 ,p_resize_flag => 'Y'
17088 ,p_msg_context => 'ADDST'
17089 ,p_attribute1 => l_project_rec.segment1
17090 ,p_attribute2 => l_amg_task_number
17091 ,p_attribute3 => ''
17092 ,p_attribute4 => ''
17093 ,p_attribute5 => '');
17094 END IF;
17095 END IF;
17096 l_tasks_out(i).return_status := FND_API.G_RET_STS_ERROR;
17097 p_multiple_task_msg := 'F';
17098 -- RAISE FND_API.G_EXC_ERROR;
17099
17100 END IF;
17101 END IF;
17102
17103 /* Code addition for bug 2982057 starts */
17104 IF l_task_rec.long_task_name IS NULL OR l_task_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17105 then
17106 l_task_rec.long_task_name := l_task_rec.task_name;
17107 else
17108 l_task_rec.long_task_name :=l_task_rec.long_task_name;
17109 end if;
17110 /* Code addition for bug 2982057 ends */
17111 PA_PROJECT_PVT.add_task_round_one
17112 (p_return_status => l_return_status,
17113 p_project_rec => l_project_rec,
17114 p_task_rec => l_task_rec,
17115 p_project_type_class_code => l_project_type_class_code,
17116 p_service_type_code => l_service_type_code,
17117 p_task_id => l_task_id);
17118 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17119 THEN
17120
17121 l_tasks_out(i).return_status := l_return_status;
17122 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17123
17124 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17125 THEN
17126 l_tasks_out(i).return_status := l_return_status;
17127 p_multiple_task_msg := 'F';
17128 -- RAISE FND_API.G_EXC_ERROR;
17129
17130 END IF;
17131 l_tasks_out(i).pa_task_id := l_task_id;
17132
17133 --used to pass task_id to add_task_round_two API
17134 l_task_id_tbl(l_count).pa_task_id := l_task_id;
17135 END IF;
17136
17137 ELSE -- (if l_task_id is not null, that means this is an
17138 -- existing task. so need to update the task )
17139 -- ---------------------------------------------------------------------------
17140
17141 -- * SPECIAL HANDLING FOR TASK NUMBER CHANGES. THIS IS TO TAKE CARE
17142 -- * OF TASK NUMBER INTERCHANGES . Eg: Task 2.1 being updated to
17143 -- * 2.3 and Task 2.3 being updated to 2.1
17144
17145 -- 1. Get the existing task number -
17146 -- 2. compare existing task number and the incoming task number
17147 -- required inputs task id and task number from the input array
17148 -- 3. If same, proceed with update_task
17149 -- else
17150 -- check whether the new number would be unique
17151 -- If yes, then proceed with the update
17152 -- else, get the task_id and pm_task reference of the
17153 -- original task - the one whose task number is = to the
17154 -- current task's new task number
17155 -- scan the input array to check whether this task's number
17156 -- is also being changed - required input - task array
17157 -- If no, then raise error,since cannot change the number
17158 -- of the current task
17159 -- If yes, then store the index of the current task
17160 -- in a different array and increment a counter - global array
17161 -- Let us call this array Task_Number_Updated_Array
17162 -- Update the task number of the current task as G_PA_MISS_CHAR || counter
17163 -- in the database
17164 -- process the next task in the array
17165
17166 --------------------------------------------------------------------------------
17167 l_proceed_with_update_flag := 'Y';
17168 ----dbms_output.put_line('calling pa_project_pvt.handle_task_number_changes l_task_id'||l_task_id);
17169 ----dbms_output.put_line('value of p_tasks_in(i).pa_task_number'||p_tasks_in(i).pa_task_number);
17170
17171 pa_project_pvt.handle_task_number_change
17172 (p_project_id => l_project_id,
17173 p_task_id => l_task_id,
17174 p_array_cell_number => i,
17175 p_in_task_number => p_tasks_in(i).pa_task_number,
17176 p_in_task_tbl => p_tasks_in,
17177 p_proceed_with_update_flag => l_proceed_with_update_flag,
17178 p_return_status => l_return_status);
17179
17180 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
17181 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17182 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17183 p_multiple_task_msg := 'F';
17184 -- RAISE FND_API.G_EXC_ERROR;
17185 END IF;
17186 ----dbms_output.put_line('value of l_proceed_with_update_flag'||l_proceed_with_update_flag);
17187 IF l_proceed_with_update_flag = 'Y' THEN
17188
17189 --Project Structures
17190 /** COMMENTED FOR BUG 3841742 :3832333 : This code was assuming that the tasks will
17191 be passed in the correct heirarchy and that the reference task id of the new task being
17192 created was set to the task_id of the most recently created task. This was leading to
17193 the error while updating tasks if the new task had a different top task than the one just
17194 created */
17195 /** v_first_index := p_tasks_in.first;
17196 v_last_index := p_tasks_in.last;
17197
17198 IF i > v_first_index AND
17199 l_tasks_out(i-1).pa_task_id IS NOT NULL AND
17200 l_tasks_out(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17201 THEN
17202 v_ref_task_id := l_tasks_out(i-1).pa_task_id;
17203 ELSIF i > v_first_index AND
17204 p_tasks_in(i-1).pa_task_id IS NOT NULL AND
17205 p_tasks_in(i-1).pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
17206 THEN
17207 v_ref_task_id := p_tasks_in(i-1).pa_task_id;
17208 ELSE
17209 v_ref_task_id := null;
17210 END IF; END OF COMMENTED PART FOR BUG 3841742 :3832333**/
17211 /** ADDED FOR BUG 3841742 : 3832333 :This code will assign parent_task_id to v_ref_task_id
17212 , if parent is not null.Else v_ref_task_id wil be set to null for top tasks.**/
17213 IF ((p_tasks_in(i).pa_parent_task_id IS NOT NULL AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
17214 OR
17215 (p_tasks_in(i).pm_parent_task_reference IS NOT NULL AND p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
17216 AND p_structure_in.structure_type = 'FINANCIAL'
17217
17218 THEN
17219
17220 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
17221 -- pa_project_pvt.convert_pm_taskref_to_id_all
17222 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
17223 ( p_pa_project_id => l_project_id
17224 , p_structure_type => l_structure_type
17225 , p_pa_task_id => p_tasks_in(i).pa_parent_task_id
17226 , p_pm_task_reference => p_tasks_in(i).pm_parent_task_reference
17227 , p_out_task_id => l_task_id_out
17228 , p_return_status => l_return_status );
17229 v_ref_task_id := l_task_id_out; --aditi Added for Bug 3798429: Bug 3801314
17230 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
17231 THEN
17232
17233 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17234
17235 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR)
17236 THEN
17237 p_multiple_task_msg := 'F';
17238 -- RAISE FND_API.G_EXC_ERROR;
17239 END IF;
17240 ELSE
17241 v_ref_task_id := null;
17242 END IF;
17243 /*** CHANGES END FOR BUG 3841742 : 3832333 **/
17244 -- --dbms_output.put_line('value of v_ref_task_id passed : '||v_ref_task_id||' AND for task_id :'||p_tasks_in(i).pa_task_number);
17245 -- --dbms_output.put_line('task etc Effort :'||p_tasks_in(i).etc_effort);
17246 -- --dbms_output.put_line('% complete'||p_tasks_in(i).percent_complete);
17247 --Project Structures
17248 /* Start changes for bug 10043448*/
17249 OPEN cur_inv_date(l_task_id);
17250 FETCH cur_inv_date INTO x_si_date ;
17251 IF cur_inv_date%NOTFOUND THEN
17252 CLOSE cur_inv_date ;
17253 ELSE
17254 IF (x_si_date IS NOT NULL AND
17255 p_tasks_in(i).task_completion_date IS NOT NULL AND
17256 p_tasks_in(i).task_completion_date < x_si_date ) THEN
17257 close cur_inv_date;
17258
17259 PA_UTILS.ADD_MESSAGE(
17260 p_app_short_name => 'PA'
17261 , p_msg_name => 'PA_SI_INVALID_FINISH_DATE'
17262 , p_token1 => 'SIFINISHDATE'
17263 , p_value1 => x_si_date);
17264
17265 RAISE FND_API.G_EXC_ERROR;
17266
17267 ELSE
17268 close cur_inv_date;
17269 END IF ;
17270 END IF ;
17271 /* End changes for bug 10043448*/
17272
17273 IF l_debug_mode = 'Y' THEN
17274 pa_debug.write(l_module_name,'Calling update Task',3);
17275 pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(i).etc_effort,3);
17276 pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(i).percent_complete,3);
17277 END IF;
17278 ----dbms_output.put_line('value of p_tasks_in(i).pa_task_number before calling update_task'||p_tasks_in(i).pa_task_number);
17279
17280 Update_Task (
17281 p_api_version_number => p_api_version_number,
17282 p_commit => FND_API.G_FALSE,
17283 p_msg_count => p_msg_count,
17284 p_msg_data => p_msg_data,
17285 p_return_status => l_return_status,
17286 p_pm_product_code => p_pm_product_code,
17287 p_pa_project_id => l_project_id,
17288 p_pa_task_id => l_task_id,
17289 --Project Structures
17290 p_ref_task_id => v_ref_task_id,
17291 --Project Structures
17292 p_pm_task_reference => p_tasks_in(i).pm_task_reference,
17293 p_task_number => p_tasks_in(i).pa_task_number,
17294 p_task_name => p_tasks_in(i).task_name,
17295 p_long_task_name => p_tasks_in(i).long_task_name,
17296 p_task_description => p_tasks_in(i).task_description,
17297 p_task_start_date => p_tasks_in(i).task_start_date,
17298 p_task_completion_date => p_tasks_in(i).task_completion_date,
17299 -- Start Fix for Bug # 1289156
17300 p_early_start_date => p_tasks_in(i).early_start_date,
17301 p_early_finish_date => p_tasks_in(i).early_finish_date,
17302 p_late_start_date => p_tasks_in(i).late_start_date,
17303 p_late_finish_date => p_tasks_in(i).late_finish_date,
17304 p_actual_start_date => p_tasks_in(i).actual_start_date,
17305 p_actual_finish_date => p_tasks_in(i).actual_finish_date,
17306 -- End Fix for Bug # 1289156
17307 p_pm_parent_task_reference => p_tasks_in(i).pm_parent_task_reference,
17308 p_pa_parent_task_id => p_tasks_in(i).pa_parent_task_id,
17309 p_address_id => p_tasks_in(i).address_id,
17310 p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id,
17311 p_service_type_code => p_tasks_in(i).service_type_code,
17312 p_task_manager_person_id => p_tasks_in(i).task_manager_person_id,
17313 p_billable_flag => p_tasks_in(i).billable_flag,
17314 p_chargeable_flag => p_tasks_in(i).chargeable_flag,
17315 p_ready_to_bill_flag => p_tasks_in(i).ready_to_bill_flag,
17316 p_ready_to_distribute_flag => p_tasks_in(i).ready_to_distribute_flag,
17317 p_limit_to_txn_controls_flag => p_tasks_in(i).limit_to_txn_controls_flag,
17318 p_labor_bill_rate_org_id => p_tasks_in(i).labor_bill_rate_org_id,
17319 p_labor_std_bill_rate_schdl => p_tasks_in(i).labor_std_bill_rate_schdl,
17320 p_labor_schedule_fixed_date => p_tasks_in(i).labor_schedule_fixed_date,
17321 p_labor_schedule_discount => p_tasks_in(i).labor_schedule_discount,
17322 p_nl_bill_rate_org_id => p_tasks_in(i).non_labor_bill_rate_org_id,
17323 p_nl_std_bill_rate_schdl => p_tasks_in(i).non_labor_std_bill_rate_schdl,
17324 p_nl_schedule_fixed_date => p_tasks_in(i).non_labor_schedule_fixed_date,
17325 p_nl_schedule_discount => p_tasks_in(i).non_labor_schedule_discount,
17326 p_labor_cost_multiplier_name => p_tasks_in(i).labor_cost_multiplier_name,
17327 p_cost_ind_rate_sch_id => p_tasks_in(i).cost_ind_rate_sch_id,
17328 p_rev_ind_rate_sch_id => p_tasks_in(i).rev_ind_rate_sch_id,
17329 p_inv_ind_rate_sch_id => p_tasks_in(i).inv_ind_rate_sch_id,
17330 p_cost_ind_sch_fixed_date => p_tasks_in(i).cost_ind_sch_fixed_date,
17331 p_rev_ind_sch_fixed_date => p_tasks_in(i).rev_ind_sch_fixed_date,
17332 p_inv_ind_sch_fixed_date => p_tasks_in(i).inv_ind_sch_fixed_date,
17333 p_labor_sch_type => p_tasks_in(i).labor_sch_type,
17334 p_nl_sch_type => p_tasks_in(i).non_labor_sch_type,
17335 p_tasks_dff => p_tasks_in(i).tasks_dff, --bug 6153503
17336 p_attribute_category => p_tasks_in(i).attribute_category,
17337 p_attribute1 => p_tasks_in(i).attribute1,
17338 p_attribute2 => p_tasks_in(i).attribute2,
17339 p_attribute3 => p_tasks_in(i).attribute3,
17340 p_attribute4 => p_tasks_in(i).attribute4,
17341 p_attribute5 => p_tasks_in(i).attribute5,
17342 p_attribute6 => p_tasks_in(i).attribute6,
17343 p_attribute7 => p_tasks_in(i).attribute7,
17344 p_attribute8 => p_tasks_in(i).attribute8,
17345 p_attribute9 => p_tasks_in(i).attribute9,
17346 p_attribute10 => p_tasks_in(i).attribute10,
17347 --bug 6153503
17348 p_attribute11 => p_tasks_in(i).attribute11,
17349 p_attribute12 => p_tasks_in(i).attribute12,
17350 p_attribute13 => p_tasks_in(i).attribute13,
17351 p_attribute14 => p_tasks_in(i).attribute14,
17352 p_attribute15 => p_tasks_in(i).attribute15,
17353 p_allow_cross_charge_flag =>
17354 p_tasks_in(i).allow_cross_charge_flag,
17355 p_project_rate_type => p_tasks_in(i).project_rate_type,
17356 p_project_rate_date => p_tasks_in(i).project_rate_date,
17357 p_cc_process_labor_flag => p_tasks_in(i).cc_process_labor_flag,
17358 p_labor_tp_schedule_id => p_tasks_in(i).labor_tp_schedule_id,
17359 p_labor_tp_fixed_date => p_tasks_in(i).labor_tp_fixed_date,
17360 p_cc_process_nl_flag => p_tasks_in(i).cc_process_nl_flag,
17361 p_nl_tp_schedule_id => p_tasks_in(i).nl_tp_schedule_id,
17362 p_nl_tp_fixed_date => p_tasks_in(i).nl_tp_fixed_date,
17363 p_receive_project_invoice_flag =>
17364 p_tasks_in(i).receive_project_invoice_flag,
17365 p_work_type_id => p_tasks_in(i).work_type_id,
17366 p_emp_bill_rate_schedule_id => p_tasks_in(i).emp_bill_rate_schedule_id,
17367 p_job_bill_rate_schedule_id => p_tasks_in(i).job_bill_rate_schedule_id,
17368 --Sakthi MCB
17369 p_non_lab_std_bill_rt_sch_id => p_tasks_in(i).non_lab_std_bill_rt_sch_id,
17370 p_taskfunc_cost_rate_type => p_tasks_in(i).taskfunc_cost_rate_type,
17371 p_taskfunc_cost_rate_date => p_tasks_in(i).taskfunc_cost_rate_date,
17372 --Sakthi MCB
17373 p_labor_disc_reason_code => p_tasks_in(i).labor_disc_reason_code,
17374 p_non_labor_disc_reason_code => p_tasks_in(i).non_labor_disc_reason_code,
17375 --project structures
17376 --bug 2744729, 2740565
17377 p_structure_type => l_structure_type,
17378 p_structure_version_id => p_structure_in.structure_version_id,
17379 P_OBLIGATION_START_DATE => p_tasks_in(i).OBLIGATION_START_DATE,
17380 P_OBLIGATION_FINISH_DATE => p_tasks_in(i).OBLIGATION_FINISH_DATE,
17381 P_ESTIMATED_START_DATE => p_tasks_in(i).ESTIMATED_START_DATE,
17382 P_ESTIMATED_FINISH_DATE => p_tasks_in(i).ESTIMATED_FINISH_DATE,
17383 P_BASELINE_START_DATE => p_tasks_in(i).BASELINE_START_DATE,
17384 P_BASELINE_FINISH_DATE => p_tasks_in(i).BASELINE_FINISH_DATE,
17385 P_CLOSED_DATE => p_tasks_in(i).CLOSED_DATE,
17386 P_WQ_UOM_CODE => p_tasks_in(i).WQ_UOM_CODE,
17387 P_WQ_ITEM_CODE => p_tasks_in(i).WQ_ITEM_CODE,
17388 P_STATUS_CODE => p_tasks_in(i).STATUS_CODE,
17389 P_WF_STATUS_CODE => p_tasks_in(i).WF_STATUS_CODE,
17390 P_PM_SOURCE_CODE => p_tasks_in(i).PM_SOURCE_CODE,
17391 P_PRIORITY_CODE => p_tasks_in(i).PRIORITY_CODE,
17392 P_MILESTONE_FLAG => p_tasks_in(i).MILESTONE_FLAG,
17393 P_CRITICAL_FLAG => p_tasks_in(i).CRITICAL_FLAG,
17394 P_INC_PROJ_PROGRESS_FLAG => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG,
17395 P_LINK_TASK_FLAG => p_tasks_in(i).LINK_TASK_FLAG,
17396 P_CALENDAR_ID => p_tasks_in(i).CALENDAR_ID,
17397 P_PLANNED_EFFORT => p_tasks_in(i).PLANNED_EFFORT,
17398 P_DURATION => p_tasks_in(i).DURATION,
17399 P_PLANNED_WORK_QUANTITY => p_tasks_in(i).PLANNED_WORK_QUANTITY,
17400 P_TASK_TYPE => p_tasks_in(i).TASK_TYPE,
17401 --bug 2856033
17402 p_scheduled_start_date => p_tasks_in(i).scheduled_start_date,
17403 p_scheduled_finish_date => p_tasks_in(i).scheduled_finish_date,
17404 --bug 2744729, 2740565
17405 --Project Structures
17406 --PA L Changes 2872708
17407 p_retirement_cost_flag => p_tasks_in(i).retirement_cost_flag,
17408 p_cint_eligible_flag => p_tasks_in(i).cint_eligible_flag,
17409 p_cint_stop_date => p_tasks_in(i).cint_stop_date,
17410 --End PA L changes 2872708
17411 p_out_pa_task_id => l_out_pa_task_id,
17412 p_out_pm_task_reference => l_out_pm_task_reference,
17413 p_update_task_structure => l_update_task_structure -- for bug 2931183 to indicate bulk structure processing
17414 -- modified p_update_task_structure value for bug 3548473 : Bug 3627124
17415 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
17416 ,p_ext_act_duration => p_tasks_in(i).ext_act_duration
17417 ,p_ext_remain_duration => p_tasks_in(i).ext_remain_duration
17418 ,p_ext_sch_duration => p_tasks_in(i).ext_sch_duration
17419 -- (End venkat) new params for bug #3450684 -------------------------------------------------
17420
17421 -- set the new params - bug #3654243 ----------------------------------------------
17422 ,p_base_percent_comp_deriv_code => p_tasks_in(i).base_percent_comp_deriv_code
17423 ,p_sch_tool_tsk_type_code => p_tasks_in(i).sch_tool_tsk_type_code
17424 ,p_constraint_type_code => p_tasks_in(i).constraint_type_code
17425 ,p_constraint_date => p_tasks_in(i).constraint_date
17426 ,p_free_slack => p_tasks_in(i).free_slack
17427 ,p_total_slack => p_tasks_in(i).total_slack
17428 ,p_effort_driven_flag => p_tasks_in(i).effort_driven_flag
17429 ,p_level_assignments_flag => p_tasks_in(i).level_assignments_flag
17430 ,p_gen_etc_source_code => p_tasks_in(i).gen_etc_source_code
17431 -- set the new params - bug #3654243 -------------------------------------------------
17432
17433
17434 -- For bug 3279981 Review
17435 ,p_invoice_method => p_tasks_in(i).invoice_method
17436 ,p_customer_id => p_tasks_in(i).customer_id
17437 ,p_is_wp_seperate_from_fn => l_is_wp_seperate_from_fn -- Added for bug#3451073
17438 --Added by rtarway, for BUG 3919800
17439 , p_etc_effort => p_tasks_in(i).etc_effort
17440 , p_percent_complete => p_tasks_in(i).percent_complete
17441 --Added by rtarway, for BUG 3919800
17442 ,p_calling_api => 'UPDATE_PROJECT' --Bug # 4199694
17443 ,p_adj_on_std_inv =>p_tasks_in(i).adj_on_std_inv /* Added for 12.2Payroll billing ER 11899223 */
17444 );
17445
17446 IF l_debug_mode = 'Y' THEN
17447 pa_debug.g_err_stage := 'After update_task first call...l_return_status=||l_return_status';
17448 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17449 END IF;
17450
17451
17452 ----dbms_output.put_line('Value of return status of update_task' ||l_return_status);
17453
17454 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17455 THEN
17456
17457 l_tasks_out(i).return_status := l_return_status;
17458 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17459
17460 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17461 THEN
17462 l_tasks_out(i).return_status := l_return_status;
17463 p_multiple_task_msg := 'F';
17464 -- RAISE FND_API.G_EXC_ERROR;
17465
17466 END IF;
17467
17468 l_tasks_out(i).pa_task_id := l_task_id;
17469 l_tasks_out(i).pm_task_reference := l_out_pm_task_reference;
17470 END IF; -- If l_proceed_with_update_flag = 'Y'
17471 END IF; -- If l_task_id IS NULL
17472
17473 i := p_tasks_in.next(i);
17474
17475 END LOOP;
17476
17477 END IF;
17478 -- Scan the Task_Number_Updated_Array
17479 -- If there are any records in this array,
17480 -- get the index that is already stored and
17481 -- call update_task for that task
17482 -- For eg: If the 8th and 14th task records had been
17483 -- marked for this special Task number update
17484 -- then call Update_task API for these two task records
17485
17486 --Project Structures
17487 v_first_index := p_tasks_in.first;
17488 v_last_index := p_tasks_in.last;
17489 --Project Structures
17490
17491 IF pa_project_check_pvt.G_index_counter > 0 THEN
17492 IF pa_project_check_pvt.G_task_num_updated_index_tbl.EXISTS (1) THEN
17493 FOR i in 1..pa_project_check_pvt.G_task_num_updated_index_tbl.COUNT LOOP
17494 l_array_index :=
17495 pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_index;
17496
17497 --Project Structures
17498 for j in v_first_index..v_last_index loop
17499 IF pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_id = p_tasks_in(j).pa_task_id AND
17500 j > v_first_index
17501 THEN
17502 v_ref_task_id := p_tasks_in(j-1).pa_task_id;
17503 ELSE
17504 v_ref_task_id := null;
17505 END IF;
17506 end loop;
17507 --Project Structures
17508
17509 IF l_debug_mode = 'Y' THEN
17510 pa_debug.write(l_module_name,'Calling update Task',3);
17511 pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(l_array_index).etc_effort,3);
17512 pa_debug.write(l_module_name,'Calling update Task'||p_tasks_in(l_array_index).percent_complete,3);
17513 END IF;
17514 Update_Task (
17515 p_api_version_number => p_api_version_number,
17516 p_commit => FND_API.G_FALSE,
17517 p_msg_count => p_msg_count,
17518 p_msg_data => p_msg_data,
17519 p_return_status => l_return_status,
17520 p_pm_product_code => p_pm_product_code,
17521 p_pa_project_id => l_project_id,
17522 p_pa_task_id =>
17523 pa_project_check_pvt.G_task_num_updated_index_tbl(i).task_id,
17524 --Project Structures
17525 p_ref_task_id => v_ref_task_id,
17526 --Project STRUCTUres
17527 p_pm_task_reference =>
17528 p_tasks_in(l_array_index).pm_task_reference,
17529 p_task_number =>
17530 p_tasks_in(l_array_index).pa_task_number,
17531 p_task_name =>
17532 p_tasks_in(l_array_index).task_name,
17533 p_long_task_name =>
17534 p_tasks_in(l_array_index).long_task_name,
17535 p_task_description =>
17536 p_tasks_in(l_array_index).task_description,
17537 p_task_start_date =>
17538 p_tasks_in(l_array_index).task_start_date,
17539 p_task_completion_date =>
17540 p_tasks_in(l_array_index).task_completion_date,
17541 -- Start Fix for Bug # 1289156
17542 p_early_start_date =>
17543 p_tasks_in(l_array_index).early_start_date,
17544 p_early_finish_date =>
17545 p_tasks_in(l_array_index).early_finish_date,
17546 p_late_start_date =>
17547 p_tasks_in(l_array_index).late_start_date,
17548 p_late_finish_date =>
17549 p_tasks_in(l_array_index).late_finish_date,
17550 p_actual_start_date =>
17551 p_tasks_in(l_array_index).actual_start_date,
17552 p_actual_finish_date =>
17553 p_tasks_in(l_array_index).actual_finish_date,
17554 -- End Fix for Bug # 1289156
17555 p_pm_parent_task_reference =>
17556 p_tasks_in(l_array_index).pm_parent_task_reference,
17557 p_pa_parent_task_id =>
17558 p_tasks_in(l_array_index).pa_parent_task_id,
17559 p_address_id =>
17560 p_tasks_in(l_array_index).address_id,
17561 p_carrying_out_organization_id =>
17562 p_tasks_in(l_array_index).carrying_out_organization_id,
17563 p_service_type_code =>
17564 p_tasks_in(l_array_index).service_type_code,
17565 p_task_manager_person_id =>
17566 p_tasks_in(l_array_index).task_manager_person_id,
17567 p_billable_flag =>
17568 p_tasks_in(l_array_index).billable_flag,
17569 p_chargeable_flag =>
17570 p_tasks_in(l_array_index).chargeable_flag,
17571 p_ready_to_bill_flag =>
17572 p_tasks_in(l_array_index).ready_to_bill_flag,
17573 p_ready_to_distribute_flag =>
17574 p_tasks_in(l_array_index).ready_to_distribute_flag,
17575 p_limit_to_txn_controls_flag =>
17576 p_tasks_in(l_array_index).limit_to_txn_controls_flag,
17577 p_labor_bill_rate_org_id =>
17578 p_tasks_in(l_array_index).labor_bill_rate_org_id,
17579 p_labor_std_bill_rate_schdl =>
17580 p_tasks_in(l_array_index).labor_std_bill_rate_schdl,
17581 p_labor_schedule_fixed_date =>
17582 p_tasks_in(l_array_index).labor_schedule_fixed_date,
17583 p_labor_schedule_discount =>
17584 p_tasks_in(l_array_index).labor_schedule_discount,
17585 p_nl_bill_rate_org_id =>
17586 p_tasks_in(l_array_index).non_labor_bill_rate_org_id,
17587 p_nl_std_bill_rate_schdl =>
17588 p_tasks_in(l_array_index).non_labor_std_bill_rate_schdl,
17589 p_nl_schedule_fixed_date =>
17590 p_tasks_in(l_array_index).non_labor_schedule_fixed_date,
17591 p_nl_schedule_discount =>
17592 p_tasks_in(l_array_index).non_labor_schedule_discount,
17593 p_labor_cost_multiplier_name =>
17594 p_tasks_in(l_array_index).labor_cost_multiplier_name,
17595 p_cost_ind_rate_sch_id =>
17596 p_tasks_in(l_array_index).cost_ind_rate_sch_id,
17597 p_rev_ind_rate_sch_id =>
17598 p_tasks_in(l_array_index).rev_ind_rate_sch_id,
17599 p_inv_ind_rate_sch_id =>
17600 p_tasks_in(l_array_index).inv_ind_rate_sch_id,
17601 p_cost_ind_sch_fixed_date =>
17602 p_tasks_in(l_array_index).cost_ind_sch_fixed_date,
17603 p_rev_ind_sch_fixed_date =>
17604 p_tasks_in(l_array_index).rev_ind_sch_fixed_date,
17605 p_inv_ind_sch_fixed_date =>
17606 p_tasks_in(l_array_index).inv_ind_sch_fixed_date,
17607 p_labor_sch_type =>
17608 p_tasks_in(l_array_index).labor_sch_type,
17609 p_nl_sch_type =>
17610 p_tasks_in(l_array_index).non_labor_sch_type,
17611 p_tasks_dff => p_tasks_in(l_array_index).tasks_dff, --bug 6153503
17612 p_attribute_category =>
17613 p_tasks_in(l_array_index).attribute_category,
17614 p_attribute1 => p_tasks_in(l_array_index).attribute1,
17615 p_attribute2 => p_tasks_in(l_array_index).attribute2,
17616 p_attribute3 => p_tasks_in(l_array_index).attribute3,
17617 p_attribute4 => p_tasks_in(l_array_index).attribute4,
17618 p_attribute5 => p_tasks_in(l_array_index).attribute5,
17619 p_attribute6 => p_tasks_in(l_array_index).attribute6,
17620 p_attribute7 => p_tasks_in(l_array_index).attribute7,
17621 p_attribute8 => p_tasks_in(l_array_index).attribute8,
17622 p_attribute9 => p_tasks_in(l_array_index).attribute9,
17623 p_attribute10 => p_tasks_in(l_array_index).attribute10,
17624 --bug 6153503
17625 p_attribute11 => p_tasks_in(l_array_index).attribute11,
17626 p_attribute12 => p_tasks_in(l_array_index).attribute12,
17627 p_attribute13 => p_tasks_in(l_array_index).attribute13,
17628 p_attribute14 => p_tasks_in(l_array_index).attribute14,
17629 p_attribute15 => p_tasks_in(l_array_index).attribute15,
17630 --Chnaged the index from i to l_array_index for BUG 4016583, rtarway
17631 p_allow_cross_charge_flag => p_tasks_in(l_array_index).allow_cross_charge_flag,
17632 p_project_rate_type => p_tasks_in(l_array_index).project_rate_type,
17633 p_project_rate_date => p_tasks_in(l_array_index).project_rate_date,
17634 p_cc_process_labor_flag => p_tasks_in(l_array_index).cc_process_labor_flag,
17635 p_labor_tp_schedule_id => p_tasks_in(l_array_index).labor_tp_schedule_id,
17636 p_labor_tp_fixed_date => p_tasks_in(l_array_index).labor_tp_fixed_date,
17637 p_cc_process_nl_flag => p_tasks_in(l_array_index).cc_process_labor_flag,
17638 p_nl_tp_schedule_id => p_tasks_in(l_array_index).nl_tp_schedule_id,
17639 p_nl_tp_fixed_date => p_tasks_in(l_array_index).nl_tp_fixed_date,
17640 p_receive_project_invoice_flag => p_tasks_in(l_array_index).receive_project_invoice_flag,
17641 p_work_type_id => p_tasks_in(l_array_index).work_type_id,
17642 p_emp_bill_rate_schedule_id => p_tasks_in(l_array_index).emp_bill_rate_schedule_id,
17643 /* Bug#2802918 - Changed the passing parameter from emp_bill_rate_schedule_id to
17644 job_bill_rate_schedule_id below */
17645 p_job_bill_rate_schedule_id => p_tasks_in(l_array_index).job_bill_rate_schedule_id,
17646 --Sakthi MCB
17647 p_non_lab_std_bill_rt_sch_id => p_tasks_in(l_array_index).non_lab_std_bill_rt_sch_id,
17648 p_taskfunc_cost_rate_type => p_tasks_in(l_array_index).taskfunc_cost_rate_type,
17649 p_taskfunc_cost_rate_date => p_tasks_in(l_array_index).taskfunc_cost_rate_date,
17650 --End Changes for BUG 4016583, rtarway
17651 --Sakthi MCB
17652 p_labor_disc_reason_code => p_tasks_in(l_array_index).labor_disc_reason_code,
17653 p_non_labor_disc_reason_code => p_tasks_in(l_array_index).non_labor_disc_reason_code,
17654 --project structures
17655 --bug 2744729, 2740565
17656 p_structure_type => l_structure_type,
17657 p_structure_version_id => p_structure_in.structure_version_id,
17658 P_OBLIGATION_START_DATE => p_tasks_in(l_array_index).OBLIGATION_START_DATE,
17659 P_OBLIGATION_FINISH_DATE => p_tasks_in(l_array_index).OBLIGATION_FINISH_DATE,
17660 P_ESTIMATED_START_DATE => p_tasks_in(l_array_index).ESTIMATED_START_DATE,
17661
17662 P_ESTIMATED_FINISH_DATE => p_tasks_in(l_array_index).ESTIMATED_FINISH_DATE,
17663 P_BASELINE_START_DATE => p_tasks_in(l_array_index).BASELINE_START_DATE,
17664 P_BASELINE_FINISH_DATE => p_tasks_in(l_array_index).BASELINE_FINISH_DATE,
17665 P_CLOSED_DATE => p_tasks_in(l_array_index).CLOSED_DATE,
17666 P_WQ_UOM_CODE => p_tasks_in(l_array_index).WQ_UOM_CODE,
17667 P_WQ_ITEM_CODE => p_tasks_in(l_array_index).WQ_ITEM_CODE,
17668 P_STATUS_CODE => p_tasks_in(l_array_index).STATUS_CODE,
17669 P_WF_STATUS_CODE => p_tasks_in(l_array_index).WF_STATUS_CODE,
17670 P_PM_SOURCE_CODE => p_tasks_in(l_array_index).PM_SOURCE_CODE,
17671 P_PRIORITY_CODE => p_tasks_in(l_array_index).PRIORITY_CODE,
17672 P_MILESTONE_FLAG => p_tasks_in(l_array_index).MILESTONE_FLAG,
17673 P_CRITICAL_FLAG => p_tasks_in(l_array_index).CRITICAL_FLAG,
17674 P_INC_PROJ_PROGRESS_FLAG => p_tasks_in(l_array_index).INC_PROJ_PROGRESS_FLAG,
17675 P_LINK_TASK_FLAG => p_tasks_in(l_array_index).LINK_TASK_FLAG,
17676 P_CALENDAR_ID => p_tasks_in(l_array_index).CALENDAR_ID,
17677 P_PLANNED_EFFORT => p_tasks_in(l_array_index).PLANNED_EFFORT,
17678 P_DURATION => p_tasks_in(l_array_index).DURATION,
17679 P_PLANNED_WORK_QUANTITY => p_tasks_in(l_array_index).PLANNED_WORK_QUANTITY,
17680 P_TASK_TYPE => p_tasks_in(l_array_index).TASK_TYPE,
17681 --bug 2856033
17682 p_scheduled_start_date => p_tasks_in(l_array_index).scheduled_start_date,
17683 p_scheduled_finish_date => p_tasks_in(l_array_index).scheduled_finish_date,
17684 --bug 2744729, 2740565
17685 --project structures
17686 --Bug 3018061
17687 --PA L Changes 2872708
17688 p_retirement_cost_flag => p_tasks_in(l_array_index).retirement_cost_flag,
17689 p_cint_eligible_flag => p_tasks_in(l_array_index).cint_eligible_flag,
17690 p_cint_stop_date => p_tasks_in(l_array_index).cint_stop_date,
17691 --End PA L changes 2872708
17692 --end Bug 3018061
17693
17694 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
17695 p_ext_act_duration => p_tasks_in(l_array_index).ext_act_duration,
17696 p_ext_remain_duration => p_tasks_in(l_array_index).ext_remain_duration,
17697 p_ext_sch_duration => p_tasks_in(l_array_index).ext_sch_duration,
17698 -- (End venkat) new params for bug #3450684 -------------------------------------------------
17699
17700 -- set the new params - bug #3654243 ----------------------------------------------
17701 p_base_percent_comp_deriv_code => p_tasks_in(l_array_index).base_percent_comp_deriv_code
17702 ,p_sch_tool_tsk_type_code => p_tasks_in(l_array_index).sch_tool_tsk_type_code
17703 ,p_constraint_type_code => p_tasks_in(l_array_index).constraint_type_code
17704 ,p_constraint_date => p_tasks_in(l_array_index).constraint_date
17705 ,p_free_slack => p_tasks_in(l_array_index).free_slack
17706 ,p_total_slack => p_tasks_in(l_array_index).total_slack
17707 ,p_effort_driven_flag => p_tasks_in(l_array_index).effort_driven_flag
17708 ,p_level_assignments_flag => p_tasks_in(l_array_index).level_assignments_flag
17709 ,p_gen_etc_source_code => p_tasks_in(l_array_index).gen_etc_source_code
17710 ,p_invoice_method => p_tasks_in(l_array_index).invoice_method
17711 ,p_customer_id => p_tasks_in(l_array_index).customer_id,
17712 -- set the new params - bug #3654243 -------------------------------------------------
17713
17714
17715 p_out_pa_task_id => l_out_pa_task_id,
17716 p_out_pm_task_reference => l_out_pm_task_reference,
17717 p_update_task_structure => l_update_task_structure, -- for bug 2931183 to indicate bulk structure processing
17718 --Added by rtarway, for BUG 3919800
17719 p_etc_effort => p_tasks_in(l_array_index).etc_effort,
17720 p_percent_complete => p_tasks_in(l_array_index).percent_complete
17721 --Added by rtarway, for BUG 3919800
17722 ,p_calling_api => 'UPDATE_PROJECT' --Bug # 4199694
17723 ,p_adj_on_std_inv => p_tasks_in(l_array_index).adj_on_std_inv /* Added for 12.2Payroll billing ER 11899223 */
17724
17725 ); -- modified p_update_task_structure value for bug 3548473 : Bug 3627124
17726
17727 IF l_debug_mode = 'Y' THEN
17728 pa_debug.g_err_stage := 'After update_task second call...l_return_status=||l_return_status';
17729 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17730 END IF;
17731
17732
17733 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
17734 l_tasks_out(l_array_index).return_status := l_return_status;
17735 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17736 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17737 l_tasks_out(l_array_index).return_status := l_return_status;
17738 p_multiple_task_msg := 'F';
17739 -- RAISE FND_API.G_EXC_ERROR;
17740 END IF;
17741 l_tasks_out(l_array_index).pa_task_id := l_out_pa_task_id;
17742 l_tasks_out(l_array_index).pm_task_reference := l_out_pm_task_reference;
17743 END LOOP;
17744 END IF; -- IF pa_project_check_pvt.G_task_num_updated_index_tbl.EXISTS (1)
17745 END IF; -- IF pa_project_check_pvt.G_index_counter > 0
17746
17747 /** Code change begin by aditi for Bug 4120380 **/
17748 /** The code below will update the task_numbers of the tasks passed via update_project script
17749 back to their original value viz. it'll crop the '-' added to aviod the constraint check in
17750 PA_TASKS and PA_PROJ_ELEMENTS. **/
17751
17752 /* bug #5243018: Reverting the fix in bug 4120380.
17753 i := 1;
17754 IF p_tasks_in.exists(i)
17755 THEN
17756 WHILE i IS NOT NULL LOOP
17757 UPDATE pa_tasks
17758 SET task_number = p_tasks_in(i).pa_task_number
17759 WHERE task_number = '-'||p_tasks_in(i).pa_task_number
17760 AND project_id = l_project_id; -- BUG 4174041, rtarway
17761 ----dbms_output.put_line('value of sql%rowcount'||sql%rowcount);
17762 UPDATE pa_proj_elements
17763 SET element_number = p_tasks_in(i).pa_task_number
17764 WHERE element_number = '-'||p_tasks_in(i).pa_task_number
17765 AND project_id = l_project_id; -- BUG 4174041, rtarway
17766 ----dbms_output.put_line('value of recod updates in pa_proj_elements'||sql%rowcount);
17767 i := p_tasks_in.next(i);
17768 END LOOP;
17769 End if;
17770 Revert end bug #5243018 */
17771
17772 /* Code change end by aditi for Bug 4120380 **/
17773
17774 -- Now process the deferred new tasks, since all tasks have been processed
17775
17776 IF l_deferred_tasks_count > 0 THEN
17777 FOR i in 1..l_deferred_new_tasks_tbl.COUNT LOOP
17778 IF l_added_task_tbl.exists(1) THEN
17779 l_count := l_added_task_tbl.COUNT + 1;
17780 ELSE
17781 l_count := 1;
17782 END IF;
17783 l_added_task_tbl(l_count):= l_deferred_new_tasks_tbl(i);
17784 l_task_rec := l_deferred_new_tasks_tbl(i);
17785 l_orig_index := l_deferred_tasks_index_tbl(i).task_index;
17786
17787 -- Actions performed using the APIs would be subject to
17788 -- function security. If the responsibility does not allow
17789 -- such functions to be executed, the API should not proceed further
17790 -- since the user does not have access to such functions
17791
17792 -- Function security procedure check whether user have the
17793 -- privilege to add task or not
17794
17795 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
17796 --above before checking for update_project function.
17797
17798 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
17799 (p_api_version_number => p_api_version_number,
17800 p_responsibility_id => l_resp_id,
17801 p_function_name => 'PA_PM_ADD_TASK',
17802 p_msg_count => l_msg_count,
17803 p_msg_data => l_msg_data,
17804 p_return_status => l_return_status,
17805 p_function_allowed => l_function_allowed);
17806
17807 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17808 THEN
17809 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17810
17811 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17812 THEN
17813 p_multiple_task_msg := 'F';
17814 -- RAISE FND_API.G_EXC_ERROR;
17815 END IF;
17816
17817 IF l_function_allowed = 'N' THEN
17818 pa_interface_utils_pub.map_new_amg_msg
17819 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
17820 ,p_msg_attribute => 'CHANGE'
17821 ,p_resize_flag => 'Y'
17822 ,p_msg_context => 'GENERAL'
17823 ,p_attribute1 => ''
17824 ,p_attribute2 => ''
17825 ,p_attribute3 => ''
17826 ,p_attribute4 => ''
17827 ,p_attribute5 => '');
17828 p_return_status := FND_API.G_RET_STS_ERROR;
17829 p_multiple_task_msg := 'F';
17830 -- RAISE FND_API.G_EXC_ERROR;
17831 END IF;
17832
17833 /* Code addition for bug 2982057 starts */
17834 IF l_task_rec.long_task_name IS NULL OR l_task_rec.long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17835 then
17836 l_task_rec.long_task_name := l_task_rec.task_name;
17837 else
17838 l_task_rec.long_task_name :=l_task_rec.long_task_name;
17839 end if;
17840 /* Code addition for bug 2982057 ends */
17841 --DHI ER, bug 4413568
17842 IF ( p_update_mode = 'PA_UPD_TASK_ATTR' ) THEN --bug 4534919
17843 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
17844 p_msg_name => 'PA_WBS_CANT_CHANGE');
17845 RAISE FND_API.G_EXC_ERROR;
17846 END IF;
17847 PA_PROJECT_PVT.add_task_round_one
17848 (p_return_status => l_return_status,
17849 p_project_rec => l_project_rec,
17850 p_task_rec => l_task_rec,
17851 p_project_type_class_code => l_project_type_class_code,
17852 p_service_type_code => l_service_type_code,
17853 p_task_id => l_task_id);
17854
17855 IF l_debug_mode = 'Y' THEN
17856 pa_debug.g_err_stage := 'After PA_PROJECT_PVT.add_task_round_one...l_return_status=||l_return_status';
17857 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17858 END IF;
17859
17860
17861 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
17862
17863 l_tasks_out(l_orig_index).return_status := l_return_status;
17864 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17865
17866 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
17867 l_tasks_out(l_orig_index).return_status := l_return_status;
17868 p_multiple_task_msg := 'F';
17869 -- RAISE FND_API.G_EXC_ERROR;
17870 END IF;
17871 l_tasks_out(l_orig_index).pa_task_id := l_task_id;
17872 --used to pass task_id to add_task_round_two API
17873 l_task_id_tbl(l_count).pa_task_id := l_task_id;
17874 END LOOP;
17875
17876 END IF;
17877
17878 -- For all the tasks which were inserted by calling add_task_round_one,
17879 -- need to call add_task_round_two,which would update the parent task
17880 -- information. such tasks are stored in the l_added_task_tbl
17881
17882 i:= l_added_task_tbl.first;
17883
17884 IF l_added_task_tbl.exists(i)
17885 THEN
17886
17887 WHILE i IS NOT NULL LOOP
17888
17889 l_task_rec := l_added_task_tbl(i);
17890
17891 -- Change required here for bug 3548473 : 3627124 (modifying the changes done for bug 2931183) :
17892 /*
17893 1. Check if the user wants to pass the entire struct or single tasks.
17894 2. If pass_entire_struct param is 'Y', let the prog flow be as it is now.
17895 3. If the pass_entire_struct param is 'N', then call PA_PROJECT_PVT.add_task_round_two with
17896 p_create_task_structure => 'Y' parameter.
17897 */
17898 /* The code below was added for Bug 3841742 : 3857419 .This is to ensure that add_task_round_two is called
17899 for all the tasks that have inserted through add_task_round_one for updating wbs_level, top_task_id and
17900 parent_task_id. The code below will default l_ref_task_id to parent_task_id, if the latter is not null
17901 .Else l_ref_task_id will be null*/
17902 /* CHANGES start FOR Bug 3841742 : 3857419 ADITI*/
17903 IF (l_task_rec.pa_parent_task_id IS NOT NULL AND l_task_rec.pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) OR
17904 (l_task_rec.pm_parent_task_reference IS NOT NULL
17905 AND l_task_rec.pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
17906 THEN
17907 -- Bug 5262740 Changed pa_project_pvt.convert_pm_taskref_to_id call to
17908 -- pa_project_pvt.convert_pm_taskref_to_id_all
17909 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
17910 ( p_pa_project_id => l_project_id
17911 , p_structure_type => l_structure_type
17912 , p_pa_task_id => l_task_rec.pa_parent_task_id
17913 , p_pm_task_reference => l_task_rec.pm_parent_task_reference
17914 , p_out_task_id => l_task_id_out
17915 , p_return_status => l_return_status );
17916 -- --dbms_output.put_line('Value of out task'||l_task_id_out);
17917 l_ref_task_id := l_task_id_out; --aditi Added for Bug 3548473
17918
17919 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR)
17920 THEN
17921
17922 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17923
17924 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR)
17925 THEN
17926 p_multiple_task_msg := 'F';
17927 -- RAISE FND_API.G_EXC_ERROR;
17928 END IF;
17929 ELSE
17930 l_ref_task_id := null;
17931
17932 END IF;
17933 /* CHANGES end FOR Bug 3841742 : 3857419 ADITI */
17934
17935 -- Bug 7277840 : Update PM_PROJECT_CODE
17936 IF p_pm_product_code <> 'WORKPLAN' AND p_pm_product_code IS NOT NULL
17937 AND p_pm_product_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
17938 THEN
17939 UPDATE pa_tasks
17940 SET pm_product_code = p_pm_product_code
17941 WHERE task_id = l_task_id_tbl(i).pa_task_id;
17942 END IF;
17943
17944
17945 PA_PROJECT_PVT.add_task_round_two
17946 (p_return_status => l_return_status,
17947 p_project_rec => l_project_rec,
17948 p_task_id => l_task_id_tbl(i).pa_task_id,
17949 p_task_rec => l_task_rec,
17950 --project structure
17951 p_ref_task_id => l_ref_task_id,-- aditi changed from null to l_ref_task_id for bug 3801314 : Bug 3627124
17952 p_tasks_in => p_tasks_in,
17953 p_tasks_out => l_tasks_out,
17954 p_task_version_id => l_task_version_id,
17955 p_create_task_structure => l_update_task_structure -- Bug 2931183 distinguishes bulk calling context
17956 --project structure
17957 ); -- modified p_update_task_structure value for bug 3548473 : 3627124
17958
17959 IF l_debug_mode = 'Y' THEN
17960 pa_debug.g_err_stage := 'After calling PA_PROJECT_PVT.add_task_round_two l_return_status='||l_return_status;
17961 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
17962 END IF;
17963
17964
17965 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
17966 THEN
17967
17968 l_tasks_out(i).return_status := l_return_status;
17969 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
17970
17971 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
17972 THEN
17973
17974 l_tasks_out(i).return_status := l_return_status;
17975 l_tasks_out(i).task_version_id := l_task_version_id;
17976 p_multiple_task_msg := 'F';
17977 -- RAISE FND_API.G_EXC_ERROR;
17978
17979
17980 END IF;
17981
17982 i := l_added_task_tbl.next(i);
17983
17984 END LOOP;
17985 --Commenting the complete code and moving it below to resolve bug 6016529
17986 -- PROCESS_WBS_UPDATES should get called after all the updation related to task and project is done.
17987 -- so it is moved after call for PROCESS_TASK_STRUCTURE_BULK is done.
17988 /* Bug 6163090
17989
17990 -- Changes start for Bug# 3931805
17991 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
17992 THEN -- publishing flow.
17993 PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
17994 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
17995 PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
17996
17997 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
17998 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
17999 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
18000 PA_PROJECT_PUB.G_Published_version_exists = 'N')
18001 THEN
18002 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
18003 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
18004 ,p_structure_version_id => l_structure_version_id ) ;
18005 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
18006 IF p_project_in.process_mode = 'ONLINE' THEN
18007 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
18008 ,p_project_id => l_project_id
18009 ,p_structure_version_id => l_structure_version_id
18010 ,x_return_status => l_return_status
18011 ,x_msg_count => l_msg_count
18012 ,x_msg_data => l_msg_data ) ;
18013 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18014 THEN
18015 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18016 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18017 THEN
18018 RAISE FND_API.G_EXC_ERROR;
18019 END IF;
18020 ELSIF p_project_in.process_mode = 'CONCURRENT' THEN
18021
18022 PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
18023 ,p_project_id => l_project_id
18024 ,p_structure_version_id => l_structure_version_id
18025 ,x_return_status => l_return_status
18026 ,x_msg_count => l_msg_count
18027 ,x_msg_data => l_msg_data ) ;
18028 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18029 THEN
18030 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18031 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18032 THEN
18033 RAISE FND_API.G_EXC_ERROR;
18034 END IF;
18035 END IF ;
18036 END IF ;
18037 END IF ;
18038 END IF;
18039 -- Changes end for Bug# 3931805
18040 */--Bug 6163090
18041
18042 --bug 3010538 and 3035902
18043 --The following code should be executed when a new task is added
18044 --to a working version( with already existing a published ver ) and
18045 --then its published.
18046 --In other words the code is executed while publishing to sync up with
18047 --pa_tasks. In regular flow for adding new tasks we call this api
18048 --from the wrapper process_task_structure_bulk api.
18049 --
18050 IF l_structure_type = 'FINANCIAL' AND
18051 p_pm_product_code = 'WORKPLAN'
18052 THEN
18053 pa_fp_refresh_elements_pub.set_process_flag_proj(
18054 p_project_id => l_project_id
18055 ,p_request_id => null
18056 ,p_process_code => null
18057 ,p_refresh_required_flag => 'Y'
18058 ,x_return_status => l_return_status
18059 ,x_msg_count => l_msg_count
18060 ,x_msg_data => l_msg_data );
18061
18062 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
18063 RAISE FND_API.G_EXC_ERROR;
18064 end if;
18065 END IF;
18066 --bug 3010538 and 3035902
18067
18068 END IF; --tasks table not empty
18069
18070 --project structure
18071 ELSIF p_tasks_in.exists(i)
18072 --AND p_structure_in.structure_type = 'WORKPLAN' --bug 2738747
18073 AND l_structure_type = 'WORKPLAN' --bug 2738747
18074 THEN
18075
18076 IF G_WP_STR_EXISTS = 'N'
18077 THEN
18078 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18079 THEN
18080 pa_interface_utils_pub.map_new_amg_msg
18081 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
18082 ,p_msg_attribute => 'CHANGE'
18083 ,p_resize_flag => 'N'
18084 ,p_msg_context => 'GENERAL'
18085 ,p_attribute1 => ''
18086 ,p_attribute2 => ''
18087 ,p_attribute3 => ''
18088 ,p_attribute4 => ''
18089 ,p_attribute5 => '');
18090 END IF;
18091 RAISE FND_API.G_EXC_ERROR;
18092 END IF;
18093
18094 v_first_index := i;
18095
18096 IF ( p_structure_in.structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
18097 p_structure_in.structure_version_id IS NULL ) AND l_structure_version_id IS NULL
18098 THEN
18099 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18100 THEN
18101 pa_interface_utils_pub.map_new_amg_msg
18102 ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
18103 ,p_msg_attribute => 'CHANGE'
18104 ,p_resize_flag => 'N'
18105 ,p_msg_context => 'GENERAL'
18106 ,p_attribute1 => ''
18107 ,p_attribute2 => ''
18108 ,p_attribute3 => ''
18109 ,p_attribute4 => ''
18110 ,p_attribute5 => '');
18111 END IF;
18112 RAISE FND_API.G_EXC_ERROR;
18113 l_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
18114 ELSIF ( p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM AND
18115 p_structure_in.structure_version_id IS NOT NULL )
18116 THEN
18117 l_structure_version_id := p_structure_in.structure_version_id;
18118 END IF;
18119
18120 --Commented The below loop for bug 2931183 so to do the below done processing in bulk
18121
18122 /* WHILE i IS NOT NULL LOOP
18123
18124 l_task_id := NULL;
18125
18126 l_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
18127
18128 --get the previous task
18129 IF i = v_first_index
18130 THEN
18131 v_ref_task_id := null;
18132 ELSIF (l_tasks_out(i-1).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
18133 l_tasks_out(i-1).pa_task_id IS NULL )
18134 THEN
18135 v_ref_task_id := p_tasks_in(i-1).pa_task_id;
18136 ELSE
18137 v_ref_task_id := l_tasks_out(i-1).pa_task_id;
18138 END IF;
18139
18140 IF (p_tasks_in(i).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18141 OR p_tasks_in(i).pa_task_id IS NULL )
18142 THEN
18143 IF p_tasks_in(i).pm_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18144 OR p_tasks_in(i).pm_task_reference IS NULL
18145 THEN
18146 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18147 THEN
18148 pa_interface_utils_pub.map_new_amg_msg
18149 ( p_old_message_code => 'PA_TASK_REF_AND_ID_MISSING'
18150 ,p_msg_attribute => 'CHANGE'
18151 ,p_resize_flag => 'N'
18152 ,p_msg_context => 'PROJ'
18153 ,p_attribute1 => l_project_rec.segment1
18154 ,p_attribute2 => ''
18155 ,p_attribute3 => ''
18156 ,p_attribute4 => ''
18157 ,p_attribute5 => '');
18158 END IF;
18159 l_tasks_out(i).return_status := FND_API.G_RET_STS_ERROR ;
18160 RAISE FND_API.G_EXC_ERROR;
18161 ELSE
18162 --If pm_task_reference is provided and task id is null then its a create
18163 --create task
18164 /* --get the previous task
18165 IF i = v_first_index
18166 THEN
18167 v_ref_task_id := null;
18168 ELSIF (l_tasks_out(i-1).pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
18169 l_tasks_out(i-1).pa_task_id IS NULL )
18170 THEN
18171 v_ref_task_id := p_tasks_in(i-1).pa_task_id;
18172 ELSE
18173 v_ref_task_id := l_tasks_out(i-1).pa_task_id;
18174 END IF;
18175
18176 */
18177
18178 -- Actions performed using the APIs would be subject to
18179 -- function security. If the responsibility does not allow
18180 -- such functions to be executed, the API should not proceed further
18181 -- since the user does not have access to such functions
18182
18183 -- Function security procedure check whether user have the
18184 -- privilege to add task or not
18185
18186 --Bug 2471668: we do not need to assign project id to the global variable as it is already done
18187 --above before checking for update_project function.
18188
18189 /* PA_PM_FUNCTION_SECURITY_PUB.check_function_security
18190 (p_api_version_number => p_api_version_number,
18191 p_responsibility_id => l_resp_id,
18192 p_function_name => 'PA_PM_ADD_TASK',
18193 p_msg_count => l_msg_count,
18194 p_msg_data => l_msg_data,
18195 p_return_status => l_return_status,
18196 p_function_allowed => l_function_allowed);
18197
18198 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18199 THEN
18200 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18201 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18202 THEN
18203 p_multiple_task_msg := 'F';
18204 -- RAISE FND_API.G_EXC_ERROR;
18205 END IF;
18206
18207 IF l_function_allowed = 'N' THEN
18208 pa_interface_utils_pub.map_new_amg_msg
18209 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
18210 ,p_msg_attribute => 'CHANGE'
18211 ,p_resize_flag => 'Y'
18212 ,p_msg_context => 'GENERAL'
18213 ,p_attribute1 => ''
18214 ,p_attribute2 => ''
18215 ,p_attribute3 => ''
18216 ,p_attribute4 => ''
18217 ,p_attribute5 => '');
18218 p_return_status := FND_API.G_RET_STS_ERROR;
18219 p_multiple_task_msg := 'F';
18220 -- RAISE FND_API.G_EXC_ERROR;
18221 END IF;
18222
18223 IF (p_tasks_in(i).pa_parent_task_id IS NOT NULL
18224 AND p_tasks_in(i).pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
18225 THEN
18226 v_parent_task_id := p_tasks_in(i).pa_parent_task_id;
18227 ELSIF (p_tasks_in(i).pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
18228 AND p_tasks_in(i).pm_parent_task_reference IS NOT NULL)
18229 THEN
18230 --convert pm_parent_task_reference to parent_task_id.
18231 --All the parent tasks are created first then child tasks are created. See TRM for AMG load_task api.
18232 PA_PROJ_TASK_STRUC_PUB.convert_pm_parent_task_ref(
18233 p_pm_parent_task_reference => p_tasks_in(i).pm_parent_task_reference
18234 ,p_project_id => l_project_id
18235 ,x_parent_task_id => v_parent_task_id
18236 ,x_return_status => l_return_status
18237 );
18238
18239 IF l_return_status <> FND_API.G_RET_STS_SUCCESS
18240 THEN
18241 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18242 THEN
18243 pa_interface_utils_pub.map_new_amg_msg
18244 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
18245 ,p_msg_attribute => 'CHANGE'
18246 ,p_resize_flag => 'N'
18247 ,p_msg_context => 'TASK'
18248 ,p_attribute1 => l_amg_segment1
18249 ,p_attribute2 => l_amg_task_number
18250 ,p_attribute3 => ''
18251 ,p_attribute4 => ''
18252 ,p_attribute5 => '');
18253 END IF;
18254 RAISE FND_API.G_EXC_ERROR;
18255 END IF;
18256
18257 ELSE
18258 v_parent_task_id := null;
18259 END IF;
18260
18261 PA_PROJ_TASK_STRUC_PUB.CREATE_TASK_STRUCTURE(
18262 p_project_id => l_project_id
18263 ,p_task_id => p_tasks_in(i).pa_task_id
18264 ,p_parent_task_id => v_parent_task_id
18265 ,p_ref_task_id => v_ref_task_id
18266 ,p_task_number => p_tasks_in(i).pa_task_number
18267 ,p_task_name => p_tasks_in(i).long_task_name --bug 2833194
18268 ,p_task_description => p_tasks_in(i).task_description
18269 ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
18270 ,p_calling_module => 'AMG'
18271 --,p_structure_type => p_structure_in.structure_type --bug 2738747
18272 ,p_structure_type => l_structure_type --bug 2738747
18273 ,p_OBLIGATION_START_DATE => p_tasks_in(i).OBLIGATION_START_DATE
18274 ,p_OBLIGATION_FINISH_DATE => p_tasks_in(i).OBLIGATION_FINISH_DATE
18275 ,p_ESTIMATED_START_DATE => p_tasks_in(i).ESTIMATED_START_DATE
18276 ,p_ESTIMATED_FINISH_DATE => p_tasks_in(i).ESTIMATED_FINISH_DATE
18277 ,p_BASELINE_START_DATE => p_tasks_in(i).BASELINE_START_DATE
18278 ,p_BASELINE_FINISH_DATE => p_tasks_in(i).BASELINE_FINISH_DATE
18279 ,p_CLOSED_DATE => p_tasks_in(i).CLOSED_DATE
18280 ,p_WQ_UOM_CODE => p_tasks_in(i).WQ_UOM_CODE
18281 ,p_WQ_ITEM_CODE => p_tasks_in(i).WQ_ITEM_CODE
18282 ,p_STATUS_CODE => p_tasks_in(i).STATUS_CODE
18283 ,p_WF_STATUS_CODE => p_tasks_in(i).WF_STATUS_CODE
18284 ,p_PM_SOURCE_CODE => l_pm_product_code --bug 2665656
18285 ,p_PRIORITY_CODE => p_tasks_in(i).PRIORITY_CODE
18286 ,p_MILESTONE_FLAG => p_tasks_in(i).MILESTONE_FLAG
18287 ,p_CRITICAL_FLAG => p_tasks_in(i).CRITICAL_FLAG
18288 ,p_INC_PROJ_PROGRESS_FLAG => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
18289 ,p_LINK_TASK_FLAG => p_tasks_in(i).LINK_TASK_FLAG
18290 ,p_CALENDAR_ID => p_tasks_in(i).CALENDAR_ID
18291 ,p_PLANNED_EFFORT => p_tasks_in(i).PLANNED_EFFORT
18292 ,p_DURATION => p_tasks_in(i).DURATION
18293 ,p_PLANNED_WORK_QUANTITY => p_tasks_in(i).PLANNED_WORK_QUANTITY
18294 ,p_TASK_TYPE => p_tasks_in(i).TASK_TYPE
18295 ,p_actual_start_date => p_tasks_in(i).actual_start_date
18296 ,p_actual_finish_date => p_tasks_in(i).actual_finish_date
18297 ,p_early_start_date => p_tasks_in(i).early_start_date
18298 ,p_early_finish_date => p_tasks_in(i).early_finish_date
18299 ,p_late_start_date => p_tasks_in(i).late_start_date
18300 ,p_late_finish_date => p_tasks_in(i).late_finish_date
18301 ,p_scheduled_start_date => p_tasks_in(i).scheduled_start_date
18302 ,p_scheduled_finish_date => p_tasks_in(i).scheduled_finish_date
18303 ,P_PM_SOURCE_reference => p_tasks_in(i).pm_task_reference
18304 ,p_location_id => p_tasks_in(i).address_id
18305 ,p_manager_person_id => p_tasks_in(i).task_manager_person_id
18306 ,p_structure_version_id => l_structure_version_id
18307 ,x_task_version_id => l_task_version_id
18308 ,x_task_id => v_task_id
18309 ,x_msg_count => l_msg_count
18310 ,x_msg_data => l_msg_data
18311 ,x_return_status => l_return_status
18312 );
18313
18314 -- assign the appropriate values to the task out record
18315 l_tasks_out(i).return_status := l_return_status;
18316 l_tasks_out(i).pa_task_id := v_task_id;
18317 l_tasks_out(i).task_version_id := l_task_version_id;
18318 l_tasks_out(i).pm_task_reference := p_tasks_in(i).pm_task_reference;
18319
18320 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18321 THEN
18322 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18323
18324 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18325 THEN
18326 p_multiple_task_msg := 'F';
18327 RAISE FND_API.G_EXC_ERROR;
18328 END IF;
18329
18330 i := p_tasks_in.next(i);
18331
18332 END IF; --<<p_tasks_in(i).pm_task_reference>>
18333 ELSE
18334 --For update, task_id should be provided. See TRM for AMG
18335 --update task
18336
18337 -- Actions performed using the APIs would be subject to
18338 -- function security. If the responsibility does not allow
18339 -- such functions to be executed, the API should not proceed further
18340 -- since the user does not have access to such functions
18341
18342
18343 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
18344 (p_api_version_number => p_api_version_number,
18345 p_responsibility_id => l_resp_id,
18346 p_function_name => 'PA_PM_UPDATE_TASK',
18347 p_msg_count => l_msg_count,
18348 p_msg_data => l_msg_data,
18349 p_return_status => l_return_status,
18350 p_function_allowed => l_function_allowed );
18351
18352 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18353 THEN
18354 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18355
18356 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18357 THEN
18358 RAISE FND_API.G_EXC_ERROR;
18359 END IF;
18360 IF l_function_allowed = 'N' THEN
18361 pa_interface_utils_pub.map_new_amg_msg
18362 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
18363 ,p_msg_attribute => 'CHANGE'
18364 ,p_resize_flag => 'Y'
18365 ,p_msg_context => 'GENERAL'
18366 ,p_attribute1 => ''
18367 ,p_attribute2 => ''
18368 ,p_attribute3 => ''
18369 ,p_attribute4 => ''
18370 ,p_attribute5 => '');
18371 p_return_status := FND_API.G_RET_STS_ERROR;
18372 RAISE FND_API.G_EXC_ERROR;
18373 END IF;
18374
18375 PA_PROJ_TASK_STRUC_PUB.UPDATE_TASK_STRUCTURE(
18376 p_project_id => l_project_id
18377 ,p_task_id => p_tasks_in(i).pa_task_id
18378 ,p_ref_task_id => v_ref_task_id
18379 ,p_task_number => p_tasks_in(i).pa_task_number
18380 ,p_task_name => p_tasks_in(i).long_task_name --bug 2833194
18381 ,p_task_description => p_tasks_in(i).task_description
18382 ,p_carrying_out_organization_id => p_tasks_in(i).carrying_out_organization_id
18383 ,p_calling_module => 'AMG'
18384 --,p_structure_type => p_structure_in.structure_type --bug 2738747
18385 ,p_structure_type => l_structure_type --bug 2738747
18386 ,p_pm_product_code => p_tasks_in(i).PM_SOURCE_CODE
18387 ,p_pm_task_reference => p_tasks_in(i).pm_task_reference
18388 ,p_OBLIGATION_START_DATE => p_tasks_in(i).OBLIGATION_START_DATE
18389 ,p_OBLIGATION_FINISH_DATE => p_tasks_in(i).OBLIGATION_FINISH_DATE
18390 ,p_ESTIMATED_START_DATE => p_tasks_in(i).ESTIMATED_START_DATE
18391 ,p_ESTIMATED_FINISH_DATE => p_tasks_in(i).ESTIMATED_FINISH_DATE
18392 ,p_BASELINE_START_DATE => p_tasks_in(i).BASELINE_START_DATE
18393 ,p_BASELINE_FINISH_DATE => p_tasks_in(i).BASELINE_FINISH_DATE
18394 ,p_CLOSED_DATE => p_tasks_in(i).CLOSED_DATE
18395 ,p_WQ_UOM_CODE => p_tasks_in(i).WQ_UOM_CODE
18396 ,p_WQ_ITEM_CODE => p_tasks_in(i).WQ_ITEM_CODE
18397 ,p_STATUS_CODE => p_tasks_in(i).STATUS_CODE
18398 ,p_WF_STATUS_CODE => p_tasks_in(i).WF_STATUS_CODE
18399 ,p_PRIORITY_CODE => p_tasks_in(i).PRIORITY_CODE
18400 ,p_MILESTONE_FLAG => p_tasks_in(i).MILESTONE_FLAG
18401 ,p_CRITICAL_FLAG => p_tasks_in(i).CRITICAL_FLAG
18402 ,p_INC_PROJ_PROGRESS_FLAG => p_tasks_in(i).INC_PROJ_PROGRESS_FLAG
18403 ,p_LINK_TASK_FLAG => p_tasks_in(i).LINK_TASK_FLAG
18404 ,p_CALENDAR_ID => p_tasks_in(i).CALENDAR_ID
18405 ,p_PLANNED_EFFORT => p_tasks_in(i).PLANNED_EFFORT
18406 ,p_DURATION => p_tasks_in(i).DURATION
18407 ,p_PLANNED_WORK_QUANTITY => p_tasks_in(i).PLANNED_WORK_QUANTITY
18408 ,p_TASK_TYPE => p_tasks_in(i).TASK_TYPE
18409 ,p_actual_start_date => p_tasks_in(i).actual_start_date
18410 ,p_actual_finish_date => p_tasks_in(i).actual_finish_date
18411 ,p_early_start_date => p_tasks_in(i).early_start_date
18412 ,p_early_finish_date => p_tasks_in(i).early_finish_date
18413 ,p_late_start_date => p_tasks_in(i).late_start_date
18414 ,p_late_finish_date => p_tasks_in(i).late_finish_date
18415 ,p_scheduled_start_date => p_tasks_in(i).scheduled_start_date
18416 ,p_scheduled_finish_date => p_tasks_in(i).scheduled_finish_date
18417 ,p_location_id => p_tasks_in(i).address_id
18418 ,p_task_manager_id => p_tasks_in(i).task_manager_person_id
18419 ,p_structure_version_id => l_structure_version_id
18420 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
18421 ,p_ext_act_duration => p_tasks_in(i).ext_act_duration
18422 ,p_ext_remain_duration => p_tasks_in(i).ext_remain_duration
18423 ,p_ext_sch_duration => p_tasks_in(i).ext_sch_duration
18424 -- (end venkat) new params for bug #3450684 -------------------------------------------------
18425 ,x_msg_count => l_msg_count
18426 ,x_msg_data => l_msg_data
18427 ,x_return_status => l_return_status
18428 );
18429 -- assign the appropriate values to the task out record
18430 l_tasks_out(i).return_status := l_return_status;
18431 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18432 THEN
18433 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18434
18435 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18436 THEN
18437 p_multiple_task_msg := 'F';
18438 RAISE FND_API.G_EXC_ERROR;
18439 END IF;
18440 l_tasks_out(i).pa_task_id := p_tasks_in(i).pa_task_id;
18441 l_tasks_out(i).pm_task_reference := p_tasks_in(i).pm_task_reference;
18442 i := p_tasks_in.next(i);
18443
18444 END IF;
18445
18446 END LOOP; --<< end WHILE >>
18447 */
18448 END IF;
18449 --project structure
18450
18451 IF p_multiple_task_msg = 'F'
18452 THEN
18453 RAISE FND_API.G_EXC_ERROR;
18454 END IF;
18455
18456 --Added for bug 2931183
18457 IF nvl(p_pm_product_code,'WORKPLAN') <> 'WORKPLAN' AND p_pass_entire_structure = 'Y' -- bug 3548473 : 3627124
18458 THEN
18459 IF l_debug_mode = 'Y' THEN
18460 pa_debug.g_err_stage := 'Calling PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
18461 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18462 END IF;
18463
18464 PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK(
18465 p_api_version_number => p_api_version_number
18466 ,p_commit => FND_API.G_FALSE--bug 3766967
18467 ,p_project_id => l_project_id
18468 ,p_source_project_id => l_project_in_rec.created_from_project_id --ADUT. Included this new param.
18469 ,p_pm_product_code => p_pm_product_code
18470 ,p_structure_type => l_structure_type --for bug 3005458
18471 ,p_tasks_in_tbl => p_tasks_in
18472 ,p_wp_str_exists => G_WP_STR_EXISTS
18473 ,p_is_wp_separate_from_fn => G_IS_WP_SEPARATE_FROM_FN
18474 ,p_is_wp_versioning_enabled => G_IS_WP_VERSIONING_ENABLED
18475 ,p_structure_version_id => l_update_structure_version_id
18476 ,p_process_mode => p_project_in.process_mode -- PA L Changes 3010538
18477 ,p_create_task_versions_only => l_create_task_versions_only -- Bug 3075609
18478 ,px_tasks_out_tbl => l_tasks_out
18479 ,x_return_status => p_return_status
18480 ,x_msg_count => p_msg_count
18481 ,x_msg_data => p_msg_data
18482 );
18483
18484 IF l_debug_mode = 'Y' THEN
18485 pa_debug.g_err_stage := 'After PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK...p_return_status=||p_return_status';
18486 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18487 END IF;
18488
18489
18490 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
18491 IF l_debug_mode = 'Y' THEN
18492 pa_debug.g_err_stage := 'Errors in PROCESS_TASK_STRUCTURE_BULK ' ;
18493 pa_debug.write(l_module_name,pa_debug.g_err_stage,4);
18494 END IF;
18495 p_multiple_task_msg := 'F';
18496 RAISE FND_API.G_EXC_ERROR;
18497 END IF;
18498
18499 IF l_debug_mode = 'Y' THEN
18500 pa_debug.g_err_stage := 'Returned from PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK ' ;
18501 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
18502 END IF;
18503 END IF; --for p_pm_product_code is not workplan
18504
18505 -- Bug 6163090 Moved the code here from above
18506 IF l_structure_type = 'FINANCIAL'
18507 THEN
18508 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
18509 THEN -- publishing flow.
18510 PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
18511 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
18512 PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
18513 IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' /*added IF condition for bug#13923366*/
18514 THEN
18515 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
18516 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
18517 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
18518 PA_PROJECT_PUB.G_Published_version_exists = 'N')
18519 THEN
18520 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
18521 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
18522 ,p_structure_version_id => l_structure_version_id ) ;
18523 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
18524 IF p_project_in.process_mode = 'ONLINE' THEN
18525 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
18526 ,p_project_id => l_project_id
18527 ,p_structure_version_id => l_structure_version_id
18528 ,x_return_status => l_return_status
18529 ,x_msg_count => l_msg_count
18530 ,x_msg_data => l_msg_data ) ;
18531 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18532 THEN
18533 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18534 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18535 THEN
18536 RAISE FND_API.G_EXC_ERROR;
18537 END IF;
18538 ELSIF p_project_in.process_mode = 'CONCURRENT' THEN
18539
18540 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
18541 ,p_project_id => l_project_id
18542 ,p_structure_version_id => l_structure_version_id
18543 ,x_return_status => l_return_status
18544 ,x_msg_count => l_msg_count
18545 ,x_msg_data => l_msg_data ) ;
18546 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18547 THEN
18548 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18549 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18550 THEN
18551 RAISE FND_API.G_EXC_ERROR;
18552 END IF;
18553 END IF ;
18554 END IF ;
18555 END IF ;
18556 END IF;
18557 END IF;
18558 END IF;--l_structure_type
18559 --Bug 6163090
18560
18561
18562
18563 ----Commented The below code for bug 2931183 as the processing will be done in PA_PROJ_TASK_STRUC_PUB.PROCESS_TASK_STRUCTURE_BULK
18564
18565 -- Bug # 5077599.
18566
18567 -- Uncommented the code below.
18568
18569 if (p_update_mode = 'PA_UPD_TASK_ATTR' and p_pass_entire_structure = 'N') then
18570 --bug 2732895 --update_project
18571 IF (( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'N' ) OR
18572 ( G_WP_STR_EXISTS = 'Y' AND G_IS_WP_SEPARATE_FROM_FN = 'Y' AND p_structure_in.structure_type = 'WORKPLAN' ))
18573 AND (p_pm_product_code <> 'WORKPLAN')
18574 --bug 2871308: added condition to by-pass when calling from publish api
18575 --should not call if new task is added to FINANCIAL structure version
18576 THEN
18577 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
18578 IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N'
18579 then
18580 PA_PROJ_TASK_STRUC_PUB.recalc_task_weightings(
18581 p_tasks_in => l_tasks_out
18582 ,p_task_version_id => null
18583 ,x_msg_count => l_msg_count
18584 ,x_msg_data => l_msg_data
18585 ,x_return_status => l_return_status
18586 );
18587
18588 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18589 THEN
18590 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18591
18592 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18593 THEN
18594 p_multiple_task_msg := 'F';
18595 RAISE FND_API.G_EXC_ERROR;
18596 END IF;
18597 END IF;
18598 --bug 2856033
18599
18600 IF l_structure_version_id IS NULL OR l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
18601 THEN
18602
18603 PA_PROJECT_PVT.get_structure_version(
18604 p_project_id => l_project_id
18605 ,p_structure_versions_out => g_struc_out_tbl
18606 );
18607
18608 fetch_structure_version(
18609 p_return_status => l_return_status
18610 ,p_api_version_number => p_api_version_number
18611 ,p_structure_type => p_structure_in.structure_type
18612 ,p_pa_structure_version_id => l_structure_version_id
18613 ,p_struc_return_status => l_return_status
18614 );
18615 END IF;
18616 -- added if condition for bug 13923366 by skkoppul
18617 -- Skip rolling up dates, weightages and ETC amounts
18618 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
18619 IF NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER, 'N') = 'N' THEN
18620 IF NVL(PA_PROJECT_PUB.G_BULK_UPDATE_MODE,' ') <> 'NO_DATES' THEN
18621
18622 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
18623 p_tasks_in => l_tasks_out --null if called for one task
18624 ,p_task_version_id => null
18625 ,p_project_id => l_project_id
18626 ,P_structure_version_id => l_structure_version_id
18627 ,x_msg_count => l_msg_count
18628 ,x_msg_data => l_msg_data
18629 ,x_return_status => l_return_status
18630 );
18631
18632 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
18633 THEN
18634 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18635
18636 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
18637 THEN
18638 p_multiple_task_msg := 'F';
18639 RAISE FND_API.G_EXC_ERROR;
18640 END IF;
18641 END IF; -- 13923366 changes end
18642 END IF; -- -- Added for Huawei DJ::
18643 --bug 2856033
18644
18645 END IF;
18646
18647 --bug 2732895
18648 end if;
18649
18650 -- End of Bug # 5077599.
18651
18652
18653 IF p_multiple_task_msg = 'F'
18654 THEN
18655 RAISE FND_API.G_EXC_ERROR;
18656 END IF;
18657
18658 p_tasks_out := l_tasks_out;
18659
18660
18661 -- new project start date should be < min(task_start_date)
18662
18663 IF l_update_start_date_flag = 'Y'
18664 --AND p_structure_in.structure_type = 'FINANCIAL' --bug 2729851 --bug 2738747
18665 AND l_structure_type = 'FINANCIAL' --bug 2729851 --bug 2738747
18666 THEN
18667
18668 OPEN l_min_task_start_date_csr (l_project_id);
18669 FETCH l_min_task_start_date_csr INTO l_min_task_date;
18670
18671 IF l_min_task_start_date_csr%FOUND
18672 THEN
18673
18674 IF l_project_start_date IS NOT NULL
18675 AND l_min_task_date IS NOT NULL
18676 THEN
18677
18678 IF l_min_task_date < l_project_start_date
18679 THEN
18680
18681 CLOSE l_min_task_start_date_csr;
18682
18683 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18684 THEN
18685 pa_interface_utils_pub.map_new_amg_msg
18686 ( p_old_message_code => 'PA_PR_INVALID_START_DATE'
18687 ,p_msg_attribute => 'CHANGE'
18688 ,p_resize_flag => 'N'
18689 ,p_msg_context => 'PROJ'
18690 ,p_attribute1 => l_project_rec.segment1
18691 ,p_attribute2 => ''
18692 ,p_attribute3 => ''
18693 ,p_attribute4 => ''
18694 ,p_attribute5 => '');
18695 END IF;
18696 RAISE FND_API.G_EXC_ERROR;
18697
18698 END IF;
18699 END IF;
18700 END IF;
18701
18702 CLOSE l_min_task_start_date_csr;
18703
18704 END IF;
18705
18706 -- new project completion date should be > max(task_start_date)
18707
18708 IF l_update_end_date_flag = 'Y'
18709 --AND p_structure_in.structure_type = 'FINANCIAL' --bug 2729851 --bug 2738747
18710 AND l_structure_type = 'FINANCIAL' --bug 2729851 --bug 2738747
18711 THEN
18712
18713 OPEN l_max_task_end_date_csr (l_project_id);
18714 FETCH l_max_task_end_date_csr INTO l_max_task_date;
18715
18716 IF l_max_task_end_date_csr%FOUND
18717 THEN
18718
18719 IF l_project_completion_date IS NOT NULL
18720 AND l_max_task_date IS NOT NULL
18721 THEN
18722
18723 IF l_max_task_date > l_project_completion_date
18724 THEN
18725
18726 CLOSE l_max_task_end_date_csr;
18727 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
18728
18729 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18730 THEN
18731 /* The FND_AS_UNEXPECTED_ERROR message is being reported from UPDATE_PROJECT API and modified
18732 the following. Replaced the message name from PA_PR_INVALID_COMPLETION_DATE with
18733 PA_PR_INVALID_COMP_DATE (this is limited to 30 characters after appended with '_AMG') and
18734 p_resize flag from 'Y' in the procedure call pa_interface_utils_pub.map_new_amg_msg to 'N'.
18735 Bug#1916735.
18736 */
18737 pa_interface_utils_pub.map_new_amg_msg
18738 ( p_old_message_code => 'PA_PR_INVALID_COMP_DATE'
18739 ,p_msg_attribute => 'CHANGE'
18740 ,p_resize_flag => 'N'
18741 ,p_msg_context => 'PROJ'
18742 ,p_attribute1 => l_project_rec.segment1
18743 ,p_attribute2 => ''
18744 ,p_attribute3 => ''
18745 ,p_attribute4 => ''
18746 ,p_attribute5 => '');
18747 END IF;
18748 RAISE FND_API.G_EXC_ERROR;
18749
18750 END IF;
18751 END IF;
18752 END IF;
18753
18754 CLOSE l_max_task_end_date_csr;
18755
18756 END IF;
18757
18758 -- Call the api to check the task dates
18759 --9839807 - added clause to skip check for MSP since MSP already validates dates
18760 If G_ParChildTsk_chks_deferred = 'Y' and p_pm_product_code <> 'MSPROJECT' THEN
18761 Pa_project_pvt.check_parent_child_task_dates
18762 (p_project_id => l_project_id,
18763 p_return_status => l_return_status );
18764
18765 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
18766 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18767 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
18768 RAISE FND_API.G_EXC_ERROR;
18769 END IF;
18770 G_ParchildTsk_chks_deferred := 'N';
18771 END IF;
18772
18773 --UPDATE key_members
18774
18775 l_count := 0;
18776 j := p_key_members.first;
18777 IF p_key_members.exists(j) THEN
18778
18779 FOR i in 1..p_key_members.COUNT LOOP
18780
18781 /* Code below is added for Bug 3326468. Start_date of key members is now a mandatory field to
18782 Update_project */
18783 IF p_key_members(i).start_date IS NULL OR
18784 p_key_members(i).start_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
18785 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18786 THEN
18787 pa_utils.add_message
18788 ( p_app_short_name => 'PA'-- new message for bug 3326468
18789 ,p_msg_name => 'PA_KEYMBR_NO_START_DATE'
18790 ,p_token1 => 'PROJECT_NAME'
18791 ,p_value1 => l_project_rec.segment1
18792 ,p_token2 => 'PERSON_ID'
18793 ,p_value2 => p_key_members(i).person_id
18794 ,p_token3 => 'ROLE_TYPE'
18795 ,p_value3 => p_key_members(i).project_role_type
18796 );
18797 END IF;
18798 p_multiple_task_msg := 'F';
18799 RAISE FND_API.G_EXC_ERROR;
18800 END IF;
18801 -- validate the role type introduced for Bug#5196996
18802 OPEN l_project_role_types_csr (p_key_members(i).project_role_type,l_project_id);
18803 FETCH l_project_role_types_csr INTO l_dummy;
18804
18805 IF l_project_role_types_csr%NOTFOUND THEN
18806
18807 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
18808 THEN
18809 pa_interface_utils_pub.map_new_amg_msg
18810 ( p_old_message_code => 'PA_INVALID_ROLE_TYPE'
18811 ,p_msg_attribute => 'CHANGE'
18812 ,p_resize_flag => 'N'
18813 ,p_msg_context => 'PROJ'
18814 ,p_attribute1 => l_amg_segment1
18815 ,p_attribute2 => ''
18816 ,p_attribute3 => ''
18817 ,p_attribute4 => ''
18818 ,p_attribute5 => '');
18819 END IF;
18820 CLOSE l_project_role_types_csr;
18821 RAISE FND_API.G_EXC_ERROR;
18822 ELSE
18823 CLOSE l_project_role_types_csr;
18824 END IF;
18825 -- end of changes for Bug#5196996
18826
18827
18828
18829 /* End of Code changes for Bug 3326468 */
18830 OPEN l_key_member_csr(l_project_id,p_key_members(i).person_id,
18831 p_key_members(i).project_role_type ,
18832 p_key_members(i).start_date); --Added for Bug 3326468
18833 FETCH l_key_member_csr INTO l_key_members_rec;
18834 IF l_key_member_csr%NOTFOUND THEN
18835 CLOSE l_key_member_csr;
18836 -- This means this is a new key member
18837 -- add this to the temp table which will be passed
18838 -- to add_key_members
18839 IF p_key_members(i).project_role_type = 'PROJECT MANAGER' THEN
18840 IF (p_key_members(i).end_date <>
18841 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18842 p_key_members(i).start_date <>
18843 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) THEN
18844 IF p_key_members(i).start_date >
18845 p_key_members(i).end_date THEN
18846 IF FND_MSG_PUB.Check_Msg_Level
18847 (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18848 pa_interface_utils_pub.map_new_amg_msg
18849 ( p_old_message_code => 'PA_PR_INVALID_KM_DATES'
18850 ,p_msg_attribute => 'CHANGE'
18851 ,p_resize_flag => 'N'
18852 ,p_msg_context => 'PROJ'
18853 ,p_attribute1 => l_project_rec.segment1
18854 ,p_attribute2 => ''
18855 ,p_attribute3 => ''
18856 ,p_attribute4 => ''
18857 ,p_attribute5 => '');
18858 p_multiple_task_msg := 'F';
18859 -- RAISE FND_API.G_EXC_ERROR;
18860 END IF;
18861 END IF;
18862 END IF;
18863
18864 pa_project_pvt.check_for_one_manager
18865 (l_project_id,
18866 p_key_members(i).person_id,
18867 p_key_members,
18868 p_key_members(i).start_date,
18869 p_key_members(i).end_date,
18870 l_return_status );
18871
18872 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
18873 p_return_status := l_return_status;
18874 p_project_out.return_status := l_return_status;
18875 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
18876 END IF;
18877 END IF;
18878 IF l_key_members_tbl.EXISTS(1) THEN
18879 l_count := l_key_members_tbl.COUNT + 1;
18880 ELSE
18881 l_count := 1;
18882 END IF;
18883 l_key_members_tbl(l_count) := p_key_members(i);
18884
18885 /*Commented the below code for the bug 2910972 since the null
18886 value for the start date is handled in the pa_project_parties_pub.create_project_party*/
18887
18888 /*IF l_key_members_tbl(l_count).start_date =
18889 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
18890 l_key_members_tbl(l_count).start_date IS NULL THEN
18891 l_key_members_tbl(l_count).start_date := TRUNC(SYSDATE);
18892 END IF;*/
18893
18894 /*Bug#2910972-Adding the below code*/
18895
18896 IF l_key_members_tbl(l_count).start_date =
18897 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18898 l_key_members_tbl(l_count).start_date := NULL;
18899 END IF;
18900
18901 /*Bug#2910972-End of addition*/
18902
18903 IF l_key_members_tbl(l_count).end_date =
18904 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
18905 l_key_members_tbl(l_count).end_date := NULL;
18906 END IF;
18907 ELSE
18908 CLOSE l_key_member_csr;
18909 IF p_key_members(i).start_date <>
18910 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18911 p_key_members(i).start_date IS NOT NULL THEN
18912 IF p_key_members(i).start_date <>
18913 NVL(l_key_members_rec.start_date_active,
18914 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18915 l_temp_start_date := p_key_members(i).start_date;
18916 ELSE
18917 l_temp_start_date := l_key_members_rec.start_date_active;
18918 END IF;
18919 ELSE
18920 l_temp_start_date := l_key_members_rec.start_date_active;
18921 END IF;
18922 IF p_key_members(i).end_date <>
18923 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
18924 p_key_members(i).end_date IS NOT NULL THEN
18925 IF p_key_members(i).end_date <>
18926 NVL(l_key_members_rec.end_date_active,
18927 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
18928 l_temp_end_date := p_key_members(i).end_date;
18929 ELSE
18930 l_temp_end_date := l_key_members_rec.end_date_active;
18931 END IF;
18932 ELSE
18933 /* Below if condition Added for bug 3234496 */
18934 IF p_key_members(i).project_role_type = 'PROJECT MANAGER' THEN
18935 l_temp_end_date := l_key_members_rec.end_date_active;
18936 ELSE
18937 /* Added code to null out the end date if not proj manager : for bug 3234496 */
18938 If p_key_members(i).end_date is null then
18939 l_temp_end_date := null;
18940 else
18941 l_temp_end_date := l_key_members_rec.end_date_active;
18942 end if;
18943 END IF;
18944 END IF;
18945 IF l_temp_end_date < l_temp_start_date THEN
18946 p_return_status := FND_API.G_RET_STS_ERROR;
18947 IF FND_MSG_PUB.Check_Msg_Level
18948 (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
18949 pa_interface_utils_pub.map_new_amg_msg
18950 ( p_old_message_code => 'PA_PR_INVALID_KM_DATES'
18951 ,p_msg_attribute => 'CHANGE'
18952 ,p_resize_flag => 'N'
18953 ,p_msg_context => 'PROJ'
18954 ,p_attribute1 => l_project_rec.segment1
18955 ,p_attribute2 => ''
18956 ,p_attribute3 => ''
18957 ,p_attribute4 => ''
18958 ,p_attribute5 => '');
18959 p_multiple_task_msg := 'F';
18960 END IF;
18961 END IF;
18962 IF (l_temp_start_date <>
18963 NVL(l_key_members_rec.start_date_active,
18964 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18965 OR
18966 (l_temp_end_date <>
18967 NVL(l_key_members_rec.end_date_active,
18968 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
18969 /* Added the below OR condition for bug 3234496 */
18970 OR
18971 (l_temp_end_date IS NULL AND l_key_members_rec.end_date_active IS NOT NULL)
18972 THEN
18973 if p_multiple_task_msg <> 'F' then
18974 /*
18975 -- begin OLD code before changes for ROLE BASED SECURITY
18976 UPDATE PA_PROJECT_PLAYERS SET
18977 START_DATE_ACTIVE = l_temp_start_date,
18978 END_DATE_ACTIVE = l_temp_end_date
18979 WHERE ROWID = l_key_members_rec.rowid;
18980 -- end OLD code before changes for ROLE BASED SECURITY
18981 */
18982 -- begin NEW code for ROLE BASED SECURITY
18983 -- updating START_DATE_ACTIVE and END_DATE_ACTIVE of
18984 -- PA_PROJECT_PLAYERS for the rowid in the cursor
18985 SELECT COMPLETION_DATE
18986 INTO v_completion_date
18987 FROM pa_projects p
18988 WHERE p.project_id = l_key_members_rec.project_id;
18989 /*Added the OR condition in the below statement for the bug 2846478*/
18990 if l_key_members_rec.scheduled_flag = 'N' OR l_key_members_rec.scheduled_flag IS NULL
18991 then
18992 PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY(
18993 p_api_version => 1.0 -- p_api_version
18994 , p_init_msg_list => FND_API.G_TRUE -- p_init_msg_list
18995 , p_commit => FND_API.G_FALSE -- p_commit
18996 , p_validate_only => FND_API.G_FALSE -- p_validate_only
18997 , p_validation_level => FND_API.G_VALID_LEVEL_FULL -- p_validation_level
18998 , p_debug_mode => 'N' -- p_debug_mode
18999 , p_object_id => l_key_members_rec.project_id -- p_object_id
19000 , p_OBJECT_TYPE => 'PA_PROJECTS' -- p_OBJECT_TYPE
19001 , p_project_role_id => NULL -------Bug 2100142l_key_members_rec.project_id -- p_project_role_id
19002 , p_project_role_type => l_key_members_rec.project_role_type -- p_project_role_type
19003 , p_resource_type_id => l_key_members_rec.resource_type_id -- p_resource_type_id
19004 , p_resource_source_id => l_key_members_rec.person_id -- p_resource_source_id
19005 , p_resource_name => v_null_char -- p_resource_name
19006 , p_start_date_active => l_temp_start_date -- p_start_date_active
19007 , p_scheduled_flag => 'N' -- p_scheduled_flag
19008 , p_record_version_number => l_key_members_rec.record_version_number -- p_record_version_number
19009 , p_calling_module => 'FORM' -- p_calling_module
19010 , p_project_id => l_key_members_rec.project_id -- p_project_id
19011 , p_project_end_date => v_completion_date -- p_project_end_date
19012 , p_project_party_id => l_key_members_rec.project_party_id -- p_project_party_id
19013 , p_end_date_active => l_temp_end_date -- p_end_date_active
19014 , x_wf_type => l_wf_type
19015 , x_wf_item_type => l_wf_item_type
19016 , x_wf_process => l_wf_process
19017 , x_assignment_id => l_assignment_id
19018 , x_return_status => x_return_status -- x_return_status
19019 , x_msg_count => x_msg_count -- x_msg_count
19020 , x_msg_data => x_msg_data -- x_msg_data
19021 );
19022 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
19023 p_return_status := x_return_status;
19024 p_msg_count := x_msg_count;
19025 p_msg_data := SUBSTR(p_msg_data||x_msg_data,1,2000);
19026 if (x_return_status = FND_API.G_RET_STS_ERROR) then
19027 raise FND_API.G_EXC_UNEXPECTED_ERROR;
19028 else -- (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
19029 raise FND_API.G_EXC_ERROR;
19030 end if;
19031 END IF;
19032 end if;
19033 -- end NEW code for ROLE BASED SECURITY
19034
19035 end if;
19036 END IF;
19037 END IF;
19038 END LOOP;
19039
19040 IF p_multiple_task_msg = 'F'
19041 THEN
19042 RAISE FND_API.G_EXC_ERROR;
19043 END IF;
19044
19045 IF l_key_members_tbl.COUNT > 0 THEN
19046 PA_PROJECT_PVT.add_key_members (
19047 p_return_status =>l_return_status,
19048 p_pa_source_template_id =>l_project_rec.created_from_project_id,
19049 p_project_id =>l_project_id,
19050 p_key_members =>l_key_members_tbl );
19051 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
19052 p_return_status := l_return_status;
19053 p_project_out.return_status := l_return_status;
19054 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19055 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
19056 p_return_status := l_return_status;
19057 p_project_out.return_status := l_return_status;
19058 RAISE FND_API.G_EXC_ERROR;
19059 END IF;
19060 END IF;
19061
19062 /* Start of code for bug #2111806
19063 Call the check_manager_date_range to check if the Project
19064 Manager exists for the complete duration of the Project. */
19065 pa_project_check_pvt.check_manager_date_range(p_project_id => l_project_id
19066 ,p_return_status => l_return_status);
19067
19068 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
19069 THEN
19070 p_project_out.return_status := l_return_status;
19071 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19072
19073 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
19074 THEN
19075
19076 p_project_out.return_status := l_return_status;
19077 RAISE FND_API.G_EXC_ERROR;
19078 END IF;
19079 /* End of code for bug #2111806 */
19080
19081 END IF;
19082
19083 /* Start of code for bug #2111806
19084 Throw an error if there are no Project Managers assigned.
19085 This has to be thrown irrespective of whether there are any Key Member records
19086 being passed or not. So, it cannot be done in the above IF condition. */
19087 IF l_project_id IS NOT NULL THEN
19088 OPEN c_prj(l_project_id);
19089 FETCH c_prj INTO l_proj_status, l_proj_type_class;
19090 CLOSE c_prj;
19091 END IF;
19092
19093 /* The check has to be done only for an Approved Contract Type project. */
19094 IF (nvl(l_proj_type_class,'NONE') = 'CONTRACT' AND
19095 nvl(l_proj_status,'UNAPPROVED') = 'APPROVED') THEN
19096 OPEN c_prj_count(l_project_id);
19097 FETCH c_prj_count INTO l_prj_mgr_count;
19098 CLOSE c_prj_count;
19099 IF l_prj_mgr_count = 0 THEN
19100 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19101 pa_utils.add_message
19102 ( p_app_short_name => 'PA'
19103 ,p_msg_name => 'PA_PR_INSUF_PROJ_MGR'
19104 );
19105 RAISE FND_API.G_EXC_ERROR;
19106 END IF;
19107 END IF;
19108 END IF;
19109 /* End of code for bug #2111806 */
19110
19111 -- ----------------------------------------
19112
19113 -- anlee org role changes
19114 -- UPDATE org roles
19115
19116 l_count := 0;
19117 j := p_org_roles.first;
19118 IF p_org_roles.exists(j) THEN
19119
19120 FOR i in 1..p_org_roles.COUNT LOOP
19121 OPEN l_org_role_csr(l_project_id, p_org_roles(i).person_id,
19122 p_org_roles(i).project_role_type );
19123 FETCH l_org_role_csr INTO l_org_roles_rec;
19124 IF l_org_role_csr%NOTFOUND THEN
19125 CLOSE l_org_role_csr;
19126 -- This means this is a new org role
19127 -- add this to the temp table which will be passed
19128 -- to add_org_roles
19129
19130 IF l_org_roles_tbl.EXISTS(1) THEN
19131 l_count := l_org_roles_tbl.COUNT + 1;
19132 ELSE
19133 l_count := 1;
19134 END IF;
19135 l_org_roles_tbl(l_count) := p_org_roles(i);
19136 IF l_org_roles_tbl(l_count).start_date =
19137 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE OR
19138 l_org_roles_tbl(l_count).start_date IS NULL THEN
19139 l_org_roles_tbl(l_count).start_date := TRUNC(SYSDATE);
19140 END IF;
19141 IF l_org_roles_tbl(l_count).end_date =
19142 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
19143 l_org_roles_tbl(l_count).end_date := NULL;
19144 END IF;
19145 ELSE
19146 CLOSE l_org_role_csr;
19147 IF p_org_roles(i).start_date <>
19148 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
19149 p_org_roles(i).start_date IS NOT NULL THEN
19150 IF p_org_roles(i).start_date <>
19151 NVL(l_org_roles_rec.start_date_active,
19152 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
19153 l_temp_start_date := p_org_roles(i).start_date;
19154 ELSE
19155
19156 l_temp_start_date := l_org_roles_rec.start_date_active;
19157 END IF;
19158 ELSE
19159 l_temp_start_date := l_org_roles_rec.start_date_active;
19160 END IF;
19161 IF p_org_roles(i).end_date <>
19162 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE AND
19163 p_org_roles(i).end_date IS NOT NULL THEN
19164 IF p_org_roles(i).end_date <>
19165 NVL(l_org_roles_rec.end_date_active,
19166 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) THEN
19167 l_temp_end_date := p_org_roles(i).end_date;
19168 ELSE
19169 l_temp_end_date := l_org_roles_rec.end_date_active;
19170 END IF;
19171 ELSE
19172 l_temp_end_date := l_org_roles_rec.end_date_active;
19173 END IF;
19174 IF l_temp_end_date < l_temp_start_date THEN
19175 p_return_status := FND_API.G_RET_STS_ERROR;
19176 IF FND_MSG_PUB.Check_Msg_Level
19177 (FND_MSG_PUB.G_MSG_LVL_SUCCESS) THEN
19178 pa_interface_utils_pub.map_new_amg_msg
19179 ( p_old_message_code => 'PA_PR_INVALID_OR_DATES'
19180 ,p_msg_attribute => 'CHANGE'
19181 ,p_resize_flag => 'N'
19182 ,p_msg_context => 'PROJ'
19183 ,p_attribute1 => l_project_rec.segment1
19184 ,p_attribute2 => ''
19185 ,p_attribute3 => ''
19186 ,p_attribute4 => ''
19187 ,p_attribute5 => '');
19188 p_multiple_task_msg := 'F';
19189 END IF;
19190 END IF;
19191 IF (l_temp_start_date <>
19192 NVL(l_org_roles_rec.start_date_active,
19193 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE))
19194 OR
19195 (l_temp_end_date <>
19196 NVL(l_org_roles_rec.end_date_active,
19197 PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)) THEN
19198 if p_multiple_task_msg <> 'F' then
19199
19200
19201 SELECT COMPLETION_DATE
19202 INTO v_completion_date
19203 FROM pa_projects p
19204 WHERE p.project_id = l_org_roles_rec.project_id;
19205 if l_org_roles_rec.scheduled_flag = 'N'
19206 then
19207 PA_PROJECT_PARTIES_PUB.UPDATE_PROJECT_PARTY(
19208 p_api_version => 1.0 -- p_api_version
19209 , p_init_msg_list => FND_API.G_TRUE -- p_init_msg_list
19210 , p_commit => FND_API.G_FALSE -- p_commit
19211 , p_validate_only => FND_API.G_FALSE -- p_validate_only
19212 , p_validation_level => FND_API.G_VALID_LEVEL_FULL -- p_validation_level
19213 , p_debug_mode => 'N' -- p_debug_mode
19214 , p_object_id => l_org_roles_rec.project_id -- p_object_id
19215 , p_OBJECT_TYPE => 'PA_PROJECTS' -- p_OBJECT_TYPE
19216 , p_project_role_id => NULL -------Bug 2100142l_key_members_rec.project_id -- p_project_role_id
19217 , p_project_role_type => l_org_roles_rec.project_role_type -- p_project_role_type
19218 , p_resource_type_id => l_org_roles_rec.resource_type_id -- p_resource_type_id
19219 , p_resource_source_id => l_org_roles_rec.resource_source_id -- p_resource_source_id
19220 , p_resource_name => v_null_char -- p_resource_name
19221 , p_start_date_active => l_temp_start_date -- p_start_date_active
19222 , p_scheduled_flag => 'N' -- p_scheduled_flag
19223 , p_record_version_number => l_org_roles_rec.record_version_number -- p_record_version_number
19224 , p_calling_module => 'FORM' -- p_calling_module
19225 , p_project_id => l_org_roles_rec.project_id -- p_project_id
19226 , p_project_end_date => v_completion_date -- p_project_end_date
19227 , p_project_party_id => l_org_roles_rec.project_party_id -- p_project_party_id
19228 , p_end_date_active => l_temp_end_date -- p_end_date_active
19229 , x_wf_type => l_wf_type
19230 , x_wf_item_type => l_wf_item_type
19231 , x_wf_process => l_wf_process
19232 , x_assignment_id => l_assignment_id
19233 , x_return_status => x_return_status -- x_return_status
19234 , x_msg_count => x_msg_count -- x_msg_count
19235 , x_msg_data => x_msg_data -- x_msg_data
19236 );
19237 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) Then
19238 p_return_status := x_return_status;
19239 p_msg_count := x_msg_count;
19240 p_msg_data := SUBSTR(p_msg_data||x_msg_data,1,2000);
19241 if (x_return_status = FND_API.G_RET_STS_ERROR) then
19242 raise FND_API.G_EXC_UNEXPECTED_ERROR;
19243 else -- (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
19244 raise FND_API.G_EXC_ERROR;
19245 end if;
19246 END IF;
19247 end if;
19248
19249 end if;
19250 END IF;
19251 END IF;
19252 END LOOP;
19253
19254 IF p_multiple_task_msg = 'F'
19255 THEN
19256 RAISE FND_API.G_EXC_ERROR;
19257 END IF;
19258
19259 IF l_org_roles_tbl.COUNT > 0 THEN
19260 PA_PROJECT_PVT.add_org_roles (
19261 p_return_status =>l_return_status,
19262 p_pa_source_template_id =>l_project_rec.created_from_project_id,
19263 p_project_id =>l_project_id,
19264 p_org_roles =>l_org_roles_tbl );
19265 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
19266 p_return_status := l_return_status;
19267 p_project_out.return_status := l_return_status;
19268 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19269 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
19270 p_return_status := l_return_status;
19271 p_project_out.return_status := l_return_status;
19272 RAISE FND_API.G_EXC_ERROR;
19273 END IF;
19274 END IF;
19275
19276 END IF;
19277
19278
19279 --UPDATE class_categories
19280
19281 i := p_class_categories.first;
19282
19283 IF p_class_categories.exists(i) THEN
19284
19285 WHILE i IS NOT NULL LOOP
19286
19287 IF (p_class_categories(i).class_category <>
19288 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
19289 (p_class_categories(i).class_category IS NOT NULL )
19290 AND (p_class_categories(i).class_code <>
19291 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
19292 (p_class_categories(i).class_code IS NOT NULL ) THEN
19293
19294 -- Start of Addition for bug 4191009
19295 class_code_tbl.delete();
19296 l_class_code := NULL;
19297 l_code_percentage := NULL;
19298 OPEN l_class_categories_csr (l_project_id,
19299 p_class_categories(i).class_category);
19300 FETCH l_class_categories_csr BULK COLLECT INTO class_code_tbl;
19301
19302 If class_code_tbl.count<1 Then
19303 l_class_categories_tbl(i) := p_class_categories(i);
19304 Else
19305 for j in class_code_tbl.first..class_code_tbl.last Loop
19306 If class_code_tbl.exists(j) then
19307 if class_code_tbl(j) = p_class_categories(i).class_code then
19308 if (p_class_categories(i).new_class_code <>
19309 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) AND
19310 (p_class_categories(i).new_class_code IS NOT NULL ) THEN -- 5348726 Added for bug#5294891
19311 --remove the old class_code
19312 DELETE FROM pa_project_classes
19313 WHERE project_id = l_project_id
19314 AND class_category = p_class_categories(i).class_category
19315 AND class_code = p_class_categories(i).class_code;
19316
19317 OPEN c_get_class_code_id(p_class_categories(i).class_category,
19318 p_class_categories(i).class_code);
19319 fetch c_get_class_code_id into l_old_class_code_id;
19320 close c_get_class_code_id;
19321
19322 OPEN c_get_class_code_id(p_class_categories(i).class_category,
19323 p_class_categories(i).new_class_code);
19324 fetch c_get_class_code_id into l_new_class_code_id;
19325 if c_get_class_code_id%notfound then
19326 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19327 THEN
19328 pa_interface_utils_pub.map_new_amg_msg
19329 ( p_old_message_code => 'PA_INVALID_CLASS_CATEGORY'
19330 ,p_msg_attribute => 'CHANGE'
19331 ,p_resize_flag => 'N'
19332 ,p_msg_context => 'PROJ'
19333 ,p_attribute1 => l_project_rec.segment1
19334 ,p_attribute2 => ''
19335 ,p_attribute3 => ''
19336 ,p_attribute4 => ''
19337 ,p_attribute5 => '');
19338 END IF;
19339 close c_get_class_code_id;
19340 RAISE FND_API.G_EXC_ERROR;
19341 end if;
19342 close c_get_class_code_id;
19343
19344 PA_USER_ATTR_PUB.DELETE_USER_ATTRS_DATA (
19345 p_validate_only => FND_API.G_FALSE
19346 ,p_project_id => l_project_id
19347 ,p_old_classification_id => l_old_class_code_id
19348 ,p_new_classification_id => l_new_class_code_id
19349 ,p_classification_type => 'CLASS_CODE'
19350 ,x_return_status => l_return_status
19351 ,x_msg_count => l_msg_count
19352 ,x_msg_data => l_msg_data );
19353 l_msg_count := FND_MSG_PUB.count_msg;
19354 IF l_msg_count > 0 THEN
19355 x_msg_count := l_msg_count;
19356 x_return_status := 'E';
19357 RAISE FND_API.G_EXC_ERROR;
19358 END IF;
19359 --Add the new class code values to the temp table
19360 l_class_categories_tbl(i) := p_class_categories(i);
19361 l_class_categories_tbl(i).class_code := p_class_categories(i).new_class_code;
19362 else -- 5348726 Added for bug#5294891
19363 OPEN l_code_percentage_csr (l_project_id,
19364 p_class_categories(i).class_category,
19365 p_class_categories(i).class_code);
19366 fetch l_code_percentage_csr into l_code_percentage;
19367 If l_code_percentage = p_class_categories(i).code_percentage then
19368 Null;
19369 Else
19370 --remove the old class_code
19371 DELETE FROM pa_project_classes
19372 WHERE project_id = l_project_id
19373 AND class_category = p_class_categories(i).class_category
19374 AND class_code = p_class_categories(i).class_code;
19375 --and add the new values to the temp table
19376 l_class_categories_tbl(i) := p_class_categories(i);
19377 End if;
19378 CLOSE l_code_percentage_csr;
19379 end if; -- 5348726 Added for bug#5294891
19380 l_class_code := class_code_tbl(j);
19381 exit;
19382 end if;
19383 end if;
19384 end loop;
19385 if l_class_code is null then
19386 l_class_categories_tbl(i) := p_class_categories(i);
19387 end if;
19388 end if;
19389 CLOSE l_class_categories_csr;
19390 -- End of addition for bug 4191009
19391
19392 /* Commented and altered as above for bug 4191009
19393 OPEN l_class_categories_csr (l_project_id,
19394 p_class_categories(i).class_category);
19395 FETCH l_class_categories_csr INTO l_class_code;
19396
19397 IF l_class_categories_csr%NOTFOUND THEN
19398 l_class_categories_tbl(i) := p_class_categories(i);
19399 ELSE
19400 IF l_class_code = p_class_categories(i).class_code THEN
19401 --if new value for class_code is same as old do nothing
19402 NULL;
19403 ELSE
19404 --remove the old class_code
19405 DELETE FROM pa_project_classes
19406 WHERE project_id = l_project_id
19407 AND class_category = p_class_categories(i).class_category
19408 AND class_code = l_class_code;
19409 --and add the new value for class_code to the temp table
19410 l_class_categories_tbl(i) := p_class_categories(i);
19411 END IF;
19412 END IF;
19413
19414 CLOSE l_class_categories_csr;
19415
19416 l_class_code := NULL; Commented till here and altered as above for bug 4191009 */
19417
19418 END IF; -- IF (p_class_categories(i).class_category <>
19419 -- PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
19420 i := p_class_categories.next(i);
19421
19422 END LOOP;
19423
19424 END IF; -- IF p_class_categories.exists(i)
19425
19426 i := l_class_categories_tbl.first;
19427
19428 IF l_class_categories_tbl.exists(i)
19429 THEN
19430
19431 PA_PROJECT_PVT.add_class_categories ( p_return_status =>l_return_status
19432 , p_pa_source_template_id =>l_project_rec.created_from_project_id
19433 , p_project_id =>l_project_id
19434 , p_class_categories =>l_class_categories_tbl );
19435
19436 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
19437 THEN
19438
19439 p_project_out.return_status := l_return_status;
19440 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19441
19442 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
19443 THEN
19444
19445 p_project_out.return_status := l_return_status;
19446 RAISE FND_API.G_EXC_ERROR;
19447
19448 END IF;
19449 END IF;
19450
19451 -- bug 4541103 CLOSE l_lock_rows_csr; --FYI: doesn't remove locks
19452 /*Customer Account Relationship Changes update bill to and Ship to customer ID*/
19453
19454 --bug 3716805
19455 ----dbms_output.put_line('Value OF p_project_in.bill_to_customer_id'||p_project_in.bill_to_customer_id);
19456 ----dbms_output.put_line('Value OF p_project_in.ship_to_customer_id'||p_project_in.ship_to_customer_id);
19457 ----dbms_output.put_line('Value OF p_project_in.customer_id'||p_project_in.customer_id);
19458 ----dbms_output.put_line('Value OF p_project_in.bill_to_address_id'||p_project_in.bill_to_address_id);
19459 ----dbms_output.put_line('Value OF p_project_in.ship_to_address_id'||p_project_in.ship_to_address_id);
19460 ------dbms_output.put_line('Value OF p_project_in.bill_to_customer_id'||p_project_in.bill_to_customer_id);
19461
19462 -- Added the following logic for updating the Project Relationship code. Bug#5131471
19463 --Opened the following cursor because thru project record we can update only the attributes of an exsiting customer. We cannot add a new customer
19464 --or over write the existing customer with a totally new customer.
19465
19466 IF ( p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN -- check if the customer passed is not null and not mis num
19467 Open Cur_Customer(l_project_id,p_project_in.customer_id);
19468 Fetch Cur_Customer into Cur_Customer_rec;
19469
19470 IF (Cur_Customer%FOUND) THEN
19471
19472 If (p_project_in.project_relationship_code IS NOT NULL AND p_project_in.project_relationship_code <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
19473
19474 --dbms_output.put_line('three'||l_check_relationship_flag);
19475 OPEN cur_customer_status(p_project_in.customer_id);
19476 FETCH cur_customer_status INTO l_cust_status;
19477
19478 IF ( cur_customer_status%NOTFOUND ) THEN
19479 --dbms_output.put_line('five'||l_check_relationship_flag);
19480 --passed customer does not exist
19481 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19482 --Changed the error message from PA_CUSTOMER_NOT_EXIST to PA_CUSTOMER_ID_INVALID for Bug#5183150
19483 pa_utils.add_message
19484 ( p_app_short_name => 'PA'
19485 ,p_msg_name => 'PA_CUSTOMER_ID_INVALID'
19486 );
19487 END IF;
19488 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19489 p_return_status := FND_API.G_RET_STS_ERROR;
19490 RAISE FND_API.G_EXC_ERROR;
19491
19492 ELSIF ( cur_customer_status%FOUND ) THEN
19493 --dbms_output.put_line('four'||l_check_relationship_flag);
19494 IF ( l_cust_status = 'I' ) THEN
19495 --customer is not active
19496 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
19497 pa_utils.add_message
19498 ( p_app_short_name => 'PA'
19499 ,p_msg_name => 'PA_CUSTOMER_NOT_ACTIVE'
19500 ,p_token1 => 'PROJECT_NAME'
19501 ,p_value1 => l_project_rec.segment1
19502 ,p_token2 => 'CUSTOMER_ID'
19503 ,p_value2 => p_project_in.customer_id
19504 );
19505 END IF;
19506 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19507 p_return_status := FND_API.G_RET_STS_ERROR;
19508 RAISE FND_API.G_EXC_ERROR;
19509
19510 ELSE --customer id is not null and it is valid
19511
19512
19513 UPDATE pa_project_customers
19514 SET
19515 project_relationship_code = p_project_in.project_relationship_code
19516 WHERE
19517 customer_id = p_project_in.customer_id AND
19518 project_id = l_project_id;
19519
19520 END IF;
19521 END IF; -- if cur_customer_status%NOTFOUND
19522 CLOSE cur_customer_status;
19523
19524 END IF; --Project relationship code is not null and not mis num
19525
19526 END IF; --Cur_Customer%FOUND
19527 Close Cur_Customer;
19528
19529 END IF; --customer id is not passed as null or mis num
19530
19531 -- End of logic added for Bug#5131471 for updating the Project Relationship code.
19532
19533 If (p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19534 OR (p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19535 --bug 3716805
19536 THEN
19537 If p_project_in.customer_id IS NULL OR p_project_in.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
19538 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19539 THEN
19540 pa_interface_utils_pub.map_new_amg_msg
19541 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
19542 ,p_msg_attribute => 'CHANGE'
19543 ,p_resize_flag => 'N'
19544 ,p_msg_context => 'PROJ'
19545 ,p_attribute1 => l_project_in_rec.pm_project_reference
19546 ,p_attribute2 => ''
19547 ,p_attribute3 => ''
19548 ,p_attribute4 => ''
19549 ,p_attribute5 => '');
19550 END IF;
19551 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19552 p_return_status := FND_API.G_RET_STS_ERROR;
19553 RAISE FND_API.G_EXC_ERROR;
19554 end if;
19555
19556 Open Cur_Customer(l_project_id,p_project_in.customer_id);
19557 Fetch Cur_Customer into Cur_Customer_rec;
19558 Close Cur_Customer;
19559
19560 l_bill_to_customer_id:=p_project_in.bill_to_customer_id;
19561 l_ship_to_customer_id:=p_project_in.ship_to_customer_id;
19562 --added for bug 3911782
19563 l_bill_to_address_id :=p_project_in.bill_to_address_id;
19564 l_ship_to_address_id :=p_project_in.ship_to_address_id;
19565 --changes end for Bug 3911782
19566
19567 /* Bug 3077676 Begin */
19568
19569 -- Not adding this error message in get_customer_info as that is called from lot of other places too
19570 -- and it would be a risk changing that.
19571
19572 OPEN get_cust_acc_rel_code;
19573 FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
19574 CLOSE get_cust_acc_rel_code;
19575 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done below before
19576 calling get_customer_info api.
19577 IF NVL(l_cust_acc_rel_code,'N') ='N'
19578 AND p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19579 AND p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19580 AND p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
19581 AND p_project_in.customer_id <> p_project_in.bill_to_customer_id
19582 AND p_project_in.customer_id <> p_project_in.ship_to_customer_id
19583 THEN
19584 pa_interface_utils_pub.map_new_amg_msg
19585 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19586 ,p_msg_attribute => 'CHANGE'
19587 ,p_resize_flag => 'Y'
19588 ,p_msg_context => 'PROJ'
19589 ,p_attribute1 => p_project_in.pm_project_reference
19590 ,p_attribute2 => ''
19591 ,p_attribute3 => ''
19592 ,p_attribute4 => ''
19593 ,p_attribute5 => '');
19594 RAISE FND_API.G_EXC_ERROR;
19595 END IF;
19596 */
19597 /* Bug 3077676 End */
19598
19599 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
19600 If (p_project_in.bill_to_customer_id is null or p_project_in.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19601 and Cur_Customer_rec.bill_to_customer_id is not null Then
19602 l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
19603 --changes for bug 3911782
19604 If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19605 and Cur_Customer_rec.bill_to_address_id is not null Then
19606 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19607 End if;
19608 Else
19609 If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19610 and Cur_Customer_rec.bill_to_address_id is not null Then
19611 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
19612 End if;
19613 --changes end for bug 3911782
19614 end if;
19615
19616 If (p_project_in.ship_to_customer_id is null or p_project_in.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19617 and Cur_Customer_rec.ship_to_customer_id is not null Then
19618 l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
19619 --changes for bug 3911782
19620 If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19621 and Cur_Customer_rec.ship_to_address_id is not null Then
19622 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19623 End if;
19624 Else
19625 If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19626 and Cur_Customer_rec.ship_to_address_id is not null Then
19627 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
19628 End if;
19629 --changes end for bug 3911782
19630 end if;
19631
19632 -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
19633 -- relations ship code is N.
19634 ----dbms_output.put_line('Value OF p_project_in.bill_to_address_id'||p_project_in.bill_to_address_id);
19635 ----dbms_output.put_line('Value OF p_project_in.ship_to_address_id'||p_project_in.ship_to_address_id);
19636
19637 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
19638 p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
19639 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19640 p_project_in.customer_id <> l_bill_to_customer_id
19641 ) or
19642 (
19643 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
19644 p_project_in.customer_id <> l_ship_to_customer_id
19645 ))
19646 THEN
19647 pa_interface_utils_pub.map_new_amg_msg
19648 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
19649 ,p_msg_attribute => 'CHANGE'
19650 ,p_resize_flag => 'Y'
19651 ,p_msg_context => 'PROJ'
19652 ,p_attribute1 => l_project_in_rec.pm_project_reference
19653 ,p_attribute2 => ''
19654 ,p_attribute3 => ''
19655 ,p_attribute4 => ''
19656 ,p_attribute5 => '');
19657 RAISE FND_API.G_EXC_ERROR;
19658 END IF;
19659
19660 pa_customer_info.get_customer_info( X_project_ID => l_project_id,
19661 X_Customer_Id => p_project_in.customer_id
19662 ,X_Bill_To_Customer_Id => l_bill_to_customer_id
19663 ,X_Ship_To_Customer_Id => l_ship_to_customer_id
19664 ,X_Bill_To_Address_Id => l_bill_to_address_id
19665 ,X_Ship_To_Address_Id => l_ship_to_address_id
19666 ,X_Bill_To_Contact_Id => l_bill_to_contact_id
19667 ,X_Ship_To_Contact_Id => l_ship_to_contact_id
19668 ,X_Err_Code => l_err_code
19669 ,X_Err_Stage => l_err_stage
19670 ,X_Err_Stack => l_err_stack
19671 ,p_calling_module => 'AMG' --added for bug#4770535
19672 );
19673
19674 --dbms_output.put_line('Value OF l_bill_to_customer_id'||l_bill_to_customer_id);
19675 --dbms_output.put_line('Value OF l_ship_to_customer_id'||l_ship_to_customer_id);
19676 --dbms_output.put_line('Value OF l_bill_to_address_id'||l_bill_to_address_id);
19677 --dbms_output.put_line('Value OF l_ship_to_address_id'||l_ship_to_address_id);
19678 --dbms_output.put_line('Value OF l_bill_to_contact_id'||l_bill_to_contact_id);
19679 --dbms_output.put_line('Value OF l_ship_to_contact_id'||l_ship_to_contact_id);
19680 -- For this API,error code 10 is a warning.Anything above 10 is an error
19681 IF l_err_code > 10
19682 THEN
19683
19684 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
19685 THEN
19686
19687 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
19688 THEN
19689 pa_interface_utils_pub.map_new_amg_msg
19690 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19691 ,p_msg_attribute => 'CHANGE'
19692 ,p_resize_flag => 'Y'
19693 ,p_msg_context => 'PROJ'
19694 ,p_attribute1 => l_project_in_rec.pm_project_reference
19695 ,p_attribute2 => ''
19696 ,p_attribute3 => ''
19697 ,p_attribute4 => ''
19698 ,p_attribute5 => '');
19699 ELSE
19700 pa_interface_utils_pub.map_new_amg_msg
19701 ( p_old_message_code => l_err_stage
19702 ,p_msg_attribute => 'CHANGE'
19703 ,p_resize_flag => 'Y'
19704 ,p_msg_context => 'PROJ'
19705 ,p_attribute1 => l_project_in_rec.pm_project_reference
19706 ,p_attribute2 => ''
19707 ,p_attribute3 => ''
19708 ,p_attribute4 => ''
19709 ,p_attribute5 => '');
19710 END IF;
19711
19712 END IF;
19713
19714 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
19715 RAISE FND_API.G_EXC_ERROR;
19716
19717 ELSIF l_err_code < 0
19718 THEN
19719
19720 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
19721 THEN
19722 pa_interface_utils_pub.map_new_amg_msg
19723 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
19724 ,p_msg_attribute => 'CHANGE'
19725 ,p_resize_flag => 'Y'
19726 ,p_msg_context => 'PROJ'
19727 ,p_attribute1 => l_project_in_rec.pm_project_reference
19728 ,p_attribute2 => ''
19729 ,p_attribute3 => ''
19730 ,p_attribute4 => ''
19731 ,p_attribute5 => '');
19732 END IF;
19733
19734 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19735 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19736 END IF;
19737
19738 /* Update the project customer information */
19739 ----dbms_output.put_line('before update ');
19740 Update Pa_project_customers
19741 Set bill_to_customer_id=l_bill_to_customer_id,
19742 ship_to_customer_id=l_ship_to_customer_id,
19743 Bill_To_Address_Id =l_bill_to_address_id,
19744 Ship_to_address_id =l_ship_to_address_id
19745 where project_id=l_project_id
19746 and customer_id=p_project_in.customer_id;
19747
19748 If p_project_in.bill_to_customer_id is not null and p_project_in.bill_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
19749 Delete pa_project_contacts
19750 where Project_Id=l_project_id
19751 and customer_id=p_project_in.customer_id
19752 and Project_Contact_Type_Code='BILLING';
19753
19754 end if;
19755
19756 If p_project_in.ship_to_customer_id is not null and p_project_in.ship_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
19757 Delete pa_project_contacts
19758 where Project_Id=l_project_id
19759 and customer_id=p_project_in.customer_id
19760 and Project_Contact_Type_Code='SHIPPING';
19761
19762 end if;
19763
19764
19765 end if;
19766
19767 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value
19768 -- using the local variable instead of cursor variable
19769
19770 /** Below code added for bug 3279981. Customer at Top Task in FP_M */
19771 --IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 commented
19772 IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_old_cust_top_task_flag THEN -- 4188765 added
19773 --Enabling the customer at top task flag. Thus, we need to set the default top task customer
19774 DECLARE
19775 hghst_ctr_cust_id NUMBER;
19776 hghst_ctr_cust_name hz_parties.party_name%TYPE; --VARCHAR2(50); Bug 5622539
19777 hghst_ctr_cust_num hz_parties.party_number%TYPE; --VARCHAR2(30); Bug 5622539
19778
19779 l_return_status VARCHAR2(10);
19780 l_msg_count NUMBER := 0;
19781 l_msg_data VARCHAR2(2000);
19782 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
19783 BEGIN
19784 -- l_exclude_cust_id_tbl(1) := 0; Bug 5622539
19785 --Retrieve the customer to be set as the default top task customer
19786 pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
19787 P_API_VERSION => 1.0
19788 , P_INIT_MSG_LIST => 'T'
19789 , P_COMMIT => 'F'
19790 , P_VALIDATE_ONLY => 'F'
19791 , P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19792 , P_DEBUG_MODE => 'N'
19793 , p_calling_module => 'AMG'
19794 , p_project_id => l_project_id
19795 , p_exclude_cust_id_tbl => l_exclude_cust_id_tbl
19796 , x_highst_contr_cust_id => hghst_ctr_cust_id
19797 , x_highst_contr_cust_name => hghst_ctr_cust_name
19798 , x_highst_contr_cust_num => hghst_ctr_cust_num
19799 , x_return_status => l_return_status
19800 , x_msg_count => l_msg_count
19801 , x_msg_data => l_msg_data );
19802
19803 -- Bug 5622539
19804 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19805 l_msg_count := FND_MSG_PUB.count_msg;
19806 if l_msg_count = 1 then
19807 PA_INTERFACE_UTILS_PUB.get_messages
19808 (p_encoded => FND_API.G_FALSE,
19809 p_msg_index => 1,
19810 p_msg_count => l_msg_count,
19811 p_msg_data => l_msg_data,
19812 p_data => l_msg_data,
19813 p_msg_index_out => l_msg_index_out);
19814
19815 end if;
19816 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19817 p_project_out.return_status := l_return_status;
19818 RAISE FND_API.G_EXC_ERROR;
19819 else
19820 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19821 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19822 END if;
19823 end if;
19824 -- Bug 5622539
19825
19826 IF hghst_ctr_cust_id IS NOT null THEN
19827 --This API call will update pa_project_customers and pa_tasks
19828 pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
19829 P_API_VERSION => 1.0
19830 , P_INIT_MSG_LIST => 'T'
19831 , P_COMMIT => 'F'
19832 , P_VALIDATE_ONLY => 'F'
19833 , P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19834 , P_DEBUG_MODE => 'N'
19835 , p_calling_module => 'AMG'
19836 , p_mode => 'ENABLE'
19837 , p_project_id => l_project_id
19838 , p_def_top_task_cust => hghst_ctr_cust_id
19839 , p_contr_update_cust => null
19840 , x_return_status => l_return_status
19841 , x_msg_count => l_msg_count
19842 , x_msg_data => l_msg_data );
19843
19844 -- Bug 5622539
19845 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19846 l_msg_count := FND_MSG_PUB.count_msg;
19847 if l_msg_count = 1 then
19848 PA_INTERFACE_UTILS_PUB.get_messages
19849 (p_encoded => FND_API.G_FALSE,
19850 p_msg_index => 1,
19851 p_msg_count => l_msg_count,
19852 p_msg_data => l_msg_data,
19853 p_data => l_msg_data,
19854 p_msg_index_out => l_msg_index_out);
19855
19856 end if;
19857 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19858 p_project_out.return_status := l_return_status;
19859 RAISE FND_API.G_EXC_ERROR;
19860 else
19861 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19862 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19863 END if;
19864 end if;
19865 -- Bug 5622539
19866
19867 END IF;
19868 END ;
19869 END IF;
19870
19871 --IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 Commented
19872 IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_old_cust_top_task_flag THEN -- 4188765 Added
19873 --Disabling the customer at top task flag. Thus, we need to set the customer bill split for the project customers
19874 DECLARE
19875 cust_id PA_PROJECT_CUSTOMERS.customer_id%TYPE;
19876 hghst_ctr_cust_id NUMBER;
19877 hghst_ctr_cust_name hz_parties.party_name%TYPE; --VARCHAR2(50); Bug 5622539
19878 hghst_ctr_cust_num hz_parties.party_number%TYPE; --VARCHAR2(30); Bug 5622539
19879 -- num_customers NUMBER := 0; bug 5622539
19880 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
19881
19882 l_return_status VARCHAR2(10);
19883 l_msg_count NUMBER := 0;
19884 l_msg_data VARCHAR2(2000);
19885 CURSOR cur_get_def_top_task_cust IS
19886 SELECT customer_id
19887 FROM pa_project_customers
19888 WHERE project_id = l_project_id
19889 AND default_top_task_cust_flag = 'Y' ;
19890 BEGIN
19891 -- l_exclude_cust_id_tbl(1) := 0; Bug 5622539
19892 --Retrieve the customer to be updated with 100% contribution
19893 pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
19894 P_API_VERSION => 1.0
19895 , P_INIT_MSG_LIST => 'T'
19896 , P_COMMIT => 'F'
19897 , P_VALIDATE_ONLY => 'F'
19898 , P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL --100 bug 5622539
19899 , P_DEBUG_MODE => 'N'
19900 , p_calling_module => 'AMG'
19901 , p_project_id => l_project_id
19902 , p_exclude_cust_id_tbl => l_exclude_cust_id_tbl
19903 , x_highst_contr_cust_id => hghst_ctr_cust_id
19904 , x_highst_contr_cust_name => hghst_ctr_cust_name
19905 , x_highst_contr_cust_num => hghst_ctr_cust_num
19906 , x_return_status => l_return_status
19907 , x_msg_count => l_msg_count
19908 , x_msg_data => l_msg_data );
19909
19910 -- Bug 5622539
19911 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19912 l_msg_count := FND_MSG_PUB.count_msg;
19913 if l_msg_count = 1 then
19914 PA_INTERFACE_UTILS_PUB.get_messages
19915 (p_encoded => FND_API.G_FALSE,
19916 p_msg_index => 1,
19917 p_msg_count => l_msg_count,
19918 p_msg_data => l_msg_data,
19919 p_data => l_msg_data,
19920 p_msg_index_out => l_msg_index_out);
19921
19922 end if;
19923 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19924 p_project_out.return_status := l_return_status;
19925 RAISE FND_API.G_EXC_ERROR;
19926 else
19927 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19928 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19929 END if;
19930 end if;
19931 -- Bug 5622539
19932 OPEN cur_get_def_top_task_cust;
19933 FETCH cur_get_def_top_task_cust INTO cust_id;
19934 CLOSE cur_get_def_top_task_cust;
19935
19936 IF hghst_ctr_cust_id IS NOT NULL THEN
19937 --This API call will update pa_project_customers and pa_tasks
19938 pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
19939 P_API_VERSION => 1.0
19940 , P_INIT_MSG_LIST => 'T'
19941 , P_COMMIT => 'F'
19942 , P_VALIDATE_ONLY => 'F'
19943 , P_VALIDATION_LEVEL => FND_API.G_VALID_LEVEL_FULL -- 100 Bug 5622539
19944 , P_DEBUG_MODE => 'N'
19945 , p_calling_module => 'AMG'
19946 , p_mode => 'DISABLE'
19947 , p_project_id => l_project_id
19948 , p_def_top_task_cust => cust_id
19949 , p_contr_update_cust => hghst_ctr_cust_id
19950 , x_return_status => l_return_status
19951 , x_msg_count => l_msg_count
19952 , x_msg_data => l_msg_data );
19953
19954 -- Bug 5622539
19955 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
19956 l_msg_count := FND_MSG_PUB.count_msg;
19957 if l_msg_count = 1 then
19958 PA_INTERFACE_UTILS_PUB.get_messages
19959 (p_encoded => FND_API.G_FALSE,
19960 p_msg_index => 1,
19961 p_msg_count => l_msg_count,
19962 p_msg_data => l_msg_data,
19963 p_data => l_msg_data,
19964 p_msg_index_out => l_msg_index_out);
19965
19966 end if;
19967 If l_return_status = FND_API.G_RET_STS_ERROR THEN
19968 p_project_out.return_status := l_return_status;
19969 RAISE FND_API.G_EXC_ERROR;
19970 else
19971 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
19972 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
19973 END if;
19974 end if;
19975 -- Bug 5622539
19976 END IF;
19977 END;
19978 END IF;
19979
19980 ------------------------------------------------------------------------------------------------------------
19981 /* This code is newly added.It has few checks that were present in the initial code for p_project_in_rec_type.
19982 customer_id and few new validation of code. The above code is left untouched as it would have caused regression otherwise.
19983 We continue to support updation of single customer record via p_project_in_rec_type.customer_id. */
19984 -----------------------------------------------------------------------------------------------------------
19985 ----dbms_output.put_line('The control comes till this point');
19986 /* Tracking bug ..customer code added in a loop */
19987 i := p_customers_in.first;
19988 IF p_customers_in.exists(i) THEN
19989 WHILE i IS NOT NULL LOOP
19990 --dbms_output.put_line('if CUSTOMER ARE PASSED TO UPDATE_PROJECT ');
19991 --dbms_output.put_line('p_customers_in(i).PROJECT_RELATIONSHIP_CODE'||p_customers_in(i).PROJECT_RELATIONSHIP_CODE);
19992 -- All this should be done in a loop **/ ADITI_START
19993
19994 /*Customer Account Relationship Changes update bill to and Ship to customer ID*/
19995
19996 --bug 3716805
19997 /* Commented for tracking Bug
19998 If (p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
19999 OR (p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20000 --bug 3716805
20001 THEN
20002 If p_project_in.customer_id IS NULL OR p_project_in.customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
20003 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20004 THEN
20005 pa_interface_utils_pub.map_new_amg_msg
20006 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
20007 ,p_msg_attribute => 'CHANGE'
20008 ,p_resize_flag => 'N'
20009 ,p_msg_context => 'PROJ'
20010 ,p_attribute1 => l_project_in_rec.pm_project_reference
20011 ,p_attribute2 => ''
20012 ,p_attribute3 => ''
20013 ,p_attribute4 => ''
20014 ,p_attribute5 => '');
20015 END IF;
20016 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20017 p_return_status := FND_API.G_RET_STS_ERROR;
20018 RAISE FND_API.G_EXC_ERROR;
20019 end if;*/
20020
20021 /** changed FROM p_project_in.customer_id to p_customers_in(i).custmer_id in all places **/
20022 If (p_customers_in(i).bill_to_customer_id IS NOT NULL AND p_customers_in(i).bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20023 OR (p_customers_in(i).ship_to_customer_id IS NOT NULL AND p_customers_in(i).ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20024 OR (p_customers_in(i).CONTACT_ID IS NOT NULL AND p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)--added for tracking bug by aditi
20025 --bug 3716805
20026 THEN
20027 --dbms_output.put_line('comes into karthiks 0th else');
20028 If p_customers_in(i).customer_id IS NULL OR p_customers_in(i).customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
20029 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20030 THEN
20031 pa_interface_utils_pub.map_new_amg_msg
20032 ( p_old_message_code => 'PA_CUSTOMER_ID_IS_NULL'
20033 ,p_msg_attribute => 'CHANGE'
20034 ,p_resize_flag => 'N'
20035 ,p_msg_context => 'PROJ'
20036 ,p_attribute1 => l_project_in_rec.pm_project_reference
20037 ,p_attribute2 => ''
20038 ,p_attribute3 => ''
20039 ,p_attribute4 => ''
20040 ,p_attribute5 => '');
20041 END IF;
20042 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20043 p_return_status := FND_API.G_RET_STS_ERROR;
20044 RAISE FND_API.G_EXC_ERROR;
20045 end if;
20046 --dbms_output.put_line('comes into karthiks 0th end if');
20047 End if; --added by aditi for tracking bug -- FOR CUSTOMER ISSUE
20048
20049 /* Bug 3077676 Begin */
20050
20051 -- Not adding this error message in get_customer_info as that is called from lot of other places too
20052 -- and it would be a risk changing that.
20053 OPEN get_cust_acc_rel_code;
20054 FETCH get_cust_acc_rel_code INTO l_cust_acc_rel_code;
20055 CLOSE get_cust_acc_rel_code;
20056
20057 /* Moved cursor get_cust_acc_rel_code from below to above for tracking bug */
20058
20059
20060
20061 --Open Cur_Customer(l_project_id,p_project_in.customer_id); --Commented for tracking bug
20062 Open Cur_Customer(l_project_id,p_customers_in(i).customer_id); --Added for tracking Bug
20063 Fetch Cur_Customer into Cur_Customer_rec;
20064 If Cur_Customer%NOTFOUND THEN --added for tracking
20065 Close Cur_Customer;
20066 -- This means this is a new customer
20067 -- add this to the temp table which will be
20068 --dbms_output.put_line('comes into free portion');
20069 --dbms_output.put_line('p_customers_in(i).customer_id'||p_customers_in(i).customer_id);
20070 IF p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
20071 --dbms_output.put_line('comes into karthiks 1st else');
20072 IF p_customers_in(i).project_relationship_code IS NULL OR
20073 p_customers_in(i).project_relationship_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
20074 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20075 THEN
20076 pa_utils.add_message
20077 ( p_app_short_name => 'PA'-- using existing message for AA TRACKING
20078 ,p_msg_name => 'PA_RELATIONSHIP_CODE_REQD'
20079 ,p_token1 => 'PROJECT_NAME'
20080 ,p_value1 => l_project_rec.segment1
20081 ,p_token2 => 'CUSTOMER_ID'
20082 ,p_value2 => p_customers_in(i).customer_id
20083 );
20084 END IF;
20085 p_multiple_task_msg := 'F';
20086 RAISE FND_API.G_EXC_ERROR;
20087 END IF;
20088
20089 -- below if condition is added Bug 5622539
20090 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20091 (l_enable_top_task_cust_flag='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y'))
20092 and (NVL(p_project_in.date_eff_funds_flag, 'N') <> 'Y'
20093 or NVL(l_project_rec.DATE_EFF_FUNDS_CONSUMPTION, 'N') <> 'Y') /* Added the condition for Bug 10416869*/
20094 then
20095 IF p_customers_in(i).CUSTOMER_BILL_SPLIT IS NULL OR
20096 p_customers_in(i).CUSTOMER_BILL_SPLIT = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
20097 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20098 THEN
20099 pa_utils.add_message
20100 ( p_app_short_name => 'PA'-- new message for AA TRACKING
20101 ,p_msg_name => 'PA_CUST_BILL_SPLIT_REQD'
20102 ,p_token1 => 'PROJECT_NAME'
20103 ,p_value1 => l_project_rec.segment1
20104 ,p_token2 => 'CUSTOMER_ID'
20105 ,p_value2 => p_customers_in(i).customer_id
20106 );
20107 END IF;
20108 p_multiple_task_msg := 'F';
20109 RAISE FND_API.G_EXC_ERROR;
20110 ELSE
20111 PA_CUSTOMERS_CONTACTS_UTILS.CHECK_CONTRIBUTION_PERCENTAGE
20112 ( p_customer_bill_split => p_customers_in(i).CUSTOMER_BILL_SPLIT
20113 ,x_return_status => l_return_status
20114 ,x_error_msg_code => l_error_msg_code);
20115 If l_return_status <> FND_API.G_RET_STS_SUCCESS then
20116 pa_utils.add_message
20117 ( p_app_short_name => 'PA' --TRACKING
20118 ,p_msg_name => 'PA_CUST_BILL_SPLIT_INVALID'
20119 ,p_token1 => 'PROJECT_NAME'
20120 ,p_value1 => l_project_rec.segment1
20121 ,p_token2 => 'CUSTOMER_ID'
20122 ,p_value2 => p_customers_in(i).customer_id
20123 );
20124 /* Fix for bug 4604087 */
20125 p_multiple_task_msg := 'F';
20126 RAISE FND_API.G_EXC_ERROR;
20127 END IF;
20128
20129 END IF;
20130 END IF;
20131 -- added by aditi for tracking bug -- FOR CUSTOMER ISSUE
20132 ----dbms_output.put_line('Value of p_project_in.customer_id'||p_customers_in(i).customer_id);
20133 /* OLD code be4 tracking again */
20134 /* Coomented the code below and added new code for tracking bug
20135 l_bill_to_customer_id:=p_project_in.bill_to_customer_id;
20136 l_ship_to_customer_id:=p_project_in.ship_to_customer_id;
20137 --added for bug 3911782
20138 l_bill_to_address_id :=p_project_in.bill_to_address_id;
20139 l_ship_to_address_id :=p_project_in.ship_to_address_id;
20140 --changes end for Bug 3911782*/
20141 l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
20142 l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
20143 --added for bug 3911782
20144 l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
20145 l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
20146 l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
20147 l_customer_bill_split := p_customers_in(i).Customer_Bill_Split;
20148 -- Added for Bug 5622539
20149 If (l_customer_bill_split is null or
20150 l_customer_bill_split = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20151 then
20152 l_customer_bill_split:=0;
20153 end if;
20154
20155 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
20156 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
20157 ----dbms_output.put_line('Value of l_bill_to_address_id'||l_bill_to_address_id);
20158 ----dbms_output.put_line('Value of l_ship_to_address_id'||l_ship_to_address_id);
20159
20160
20161
20162
20163 /* Bug 3123361. Commenting the following validation as the complete validation of the below is done below before
20164 calling get_customer_info api.
20165 IF NVL(l_cust_acc_rel_code,'N') ='N'
20166 AND p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
20167 AND p_project_in.bill_to_customer_id IS NOT NULL AND p_project_in.bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
20168 AND p_project_in.ship_to_customer_id IS NOT NULL AND p_project_in.ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
20169 AND p_project_in.customer_id <> p_project_in.bill_to_customer_id
20170 AND p_project_in.customer_id <> p_project_in.ship_to_customer_id
20171 THEN
20172 pa_interface_utils_pub.map_new_amg_msg
20173 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
20174 ,p_msg_attribute => 'CHANGE'
20175 ,p_resize_flag => 'Y'
20176 ,p_msg_context => 'PROJ'
20177 ,p_attribute1 => p_project_in.pm_project_reference
20178 ,p_attribute2 => ''
20179 ,p_attribute3 => ''
20180 ,p_attribute4 => ''
20181 ,p_attribute5 => '');
20182 RAISE FND_API.G_EXC_ERROR;
20183 END IF;
20184 */
20185 /* Bug 3077676 End */
20186
20187 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
20188 /* For a New RECORD this code IS redundant by aditi for tracking
20189 If (p_project_in.bill_to_customer_id is null or p_project_in.bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20190 and Cur_Customer_rec.bill_to_customer_id is not null Then
20191 l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
20192 --changes for bug 3911782
20193 If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20194 and Cur_Customer_rec.bill_to_address_id is not null Then
20195 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20196 End if;
20197 Else
20198 If (p_project_in.bill_to_address_id is null or p_project_in.bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20199 and Cur_Customer_rec.bill_to_address_id is not null Then
20200 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20201 End if;
20202 --changes end for bug 3911782
20203 end if;
20204
20205 If (p_project_in.ship_to_customer_id is null or p_project_in.ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20206 and Cur_Customer_rec.ship_to_customer_id is not null Then
20207 l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
20208 --changes for bug 3911782
20209 If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20210 and Cur_Customer_rec.ship_to_address_id is not null Then
20211 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20212 End if;
20213 Else
20214 If (p_project_in.ship_to_address_id is null or p_project_in.ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20215 and Cur_Customer_rec.ship_to_address_id is not null Then
20216 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20217 End if;
20218 --changes end for bug 3911782
20219 end if;
20220 /* THIS WHOLE CODE IS COMMENTED FOR TRACKING BUG */
20221 -- Bug 3123361. Bill to customer and ship to customer should be same as customer when passed and
20222 -- relations ship code is N.
20223 ----dbms_output.put_line('Value of p_customers_in(i).customer_id'||p_customers_in(i).customer_id);
20224 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
20225 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
20226
20227 /* IF(NVL(l_cust_acc_rel_code,'N') ='N' and
20228 p_project_in.customer_id IS NOT NULL AND p_project_in.customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
20229 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20230 p_project_in.customer_id <> l_bill_to_customer_id
20231 ) or
20232 (
20233 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20234 p_project_in.customer_id <> l_ship_to_customer_id
20235 )) This coce is commented as the code is being called in loop for tracking issue*/
20236
20237 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
20238 p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
20239 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20240 p_customers_in(i).customer_id <> l_bill_to_customer_id
20241 ) or
20242 (
20243 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20244 p_customers_in(i).customer_id <> l_ship_to_customer_id
20245 ))
20246
20247 THEN
20248 pa_interface_utils_pub.map_new_amg_msg
20249 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
20250 ,p_msg_attribute => 'CHANGE'
20251 ,p_resize_flag => 'Y'
20252 ,p_msg_context => 'PROJ'
20253 ,p_attribute1 => l_project_in_rec.pm_project_reference
20254 ,p_attribute2 => ''
20255 ,p_attribute3 => ''
20256 ,p_attribute4 => ''
20257 ,p_attribute5 => '');
20258 RAISE FND_API.G_EXC_ERROR;
20259 END IF;
20260 /** changes begin for tracking bug by aditi **/
20261
20262 ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
20263 If (p_customers_in(i).CONTACT_ID IS NOT NULL) AND (p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20264 then
20265
20266
20267 IF (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE IS NULL) OR (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )THEN
20268 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20269 THEN
20270 pa_utils.add_message
20271 ( p_app_short_name => 'PA'-- existing message for tracking bug
20272 ,p_msg_name => 'PA_CONTACT_TYPE_REQD'
20273 ,p_token1 => 'PROJECT_NAME'
20274 ,p_value1 => l_project_in_rec.pm_project_reference
20275 ,p_token2 => 'CUSTOMER_ID'
20276 ,p_value2 => p_customers_in(i).customer_id
20277 ,p_token3 => 'CONTACT_ID'
20278 ,p_value3 => p_customers_in(i).CONTACT_ID
20279 );
20280 END IF;
20281 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20282 p_return_status := FND_API.G_RET_STS_ERROR;
20283 RAISE FND_API.G_EXC_ERROR;
20284 END IF;
20285 end if;
20286 If p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
20287 l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
20288 l_ship_to_contact_id := NULL; -- Bug 5622539
20289 ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
20290 l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
20291 l_bill_to_contact_id := NULL; -- Bug 5622539
20292 Else
20293 l_bill_to_contact_id := NULL;
20294 l_ship_to_contact_id := NULL;
20295 End If;
20296 /** end of chnages for tracking bug by aditi **/
20297 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
20298 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
20299 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
20300
20301 /* Start of changes for bug 5482997 */
20302
20303 IF l_bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
20304 l_bill_to_customer_id := NULL;
20305 END IF;
20306
20307 IF l_ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
20308 l_ship_to_customer_id := NULL;
20309 END IF;
20310
20311 /* End of changes for bug 5482997 */
20312
20313
20314 pa_customer_info.get_customer_info( X_project_ID => l_project_id,
20315 X_Customer_Id => p_customers_in(i).customer_id -- p_project_in.customer_id tracking
20316 ,X_Bill_To_Customer_Id => l_bill_to_customer_id
20317 ,X_Ship_To_Customer_Id => l_ship_to_customer_id
20318 ,X_Bill_To_Address_Id => l_bill_to_address_id
20319 ,X_Ship_To_Address_Id => l_ship_to_address_id
20320 ,X_Bill_To_Contact_Id => l_bill_to_contact_id
20321 ,X_Ship_To_Contact_Id => l_ship_to_contact_id
20322 ,X_Err_Code => l_err_code
20323 ,X_Err_Stage => l_err_stage
20324 ,X_Err_Stack => l_err_stack
20325 ,p_calling_module => 'AMG' --Added for Bug#4770535
20326 );
20327
20328 ----dbms_output.put_line('After calling pa_customer_info.get_customer_info'||l_err_code);
20329 --dbms_output.put_line('Value of l_bill_to_address_id '||l_bill_to_address_id);
20330 --dbms_output.put_line('Value of l_ship_to_address_id '||l_ship_to_address_id);
20331
20332 -- For this API,error code 10 is a warning.Anything above 10 is an error
20333 IF l_err_code > 10
20334 THEN
20335
20336 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20337 THEN
20338
20339 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20340 THEN
20341 pa_interface_utils_pub.map_new_amg_msg
20342 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20343 ,p_msg_attribute => 'CHANGE'
20344 ,p_resize_flag => 'Y'
20345 ,p_msg_context => 'PROJ'
20346 ,p_attribute1 => l_project_in_rec.pm_project_reference
20347 ,p_attribute2 => ''
20348 ,p_attribute3 => ''
20349 ,p_attribute4 => ''
20350 ,p_attribute5 => '');
20351 ELSE
20352 pa_interface_utils_pub.map_new_amg_msg
20353 ( p_old_message_code => l_err_stage
20354 ,p_msg_attribute => 'CHANGE'
20355 ,p_resize_flag => 'Y'
20356 ,p_msg_context => 'PROJ'
20357 ,p_attribute1 => l_project_in_rec.pm_project_reference
20358 ,p_attribute2 => ''
20359 ,p_attribute3 => ''
20360 ,p_attribute4 => ''
20361 ,p_attribute5 => '');
20362 END IF;
20363
20364 END IF;
20365
20366 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20367 RAISE FND_API.G_EXC_ERROR;
20368
20369 ELSIF l_err_code < 0
20370 THEN
20371
20372 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20373 THEN
20374 pa_interface_utils_pub.map_new_amg_msg
20375 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20376 ,p_msg_attribute => 'CHANGE'
20377 ,p_resize_flag => 'Y'
20378 ,p_msg_context => 'PROJ'
20379 ,p_attribute1 => l_project_in_rec.pm_project_reference
20380 ,p_attribute2 => ''
20381 ,p_attribute3 => ''
20382 ,p_attribute4 => ''
20383 ,p_attribute5 => '');
20384 END IF;
20385
20386 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20387 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20388 END IF;
20389
20390 /* Update the project customer information */
20391 /* The code below is also redundant for a new customer
20392 Update Pa_project_customers
20393 Set bill_to_customer_id=l_bill_to_customer_id,
20394 ship_to_customer_id=l_ship_to_customer_id,
20395 Bill_To_Address_Id =l_bill_to_address_id,
20396 Ship_to_address_id =l_ship_to_address_id
20397 where project_id=l_project_id
20398 and customer_id=p_project_in.customer_id;
20399
20400 If p_project_in.bill_to_customer_id is not null and p_project_in.bill_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20401 Delete pa_project_contacts
20402 where Project_Id=l_project_id
20403 and customer_id=p_project_in.customer_id
20404 and Project_Contact_Type_Code='BILLING';
20405
20406 end if;
20407
20408 If p_project_in.ship_to_customer_id is not null and p_project_in.ship_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20409 Delete pa_project_contacts
20410 where Project_Id=l_project_id
20411 and customer_id=p_project_in.customer_id
20412 and Project_Contact_Type_Code='SHIPPING';
20413
20414 end if; END of COmmented Code for tracking */
20415 /* Added the call to PA_CUSTOMERS_CONTACTS_PUB.CREATE_PROJECT_CUSTOMER so that
20416 the validations done at form level are also done when customer is created via AMG API */
20417 ----dbms_output.put_line('Before calling CREATE_PROJECT_CUSTOMER');
20418 ----dbms_output.put_line('Value of l_bill_to_customer_id'||l_bill_to_customer_id);
20419 ----dbms_output.put_line('Value of l_ship_to_customer_id'||l_ship_to_customer_id);
20420
20421
20422
20423 -- bug 5554475
20424
20425 l_ALLOW_INV_USER_RATE_FLAG := p_customers_in(i).ALLOW_INV_USER_RATE_TYPE_FLAG ;
20426 l_INV_RATE_DATE := p_customers_in(i).INV_RATE_DATE ;
20427 l_INV_RATE_TYPE := p_customers_in(i).INV_RATE_TYPE;
20428 l_INV_CURRENCY_CODE := p_customers_in(i).INV_CURRENCY_CODE ;
20429 l_INV_EXCHANGE_RATE := p_customers_in(i).INV_EXCHANGE_RATE ;
20430
20431
20432
20433 If l_ALLOW_INV_USER_RATE_FLAG = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR or l_ALLOW_INV_USER_RATE_FLAG IS NULL then
20434 l_ALLOW_INV_USER_RATE_FLAG := 'N';
20435 end if;
20436
20437
20438
20439 if l_INV_RATE_TYPE is not null and l_INV_RATE_TYPE <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20440
20441 begin
20442 l_USER_INV_RATE_TYPE:=l_INV_RATE_TYPE;
20443 select conversion_type into l_INV_RATE_TYPE
20444 from pa_conversion_types_v
20445 where user_conversion_type=l_USER_INV_RATE_TYPE;
20446 exception when no_data_found then
20447 l_INV_RATE_TYPE :=null;
20448 end;
20449 end if;
20450
20451 Select pt.CC_PRVDR_FLAG,pa.multi_currency_billing_flag
20452 into l_cc_prvdr_flag,l_mcb_flag
20453 From pa_project_types pt, pa_projects pa
20454 where pa.project_type=pt.project_type AND
20455 pt.org_id = pa.org_id and
20456 pa.project_id=l_project_id;
20457
20458 If l_INV_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20459 if l_mcb_flag = 'Y' or l_cc_prvdr_flag ='Y' then
20460 OPEN cur_pa_impl;
20461 FETCH cur_pa_impl INTO l_inv_rate_type;
20462 CLOSE cur_pa_impl;
20463 end if;
20464 END if;
20465
20466 if l_mcb_flag = 'N' and l_cc_prvdr_flag ='N' then
20467 l_inv_rate_type := null;
20468 l_ALLOW_INV_USER_RATE_FLAG := 'N';
20469 l_INV_EXCHANGE_RATE :=null;
20470 l_INV_RATE_DATE :=null;
20471 end if;
20472
20473 If l_INV_CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20474 l_INV_CURRENCY_CODE :=l_project_rec.PROJECT_CURRENCY_CODE;
20475 END if;
20476
20477
20478 If l_INV_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
20479 l_INV_EXCHANGE_RATE := FND_API.G_MISS_NUM;
20480 END if;
20481
20482 If l_INV_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
20483 l_INV_RATE_DATE := FND_API.G_MISS_DATE;
20484 END if;
20485
20486 --bug#5554475
20487
20488 -- Bug 5622539
20489 l_default_top_task_cust_flag := p_customers_in(i).enable_top_task_cust_flag;
20490
20491 /*
20492 If l_default_top_task_cust_flag is null or
20493 l_default_top_task_cust_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
20494 l_default_top_task_cust_flag := 'N';
20495 end if;
20496 */
20497 -- Bug 5622539
20498 If l_default_top_task_cust_flag <> 'Y' then
20499 l_default_top_task_cust_flag := 'N';
20500 end if;
20501
20502 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
20503 (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
20504 l_default_top_task_cust_flag:='N';
20505 else
20506 l_CUSTOMER_BILL_SPLIT:=null;
20507 end if;
20508 -- Bug 5622539
20509
20510 PA_CUSTOMERS_CONTACTS_PUB.CREATE_PROJECT_CUSTOMER(
20511 P_API_VERSION => 1.0
20512 , P_INIT_MSG_LIST => 'T'
20513 , P_COMMIT => 'F'
20514 , P_VALIDATE_ONLY => 'F'
20515 , P_VALIDATION_LEVEL => 100
20516 , P_CALLING_MODULE => 'AMG'
20517 , P_DEBUG_MODE => 'N'
20518 , P_MAX_MSG_COUNT => 100
20519 , P_PROJECT_ID => l_project_id
20520 , P_CUSTOMER_ID => p_customers_in(i).customer_id
20521 , P_CUSTOMER_NAME => NULL
20522 , P_CUSTOMER_NUMBER => NULL
20523 , P_PROJECT_RELATIONSHIP_CODE=> p_customers_in(i).PROJECT_RELATIONSHIP_CODE
20524 , P_CUSTOMER_BILL_SPLIT => l_CUSTOMER_BILL_SPLIT -- p_customers_in(i).CUSTOMER_BILL_SPLIT: Bug 5622539
20525 , P_BILL_TO_CUSTOMER_ID => l_bill_to_customer_id
20526 , P_SHIP_TO_CUSTOMER_ID => l_ship_to_customer_id
20527 , P_BILL_TO_ADDRESS_ID => l_bill_to_address_id
20528 , P_SHIP_TO_ADDRESS_ID => l_ship_to_address_id
20529 ,p_bill_to_customer_name => null
20530 ,p_bill_to_customer_number => null
20531 ,p_ship_to_customer_name => null
20532 ,p_ship_to_customer_number => null
20533 , P_BILL_SITE_NAME => NULL
20534 , P_WORK_SITE_NAME => NULL
20535 , P_INV_CURRENCY_CODE => l_INV_CURRENCY_CODE --bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE
20536 , P_INV_RATE_TYPE => l_INV_RATE_TYPE --bug 5554475
20537 , P_INV_RATE_DATE => l_INV_RATE_DATE --bug 5554475
20538 , P_INV_EXCHANGE_RATE => l_INV_EXCHANGE_RATE --bug 5554475
20539 , P_ALLOW_USER_RATE_TYPE_FLAG=> l_ALLOW_INV_USER_RATE_FLAG --bug 5554475
20540 , P_RECEIVER_TASK_ID => null
20541 , X_CUSTOMER_ID => l_customer_id
20542 , X_RETURN_STATUS => x_return_status
20543 , X_MSG_COUNT => x_msg_count
20544 , X_MSG_DATA => x_msg_data
20545 --Added for FP.M changes to project billing setup. Tracking bug 3279981
20546 , p_default_top_task_cust_flag => l_default_top_task_cust_flag
20547 --, p_en_top_task_cust_flag => 'N' This flag is mandatory only if calling context id forms
20548 );
20549
20550 --uncommented and modified the below for Bug#5554475
20551
20552 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
20553 x_msg_count := FND_MSG_PUB.count_msg;
20554 if x_msg_count = 1 then
20555 PA_INTERFACE_UTILS_PUB.get_messages
20556 (p_encoded => FND_API.G_FALSE,
20557 p_msg_index => 1,
20558 p_msg_count => x_msg_count,
20559 p_msg_data => x_msg_data,
20560 p_data => x_msg_data,
20561 p_msg_index_out => l_msg_index_out);
20562
20563 end if;
20564 If x_return_status = FND_API.G_RET_STS_ERROR THEN
20565 p_project_out.return_status := x_return_status;
20566 RAISE FND_API.G_EXC_ERROR;
20567 ELSE
20568 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20569 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20570 END if;
20571
20572 end if;
20573
20574 --Bug#5554475
20575
20576 ----dbms_output.put_line('After calling CREATE_PROJECT_CUSTOMER x_return_status X_MSG_DATA'||x_return_status||'e'||X_MSG_DATA);
20577
20578 /* call to create_customer_contacts added for tracking bug by aditi */
20579 pa_customer_info.Create_Customer_Contacts
20580 ( X_Project_Id => l_project_id,
20581 X_Customer_Id => p_customers_in(i).customer_id,
20582 X_Project_Relation_Code => p_customers_in(i).project_relationship_code,
20583 X_Customer_Bill_Split => p_customers_in(i).customer_bill_split,
20584 X_Bill_To_Customer_Id => l_bill_to_customer_id,
20585 X_Ship_To_Customer_Id => l_ship_to_customer_id,
20586 X_Bill_To_Address_Id => l_bill_to_address_id,
20587 X_Ship_To_Address_Id => l_ship_to_address_id,
20588 X_Bill_To_Contact_Id => l_bill_to_contact_id,
20589 X_Ship_To_Contact_Id => l_ship_to_contact_id,
20590 X_Inv_Currency_Code => l_INV_CURRENCY_CODE, --bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE,
20591 X_Inv_Rate_Type => l_INV_RATE_TYPE, --bug 5554475
20592 X_Inv_Rate_Date => l_INV_RATE_DATE, --bug 5554475
20593 X_Inv_Exchange_Rate => l_INV_EXCHANGE_RATE, --bug 5554475
20594 X_Allow_Inv_Rate_Type_Fg => l_ALLOW_INV_USER_RATE_FLAG, --bug 5554475
20595 X_Bill_Another_Project_Fg => l_bill_another_project_flag, -- Added for 4153629
20596 X_Receiver_Task_Id => l_receiver_task_id , -- Added for 4153629
20597 X_User => FND_GLOBAL.USER_ID,
20598 X_Login => FND_GLOBAL.LOGIN_ID,
20599 X_Err_Code => l_err_code,
20600 X_Err_Stage => l_err_stage,
20601 X_Err_Stack => l_err_stack
20602 );
20603 ----dbms_output.put_line('value of l_err_code'||l_err_code);
20604 /* call to create_customer_contacts added for tracking bug by aditi */
20605 IF l_err_code > 0
20606 THEN
20607
20608 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20609 THEN
20610
20611 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20612 THEN
20613 pa_interface_utils_pub.map_new_amg_msg
20614 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20615 ,p_msg_attribute => 'CHANGE'
20616 ,p_resize_flag => 'N'
20617 ,p_msg_context => 'PROJ'
20618 ,p_attribute1 => l_project_in_rec.pm_project_reference
20619 ,p_attribute2 => ''
20620 ,p_attribute3 => ''
20621 ,p_attribute4 => ''
20622 ,p_attribute5 => '');
20623 ELSE
20624 pa_interface_utils_pub.map_new_amg_msg
20625 ( p_old_message_code => l_err_stage
20626 ,p_msg_attribute => 'CHANGE'
20627 ,p_resize_flag => 'N'
20628 ,p_msg_context => 'PROJ'
20629 ,p_attribute1 => l_project_in_rec.pm_project_reference
20630 ,p_attribute2 => ''
20631 ,p_attribute3 => ''
20632 ,p_attribute4 => ''
20633 ,p_attribute5 => '');
20634 END IF;
20635
20636 END IF;
20637
20638 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20639 RAISE FND_API.G_EXC_ERROR;
20640
20641 ELSIF l_err_code < 0
20642 THEN
20643
20644 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20645 THEN
20646 pa_interface_utils_pub.map_new_amg_msg
20647 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
20648 ,p_msg_attribute => 'CHANGE'
20649 ,p_resize_flag => 'N'
20650 ,p_msg_context => 'PROJ'
20651 ,p_attribute1 => l_project_in_rec.pm_project_reference
20652 ,p_attribute2 => ''
20653 ,p_attribute3 => ''
20654 ,p_attribute4 => ''
20655 ,p_attribute5 => '');
20656 END IF;
20657
20658 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20659 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20660 END IF;
20661
20662 END IF ; --IF p_customers_in(i).customer_id IS NOT NULL
20663 Else --If Cur_Customer%NOTFOUND
20664 /* Its its an existing customer */
20665 CLOSE Cur_Customer;
20666 /* Code copied and pasted below */
20667
20668 --dbms_output.put_line('Customer is existing in the databse ');
20669 l_bill_to_customer_id:=p_customers_in(i).bill_to_customer_id;
20670 l_ship_to_customer_id:=p_customers_in(i).ship_to_customer_id;
20671 --added for bug 3911782
20672 l_bill_to_address_id :=p_customers_in(i).bill_to_address_id;
20673 l_ship_to_address_id :=p_customers_in(i).ship_to_address_id;
20674 /* added these two assignments */
20675 l_project_relationship_code := p_customers_in(i).PROJECT_RELATIONSHIP_CODE;
20676 l_customer_bill_split := p_customers_in(i).Customer_Bill_Split;
20677 l_bill_another_project_flag := p_customers_in(i).bill_another_project_flag;
20678 l_receiver_task_id := p_customers_in(i).receiver_task_id;
20679 /* added OR condition so that PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM is taken care of for bug 3000293 */
20680 If (p_customers_in(i).bill_to_customer_id is null or p_customers_in(i).bill_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20681 and Cur_Customer_rec.bill_to_customer_id is not null Then
20682 l_bill_to_customer_id:= Cur_Customer_rec.bill_to_customer_id;
20683 --changes for bug 3911782
20684 If (p_customers_in(i).bill_to_address_id is null or p_customers_in(i).bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20685 and Cur_Customer_rec.bill_to_address_id is not null Then
20686 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20687 End if;
20688 Else
20689 If (p_customers_in(i).bill_to_address_id is null or p_customers_in(i).bill_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20690 and Cur_Customer_rec.bill_to_address_id is not null Then
20691 l_bill_to_address_id:= Cur_Customer_rec.bill_to_address_id;
20692 End if;
20693 --changes end for bug 3911782
20694 end if;
20695
20696 If (p_customers_in(i).ship_to_customer_id is null or p_customers_in(i).ship_to_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20697 and Cur_Customer_rec.ship_to_customer_id is not null Then
20698 l_ship_to_customer_id:= Cur_Customer_rec.ship_to_customer_id;
20699 --changes for bug 3911782
20700 If (p_customers_in(i).ship_to_address_id is null or p_customers_in(i).ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20701 and Cur_Customer_rec.ship_to_address_id is not null Then
20702 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20703 End if;
20704 Else
20705 If (p_customers_in(i).ship_to_address_id is null or p_customers_in(i).ship_to_address_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20706 and Cur_Customer_rec.ship_to_address_id is not null Then
20707 l_ship_to_address_id:= Cur_Customer_rec.ship_to_address_id;
20708 End if;
20709 --changes end for bug 3911782
20710 end if;
20711 /* New code added FOR tracking bug */
20712 If (p_customers_in(i).PROJECT_RELATIONSHIP_CODE is null or p_customers_in(i).PROJECT_RELATIONSHIP_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
20713 and Cur_Customer_rec.PROJECT_RELATIONSHIP_CODE is not null Then
20714 l_project_relationship_code := Cur_Customer_rec.PROJECT_RELATIONSHIP_CODE;
20715 end if;
20716
20717 -- Bug 7255015
20718 If (p_customers_in(i).Customer_Bill_Split is null or p_customers_in(i).Customer_Bill_Split = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) Then
20719 IF Cur_Customer_rec.Customer_Bill_Split is not null THEN
20720 l_customer_bill_split := Cur_Customer_rec.Customer_Bill_Split;
20721 END IF;
20722 Else
20723 If (pa_customer_info.revenue_accrued_or_billed(l_project_id)) then
20724 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20725 THEN
20726 pa_utils.add_message
20727 ( p_app_short_name => 'PA'-- new message for bug 3326468
20728 ,p_msg_name => 'PA_UPD_CUST_NOT_ALLOWED'
20729 ,p_token1 => 'PROJECT_NAME'
20730 ,p_value1 => l_project_id
20731 ,p_token2 => 'CUSTOMER_ID'
20732 ,p_value2 => p_customers_in(i).customer_id
20733 );
20734 END IF;
20735 RAISE FND_API.G_EXC_ERROR;
20736 END IF;
20737 end if;
20738 --dbms_output..put_line('Value of p_customers_in(i).bill_another_project_flag'||p_customers_in(i).bill_another_project_flag);
20739 --dbms_output..put_line('Value of p_customers_in(i).receiver_task_id'||p_customers_in(i).receiver_task_id);
20740 /* Code added for tracking bug 4153629*/
20741 If (p_customers_in(i).bill_another_project_flag is null or p_customers_in(i).bill_another_project_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
20742 and Cur_Customer_rec.bill_another_project_flag is not null Then
20743 l_bill_another_project_flag := Cur_Customer_rec.bill_another_project_flag;
20744 If (p_customers_in(i).receiver_task_id is null or p_customers_in(i).receiver_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
20745 --Bug#5554578
20746 IF Cur_Customer_rec.receiver_task_id is not null Then
20747
20748 l_receiver_task_id := Cur_Customer_rec.receiver_task_id;
20749 END IF;
20750 Else /* Some value of passed for receiver_task_id */
20751 If l_bill_another_project_flag = 'N' Then
20752 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20753 THEN
20754 pa_utils.add_message
20755 ( p_app_short_name => 'PA'-- new message for bug 4153629
20756 ,p_msg_name => 'PA_UPD_RCVR_TSK_NOT_ALLOWED'
20757 ,p_token1 => 'PROJECT_NAME'
20758 ,p_value1 => l_project_id
20759 ,p_token2 => 'CUSTOMER_ID'
20760 ,p_value2 => p_customers_in(i).customer_id
20761 );
20762 END IF;
20763 RAISE FND_API.G_EXC_ERROR;
20764 ELSE /* l_bill_another_project_flag = 'Y' */
20765 l_receiver_task_id := p_customers_in(i).receiver_task_id;
20766 PA_CUSTOMER_INFO.CHECK_RECEIVER_PROJ_ENTERABLE
20767 (p_project_id => l_project_id
20768 ,p_customer_id => p_customers_in(i).customer_id
20769 ,p_receiver_task_id => l_receiver_task_id
20770 ,x_bill_another_project_flag => l_bill_another_project_flag
20771 ,x_return_status => x_return_status
20772 ,x_error_msg_code => l_error_msg_code
20773 );
20774 --dbms_output..put_line('value of l_bill_another_project_flag'||l_bill_another_project_flag);
20775 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
20776 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20777 p_msg_name => l_error_msg_code
20778 ,p_token1 => 'PROJECT_NAME'
20779 ,p_value1 => l_project_id
20780 ,p_token2 => 'CUSTOMER_ID'
20781 ,p_value2 => p_customers_in(i).customer_id
20782 );
20783 RAISE FND_API.G_EXC_ERROR;
20784 END if; -- <l_return_status <> FND_API.G_RET_STS_SUCCESS>
20785 end if; -- l_bill_another_project_flag = 'N'
20786 End If; --p_customers_in(i).receiver_task_id is null
20787 Else /* Some value is passed for p_customers_in(i).bill_another_project_flag*/
20788 /* This means that the status is being flipped */
20789 If (p_customers_in(i).receiver_task_id is null or p_customers_in(i).receiver_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
20790 --Bug#5554578
20791 IF Cur_Customer_rec.receiver_task_id is not null Then
20792
20793 l_receiver_task_id := Cur_Customer_rec.receiver_task_id;
20794 END IF;
20795 Else /* Some value of passed for receiver_task_id */
20796 If l_bill_another_project_flag = 'N' Then
20797 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20798 THEN
20799 pa_utils.add_message
20800 ( p_app_short_name => 'PA'-- new message for bug 4153629
20801 ,p_msg_name => 'PA_UPD_RCVR_TSK_NOT_ALLOWED'
20802 ,p_token1 => 'PROJECT_NAME'
20803 ,p_value1 => l_project_id
20804 ,p_token2 => 'CUSTOMER_ID'
20805 ,p_value2 => p_customers_in(i).customer_id
20806 );
20807 END IF;
20808 RAISE FND_API.G_EXC_ERROR;
20809 ELSE /* l_bill_another_project_flag = 'Y' */
20810 l_receiver_task_id := p_customers_in(i).receiver_task_id;
20811 PA_CUSTOMER_INFO.CHECK_RECEIVER_PROJ_ENTERABLE
20812 (p_project_id => l_project_id
20813 ,p_customer_id => p_customers_in(i).customer_id
20814 ,p_receiver_task_id => l_receiver_task_id
20815 ,x_bill_another_project_flag => l_bill_another_project_flag
20816 ,x_return_status => x_return_status
20817 ,x_error_msg_code => l_error_msg_code
20818 );
20819 --dbms_output..put_line('value of l_bill_another_project_flag'||l_bill_another_project_flag);
20820
20821 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
20822 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
20823 p_msg_name => l_error_msg_code
20824 ,p_token1 => 'PROJECT_NAME'
20825 ,p_value1 => l_project_id
20826 ,p_token2 => 'CUSTOMER_ID'
20827 ,p_value2 => p_customers_in(i).customer_id
20828 );
20829 RAISE FND_API.G_EXC_ERROR;
20830 END if; -- <l_return_status <> FND_API.G_RET_STS_SUCCESS>
20831 END IF;/* l_bill_another_project_flag = 'N' */
20832 End If;
20833 End if;
20834
20835 /* Changed end for tracking bug by aditi */
20836 /* End of Code changesfor tracking bug 4153629*/
20837
20838 IF(NVL(l_cust_acc_rel_code,'N') ='N' and
20839 p_customers_in(i).customer_id IS NOT NULL AND p_customers_in(i).customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) and
20840 ((l_bill_to_customer_id IS NOT NULL AND l_bill_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20841 p_customers_in(i).customer_id <> l_bill_to_customer_id
20842 ) or
20843 (
20844 l_ship_to_customer_id IS NOT NULL AND l_ship_to_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM and
20845 p_customers_in(i).customer_id <> l_ship_to_customer_id
20846 ))
20847 THEN
20848 pa_interface_utils_pub.map_new_amg_msg
20849 ( p_old_message_code => 'PA_BILL_SHIP_CUST_INV'
20850 ,p_msg_attribute => 'CHANGE'
20851 ,p_resize_flag => 'Y'
20852 ,p_msg_context => 'PROJ'
20853 ,p_attribute1 => l_project_in_rec.pm_project_reference
20854 ,p_attribute2 => ''
20855 ,p_attribute3 => ''
20856 ,p_attribute4 => ''
20857 ,p_attribute5 => '');
20858 RAISE FND_API.G_EXC_ERROR;
20859 END IF;
20860 /** changes begin for tracking bug by aditi **/
20861
20862 ----dbms_output.put_line('value of p_project_in.CONTACT_ID '||p_customers_in(i).CONTACT_ID);
20863 If (p_customers_in(i).CONTACT_ID IS NOT NULL) AND (p_customers_in(i).CONTACT_ID <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
20864 then
20865
20866
20867 IF (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE IS NULL) OR (p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )THEN
20868 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20869 THEN
20870 pa_utils.add_message
20871 ( p_app_short_name => 'PA'-- existing message for tracking bug
20872 ,p_msg_name => 'PA_CONTACT_TYPE_REQD'
20873 ,p_token1 => 'PROJECT_NAME'
20874 ,p_value1 => l_project_in_rec.pm_project_reference
20875 ,p_token2 => 'CUSTOMER_ID'
20876 ,p_value2 => p_customers_in(i).customer_id
20877 ,p_token3 => 'CONTACT_ID'
20878 ,p_value3 => p_customers_in(i).CONTACT_ID
20879 );
20880 END IF;
20881 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20882 p_return_status := FND_API.G_RET_STS_ERROR;
20883 RAISE FND_API.G_EXC_ERROR;
20884 END IF;
20885 end if;
20886
20887 If p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'BILLING' then
20888 l_bill_to_contact_id := p_customers_in(i).CONTACT_ID;
20889 l_ship_to_contact_id := NULL; -- Bug 5622539
20890 ElsIf p_customers_in(i).PROJECT_CONTACT_TYPE_CODE = 'SHIPPING' then
20891 l_ship_to_contact_id := p_customers_in(i).CONTACT_ID;
20892 l_bill_to_contact_id := NULL; -- Bug 5622539
20893 Else
20894 --null;
20895 l_bill_to_contact_id := NULL;
20896 l_ship_to_contact_id := NULL;
20897 End If;
20898
20899 /** end of chnages for tracking bug by aditi **/
20900
20901 ----dbms_output.put_line('Before calling pa_customer_info.get_customer_info');
20902 ----dbms_output.put_line('Value of l_bill_to_contact_id '||l_bill_to_contact_id);
20903 ----dbms_output.put_line('Value of l_ship_to_contact_id '||l_ship_to_contact_id);
20904
20905 pa_customer_info.get_customer_info( X_project_ID => l_project_id
20906 ,X_Customer_Id => p_customers_in(i).customer_id
20907 ,X_Bill_To_Customer_Id => l_bill_to_customer_id
20908 ,X_Ship_To_Customer_Id => l_ship_to_customer_id
20909 ,X_Bill_To_Address_Id => l_bill_to_address_id
20910 ,X_Ship_To_Address_Id => l_ship_to_address_id
20911 ,X_Bill_To_Contact_Id => l_bill_to_contact_id
20912 ,X_Ship_To_Contact_Id => l_ship_to_contact_id
20913 ,X_Err_Code => l_err_code
20914 ,X_Err_Stage => l_err_stage
20915 ,X_Err_Stack => l_err_stack
20916 ,p_calling_module => 'AMG' --added for bug#4770535
20917 );
20918
20919 ----dbms_output.put_line('After calling pa_customer_info.get_customer_info'||l_err_code);
20920
20921
20922 -- For this API,error code 10 is a warning.Anything above 10 is an error
20923 IF l_err_code > 10
20924 THEN
20925
20926 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
20927 THEN
20928
20929 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
20930 THEN
20931 pa_interface_utils_pub.map_new_amg_msg
20932 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20933 ,p_msg_attribute => 'CHANGE'
20934 ,p_resize_flag => 'Y'
20935 ,p_msg_context => 'PROJ'
20936 ,p_attribute1 => l_project_in_rec.pm_project_reference
20937 ,p_attribute2 => ''
20938 ,p_attribute3 => ''
20939 ,p_attribute4 => ''
20940 ,p_attribute5 => '');
20941 ELSE
20942 pa_interface_utils_pub.map_new_amg_msg
20943 ( p_old_message_code => l_err_stage
20944 ,p_msg_attribute => 'CHANGE'
20945 ,p_resize_flag => 'Y'
20946 ,p_msg_context => 'PROJ'
20947 ,p_attribute1 => l_project_in_rec.pm_project_reference
20948 ,p_attribute2 => ''
20949 ,p_attribute3 => ''
20950 ,p_attribute4 => ''
20951 ,p_attribute5 => '');
20952 END IF;
20953
20954 END IF;
20955
20956 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
20957 RAISE FND_API.G_EXC_ERROR;
20958
20959 ELSIF l_err_code < 0
20960 THEN
20961
20962 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
20963 THEN
20964 pa_interface_utils_pub.map_new_amg_msg
20965 ( p_old_message_code => 'PA_GET_CUSTOMER_INFO_FAILED'
20966 ,p_msg_attribute => 'CHANGE'
20967 ,p_resize_flag => 'Y'
20968 ,p_msg_context => 'PROJ'
20969 ,p_attribute1 => l_project_in_rec.pm_project_reference
20970 ,p_attribute2 => ''
20971 ,p_attribute3 => ''
20972 ,p_attribute4 => ''
20973 ,p_attribute5 => '');
20974 END IF;
20975
20976 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
20977 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
20978 END IF;
20979
20980 /* Update the project customer information */
20981
20982 Update Pa_project_customers
20983 Set bill_to_customer_id=l_bill_to_customer_id,
20984 ship_to_customer_id=l_ship_to_customer_id,
20985 Bill_To_Address_Id =l_bill_to_address_id,
20986 Ship_to_address_id =l_ship_to_address_id
20987 where project_id=l_project_id
20988 and customer_id=p_customers_in(i).customer_id;
20989
20990 If p_customers_in(i).bill_to_customer_id is not null and p_customers_in(i).bill_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20991 Delete pa_project_contacts
20992 where Project_Id=l_project_id
20993 and customer_id=p_customers_in(i).customer_id
20994 and Project_Contact_Type_Code='BILLING';
20995
20996 end if;
20997
20998 If p_customers_in(i).ship_to_customer_id is not null and p_customers_in(i).ship_to_customer_id <> cur_customer_rec.bill_to_customer_id THEN
20999 Delete pa_project_contacts
21000 where Project_Id=l_project_id
21001 and customer_id=p_customers_in(i).customer_id
21002 and Project_Contact_Type_Code='SHIPPING';
21003
21004 end if;
21005 ----dbms_output.put_line('before calling UPDATE_PROJECT_CUSTOMER');
21006 ----dbms_output.put_line('Value of p_customers_in(i).PROJECT_RELATIONSHIP_CODE'||p_customers_in(i).PROJECT_RELATIONSHIP_CODE);
21007 ----dbms_output.put_line('Value of l_bill_to_customer_id after '||l_bill_to_customer_id);
21008 ----dbms_output.put_line('Value of l_bill_to_address_id after '||l_bill_to_address_id);
21009 ----dbms_output.put_line('Value of l_ship_to_address_id after '||l_ship_to_address_id);
21010 ----dbms_output.put_line('Value of l_ship_to_customer_id after '||l_ship_to_customer_id);
21011
21012
21013
21014 -- Start of addition for bug 5554475
21015 l_ALLOW_INV_USER_RATE_FLAG := p_customers_in(i).ALLOW_INV_USER_RATE_TYPE_FLAG ;
21016 l_INV_RATE_DATE := p_customers_in(i).INV_RATE_DATE ;
21017 l_INV_RATE_TYPE := p_customers_in(i).INV_RATE_TYPE;
21018 l_INV_CURRENCY_CODE := p_customers_in(i).INV_CURRENCY_CODE ;
21019 l_INV_EXCHANGE_RATE := p_customers_in(i).INV_EXCHANGE_RATE ;
21020
21021 If l_ALLOW_INV_USER_RATE_FLAG = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
21022
21023 l_ALLOW_INV_USER_RATE_FLAG := cur_customer_rec.ALLOW_INV_USER_RATE_TYPE_FLAG;
21024 END if;
21025
21026 If l_ALLOW_INV_USER_RATE_FLAG IS NULL then
21027 l_ALLOW_INV_USER_RATE_FLAG := 'N';
21028 end if;
21029
21030 if l_INV_RATE_TYPE is not null and l_INV_RATE_TYPE <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
21031 begin
21032 l_USER_INV_RATE_TYPE:=l_INV_RATE_TYPE;
21033 select conversion_type into l_INV_RATE_TYPE
21034 from pa_conversion_types_v
21035 where user_conversion_type=l_USER_INV_RATE_TYPE;
21036 exception when no_data_found then
21037 l_INV_RATE_TYPE:=null;
21038 end;
21039 end if;
21040
21041 If l_INV_RATE_TYPE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
21042 l_INV_RATE_TYPE := cur_customer_rec.INV_RATE_TYPE;
21043 END if;
21044
21045 Select pt.CC_PRVDR_FLAG,pa.multi_currency_billing_flag
21046 into l_cc_prvdr_flag,l_mcb_flag
21047 From pa_project_types pt, pa_projects pa
21048 where pa.project_type=pt.project_type
21049 AND pa.org_id = pt.org_id
21050 and pa.project_id=l_project_id;
21051
21052 if l_mcb_flag = 'N' and l_cc_prvdr_flag ='N' then
21053 l_inv_rate_type := null;
21054 l_ALLOW_INV_USER_RATE_FLAG := 'N';
21055 l_INV_EXCHANGE_RATE :=null;
21056 l_INV_RATE_DATE :=null;
21057 end if;
21058
21059 If l_INV_CURRENCY_CODE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
21060 l_INV_CURRENCY_CODE := cur_customer_rec.INV_CURRENCY_CODE;
21061 END if;
21062
21063 If l_INV_EXCHANGE_RATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
21064 l_INV_EXCHANGE_RATE := cur_customer_rec.INV_EXCHANGE_RATE;
21065 END if;
21066
21067 If l_INV_RATE_DATE = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
21068 l_INV_RATE_DATE := cur_customer_rec.INV_RATE_DATE;
21069 END if;
21070 -- End of addition for bug 5554475
21071
21072
21073 --bug 5554578
21074
21075 l_default_top_task_cust_flag := cur_customer_rec.default_top_task_cust_flag;
21076
21077 --bug 5554578
21078
21079 --bug# 5554475
21080 IF l_bill_another_project_flag = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR OR l_bill_another_project_flag IS NULL THEN
21081 l_bill_another_project_flag := cur_customer_rec.bill_another_project_flag;
21082 END IF;
21083
21084 IF l_receiver_task_id= PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR l_receiver_task_id IS NULL THEN
21085 l_receiver_task_id := cur_customer_rec.receiver_task_id;
21086 END IF;
21087
21088 --bug# 5554475
21089
21090 -- Bug 5622539
21091 If l_default_top_task_cust_flag <> 'Y' then
21092 l_default_top_task_cust_flag := 'N';
21093 end if;
21094
21095 -- Bug 5622539
21096 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
21097 (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
21098 l_default_top_task_cust_flag:='N';
21099 else
21100 l_CUSTOMER_BILL_SPLIT:=null;
21101 end if;
21102 -- Bug 5622539
21103
21104
21105 /* adding call to PA_CUSTOMERS_CONTACTS_PUB.UPDATE_PROJECT_CUSTOMER */
21106 PA_CUSTOMERS_CONTACTS_PUB.UPDATE_PROJECT_CUSTOMER(
21107 P_API_VERSION => 1.0
21108 , P_INIT_MSG_LIST => 'T'
21109 , P_COMMIT => 'F'
21110 , P_VALIDATE_ONLY => 'F'
21111 , P_VALIDATION_LEVEL => 100
21112 , P_CALLING_MODULE => 'AMG'
21113 , P_DEBUG_MODE => 'N'
21114 , P_MAX_MSG_COUNT => 100
21115 , P_PROJECT_ID => l_project_id
21116 , P_CUSTOMER_ID => p_customers_in(i).customer_id
21117 /* , P_PROJECT_RELATIONSHIP_CODE=> p_customers_in(i).PROJECT_RELATIONSHIP_CODE
21118 , P_CUSTOMER_BILL_SPLIT => p_customers_in(i).CUSTOMER_BILL_SPLIT */
21119 , P_PROJECT_RELATIONSHIP_CODE => l_PROJECT_RELATIONSHIP_CODE
21120 , P_CUSTOMER_BILL_SPLIT => l_CUSTOMER_BILL_SPLIT
21121 , P_BILL_TO_CUSTOMER_ID => l_bill_to_customer_id
21122 , P_SHIP_TO_CUSTOMER_ID => l_ship_to_customer_id
21123 , P_BILL_TO_ADDRESS_ID => l_bill_to_address_id
21124 , P_SHIP_TO_ADDRESS_ID => l_ship_to_address_id
21125 ,p_bill_to_customer_name => NULL
21126 ,p_bill_to_customer_number => NULL
21127 ,p_ship_to_customer_name => NULL
21128 ,p_ship_to_customer_number => NULL
21129 , P_BILL_SITE_NAME => NULL
21130 , P_WORK_SITE_NAME => NULL
21131 , P_INV_CURRENCY_CODE => l_INV_CURRENCY_CODE --bug 5554475 l_project_rec.PROJECT_CURRENCY_CODE
21132 , P_INV_RATE_TYPE => l_INV_RATE_TYPE --bug 5554475
21133 , P_INV_RATE_DATE => l_INV_RATE_DATE --bug 5554475
21134 , P_INV_EXCHANGE_RATE => l_INV_EXCHANGE_RATE --bug 5554475
21135 , P_ALLOW_USER_RATE_TYPE_FLAG=> l_ALLOW_INV_USER_RATE_FLAG --bug 5554475
21136 , P_RECEIVER_TASK_ID => l_receiver_task_id -- Added for 4153629
21137 , P_BILL_ANOTHER_PROJECT_FLAG => l_bill_another_project_flag -- Added for 4153629
21138 , P_RECORD_VERSION_NUMBER => Cur_Customer_rec.RECORD_VERSION_NUMBER
21139 , X_RETURN_STATUS => x_return_status
21140 , X_MSG_COUNT => x_msg_count
21141 , X_MSG_DATA => x_msg_data
21142 --Added for FP.M changes to project billing setup. Tracking bug 3279981
21143 , p_default_top_task_cust_flag => l_default_top_task_cust_flag --'N' bug 5554578
21144 --, p_en_top_task_cust_flag => 'N' This flag is mandatory only if calling context id forms
21145 );
21146
21147
21148 -- Start of addition for bug 5554475
21149
21150 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
21151 x_msg_count := FND_MSG_PUB.count_msg;
21152 if x_msg_count = 1 then
21153 PA_INTERFACE_UTILS_PUB.get_messages
21154 (p_encoded => FND_API.G_FALSE,
21155 p_msg_index => 1,
21156 p_msg_count => x_msg_count,
21157 p_msg_data => x_msg_data,
21158 p_data => x_msg_data,
21159 p_msg_index_out => l_msg_index_out);
21160
21161 end if;
21162 If x_return_status = FND_API.G_RET_STS_ERROR THEN
21163 p_project_out.return_status := x_return_status;
21164 RAISE FND_API.G_EXC_ERROR;
21165 else
21166 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21167 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21168 END if;
21169 end if;
21170
21171 -- End of addition for bug 5554475
21172
21173 /* Added Call to pa_customer_info.Create_Customer_Contacts. We only will be adding new contacts.
21174 There are no attrbutes that can be updated in a contact. Hence, the call below will suffice.
21175 It will check if the customer already exists, then Insert into pa_project_customers will
21176 be skipped and data will only be inserted into pa_project_contacts */
21177
21178 pa_customer_info.Create_Customer_Contacts
21179 ( X_Project_Id => l_project_id,
21180 X_Customer_Id => p_customers_in(i).customer_id,
21181 X_Project_Relation_Code => p_customers_in(i).project_relationship_code,
21182 X_Customer_Bill_Split => p_customers_in(i).customer_bill_split,
21183 X_Bill_To_Customer_Id => l_bill_to_customer_id,
21184 X_Ship_To_Customer_Id => l_ship_to_customer_id,
21185 X_Bill_To_Address_Id => l_bill_to_address_id,
21186 X_Ship_To_Address_Id => l_ship_to_address_id,
21187 X_Bill_To_Contact_Id => l_bill_to_contact_id,
21188 X_Ship_To_Contact_Id => l_ship_to_contact_id,
21189 X_Inv_Currency_Code => l_INV_CURRENCY_CODE, -- l_project_rec.PROJECT_CURRENCY_CODE bug 5554475
21190 X_Inv_Rate_Type => l_INV_RATE_TYPE, --bug 5554475
21191 X_Inv_Rate_Date => l_INV_RATE_DATE, --bug 5554475
21192 X_Inv_Exchange_Rate => l_INV_EXCHANGE_RATE, --bug 5554475
21193 X_Allow_Inv_Rate_Type_Fg => l_ALLOW_INV_USER_RATE_FLAG, --bug 5554475
21194 X_Bill_Another_Project_Fg => l_bill_another_project_flag ,-- Added for 4153629,
21195 X_Receiver_Task_Id => l_receiver_task_id, --Added for 4153629
21196 X_User => FND_GLOBAL.USER_ID,
21197 X_Login => FND_GLOBAL.LOGIN_ID,
21198 X_Err_Code => l_err_code,
21199 X_Err_Stage => l_err_stage,
21200 X_Err_Stack => l_err_stack
21201 );
21202 IF l_err_code > 0
21203 THEN
21204
21205 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
21206 THEN
21207
21208 IF NOT pa_project_pvt.check_valid_message(l_err_stage)
21209 THEN
21210 pa_interface_utils_pub.map_new_amg_msg
21211 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
21212 ,p_msg_attribute => 'CHANGE'
21213 ,p_resize_flag => 'N'
21214 ,p_msg_context => 'PROJ'
21215 ,p_attribute1 => l_project_in_rec.pm_project_reference
21216 ,p_attribute2 => ''
21217 ,p_attribute3 => ''
21218 ,p_attribute4 => ''
21219 ,p_attribute5 => '');
21220 ELSE
21221 pa_interface_utils_pub.map_new_amg_msg
21222 ( p_old_message_code => l_err_stage
21223 ,p_msg_attribute => 'CHANGE'
21224 ,p_resize_flag => 'N'
21225 ,p_msg_context => 'PROJ'
21226 ,p_attribute1 => l_project_in_rec.pm_project_reference
21227 ,p_attribute2 => ''
21228 ,p_attribute3 => ''
21229 ,p_attribute4 => ''
21230 ,p_attribute5 => '');
21231 END IF;
21232
21233 END IF;
21234
21235 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
21236 RAISE FND_API.G_EXC_ERROR;
21237
21238 ELSIF l_err_code < 0
21239 THEN
21240
21241 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
21242 THEN
21243 pa_interface_utils_pub.map_new_amg_msg
21244 ( p_old_message_code => 'PA_CREATE_CONTACTS_FAILED'
21245 ,p_msg_attribute => 'CHANGE'
21246 ,p_resize_flag => 'N'
21247 ,p_msg_context => 'PROJ'
21248 ,p_attribute1 => l_project_in_rec.pm_project_reference
21249 ,p_attribute2 => ''
21250 ,p_attribute3 => ''
21251 ,p_attribute4 => ''
21252 ,p_attribute5 => '');
21253 END IF;
21254
21255 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21256 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21257 END IF;
21258
21259 END if; /* is cur_customer%notfound */
21260 i := p_customers_in.next(i);
21261 ----dbms_output.put_line('After processing the customer first record');
21262 END LOOP;
21263 END IF; -- IF p_customers_in.exists(i)
21264 ----dbms_output.put_line('After processing the customer first record OUT OF THE LOOP');
21265
21266 -- Bug 5622539
21267 IF ((l_enable_top_task_cust_flag='Y' and p_project_in.enable_top_task_customer_flag <> 'Y') or
21268 (nvl(l_enable_top_task_cust_flag,'N')='N' and NVL(l_old_cust_top_task_flag, 'N') <> 'Y')) then
21269 i := p_customers_in.first;
21270
21271 IF p_customers_in.exists(i)
21272 THEN
21273 tot_contribution := pa_customer_info.check_proj_tot_contribution(l_project_id,l_valid_proj_flag);
21274 IF l_valid_proj_flag THEN
21275 ----dbms_output.put_line('Value of tot_contribution'||tot_contribution);
21276 IF (tot_contribution <> 0 AND tot_contribution <> 100) OR
21277 /*(tot_contribution <> 100) OR Commented the condition for Bug 10416869 */
21278 (tot_contribution > 100 )
21279 theN
21280 /* pa_interface_utils_pub.map_new_amg_msg
21281 ( p_old_message_code => 'PA_TOT_CUST_BILL_SPLIT_INVLD'
21282 ,p_msg_attribute => 'CHANGE'
21283 ,p_resize_flag => 'N'
21284 ,p_msg_context => 'PROJ'
21285 ,p_attribute1 => ''
21286 ,p_attribute2 => ''
21287 ,p_attribute3 => ''
21288 ,p_attribute4 => ''
21289 ,p_attribute5 => ''); */
21290 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
21291 ,p_msg_name => 'PA_TOT_CUST_BILL_SPLIT_INVLD');
21292 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
21293 p_return_status := FND_API.G_RET_STS_ERROR;
21294 RAISE FND_API.G_EXC_ERROR;
21295 END IF;
21296 END IF;
21297 END IF;
21298 END IF;
21299
21300 -- Bug 5622539
21301 pa_project_pvt.validate_data(
21302 p_calling_context => 'UPDATE_PROJECT',
21303 p_project_id => l_project_id,
21304 x_msg_count => x_msg_count,
21305 x_msg_data => x_msg_data,
21306 x_return_status => x_return_status
21307 );
21308
21309 if x_return_status <> FND_API.G_RET_STS_SUCCESS then
21310 x_msg_count := FND_MSG_PUB.count_msg;
21311 if x_msg_count = 1 then
21312 PA_INTERFACE_UTILS_PUB.get_messages
21313 (p_encoded => FND_API.G_FALSE,
21314 p_msg_index => 1,
21315 p_msg_count => x_msg_count,
21316 p_msg_data => x_msg_data,
21317 p_data => x_msg_data,
21318 p_msg_index_out => l_msg_index_out);
21319
21320 end if;
21321 If x_return_status = FND_API.G_RET_STS_ERROR THEN
21322 p_project_out.return_status := x_return_status;
21323 RAISE FND_API.G_EXC_ERROR;
21324 else
21325 p_project_out.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
21326 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21327 END if;
21328 end if;
21329
21330 /* End of changes by aditi for tracking */
21331
21332 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value
21333 -- using the local variable instead of cursor variable
21334
21335 /** Commented out for bug 5116772
21336 Below code added for bug 3279981. Customer at Top Task in FP_M
21337 /*
21338 --IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 commented
21339 IF 'Y' = p_project_in.enable_top_task_customer_flag AND 'N' = l_old_cust_top_task_flag THEN -- 4188765 added
21340 --Enabling the customer at top task flag. Thus, we need to set the default top task customer
21341 DECLARE
21342 hghst_ctr_cust_id NUMBER;
21343 hghst_ctr_cust_name VARCHAR2(50);
21344 hghst_ctr_cust_num VARCHAR2(30);
21345
21346 l_return_status VARCHAR2(10);
21347 l_msg_count NUMBER := 0;
21348 l_msg_data VARCHAR2(2000);
21349 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
21350 BEGIN
21351 l_exclude_cust_id_tbl(1) := 0;
21352 --Retrieve the customer to be set as the default top task customer
21353 pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
21354 P_API_VERSION => 1.0
21355 , P_INIT_MSG_LIST => 'T'
21356 , P_COMMIT => 'F'
21357 , P_VALIDATE_ONLY => 'F'
21358 , P_VALIDATION_LEVEL => 100
21359 , P_DEBUG_MODE => 'N'
21360 , p_calling_module => 'AMG'
21361 , p_project_id => l_project_id
21362 , p_exclude_cust_id_tbl => l_exclude_cust_id_tbl
21363 , x_highst_contr_cust_id => hghst_ctr_cust_id
21364 , x_highst_contr_cust_name => hghst_ctr_cust_name
21365 , x_highst_contr_cust_num => hghst_ctr_cust_num
21366 , x_return_status => l_return_status
21367 , x_msg_count => l_msg_count
21368 , x_msg_data => l_msg_data );
21369
21370 IF hghst_ctr_cust_id IS NOT null THEN
21371 --This API call will update pa_project_customers and pa_tasks
21372 pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
21373 P_API_VERSION => 1.0
21374 , P_INIT_MSG_LIST => 'T'
21375 , P_COMMIT => 'F'
21376 , P_VALIDATE_ONLY => 'F'
21377 , P_VALIDATION_LEVEL => 100
21378 , P_DEBUG_MODE => 'N'
21379 , p_calling_module => 'AMG'
21380 , p_mode => 'ENABLE'
21381 , p_project_id => l_project_id
21382 , p_def_top_task_cust => hghst_ctr_cust_id
21383 , p_contr_update_cust => null
21384 , x_return_status => l_return_status
21385 , x_msg_count => l_msg_count
21386 , x_msg_data => l_msg_data );
21387 END IF;
21388 END ;
21389 END IF;
21390 End Commented out for bug 5116772 **/
21391
21392 -- 4188765 l_project_rec.enable_top_task_customer_flag cursor value is a pointer so it reflects the updated value in the above code
21393 -- using the local variable instead of cursor variable
21394
21395 --IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_project_rec.enable_top_task_customer_flag THEN -- 4188765 Commented
21396 /* Commented the Below code for Bug 5622539
21397 IF 'N' = p_project_in.enable_top_task_customer_flag AND 'Y' = l_old_cust_top_task_flag THEN -- 4188765 Added
21398 --Disabling the customer at top task flag. Thus, we need to set the customer bill split for the project customers
21399 DECLARE
21400 cust_id PA_PROJECT_CUSTOMERS.customer_id%TYPE;
21401 hghst_ctr_cust_id NUMBER;
21402 hghst_ctr_cust_name VARCHAR2(50);
21403 hghst_ctr_cust_num VARCHAR2(30);
21404 num_customers NUMBER := 0;
21405 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
21406
21407 l_return_status VARCHAR2(10);
21408 l_msg_count NUMBER := 0;
21409 l_msg_data VARCHAR2(2000);
21410 CURSOR cur_get_def_top_task_cust IS
21411 SELECT customer_id
21412 FROM pa_project_customers
21413 WHERE project_id = l_project_id
21414 AND default_top_task_cust_flag = 'Y' ;
21415 BEGIN
21416 l_exclude_cust_id_tbl(1) := 0;
21417 --Retrieve the customer to be updated with 100% contribution
21418 pa_top_task_cust_invoice_pvt.Get_Highest_Contr_Cust(
21419 P_API_VERSION => 1.0
21420 , P_INIT_MSG_LIST => 'T'
21421 , P_COMMIT => 'F'
21422 , P_VALIDATE_ONLY => 'F'
21423 , P_VALIDATION_LEVEL => 100
21424 , P_DEBUG_MODE => 'N'
21425 , p_calling_module => 'AMG'
21426 , p_project_id => l_project_id
21427 , p_exclude_cust_id_tbl => l_exclude_cust_id_tbl
21428 , x_highst_contr_cust_id => hghst_ctr_cust_id
21429 , x_highst_contr_cust_name => hghst_ctr_cust_name
21430 , x_highst_contr_cust_num => hghst_ctr_cust_num
21431 , x_return_status => l_return_status
21432 , x_msg_count => l_msg_count
21433 , x_msg_data => l_msg_data );
21434 OPEN cur_get_def_top_task_cust;
21435 FETCH cur_get_def_top_task_cust INTO cust_id;
21436 CLOSE cur_get_def_top_task_cust;
21437
21438 IF hghst_ctr_cust_id IS NOT NULL THEN
21439 --This API call will update pa_project_customers and pa_tasks
21440 pa_top_task_cust_invoice_pvt.enbl_disbl_cust_at_top_task(
21441 P_API_VERSION => 1.0
21442 , P_INIT_MSG_LIST => 'T'
21443 , P_COMMIT => 'F'
21444 , P_VALIDATE_ONLY => 'F'
21445 , P_VALIDATION_LEVEL => 100
21446 , P_DEBUG_MODE => 'N'
21447 , p_calling_module => 'AMG'
21448 , p_mode => 'DISABLE'
21449 , p_project_id => l_project_id
21450 , p_def_top_task_cust => cust_id
21451 , p_contr_update_cust => hghst_ctr_cust_id
21452 , x_return_status => l_return_status
21453 , x_msg_count => l_msg_count
21454 , x_msg_data => l_msg_data );
21455 END IF;
21456 END;
21457 END IF;
21458 --Changes end for Bug 3279981
21459 Changes end for Customer Account Relationships
21460 End of commented code for Bug 5622539 */
21461
21462
21463 --Added the following logic for the date effectve funds consumption flag. This is done for federal changes.
21464 --sunkalya:federal changes bug#5511353
21465
21466 DECLARE
21467 hghst_ctr_cust_id NUMBER;
21468 l_exclude_cust_id_tbl PA_PLSQL_DATATYPES.NumTabTyp;
21469 l_return_status VARCHAR2(10);
21470 l_msg_count NUMBER := 0;
21471 l_msg_data VARCHAR2(2000);
21472
21473 BEGIN
21474
21475
21476
21477 IF (p_project_in.date_eff_funds_flag ='Y' AND nvl(l_old_date_eff_funds_flag,'N') = 'N') OR
21478 (p_project_in.date_eff_funds_flag ='N' AND nvl(l_old_date_eff_funds_flag,'N') = 'Y')
21479
21480 THEN
21481
21482 IF p_project_in.date_eff_funds_flag = 'N' THEN --disabling the federal flag
21483
21484 IF ( 'N' = p_project_in.enable_top_task_customer_flag ) OR
21485 ( 'N' = nvl(l_old_cust_top_task_flag,'N') AND nvl(p_project_in.enable_top_task_customer_flag,PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
21486 THEN
21487
21488 --This api will determine which customer to be made as 100% contributor.
21489
21490 PA_CUSTOMERS_CONTACTS_UTILS.Get_Highest_Contr_Fed_Cust(
21491 P_API_VERSION => 1.0
21492 , P_INIT_MSG_LIST => 'T'
21493 , P_COMMIT => 'F'
21494 , P_VALIDATE_ONLY => 'F'
21495 , P_VALIDATION_LEVEL => 100
21496 , P_DEBUG_MODE => 'N'
21497 , p_calling_module => 'AMG'
21498 , p_project_id => l_project_id
21499 , x_highst_contr_cust_id => hghst_ctr_cust_id
21500 , x_return_status => l_return_status
21501 , x_msg_count => l_msg_count
21502 , x_msg_data => l_msg_data );
21503
21504
21505 IF hghst_ctr_cust_id IS NOT NULL THEN
21506
21507 UPDATE pa_project_customers SET customer_bill_split = 100
21508 WHERE customer_id = hghst_ctr_cust_id AND project_id = l_project_id;
21509
21510 UPDATE pa_project_customers SET customer_bill_split = 0
21511 WHERE customer_id <> hghst_ctr_cust_id AND project_id = l_project_id;
21512 END IF;
21513 END IF;
21514
21515
21516 ELSE --enabling the federal flag
21517
21518 UPDATE pa_project_customers SET customer_bill_split = null
21519 WHERE project_id = l_project_id;
21520
21521
21522 END IF;
21523
21524 END IF;
21525 --End sunkalya:federal changes bug#5511353
21526 END;
21527
21528 --Sunkalya federal: bug#5511353. This piece of code is added to take care of cases not
21529 --handled by the logic above for bill split manipulations.
21530 --The following will simply null out the bill split if either of the two flags are null.
21531
21532 IF p_project_in.date_eff_funds_flag ='Y' OR p_project_in.enable_top_task_customer_flag = 'Y' THEN
21533
21534 UPDATE pa_project_customers SET customer_bill_split = null
21535 WHERE project_id = l_project_id;
21536 END IF;
21537 --Sunkalya federal: bug#5511353.
21538
21539 --Sunkalya federal. Bug#5511353
21540 OPEN count_cust(l_project_id);
21541 FETCH count_cust INTO l_count_cust;
21542 CLOSE count_cust;
21543
21544 OPEN chk_task_level_funding(l_project_id);
21545 FETCH chk_task_level_funding INTO l_chk_task_level_funding;
21546 CLOSE chk_task_level_funding;
21547
21548
21549 IF l_count_cust > 1 AND
21550 l_chk_task_level_funding = 'Y' AND
21551 p_project_in.date_eff_funds_flag = 'N' AND
21552 l_old_date_eff_funds_flag= 'Y' AND
21553 (
21554 p_project_in.enable_top_task_customer_flag = 'N' OR
21555 (
21556 nvl(p_project_in.enable_top_task_customer_flag,
21557 PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR AND
21558 l_old_cust_top_task_flag = 'N'
21559 )
21560 )
21561 THEN
21562 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
21563 ,p_msg_name => 'PA_TASK_FUNDING_EXIST'
21564 );
21565 p_project_out.return_status := FND_API.G_RET_STS_ERROR;
21566 RAISE FND_API.G_EXC_ERROR;
21567
21568 END IF;
21569 --Sunkalya federal. Bug#5511353
21570
21571
21572 -- Reset the global variable
21573
21574 G_ParChildTsk_chks_deferred := 'N';
21575
21576 -- Need to handle project status changes in a special way
21577 -- We would have updated the project with all the other required
21578 -- information and new check whether it is ok to change to the
21579 -- new status. If not ok, we will rollback all the other changes
21580 -- The reason we are doing all the other updates is because
21581 -- the Handle_project_status_change API and all the other
21582 -- APIs that it uses,fetch the information about the project
21583 -- from the database. Some of the information it would be looking for
21584 -- may well be an input to this API itself (Update_project)
21585 -- Hence,it would be prudent to first insert/update the project/task/
21586 -- key members/class categories and then do the checking for status
21587 -- change. If there is a failure in the status change APIs
21588 -- then we will rollback all the changes
21589
21590 IF l_project_status_changed = 'Y' THEN
21591
21592 --Bug 14100051
21593 l_status_changeable := PA_Project_Stus_Utils.allow_status_change(l_project_rec.project_status_code,p_project_in.project_status_code);
21594
21595 IF (l_status_changeable='N') THEN
21596 FND_MESSAGE.SET_NAME('PA', 'PA_STATUS_CANT_CHANGE');
21597 FND_MSG_PUB.ADD;
21598 RAISE FND_API.G_EXC_ERROR;
21599 END IF;
21600
21601 Pa_project_stus_utils.Handle_Project_Status_Change
21602 (x_calling_module => 'UPDATE_PROJECT'
21603 ,X_project_id => l_project_rec.project_id
21604 ,X_old_proj_status_code => l_project_rec.project_status_code
21605 ,X_new_proj_status_code => p_project_in.project_status_code
21606 ,X_project_type => l_project_rec.project_type
21607 ,X_project_start_date => l_project_rec.start_date
21608 ,X_project_end_date => l_project_rec.completion_date
21609 ,X_public_sector_flag => l_project_rec.public_sector_flag
21610 ,X_attribute_category => l_project_rec.attribute_category
21611 ,X_attribute1 => l_project_rec.attribute1
21612 ,X_attribute2 => l_project_rec.attribute2
21613 ,X_attribute3 => l_project_rec.attribute3
21614 ,X_attribute4 => l_project_rec.attribute4
21615 ,X_attribute5 => l_project_rec.attribute5
21616 ,X_attribute6 => l_project_rec.attribute6
21617 ,X_attribute7 => l_project_rec.attribute7
21618 ,X_attribute8 => l_project_rec.attribute8
21619 ,X_attribute9 => l_project_rec.attribute9
21620 ,X_attribute10 => l_project_rec.attribute10
21621 ,X_pm_product_code => l_project_rec.pm_product_code
21622 ,x_init_msg => 'N'
21623 ,x_verify_ok_flag => l_verify_ok_flag
21624 ,x_wf_enabled_flag => l_wf_enabled_flag
21625 ,X_err_stage => l_err_stage
21626 ,X_err_stack => l_err_stack
21627 ,x_err_msg_count => l_err_msg_count
21628 ,x_warnings_only_flag => l_warnings_only_flag );
21629
21630 -- If verify not ok then raise error
21631 IF l_verify_ok_flag = 'N' THEN
21632 p_project_out.return_status := l_return_status;
21633 RAISE FND_API.G_EXC_ERROR;
21634 --Fix for bug#9110781 Starts
21635 ELSIF l_verify_ok_flag = 'Y' THEN
21636 SELECT pa_obj_status_changes_s.NEXTVAL INTO l_obj_status_change_id FROM dual;
21637
21638 IF (l_debug_mode = 'Y') THEN
21639 pa_debug.debug('Calling PA_OBJ_STATUS_CHANGES_PKG.INSERT_ROW');
21640 pa_debug.debug('Project_id '|| l_project_rec.project_id);
21641 pa_debug.debug('Old project_status_code '|| l_project_rec.project_status_code);
21642 pa_debug.debug('New project_status_code'|| p_project_in.project_status_code);
21643 END IF;
21644
21645 OPEN cur_get_system_status(l_project_rec.project_status_code);
21646 FETCH cur_get_system_status INTO l_old_sys_status;
21647 CLOSE cur_get_system_status;
21648
21649 OPEN cur_get_system_status(p_project_in.project_status_code);
21650 FETCH cur_get_system_status INTO l_new_sys_status;
21651 CLOSE cur_get_system_status;
21652
21653 IF (l_debug_mode = 'Y') THEN
21654 pa_debug.debug('Old project_sys_status_code '|| l_old_sys_status);
21655 pa_debug.debug('New project_sys_status_code '|| l_new_sys_status);
21656 END IF;
21657
21658 --For inserting status change comment into the status history table
21659 PA_OBJ_STATUS_CHANGES_PKG.INSERT_ROW
21660 ( X_ROWID => l_rowid,
21661 X_OBJ_STATUS_CHANGE_ID => l_obj_status_change_id,
21662 X_OBJECT_TYPE => 'PA_PROJECTS',
21663 X_OBJECT_ID => l_project_rec.project_id,
21664 X_STATUS_TYPE => 'PROJECT',
21665 X_NEW_PROJECT_STATUS_CODE => p_project_in.project_status_code,
21666 X_NEW_PROJECT_SYSTEM_STATUS_CO => l_new_sys_status,
21667 X_OLD_PROJECT_STATUS_CODE => l_project_rec.project_status_code,
21668 X_OLD_PROJECT_SYSTEM_STATUS_CO => l_old_sys_status,
21669 X_CHANGE_COMMENT => p_project_in.status_change_comment,
21670 X_LAST_UPDATED_BY => fnd_global.user_id,
21671 X_CREATED_BY => fnd_global.user_id,
21672 X_CREATION_DATE => sysdate,
21673 X_LAST_UPDATE_DATE => sysdate,
21674 X_LAST_UPDATE_LOGIN => fnd_global.user_id );
21675
21676 IF (l_debug_mode = 'Y') THEN
21677 pa_debug.debug(' Updated PA_PROJECTS_ALL for status history');
21678 END IF;
21679
21680 --Fix for bug#9110781 Ends
21681
21682 END IF;
21683 l_statement := 'UPDATE PA_PROJECTS SET ';
21684 -- special case for update to and from 'CLOSED'
21685 IF l_closing_project = 'Y' THEN
21686 l_statement := l_statement ||
21687 ' PROJECT_STATUS_CODE = ' ||
21688 ''''||p_project_in.project_status_code||''''||','||
21689 ' CLOSED_DATE = SYSDATE,';
21690 ELSIF l_reopening_project = 'Y' THEN
21691 l_statement := l_statement ||
21692 ' PROJECT_STATUS_CODE = ' ||
21693 ''''||p_project_in.project_status_code||''''||','||
21694 ' CLOSED_DATE = NULL,';
21695 ELSE
21696 l_statement := l_statement ||
21697 ' PROJECT_STATUS_CODE = ' ||
21698 ''''||p_project_in.project_status_code||''''||',';
21699 END IF;
21700 IF l_wf_enabled_flag = 'Y' THEN
21701 l_statement := l_statement ||
21702 ' WF_STATUS_CODE = '||
21703 ''''||l_wf_status_code||''''||',';
21704 END IF;
21705 /* Code commented and added for bug#1752494 starts here */
21706 /*
21707 l_statement := l_statement ||
21708 ' LAST_UPDATE_DATE = '||''''||
21709 SYSDATE||''''||',';
21710 */
21711 l_statement := l_statement ||
21712 ' LAST_UPDATE_DATE = SYSDATE'||',';
21713 /* Code commented and added for bug#1752494 ends here */
21714 l_statement := l_statement ||
21715 ' LAST_UPDATED_BY = '||G_USER_ID||',';
21716
21717 l_statement := l_statement ||
21718 ' LAST_UPDATE_LOGIN = '||G_LOGIN_ID;
21719
21720 l_statement := l_statement ||
21721 ' WHERE PROJECT_ID = '|| TO_CHAR(l_project_id);
21722
21723 l_cursor := dbms_sql.open_cursor;
21724 dbms_sql.parse(l_cursor, l_statement, dbms_sql.native);
21725 l_rows := dbms_sql.execute(l_cursor);
21726 IF dbms_sql.is_open (l_cursor) THEN
21727 dbms_sql.close_cursor (l_cursor);
21728 END IF;
21729
21730 /*Stubbed Out Auto Initiate Demand on Project Approval functionality
21731 Bug 3819086
21732
21733 -- Bug 3611598 If Workflow is not enabled then call the wrapper API
21734 -- which in turn will invoke the concurrent program to Initiate Demand
21735 --If the Project Status is Approved
21736 OPEN c_project_sys_status_code ;
21737 FETCH c_project_sys_status_code INTO l_status_code ;
21738 CLOSE c_project_sys_status_code;
21739
21740 IF nvl(l_status_code,'-99') = 'APPROVED' THEN
21741
21742 IF nvl(l_wf_enabled_flag,'N') <> 'Y' THEN
21743 PA_Actions_Pub.RUN_ACTION_CONC_PROCESS_WRP
21744 (
21745 p_project_id => l_project_id
21746 ,p_project_number => p_project_in.pa_project_number -- 3671408 Added IN Parameter and passing project_number
21747 ,x_msg_count => l_msg_count
21748 ,x_msg_data => l_msg_data
21749 ,x_return_status => l_return_status
21750 );
21751 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
21752 RAISE FND_API.G_EXC_ERROR;
21753 END IF;
21754 END IF;
21755
21756 END IF;
21757
21758 End of Commenting for Bug 3819086*/
21759
21760 IF l_wf_enabled_flag = 'Y' THEN -- start the project workflow
21761 Pa_project_wf.Start_Project_Wf
21762 (p_project_id => l_project_id,
21763 p_err_stack => l_err_stack,
21764 p_err_stage => l_err_stage,
21765 p_err_code => l_err_code
21766 );
21767 IF l_err_code <> 0 THEN
21768 p_project_out.return_status := l_return_status;
21769 RAISE FND_API.G_EXC_ERROR;
21770 END IF;
21771 END IF;
21772 END IF;
21773
21774
21775 -- FP-M Bug # 3301192 --update project
21776 --maansari5/18 Delete all the dependency before creating new ones.
21777 --CAUTION: THIS WILL DELETE ALL THE INTRA-DEPENDENCIES IN THE PROJECT EVEN IF THE USER DOES NOT INTEND TO DELETE.
21778 --This has been discussed today may 18 with Sakthi and Hubert. The reason is performance.
21779 IF nvl(p_pm_product_code,'WORKPLAN') <> 'WORKPLAN' --Should not run in publishing flow.
21780 THEN
21781 --bug 3845240: use l_project_id instead of p_project_out.pa_project_id
21782 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') AND
21783 l_update_structure_version_id IS NOT NULL AND
21784 l_update_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
21785 AND NVL(PA_PROJECT_PUB.G_MASS_UPDATE_TASKS,'N') = 'N' -- For performance improvement 14556729
21786 THEN
21787 pa_proj_task_struc_pub.delete_intra_dependency(
21788 p_element_version_id => l_update_structure_version_id
21789 ,x_return_status => l_return_status );
21790
21791 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21792 THEN
21793 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21794 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21795 THEN
21796 RAISE FND_API.G_EXC_ERROR;
21797 END IF;
21798 END IF;
21799
21800 l_d_loop_count := p_tasks_in.first;
21801 WHILE l_d_loop_count IS NOT NULL LOOP
21802 l_task_in_rec := p_tasks_in(l_d_loop_count);
21803
21804 --Commented by rtarway during FP.M Developement Mapping and Set Financial Changes.
21805 --Since the task Id is available, this function is not needed. This call fails in case of Spilt_mapping structure
21806 --Added by rtarway during FP.M Developement Mapping and Set Financial Changes.
21807 l_d_task_id := p_tasks_out(l_d_loop_count).pa_task_id;
21808
21809 --bug 3845240: use l_project_id instead of p_project_out.pa_project_id
21810 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
21811
21812 --maansari5/18 replaced api call CONVERT_PM_TASKREF_TO_ID to CONVERT_PM_TASKREF_TO_ID_all
21813 IF l_d_task_id IS NULL AND l_task_in_rec.pm_task_reference IS NOT NULL AND
21814 l_task_in_rec.pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21815 THEN
21816 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id
21817 ,p_pm_task_reference => l_task_in_rec.pm_task_reference
21818 ,p_structure_type => l_structure_type
21819 ,p_out_task_id => l_d_task_id
21820 ,p_return_status => l_return_status);
21821
21822 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21823 THEN
21824 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21825 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21826 THEN
21827 RAISE FND_API.G_EXC_ERROR;
21828 END IF;
21829 END IF;
21830 --maansari5/18
21831
21832 l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_update_structure_version_id
21833 ,p_task_id => l_d_task_id);
21834
21835 pa_proj_task_struc_pub.parse_predecessor_import(p_string => l_task_in_rec.pred_string
21836 ,p_delimeter => l_task_in_rec.pred_delimiter
21837 ,p_task_version_Id => l_d_task_ver_id
21838 ,x_return_status => l_return_status
21839 ,x_msg_count => l_msg_count
21840 ,x_msg_data => l_msg_data);
21841
21842 --maansari5/18
21843 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21844 THEN
21845 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21846 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21847 THEN
21848 RAISE FND_API.G_EXC_ERROR;
21849 END IF;
21850 --maansari5/18
21851
21852 l_d_task_id := null;
21853 END IF;
21854 l_d_loop_count := p_tasks_in.next(l_d_loop_count);
21855 END LOOP;
21856 END IF; --should not run in publishing flow.
21857 -- 22-DEC-97, jwhite ----------------------------------------------------------
21858 -- Added new OUT-paramter p_workflow_started
21859
21860 IF (l_wf_enabled_flag = 'Y' )
21861 THEN
21862 p_workflow_started := 'Y';
21863 END IF;
21864 -- -----------------------------------------------------------------------------------
21865
21866
21867 -- ZAKHAN Extensible Attribute Changes
21868 --<Add Project/Task level Extensible Attributes>
21869
21870 i := p_ext_attr_tbl_in.first;
21871
21872 IF p_ext_attr_tbl_in.exists(i)
21873 THEN
21874
21875 -- get the correct structure type
21876 l_structure_type := p_structure_in.structure_type;
21877 IF (l_structure_type IS NULL or l_structure_type = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) THEN
21878 l_structure_type := 'FINANCIAL';
21879 END IF;
21880
21881 PA_USER_ATTR_PUB.Process_User_Attrs_Data(
21882 p_ext_attr_data_table => p_ext_attr_tbl_in,
21883 p_project_id => l_project_id,
21884 p_structure_type => l_structure_type,
21885 x_failed_row_id_list => l_failed_row_id_list,
21886 x_errorcode => l_errorcode,
21887 x_msg_count => l_msg_count,
21888 x_msg_data => l_msg_data,
21889 x_return_status => l_return_status );
21890
21891 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
21892 THEN
21893 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21894 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
21895 THEN
21896 RAISE FND_API.G_EXC_ERROR;
21897 END IF;
21898 END IF;
21899 --</Add Project/Task level Extensible Attributes>
21900
21901 --Begin Add by rtarway FP.M changes for Mapping
21902 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
21903 IF (G_PROJECT_SHARING_TYPE = 'SPLIT_MAPPING' AND p_structure_in.structure_type = 'WORKPLAN')
21904 THEN
21905 l_d_loop_count := p_tasks_in.first;
21906 WHILE l_d_loop_count IS NOT NULL LOOP
21907 l_task_in_rec := p_tasks_in(l_d_loop_count);
21908 --No Function Security Check required
21909 IF (
21910 (l_task_in_rec.mapped_task_reference IS NULL OR l_task_in_rec.mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
21911 OR
21912 (l_task_in_rec.mapped_task_id IS NULL OR l_task_in_rec.mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
21913 )
21914 THEN
21915 pa_project_pub.update_mapping
21916 (
21917 p_api_version => p_api_version_number
21918 , p_init_msg_list => FND_API.G_FALSE
21919 , p_commit => FND_API.G_FALSE--bug 3766967
21920 , p_debug_mode => FND_API.G_TRUE
21921 , p_project_id => l_project_id
21922 , p_proj_source_reference => null
21923 , p_wkp_structure_version_id => l_structure_version_id --bug#9456024
21924 --, p_wkp_task_id => l_tasks_out(i).pa_task_id--Since the tasks are already created , this will have task Ids
21925 , p_wkp_task_reference => l_task_in_rec.pm_task_reference
21926 , px_mapped_task_id => l_task_in_rec.mapped_task_id------------|One of theses two should be passed
21927 , p_mapped_task_reference => l_task_in_rec.mapped_task_reference ----|
21928 , x_return_status => l_return_status
21929 , x_msg_count => l_msg_count
21930 , x_msg_data => l_msg_data
21931 );
21932 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
21933 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21934 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
21935 RAISE FND_API.G_EXC_ERROR;
21936 END IF;
21937 END IF;
21938 l_d_loop_count := p_tasks_in.next(l_d_loop_count);
21939 END LOOP;
21940 END IF;
21941 --Set Financial Task Flag --FP.M Changes
21942 IF (G_PROJECT_SHARING_TYPE='SHARE_PARTIAL' AND p_structure_in.structure_type = 'FINANCIAL' )
21943 THEN
21944 i := p_tasks_in.first();
21945 WHILE i IS NOT NULL LOOP
21946 --Initialize the return status to success
21947 p_tasks_out(i).return_status := FND_API.G_RET_STS_SUCCESS;
21948 l_task_in_rec := p_tasks_in(i);
21949 --No Function Security Check required
21950 --Get record version number from pa_tasks table
21951 OPEN c_get_pa_record_version_number ( p_tasks_out(i).task_version_id , l_project_id);
21952 FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
21953 CLOSE c_get_pa_record_version_number;
21954
21955 IF
21956 (
21957 l_task_in_rec.financial_task_flag IS NOT NULL
21958 AND
21959 l_task_in_rec.financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
21960 )
21961 THEN
21962 PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
21963 (
21964 p_api_version => p_api_version_number
21965 , p_init_msg_list => FND_API.G_FALSE
21966 , p_commit => FND_API.G_FALSE--bug 3766967
21967 , p_calling_module => 'AMG'
21968 , p_debug_mode => FND_API.G_TRUE
21969 , p_task_version_id => p_tasks_out(i).task_version_id
21970 , p_checked_flag => l_task_in_rec.financial_task_flag
21971 , p_record_version_number => l_patask_record_version_number
21972 , p_project_id => l_project_id -- 4969319 p_project_out.pa_project_id
21973 , p_published_version_exists => G_Published_version_exists
21974 , x_return_status => l_return_status
21975 , x_msg_count => l_msg_count
21976 , x_msg_data => l_msg_data
21977 );
21978 -- Populating the appropriate values in task out records
21979 p_tasks_out(i).return_status := l_return_status;
21980
21981 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
21982 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
21983 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
21984 RAISE FND_API.G_EXC_ERROR;
21985 END IF;
21986 END IF;
21987 i := p_tasks_in.next(i);
21988 END LOOP;
21989 END IF;
21990 --End Add by rtarway FP.M chages for Mapping and Set Financial task
21991 ------ 3435905 : FP M : Deliverables Changes For AMG Start-----------
21992
21993 -- While updating a project, user can create new deliverables or
21994 -- update existing deliverables. If deliverable_reference exists
21995 -- then update_deliverable will be called else create_deliverables
21996 -- will be called.
21997 -- For actions there is same api for both create and update. Thus
21998 -- same wrapper api will be called for actions in both the cases
21999
22000 -- 3773373 commented below code, here deliveable security check is done
22001 -- unconditionally, also, local variable usage is wrong
22002 -- if i is not null, assign first deliverable's return status as success
22003 -- and call create_deliverable or update_deliverable api
22004 -- here, create_deliverable and update_deliverable apis are doing deliverable security check
22005 -- so no need to it here .
22006
22007 /*
22008
22009 --initialize return status to success
22010 i:=1;
22011 -- 3435905 changed from p_deliverable_out to G_deliverables_out_tbl
22012
22013 G_deliverables_out_tbl(i).return_status := FND_API.G_RET_STS_SUCCESS;
22014
22015 -- Function Security Check
22016 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
22017 (p_api_version_number => p_api_version_number,
22018 p_responsibility_id => l_resp_id,
22019 p_function_name => 'PA_DELIVERABLE_EDIT',
22020 p_msg_count => l_msg_count,
22021 p_msg_data => l_msg_data,
22022 p_return_status => l_return_status,
22023 p_function_allowed => l_function_allowed);
22024
22025
22026 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
22027 THEN
22028 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22029 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
22030 THEN
22031 RAISE FND_API.G_EXC_ERROR;
22032 END IF;
22033
22034 IF l_function_allowed = 'N' THEN
22035 pa_interface_utils_pub.map_new_amg_msg
22036 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
22037 ,p_msg_attribute => 'CHANGE'
22038 ,p_resize_flag => 'Y'
22039 ,p_msg_context => 'GENERAL'
22040 ,p_attribute1 => ''
22041 ,p_attribute2 => ''
22042 ,p_attribute3 => ''
22043 ,p_attribute4 => ''
22044 ,p_attribute5 => '');
22045
22046 p_return_status := FND_API.G_RET_STS_ERROR;
22047 RAISE FND_API.G_EXC_ERROR;
22048 END IF;
22049 */
22050 -- 3773373 changed local variable usage from i_dlvr to i
22051 -- if i is not null, set return status to success
22052 i := p_deliverables_in.first();
22053
22054 IF i IS NOT NULL THEN
22055 -- 3435905 changed from p_deliverable_out to G_deliverables_out_tbl
22056 G_deliverables_out_tbl(i).return_status := FND_API.G_RET_STS_SUCCESS;
22057 END IF;
22058
22059 WHILE i IS NOT NULL LOOP
22060
22061 -- Validate Deliverable reference / id- not null, unique
22062 -- 3858251 Added if condition to check, if user had passed dlvr ref and id ,
22063 -- then call below api to validate reference and id
22064
22065 IF p_deliverables_in(i).deliverable_id IS NOT NULL AND p_deliverables_in(i).deliverable_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
22066
22067 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
22068 ( p_deliverable_reference => p_deliverables_in(i).pm_deliverable_reference
22069 , p_deliverable_id => p_deliverables_in(i).deliverable_id
22070 , p_project_id => l_project_id
22071 , p_out_deliverable_id => l_deliverable_id
22072 , p_return_status => x_return_status
22073 );
22074
22075 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
22076 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22077 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
22078 RAISE FND_API.G_EXC_ERROR;
22079 END IF;
22080
22081 END IF;
22082
22083 -- 3858251 end
22084
22085 -- Call Update_Deliverable in following cases
22086 -- 1. If deliverable_id is passed.
22087 -- 2. If deliverable_id is not passed and deliverable_reference is not unique
22088 -- Otherwise call Create_Deliverables
22089
22090
22091 IF ( nvl( p_deliverables_in(i).deliverable_id, PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) THEN
22092 -- call Update_deliverables
22093 l_dlvr_dml_action := G_UPDATE_MODE;
22094 ELSE
22095 -- Bug 3651538 Moved the call of api from outside IF condition to inside else part
22096 -- as need to check for reference uniqueness only if ID is not passed.
22097 pa_deliverable_utils.is_dlvr_reference_unique (
22098 p_deliverable_reference => p_deliverables_in(i).pm_deliverable_reference
22099 , p_project_id => l_project_id
22100 , x_unique_flag => l_unique_flag
22101 , x_return_status => x_return_status );
22102
22103 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
22104 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22105 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
22106 RAISE FND_API.G_EXC_ERROR;
22107 END IF;
22108
22109 IF ( l_unique_flag = 'N' )THEN
22110 -- call Update_deliverables
22111 l_dlvr_dml_action := G_UPDATE_MODE;
22112 ELSE
22113 -- call Create_Deliverables
22114 l_dlvr_dml_action := G_CREATE_MODE;
22115 END IF; -- deliverable_reference is unique
22116
22117 END IF; -- non null deliverable_id is passed
22118
22119 IF (l_dlvr_dml_action = G_CREATE_MODE) THEN
22120
22121 -- Invoking the Create Deliverable API
22122 Pa_Project_Pub.create_deliverable
22123 (
22124 p_api_version => p_api_version_number
22125 , p_init_msg_list => p_init_msg_list
22126 -- 3735792, passing p_commit as false to next level api calls
22127 , p_commit => FND_API.G_FALSE
22128 , p_debug_mode => FND_API.G_TRUE
22129 , x_return_status => l_return_status
22130 , p_deliverable_name => p_deliverables_in(i).deliverable_name
22131 , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
22132 , p_deliverable_type_id => p_deliverables_in(i).deliverable_type_id
22133 , p_deliverable_owner_id => p_deliverables_in(i).deliverable_owner_id
22134 , p_description => p_deliverables_in(i).description
22135 , p_status_code => p_deliverables_in(i).status_code
22136 , p_due_date => p_deliverables_in(i).due_date
22137 , p_completion_date => p_deliverables_in(i).completion_date
22138 , p_progress_weight => p_deliverables_in(i).progress_weight
22139 , px_deliverable_id => l_deliverable_id
22140 , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
22141 -- for bug# 3729250
22142 -- , p_carrying_out_org_id => p_deliverables_in(i).carrying_out_org_id
22143 , p_task_id => p_deliverables_in(i).task_id
22144 , p_task_source_reference => p_deliverables_in(i).task_source_reference
22145 , p_project_id => l_project_id
22146 , p_proj_source_reference => null
22147 , p_action_in_tbl => p_deliverable_actions_in
22148 -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
22149 , x_action_out_tbl => G_deliverable_actions_out_tbl
22150 -- , x_action_out_tbl => p_deliverable_actions_out
22151 , p_item_id => p_deliverables_in(i).item_id -- 3630378 added parameter
22152 , p_inventory_org_id => p_deliverables_in(i).inventory_org_id
22153 , p_quantity => p_deliverables_in(i).quantity
22154 , p_uom_code => p_deliverables_in(i).uom_code
22155 -- for bug# 3729250
22156 -- , p_item_description => p_deliverables_in(i).item_description
22157 , p_unit_price => p_deliverables_in(i).unit_price
22158 , p_unit_number => p_deliverables_in(i).unit_number
22159 , p_currency_code => p_deliverables_in(i).currency_code
22160 , p_pm_source_code => p_pm_product_code /* Bug no. 3651113 */
22161 , x_msg_count => l_msg_count
22162 , x_msg_data => l_msg_data
22163 );
22164
22165 ELSE -- l_dlvr_dml_action = G_UPDATE_MODE
22166
22167 update_deliverable
22168 (
22169 p_api_version => p_api_version_number
22170 , p_init_msg_list => p_init_msg_list
22171 -- 3735792, passing p_commit as false to next level api calls
22172 , p_commit => FND_API.G_FALSE
22173 , p_debug_mode => FND_API.G_TRUE
22174 , x_return_status => l_return_status
22175 , p_deliverable_name => p_deliverables_in(i).deliverable_name
22176 , p_deliverable_short_name => p_deliverables_in(i).deliverable_short_name
22177 , p_deliverable_type_id => p_deliverables_in(i).deliverable_type_id
22178 , p_deliverable_owner_id => p_deliverables_in(i).deliverable_owner_id
22179 , p_description => p_deliverables_in(i).description
22180 , p_status_code => p_deliverables_in(i).status_code
22181 , p_due_date => p_deliverables_in(i).due_date
22182 , p_completion_date => p_deliverables_in(i).completion_date
22183 , p_progress_weight => p_deliverables_in(i).progress_weight
22184 , px_deliverable_id => l_deliverable_id
22185 , p_pm_deliverable_reference=> p_deliverables_in(i).pm_deliverable_reference
22186 -- for bug# 3729250
22187 -- , p_carrying_out_org_id => p_deliverables_in(i).carrying_out_org_id
22188 , p_task_id => p_deliverables_in(i).task_id
22189 , p_task_source_reference => p_deliverables_in(i).task_source_reference
22190 , p_project_id => l_project_id
22191 , p_proj_source_reference => null
22192 -- 3435905 changed from p_deliverable_actions_out to G_deliverable_actions_out_tbl
22193 , p_action_in_tbl => p_deliverable_actions_in
22194 -- , x_action_out_tbl => p_deliverable_actions_out
22195 , x_action_out_tbl => G_deliverable_actions_out_tbl
22196 , p_item_id => p_deliverables_in(i).item_id -- 3630378 added parameter
22197 , p_inventory_org_id => p_deliverables_in(i).inventory_org_id
22198 , p_quantity => p_deliverables_in(i).quantity
22199 , p_uom_code => p_deliverables_in(i).uom_code
22200 -- for bug# 3729250
22201 -- , p_item_description => p_deliverables_in(i).item_description
22202 , p_unit_price => p_deliverables_in(i).unit_price
22203 , p_unit_number => p_deliverables_in(i).unit_number
22204 , p_currency_code => p_deliverables_in(i).currency_code
22205 , p_pm_source_code => p_pm_product_code /* Bug no. 3651113 */
22206 , x_msg_count => l_msg_count
22207 , x_msg_data => l_msg_data
22208 );
22209 END IF;
22210
22211 -- Populating the appropriate values in deliverables out records
22212
22213 -- 3435905 return status and deliverable id is directly assigned to
22214 -- global deliverable table
22215 -- removed the p_deliverables_out parameter and added global table
22216
22217 -- p_deliverables_out(i).return_status := l_return_status;
22218 -- p_deliverables_out(i).deliverable_id := l_deliverable_id;
22219
22220 G_deliverables_out_tbl(i).return_status := l_return_status;
22221 G_deliverables_out_tbl(i).deliverable_id := l_deliverable_id;
22222
22223 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
22224 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22225 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
22226 RAISE FND_API.G_EXC_ERROR;
22227 END IF;
22228
22229 -- 3773373 changed local variable usage from i_dlvr to i
22230 i := p_deliverables_in.next(i);
22231
22232 END LOOP;
22233
22234 ------ 3435905 : FP M : Deliverables Changes For AMG END-----------
22235
22236
22237 -- Bug # 4582750.
22238 --Note that API pa_project_structure_utils.lock_unlock_wp_str IS NOT autonomosu transaction.
22239
22240 IF p_update_mode = 'PA_UPD_WBS_ATTR' AND l_prev_locked_status IS NOT NULL AND l_prev_locked_status = 'N'
22241 and (p_pm_product_code <> 'WORKPLAN') -- Bug # 4758888.
22242 AND p_structure_in.structure_version_id IS NOT NULL
22243 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22244 THEN
22245
22246 IF l_debug_mode = 'Y' THEN
22247 pa_debug.g_err_stage := 'Before calling pa_project_structure_utils.lock_unlock_wp_str for UNLOCKING'||
22248 'p_project_in.pa_project_id='||p_project_in.pa_project_id||
22249 '-l_structure_version_id='||l_structure_version_id;
22250 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
22251 END IF;
22252
22253 pa_project_structure_utils.lock_unlock_wp_str
22254 (p_project_id => p_project_in.pa_project_id
22255 ,p_structure_version_id => p_structure_in.structure_version_id
22256 ,p_lock_status_code => 'UNLOCKED'
22257 ,p_calling_module => 'PA_UPD_WBS_ATTR'
22258 ,x_return_status => l_x_return_status
22259 ,x_msg_count => l_x_msg_count
22260 ,x_msg_data => l_x_msg_data);
22261
22262 IF l_debug_mode = 'Y' THEN
22263 pa_debug.g_err_stage := 'After calling pa_project_structure_utils.lock_unlock_wp_str for UNLOCKING'||
22264 'l_x_return_status='||l_x_return_status;
22265 pa_debug.write(l_module_name,pa_debug.g_err_stage,3);
22266 END IF;
22267
22268 IF l_x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
22269 THEN
22270 p_project_out.return_status := l_x_return_status;
22271 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
22272
22273 ELSIF l_x_return_status = FND_API.G_RET_STS_ERROR
22274 THEN
22275 p_project_out.return_status := l_x_return_status;
22276 RAISE FND_API.G_EXC_ERROR;
22277 END IF;
22278
22279 END IF;
22280
22281 -- End Bug # 4582750.
22282
22283
22284
22285 IF (FND_API.to_boolean( p_commit )) OR
22286 l_wf_enabled_flag = 'Y'
22287 THEN
22288 COMMIT WORK;
22289 END IF;
22290 --4218977, rtarway, unset this global variable
22291 if (p_pm_product_code <> 'WORKPLAN') then
22292 G_OP_VALIDATE_FLAG := null;
22293 G_TASK_STR_UPDATE_MODE := null;
22294 end if;
22295
22296 EXCEPTION
22297
22298 WHEN FND_API.G_EXC_ERROR THEN
22299 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22300 pa_project_check_pvt.G_index_counter := 0;
22301
22302 p_return_status := FND_API.G_RET_STS_ERROR ;
22303 G_ParChildTsk_chks_deferred := 'N';
22304
22305 ROLLBACK TO Update_project_pub;
22306
22307 -- Begin Bug # 4582750.
22308
22309 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22310 AND p_structure_in.structure_version_id IS NOT NULL
22311 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22312 then
22313
22314 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22315 (p_project_id => p_project_in.pa_project_id
22316 , p_structure_version_id => p_structure_in.structure_version_id
22317 , p_lock_status_code => 'UNLOCKED'
22318 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22319 ,x_return_status => l_x_return_status
22320 ,x_msg_count => l_x_msg_count
22321 ,x_msg_data => l_x_msg_data);
22322
22323 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22324 raise;
22325 end if;
22326
22327 end if;
22328
22329 -- End Bug # 4582750.
22330
22331 --4218977, rtarway, unset this global variable
22332 if (p_pm_product_code <> 'WORKPLAN') then
22333 G_OP_VALIDATE_FLAG := null;
22334 G_TASK_STR_UPDATE_MODE := null;
22335 end if;
22336
22337 -- 4537865
22338 p_workflow_started := NULL ;
22339
22340 FND_MSG_PUB.Count_And_Get
22341 ( p_count => p_msg_count ,
22342 p_data => p_msg_data );
22343
22344
22345 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
22346 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
22347 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22348 pa_project_check_pvt.G_index_counter := 0;
22349 G_ParChildTsk_chks_deferred := 'N';
22350 ROLLBACK TO Update_project_pub;
22351
22352 -- Begin Bug # 4582750.
22353 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22354 AND p_structure_in.structure_version_id IS NOT NULL
22355 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22356 then
22357
22358
22359 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22360 (p_project_id => p_project_in.pa_project_id
22361 , p_structure_version_id => p_structure_in.structure_version_id
22362 , p_lock_status_code => 'UNLOCKED'
22363 ,p_calling_module => 'PA_UPD_WBS_ATTR'
22364 ,x_return_status => l_x_return_status
22365 ,x_msg_count => l_x_msg_count
22366 ,x_msg_data => l_x_msg_data);
22367
22368 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22369 raise;
22370 end if;
22371
22372 end if;
22373
22374 -- End Bug # 4582750.
22375
22376 --4218977, rtarway, unset this global variable
22377 if (p_pm_product_code <> 'WORKPLAN') then
22378 G_OP_VALIDATE_FLAG := null;
22379 G_TASK_STR_UPDATE_MODE := null;
22380 end if;
22381
22382 -- 4537865
22383 p_workflow_started := NULL ;
22384
22385 FND_MSG_PUB.Count_And_Get
22386 ( p_count => p_msg_count ,
22387 p_data => p_msg_data );
22388
22389 WHEN NO_DATA_FOUND THEN
22390 -- code fix for bug 3579257 : Bug 3627124 starts
22391 --dbms_output.put_line ('in no data found');
22392 p_return_status := FND_API.G_RET_STS_ERROR;
22393 ROLLBACK TO update_project_pub;
22394
22395
22396 -- Begin Bug # 4582750.
22397
22398 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22399 AND p_structure_in.structure_version_id IS NOT NULL
22400 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22401 then
22402
22403
22404 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22405 (p_project_id => p_project_in.pa_project_id
22406 , p_structure_version_id => p_structure_in.structure_version_id
22407 , p_lock_status_code => 'UNLOCKED'
22408 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22409 ,x_return_status => l_x_return_status
22410 ,x_msg_count => l_x_msg_count
22411 ,x_msg_data => l_x_msg_data);
22412
22413 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22414 raise;
22415 end if;
22416
22417 end if;
22418
22419 -- End Bug # 4582750.
22420
22421 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22422 pa_project_check_pvt.G_index_counter := 0;
22423 G_ParChildTsk_chks_deferred := 'N';
22424 --4218977, rtarway, unset this global variable
22425 if (p_pm_product_code <> 'WORKPLAN') then
22426 G_OP_VALIDATE_FLAG := null;
22427 G_TASK_STR_UPDATE_MODE := null;
22428 end if;
22429
22430 -- 4537865
22431 p_workflow_started := NULL ;
22432
22433 -- code fix for bug 3579257 : Bug 3627124 ends
22434 pa_interface_utils_pub.map_new_amg_msg
22435 ( p_old_message_code => 'PA_NO_DATA_FOUND'
22436 ,p_msg_attribute => 'CHANGE'
22437 ,p_resize_flag => 'N'
22438 ,p_msg_context => 'GENERAL'
22439 ,p_attribute1 => ''
22440 ,p_attribute2 => ''
22441 ,p_attribute3 => ''
22442 ,p_attribute4 => ''
22443 ,p_attribute5 => '');
22444
22445 WHEN ROW_ALREADY_LOCKED THEN
22446 ROLLBACK TO update_project_pub;
22447
22448 -- Begin Bug # 4582750.
22449
22450 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22451 AND p_structure_in.structure_version_id IS NOT NULL
22452 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22453 then
22454
22455
22456 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22457 (p_project_id => p_project_in.pa_project_id
22458 , p_structure_version_id => p_structure_in.structure_version_id
22459 , p_lock_status_code => 'UNLOCKED'
22460 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22461 ,x_return_status => l_x_return_status
22462 ,x_msg_count => l_x_msg_count
22463 ,x_msg_data => l_x_msg_data);
22464
22465 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22466 raise;
22467 end if;
22468
22469 end if;
22470
22471 -- End Bug # 4582750.
22472
22473 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22474 pa_project_check_pvt.G_index_counter := 0;
22475 G_ParChildTsk_chks_deferred := 'N';
22476
22477 -- 4537865
22478 p_workflow_started := NULL ;
22479
22480 p_return_status := FND_API.G_RET_STS_ERROR;
22481 --4218977, rtarway, unset this global variable
22482 if (p_pm_product_code <> 'WORKPLAN') then
22483 G_OP_VALIDATE_FLAG := null;
22484 G_TASK_STR_UPDATE_MODE := null;
22485 end if;
22486 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
22487 THEN
22488 FND_MESSAGE.SET_NAME('PA','PA_ROW_ALREADY_LOCKED_P_AMG');
22489 FND_MESSAGE.SET_TOKEN('PROJECT', l_project_rec.segment1);
22490 FND_MESSAGE.SET_TOKEN('ENTITY', G_PROJECT_CODE);
22491 FND_MSG_PUB.ADD;
22492 END IF;
22493
22494 FND_MSG_PUB.Count_And_Get
22495 ( p_count => p_msg_count ,
22496 p_data => p_msg_data );
22497
22498
22499 WHEN OTHERS THEN
22500
22501 ROLLBACK TO Update_project_pub;
22502
22503 -- Begin Bug # 4582750.
22504
22505 if ((p_update_mode = 'PA_UPD_WBS_ATTR') and (l_prev_locked_status = 'N') and (p_pm_product_code <> 'WORKPLAN')) -- Bug # 4758888.
22506 AND p_structure_in.structure_version_id IS NOT NULL
22507 AND p_structure_in.structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22508 then
22509
22510
22511 pa_project_structure_utils.lock_unlock_wp_str_autonomous
22512 (p_project_id => p_project_in.pa_project_id
22513 , p_structure_version_id => p_structure_in.structure_version_id
22514 , p_lock_status_code => 'UNLOCKED'
22515 ,p_calling_module => 'PA_UPD_WBS_ATTR_UN' /*Bug#6414944*/
22516 ,x_return_status => l_x_return_status
22517 ,x_msg_count => l_x_msg_count
22518 ,x_msg_data => l_x_msg_data);
22519
22520 if (l_x_return_status <> FND_API.G_RET_STS_SUCCESS) then
22521 raise;
22522 end if;
22523
22524 end if;
22525
22526 -- End Bug # 4582750.
22527
22528 G_ParChildTsk_chks_deferred := 'N';
22529 pa_project_check_pvt.G_task_num_updated_index_tbl.delete;
22530 pa_project_check_pvt.G_index_counter := 0;
22531 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
22532 --4218977, rtarway, unset this global variable
22533 if (p_pm_product_code <> 'WORKPLAN') then
22534 G_OP_VALIDATE_FLAG := null;
22535 end if;
22536 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
22537 FND_MSG_PUB.add_exc_msg
22538 ( p_pkg_name => G_PKG_NAME
22539 , p_procedure_name => l_api_name );
22540 END IF;
22541
22542 -- 4537865
22543 p_workflow_started := NULL ;
22544
22545 FND_MSG_PUB.Count_And_Get
22546 ( p_count => p_msg_count ,
22547 p_data => p_msg_data );
22548
22549
22550 END Update_project;
22551
22552 --------------------------------------------------------------------------------
22553 --Name: update_task
22554 --Type: Procedure
22555 --Description: This procedure can be used to update a task
22556 --
22557 --
22558 --Called subprograms:
22559 --
22560 --
22561 --
22562 --History:
22563 -- 31-JUL-1996 R. Krishnamurthy Created
22564 -- 28-NOV-1996 L. de Werker Added 11 parameters for descriptive flexfields
22565 -- 04-DEC-1996 L. de Werker Debugged errors + added checking of NULL values.
22566 -- 05-DEC-1996 L. de Werker Added validation of service_type_code
22567 -- Fixed error that occurred when a parent was changed,
22568 -- added change of WBS_level, if appropriate.
22569 -- Added checking for task_completion_date
22570 -- Added WHO columns update in dynamic SQL string
22571 -- 06-DEC-1996 L. de Werker Added locking mechanism
22572 -- 10-DEC-1996 L. de Werker Added parameter p_pa_parent_task_id
22573 -- Added parameter p_address_id
22574 -- 03-MAY-2000 Rakesh Raghavan Fixed Bug # 1289156.
22575 -- 15-jul-2003 sramesh -- Added the code for bug 2982057.
22576 -- Changed the logic to populate the long_task_name
22577 -- with task_name when the long_task_name is null.
22578 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
22579 -- dependency_type and lag days to tasks and create dependencies.
22580 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
22581 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
22582 -- 05-APR-2004 Rakesh Raghavan Progress Management Changes. Bug # 3420093.
22583 -- 29-Dec-2005 vkadimes Bug Number 4689326 and 4689888 Changes are tagged with Bug Numbers.
22584 -- 27-jun-11 Rodrigo Bruno Bug 12660639 - fixed regression, changes
22585 -- are tagged with bug number
22586 PROCEDURE update_task
22587 ( p_api_version_number IN NUMBER,
22588 p_commit IN VARCHAR2 := FND_API.G_FALSE,
22589 p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE,
22590 p_msg_count OUT NOCOPY NUMBER, /*Added the nocopy check for 4537865 */
22591 p_msg_data OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
22592 p_return_status OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
22593 --Project Structures
22594 p_ref_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22595 --Project Structures
22596 p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22597 p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22598 p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22599 p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22600 p_task_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22601 p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22602 p_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22603 p_long_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22604 p_task_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22605 p_task_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22606 p_task_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22607 p_pm_parent_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22608 p_pa_parent_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22609 p_address_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22610 p_carrying_out_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22611 p_service_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22612 p_task_manager_person_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22613 p_billable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22614 p_chargeable_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22615 p_ready_to_bill_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22616 p_ready_to_distribute_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22617 p_limit_to_txn_controls_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22618 p_labor_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22619 p_labor_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22620 p_labor_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22621 p_labor_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22622 p_nl_bill_rate_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22623 p_nl_std_bill_rate_schdl IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22624 p_nl_schedule_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22625 p_nl_schedule_discount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22626 p_labor_cost_multiplier_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22627 p_cost_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22628 p_rev_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22629 p_inv_ind_rate_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22630 p_cost_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22631 p_rev_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22632 p_inv_ind_sch_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22633 p_labor_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22634 p_nl_sch_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22635 p_actual_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22636 p_actual_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22637 p_early_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22638 p_early_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22639 p_late_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22640 p_late_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22641 p_scheduled_start_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22642 p_scheduled_finish_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22643 p_tasks_dff IN VARCHAR2 := 'N', --bug 6153503
22644 p_attribute_category IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22645 p_attribute1 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22646 p_attribute2 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22647 p_attribute3 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22648 p_attribute4 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22649 p_attribute5 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22650 p_attribute6 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22651 p_attribute7 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22652 p_attribute8 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22653 p_attribute9 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22654 p_attribute10 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22655 --bug 6153503
22656 p_attribute11 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22657 p_attribute12 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22658 p_attribute13 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22659 p_attribute14 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22660 p_attribute15 IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22661 p_allow_cross_charge_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22662 p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22663 p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22664 p_cc_process_labor_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22665 p_labor_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22666 p_labor_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22667 p_cc_process_nl_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22668 p_nl_tp_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22669 p_nl_tp_fixed_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22670 p_receive_project_invoice_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22671 p_work_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22672 p_emp_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22673 p_job_bill_rate_schedule_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22674 --Sakthi MCB
22675 p_non_lab_std_bill_rt_sch_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22676 p_taskfunc_cost_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22677 p_taskfunc_cost_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22678 --Sakthi MCB
22679 --Project Structures
22680 p_structure_type IN VARCHAR2 := 'FINANCIAL',
22681 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22682 P_OBLIGATION_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22683 P_OBLIGATION_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22684 P_ESTIMATED_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22685 P_ESTIMATED_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22686 P_BASELINE_START_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22687 P_BASELINE_FINISH_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22688 P_CLOSED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22689 P_WQ_UOM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22690 P_WQ_ITEM_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22691 P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22692 P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22693 P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22694 P_PRIORITY_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22695 P_MILESTONE_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22696 P_CRITICAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22697 P_INC_PROJ_PROGRESS_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22698 P_LINK_TASK_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22699 P_CALENDAR_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22700 P_PLANNED_EFFORT IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22701 P_DURATION IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22702 P_PLANNED_WORK_QUANTITY IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22703 P_TASK_TYPE IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
22704 --Project Structures
22705 p_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22706 p_non_labor_disc_reason_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22707 --PA L changes -- bug 2872708 --update_task
22708 p_retirement_cost_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22709 p_cint_eligible_flag VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR,
22710 p_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
22711 --end PA L changes -- bug 2872708
22712 p_out_pa_task_id OUT NOCOPY NUMBER, /*Added the nocopy check for 4537865 */
22713 p_out_pm_task_reference OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
22714 p_update_task_structure IN VARCHAR2,
22715 -- PA L Changes 3010538
22716 p_process_mode IN VARCHAR2 := 'ONLINE'
22717 -- FP-M Bug # 3301192
22718 ,p_pred_string VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22719 -- ,p_pred_delimiter VARCHAR2 DEFAULT ','
22720 ,p_pred_delimiter VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22721 -- FP M changes begin (venkat)
22722 ,p_base_percent_comp_deriv_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22723 ,p_sch_tool_tsk_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22724 ,p_constraint_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22725 ,p_constraint_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
22726 ,p_free_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22727 ,p_total_slack IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22728 ,p_effort_driven_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22729 ,p_level_assignments_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22730 ,p_invoice_method IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22731 ,p_customer_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22732 ,p_gen_etc_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22733 -- FP M changes end (venkat)
22734 -- FP M changes start (Mapping )
22735 ,p_financial_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22736 ,p_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22737 ,p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22738 -- FP M changes end (Mapping )
22739 ,p_deliverable IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
22740 -- (Begin venkat) Bug #3450684 --------------------------------------------------------------------
22741 ,p_ext_act_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22742 ,p_ext_remain_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22743 ,p_ext_sch_duration IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --Bug no 3450684
22744 -- (End venkat) Bug #3450684 --------------------------------------------------------------------
22745
22746 -- Progress Management Changes. Bug # 3420093.
22747 ,p_etc_effort IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22748 ,p_percent_complete IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
22749 -- Progress Management Changes. Bug # 3420093.
22750 ,p_is_wp_seperate_from_fn IN VARCHAR2 := 'X' -- Added for bug#3451073
22751 ,p_calling_api IN VARCHAR2 := 'UPDATE_TASK' -- Added for Bug # 4199694
22752 ,p_op_validate_flag IN VARCHAR2 := 'Y'
22753 ,p_adj_on_std_inv IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR /* Added for 12.2Payroll billing ER 11899223 */
22754 )
22755
22756 IS
22757
22758 l_return_status VARCHAR2(1);
22759 l_msg_count NUMBER;
22760 l_msg_data VARCHAR2(2000);
22761 l_out_pa_task_id NUMBER;
22762 l_out_pm_task_reference VARCHAR2(25);
22763
22764 l_api_name CONSTANT VARCHAR2(30):= 'update_task';
22765
22766 l_project_id NUMBER; --bug 2471668
22767
22768 --project structures
22769 l_function_allowed VARCHAR2(1);
22770 l_resp_id NUMBER := 0;
22771 --project structures
22772
22773 --Bug 2665656
22774 --l_pm_product_code VARCHAR2(30);
22775 --Bug 2665656
22776
22777 l_update_wbs_flag VARCHAR2(1);
22778 l_long_task_name VARCHAR2(240); /*Added for bug 2982057 */
22779
22780 --Bug 3106457
22781 --l_structure_version_id pa_proj_element_versions.element_version_id%TYPE;
22782 --Changed by rtarway for BUG 3919800, the type gives error when assigned a value containg miss num
22783 l_structure_version_id NUMBER;
22784
22785 -- FP-M Bug # 3301192
22786 l_d_task_id NUMBER;
22787 l_d_task_ver_id NUMBER;
22788 l_d_struct_ver_id NUMBER;
22789 l_ref_task_id NUMBER; -- Bug 3705333
22790 l_amg_task_number VARCHAR2(50); --bug 3705333
22791 l_amg_segment1 VARCHAR2(25); --bug 3705333
22792
22793 --Added by rtarway in FP.M Development
22794 l_task_version_id NUMBER;
22795 l_patask_record_version_number NUMBER;
22796 --Added by rtarway in FP.M Development
22797
22798
22799 task_adj_on_std_inv varchar2(1) :='N';
22800 t_adj_on_std_inv varchar2(2);
22801
22802 --Bug 3279981. Fetch project information
22803 CURSOR cur_get_proj_billing_info(c_project_id IN NUMBER) IS
22804 SELECT enable_top_task_customer_flag, enable_top_task_inv_mth_flag,
22805 revenue_accrual_method, invoice_method, project_type
22806 FROM pa_projects_all
22807 WHERE project_id = c_project_id;
22808
22809 CURSOR cur_check_proj_cust_exist (c_project_id IN NUMBER , c_customer_id IN NUMBER ) IS
22810 SELECT 'Y'
22811 FROM pa_project_customers
22812 WHERE project_id = c_project_id
22813 AND customer_id = c_customer_id ;
22814
22815 CURSOR cur_get_def_top_task_cust(c_project_id IN NUMBER) IS
22816 SELECT customer_id
22817 FROM pa_project_customers
22818 WHERE project_id = c_project_id
22819 AND default_top_task_cust_flag = 'Y';
22820 -- Added This cursor for Bug No 4689326
22821 CURSOR l_cur_customer_name(l_customer_id NUMBER)
22822 IS
22823 SELECT customer_name from PA_CUSTOMERS_V
22824 WHERE customer_id = l_customer_id;
22825 -- Added for bug 5242015
22826 CURSOR cur_top_task_customer_id (l_task_id NUMBER ) IS
22827 SELECT customer_id FROM pa_tasks
22828 WHERE task_id=l_task_id;
22829
22830 Cursor c_adj_on_std_inv (p_adj_on_std_inv IN VARCHAR2)
22831 Is
22832 Select 'X'
22833 from pa_lookups
22834 where lookup_type='PA_ADJ_ON_STD_INV'
22835 and lookup_code = p_adj_on_std_inv;
22836
22837 l_proj_top_task_customer_flag VARCHAR2(1);
22838 l_proj_top_task_inv_mth_flag VARCHAR2(1);
22839 l_proj_revenue_acc_method VARCHAR2(30);
22840 l_proj_invoice_method VARCHAR2(30);
22841 l_proj_type VARCHAR2(20);
22842 l_invoice_method VARCHAR2(30) := p_invoice_method;
22843 l_customer_id NUMBER := p_customer_id;
22844 l_dummy VARCHAR2(1);
22845 l_published_version_exists VARCHAR2(1);
22846 l_is_wp_separate_from_fn VARCHAR2(1);
22847 l_is_wp_versioning_enabled VARCHAR2(1);
22848 l_structure_type VARCHAR2(30) ;
22849 l_customer_name VARCHAR2(360); -- Added for bug 4689888 -- Modified to VARCHAR2(360) for bug 5856469
22850 l_top_task_customer_id NUMBER; -- Added for Bug 5242015
22851 /* Added for bug 3705333 */
22852 CURSOR l_amg_project_csr
22853 (p_pa_project_id pa_projects.project_id%type)
22854 IS
22855 SELECT segment1
22856 FROM pa_projects p
22857 WHERE p.project_id = l_project_id ; --Bug#3747312 p_pa_project_id;
22858 /* changes end for bug 3705333 */
22859 --Bug 3279981
22860 --rtarway, BUG 3908013
22861 l_attribute_category VARCHAR2(150);
22862 l_attribute1 VARCHAR2(150);
22863 l_attribute2 VARCHAR2(150);
22864 l_attribute3 VARCHAR2(150);
22865 l_attribute4 VARCHAR2(150);
22866 l_attribute5 VARCHAR2(150);
22867 l_attribute6 VARCHAR2(150);
22868 l_attribute7 VARCHAR2(150);
22869 l_attribute8 VARCHAR2(150);
22870 l_attribute9 VARCHAR2(150);
22871 l_attribute10 VARCHAR2(150);
22872 --rtarway, BUG 3908013
22873 --Added by rtarway for BUG 3919800
22874
22875 --bug 6153503
22876 l_wp_attribute_category VARCHAR2(150);
22877 l_wp_attribute1 VARCHAR2(150);
22878 l_wp_attribute2 VARCHAR2(150);
22879 l_wp_attribute3 VARCHAR2(150);
22880 l_wp_attribute4 VARCHAR2(150);
22881 l_wp_attribute5 VARCHAR2(150);
22882 l_wp_attribute6 VARCHAR2(150);
22883 l_wp_attribute7 VARCHAR2(150);
22884 l_wp_attribute8 VARCHAR2(150);
22885 l_wp_attribute9 VARCHAR2(150);
22886 l_wp_attribute10 VARCHAR2(150);
22887 l_wp_attribute11 VARCHAR2(150);
22888 l_wp_attribute12 VARCHAR2(150);
22889 l_wp_attribute13 VARCHAR2(150);
22890 l_wp_attribute14 VARCHAR2(150);
22891 l_wp_attribute15 VARCHAR2(150);
22892
22893 l_project_sharing_type VARCHAR2(250);
22894 l_pa_task_id NUMBER;
22895 l_fin_task_flag VARCHAR2(1);
22896 l_adj_on_std_inv VARCHAR2(2);
22897 l_parent_task_id varchar2(15);
22898 l_top_task_id varchar2(15);
22899
22900 --Used to get current_working_version in case of VE case
22901 CURSOR cur_get_working_struc_ver (l_project_id NUMBER,l_structure_type VARCHAR2)
22902 IS
22903 SELECT c.element_version_id
22904 FROM pa_proj_element_versions c
22905 , pa_structure_types a
22906 , pa_proj_structure_types b
22907 , pa_proj_elem_ver_structure d
22908 WHERE c.project_id = l_project_id
22909 AND a.structure_type_id = b.structure_type_id
22910 AND b.proj_element_id = c.proj_element_id
22911 AND a.structure_type = l_structure_type
22912 AND d.project_id = c.project_id
22913 AND d.element_version_id = c.element_version_id
22914 AND d.status_code = 'STRUCTURE_WORKING';
22915
22916 --Used to get structure version in VD case
22917 CURSOR cursor_get_struc_ver (l_project_id NUMBER,l_structure_type VARCHAR2)
22918 IS
22919 SELECT c.element_version_id
22920 FROM pa_proj_element_versions c
22921 , pa_structure_types a
22922 , pa_proj_structure_types b
22923 , pa_proj_elem_ver_structure d
22924 WHERE c.project_id = l_project_id
22925 AND a.structure_type_id = b.structure_type_id
22926 AND b.proj_element_id = c.proj_element_id
22927 AND a.structure_type = l_structure_type
22928 AND d.project_id = c.project_id
22929 AND d.element_version_id = c.element_version_id;
22930
22931
22932 CURSOR CUR_GET_FINANCIAL_FLAG (l_project_id NUMBER, l_proj_element_id NUMBER , l_parent_str_ver_id NUMBER)
22933 IS
22934 SELECT FINANCIAL_TASK_FLAG
22935 from pa_proj_element_versions
22936 where project_id = l_project_id
22937 and proj_element_id = l_proj_element_id
22938 and parent_structure_version_id = l_parent_str_ver_id;
22939
22940 --BUG 4106154, rtarway
22941 l_update_pa_tasks VARCHAR2(1);
22942
22943 l_tasks_out pa_project_pub.task_out_tbl_type; --bug 4199694
22944
22945 --BUG 4081329, rtarway
22946 cursor cur_get_child_task_dates (l_project_id NUMBER, l_task_id NUMBER)
22947 IS select task_id, start_date, completion_date, parent_task_id from pa_tasks --Fix for 7427388
22948 where project_id = l_project_id
22949 and completion_date is null
22950 start with parent_task_id = l_task_id
22951 connect by parent_task_id = prior task_id
22952 and project_id = l_project_id;
22953
22954 --Bug#7015228
22955 cursor cur_get_child_task_start_dates (l_project_id NUMBER, l_task_id NUMBER)
22956 IS select task_id, start_date, completion_date from pa_tasks
22957 where project_id = l_project_id
22958 and start_date is null
22959 start with parent_task_id = l_task_id
22960 connect by parent_task_id = prior task_id
22961 and project_id = l_project_id;
22962
22963 type l_task_id_tbl_type is table of pa_tasks.task_id%type index by binary_integer;
22964 type l_start_date_tbl_type is table of pa_tasks.start_date%type index by binary_integer;
22965 type l_completion_date_tbl_type is table of pa_tasks.completion_date%type index by binary_integer;
22966
22967 l_task_id_tbl l_task_id_tbl_type;
22968 l_start_date_tbl l_start_date_tbl_type;
22969 l_completion_date_tbl l_completion_date_tbl_type;
22970
22971 -- Fix for 7427388
22972 type l_parent_task_id_tbl_type is table of pa_tasks.parent_task_id%type index by binary_integer;
22973 l_parent_task_id_tbl l_parent_task_id_tbl_type;
22974 l_parent_task_date DATE;
22975
22976 --BUG 4081329, rtarway
22977 i NUMBER; -- added for Huawei bug 13923366
22978
22979 BEGIN
22980 ----dbms_output.put_line('value of p_task_number in update_task'||p_task_number);
22981
22982 SAVEPOINT update_task_pub;
22983 -- Begin Bug # 4630058.
22984 -- Initialize the message table if requested.
22985 if FND_API.TO_BOOLEAN(p_init_msg_list) then
22986 FND_MSG_PUB.initialize;
22987 end if;
22988 -- End Bug # 4630058.
22989
22990 -- 4537865 : Initialize return status to success
22991 p_return_status := FND_API.G_RET_STS_SUCCESS;
22992
22993 --BUG 4218977, we need to initialize this variable,
22994 --keeping in mind that it might be set by update_project
22995 --we can use the parameter p_calling_api,
22996 --set this parameter only if p_calling_api is 'UPDATE_TASK'
22997 --this will be passed as UPDATE_PROJECT from update_project API
22998 if p_calling_api <> 'UPDATE_PROJECT' then
22999 G_OP_VALIDATE_FLAG := p_op_validate_flag;
23000 end if;
23001
23002 IF p_adj_on_std_inv = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
23003 THEN
23004 t_adj_on_std_inv := NULL;
23005 ELSE
23006 t_adj_on_std_inv := p_adj_on_std_inv;
23007 END IF;
23008
23009 if t_adj_on_std_inv is not null then
23010 OPEN c_adj_on_std_inv(t_adj_on_std_inv);
23011 FETCH c_adj_on_std_inv into task_adj_on_std_inv;
23012 CLOSE c_adj_on_std_inv;
23013
23014
23015 if task_adj_on_std_inv <> 'X' then
23016
23017 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
23018 ,p_msg_name => 'PA_INVALID_ADJ_ON_STD_INV');
23019
23020 l_return_status := FND_API.G_RET_STS_ERROR;
23021
23022 RAISE FND_API.G_EXC_ERROR;
23023
23024
23025
23026 END IF;
23027
23028 end if;
23029
23030 -- rbruno bug 12660639 start
23031
23032 l_fin_task_flag := NULL;
23033
23034 OPEN CUR_GET_FINANCIAL_FLAG (p_pa_project_id, p_pa_task_id,p_structure_version_id);
23035 FETCH CUR_GET_FINANCIAL_FLAG into l_fin_task_flag;
23036 CLOSE CUR_GET_FINANCIAL_FLAG;
23037
23038 IF l_fin_task_flag = 'Y' THEN
23039
23040 /* Added for 12.2Payroll billing ER 11899223 */
23041 l_adj_on_std_inv :=p_adj_on_std_inv;
23042
23043 if (p_pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
23044 (p_pa_task_id IS NOT NULL) then
23045
23046 select parent_task_id,top_task_id into l_parent_task_id,l_top_task_id from pa_tasks where task_id = p_pa_task_id and project_id = p_pa_project_id;
23047
23048 else
23049 select parent_task_id ,top_task_id into l_parent_task_id,l_top_task_id from pa_tasks where task_number = p_task_number and project_id = p_pa_project_id;
23050
23051 end if;
23052
23053
23054
23055 if l_parent_task_id is not null then
23056
23057 l_adj_on_std_inv := null;
23058 else
23059 l_adj_on_std_inv := p_adj_on_std_inv;
23060 end if;
23061
23062 If l_adj_on_std_inv is not null then
23063
23064 update pa_tasks set adj_on_std_inv =p_adj_on_std_inv where task_id =p_pa_task_id;
23065 end if;
23066 if p_pa_task_Id = l_top_task_id
23067 then
23068
23069 update pa_tasks set adj_on_std_inv = p_adj_on_std_inv where top_task_id = p_pa_task_Id;
23070 end if;
23071
23072
23073 /* Added for 12.2Payroll billing ER 11899223 */
23074
23075 END IF;
23076 -- rbruno bug 12660639 end
23077 --bug 3880482
23078 PA_PROJECT_PVT.Convert_pm_projref_to_id
23079 ( p_pm_project_reference => p_pm_project_reference
23080 , p_pa_project_id => p_pa_project_id
23081 , p_out_project_id => l_project_id
23082 , p_return_status => l_return_status
23083 );
23084
23085
23086 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
23087
23088 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23089 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
23090 RAISE FND_API.G_EXC_ERROR;
23091 END IF;
23092
23093 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id; --bug 2471668 ( in the project context )
23094 --end bug 3880482
23095 --Added by rtarway for BUG 3919800
23096 l_structure_type := p_structure_type;
23097 --Get task id
23098 --Added by rtarway, for BUG 3919800, this is done as we require to do validation in share_partial case beforehand
23099 -- storing p_pa_task_id in local variable will make it consistent for other structures also.
23100 if (p_pa_task_id is not null and p_pa_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
23101 then l_pa_task_id := p_pa_task_id;
23102 end if;
23103 --Also Validate task id
23104 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
23105 (
23106 p_pa_project_id => l_project_id ,
23107 p_structure_type => l_structure_type,
23108 p_pa_task_id => p_pa_task_id ,
23109 p_pm_task_reference => p_pm_task_reference ,
23110 p_out_task_id => l_pa_task_id,
23111 p_return_status => l_return_status
23112 );
23113 IF l_return_status <> 'S'
23114 THEN
23115 RAISE FND_API.G_EXC_ERROR;
23116 END IF;
23117
23118 --bug 2471668.
23119 --We need to call this API here toget the corrct project id. This is also
23120 --called from the private API. But I discussed with Sakthi and he is ok to call this
23121 --twice once here and second time in private API. The idea is to make the advanced security changes
23122 --only in public APIs.
23123
23124 -- Initialize local variables
23125 -- Bug#3747312
23126 l_published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
23127 l_is_wp_separate_from_fn := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id );
23128 l_is_wp_versioning_enabled := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id );
23129
23130 -- In case of shared structure p_structure_type should be passed as
23131 -- FINANCIAL and this should be the first validation.
23132 IF (p_structure_type is null OR p_structure_type = 'WORKPLAN') THEN
23133 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
23134 NVL( l_is_wp_separate_from_fn,'N') = 'N' --bug 2876703 update_task
23135 THEN
23136 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
23137 THEN
23138 pa_interface_utils_pub.map_new_amg_msg
23139 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
23140 ,p_msg_attribute => 'CHANGE'
23141 ,p_resize_flag => 'N'
23142 ,p_msg_context => 'GENERAL'
23143 ,p_attribute1 => ''
23144 ,p_attribute2 => ''
23145 ,p_attribute3 => ''
23146 ,p_attribute4 => ''
23147 ,p_attribute5 => '');
23148 END IF;
23149 RAISE FND_API.G_EXC_ERROR;
23150 END IF;
23151 END IF ;
23152 -- Bug#3747312
23153
23154 --end of bug 2471668
23155
23156 /* --bug 2665656
23157 IF NVL( p_pm_product_code, 'WORKPLAN' ) = 'WORKPLAN'
23158 THEN
23159 l_pm_product_code := null;
23160 END IF;
23161 --bug 2665656
23162 */
23163
23164 -- Bug#3747312
23165 -- Derive the structure type based on whether its shared case
23166 -- and WP versioning is enabled or not and whether published
23167 -- version exists.
23168
23169 -- BUG 3919800, rtarway, Assign l_structure_version_id value of p_structure_version_id
23170 l_structure_version_id := p_structure_version_id;
23171
23172
23173 IF nvl(l_published_version_exists,'N') = 'Y'
23174 AND nvl(l_is_wp_separate_from_fn,'N') = 'N'
23175 AND nvl(l_is_wp_versioning_enabled,'N') = 'Y'
23176 AND p_structure_type = 'FINANCIAL'
23177 AND p_pm_product_code <> 'WORKPLAN'
23178 THEN
23179 --Change the flow to WORKPLAN
23180 l_structure_type := 'WORKPLAN';
23181 l_update_pa_tasks := 'Y'; --BUG 4106154, rtarway
23182
23183 --BUG 3919800, in case of workplan, we must derive structure version id and pass it further.
23184 OPEN cur_get_working_struc_ver(l_project_id, l_structure_type);
23185 FETCH cur_get_working_struc_ver into l_structure_version_id;
23186 CLOSE cur_get_working_struc_ver ;
23187 ELSE
23188 l_structure_type := p_structure_type;
23189 END IF;
23190 -- Bug#3747312
23191
23192 --Added by rtarway for BUG 3919800
23193 --Validate for task and change the structure type, if structure type is shared partial and workplan task is being updated.
23194 --1. get the structure sharing code
23195 l_project_sharing_type := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
23196 IF (l_project_sharing_type='SHARE_PARTIAL' )
23197 THEN
23198 --3. get the structure version id
23199 IF (l_structure_version_id is null or l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
23200 THEN
23201 --1.VE case, there will be only one working workplan version, get the structure version id for that version
23202 IF l_is_wp_versioning_enabled = 'Y'
23203 THEN
23204 OPEN cur_get_working_struc_ver(l_project_id, l_structure_type);
23205 FETCH cur_get_working_struc_ver into l_structure_version_id;
23206 CLOSE cur_get_working_struc_ver ;
23207
23208 --2.VD case, there will be only one version, get that version
23209 ELSE
23210 OPEN cursor_get_struc_ver(l_project_id, l_structure_type);
23211 FETCH cursor_get_struc_ver into l_structure_version_id;
23212 CLOSE cursor_get_struc_ver;
23213 END IF;
23214 END IF;
23215 --4. Get the existing financial_task_flag
23216 OPEN CUR_GET_FINANCIAL_FLAG (l_project_id, l_pa_task_id,l_structure_version_id);
23217 FETCH CUR_GET_FINANCIAL_FLAG into l_fin_task_flag;
23218 CLOSE CUR_GET_FINANCIAL_FLAG;
23219 --5. if existing financial task flag is 'N', change the structure type to 'WORKPLAN'
23220 IF l_fin_task_flag = 'N'
23221 THEN
23222 l_structure_type := 'WORKPLAN';
23223 END IF;
23224 END IF;
23225 --End Added by rtarway for BUG 3919800
23226
23227 /* Code added for the bug 2982057 starts */
23228 IF p_long_task_name IS NULL OR p_long_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
23229 l_long_task_name := p_task_name;
23230 ELSE
23231 l_long_task_name := p_long_task_name;
23232 END IF;
23233
23234 /* Code addition for bug 2982057 ends */
23235 /* CHANGES START FOR BUG 3705333*/
23236
23237 OPEN l_amg_project_csr(l_project_id ); --Bug#3747312
23238 FETCH l_amg_project_csr INTO l_amg_segment1;
23239 CLOSE l_amg_project_csr;
23240
23241 --Project Structures
23242 IF p_ref_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
23243 THEN
23244 l_ref_task_id := null;
23245 ELSE
23246 l_ref_task_id := p_ref_task_id;
23247 END IF;
23248 --Project Structures
23249
23250 IF l_ref_task_id is null THEN
23251
23252 IF (p_pa_parent_task_id IS NOT NULL AND p_pa_parent_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
23253
23254 l_ref_task_id := p_pa_parent_task_id;
23255 -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
23256
23257 ELSIF (p_pm_parent_task_reference IS NOT NULL AND p_pm_parent_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN
23258
23259 --Begin change by rtarway for BUG 3661788, use Convert_pm_taskref_to_id_all to get task id instead of using l_task_ref_to_id_csr
23260 --OPEN l_task_ref_to_id_csr(l_project_id,p_pm_parent_task_reference);
23261 --FETCH l_task_ref_to_id_csr INTO l_ref_task_id;
23262 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
23263 (
23264 p_pa_project_id => l_project_id ,
23265 p_structure_type => l_structure_type, --Bug#3747312 p_structure_type,
23266 p_pm_task_reference => p_pm_parent_task_reference ,
23267 p_out_task_id => l_ref_task_id,
23268 p_return_status => l_return_status
23269 );
23270
23271 --changed by rtarway for BUG 3661788
23272 --IF l_task_ref_to_id_csr%NOTFOUND
23273 IF (l_return_status <> 'S')
23274 THEN
23275 --rtarway , 3661788, comment close command
23276 --CLOSE l_task_ref_to_id_csr;
23277 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
23278 THEN
23279 l_amg_task_number := pa_interface_utils_pub.get_task_number_amg
23280 (p_task_number => p_task_name
23281 ,p_task_reference => p_pm_task_reference
23282 ,p_task_id => '');
23283
23284 pa_interface_utils_pub.map_new_amg_msg
23285 ( p_old_message_code => 'PA_PARENT_TASK_MISSING'
23286 ,p_msg_attribute => 'CHANGE'
23287 ,p_resize_flag => 'N'
23288 ,p_msg_context => 'TASK'
23289 ,p_attribute1 => l_amg_segment1
23290 ,p_attribute2 => l_amg_task_number
23291 ,p_attribute3 => ''
23292 ,p_attribute4 => ''
23293 ,p_attribute5 => '');
23294 END IF;
23295 RAISE FND_API.G_EXC_ERROR;
23296 END IF;
23297 --rtarway , 3661788, comment close command
23298 --CLOSE l_task_ref_to_id_csr;
23299 END IF;
23300 END IF;
23301 -- -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
23302 /* END OF CHANGES FOR BUG 3705333 */
23303 --Bug 3279981 Review : Shifted this code before the update_one_task call
23304 OPEN cur_get_proj_billing_info(l_project_id);
23305 FETCH cur_get_proj_billing_info INTO l_proj_top_task_customer_flag, l_proj_top_task_inv_mth_flag,
23306 l_proj_revenue_acc_method, l_proj_invoice_method, l_proj_type;
23307 CLOSE cur_get_proj_billing_info;
23308
23309 IF 'Y' = l_proj_top_task_inv_mth_flag THEN
23310 IF ( p_invoice_method IS NOT NULL AND p_invoice_method <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
23311 --changed p_pa_task_id to l_pa_task_id, 3919800, rtarway
23312 AND PA_BILLING_CORE.Update_Top_Task_Invoice_Method( l_project_id, l_pa_task_id ) = 'Y' THEN
23313 IF pa_project_pvt.check_valid_dist_rule
23314 ( l_proj_type,
23315 l_proj_revenue_acc_method||'/'||p_invoice_method,
23316 l_proj_top_task_inv_mth_flag ) = 'N' THEN
23317 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
23318 pa_interface_utils_pub.map_new_amg_msg
23319 ( p_old_message_code => 'PA_INV_TASK_INVOICE_METHOD' -- for bug# 4156036
23320 ,p_msg_attribute => 'CHANGE'
23321 ,p_resize_flag => 'N'
23322 ,p_msg_context => 'TASK'
23323 ,p_attribute1 => p_invoice_method
23324 ,p_attribute2 => ''
23325 ,p_attribute3 => ''
23326 ,p_attribute4 => ''
23327 ,p_attribute5 => '');
23328 END IF;
23329 RAISE FND_API.G_EXC_ERROR;
23330 END IF;
23331
23332 -- Function Security Check
23333 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
23334 ( p_api_version_number => p_api_version_number,
23335 p_responsibility_id => l_resp_id,
23336 p_function_name => 'PA_PAXPREPR_TASK_INV_MTH',
23337 p_msg_count => l_msg_count,
23338 p_msg_data => l_msg_data,
23339 p_return_status => l_return_status,
23340 p_function_allowed => l_function_allowed);
23341 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23342 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23343 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23344 RAISE FND_API.G_EXC_ERROR;
23345 END IF;
23346
23347 IF l_function_allowed = 'N' THEN
23348 pa_interface_utils_pub.map_new_amg_msg
23349 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
23350 ,p_msg_attribute => 'CHANGE'
23351 ,p_resize_flag => 'Y'
23352 ,p_msg_context => 'GENERAL'
23353 ,p_attribute1 => ''
23354 ,p_attribute2 => ''
23355 ,p_attribute3 => ''
23356 ,p_attribute4 => ''
23357 ,p_attribute5 => '');
23358 RAISE FND_API.G_EXC_ERROR;
23359 END IF;
23360
23361 l_invoice_method := p_invoice_method;
23362 ELSE
23363 --IF p_invoice_method IS NULL
23364
23365 --l_invoice_method := l_proj_invoice_method commented for bug#5583147 ;
23366
23367 /* Start of Addition for bug#5583147 */
23368 --If p_invoice_method passed is null then
23369 --Check if the task has already an invoice method if so keep the same
23370 --Else get it from project invoice method.
23371 BEGIN
23372 SELECT invoice_method
23373 INTO l_invoice_method
23374 FROM pa_tasks
23375 WHERE project_id = l_project_id
23376 and task_id = l_pa_task_id
23377 and l_invoice_method is not null;
23378
23379 EXCEPTION WHEN NO_DATA_FOUND THEN
23380 l_invoice_method := l_proj_invoice_method;
23381 END;
23382 /* End of Addition for bug#5583147 */
23383
23384 END IF;
23385 ELSE
23386 --IF 'N' = l_proj_top_task_inv_mth_flag
23387 l_invoice_method := NULL;
23388 END IF;
23389
23390 -- Added for bug 5242015
23391 OPEN cur_top_task_customer_id(l_pa_task_id);
23392 FETCH cur_top_task_customer_id INTO l_top_task_customer_id;
23393 CLOSE cur_top_task_customer_id;
23394
23395 IF 'Y' = l_proj_top_task_customer_flag THEN
23396 IF (p_customer_id IS NOT NULL AND p_customer_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
23397 l_top_task_customer_id <> p_customer_id THEN -- Added for bug 5242015
23398 -- Changes are Done for Bug 4689888
23399 --changed p_pa_task_id to l_pa_task_id, 3919800, rtarway
23400 IF PA_BILLING_CORE.Update_Top_Task_Customer( l_project_id, l_pa_task_id ) = 'Y' THEN -- If condition to check Funding exits for task or not
23401 OPEN cur_check_proj_cust_exist(l_project_id,p_customer_id);
23402 FETCH cur_check_proj_cust_exist INTO l_dummy;
23403 IF cur_check_proj_cust_exist%NOTFOUND THEN
23404 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
23405 /* Commented This code For Bug 4689326
23406 pa_interface_utils_pub.map_new_amg_msg
23407 ( p_old_message_code => 'PA_INVALID_TASK_CUSTOMER'
23408 ,p_msg_attribute => 'CHANGE'
23409 ,p_resize_flag => 'N'
23410 ,p_msg_context => 'TASK'
23411 ,p_attribute1 => p_customer_id
23412 ,p_attribute2 => ''
23413 ,p_attribute3 => ''
23414 ,p_attribute4 => ''
23415 ,p_attribute5 => '');*/
23416 -- Added this code For Bug no 4689326
23417 OPEN l_cur_customer_name(p_customer_id);
23418 FETCH l_cur_customer_name INTO l_customer_name;
23419 CLOSE l_cur_customer_name;
23420 IF (l_customer_name IS NULL OR l_customer_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) THEN -- Checking whether the specified customer exits or not
23421 pa_interface_utils_pub.map_new_amg_msg
23422 ( p_old_message_code => 'PA_CUSTOMER_NOT_EXIST'
23423 ,p_msg_attribute => 'CHANGE'
23424 ,p_resize_flag => 'N'
23425 ,p_msg_context => 'GENERAL'
23426 ,p_attribute1 => ''
23427 ,p_attribute2 => ''
23428 ,p_attribute3 => ''
23429 ,p_attribute4 => ''
23430 ,p_attribute5 => '');
23431 ELSE
23432 PA_UTILS.ADD_MESSAGE
23433 (p_app_short_name => 'PA',
23434 p_msg_name => 'PA_INVALID_PROJECT_CUSTOMER',
23435 p_token1 => 'CUSTOMER_NAME',
23436 p_value1 => l_customer_name
23437 );
23438 END IF;
23439 -- End of Bug 4689326
23440 END IF;
23441 CLOSE cur_check_proj_cust_exist;
23442 RAISE FND_API.G_EXC_ERROR;
23443 ELSE
23444 CLOSE cur_check_proj_cust_exist;
23445
23446 -- Function Security Check
23447 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
23448 ( p_api_version_number => p_api_version_number,
23449 p_responsibility_id => l_resp_id,
23450 p_function_name => 'PA_PAXPREPR_TASK_CUST',
23451 p_msg_count => l_msg_count,
23452 p_msg_data => l_msg_data,
23453 p_return_status => l_return_status,
23454 p_function_allowed => l_function_allowed);
23455 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23456 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23457 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23458 RAISE FND_API.G_EXC_ERROR;
23459 END IF;
23460
23461 IF l_function_allowed = 'N' THEN
23462 pa_interface_utils_pub.map_new_amg_msg
23463 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
23464 ,p_msg_attribute => 'CHANGE'
23465 ,p_resize_flag => 'Y'
23466 ,p_msg_context => 'GENERAL'
23467 ,p_attribute1 => ''
23468 ,p_attribute2 => ''
23469 ,p_attribute3 => ''
23470 ,p_attribute4 => ''
23471 ,p_attribute5 => '');
23472 RAISE FND_API.G_EXC_ERROR;
23473 END IF;
23474
23475 l_customer_id := p_customer_id;
23476 END IF; --IF cur_check_proj_cust_exist%NOTFOUND
23477 ELSE
23478 pa_interface_utils_pub.map_new_amg_msg
23479 ( p_old_message_code => 'PA_NO_CHNG_CUST_ALLOWED'
23480 ,p_msg_attribute => 'CHANGE'
23481 ,p_resize_flag => 'Y'
23482 ,p_msg_context => 'GENERAL'
23483 ,p_attribute1 => ''
23484 ,p_attribute2 => ''
23485 ,p_attribute3 => ''
23486 ,p_attribute4 => ''
23487 ,p_attribute5 => '');
23488 RAISE FND_API.G_EXC_ERROR;
23489 END IF;-- If condition to check Funding exits for task or not --End of Bug 4689888
23490 ELSE --IF p_customer_id IS NULL
23491 IF p_customer_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
23492 l_customer_id:=NULL; -- NULL is passed for customer_id so that in Update_one_task it will not be Defaulted.
23493 ELSIF l_top_task_customer_id = p_customer_id THEN -- added for Bug 5242015
23494 l_customer_id:= p_customer_id;
23495 ELSE
23496 pa_interface_utils_pub.map_new_amg_msg
23497 ( p_old_message_code => 'PA_INVALID_CUST'
23498 ,p_msg_attribute => 'CHANGE'
23499 ,p_resize_flag => 'N'
23500 ,p_msg_context => 'GENERAL'
23501 ,p_attribute1 => ''
23502 ,p_attribute2 => ''
23503 ,p_attribute3 => ''
23504 ,p_attribute4 => ''
23505 ,p_attribute5 => '');
23506 RAISE FND_API.G_EXC_ERROR;
23507 END IF;
23508 END IF;
23509 ELSE
23510 --IF 'N' = l_proj_top_task_customer_flag
23511 l_customer_id := NULL;
23512 END IF;
23513
23514 /*UPDATE PA_TASKS
23515 SET invoice_method = l_invoice_method
23516 ,customer_id = l_customer_id
23517 WHERE project_id = l_project_id
23518 AND task_id = p_pa_task_id;*/
23519 --Bug 3279981 Review
23520
23521
23522 -- rtarway, BUG 3908013, replace dff attributes
23523 /*
23524 Bug 6153503
23525 There is no need to do delow validation here it will be done in update_one_task
23526 if (p_attribute_category is null or p_attribute_category = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23527 then
23528 l_attribute_category := null;
23529 else
23530 l_attribute_category := p_attribute_category;
23531 end if;
23532
23533
23534
23535 if (p_attribute1 is null or p_attribute1 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23536 then
23537 l_attribute1 := null;
23538 else
23539 l_attribute1 := p_attribute1;
23540 end if;
23541
23542
23543
23544 if (p_attribute2 is null or p_attribute2 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23545 then
23546 l_attribute2 := null;
23547 else
23548 l_attribute2 := p_attribute2;
23549 end if;
23550
23551
23552 if (p_attribute3 is null or p_attribute3 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23553 then
23554 l_attribute3 := null;
23555 else
23556 l_attribute3 := p_attribute3;
23557 end if;
23558
23559 if (p_attribute4 is null or p_attribute4 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23560 then
23561 l_attribute4 := null;
23562 else
23563 l_attribute4 := p_attribute4;
23564 end if;
23565
23566 if (p_attribute5 is null or p_attribute5 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23567 then
23568 l_attribute5 := null;
23569 else
23570 l_attribute5 := p_attribute5;
23571 end if;
23572
23573 if (p_attribute6 is null or p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23574 then
23575 l_attribute6 := null;
23576 else
23577 l_attribute6 := p_attribute6;
23578 end if;
23579
23580 if (p_attribute7 is null or p_attribute6 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23581 then
23582 l_attribute7 := null;
23583 else
23584 l_attribute7 := p_attribute7;
23585 end if;
23586
23587 if (p_attribute8 is null or p_attribute8 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23588 then
23589 l_attribute8 := null;
23590 else
23591 l_attribute8 := p_attribute8;
23592 end if;
23593
23594 if (p_attribute9 is null or p_attribute9 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23595 then
23596 l_attribute9 := null;
23597 else
23598 l_attribute9 := p_attribute9;
23599 end if;
23600
23601 if (p_attribute10 is null or p_attribute10 = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
23602 then
23603 l_attribute10 := null;
23604 else
23605 l_attribute10 := p_attribute10;
23606 end if;
23607 End Bug 6153503
23608 */
23609 --project structures
23610 -- --dbms_output.put_line('Value of p_ref_task_id :='||l_ref_task_id);
23611 -- --dbms_output.put_line('BEFORE CALLING UPDATE_ONE_TASK');
23612
23613 --Bug 6153503 start
23614 IF p_tasks_dff = 'Y' THEN
23615
23616 l_attribute_category := p_attribute_category;
23617
23618 l_attribute1 := p_attribute1;
23619 l_attribute2 := p_attribute2;
23620 l_attribute3 := p_attribute3;
23621 l_attribute4 := p_attribute4;
23622 l_attribute5 := p_attribute5;
23623
23624 l_attribute6 := p_attribute6;
23625 l_attribute7 := p_attribute7;
23626 l_attribute8 := p_attribute8;
23627 l_attribute9 := p_attribute9;
23628 l_attribute10 := p_attribute10;
23629
23630 l_wp_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23631
23632 l_wp_attribute1 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23633 l_wp_attribute2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23634 l_wp_attribute3 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23635 l_wp_attribute4 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23636 l_wp_attribute5 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23637
23638 l_wp_attribute6 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23639 l_wp_attribute7 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23640 l_wp_attribute8 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23641 l_wp_attribute9 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23642 l_wp_attribute10 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23643
23644 l_wp_attribute11 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23645 l_wp_attribute12 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23646 l_wp_attribute13 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23647 l_wp_attribute14 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23648 l_wp_attribute15 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23649
23650 ELSIF p_tasks_dff = 'N' THEN
23651
23652 l_wp_attribute_category := p_attribute_category;
23653
23654 l_wp_attribute1 := p_attribute1;
23655 l_wp_attribute2 := p_attribute2;
23656 l_wp_attribute3 := p_attribute3;
23657 l_wp_attribute4 := p_attribute4;
23658 l_wp_attribute5 := p_attribute5;
23659
23660 l_wp_attribute6 := p_attribute6;
23661 l_wp_attribute7 := p_attribute7;
23662 l_wp_attribute8 := p_attribute8;
23663 l_wp_attribute9 := p_attribute9;
23664 l_wp_attribute10 := p_attribute10;
23665
23666 l_wp_attribute11 := p_attribute11;
23667 l_wp_attribute12 := p_attribute12;
23668 l_wp_attribute13 := p_attribute13;
23669 l_wp_attribute14 := p_attribute14;
23670 l_wp_attribute15 := p_attribute15;
23671
23672 -- added following code to update both fin and worklan tasks dff for Huawei enhancement bug 13923366
23673 IF PA_PROJECT_PUB.G_MASS_UPDATE_TASKS = 'Y' AND PA_PROJECT_PUB.G_FP_DFF_TBL.COUNT > 0 THEN
23674 i := PA_PROJECT_PUB.G_FP_DFF_TBL.FIRST;
23675 WHILE i IS NOT NULL LOOP
23676 IF ((PA_PROJECT_PUB.G_FP_DFF_TBL(i).pa_task_id = p_pa_task_id) OR
23677 (PA_PROJECT_PUB.G_FP_DFF_TBL(i).pa_task_name = p_task_name AND
23678 PA_PROJECT_PUB.G_FP_DFF_TBL(i).pm_task_reference = p_pm_task_reference)) THEN
23679 EXIT;
23680 ELSE
23681 i := PA_PROJECT_PUB.G_FP_DFF_TBL.NEXT(i);
23682 END IF;
23683 END LOOP;
23684 l_attribute_category := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute_category;
23685
23686 l_attribute1 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute1;
23687 l_attribute2 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute2;
23688 l_attribute3 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute3;
23689 l_attribute4 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute4;
23690 l_attribute5 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute5;
23691 l_attribute6 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute6;
23692 l_attribute7 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute7;
23693 l_attribute8 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute8;
23694 l_attribute9 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute9;
23695 l_attribute10 := PA_PROJECT_PUB.G_FP_DFF_TBL(i).attribute10;
23696
23697 ELSE
23698
23699 l_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23700
23701 l_attribute1 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23702 l_attribute2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23703 l_attribute3 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23704 l_attribute4 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23705 l_attribute5 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23706
23707 l_attribute6 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23708 l_attribute7 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23709 l_attribute8 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23710 l_attribute9 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23711 l_attribute10 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
23712
23713 END IF; -- End of IF condition added for bug 13923366
23714 END IF;
23715
23716 --Bug 6153503 end
23717
23718 IF l_structure_type = 'FINANCIAL' --p_structure_type
23719 THEN
23720
23721 -- BUG 3908013, rtarway
23722 --In case of shared structure , null the values of dff fields. dff will be updated in elem_ver_schedule table only.
23723 /* Bug 6153503 start
23724 if nvl(l_is_wp_separate_from_fn,'N') = 'N'
23725 then
23726 l_attribute_category := null;
23727 l_attribute1 := null;
23728 l_attribute2 := null;
23729 l_attribute3 := null;
23730 l_attribute4 := null;
23731 l_attribute5 := null;
23732 l_attribute6 := null;
23733 l_attribute7 := null;
23734 l_attribute8 := null;
23735 l_attribute9 := null;
23736 l_attribute10 := null;
23737 end if;
23738 Bug 6153503 end
23739 */
23740
23741 --project structures
23742 ----dbms_output.put_line('value OF p_task_number BEFORE UPDATE_ONE_TASK'||p_task_number);
23743
23744 PA_PROJECT_PVT.Update_One_Task (
23745 p_api_version_number => p_api_version_number,
23746 p_commit => FND_API.G_FALSE,
23747 p_msg_count => p_msg_count,
23748 p_msg_data => p_msg_data,
23749 p_return_status => l_return_status,
23750 p_pm_product_code => p_pm_product_code,
23751 p_pa_project_id => l_project_id, --Bug#3747312
23752 p_pa_task_id => l_pa_task_id, --BUG 3919800, p_pa_task_id to l_pa_task_id
23753 p_pm_task_reference => p_pm_task_reference,
23754 p_task_number => p_task_number,
23755 p_task_name => p_task_name,
23756 p_long_task_name => l_long_task_name, /*Commented the p_long_task_name for bug 2982057*/
23757 p_task_description => p_task_description,
23758 p_task_start_date => p_task_start_date,
23759 p_task_completion_date => p_task_completion_date,
23760 -- Start Fix for Bug # 1289156
23761 p_early_start_date => p_early_start_date,
23762 p_early_finish_date => p_early_finish_date,
23763 p_late_start_date => p_late_start_date,
23764 p_late_finish_date => p_late_finish_date,
23765 -- p_actual_start_date => p_actual_start_date, --commented out for task progress
23766 -- p_actual_finish_date => p_actual_finish_date,
23767 p_scheduled_start_date => p_scheduled_start_date, -- 7245488
23768 p_scheduled_finish_date => p_scheduled_finish_date, /* bug 7245488 */
23769 -- End Fix for Bug # 1289156
23770 p_pm_parent_task_reference => p_pm_parent_task_reference,
23771 p_pa_parent_task_id => p_pa_parent_task_id,
23772 p_address_id => p_address_id,
23773 p_carrying_out_organization_id => p_carrying_out_organization_id,
23774 p_service_type_code => p_service_type_code,
23775 p_task_manager_person_id => p_task_manager_person_id,
23776 p_billable_flag => p_billable_flag,
23777 p_chargeable_flag => p_chargeable_flag,
23778 p_ready_to_bill_flag => p_ready_to_bill_flag,
23779 p_ready_to_distribute_flag => p_ready_to_distribute_flag,
23780 p_limit_to_txn_controls_flag => p_limit_to_txn_controls_flag,
23781 p_labor_bill_rate_org_id => p_labor_bill_rate_org_id,
23782 p_labor_std_bill_rate_schdl => p_labor_std_bill_rate_schdl,
23783 p_labor_schedule_fixed_date => p_labor_schedule_fixed_date,
23784 p_labor_schedule_discount => p_labor_schedule_discount,
23785 p_nl_bill_rate_org_id => p_nl_bill_rate_org_id,
23786 p_nl_std_bill_rate_schdl => p_nl_std_bill_rate_schdl,
23787 p_nl_schedule_fixed_date => p_nl_schedule_fixed_date,
23788 p_nl_schedule_discount => p_nl_schedule_discount,
23789 p_labor_cost_multiplier_name => p_labor_cost_multiplier_name,
23790 p_cost_ind_rate_sch_id => p_cost_ind_rate_sch_id,
23791 p_rev_ind_rate_sch_id => p_rev_ind_rate_sch_id,
23792 p_inv_ind_rate_sch_id => p_inv_ind_rate_sch_id,
23793 p_cost_ind_sch_fixed_date => p_cost_ind_sch_fixed_date,
23794 p_rev_ind_sch_fixed_date => p_rev_ind_sch_fixed_date,
23795 p_inv_ind_sch_fixed_date => p_inv_ind_sch_fixed_date,
23796 p_labor_sch_type => p_labor_sch_type,
23797 p_nl_sch_type => p_nl_sch_type,
23798 p_tasks_dff => p_tasks_dff, -- bug 13680655
23799 p_attribute_category => l_attribute_category,
23800 p_attribute1 => l_attribute1,
23801 p_attribute2 => l_attribute2,
23802 p_attribute3 => l_attribute3,
23803 p_attribute4 => l_attribute4,
23804 p_attribute5 => l_attribute5,
23805 p_attribute6 => l_attribute6,
23806 p_attribute7 => l_attribute7,
23807 p_attribute8 => l_attribute8,
23808 p_attribute9 => l_attribute9,
23809 p_attribute10 => l_attribute10,
23810 p_allow_cross_charge_flag => p_allow_cross_charge_flag,
23811 p_project_rate_type => p_project_rate_type,
23812 p_project_rate_date => p_project_rate_date,
23813 p_cc_process_labor_flag => p_cc_process_labor_flag,
23814 p_labor_tp_schedule_id => p_labor_tp_schedule_id,
23815 p_labor_tp_fixed_date => p_labor_tp_fixed_date,
23816 p_cc_process_nl_flag => p_cc_process_nl_flag,
23817 p_nl_tp_schedule_id => p_nl_tp_schedule_id,
23818 p_nl_tp_fixed_date => p_nl_tp_fixed_date,
23819 p_receive_project_invoice_flag => p_receive_project_invoice_flag,
23820 p_work_type_id => p_work_type_id,
23821 p_emp_bill_rate_schedule_id => p_emp_bill_rate_schedule_id,
23822 p_job_bill_rate_schedule_id => p_job_bill_rate_schedule_id,
23823
23824 --Sakthi MCB
23825 p_non_lab_std_bill_rt_sch_id => p_non_lab_std_bill_rt_sch_id,
23826 p_taskfunc_cost_rate_type => p_taskfunc_cost_rate_type,
23827 p_taskfunc_cost_rate_date => p_taskfunc_cost_rate_date,
23828
23829 --Sakthi MCB
23830 p_labor_disc_reason_code => p_labor_disc_reason_code,
23831 p_non_labor_disc_reason_code => p_non_labor_disc_reason_code,
23832
23833 --PA L Changes 2872708
23834 p_retirement_cost_flag => p_retirement_cost_flag,
23835 p_cint_eligible_flag => p_cint_eligible_flag,
23836 p_cint_stop_date => p_cint_stop_date,
23837 --End PA L Changes 2872708
23838 --Added by rtarway for BUG 4106154
23839 p_gen_etc_source_code => p_gen_etc_source_code,
23840
23841 --Bug 3279981 Review
23842 p_invoice_method => l_invoice_method,
23843 p_customer_id => l_customer_id,
23844 --Bug 3279981 Review
23845 p_out_pa_task_id => l_out_pa_task_id,
23846 p_out_pm_task_reference => l_out_pm_task_reference );
23847 -- --dbms_output.put_line('after CALLING UPDATE_ONE_TASK');
23848 p_return_status := l_return_status;
23849 -- --dbms_output.put_line('p_return_status'||p_return_status);
23850 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
23851 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
23852 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
23853 RAISE FND_API.G_EXC_ERROR;
23854 END IF;
23855
23856 p_out_pa_task_id := l_out_pa_task_id;
23857 p_out_pm_task_reference := l_out_pm_task_reference;
23858
23859 --BUG 4081329, rtarway, update all child tasks which have null completion date, if completion date is getting updated
23860 --Fix for 7427388
23861 /*if (p_task_completion_date is not null and p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) then
23862 open cur_get_child_task_dates (l_project_id,l_pa_task_id);
23863 fetch cur_get_child_task_dates bulk collect into l_task_id_tbl,
23864 l_start_date_tbl,
23865 l_completion_date_tbl;
23866 close cur_get_child_task_dates;
23867 if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23868 FORALL i in l_task_id_tbl.first..l_task_id_tbl.last
23869 update pa_tasks set completion_date = p_task_completion_date where task_id = l_task_id_tbl(i)
23870 and project_id = l_project_id;
23871 end if;
23872 end if;*/
23873 -- Added one more condition to check rollup flag to defer the date updates 14556729
23874 if ( NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N') = 'N' AND p_task_completion_date is not null and p_task_completion_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE ) then
23875 open cur_get_child_task_dates (l_project_id,l_pa_task_id);
23876 fetch cur_get_child_task_dates bulk collect into l_task_id_tbl,
23877 l_start_date_tbl,
23878 l_completion_date_tbl,
23879 l_parent_task_id_tbl;
23880 close cur_get_child_task_dates;
23881 if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23882 FOR i in l_task_id_tbl.first..l_task_id_tbl.last LOOP
23883 IF l_parent_task_id_tbl(i) IS NOT NULL AND l_start_date_tbl(i) is NULL THEN
23884 SELECT start_date
23885 INTO l_parent_task_date
23886 FROM pa_tasks
23887 WHERE task_id = l_parent_task_id_tbl(i);
23888
23889 UPDATE pa_tasks
23890 SET completion_date = p_task_completion_date,
23891 start_date = l_parent_task_date
23892 WHERE task_id = l_task_id_tbl(i);
23893
23894 ELSE
23895 UPDATE pa_tasks
23896 SET completion_date = p_task_completion_date
23897 WHERE task_id = l_task_id_tbl(i);
23898 END IF;
23899 END LOOP;
23900 end if;
23901 end if;
23902 --End of fix for 7427388
23903
23904 --BUG#7015228, Deleting data from previous cursor
23905 l_task_id_tbl.delete;
23906 l_start_date_tbl.delete;
23907 l_completion_date_tbl.delete;
23908
23909 --BUG#7015228, update all child tasks which have null start date, if start date is getting updated
23910 -- Added one more condition to check rollup flag to defer the date updates 14556729
23911 if (NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N') = 'N' AND p_task_start_date is not null and p_task_start_date <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE) then
23912 open cur_get_child_task_start_dates (l_project_id,l_pa_task_id);
23913 fetch cur_get_child_task_start_dates bulk collect into l_task_id_tbl,
23914 l_start_date_tbl,
23915 l_completion_date_tbl;
23916 close cur_get_child_task_start_dates;
23917 if l_task_id_tbl is not null and l_task_id_tbl.count > 0 then
23918 FORALL i in l_task_id_tbl.first..l_task_id_tbl.last
23919 update pa_tasks set start_date = p_task_start_date where task_id = l_task_id_tbl(i)
23920 and project_id = l_project_id;
23921 end if;
23922 end if;
23923
23924
23925 --bug 2665656
23926 -- --dbms_output.put_line('p_pm_product_code'||p_pm_product_code);
23927 -- --dbms_output.put_line('p_update_task_structure'||p_update_task_structure);
23928 -- --dbms_output.put_line('p_structure_type'||p_structure_type);
23929 ----dbms_output.put_line('value of l_out_pa_task_id'||l_out_pa_task_id);
23930 ----dbms_output.put_line('value of l_out_pm_task_reference'||l_out_pm_task_reference);
23931
23932 IF (NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN') AND (p_update_task_structure = 'Y') --Added for bug 2931183
23933 THEN
23934 --bug 2665656
23935 -- Bug 3106457
23936 -- --dbms_output.put_line('Going into this loop');
23937 -- --dbms_output.put_line('p_structure_version_id : '||p_structure_version_id);
23938 --BUG 3919800, p_structure_version_id to l_structure_version_id, rtarway
23939 IF l_structure_version_id IS NULL
23940 OR l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --bug 3174639
23941 THEN
23942 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(l_project_id);
23943 ELSE
23944 l_structure_version_id := p_structure_version_id;
23945 END IF;
23946 -- --dbms_output.put_line('BEFORE CALLING UPDATE_task_structure');
23947 -- --dbms_output.put_line('l_structure_version_id IS'||l_structure_version_id);
23948
23949
23950 ----dbms_output.put_line('Value of p_task_number passed to update_task_structure'||p_task_number);
23951
23952 PA_PROJ_TASK_STRUC_PUB.update_task_structure
23953 (
23954 p_calling_module => 'AMG'
23955 ,p_task_id => l_pa_task_id --BUG 3919800, rtarway
23956 ,p_ref_task_id => l_ref_task_id --Bug 3705333 changed from p_ref_task_id to l_ref_task_id
23957 ,p_project_id => l_project_id
23958 ,p_task_number => p_task_number
23959 ,p_task_name => l_long_task_name ----bug 2833194 -- for bug# 3749447
23960 ,p_task_description => p_task_description
23961 ,p_carrying_out_organization_id => p_carrying_out_organization_id
23962 ,p_task_manager_id => p_task_manager_person_id
23963 ,p_pm_product_code => p_pm_product_code
23964 ,p_pm_task_reference => p_pm_task_reference
23965 ,p_location_id => p_address_id
23966 ,p_structure_type => l_structure_type --Bug#3747312 p_structure_type
23967 ,p_OBLIGATION_START_DATE => p_OBLIGATION_START_DATE
23968 ,p_OBLIGATION_FINISH_DATE => p_OBLIGATION_FINISH_DATE
23969 ,p_ESTIMATED_START_DATE => p_ESTIMATED_START_DATE
23970 ,p_ESTIMATED_FINISH_DATE => p_ESTIMATED_FINISH_DATE
23971 ,p_BASELINE_START_DATE => p_BASELINE_START_DATE
23972 ,p_BASELINE_FINISH_DATE => p_BASELINE_FINISH_DATE
23973 ,p_CLOSED_DATE => p_CLOSED_DATE
23974 ,p_WQ_UOM_CODE => p_WQ_UOM_CODE
23975 ,p_WQ_ITEM_CODE => p_WQ_ITEM_CODE
23976 ,p_STATUS_CODE => p_STATUS_CODE
23977 ,p_WF_STATUS_CODE => p_WF_STATUS_CODE
23978 ,p_PRIORITY_CODE => p_PRIORITY_CODE
23979 ,p_MILESTONE_FLAG => p_MILESTONE_FLAG
23980 ,p_CRITICAL_FLAG => p_CRITICAL_FLAG
23981 ,p_INC_PROJ_PROGRESS_FLAG => p_INC_PROJ_PROGRESS_FLAG
23982 ,p_LINK_TASK_FLAG => p_LINK_TASK_FLAG
23983 ,p_CALENDAR_ID => p_CALENDAR_ID
23984 ,p_PLANNED_EFFORT => p_PLANNED_EFFORT
23985 ,p_DURATION => p_DURATION
23986 ,p_PLANNED_WORK_QUANTITY => p_PLANNED_WORK_QUANTITY
23987 ,p_TASK_TYPE => p_TASK_TYPE
23988 ,p_actual_start_date => p_actual_start_date
23989 ,p_actual_finish_date => p_actual_finish_date
23990 ,p_early_start_date => p_early_start_date
23991 ,p_early_finish_date => p_early_finish_date
23992 ,p_late_start_date => p_late_start_date
23993 ,p_late_finish_date => p_late_finish_date
23994 ,p_scheduled_start_date => p_scheduled_start_date
23995 ,p_scheduled_finish_date => p_scheduled_finish_date
23996 --Commented by rtarway for BUG 3663712
23997 --,p_structure_version_id => p_structure_version_id
23998 ,p_structure_version_id => l_structure_version_id
23999 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
24000 ,p_ext_act_duration => p_ext_act_duration
24001 ,p_ext_remain_duration => p_ext_remain_duration
24002 ,p_ext_sch_duration => p_ext_sch_duration
24003 -- (End venkat) new params for bug #3450684 -------------------------------------------------
24004 --Bug 6153503 start
24005 ,p_attribute_category => l_wp_attribute_category
24006 ,p_attribute1 => l_wp_attribute1
24007 ,p_attribute2 => l_wp_attribute2
24008 ,p_attribute3 => l_wp_attribute3
24009 ,p_attribute4 => l_wp_attribute4
24010 ,p_attribute5 => l_wp_attribute5
24011 ,p_attribute6 => l_wp_attribute6
24012 ,p_attribute7 => l_wp_attribute7
24013 ,p_attribute8 => l_wp_attribute8
24014 ,p_attribute9 => l_wp_attribute9
24015 ,p_attribute10 => l_wp_attribute10
24016 ,p_attribute11 => l_wp_attribute11
24017 ,p_attribute12 => l_wp_attribute12
24018 ,p_attribute13 => l_wp_attribute13
24019 ,p_attribute14 => l_wp_attribute14
24020 ,p_attribute15 => l_wp_attribute15
24021 --Bug 6153503 end
24022 -- set the new params - bug #3654243 ----------------------------------------------
24023 ,p_base_percent_comp_deriv_code => p_base_percent_comp_deriv_code
24024 ,p_sch_tool_tsk_type_code => p_sch_tool_tsk_type_code
24025 ,p_constraint_type_code => p_constraint_type_code
24026 ,p_constraint_date => p_constraint_date
24027 ,p_free_slack => p_free_slack
24028 ,p_total_slack => p_total_slack
24029 ,p_effort_driven_flag => p_effort_driven_flag
24030 ,p_level_assignments_flag => p_level_assignments_flag
24031 ,p_invoice_method => p_invoice_method
24032 ,p_customer_id => p_customer_id
24033 ,p_gen_etc_source_code => p_gen_etc_source_code
24034 -- set the new params - bug #3654243 -------------------------------------------------
24035
24036 -- Progress Management Changes. Bug # 3420093.
24037 ,p_etc_effort => p_etc_effort
24038 ,p_percent_complete => p_percent_complete
24039 -- Progress Management Changes. Bug # 3420093.
24040 --Added by rtarway for BUG 3908013
24041 /* Values are already being passed above. Ref Bug #6153503
24042 ,p_attribute_category => p_attribute_category
24043 ,p_attribute1 => p_attribute1
24044 ,p_attribute2 => p_attribute2
24045 ,p_attribute3 => p_attribute3
24046 ,p_attribute4 => p_attribute4
24047 ,p_attribute5 => p_attribute5
24048 ,p_attribute6 => p_attribute6
24049 ,p_attribute7 => p_attribute7
24050 ,p_attribute8 => p_attribute8
24051 ,p_attribute9 => p_attribute9
24052 ,p_attribute10 => p_attribute10 */
24053 --end add by rtarway, 3908013
24054 ,x_msg_count => l_msg_count
24055 ,x_msg_data => l_msg_data
24056 ,x_return_status => l_return_status
24057 ,P_PM_SOURCE_CODE => P_PM_SOURCE_CODE -- Huawei 15876400 source code
24058 );
24059 ----dbms_output.put_line('return status of update_task_struc '||l_return_status);
24060
24061 END IF;
24062
24063 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
24064 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24065 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
24066 RAISE FND_API.G_EXC_ERROR;
24067 END IF;
24068
24069 ELSIF l_structure_type = 'WORKPLAN' --p_structure_type
24070 THEN
24071 -- Moved this code up. As this should be the first validation the should be performed
24072 -- IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'N' OR
24073 --If update task is called from update_project api then PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN wont be called
24074 --bcoz G_IS_WP_SEPARATE_FROM_FN will already be set by upate_project.
24075 -- NVL( G_IS_WP_SEPARATE_FROM_FN, PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ) ) = 'N' --bug 2876703 update_task
24076 --THEN
24077 -- IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
24078 -- THEN
24079 -- pa_interface_utils_pub.map_new_amg_msg
24080 -- ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
24081 -- ,p_msg_attribute => 'CHANGE'
24082 -- ,p_resize_flag => 'N'
24083 -- ,p_msg_context => 'GENERAL'
24084 -- ,p_attribute1 => ''
24085 -- ,p_attribute2 => ''
24086 -- ,p_attribute3 => ''
24087 -- ,p_attribute4 => ''
24088 -- ,p_attribute5 => '');
24089 -- END IF;
24090 -- RAISE FND_API.G_EXC_ERROR;
24091 -- END IF;
24092
24093 -- Actions performed using the APIs would be subject to
24094 -- function security. If the responsibility does not allow
24095 -- such functions to be executed, the API should not proceed further
24096 -- since the user does not have access to such functions
24097
24098
24099 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
24100 (p_api_version_number => p_api_version_number,
24101 p_responsibility_id => l_resp_id,
24102 p_function_name => 'PA_PM_UPDATE_TASK',
24103 p_msg_count => l_msg_count,
24104 p_msg_data => l_msg_data,
24105 p_return_status => l_return_status,
24106 p_function_allowed => l_function_allowed );
24107
24108 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24109 THEN
24110 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24111
24112 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24113 THEN
24114 RAISE FND_API.G_EXC_ERROR;
24115 END IF;
24116 IF l_function_allowed = 'N' THEN
24117 pa_interface_utils_pub.map_new_amg_msg
24118 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
24119 ,p_msg_attribute => 'CHANGE'
24120 ,p_resize_flag => 'Y'
24121 ,p_msg_context => 'GENERAL'
24122 ,p_attribute1 => ''
24123 ,p_attribute2 => ''
24124 ,p_attribute3 => ''
24125 ,p_attribute4 => ''
24126 ,p_attribute5 => '');
24127 p_return_status := FND_API.G_RET_STS_ERROR;
24128 RAISE FND_API.G_EXC_ERROR;
24129 END IF;
24130
24131 --Project Structures Integration
24132 ----dbms_output.put_line('l_structure_version_id--ut'||l_structure_version_id);
24133 IF ( l_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
24134 l_structure_version_id IS NULL )
24135 THEN
24136 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
24137 THEN
24138 pa_interface_utils_pub.map_new_amg_msg
24139 ( p_old_message_code => 'PA_PS_STRUC_VER_REQ'
24140 ,p_msg_attribute => 'CHANGE'
24141 ,p_resize_flag => 'N'
24142 ,p_msg_context => 'GENERAL'
24143 ,p_attribute1 => ''
24144 ,p_attribute2 => ''
24145 ,p_attribute3 => ''
24146 ,p_attribute4 => ''
24147 ,p_attribute5 => '');
24148 END IF;
24149 RAISE FND_API.G_EXC_ERROR;
24150 p_return_status := FND_API.G_RET_STS_SUCCESS;
24151 END IF;
24152 -- Bug 3106457. This is not null.
24153 --Commented by rtarway for BUG 3919800
24154 --l_structure_version_id := p_structure_version_id;
24155 --Added by rtarway for BUG 4106154
24156 if (l_update_pa_tasks = 'Y' AND
24157 --Added by rtarway for bug 4321313
24158 PA_PROJ_ELEMENTS_UTILS.CHECK_IS_FINANCIAL_TASK(l_pa_task_id) = 'Y'
24159 ) then
24160
24161 --In case of Shared Structures, we do not need to update dff attributes in pa_tasks, instead
24162 --dff fields of pa_proj_elem_ver_schedule are updated
24163
24164 PA_PROJECT_PVT.Update_One_Task
24165 (
24166 p_api_version_number => p_api_version_number,
24167 p_commit => FND_API.G_FALSE,
24168 p_msg_count => p_msg_count,
24169 p_msg_data => p_msg_data,
24170 p_return_status => l_return_status,
24171 p_pm_product_code => p_pm_product_code,
24172 p_pa_project_id => l_project_id,
24173 p_pa_task_id => l_pa_task_id,
24174 p_pm_task_reference => p_pm_task_reference,
24175 p_task_number => p_task_number,
24176 p_task_name => p_task_name,
24177 p_long_task_name => l_long_task_name,
24178 p_task_description => p_task_description,
24179 p_task_start_date => p_task_start_date,
24180 p_task_completion_date => p_task_completion_date,
24181 p_early_start_date => p_early_start_date,
24182 p_early_finish_date => p_early_finish_date,
24183 p_late_start_date => p_late_start_date,
24184 p_late_finish_date => p_late_finish_date,
24185 p_scheduled_start_date => p_scheduled_start_date, -- 7245488
24186 p_scheduled_finish_date => p_scheduled_finish_date, /* bug 7245488 */
24187 p_pm_parent_task_reference => p_pm_parent_task_reference,
24188 p_pa_parent_task_id => p_pa_parent_task_id,
24189 p_address_id => p_address_id,
24190 p_carrying_out_organization_id => p_carrying_out_organization_id,
24191 p_service_type_code => p_service_type_code,
24192 p_task_manager_person_id => p_task_manager_person_id,
24193 p_billable_flag => p_billable_flag,
24194 p_chargeable_flag => p_chargeable_flag,
24195 p_ready_to_bill_flag => p_ready_to_bill_flag,
24196 p_ready_to_distribute_flag => p_ready_to_distribute_flag,
24197 p_limit_to_txn_controls_flag => p_limit_to_txn_controls_flag,
24198 p_labor_bill_rate_org_id => p_labor_bill_rate_org_id,
24199 p_labor_std_bill_rate_schdl => p_labor_std_bill_rate_schdl,
24200 p_labor_schedule_fixed_date => p_labor_schedule_fixed_date,
24201 p_labor_schedule_discount => p_labor_schedule_discount,
24202 p_nl_bill_rate_org_id => p_nl_bill_rate_org_id,
24203 p_nl_std_bill_rate_schdl => p_nl_std_bill_rate_schdl,
24204 p_nl_schedule_fixed_date => p_nl_schedule_fixed_date,
24205 p_nl_schedule_discount => p_nl_schedule_discount,
24206 p_labor_cost_multiplier_name => p_labor_cost_multiplier_name,
24207 p_cost_ind_rate_sch_id => p_cost_ind_rate_sch_id,
24208 p_rev_ind_rate_sch_id => p_rev_ind_rate_sch_id,
24209 p_inv_ind_rate_sch_id => p_inv_ind_rate_sch_id,
24210 p_cost_ind_sch_fixed_date => p_cost_ind_sch_fixed_date,
24211 p_rev_ind_sch_fixed_date => p_rev_ind_sch_fixed_date,
24212 p_inv_ind_sch_fixed_date => p_inv_ind_sch_fixed_date,
24213 p_labor_sch_type => p_labor_sch_type,
24214 p_nl_sch_type => p_nl_sch_type,
24215 p_tasks_dff => p_tasks_dff, -- bug 13680655
24216 --Bug 6153503 start
24217 p_attribute_category => l_attribute_category,
24218 p_attribute1 => l_attribute1,
24219 p_attribute2 => l_attribute2,
24220 p_attribute3 => l_attribute3,
24221 p_attribute4 => l_attribute4,
24222 p_attribute5 => l_attribute5,
24223 p_attribute6 => l_attribute6,
24224 p_attribute7 => l_attribute7,
24225 p_attribute8 => l_attribute8,
24226 p_attribute9 => l_attribute9,
24227 p_attribute10 => l_attribute10,
24228 --Bug 6153503 end
24229 p_allow_cross_charge_flag => p_allow_cross_charge_flag,
24230 p_project_rate_type => p_project_rate_type,
24231 p_project_rate_date => p_project_rate_date,
24232 p_cc_process_labor_flag => p_cc_process_labor_flag,
24233 p_labor_tp_schedule_id => p_labor_tp_schedule_id,
24234 p_labor_tp_fixed_date => p_labor_tp_fixed_date,
24235 p_cc_process_nl_flag => p_cc_process_nl_flag,
24236 p_nl_tp_schedule_id => p_nl_tp_schedule_id,
24237 p_nl_tp_fixed_date => p_nl_tp_fixed_date,
24238 p_receive_project_invoice_flag => p_receive_project_invoice_flag,
24239 p_work_type_id => p_work_type_id,
24240 p_emp_bill_rate_schedule_id => p_emp_bill_rate_schedule_id,
24241 p_job_bill_rate_schedule_id => p_job_bill_rate_schedule_id,
24242 p_non_lab_std_bill_rt_sch_id => p_non_lab_std_bill_rt_sch_id,
24243 p_taskfunc_cost_rate_type => p_taskfunc_cost_rate_type,
24244 p_taskfunc_cost_rate_date => p_taskfunc_cost_rate_date,
24245 p_labor_disc_reason_code => p_labor_disc_reason_code,
24246 p_non_labor_disc_reason_code => p_non_labor_disc_reason_code,
24247 p_retirement_cost_flag => p_retirement_cost_flag,
24248 p_cint_eligible_flag => p_cint_eligible_flag,
24249 p_cint_stop_date => p_cint_stop_date,
24250 p_gen_etc_source_code => p_gen_etc_source_code,
24251 p_invoice_method => l_invoice_method,
24252 p_customer_id => l_customer_id,
24253 p_out_pa_task_id => l_out_pa_task_id,
24254 p_out_pm_task_reference => l_out_pm_task_reference
24255 );
24256
24257 p_return_status := l_return_status;
24258
24259 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
24260 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24261 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
24262 RAISE FND_API.G_EXC_ERROR;
24263 END IF;
24264 end if;
24265 --End Added by rtarway for BUG 4106154
24266
24267 --bug 2665656
24268 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN'
24269 THEN
24270 --bug 2665656
24271 PA_PROJ_TASK_STRUC_PUB.update_task_structure
24272 (
24273 p_calling_module => 'AMG'
24274 ,p_task_id => l_pa_task_id --BUG 3919800, rtarway
24275 ,p_ref_task_id => l_ref_task_id --Bug 3705333 changed from p_ref_task_id to l_ref_task_id
24276 ,p_project_id => l_project_id
24277 ,p_task_number => p_task_number
24278 ,p_task_name => l_long_task_name ----bug 2833194 , -- bug# 3749447
24279 ,p_task_description => p_task_description
24280 ,p_carrying_out_organization_id => p_carrying_out_organization_id
24281 ,p_task_manager_id => p_task_manager_person_id
24282 ,p_pm_product_code => p_pm_product_code
24283 ,p_pm_task_reference => p_pm_task_reference
24284 ,p_location_id => p_address_id
24285 ,p_structure_type => l_structure_type --p_structure_type
24286 ,p_OBLIGATION_START_DATE => p_OBLIGATION_START_DATE
24287 ,p_OBLIGATION_FINISH_DATE => p_OBLIGATION_FINISH_DATE
24288 ,p_ESTIMATED_START_DATE => p_ESTIMATED_START_DATE
24289 ,p_ESTIMATED_FINISH_DATE => p_ESTIMATED_FINISH_DATE
24290 ,p_BASELINE_START_DATE => p_BASELINE_START_DATE
24291 ,p_BASELINE_FINISH_DATE => p_BASELINE_FINISH_DATE
24292 ,p_CLOSED_DATE => p_CLOSED_DATE
24293 ,p_WQ_UOM_CODE => p_WQ_UOM_CODE
24294 ,p_WQ_ITEM_CODE => p_WQ_ITEM_CODE
24295 ,p_STATUS_CODE => p_STATUS_CODE
24296 ,p_WF_STATUS_CODE => p_WF_STATUS_CODE
24297 ,p_PRIORITY_CODE => p_PRIORITY_CODE
24298 ,p_MILESTONE_FLAG => p_MILESTONE_FLAG
24299 ,p_CRITICAL_FLAG => p_CRITICAL_FLAG
24300 ,p_INC_PROJ_PROGRESS_FLAG => p_INC_PROJ_PROGRESS_FLAG
24301 ,p_LINK_TASK_FLAG => p_LINK_TASK_FLAG
24302 ,p_CALENDAR_ID => p_CALENDAR_ID
24303 ,p_PLANNED_EFFORT => p_PLANNED_EFFORT
24304 ,p_DURATION => p_DURATION
24305 ,p_PLANNED_WORK_QUANTITY => p_PLANNED_WORK_QUANTITY
24306 ,p_TASK_TYPE => p_TASK_TYPE
24307 ,p_actual_start_date => p_actual_start_date
24308 ,p_actual_finish_date => p_actual_finish_date
24309 ,p_early_start_date => p_early_start_date
24310 ,p_early_finish_date => p_early_finish_date
24311 ,p_late_start_date => p_late_start_date
24312 ,p_late_finish_date => p_late_finish_date
24313 ,p_scheduled_start_date => p_scheduled_start_date
24314 ,p_scheduled_finish_date => p_scheduled_finish_date
24315 --Commented by rtarway, BUG 3663712
24316 --,p_structure_version_id => p_structure_version_id
24317 ,p_structure_version_id => l_structure_version_id
24318 -- (Begin venkat) new params for bug #3450684 ----------------------------------------------
24319 ,p_ext_act_duration => p_ext_act_duration
24320 ,p_ext_remain_duration => p_ext_remain_duration
24321 ,p_ext_sch_duration => p_ext_sch_duration
24322 -- (End venkat) new params for bug #3450684 -------------------------------------------------
24323 --Bug 6153503 start
24324 ,p_attribute_category => l_wp_attribute_category
24325 ,p_attribute1 => l_wp_attribute1
24326 ,p_attribute2 => l_wp_attribute2
24327 ,p_attribute3 => l_wp_attribute3
24328 ,p_attribute4 => l_wp_attribute4
24329 ,p_attribute5 => l_wp_attribute5
24330 ,p_attribute6 => l_wp_attribute6
24331 ,p_attribute7 => l_wp_attribute7
24332 ,p_attribute8 => l_wp_attribute8
24333 ,p_attribute9 => l_wp_attribute9
24334 ,p_attribute10 => l_wp_attribute10
24335 ,p_attribute11 => l_wp_attribute11
24336 ,p_attribute12 => l_wp_attribute12
24337 ,p_attribute13 => l_wp_attribute13
24338 ,p_attribute14 => l_wp_attribute14
24339 ,p_attribute15 => l_wp_attribute15
24340 --Bug 6153503 end
24341 -- set the new params - bug #3654243 ----------------------------------------------
24342 ,p_base_percent_comp_deriv_code => p_base_percent_comp_deriv_code
24343 ,p_sch_tool_tsk_type_code => p_sch_tool_tsk_type_code
24344 ,p_constraint_type_code => p_constraint_type_code
24345 ,p_constraint_date => p_constraint_date
24346 ,p_free_slack => p_free_slack
24347 ,p_total_slack => p_total_slack
24348 ,p_effort_driven_flag => p_effort_driven_flag
24349 ,p_level_assignments_flag => p_level_assignments_flag
24350 ,p_invoice_method => p_invoice_method
24351 ,p_customer_id => p_customer_id
24352 ,p_gen_etc_source_code => p_gen_etc_source_code
24353 -- set the new params - bug #3654243 -------------------------------------------------
24354
24355
24356 -- Progress Management Changes. Bug # 3420093.
24357 ,p_etc_effort => p_etc_effort
24358 ,p_percent_complete => p_percent_complete
24359 -- Progress Management Changes. Bug # 3420093.
24360
24361 ,x_msg_count => l_msg_count
24362 ,x_msg_data => l_msg_data
24363 ,x_return_status => l_return_status
24364 ,P_PM_SOURCE_CODE => P_PM_SOURCE_CODE -- Huawei 15876400 source code
24365 --Added by rtarway for BUG 3908013
24366 /* Values are already being passed above. Ref Bug#6153503
24367 ,p_attribute_category => p_attribute_category
24368 ,p_attribute1 => p_attribute1
24369 ,p_attribute2 => p_attribute2
24370 ,p_attribute3 => p_attribute3
24371 ,p_attribute4 => p_attribute4
24372 ,p_attribute5 => p_attribute5
24373 ,p_attribute6 => p_attribute6
24374 ,p_attribute7 => p_attribute7
24375 ,p_attribute8 => p_attribute8
24376 ,p_attribute9 => p_attribute9
24377 ,p_attribute10 => p_attribute10 */
24378
24379 );
24380
24381 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
24382 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24383 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
24384 RAISE FND_API.G_EXC_ERROR;
24385 END IF;
24386 END IF; --<< p_pm_product_code = 'WORKPLAN' >>
24387
24388 p_out_pa_task_id := l_pa_task_id;--BUG 3919800, rtarway
24389 p_out_pm_task_reference := p_pm_task_reference ;
24390
24391
24392 --Project Structures Integration
24393 END IF; --<<p_structure_type>>
24394 --Begin Add by rtarway FP.M changes for Mapping
24395 --No Function Security Check required
24396 --Call the update_mapping only if p_mapped_task_reference or p_mapped_task_id is passed
24397 G_PROJECT_SHARING_TYPE := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
24398 IF (G_PROJECT_SHARING_TYPE = 'SPLIT_MAPPING' and nvl(l_is_wp_separate_from_fn,'N') = 'Y')
24399 THEN
24400 IF (
24401 ( p_mapped_task_reference IS NULL OR p_mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
24402 OR
24403 ( p_mapped_task_id IS NULL OR p_mapped_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
24404 )
24405 THEN
24406 pa_project_pub.update_mapping
24407 (
24408 p_api_version => p_api_version_number
24409 , p_init_msg_list => p_init_msg_list
24410 , p_commit => FND_API.G_FALSE--bug 3766967
24411 , p_debug_mode => FND_API.G_TRUE
24412 , p_project_id => l_project_id --Bug#3747312 p_pa_project_id
24413 , p_proj_source_reference => null
24414 , p_wkp_structure_version_id => l_structure_version_id -- BUG 3919800, rtarway
24415 , p_wkp_task_id => l_pa_task_id--Since the tasks are already created , this will have task Ids
24416 , px_mapped_task_id => p_mapped_task_id------------|One of theses two should be passed
24417 , p_mapped_task_reference => p_mapped_task_reference ----|
24418 , x_return_status => l_return_status
24419 , x_msg_count => l_msg_count
24420 , x_msg_data => l_msg_data
24421
24422 );
24423 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
24424 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24425 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
24426 RAISE FND_API.G_EXC_ERROR;
24427 END IF;
24428 END IF;
24429 END IF;
24430
24431 --End Add by rtarway FP.M chages for Mapping
24432 --Begin Add by rtarway FP.M chages for Set Financial Task
24433 IF (G_PROJECT_SHARING_TYPE = 'SHARE_PARTIAL' and nvl(l_is_wp_separate_from_fn,'N') = 'N') THEN --l_structure_type
24434 --Get the task Version Id
24435 --BUG 3919800,p_structure_version_id and p_pa_task_id are replaced
24436 l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(l_structure_version_id, l_pa_task_id);
24437 OPEN c_get_pa_record_version_number ( l_task_version_id , l_project_id ); --Bug#3747312
24438 FETCH c_get_pa_record_version_number INTO l_patask_record_version_number;
24439 CLOSE c_get_pa_record_version_number;
24440 IF ( p_financial_task_flag IS NOT NULL AND p_financial_task_flag <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
24441 THEN
24442 PA_TASKS_MAINT_PUB.SET_FINANCIAL_FLAG_WRAPPER
24443 (
24444 p_api_version => p_api_version_number
24445 , p_init_msg_list => p_init_msg_list
24446 , p_commit => FND_API.G_FALSE--bug 3766967
24447 , p_calling_module => 'AMG'
24448 , p_debug_mode => FND_API.G_TRUE
24449 , p_task_version_id => l_task_version_id
24450 , p_checked_flag => p_financial_task_flag
24451 , p_record_version_number => l_patask_record_version_number
24452 , p_project_id => l_project_id --Bug#3747312 p_pa_project_id
24453 , p_published_version_exists => G_Published_version_exists
24454 , x_return_status => l_return_status
24455 , x_msg_count => l_msg_count
24456 , x_msg_data => l_msg_data
24457 );
24458 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24459 THEN
24460 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24461 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24462 THEN
24463 RAISE FND_API.G_EXC_ERROR;
24464 END IF;
24465 END IF;
24466 END IF;
24467 --End Add by rtarway FP.M chages for Set Financial Task
24468
24469 -- p_out_pa_task_id := l_out_pa_task_id;
24470 -- p_out_pm_task_reference := l_out_pm_task_reference;
24471
24472 -- PA L Changes 3010538
24473 IF NVL( p_pm_product_code, 'WORKPLAN' ) <> 'WORKPLAN' -- We should not be calling the task weightage apis when it is the
24474 -- publishing flow.
24475 AND p_calling_api <> 'UPDATE_PROJECT' --bug 4199694 This is required otherwise dates rollup and concurrent program will called in update_project flow multiple times.
24476 THEN
24477 ---bug 4199694
24478 --call directly the PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup api. No need to call the rollup_dates here as its called per task.
24479 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( l_project_id ) = 'Y'
24480 THEN
24481 IF l_task_version_id IS NULL
24482 THEN
24483 l_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(l_structure_version_id, l_pa_task_id);
24484 END IF;
24485 PA_PROJ_TASK_STRUC_PUB.rollup_dates(
24486 p_tasks_in => l_tasks_out
24487 ,p_task_version_id => l_task_version_id
24488 ,p_project_id => l_project_id
24489 ,P_structure_version_id => l_structure_version_id
24490 ,x_msg_count => l_msg_count
24491 ,x_msg_data => l_msg_data
24492 ,x_return_status => l_return_status
24493 );
24494
24495 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24496 THEN
24497 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24498
24499 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24500 THEN
24501 RAISE FND_API.G_EXC_ERROR;
24502 END IF;
24503 END IF;
24504 ---bug 4199694
24505
24506 -- These globals have been intialized before they are used!
24507 PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id ); -- Bug 3106457
24508 /* Commented the code below for bug#3451073
24509 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Bug 3106457 */
24510 /* Added the If condition Bug#3451073 */
24511 IF p_is_wp_seperate_from_fn = 'X'
24512 THEN
24513 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( l_project_id ); -- Bug 3106457
24514 ELSE
24515 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN := p_is_wp_seperate_from_fn; -- Addded for bug#3451073
24516 END IF;
24517
24518 PA_PROJECT_PUB.G_Published_version_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id ); -- Bug 3106457
24519
24520 IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
24521 ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
24522 PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
24523 PA_PROJECT_PUB.G_Published_version_exists = 'N')
24524 THEN
24525
24526 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id -- Bug 3106457 p_pa_project_id
24527 ,p_structure_version_id => l_structure_version_id ) ; -- Bug 3106457
24528 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
24529 IF p_process_mode = 'ONLINE' THEN
24530
24531 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
24532 ,p_project_id => l_project_id -- Bug 3106457 p_pa_project_id
24533 ,p_structure_version_id => l_structure_version_id -- Bug 3106457 p_structure_version_id
24534 ,x_return_status => l_return_status
24535 ,x_msg_count => l_msg_count
24536 ,x_msg_data => l_msg_data ) ;
24537
24538 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24539 THEN
24540 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24541 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24542 THEN
24543 RAISE FND_API.G_EXC_ERROR;
24544 END IF;
24545 ELSIF p_process_mode = 'CONCURRENT' THEN
24546
24547 PA_PROJ_TASK_STRUC_PUB. PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
24548 ,p_project_id => l_project_id --Bug 3106457 p_pa_project_id
24549 ,p_structure_version_id => l_structure_version_id -- Bug 3106457 p_structure_version_id
24550 ,x_return_status => l_return_status
24551 ,x_msg_count => l_msg_count
24552 ,x_msg_data => l_msg_data ) ;
24553
24554 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24555 THEN
24556 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24557 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24558 THEN
24559 RAISE FND_API.G_EXC_ERROR;
24560 END IF;
24561 END IF ;
24562 END IF ;
24563 END IF ;
24564 END IF;
24565 -- PA L Changes 3010538
24566
24567 -- FP-M Bug # 3301192 update task
24568 /*
24569 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID(p_pa_project_id => p_pa_project_id
24570 ,p_pm_task_reference => p_pm_task_reference
24571 ,p_out_task_id => l_d_task_id
24572 ,p_return_status => l_return_status);
24573 */
24574
24575 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN --Bug#3747312
24576
24577 IF l_d_task_id IS NULL AND p_pm_task_reference IS NOT NULL AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24578 THEN
24579 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_all(p_pa_project_id => l_project_id --Bug#3747312 p_pa_project_id
24580 , p_structure_type => l_structure_type -- Bug 10052686
24581 ,p_pm_task_reference => p_pm_task_reference
24582 ,p_out_task_id => l_d_task_id
24583 ,p_return_status => l_return_status);
24584 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24585 THEN
24586 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24587 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24588 THEN
24589 RAISE FND_API.G_EXC_ERROR;
24590 END IF;
24591
24592 END IF;
24593 /*
24594 IF (PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id) = 'Y') THEN
24595 l_d_struct_ver_id := PA_PROJECT_STRUCTURE_UTILS.GET_LAST_UPDATED_WORKING_VER(l_d_task_id);
24596 ELSE
24597 l_d_struct_ver_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(p_pa_project_id, 'WORKPLAN');
24598 END IF;
24599 */ --we dont need this. The structure version id is derived.
24600
24601 l_d_task_ver_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID(p_structure_version_id => l_structure_version_id
24602 ,p_task_id => l_d_task_id);
24603
24604 pa_proj_task_struc_pub.parse_predecessor_import(p_string => p_pred_string
24605 ,p_delimeter => p_pred_delimiter
24606 ,p_task_version_Id => l_d_task_ver_id
24607 ,x_return_status => l_return_status
24608 ,x_msg_count => l_msg_count
24609 ,x_msg_data => l_msg_data);
24610
24611 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24612 THEN
24613 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24614 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24615 THEN
24616 RAISE FND_API.G_EXC_ERROR;
24617 END IF;
24618 l_d_task_id := null;
24619 END IF;
24620 --bug 4218977, rtarway, unset this variable if not called from update_project
24621 if p_calling_api <> 'UPDATE_PROJECT' then
24622 G_OP_VALIDATE_FLAG := null;
24623 end if;
24624 EXCEPTION
24625
24626 WHEN FND_API.G_EXC_ERROR THEN
24627
24628 p_return_status := FND_API.G_RET_STS_ERROR ;
24629 --bug 4218977, rtarway, unset this variable if not called from update_project
24630 if p_calling_api <> 'UPDATE_PROJECT' then
24631 G_OP_VALIDATE_FLAG := null;
24632 end if;
24633 ROLLBACK TO Update_Task_pub;
24634
24635 -- 4537865
24636 p_out_pa_task_id := NULL ;
24637 p_out_pm_task_reference := NULL ;
24638 -- 4537865
24639
24640 FND_MSG_PUB.Count_And_Get
24641 ( p_count => p_msg_count ,
24642 p_data => p_msg_data );
24643
24644 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
24645
24646 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
24647 ROLLBACK TO Update_Task_pub;
24648 --bug 4218977, rtarway, unset this variable if not called from update_project
24649 if p_calling_api <> 'UPDATE_PROJECT' then
24650 G_OP_VALIDATE_FLAG := null;
24651 end if;
24652
24653 -- 4537865
24654 p_out_pa_task_id := NULL ;
24655 p_out_pm_task_reference := NULL ;
24656 -- 4537865
24657
24658 FND_MSG_PUB.Count_And_Get
24659 ( p_count => p_msg_count ,
24660 p_data => p_msg_data );
24661
24662 WHEN OTHERS THEN
24663
24664 ROLLBACK TO Update_Task_pub;
24665 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
24666 --bug 4218977, rtarway, unset this variable if not called from update_project
24667 if p_calling_api <> 'UPDATE_PROJECT' then
24668 G_OP_VALIDATE_FLAG := null;
24669 end if;
24670
24671 -- 4537865
24672 p_out_pa_task_id := NULL ;
24673 p_out_pm_task_reference := NULL ;
24674 -- 4537865
24675
24676 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
24677
24678 FND_MSG_PUB.add_exc_msg
24679 ( p_pkg_name => G_PKG_NAME
24680 , p_procedure_name => l_api_name );
24681
24682 END IF;
24683
24684 FND_MSG_PUB.Count_And_Get
24685 ( p_count => p_msg_count ,
24686 p_data => p_msg_data );
24687
24688 END update_task;
24689
24690 --------------------------------------------------------------------------------
24691 --Name: execute_update_project
24692 --Type: Procedure
24693 --Description: This procedure can be used to update a project
24694 -- using global PL/SQL tables.
24695 --
24696 --Called subprograms:
24697 --
24698 --
24699 --
24700 --History:
24701 -- 15-AUG-1996 R. Krishnamurthy Created
24702 -- 05-DEC-1996 L. de Werker Added initialisation of message list
24703 -- 22-DEC-97 jwhite - Added OUT-parameter p_workflow_started
24704 -- for workflow.
24705 --
24706
24707 PROCEDURE execute_update_project
24708 ( p_api_version_number IN NUMBER
24709 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
24710 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24711 ,p_op_validate_flag IN VARCHAR2 := 'Y'--added by rtarway, bug 4218977
24712 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24713 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24714 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24715 ,p_workflow_started OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24716 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24717 ,p_pass_entire_structure IN VARCHAR2 := 'N' -- Added for bug 3696234 : Bug 3627124
24718 ,p_update_mode IN VARCHAR2 := 'PA_UPD_WBS_ATTR' -- rtarway, for DHI ER, BUG 4413568 --bug 4534919
24719 )
24720 IS
24721
24722 l_api_name CONSTANT VARCHAR2(30):='Execute_update_project';
24723 l_return_status VARCHAR2(1) ;
24724
24725 BEGIN
24726
24727 SAVEPOINT execute_update_project_pub;
24728
24729 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
24730 p_api_version_number ,
24731 l_api_name ,
24732 G_PKG_NAME )
24733 THEN
24734
24735 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24736
24737 END IF;
24738
24739 -- Initialize the message table if requested.
24740
24741 IF FND_API.TO_BOOLEAN( p_init_msg_list )
24742 THEN
24743
24744 FND_MSG_PUB.initialize;
24745
24746 END IF;
24747
24748 p_return_status := FND_API.G_RET_STS_SUCCESS;
24749
24750 -- Begin code to fix Bug # 4314797.
24751
24752 -- In the publish workplan flow, we do not need to update key members so we can clear the global
24753 -- g_key_members_in_tbl table. Further, in the 'create project and publish workplan version' flow
24754 -- from MSP where the g_key_members_in_tbl would be populated during the create project flow
24755 -- we need to clear the g_key_members_in_tbl before calling the API: update_project() in the publish
24756 -- workplan flow to prevent errors.
24757
24758 if nvl(p_pm_product_code,'WORKPLAN') = 'WORKPLAN' then
24759
24760 g_key_members_in_tbl.delete;
24761
24762 end if;
24763
24764 -- End code to fix Bug # 4314797.
24765
24766
24767 Update_Project ( p_api_version_number => p_api_version_number,
24768 p_commit => FND_API.G_FALSE,
24769 p_return_status => l_return_status,
24770 p_msg_count => p_msg_count,
24771 p_msg_data => p_msg_data,
24772 p_workflow_started => p_workflow_started,
24773 p_pm_product_code => p_pm_product_code,
24774 p_op_validate_flag => p_op_validate_flag, --Added by rtarway 4218977
24775 p_project_in => g_project_in_rec,
24776 p_project_out => g_project_out_rec,
24777 p_key_members => g_key_members_in_tbl,
24778 p_class_categories => g_class_categories_in_tbl,
24779 p_tasks_in => g_tasks_in_tbl,
24780 p_tasks_out => g_tasks_out_tbl,
24781 p_org_roles => g_org_roles_in_tbl
24782 ,p_pass_entire_structure => p_pass_entire_structure -- Added for bug 3696234 : Bug 3627124
24783 --bug 3096203
24784 ,p_ext_attr_tbl_in => G_ext_attr_in_tbl
24785 --bug 3096203
24786 --FP M : deliverables
24787 ,p_deliverables_in => G_deliverables_in_tbl
24788 -- ,p_deliverables_out => G_deliverables_out_tbl
24789 ,p_deliverable_actions_in => G_deliverable_actions_in_tbl
24790 -- ,p_deliverable_actions_out => G_deliverable_actions_out_tbl
24791 ,p_update_mode => p_update_mode --DHI ER bug 4413568
24792 --FP M : deliverables
24793 );
24794
24795 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
24796 THEN
24797
24798 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24799
24800 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
24801 THEN
24802
24803 RAISE FND_API.G_EXC_ERROR;
24804 END IF;
24805
24806
24807 IF FND_API.to_boolean( p_commit )
24808 THEN
24809 COMMIT;
24810 END IF;
24811
24812
24813 EXCEPTION
24814
24815 WHEN FND_API.G_EXC_ERROR
24816 THEN
24817 ROLLBACK TO execute_update_project_pub;
24818
24819 p_return_status := FND_API.G_RET_STS_ERROR;
24820
24821 -- 4537865
24822 p_workflow_started := NULL ;
24823 -- 4537865
24824
24825 FND_MSG_PUB.Count_And_Get
24826 ( p_count => p_msg_count ,
24827 p_data => p_msg_data );
24828
24829 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24830 THEN
24831 ROLLBACK TO execute_update_project_pub;
24832
24833 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24834
24835 -- 4537865
24836 p_workflow_started := NULL ;
24837 -- 4537865
24838
24839 FND_MSG_PUB.Count_And_Get
24840 ( p_count => p_msg_count ,
24841 p_data => p_msg_data );
24842
24843 WHEN OTHERS THEN
24844
24845 ROLLBACK TO execute_update_project_pub;
24846
24847 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24848
24849 -- 4537865
24850 p_workflow_started := NULL ;
24851 -- 4537865
24852
24853 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
24854 THEN
24855
24856 FND_MSG_PUB.add_exc_msg
24857 ( p_pkg_name => G_PKG_NAME
24858 , p_procedure_name => l_api_name
24859 , p_error_text => SUBSTRB(SQLERRM, 1, 240) ); -- 4537865 Converted from SUBSTR to SUBSTRB
24860
24861
24862 FND_MSG_PUB.add;
24863 END IF;
24864
24865 FND_MSG_PUB.Count_And_Get
24866 ( p_count => p_msg_count ,
24867 p_data => p_msg_data );
24868
24869 END execute_update_project;
24870
24871 --------------------------------------------------------------------------------
24872 --Name: delete_project
24873 --Type: Procedure
24874 --Description: This procedure can be used to delete a project
24875 --
24876 --
24877 --Called subprograms:
24878 --
24879 --
24880 --
24881 --History:
24882 -- 19-AUG-1996 R. Krishnamurthy Created
24883 --
24884
24885 PROCEDURE delete_project
24886 ( p_api_version_number IN NUMBER
24887 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
24888 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24889 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24890 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24891 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24892 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24893 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24894 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24895 )
24896 IS
24897
24898 l_return_status VARCHAR2(1); --bug 2471668
24899 l_project_id NUMBER; --bug 2471668
24900
24901 BEGIN
24902
24903 -- 4537865 : Initialize Return status to success
24904 p_return_status := FND_API.G_RET_STS_SUCCESS;
24905
24906 --bug 2471668.
24907 --We need to call this API here toget the corrct project id. This is also
24908 --called from the private API. But I discussed with Sakthi and he is ok to call this
24909 --twice once here and second time in private API. The idea is to make the advanced security changes
24910 --only in public APIs.
24911
24912 PA_PROJECT_PVT.Convert_pm_projref_to_id
24913 ( p_pm_project_reference => p_pm_project_reference
24914 , p_pa_project_id => p_pa_project_id
24915 , p_out_project_id => l_project_id
24916 , p_return_status => l_return_status
24917 );
24918
24919
24920 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
24921
24922 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
24923 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
24924 RAISE FND_API.G_EXC_ERROR;
24925 END IF;
24926
24927 PA_INTERFACE_UTILS_PUB.G_PROJECt_ID := l_project_id; --bug 2471668 ( in the project context )
24928 --end of bug 2471668
24929
24930 pa_project_pvt.delete_project1
24931 (p_api_version_number => p_api_version_number
24932 ,p_commit => p_commit -- added for bug#16386039 --FND_API.G_FALSE--bug 3766967
24933 ,p_init_msg_list => p_init_msg_list
24934 ,p_msg_count => p_msg_count
24935 ,p_msg_data => p_msg_data
24936 ,p_return_status => p_return_status
24937 ,p_pm_product_code => p_pm_product_code
24938 ,p_pm_project_reference => p_pm_project_reference
24939 ,p_pa_project_id => p_pa_project_id);
24940
24941 EXCEPTION
24942 WHEN FND_API.G_EXC_ERROR
24943 THEN
24944 p_return_status := FND_API.G_RET_STS_ERROR;
24945 p_msg_count := FND_MSG_PUB.count_msg; -- 4537865
24946
24947 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
24948 THEN
24949 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24950 p_msg_count := FND_MSG_PUB.count_msg; -- 4537865
24951
24952 WHEN OTHERS THEN
24953 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
24954 p_msg_count := FND_MSG_PUB.count_msg; -- 4537865
24955
24956 END delete_project;
24957
24958 --------------------------------------------------------------------------------
24959 -- Name: Check_Delete_Task_OK
24960 -- Type: PL/SQL Procedure
24961 -- Decscription: This procedure returns 'Y' if it is OK to delete a task.
24962 -- Otherwise, it returns 'N'.
24963 --
24964 -- Called Subprograms: Convert_Pm_Projref_To_Id
24965 -- , Convert_Pm_Taskref_To_Id
24966 -- History: 15-AUG-96 Created jwhite
24967 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
24968 -- procedure.
24969 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
24970 -- 20-NOV-96 Update lwerker Changed handling of error messages
24971 -- 02-DEC-96 Update lwerker Removed Savepoint and Rollbacks
24972
24973 PROCEDURE Check_Delete_Task_OK
24974 ( p_api_version_number IN NUMBER
24975 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
24976 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24977 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
24978 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24979 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24980 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24981 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24982 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
24983 --Project Structure changes done for bug 2765115
24984 , p_structure_type IN VARCHAR2 := 'FINANCIAL'
24985 , p_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24986 --END Project Structure changes done for bug 2765115
24987 , p_delete_task_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
24988 )
24989 IS
24990 l_retrieve varchar2(1) ; -- 4096218 Issues found during Unit Testing
24991 BEGIN
24992
24993 -- 4537865 : Initialize return status to success
24994 p_return_status := FND_API.G_RET_STS_SUCCESS ;
24995
24996 --bug 2876703 --check_delete_task_ok
24997 IF p_structure_type = 'WORKPLAN' AND p_project_id IS NOT NULL AND p_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
24998 THEN
24999 IF PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_project_id ) = 'N' OR
25000 PA_PROJ_TASK_STRUC_PUB.IS_WP_SEPARATE_FROM_FN( p_project_id ) = 'N'
25001 THEN
25002 l_retrieve := 'Y' ;
25003 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
25004 THEN
25005 pa_interface_utils_pub.map_new_amg_msg
25006 ( p_old_message_code => 'PA_PS_WP_NOT_SEP_FN'
25007 ,p_msg_attribute => 'CHANGE'
25008 ,p_resize_flag => 'Y' -- 4096218 Changed from 'N' to 'Y'
25009 ,p_msg_context => 'GENERAL'
25010 ,p_attribute1 => ''
25011 ,p_attribute2 => ''
25012 ,p_attribute3 => ''
25013 ,p_attribute4 => ''
25014 ,p_attribute5 => '');
25015 END IF;
25016 RAISE FND_API.G_EXC_ERROR;
25017 END IF;
25018 END IF;
25019 --bug 2876703
25020 pa_project_check_pvt.Check_Delete_Task_OK_pvt
25021 (p_api_version_number => p_api_version_number
25022 ,p_init_msg_list => p_init_msg_list
25023 ,p_return_status => p_return_status
25024 ,p_msg_count => p_msg_count
25025 ,p_msg_data => p_msg_data
25026 ,p_project_id => p_project_id
25027 ,p_pm_project_reference => p_pm_project_reference
25028 ,p_task_id => p_task_id
25029 ,p_pm_task_reference => p_pm_task_reference
25030 --Project Structure changes done for bug 2765115
25031 ,p_structure_type => p_structure_type
25032 ,p_task_version_id => p_task_version_id
25033 --END Project Structure changes done for bug 2765115
25034 ,p_delete_task_ok_flag => p_delete_task_ok_flag);
25035
25036 --bug 2876703 Added ecxeption block to support the above code added for bug 2876703
25037 EXCEPTION
25038 WHEN FND_API.G_EXC_ERROR
25039 THEN
25040 p_return_status := FND_API.G_RET_STS_ERROR;
25041 IF l_retrieve = 'Y' THEN
25042 FND_MSG_PUB.Count_And_Get
25043 (p_encoded =>'F' , p_count => p_msg_count ,
25044 p_data => p_msg_data );
25045 END IF;
25046
25047 -- 4537865
25048 p_delete_task_ok_flag := NULL ;
25049 p_msg_count := FND_MSG_PUB.count_msg;
25050
25051 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
25052 THEN
25053
25054 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25055
25056 -- 4537865
25057 p_delete_task_ok_flag := NULL ;
25058
25059 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25060 THEN
25061 FND_MSG_PUB.add_exc_msg
25062 ( p_pkg_name => G_PKG_NAME
25063 , p_procedure_name => 'Check_Delete_Task_Ok');
25064 END IF;
25065
25066 FND_MSG_PUB.Count_And_Get
25067 (p_count => p_msg_count ,
25068 p_data => p_msg_data );
25069
25070 WHEN OTHERS THEN
25071 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25072
25073 -- 4537865
25074 p_delete_task_ok_flag := NULL ;
25075
25076 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25077 THEN
25078 FND_MSG_PUB.add_exc_msg
25079 ( p_pkg_name => G_PKG_NAME
25080 , p_procedure_name => 'Check_Delete_Task_Ok');
25081 END IF;
25082
25083 FND_MSG_PUB.Count_And_Get
25084 (p_count => p_msg_count ,
25085 p_data => p_msg_data );
25086
25087 --bug 2876703
25088 END Check_Delete_Task_Ok;
25089
25090
25091 --------------------------------------------------------------------------------
25092 -- Name: Check_Add_Subtask_OK
25093 -- Type: PL/SQL Procedure
25094 -- Decscription: This procedure returns 'Y' if it is OK to add subtask, 'N' otherwise.
25095 --
25096 -- Called Subprograms: Convert_Pm_Projref_To_Id
25097 -- , Convert_Pm_Taskref_To_Id
25098 -- History: 15-AUG-96 Created jwhite
25099 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
25100 -- procedure.
25101 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
25102 -- 20-NOV-96 Update lwerker Changed handling of error messages
25103 -- 02-DEC-96 Update lwerker Removed Savepoint and Rollbacks
25104 --
25105
25106 PROCEDURE Check_Add_Subtask_OK
25107 (p_api_version_number IN NUMBER
25108 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25109 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25110 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25111 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25112 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25113 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25114 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25115 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25116 , p_add_subtask_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25117 )
25118 IS
25119
25120 BEGIN
25121
25122 -- 4537865 : Initialize return status to success
25123 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25124
25125 pa_project_check_pvt.Check_Add_Subtask_OK_pvt
25126 (p_api_version_number => p_api_version_number
25127 ,p_init_msg_list => p_init_msg_list
25128 ,p_return_status => p_return_status
25129 ,p_msg_count => p_msg_count
25130 ,p_msg_data => p_msg_data
25131 ,p_project_id => p_project_id
25132 ,p_pm_project_reference => p_pm_project_reference
25133 ,p_task_id => p_task_id
25134 ,p_pm_task_reference => p_pm_task_reference
25135 ,p_add_subtask_ok_flag => p_add_subtask_ok_flag);
25136
25137 -- 4537865
25138 EXCEPTION
25139
25140 WHEN OTHERS THEN
25141 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25142
25143 p_add_subtask_ok_flag := NULL ;
25144
25145 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25146 THEN
25147 FND_MSG_PUB.add_exc_msg
25148 ( p_pkg_name => G_PKG_NAME
25149 , p_procedure_name => 'Check_Add_Subtask_Ok');
25150 END IF;
25151
25152 FND_MSG_PUB.Count_And_Get
25153 (p_count => p_msg_count ,
25154 p_data => p_msg_data );
25155
25156 END Check_Add_Subtask_Ok;
25157
25158
25159 --------------------------------------------------------------------------------
25160
25161 -- Name: Check_Unique_Task_Reference
25162 -- Type: PL/SQL Procedure
25163 -- Decscription: This procedure returns 'Y' if the task reference does not exist,
25164 -- 'N' otherwise.
25165 --
25166 -- Called Subprograms: Convert_Pm_Projref_To_Id
25167 --
25168 -- History: 15-AUG-96 Created jwhite
25169 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
25170 -- procedure.
25171 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
25172 -- 20-NOV-96 Update lwerker Added use of cursor and changed handling of error messages
25173 -- 02-DEC-96 Update lwerker Removed Savepoint and Rollbacks
25174 --
25175 PROCEDURE Check_Unique_Task_Reference
25176 (p_api_version_number IN NUMBER
25177 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25178 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25179 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25180 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25181 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25182 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25183 , p_pm_task_reference IN VARCHAR2
25184 , p_unique_task_ref_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25185 )
25186 IS
25187
25188 BEGIN
25189
25190 -- 4537865 : Initialize return status to success
25191 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25192
25193 pa_project_check_pvt.Check_Unique_Task_Ref_pvt
25194 (p_api_version_number => p_api_version_number
25195 ,p_init_msg_list => p_init_msg_list
25196 ,p_return_status => p_return_status
25197 ,p_msg_count => p_msg_count
25198 ,p_msg_data => p_msg_data
25199 ,p_project_id => p_project_id
25200 ,p_pm_project_reference => p_pm_project_reference
25201 ,p_pm_task_reference => p_pm_task_reference
25202 ,p_unique_task_ref_flag => p_unique_task_ref_flag);
25203
25204 -- 4537865
25205 EXCEPTION
25206
25207 WHEN OTHERS THEN
25208 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25209
25210 p_unique_task_ref_flag := NULL ;
25211
25212 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25213 THEN
25214 FND_MSG_PUB.add_exc_msg
25215 ( p_pkg_name => G_PKG_NAME
25216 , p_procedure_name => 'Check_Unique_Task_Reference');
25217 END IF;
25218
25219 FND_MSG_PUB.Count_And_Get
25220 (p_count => p_msg_count ,
25221 p_data => p_msg_data );
25222
25223 END Check_Unique_Task_Reference;
25224
25225
25226 --------------------------------------------------------------------------------
25227 -- Name: Check_Unique_Project_Reference
25228 -- Type: PL/SQL Procedure
25229 -- Decscription: This procedure returns 'Y' if the project reference does not exist
25230 -- , 'N' otherwise.
25231 --
25232 -- Called Subprograms: none.
25233 --
25234 -- History: 15-AUG-96 Created jwhite
25235 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
25236 -- procedure.
25237 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
25238 --
25239 -- 02-DEC-96 Update lwerker Added use of cursor and changed handling of error messages
25240 -- Removed Savepoint and Rollbacks
25241 --
25242 PROCEDURE Check_Unique_Project_Reference
25243 (p_api_version_number IN NUMBER
25244 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25245 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25246 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25247 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25248 , p_pm_project_reference IN VARCHAR2
25249 , p_unique_project_ref_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25250 )
25251 IS
25252
25253 BEGIN
25254
25255 -- 4537865 : Initialize return status to success
25256 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25257
25258 pa_project_check_pvt.Check_Unique_Project_Ref_pvt
25259 (p_api_version_number => p_api_version_number
25260 ,p_init_msg_list => p_init_msg_list
25261 ,p_return_status => p_return_status
25262 ,p_msg_count => p_msg_count
25263 ,p_msg_data => p_msg_data
25264 ,p_pm_project_reference => p_pm_project_reference
25265 ,p_unique_project_ref_flag => p_unique_project_ref_flag);
25266
25267 -- 4537865
25268 EXCEPTION
25269
25270 WHEN OTHERS THEN
25271 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25272
25273 p_unique_project_ref_flag := NULL ;
25274 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25275 THEN
25276 FND_MSG_PUB.add_exc_msg
25277 ( p_pkg_name => G_PKG_NAME
25278 , p_procedure_name => 'Check_Unique_Project_Reference');
25279 END IF;
25280
25281 FND_MSG_PUB.Count_And_Get
25282 (p_count => p_msg_count ,
25283 p_data => p_msg_data );
25284
25285 END Check_Unique_Project_Reference;
25286
25287 --------------------------------------------------------------------------------
25288 -- Name: Check_Delete_Project_OK
25289 -- Type: PL/SQL Procedure
25290 -- Decscription: This procedure returns 'Y' if the project can be deleted, 'N' otherwise.
25291 --
25292 -- Called Subprograms: Convert_Pm_Projref_To_Id
25293 --
25294 -- History: 15-AUG-96 Created jwhite
25295 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
25296 -- procedure.
25297 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
25298 -- 02-DEC-96 Update lwerker Changed handling of error messages
25299 -- Removed Savepoint and Rollbacks
25300 --
25301
25302 PROCEDURE Check_Delete_Project_OK
25303 (p_api_version_number IN NUMBER
25304 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25305 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25306 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25307 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25308 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25309 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25310 , p_delete_project_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25311 )
25312 IS
25313
25314 BEGIN
25315
25316 -- 4537865 : Initialize return status to success
25317 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25318
25319 pa_project_check_pvt.Check_Delete_Project_OK_pvt
25320 (p_api_version_number => p_api_version_number
25321 ,p_init_msg_list => p_init_msg_list
25322 ,p_return_status => p_return_status
25323 ,p_msg_count => p_msg_count
25324 ,p_msg_data => p_msg_data
25325 ,p_project_id => p_project_id
25326 ,p_pm_project_reference => p_pm_project_reference
25327 ,p_delete_project_ok_flag => p_delete_project_ok_flag);
25328
25329 -- 4537865
25330 EXCEPTION
25331
25332 WHEN OTHERS THEN
25333 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25334
25335 p_delete_project_ok_flag := NULL ;
25336 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25337 THEN
25338 FND_MSG_PUB.add_exc_msg
25339 ( p_pkg_name => G_PKG_NAME
25340 , p_procedure_name => 'Check_Delete_Project_OK');
25341 END IF;
25342
25343 FND_MSG_PUB.Count_And_Get
25344 (p_count => p_msg_count ,
25345 p_data => p_msg_data );
25346
25347 END Check_Delete_Project_Ok;
25348
25349 --------------------------------------------------------------------------------
25350 -- Name: Check_Change_Parent_OK
25351 -- Type: PL/SQL Procedure
25352 -- Decscription: This procedure returns 'Y' if the task can be moved to another parent; 'N' otherwise.
25353 --
25354 -- Called Subprograms: Convert_Pm_Projref_To_Id
25355 --
25356 -- History: 15-AUG-96 Created jwhite
25357 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
25358 -- procedure.
25359 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
25360 -- 02-DEC-96 Update lwerker Changed handling of return values.
25361 -- Removed Savepoint and Rollbacks
25362 --
25363 PROCEDURE Check_Change_Parent_OK
25364 (p_api_version_number IN NUMBER
25365 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25366 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25367 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25368 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25369 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25370 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25371 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25372 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25373 , p_new_parent_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25374 , p_pm_new_parent_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25375 , p_change_parent_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25376 )
25377 IS
25378
25379 BEGIN
25380
25381 -- 4537865 : Initialize return status to success
25382 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25383
25384 pa_project_check_pvt.Check_Change_Parent_OK_pvt
25385 (p_api_version_number => p_api_version_number
25386 ,p_init_msg_list => p_init_msg_list
25387 ,p_return_status => p_return_status
25388 ,p_msg_count => p_msg_count
25389 ,p_msg_data => p_msg_data
25390 ,p_project_id => p_project_id
25391 ,p_pm_project_reference => p_pm_project_reference
25392 ,p_task_id => p_task_id
25393 ,p_pm_task_reference => p_pm_task_reference
25394 ,p_new_parent_task_id => p_new_parent_task_id
25395 ,p_pm_new_parent_task_reference => p_pm_new_parent_task_reference
25396 ,p_change_parent_ok_flag => p_change_parent_ok_flag);
25397
25398 -- 4537865
25399 EXCEPTION
25400
25401 WHEN OTHERS THEN
25402 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25403
25404 p_change_parent_ok_flag := NULL ;
25405 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25406 THEN
25407 FND_MSG_PUB.add_exc_msg
25408 ( p_pkg_name => G_PKG_NAME
25409 , p_procedure_name => 'Check_Change_Parent_OK');
25410 END IF;
25411
25412 FND_MSG_PUB.Count_And_Get
25413 (p_count => p_msg_count ,
25414 p_data => p_msg_data );
25415
25416 END Check_Change_Parent_OK;
25417
25418 --------------------------------------------------------------------------------
25419 -- Name: Check_Change_Project_Org_OK
25420 -- Type: PL/SQL Procedure
25421 -- Decscription: This procedure returns 'Y' if the project organization can be changed, 'N' otherwise.
25422 --
25423 -- Called Subprograms: Convert_Pm_Projref_To_Id
25424 --
25425 -- History: 15-AUG-96 Created jwhite
25426 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
25427 -- procedure.
25428 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
25429 -- 02-DEC-96 Update lwerker Changed error handling
25430 -- Removed Savepoint and Rollbacks
25431 --
25432
25433 PROCEDURE Check_Change_Project_Org_OK
25434 (p_api_version_number IN NUMBER
25435 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25436 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25437 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25438 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25439 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25440 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25441 , p_change_project_org_ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25442 )
25443 IS
25444
25445 BEGIN
25446
25447 -- 4537865 : Initialize return status to success
25448 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25449
25450 pa_project_check_pvt.Check_Change_Proj_Org_OK_pvt
25451 (p_api_version_number => p_api_version_number
25452 ,p_init_msg_list => p_init_msg_list
25453 ,p_return_status => p_return_status
25454 ,p_msg_count => p_msg_count
25455 ,p_msg_data => p_msg_data
25456 ,p_project_id => p_project_id
25457 ,p_pm_project_reference => p_pm_project_reference
25458 ,p_change_project_org_ok_flag => p_change_project_org_ok_flag);
25459
25460 -- 4537865
25461 EXCEPTION
25462
25463 WHEN OTHERS THEN
25464 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25465
25466 p_change_project_org_ok_flag := NULL ;
25467 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25468 THEN
25469 FND_MSG_PUB.add_exc_msg
25470 ( p_pkg_name => G_PKG_NAME
25471 , p_procedure_name => 'Check_Change_Project_Org_OK');
25472 END IF;
25473
25474 FND_MSG_PUB.Count_And_Get
25475 (p_count => p_msg_count ,
25476 p_data => p_msg_data );
25477
25478 END Check_Change_Project_Org_Ok;
25479
25480 --------------------------------------------------------------------------------
25481 -- Name: Check_Unique_Task_Number
25482 -- Type: PL/SQL Procedure
25483 -- Decscription: This procedure returns 'Y' if the task number does NOT already exist; 'N' otherwise.
25484 --
25485 -- Called Subprograms: Convert_Pm_Projref_To_Id
25486 --
25487 -- History: 15-AUG-96 Created jwhite
25488 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
25489 -- procedure.
25490 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
25491 -- 02-DEC-96 Update lwerker Changed handling of return values
25492 -- Removed Savepoint and Rollbacks
25493 --
25494
25495 PROCEDURE Check_Unique_Task_Number
25496 (p_api_version_number IN NUMBER
25497 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25498 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25499 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25500 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25501 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25502 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25503 , p_task_number IN VARCHAR2
25504 , p_unique_task_number_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25505 )
25506 IS
25507
25508 BEGIN
25509
25510 -- 4537865 : Initialize return status to success
25511 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25512
25513 pa_project_check_pvt.Check_Unique_Task_Number_pvt
25514 (p_api_version_number => p_api_version_number
25515 ,p_init_msg_list => p_init_msg_list
25516 ,p_return_status => p_return_status
25517 ,p_msg_count => p_msg_count
25518 ,p_msg_data => p_msg_data
25519 ,p_project_id => p_project_id
25520 ,p_pm_project_reference => p_pm_project_reference
25521 ,p_task_number => p_task_number
25522 ,p_unique_task_number_flag => p_unique_task_number_flag);
25523
25524 -- 4537865
25525 EXCEPTION
25526
25527 WHEN OTHERS THEN
25528 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25529
25530 p_unique_task_number_flag := NULL ;
25531 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25532 THEN
25533 FND_MSG_PUB.add_exc_msg
25534 ( p_pkg_name => G_PKG_NAME
25535 , p_procedure_name => 'Check_Unique_Task_Number');
25536 END IF;
25537
25538 FND_MSG_PUB.Count_And_Get
25539 (p_count => p_msg_count ,
25540 p_data => p_msg_data );
25541
25542 END Check_Unique_Task_Number;
25543
25544 --------------------------------------------------------------------------------
25545 -- Name: Check_Task_Number_Change_Ok
25546 -- Type: PL/SQL Procedure
25547 -- Decscription: This procedure returns 'Y' if it is OK to change a LOWEST task.
25548 -- Otherwise, it returns 'N'.
25549 --
25550 -- Called Subprograms: Convert_Pm_Projref_To_Id
25551 -- , Convert_Pm_Taskref_To_Id
25552 -- History: 15-AUG-96 Created jwhite
25553 -- 23-AUG-96 Update jwhite replaced local convert procedure with library
25554 -- procedure.
25555 -- 26-AUG-96 Update jwhite Applied latest messaging standards.
25556 -- 02-DEC-96 Update lwerker Changed the way return values are handled
25557 -- Removed Savepoint and Rollbacks
25558
25559 PROCEDURE Check_Task_Number_Change_Ok
25560 ( p_api_version_number IN NUMBER
25561 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25562 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25563 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25564 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25565 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25566 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25567 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25568 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25569 , p_task_number_change_Ok_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25570 )
25571 IS
25572
25573 BEGIN
25574
25575 -- 4537865 : Initialize return status to success
25576 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25577
25578 pa_project_check_pvt.Check_Task_Numb_Change_Ok_Pvt
25579 (p_api_version_number => p_api_version_number
25580 ,p_init_msg_list => p_init_msg_list
25581 ,p_return_status => p_return_status
25582 ,p_msg_count => p_msg_count
25583 ,p_msg_data => p_msg_data
25584 ,p_project_id => p_project_id
25585 ,p_pm_project_reference => p_pm_project_reference
25586 ,p_task_id => p_task_id
25587 ,p_pm_task_reference => p_pm_task_reference
25588 ,p_task_number_change_Ok_flag => p_task_number_change_Ok_flag);
25589
25590 -- 4537865
25591 EXCEPTION
25592
25593 WHEN OTHERS THEN
25594 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25595
25596 p_task_number_change_Ok_flag := NULL ;
25597 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25598 THEN
25599 FND_MSG_PUB.add_exc_msg
25600 ( p_pkg_name => G_PKG_NAME
25601 , p_procedure_name => 'Check_Task_Number_Change_Ok');
25602 END IF;
25603
25604 FND_MSG_PUB.Count_And_Get
25605 (p_count => p_msg_count ,
25606 p_data => p_msg_data );
25607
25608 END Check_Task_Number_Change_Ok;
25609
25610 --------------------------------------------------------------------------------
25611 -- Name: approve_project
25612 -- Type: PL/SQL Procedure
25613 -- Decscription: This procedure will set the project status to approved.
25614 --
25615 -- Called Subprograms:
25616 --
25617 -- History: 27-FEB-97 L. de Werker Created
25618 --
25619 --
25620 PROCEDURE approve_project
25621 ( p_api_version_number IN NUMBER
25622 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
25623 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25624 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
25625 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25626 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25627 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25628 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25629 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25630 )
25631 IS
25632
25633 BEGIN
25634
25635 -- 4537865 : Initialize return status to success
25636 p_return_status := FND_API.G_RET_STS_SUCCESS ;
25637
25638 pa_project_pvt.approve_project1
25639 ( p_api_version_number => p_api_version_number
25640 , p_commit => FND_API.G_FALSE--bug 3766967
25641 , p_init_msg_list => p_init_msg_list
25642 , p_msg_count => p_msg_count
25643 , p_msg_data => p_msg_data
25644 , p_return_status => p_return_status
25645 , p_pm_product_code => p_pm_product_code
25646 , p_pm_project_reference => p_pm_project_reference
25647 , p_pa_project_id => p_pa_project_id);
25648
25649 -- 4537865
25650 EXCEPTION
25651
25652 WHEN OTHERS THEN
25653 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
25654
25655 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
25656 THEN
25657 FND_MSG_PUB.add_exc_msg
25658 ( p_pkg_name => G_PKG_NAME
25659 , p_procedure_name => 'approve_project');
25660 END IF;
25661
25662 FND_MSG_PUB.Count_And_Get
25663 (p_count => p_msg_count ,
25664 p_data => p_msg_data );
25665
25666 END approve_project;
25667
25668 --------------------------------------------------------------------------------
25669 -- Name: load_tasks
25670 -- Type: PL/SQL Procedure
25671 -- Decscription: This is a wrapper API for the load_task procedure.
25672 --
25673 -- Called Subprograms: load_task
25674 --
25675 -- History: 05-JUN-02 hyau Created
25676 -- 22-JAN-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to add parameters: predecessor_task_reference_id,
25677 -- dependency_type and lag days to tasks and create dependencies.
25678 -- 10-FEB-2004 Rakesh Raghavan - Modifications for FP-M Bug # 3301192 to replace parameters: predecessor_task_reference_id,
25679 -- dependency_type and lag days with parameters: pred_string and pred_delimiter.
25680 --
25681 --
25682 -- 01-MAR-2004 Rakesh Raghavan Copied Venkat's FP-M changes from load_task API to load_tasks API.
25683 -- 05-APR-2004 Rakesh Raghavan Progress Management Changes. Bug # 3420093.
25684 -- 29-NOV-2004 djoseph Bug 4024659: Changed the function substr to substrb for l_task_name and l_long_task_name.
25685 -- Changes tagged by bug number.
25686
25687 PROCEDURE load_tasks
25688 (
25689 p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25690 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
25691 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
25692 ,p_pm_task_reference IN PA_VC_1000_150
25693 ,p_pa_task_id IN PA_NUM_1000_NUM
25694 ,p_task_name IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --bug 6193314 .Modified PA_VC_1000_150
25695 ,p_long_task_name IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25696 ,p_pa_task_number IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25697 ,p_task_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25698 ,p_task_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25699 ,p_task_completion_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25700 ,p_pm_parent_task_reference IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25701 ,p_pa_parent_task_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25702 ,p_address_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25703 ,p_carrying_out_organization_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25704 ,p_service_type_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25705 ,p_task_manager_person_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25706 ,p_billable_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25707 ,p_chargeable_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25708 ,p_ready_to_bill_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25709 ,p_ready_to_distribute_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25710 ,p_limit_to_txn_controls_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25711 ,p_labor_bill_rate_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25712 ,p_labor_std_bill_rate_schdl IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25713 ,p_labor_schedule_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25714 ,p_labor_schedule_discount IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25715 ,p_nl_bill_rate_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25716 ,p_nl_std_bill_rate_schdl IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25717 ,p_nl_schedule_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25718 ,p_nl_schedule_discount IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25719 ,p_labor_cost_multiplier_name IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25720 ,p_cost_ind_rate_sch_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25721 ,p_rev_ind_rate_sch_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25722 ,p_inv_ind_rate_sch_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25723 ,p_cost_ind_sch_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25724 ,p_rev_ind_sch_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25725 ,p_inv_ind_sch_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25726 ,p_labor_sch_type IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25727 ,p_nl_sch_type IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25728 ,p_actual_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25729 ,p_actual_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25730 ,p_early_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25731 ,p_early_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25732 ,p_late_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25733 ,p_late_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25734 ,p_scheduled_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25735 ,p_scheduled_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25736 ,p_attribute_category IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25737 ,p_attribute1 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25738 ,p_attribute2 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25739 ,p_attribute3 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25740 ,p_attribute4 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25741 ,p_attribute5 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25742 ,p_attribute6 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25743 ,p_attribute7 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25744 ,p_attribute8 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25745 ,p_attribute9 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25746 ,p_attribute10 IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25747 ,p_allow_cross_charge_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25748 ,p_project_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25749 ,p_project_rate_type IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25750 ,p_cc_process_labor_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25751 ,p_labor_tp_schedule_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25752 ,p_labor_tp_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25753 ,p_cc_process_nl_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25754 ,p_nl_tp_schedule_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25755 ,p_nl_tp_fixed_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25756 ,p_receive_project_invoice_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25757 ,p_work_type_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25758 ,p_emp_bill_rate_schedule_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25759 ,p_job_bill_rate_schedule_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25760 --Sakthi MCB
25761 ,p_non_lab_std_bill_rt_sch_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25762 ,p_taskfunc_cost_rate_type IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25763 ,p_taskfunc_cost_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25764 --Sakthi MCB
25765 ,p_display_sequence IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25766 ,p_wbs_level IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25767 ,p_milestone IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25768 ,p_duration IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25769 ,p_duration_unit IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25770 ,p_login_user_name IN PA_VC_1000_150:= PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25771 ,p_critical_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25772 ,p_sub_project_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25773 ,p_progress_status_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25774 ,p_progress_comments IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25775 ,p_progress_asof_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25776 ,p_progress_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25777 ,p_predecessors IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25778 ,p_priority_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25779 ,p_wbs_number IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25780 ,p_estimated_start_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25781 ,p_estimated_finish_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25782 ,p_estimate_to_complete IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25783 ,p_language IN VARCHAR2 default 'US'
25784 ,p_delimiter IN VARCHAR2 default ','
25785 ,p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25786 -- ,p_calling_mode IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25787 --Margaret bug 2683364
25788 ,P_OBLIGATION_START_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25789 ,P_OBLIGATION_FINISH_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25790 ,P_BASELINE_START_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25791 ,P_BASELINE_FINISH_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25792 ,P_CLOSED_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25793 ,P_WQ_UOM_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25794 ,P_WQ_ITEM_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25795 ,P_STATUS_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25796 ,P_WF_STATUS_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25797 ,P_PM_SOURCE_CODE IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25798 ,P_INC_PROJ_PROGRESS_FLAG IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25799 ,P_LINK_TASK_FLAG IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25800 ,P_CALENDAR_ID IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25801 ,P_PLANNED_EFFORT IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25802 ,P_PLANNED_WORK_QUANTITY IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25803 ,P_TASK_TYPE IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25804 --Margaret end bug 2683364
25805 ,p_labor_disc_reason_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25806 ,p_non_labor_disc_reason_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25807 --PA L changes -- bug 2872708 --load_tasks
25808 ,p_retirement_cost_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25809 ,p_cint_eligible_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25810 ,p_cint_stop_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25811 --end PA L changes -- bug 2872708
25812 -- FP-M Bug # 3301192
25813 ,p_pred_string IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25814 -- ,p_pred_delimiter IN PA_VC_1000_10 := PA_VC_1000_10(',')
25815 ,p_pred_delimiter IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25816 -- FP M : Deliverable
25817 -- ,p_deliverable IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25818 ,p_deliverable IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --SMUKKA
25819 ,p_deliverable_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) -- 3661788 Added IN Parameter
25820 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25821 -- FP M changes begin (venkat)
25822 ,p_base_percent_comp_deriv_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25823 ,p_sch_tool_tsk_type_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25824 ,p_constraint_type_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25825 ,p_constraint_date IN PA_DATE_1000_DATE:= PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
25826 ,p_free_slack IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25827 ,p_total_slack IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25828 ,p_effort_driven_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25829 ,p_level_assignments_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25830 ,p_invoice_method IN PA_VC_1000_4000 := PA_VC_1000_4000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25831 ,p_customer_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25832 ,p_gen_etc_source_code IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
25833 -- FP M changes end (venkat)
25834 -- FP M changes start (Mapping )
25835 -- ,p_financial_task_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25836 -- ,p_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
25837 -- ,p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
25838 -- FP M changes end (Mapping )
25839 ,p_financial_task_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --SMukka
25840 ,p_mapped_task_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) --SMukka
25841 ,p_mapped_task_reference IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) --SMukka
25842
25843 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
25844 ,p_ext_act_duration IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25845 ,p_ext_remain_duration IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25846 ,p_ext_sch_duration IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25847 -- (end venkat) new params for bug #3450684 -------------------------------------------------
25848
25849 -- Progress Management Changes. Bug # 3420093.
25850 ,p_etc_effort IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25851 ,p_percent_complete IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
25852 -- Progress Management Changes. Bug # 3420093.
25853
25854 )
25855 IS
25856 l_api_name CONSTANT VARCHAR2(30):='Load_Tasks';
25857 l_return_status VARCHAR2(1):= 'S';
25858 l_responsibility_id NUMBER;
25859
25860
25861 --hyau added for debugging unhandled exception stage
25862 l_stage VARCHAR2(250);
25863 l_counter NUMBER;
25864
25865 l_task_name_flag VARCHAR2(1) := 'Y';
25866 l_long_task_name_flag VARCHAR2(1) := 'Y';
25867 l_pa_task_number_flag VARCHAR2(1) := 'Y';
25868 l_task_description_flag VARCHAR2(1) := 'Y';
25869 l_task_start_date_flag VARCHAR2(1) := 'Y';
25870 l_task_completion_date_flag VARCHAR2(1) := 'Y';
25871 l_pm_parent_task_ref_flag VARCHAR2(1) := 'Y';
25872 l_pa_parent_task_id_flag VARCHAR2(1) := 'Y';
25873 l_address_id_flag VARCHAR2(1) := 'Y';
25874 l_carrying_out_org_id_flag VARCHAR2(1) := 'Y';
25875 l_service_type_code_flag VARCHAR2(1) := 'Y';
25876 l_task_manager_person_id_flag VARCHAR2(1) := 'Y';
25877 l_billable_flag_flag VARCHAR2(1) := 'Y';
25878 l_chargeable_flag_flag VARCHAR2(1) := 'Y';
25879 l_ready_to_bill_flag_flag VARCHAR2(1) := 'Y';
25880 l_ready_to_dist_flag_flag VARCHAR2(1) := 'Y';
25881 l_limit_to_txn_cnt_flag_flag VARCHAR2(1) := 'Y';
25882 l_labor_bill_rate_org_id_flag VARCHAR2(1) := 'Y';
25883 l_labor_std_bill_rate_flag VARCHAR2(1) := 'Y';
25884 l_labor_schd_fixed_date_flag VARCHAR2(1) := 'Y';
25885 l_labor_schd_discount_flag VARCHAR2(1) := 'Y';
25886 l_nl_bill_rate_org_id_flag VARCHAR2(1) := 'Y';
25887 l_nl_std_bill_rate_schdl_flag VARCHAR2(1) := 'Y';
25888 l_nl_schedule_fixed_date_flag VARCHAR2(1) := 'Y';
25889 l_nl_schedule_discount_flag VARCHAR2(1) := 'Y';
25890 l_labor_cost_mult_name_flag VARCHAR2(1) := 'Y';
25891 l_cost_ind_rate_sch_id_flag VARCHAR2(1) := 'Y';
25892 l_rev_ind_rate_sch_id_flag VARCHAR2(1) := 'Y';
25893 l_inv_ind_rate_sch_id_flag VARCHAR2(1) := 'Y';
25894 l_cost_ind_sch_fixed_date_flag VARCHAR2(1) := 'Y';
25895 l_rev_ind_sch_fixed_date_flag VARCHAR2(1) := 'Y';
25896 l_inv_ind_sch_fixed_date_flag VARCHAR2(1) := 'Y';
25897 l_labor_sch_type_flag VARCHAR2(1) := 'Y';
25898 l_nl_sch_type_flag VARCHAR2(1) := 'Y';
25899 l_actual_start_date_flag VARCHAR2(1) := 'Y';
25900 l_actual_finish_date_flag VARCHAR2(1) := 'Y';
25901 l_early_start_date_flag VARCHAR2(1) := 'Y';
25902 l_early_finish_date_flag VARCHAR2(1) := 'Y';
25903 l_late_start_date_flag VARCHAR2(1) := 'Y';
25904 l_late_finish_date_flag VARCHAR2(1) := 'Y';
25905 l_scheduled_start_date_flag VARCHAR2(1) := 'Y';
25906 l_scheduled_finish_date_flag VARCHAR2(1) := 'Y';
25907 l_attribute_category_flag VARCHAR2(1) := 'Y';
25908 l_attribute1_flag VARCHAR2(1) := 'Y';
25909 l_attribute2_flag VARCHAR2(1) := 'Y';
25910 l_attribute3_flag VARCHAR2(1) := 'Y';
25911 l_attribute4_flag VARCHAR2(1) := 'Y';
25912 l_attribute5_flag VARCHAR2(1) := 'Y';
25913 l_attribute6_flag VARCHAR2(1) := 'Y';
25914 l_attribute7_flag VARCHAR2(1) := 'Y';
25915 l_attribute8_flag VARCHAR2(1) := 'Y';
25916 l_attribute9_flag VARCHAR2(1) := 'Y';
25917 l_attribute10_flag VARCHAR2(1) := 'Y';
25918 l_allow_cross_charge_flag_flag VARCHAR2(1) := 'Y';
25919 l_project_rate_date_flag VARCHAR2(1) := 'Y';
25920 l_project_rate_type_flag VARCHAR2(1) := 'Y';
25921 l_cc_process_labor_flag_flag VARCHAR2(1) := 'Y';
25922 l_labor_tp_schedule_id_flag VARCHAR2(1) := 'Y';
25923 l_labor_tp_fixed_date_flag VARCHAR2(1) := 'Y';
25924 l_cc_process_nl_flag_flag VARCHAR2(1) := 'Y';
25925 l_nl_tp_schedule_id_flag VARCHAR2(1) := 'Y';
25926 l_nl_tp_fixed_date_flag VARCHAR2(1) := 'Y';
25927 l_receive_proj_inv_flag_flag VARCHAR2(1) := 'Y';
25928 l_work_type_id_flag VARCHAR2(1) := 'Y';
25929 l_emp_bill_rate_schd_id_flag VARCHAR2(1) := 'Y';
25930 l_job_bill_rate_schd_id_flag VARCHAR2(1) := 'Y';
25931 l_non_lab_std_bill_rt_sch_flag VARCHAR2(1) := 'Y';
25932 l_taskfunc_cost_rate_type_flag VARCHAR2(1) := 'Y';
25933 l_taskfunc_cost_rate_date_flag VARCHAR2(1) := 'Y';
25934 l_display_sequence_flag VARCHAR2(1) := 'Y';
25935 l_wbs_level_flag VARCHAR2(1) := 'Y';
25936 --bug 2683364
25937 l_obligation_start_date_flag VARCHAR2(1) := 'Y';
25938 l_obligation_finish_date_flag VARCHAR2(1) := 'Y';
25939 l_baseline_start_date_flag VARCHAR2(1) := 'Y';
25940 l_baseline_finish_date_flag VARCHAR2(1) := 'Y';
25941 l_closed_date_flag VARCHAR2(1) := 'Y';
25942 l_wq_uom_code_flag VARCHAR2(1) := 'Y';
25943 l_wq_item_code_flag VARCHAR2(1) := 'Y';
25944 l_status_code_flag VARCHAR2(1) := 'Y';
25945 l_wf_status_code_flag VARCHAR2(1) := 'Y';
25946 l_pm_source_code_flag VARCHAR2(1) := 'Y';
25947 l_inc_proj_progress_flag_flag VARCHAR2(1) := 'Y';
25948 l_link_task_flag_flag VARCHAR2(1) := 'Y';
25949 l_calendar_id_flag VARCHAR2(1) := 'Y';
25950 l_planned_effort_flag VARCHAR2(1) := 'Y';
25951 l_planned_work_quantity_flag VARCHAR2(1) := 'Y';
25952 l_task_type_flag VARCHAR2(1) := 'Y';
25953
25954 --bug 2744729, 2740565
25955 l_estimated_start_date_flag VARCHAR2(1) := 'Y';
25956 l_estimated_finish_date_flag VARCHAR2(1) := 'Y';
25957 l_milestone_flag_flag VARCHAR2(1) := 'Y';
25958 l_critical_flag_flag VARCHAR2(1) := 'Y';
25959 l_priority_code_flag VARCHAR2(1) := 'Y';
25960 --bug 2744729, 2740565
25961
25962 l_labor_disc_reason_code_flag VARCHAR2(1) := 'Y';
25963 l_nl_disc_reason_code_flag VARCHAR2(1) := 'Y';
25964
25965 --bug 2872708
25966 l_retirement_cost_flag_flag VARCHAR2(1) := 'Y';
25967 l_cint_eligible_flag_flag VARCHAR2(1) := 'Y';
25968 l_cint_stop_date_flag VARCHAR2(1) := 'Y';
25969 --bug 2872708
25970
25971 -- FP-M Bug # 3301192
25972 l_pred_string_flag VARCHAR2(1) := 'Y';
25973 l_pred_delimiter_flag VARCHAR2(1) := 'Y';
25974
25975 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
25976 -- FP M changes begin (venkat)
25977 l_base_prct_comp_drv_code_flag VARCHAR2(1) := 'Y';
25978 l_sch_tool_tsk_type_code_flag VARCHAR2(1) := 'Y';
25979 l_constraint_type_code_flag VARCHAR2(1) := 'Y';
25980 l_constraint_date_flag VARCHAR2(1) := 'Y';
25981 l_free_slack_flag VARCHAR2(1) := 'Y';
25982 l_total_slack_flag VARCHAR2(1) := 'Y';
25983 l_effort_driven_flag_flag VARCHAR2(1) := 'Y';
25984 l_level_assignments_flag_flag VARCHAR2(1) := 'Y';
25985 l_invoice_method_flag VARCHAR2(1) := 'Y';
25986 l_customer_id_flag VARCHAR2(1) := 'Y';
25987 l_gen_etc_source_code_flag VARCHAR2(1) := 'Y';
25988 -- FP M changes end (venkat)
25989
25990 -- (begin venkat) new params for bug #3450684 -------------
25991 l_ext_act_duration_flag VARCHAR2(1) := 'Y';
25992 l_ext_remain_duration_flag VARCHAR2(1) := 'Y';
25993 l_ext_sch_duration_flag VARCHAR2(1) := 'Y';
25994 -- (end venkat) new params for bug #3450684 --------------
25995 --SMukka
25996 l_financial_task_flag VARCHAR2(1) := 'Y';
25997 l_mapped_task_id_flag VARCHAR2(1) := 'Y';
25998 l_mapped_task_reference_flag VARCHAR2(1) := 'Y';
25999 l_deliverable_flag VARCHAR2(1) := 'Y';
26000
26001 -- Progress Management Changes. Bug # 3420093.
26002 l_etc_effort_flag VARCHAR2(1) := 'Y';
26003 l_percent_complete_flag VARCHAR2(1) := 'Y';
26004 -- Progress Management Changes. Bug # 3420093.
26005
26006 -- Bug 6193314 .
26007 l_task_name VARCHAR2(240) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26008 l_long_task_name VARCHAR2(240) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26009 l_pa_task_number VARCHAR2(100) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26010 l_task_description VARCHAR2(250) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26011 l_task_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26012 l_task_completion_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26013 l_pm_parent_task_reference VARCHAR2(25) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26014 l_pa_parent_task_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26015 l_address_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26016 l_carrying_out_organization_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26017 l_service_type_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26018 l_task_manager_person_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26019 l_billable_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26020 l_chargeable_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26021 l_ready_to_bill_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26022 l_ready_to_distribute_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26023 l_limit_to_txn_controls_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26024 l_labor_bill_rate_org_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26025 l_labor_std_bill_rate_schdl VARCHAR2(20) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26026 l_labor_schedule_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26027 l_labor_schedule_discount NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26028 l_nl_bill_rate_org_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26029 l_nl_std_bill_rate_schdl VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26030 l_nl_schedule_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26031 l_nl_schedule_discount NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26032 l_labor_cost_multiplier_name VARCHAR2(20) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26033 l_cost_ind_rate_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26034 l_rev_ind_rate_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26035 l_inv_ind_rate_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26036 l_cost_ind_sch_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26037 l_rev_ind_sch_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26038 l_inv_ind_sch_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26039 l_labor_sch_type VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26040 l_nl_sch_type VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26041 l_actual_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26042 l_actual_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26043 l_early_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26044 l_early_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26045 l_late_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26046 l_late_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26047 l_scheduled_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26048 l_scheduled_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26049 l_attribute_category VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26050 l_attribute1 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26051 l_attribute2 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26052 l_attribute3 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26053 l_attribute4 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26054 l_attribute5 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26055 l_attribute6 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26056 l_attribute7 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26057 l_attribute8 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26058 l_attribute9 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26059 l_attribute10 VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26060 l_allow_cross_charge_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26061 l_project_rate_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26062 l_project_rate_type VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26063 l_cc_process_labor_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26064 l_labor_tp_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26065 l_labor_tp_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26066 l_cc_process_nl_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26067 l_nl_tp_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26068 l_nl_tp_fixed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26069 l_receive_project_invoice_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26070 l_work_type_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26071 l_emp_bill_rate_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26072 l_job_bill_rate_schedule_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26073 l_non_lab_std_bill_rt_sch_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26074 l_taskfunc_cost_rate_type VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26075 l_taskfunc_cost_rate_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26076 l_display_sequence NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26077 l_wbs_level NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26078
26079 l_obligation_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26080 l_obligation_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26081 l_baseline_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26082 l_baseline_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26083 l_closed_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26084 l_wq_uom_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26085 l_wq_item_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26086 l_status_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26087 l_wf_status_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26088 l_pm_source_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26089 l_inc_proj_progress_flag VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26090 l_link_task_flag VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26091 l_calendar_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26092 l_planned_effort NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26093 l_planned_work_quantity NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26094 l_task_type NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26095
26096 --bug 2744729, 2740565
26097 l_estimated_start_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26098 l_estimated_finish_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26099 l_priority_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26100 l_milestone_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26101 l_critical_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26102 --bug 2744729, 2740565
26103
26104 l_labor_disc_reason_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26105 l_non_labor_disc_reason_code VARCHAR2(30) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26106
26107 --bug 2872708
26108 l_retirement_cost_flag VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26109 l_cint_eligible_flag VARCHAR2(10) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ;
26110 l_cint_stop_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26111 --bug 2872708
26112
26113 -- FP-M Bug # 3301192
26114 l_pred_string VARCHAR2(4000) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26115 l_pred_delimiter VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26116
26117 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
26118 -- FP M changes begin (venkat)
26119 l_base_percent_comp_deriv_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26120 l_sch_tool_tsk_type_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26121 l_constraint_type_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26122 l_constraint_date DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26123 l_free_slack NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26124 l_total_slack NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26125 l_effort_driven_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26126 l_level_assignments_flag VARCHAR2(1) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26127 l_invoice_method VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26128 l_customer_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26129 l_gen_etc_source_code VARCHAR2(150) := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26130 -- FP M changes end (venkat)
26131 -- (Begin venkat) Bug #3450684 ---------------------------------------------------
26132 l_ext_act_duration NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26133 l_ext_remain_duration NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26134 l_ext_sch_duration NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26135 -- (End venkat) Bug #3450684 ---------------------------------------------------
26136 --SMUKKA
26137 l_financial_task_fl VARCHAR2(1):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26138 l_mapped_task_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26139 l_mapped_task_reference VARCHAR2(150):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26140 l_deliverable VARCHAR2(4000):= PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26141 l_deliverable_id NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM; -- 3661788 Added local variable
26142
26143 -- Progress Management Changes. Bug # 3420093.
26144 l_etc_effort NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26145 l_percent_complete NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26146 -- Progress Management Changes. Bug # 3420093.
26147
26148 BEGIN
26149
26150 -- 4537865 : Initialize return status to success
26151 p_return_status := FND_API.G_RET_STS_SUCCESS ;
26152
26153 -- Transferring all array variable to Global plsql table
26154 if (G_tasks_tbl_count = 0) then
26155 G_tasks_tbl_count := 1;
26156 end if;
26157
26158 l_stage := '1';
26159
26160 -- hyau validating what parameters are passed in.
26161 if p_task_name.count = 1 and p_task_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26162 l_task_name_flag := 'N';
26163 end if;
26164
26165 if p_long_task_name.count = 1 and p_long_task_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26166 l_long_task_name_flag := 'N';
26167 end if;
26168
26169 if p_pa_task_number.count = 1 and p_pa_task_number(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26170 l_pa_task_number_flag := 'N';
26171 end if;
26172
26173 if p_task_description.count = 1 and p_task_description(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26174 l_task_description_flag := 'N';
26175 end if;
26176
26177 if p_task_start_date.count = 1 and p_task_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26178 l_task_start_date_flag := 'N';
26179 end if;
26180
26181 if p_task_completion_date.count = 1 and p_task_completion_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26182 l_task_completion_date_flag := 'N';
26183 end if;
26184
26185 if p_pm_parent_task_reference.count = 1 and p_pm_parent_task_reference(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26186 l_pm_parent_task_ref_flag := 'N';
26187 end if;
26188
26189 if p_pa_parent_task_id.count = 1 and p_pa_parent_task_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26190 l_pa_parent_task_id_flag := 'N';
26191 end if;
26192
26193 if p_address_id.count = 1 and p_address_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26194 l_address_id_flag := 'N';
26195 end if;
26196
26197 if p_carrying_out_organization_id.count = 1 and p_carrying_out_organization_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26198 l_carrying_out_org_id_flag := 'N';
26199 end if;
26200
26201 if p_service_type_code.count = 1 and p_service_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26202 l_service_type_code_flag := 'N';
26203 end if;
26204
26205 if p_task_manager_person_id.count = 1 and p_task_manager_person_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26206 l_task_manager_person_id_flag := 'N';
26207 end if;
26208
26209 if p_billable_flag.count = 1 and p_billable_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26210 l_billable_flag_flag := 'N';
26211 end if;
26212
26213 if p_chargeable_flag.count = 1 and p_chargeable_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26214 l_chargeable_flag_flag := 'N';
26215 end if;
26216
26217 if p_ready_to_bill_flag.count = 1 and p_ready_to_bill_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26218 l_ready_to_bill_flag_flag := 'N';
26219 end if;
26220
26221 if p_ready_to_distribute_flag.count = 1 and p_ready_to_distribute_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26222 l_ready_to_dist_flag_flag := 'N';
26223 end if;
26224
26225 if p_limit_to_txn_controls_flag.count = 1 and p_limit_to_txn_controls_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26226 l_limit_to_txn_cnt_flag_flag := 'N';
26227 end if;
26228
26229 if p_labor_bill_rate_org_id.count = 1 and p_labor_bill_rate_org_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26230 l_labor_bill_rate_org_id_flag := 'N';
26231 end if;
26232
26233 if p_labor_std_bill_rate_schdl.count = 1 and p_labor_std_bill_rate_schdl(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26234 l_labor_std_bill_rate_flag := 'N';
26235 end if;
26236
26237 if p_labor_schedule_fixed_date.count = 1 and p_labor_schedule_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26238 l_labor_schd_fixed_date_flag := 'N';
26239 end if;
26240
26241 if p_labor_schedule_discount.count = 1 and p_labor_schedule_discount(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26242 l_labor_schd_discount_flag := 'N';
26243 end if;
26244
26245 if p_nl_bill_rate_org_id.count = 1 and p_nl_bill_rate_org_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26246 l_nl_bill_rate_org_id_flag := 'N';
26247 end if;
26248
26249 if p_nl_std_bill_rate_schdl.count = 1 and p_nl_std_bill_rate_schdl(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26250 l_nl_std_bill_rate_schdl_flag := 'N';
26251 end if;
26252
26253 if p_nl_schedule_fixed_date.count = 1 and p_nl_schedule_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26254 l_nl_schedule_fixed_date_flag := 'N';
26255 end if;
26256
26257 if p_nl_schedule_discount.count = 1 and p_nl_schedule_discount(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26258 l_nl_schedule_discount_flag := 'N';
26259 end if;
26260
26261 if p_labor_cost_multiplier_name.count = 1 and p_labor_cost_multiplier_name(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26262 l_labor_cost_mult_name_flag := 'N';
26263 end if;
26264
26265 if p_cost_ind_rate_sch_id.count = 1 and p_cost_ind_rate_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26266 l_cost_ind_rate_sch_id_flag := 'N';
26267 end if;
26268
26269 if p_rev_ind_rate_sch_id.count = 1 and p_rev_ind_rate_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26270 l_rev_ind_rate_sch_id_flag := 'N';
26271 end if;
26272
26273 if p_inv_ind_rate_sch_id.count = 1 and p_inv_ind_rate_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26274 l_inv_ind_rate_sch_id_flag := 'N';
26275 end if;
26276
26277 if p_cost_ind_sch_fixed_date.count = 1 and p_cost_ind_sch_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26278 l_cost_ind_sch_fixed_date_flag := 'N';
26279 end if;
26280
26281 if p_rev_ind_sch_fixed_date.count = 1 and p_rev_ind_sch_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26282 l_rev_ind_sch_fixed_date_flag := 'N';
26283 end if;
26284
26285 if p_inv_ind_sch_fixed_date.count = 1 and p_inv_ind_sch_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26286 l_inv_ind_sch_fixed_date_flag := 'N';
26287 end if;
26288
26289 if p_labor_sch_type.count = 1 and p_labor_sch_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26290 l_labor_sch_type_flag := 'N';
26291 end if;
26292
26293 if p_nl_sch_type.count = 1 and p_nl_sch_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26294 l_nl_sch_type_flag := 'N';
26295 end if;
26296
26297 if p_actual_start_date.count = 1 and p_actual_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26298 l_actual_start_date_flag := 'N';
26299 end if;
26300
26301 if p_actual_finish_date.count = 1 and p_actual_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26302 l_actual_finish_date_flag := 'N';
26303 end if;
26304
26305 if p_early_start_date.count = 1 and p_early_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26306 l_early_start_date_flag := 'N';
26307 end if;
26308
26309 if p_early_finish_date.count = 1 and p_early_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26310 l_early_finish_date_flag := 'N';
26311 end if;
26312
26313 if p_late_start_date.count = 1 and p_late_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26314 l_late_start_date_flag := 'N';
26315 end if;
26316
26317 if p_late_finish_date.count = 1 and p_late_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26318 l_late_finish_date_flag := 'N';
26319 end if;
26320
26321 if p_scheduled_start_date.count = 1 and p_scheduled_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26322 l_scheduled_start_date_flag := 'N';
26323 end if;
26324
26325 if p_scheduled_finish_date.count = 1 and p_scheduled_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26326 l_scheduled_finish_date_flag := 'N';
26327 end if;
26328
26329 if p_attribute_category.count = 1 and p_attribute_category(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26330 l_attribute_category_flag := 'N';
26331 end if;
26332 if p_attribute1.count = 1 and p_attribute1(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26333 l_attribute1_flag := 'N';
26334 end if;
26335 if p_attribute2.count = 1 and p_attribute2(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26336 l_attribute2_flag := 'N';
26337 end if;
26338 if p_attribute3.count = 1 and p_attribute3(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26339 l_attribute3_flag := 'N';
26340 end if;
26341 if p_attribute4.count = 1 and p_attribute4(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26342 l_attribute4_flag := 'N';
26343 end if;
26344 if p_attribute5.count = 1 and p_attribute5(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26345 l_attribute5_flag := 'N';
26346 end if;
26347 if p_attribute6.count = 1 and p_attribute6(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26348 l_attribute6_flag := 'N';
26349 end if;
26350 if p_attribute7.count = 1 and p_attribute7(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26351 l_attribute7_flag := 'N';
26352 end if;
26353 if p_attribute8.count = 1 and p_attribute8(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26354 l_attribute8_flag := 'N';
26355 end if;
26356 if p_attribute9.count = 1 and p_attribute9(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26357 l_attribute9_flag := 'N';
26358 end if;
26359 if p_attribute10.count = 1 and p_attribute10(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26360 l_attribute10_flag := 'N';
26361 end if;
26362
26363 if p_allow_cross_charge_flag.count = 1 and p_allow_cross_charge_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26364 l_allow_cross_charge_flag_flag := 'N';
26365 end if;
26366
26367 if p_project_rate_date.count = 1 and p_project_rate_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26368 l_project_rate_date_flag := 'N';
26369 end if;
26370
26371 if p_project_rate_type.count = 1 and p_project_rate_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26372 l_project_rate_type_flag := 'N';
26373 end if;
26374
26375 if p_cc_process_labor_flag.count = 1 and p_cc_process_labor_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26376 l_cc_process_labor_flag_flag := 'N';
26377 end if;
26378
26379 if p_labor_tp_schedule_id.count = 1 and p_labor_tp_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26380 l_labor_tp_schedule_id_flag := 'N';
26381 end if;
26382
26383 if p_labor_tp_fixed_date.count = 1 and p_labor_tp_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26384 l_labor_tp_fixed_date_flag := 'N';
26385 end if;
26386
26387 if p_cc_process_nl_flag.count = 1 and p_cc_process_nl_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26388 l_cc_process_nl_flag_flag := 'N';
26389 end if;
26390 if p_nl_tp_schedule_id.count = 1 and p_nl_tp_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26391 l_nl_tp_schedule_id_flag := 'N';
26392 end if;
26393
26394 if p_nl_tp_fixed_date.count = 1 and p_nl_tp_fixed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26395 l_nl_tp_fixed_date_flag := 'N';
26396 end if;
26397
26398 if p_receive_project_invoice_flag.count = 1 and p_receive_project_invoice_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26399 l_receive_proj_inv_flag_flag := 'N';
26400 end if;
26401
26402 if p_work_type_id.count = 1 and p_work_type_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26403 l_work_type_id_flag := 'N';
26404 end if;
26405
26406 if p_emp_bill_rate_schedule_id.count = 1 and p_emp_bill_rate_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26407 l_emp_bill_rate_schd_id_flag := 'N';
26408 end if;
26409 if p_job_bill_rate_schedule_id.count = 1 and p_job_bill_rate_schedule_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26410 l_job_bill_rate_schd_id_flag := 'N';
26411 end if;
26412 if p_non_lab_std_bill_rt_sch_id.count = 1 and p_non_lab_std_bill_rt_sch_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26413 l_non_lab_std_bill_rt_sch_flag := 'N';
26414 end if;
26415
26416 if p_taskfunc_cost_rate_type.count = 1 and p_taskfunc_cost_rate_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26417 l_taskfunc_cost_rate_type_flag := 'N';
26418 end if;
26419 if p_taskfunc_cost_rate_date.count = 1 and p_taskfunc_cost_rate_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26420 l_taskfunc_cost_rate_date_flag := 'N';
26421 end if;
26422 if p_display_sequence.count = 1 and p_display_sequence(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26423 l_display_sequence_flag := 'N';
26424 end if;
26425 if p_wbs_level.count = 1 and p_wbs_level(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26426 l_wbs_level_flag := 'N';
26427 end if;
26428
26429 if p_obligation_start_date.count = 1 and p_obligation_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26430 l_obligation_start_date_flag := 'N';
26431 end if;
26432
26433 if p_obligation_finish_date.count = 1 and p_obligation_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26434 l_obligation_finish_date_flag := 'N';
26435 end if;
26436
26437 if p_baseline_start_date.count = 1 and p_baseline_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26438 l_baseline_start_date_flag := 'N';
26439 end if;
26440
26441 if p_baseline_finish_date.count = 1 and p_baseline_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26442 l_baseline_finish_date_flag := 'N';
26443 end if;
26444
26445 if p_closed_date.count = 1 and p_closed_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26446 l_closed_date_flag := 'N';
26447 end if;
26448
26449 if p_wq_uom_code.count = 1 and p_wq_uom_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26450 l_wq_uom_code_flag := 'N';
26451 end if;
26452
26453 if p_wq_item_code.count = 1 and p_wq_item_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26454 l_wq_item_code_flag := 'N';
26455 end if;
26456 if p_status_code.count = 1 and p_status_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26457 l_status_code_flag := 'N';
26458 end if;
26459
26460 if p_wf_status_code.count = 1 and p_wf_status_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26461 l_wf_status_code_flag := 'N';
26462 end if;
26463
26464 if p_pm_source_code.count = 1 and p_pm_source_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26465 l_pm_source_code_flag := 'N';
26466 end if;
26467
26468 if p_inc_proj_progress_flag.count = 1 and p_inc_proj_progress_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26469 l_inc_proj_progress_flag_flag := 'N';
26470 end if;
26471
26472 if p_link_task_flag.count = 1 and p_link_task_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26473 l_link_task_flag_flag := 'N';
26474 end if;
26475
26476
26477 if p_calendar_id.count = 1 and p_calendar_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26478 l_calendar_id_flag := 'N';
26479 end if;
26480
26481 if p_planned_effort.count = 1 and p_planned_effort(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26482 l_planned_effort_flag := 'N';
26483 end if;
26484
26485 if p_planned_work_quantity.count = 1 and p_planned_work_quantity(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26486 l_planned_work_quantity_flag := 'N';
26487 end if;
26488
26489 if p_task_type.count = 1 and p_task_type(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26490 l_task_type_flag := 'N';
26491 end if;
26492
26493 --bug 2744729, 2740565
26494 if p_estimated_start_date.count = 1 and p_estimated_start_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26495 l_estimated_start_date_flag := 'N';
26496 end if;
26497
26498 if p_estimated_finish_date.count = 1 and p_estimated_finish_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26499 l_estimated_finish_date_flag := 'N';
26500 end if;
26501
26502 if p_priority_code.count = 1 and p_priority_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26503 l_priority_code_flag := 'N';
26504 end if;
26505
26506 if p_milestone.count = 1 and p_milestone(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26507 l_milestone_flag_flag := 'N';
26508 end if;
26509
26510 if p_critical_flag.count = 1 and p_critical_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26511 l_critical_flag_flag := 'N';
26512 end if;
26513 --bug 2744729, 2740565
26514
26515 if p_labor_disc_reason_code.count = 1 and p_labor_disc_reason_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26516 l_labor_disc_reason_code_flag := 'N';
26517 end if;
26518
26519 if p_non_labor_disc_reason_code.count = 1 and p_non_labor_disc_reason_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26520 l_nl_disc_reason_code_flag := 'N';
26521 end if;
26522
26523 --bug 2872708
26524 if p_retirement_cost_flag.count = 1 and p_retirement_cost_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26525 l_retirement_cost_flag_flag := 'N';
26526 end if;
26527
26528 if p_cint_eligible_flag.count = 1 and p_cint_eligible_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26529 l_cint_eligible_flag_flag := 'N';
26530 end if;
26531
26532 if p_cint_stop_date.count = 1 and p_cint_stop_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26533 l_cint_stop_date_flag := 'N';
26534 end if;
26535 --bug 2872708
26536
26537 -- FP-M Bug # 3301192
26538 if p_pred_string.count = 1 and p_pred_string(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26539 l_pred_string_flag := 'N';
26540 end if;
26541
26542 if p_pred_delimiter.count = 1 and p_pred_delimiter(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26543 l_pred_delimiter_flag := 'N';
26544 end if;
26545
26546 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
26547 -- FP M changes begin (venkat)
26548
26549 if p_base_percent_comp_deriv_code.count = 1 and p_base_percent_comp_deriv_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26550 l_base_prct_comp_drv_code_flag := 'N';
26551 end if;
26552
26553 if p_sch_tool_tsk_type_code.count = 1 and p_sch_tool_tsk_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26554 l_sch_tool_tsk_type_code_flag := 'N';
26555 end if;
26556
26557 if p_constraint_type_code.count = 1 and p_constraint_type_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26558 l_constraint_type_code_flag := 'N';
26559 end if;
26560
26561 if p_constraint_date.count = 1 and p_constraint_date(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE then
26562 l_constraint_date_flag := 'N';
26563 end if;
26564
26565 if p_free_slack.count = 1 and p_free_slack(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26566 l_free_slack_flag := 'N';
26567 end if;
26568
26569 if p_total_slack.count = 1 and p_total_slack(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26570 l_total_slack_flag := 'N';
26571 end if;
26572
26573 if p_effort_driven_flag.count = 1 and p_effort_driven_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26574 l_effort_driven_flag_flag := 'N';
26575 end if;
26576
26577
26578 if p_level_assignments_flag.count = 1 and p_level_assignments_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26579 l_level_assignments_flag_flag := 'N';
26580 end if;
26581
26582 if p_invoice_method.count = 1 and p_invoice_method(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26583 l_invoice_method_flag := 'N';
26584 end if;
26585
26586 if p_customer_id.count = 1 and p_customer_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26587 l_customer_id_flag := 'N';
26588 end if;
26589
26590
26591 if p_gen_etc_source_code.count = 1 and p_gen_etc_source_code(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26592 l_gen_etc_source_code_flag := 'N';
26593 end if;
26594
26595 -- FP M changes end (venkat)
26596
26597 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
26598
26599 if p_ext_act_duration.count = 1 and p_ext_act_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26600 l_ext_act_duration_flag := 'N';
26601 end if;
26602
26603 if p_ext_remain_duration.count = 1 and p_ext_remain_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26604 l_ext_remain_duration_flag := 'N';
26605 end if;
26606
26607 if p_ext_sch_duration.count = 1 and p_ext_sch_duration(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26608 l_ext_sch_duration_flag := 'N';
26609 end if;
26610
26611 -- (End venkat) new params for bug #3450684 -------------------------------------------------
26612 --SMukka
26613 if p_financial_task_flag.count = 1 and p_financial_task_flag(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26614 l_financial_task_flag := 'N';
26615 end if;
26616
26617 if p_mapped_task_id.count = 1 and p_mapped_task_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26618 l_mapped_task_id_flag := 'N';
26619 end if;
26620
26621 if p_mapped_task_reference.count = 1 and p_mapped_task_reference(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR then
26622 l_mapped_task_reference_flag := 'N';
26623 end if;
26624
26625 -- 3661788 added condition for deliverable_id
26626
26627 if p_deliverable.count = 1 and ( p_deliverable(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR and p_deliverable_id(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) then
26628 l_deliverable_flag := 'N';
26629 end if;
26630
26631 if p_etc_effort.count = 1 and p_etc_effort(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26632 l_etc_effort_flag := 'N';
26633 end if;
26634
26635 if p_percent_complete.count = 1 and p_percent_complete(1) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
26636 l_percent_complete_flag := 'N';
26637 end if;
26638
26639 --error_msg('BEFORE THE FOR LOOP ');
26640
26641 FOR i in 1..1000 LOOP
26642
26643 if p_pm_task_reference(i) is null then
26644 -- G_tasks_tbl_count := i;
26645 -- error_msg('INSIDE THE LOOP '||G_tasks_tbl_count);
26646 return;
26647 end if;
26648
26649 if l_task_name_flag = 'N' then
26650 l_task_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26651 else
26652 /*Start of changes for bug 4024659*/
26653
26654 --l_task_name := substr(p_task_name(i),1,20);
26655
26656 l_task_name := substrb(p_task_name(i),1,240); -- Bug 6193314 . Changed to 240 from 20
26657
26658 /*End of changes for bug 4024659*/
26659 end if;
26660
26661 if l_long_task_name_flag = 'N' then
26662 l_long_task_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26663 else
26664 /*Start of changes for bug 4024659*/
26665
26666 --l_long_task_name := substr(p_long_task_name(i),1,240);
26667
26668 l_long_task_name := substrb(p_long_task_name(i),1,240);
26669
26670 /*End of changes for bug 4024659*/
26671 end if;
26672
26673 if l_pa_task_number_flag = 'N' then
26674 l_pa_task_number := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26675 else
26676 l_pa_task_number := substrb(p_pa_task_number(i),1,100); -- Modified for bug 6193314
26677 end if;
26678
26679 if l_task_description_flag = 'N' then
26680 l_task_description := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26681 else
26682 l_task_description := substrb(p_task_description(i),1,250); -- Fix for Bug # 4513291.
26683 end if;
26684
26685 if l_task_start_date_flag = 'N' then
26686 l_task_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26687 else
26688 l_task_start_date := p_task_start_date(i);
26689 end if;
26690
26691 if l_task_completion_date_flag = 'N' then
26692 l_task_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26693 else
26694 l_task_completion_date := p_task_completion_date(i);
26695 end if;
26696
26697 if l_pm_parent_task_ref_flag = 'N' then
26698 l_pm_parent_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26699 else
26700 l_pm_parent_task_reference := p_pm_parent_task_reference(i);
26701 end if;
26702
26703 if l_pa_parent_task_id_flag = 'N' then
26704 l_pa_parent_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26705 else
26706 l_pa_parent_task_id := p_pa_parent_task_id(i);
26707 end if;
26708
26709 if l_address_id_flag = 'N' then
26710 l_address_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26711 else
26712 l_address_id := p_address_id(i);
26713 end if;
26714
26715 if l_carrying_out_org_id_flag = 'N' then
26716 l_carrying_out_organization_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26717 else
26718 l_carrying_out_organization_id := p_carrying_out_organization_id(i);
26719 end if;
26720
26721 if l_service_type_code_flag = 'N' then
26722 l_service_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26723 else
26724 l_service_type_code := p_service_type_code(i);
26725 end if;
26726
26727 if l_task_manager_person_id_flag = 'N' then
26728 l_task_manager_person_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26729 else
26730 l_task_manager_person_id := p_task_manager_person_id(i);
26731 end if;
26732 -- Added NVL for bug 4737984
26733 if l_billable_flag_flag = 'N' then
26734 l_billable_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26735 else
26736 l_billable_flag := NVL(p_billable_flag(i),PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
26737 end if;
26738 -- Added NVL for bug 4737984
26739 if l_chargeable_flag_flag = 'N' then
26740 l_chargeable_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26741 else
26742 l_chargeable_flag := NVL(p_chargeable_flag(i),PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR);
26743 end if;
26744
26745 if l_ready_to_bill_flag_flag = 'N' then
26746 l_ready_to_bill_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26747 else
26748 l_ready_to_bill_flag := p_ready_to_bill_flag(i);
26749 end if;
26750
26751 if l_ready_to_dist_flag_flag = 'N' then
26752 l_ready_to_distribute_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26753 else
26754 l_ready_to_distribute_flag := p_ready_to_distribute_flag(i);
26755 end if;
26756
26757 if l_limit_to_txn_cnt_flag_flag = 'N' then
26758 l_limit_to_txn_controls_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26759 else
26760 l_limit_to_txn_controls_flag := p_limit_to_txn_controls_flag(i);
26761 end if;
26762
26763 if l_labor_bill_rate_org_id_flag = 'N' then
26764 l_labor_bill_rate_org_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26765 else
26766 l_labor_bill_rate_org_id := p_labor_bill_rate_org_id(i);
26767 end if;
26768
26769 if l_labor_std_bill_rate_flag = 'N' then
26770 l_labor_std_bill_rate_schdl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26771 else
26772 l_labor_std_bill_rate_schdl := p_labor_std_bill_rate_schdl(i);
26773 end if;
26774
26775 if l_labor_schd_fixed_date_flag = 'N' then
26776 l_labor_schedule_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26777 else
26778 l_labor_schedule_fixed_date := p_labor_schedule_fixed_date(i);
26779 end if;
26780
26781 if l_labor_schd_discount_flag = 'N' then
26782 l_labor_schedule_discount := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26783 else
26784 l_labor_schedule_discount := p_labor_schedule_discount(i);
26785 end if;
26786
26787 if l_nl_bill_rate_org_id_flag = 'N' then
26788 l_nl_bill_rate_org_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26789 else
26790 l_nl_bill_rate_org_id := p_nl_bill_rate_org_id(i);
26791 end if;
26792
26793 if l_nl_std_bill_rate_schdl_flag = 'N' then
26794 l_nl_std_bill_rate_schdl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26795 else
26796 l_nl_std_bill_rate_schdl := p_nl_std_bill_rate_schdl(i);
26797 end if;
26798
26799 if l_nl_schedule_fixed_date_flag = 'N' then
26800 l_nl_schedule_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26801 else
26802 l_nl_schedule_fixed_date := p_nl_schedule_fixed_date(i);
26803 end if;
26804
26805 if l_nl_schedule_discount_flag = 'N' then
26806 l_nl_schedule_discount := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26807 else
26808 l_nl_schedule_discount := p_nl_schedule_discount(i);
26809 end if;
26810
26811 if l_labor_cost_mult_name_flag = 'N' then
26812 l_labor_cost_multiplier_name := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26813 else
26814 l_labor_cost_multiplier_name := p_labor_cost_multiplier_name(i);
26815 end if;
26816
26817 if l_cost_ind_rate_sch_id_flag = 'N' then
26818 l_cost_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26819 else
26820 l_cost_ind_rate_sch_id := p_cost_ind_rate_sch_id(i);
26821 end if;
26822
26823 if l_rev_ind_rate_sch_id_flag = 'N' then
26824 l_rev_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26825 else
26826 l_rev_ind_rate_sch_id := p_rev_ind_rate_sch_id(i);
26827 end if;
26828
26829 if l_inv_ind_rate_sch_id_flag = 'N' then
26830 l_inv_ind_rate_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
26831 else
26832 l_inv_ind_rate_sch_id := p_inv_ind_rate_sch_id(i);
26833 end if;
26834
26835 if l_cost_ind_sch_fixed_date_flag = 'N' then
26836 l_cost_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26837 else
26838 l_cost_ind_sch_fixed_date := p_cost_ind_sch_fixed_date(i);
26839 end if;
26840
26841 if l_rev_ind_sch_fixed_date_flag = 'N' then
26842 l_rev_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26843 else
26844 l_rev_ind_sch_fixed_date := p_rev_ind_sch_fixed_date(i);
26845 end if;
26846
26847 if l_inv_ind_sch_fixed_date_flag = 'N' then
26848 l_inv_ind_sch_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26849 else
26850 l_inv_ind_sch_fixed_date := p_inv_ind_sch_fixed_date(i);
26851 end if;
26852
26853 if l_labor_sch_type_flag = 'N' then
26854 l_labor_sch_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26855 else
26856 l_labor_sch_type := p_labor_sch_type(i);
26857 end if;
26858
26859 if l_nl_sch_type_flag = 'N' then
26860 l_nl_sch_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26861 else
26862 l_nl_sch_type := p_nl_sch_type(i);
26863 end if;
26864
26865 if l_actual_start_date_flag = 'N' then
26866 l_actual_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26867 else
26868 l_actual_start_date := p_actual_start_date(i);
26869 end if;
26870
26871 if l_actual_finish_date_flag = 'N' then
26872 l_actual_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26873 else
26874 l_actual_finish_date := p_actual_finish_date(i);
26875 end if;
26876
26877 if l_early_start_date_flag = 'N' then
26878 l_early_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26879 else
26880 l_early_start_date := p_early_start_date(i);
26881 end if;
26882
26883 if l_early_finish_date_flag = 'N' then
26884 l_early_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26885 else
26886 l_early_finish_date := p_early_finish_date(i);
26887 end if;
26888
26889 if l_late_start_date_flag = 'N' then
26890 l_late_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26891 else
26892 l_late_start_date := p_late_start_date(i);
26893 end if;
26894
26895 if l_late_finish_date_flag = 'N' then
26896 l_late_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26897 else
26898 l_late_finish_date := p_late_finish_date(i);
26899 end if;
26900
26901 if l_scheduled_start_date_flag = 'N' then
26902 l_scheduled_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26903 else
26904 l_scheduled_start_date := p_scheduled_start_date(i);
26905 end if;
26906
26907 if l_scheduled_finish_date_flag = 'N' then
26908 l_scheduled_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26909 else
26910 l_scheduled_finish_date := p_scheduled_finish_date(i);
26911 end if;
26912
26913 if l_attribute_category_flag = 'N' then
26914 l_attribute_category := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26915 else
26916 l_attribute_category := p_attribute_category(i);
26917 end if;
26918
26919 if l_attribute1_flag = 'N' then
26920 l_attribute1 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26921 else
26922 l_attribute1 := p_attribute1(i);
26923 end if;
26924
26925 if l_attribute2_flag = 'N' then
26926 l_attribute2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26927 else
26928 l_attribute2 := p_attribute2(i);
26929 end if;
26930
26931 if l_attribute3_flag = 'N' then
26932 l_attribute3 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26933 else
26934 l_attribute3 := p_attribute3(i);
26935 end if;
26936
26937 if l_attribute4_flag = 'N' then
26938 l_attribute4 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26939 else
26940 l_attribute4 := p_attribute4(i);
26941 end if;
26942
26943 if l_attribute5_flag = 'N' then
26944 l_attribute5 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26945 else
26946 l_attribute5 := p_attribute5(i);
26947 end if;
26948
26949 if l_attribute6_flag = 'N' then
26950 l_attribute6 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26951 else
26952 l_attribute6 := p_attribute6(i);
26953 end if;
26954
26955 if l_attribute7_flag = 'N' then
26956 l_attribute7 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26957 else
26958 l_attribute7 := p_attribute7(i);
26959 end if;
26960
26961 if l_attribute8_flag = 'N' then
26962 l_attribute8 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26963 else
26964 l_attribute8 := p_attribute8(i);
26965 end if;
26966
26967 if l_attribute9_flag = 'N' then
26968 l_attribute9 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26969 else
26970 l_attribute9 := p_attribute9(i);
26971 end if;
26972
26973 if l_attribute10_flag = 'N' then
26974 l_attribute10 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26975 else
26976 l_attribute10 := p_attribute10(i);
26977 end if;
26978
26979 if l_allow_cross_charge_flag_flag = 'N' then
26980 l_allow_cross_charge_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26981 else
26982 l_allow_cross_charge_flag := p_allow_cross_charge_flag(i);
26983 end if;
26984
26985 if l_project_rate_date_flag = 'N' then
26986 l_project_rate_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
26987 else
26988 l_project_rate_date := p_project_rate_date(i);
26989 end if;
26990
26991 if l_project_rate_type_flag = 'N' then
26992 l_project_rate_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26993 else
26994 l_project_rate_type := p_project_rate_type(i);
26995 end if;
26996
26997 if l_allow_cross_charge_flag_flag = 'N' then
26998 l_allow_cross_charge_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
26999 else
27000 l_allow_cross_charge_flag := p_allow_cross_charge_flag(i);
27001 end if;
27002
27003 if l_cc_process_labor_flag_flag = 'N' then
27004 l_cc_process_labor_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27005 else
27006 l_cc_process_labor_flag := p_cc_process_labor_flag(i);
27007 end if;
27008
27009 if l_labor_tp_schedule_id_flag = 'N' then
27010 l_labor_tp_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27011 else
27012 l_labor_tp_schedule_id := p_labor_tp_schedule_id(i);
27013 end if;
27014
27015 if l_labor_tp_fixed_date_flag = 'N' then
27016 l_labor_tp_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27017 else
27018 l_labor_tp_fixed_date := p_labor_tp_fixed_date(i);
27019 end if;
27020
27021 if l_cc_process_nl_flag_flag = 'N' then
27022 l_cc_process_nl_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27023 else
27024 l_cc_process_nl_flag := p_cc_process_nl_flag(i);
27025 end if;
27026
27027 if l_nl_tp_schedule_id_flag = 'N' then
27028 l_nl_tp_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27029 else
27030 l_nl_tp_schedule_id := p_nl_tp_schedule_id(i);
27031 end if;
27032
27033 if l_nl_tp_fixed_date_flag = 'N' then
27034 l_nl_tp_fixed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27035 else
27036 l_nl_tp_fixed_date := p_nl_tp_fixed_date(i);
27037 end if;
27038
27039 if l_receive_proj_inv_flag_flag = 'N' then
27040 l_receive_project_invoice_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27041 else
27042 l_receive_project_invoice_flag := p_receive_project_invoice_flag(i);
27043 end if;
27044
27045 if l_work_type_id_flag = 'N' then
27046 l_work_type_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27047 else
27048 l_work_type_id := p_work_type_id(i);
27049 end if;
27050
27051 if l_emp_bill_rate_schd_id_flag = 'N' then
27052 l_emp_bill_rate_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27053 else
27054 l_emp_bill_rate_schedule_id := p_emp_bill_rate_schedule_id(i);
27055 end if;
27056
27057 if l_job_bill_rate_schd_id_flag = 'N' then
27058 l_job_bill_rate_schedule_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27059 else
27060 l_job_bill_rate_schedule_id := p_job_bill_rate_schedule_id(i);
27061 end if;
27062
27063 if l_non_lab_std_bill_rt_sch_flag = 'N' then
27064 l_non_lab_std_bill_rt_sch_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27065 else
27066 l_non_lab_std_bill_rt_sch_id := p_non_lab_std_bill_rt_sch_id(i);
27067 end if;
27068
27069 if l_taskfunc_cost_rate_type_flag = 'N' then
27070 l_taskfunc_cost_rate_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27071 else
27072 l_taskfunc_cost_rate_type := p_taskfunc_cost_rate_type(i);
27073 end if;
27074
27075 if l_taskfunc_cost_rate_date_flag = 'N' then
27076 l_taskfunc_cost_rate_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27077 else
27078 l_taskfunc_cost_rate_date := p_taskfunc_cost_rate_date(i);
27079 end if;
27080
27081 if l_display_sequence_flag = 'N' then
27082 l_display_sequence := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27083 else
27084 l_display_sequence := p_display_sequence(i);
27085 end if;
27086
27087 if l_wbs_level_flag = 'N' then
27088 l_wbs_level := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27089 else
27090 l_wbs_level := p_wbs_level(i);
27091 end if;
27092
27093 if l_obligation_start_date_flag = 'N' then
27094 l_obligation_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27095 else
27096 l_obligation_start_date := p_obligation_start_date(i);
27097 end if;
27098
27099 if l_obligation_finish_date_flag = 'N' then
27100 l_obligation_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27101 else
27102 l_obligation_finish_date := p_obligation_finish_date(i);
27103 end if;
27104
27105
27106 if l_baseline_start_date_flag = 'N' then
27107 l_baseline_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27108 else
27109 l_baseline_start_date := p_baseline_start_date(i);
27110 end if;
27111
27112 if l_baseline_finish_date_flag = 'N' then
27113 l_baseline_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27114 else
27115 l_baseline_finish_date := p_baseline_finish_date(i);
27116 end if;
27117
27118 if l_closed_date_flag = 'N' then
27119 l_closed_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27120 else
27121 l_closed_date := p_closed_date(i);
27122 end if;
27123
27124 if l_wq_uom_code_flag = 'N' then
27125 l_wq_uom_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27126 else
27127 l_wq_uom_code := p_wq_uom_code(i);
27128 end if;
27129
27130 if l_wq_item_code_flag = 'N' then
27131 l_wq_item_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27132 else
27133 l_wq_item_code := p_wq_item_code(i);
27134 end if;
27135
27136 if l_status_code_flag = 'N' then
27137 l_status_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27138 else
27139 l_status_code := p_status_code(i);
27140 end if;
27141
27142
27143 if l_wf_status_code_flag = 'N' then
27144 l_wf_status_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27145 else
27146 l_wf_status_code := p_wf_status_code(i);
27147 end if;
27148
27149 if l_pm_source_code_flag = 'N' then
27150 l_pm_source_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27151 else
27152 l_pm_source_code := p_pm_source_code(i);
27153 end if;
27154
27155
27156 if l_inc_proj_progress_flag_flag = 'N' then
27157 l_inc_proj_progress_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27158 else
27159 l_inc_proj_progress_flag := p_inc_proj_progress_flag(i);
27160 end if;
27161
27162 if l_link_task_flag_flag = 'N' then
27163 l_link_task_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27164 else
27165 l_link_task_flag := p_link_task_flag(i);
27166 end if;
27167
27168 if l_calendar_id_flag = 'N' then
27169 l_calendar_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27170 else
27171 l_calendar_id := p_calendar_id(i);
27172 end if;
27173
27174 if l_planned_effort_flag = 'N' then
27175 l_planned_effort := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27176 else
27177 l_planned_effort := p_planned_effort(i);
27178 end if;
27179
27180 if l_planned_work_quantity_flag = 'N' then
27181 l_planned_work_quantity := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27182 else
27183 l_planned_work_quantity := p_planned_work_quantity(i);
27184 end if;
27185
27186
27187 if l_task_type_flag = 'N' then
27188 l_task_type := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27189 else
27190 l_task_type := p_task_type(i);
27191 end if;
27192
27193 --bug 2744729, 2740565
27194 if l_estimated_start_date_flag = 'N' then
27195 l_estimated_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27196 else
27197 l_estimated_start_date := p_estimated_start_date(i);
27198 end if;
27199
27200 if l_estimated_finish_date_flag = 'N' then
27201 l_estimated_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27202 else
27203 l_estimated_finish_date := p_estimated_finish_date(i);
27204 end if;
27205
27206 if l_critical_flag_flag = 'N' then
27207 l_critical_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27208 else
27209 l_critical_flag := p_critical_flag(i);
27210 end if;
27211
27212 if l_milestone_flag_flag = 'N' then
27213 l_milestone_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27214 else
27215 l_milestone_flag := p_milestone(i);
27216 end if;
27217
27218 if l_priority_code_flag = 'N' then
27219 l_priority_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27220 else
27221 l_priority_code := p_priority_code(i);
27222 end if;
27223 --bug 2744729, 2740565
27224
27225 if l_labor_disc_reason_code_flag = 'N' then
27226 l_labor_disc_reason_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27227 else
27228 l_labor_disc_reason_code := p_labor_disc_reason_code(i);
27229 end if;
27230
27231 if l_nl_disc_reason_code_flag = 'N' then
27232 l_non_labor_disc_reason_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27233 else
27234 l_non_labor_disc_reason_code := p_non_labor_disc_reason_code(i);
27235 end if;
27236
27237 --bug 2872708
27238 if l_retirement_cost_flag_flag = 'N' then
27239 l_retirement_cost_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27240 else
27241 l_retirement_cost_flag := p_retirement_cost_flag(i);
27242 end if;
27243
27244 if l_cint_eligible_flag_flag = 'N' then
27245 l_cint_eligible_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27246 else
27247 l_cint_eligible_flag := p_cint_eligible_flag(i);
27248 end if;
27249
27250 if l_cint_stop_date_flag = 'N' then
27251 l_cint_stop_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27252 else
27253 l_cint_stop_date := p_cint_stop_date(i);
27254 end if;
27255 --bug 2872708
27256
27257 -- FP-M Bug # 3301192
27258 if l_pred_string_flag = 'N' then
27259 l_pred_string := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27260 else
27261 l_pred_string := p_pred_string(i);
27262 end if;
27263
27264 if l_pred_delimiter_flag = 'N' then
27265 l_pred_delimiter := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27266 else
27267 l_pred_delimiter := p_pred_delimiter(i);
27268 end if;
27269
27270 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
27271 -- FP M changes begin (venkat)
27272
27273 if l_base_prct_comp_drv_code_flag = 'N' then
27274 l_base_percent_comp_deriv_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27275 else
27276 l_base_percent_comp_deriv_code := p_base_percent_comp_deriv_code(i);
27277 end if;
27278
27279 if l_sch_tool_tsk_type_code_flag = 'N' then
27280 l_sch_tool_tsk_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27281 else
27282 l_sch_tool_tsk_type_code := p_sch_tool_tsk_type_code(i);
27283 end if;
27284
27285 if l_constraint_type_code_flag = 'N' then
27286 l_constraint_type_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27287 else
27288 l_constraint_type_code := p_constraint_type_code(i);
27289 end if;
27290
27291
27292 if l_constraint_date_flag = 'N' then
27293 l_constraint_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
27294 else
27295 l_constraint_date := p_constraint_date(i);
27296 end if;
27297
27298
27299 if l_free_slack_flag = 'N' then
27300 l_free_slack := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27301 else
27302 l_free_slack := p_free_slack(i);
27303 end if;
27304
27305
27306 if l_total_slack_flag = 'N' then
27307 l_total_slack := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27308 else
27309 l_total_slack := p_total_slack(i);
27310 end if;
27311
27312 if l_effort_driven_flag_flag = 'N' then
27313 l_effort_driven_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27314 else
27315 l_effort_driven_flag := p_effort_driven_flag(i);
27316 end if;
27317
27318
27319 if l_level_assignments_flag_flag = 'N' then
27320 l_level_assignments_flag := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27321 else
27322 l_level_assignments_flag := p_level_assignments_flag(i);
27323 end if;
27324
27325
27326 if l_invoice_method_flag = 'N' then
27327 l_invoice_method := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27328 else
27329 l_invoice_method := p_invoice_method(i);
27330 end if;
27331
27332
27333 if l_customer_id_flag = 'N' then
27334 l_customer_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27335 else
27336 l_customer_id := p_customer_id(i);
27337 end if;
27338
27339 if l_gen_etc_source_code_flag = 'N' then
27340 l_gen_etc_source_code := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27341 else
27342 l_gen_etc_source_code := p_gen_etc_source_code(i);
27343 end if;
27344
27345 -- FP M changes end (venkat)
27346
27347 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
27348
27349 if l_ext_act_duration_flag = 'N' then
27350 l_ext_act_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27351 else
27352 l_ext_act_duration := p_ext_act_duration(i);
27353 end if;
27354
27355 if l_ext_remain_duration_flag = 'N' then
27356 l_ext_remain_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27357 else
27358 l_ext_remain_duration := p_ext_remain_duration(i);
27359 end if;
27360
27361 if l_ext_sch_duration_flag = 'N' then
27362 l_ext_sch_duration := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27363 else
27364 l_ext_sch_duration := p_ext_sch_duration(i);
27365 end if;
27366
27367 -- (end venkat) new params for bug #3450684 ----------------------------------------------
27368 --SMukka
27369 -- 3661788 added code for l_deliverable_id
27370
27371 if l_deliverable_flag = 'N' then
27372 l_deliverable := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27373 l_deliverable_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27374 else
27375 l_deliverable := p_deliverable(i);
27376 l_deliverable_id := p_deliverable_id(i);
27377 end if;
27378
27379 if l_financial_task_flag = 'N' then
27380 l_financial_task_fl := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27381 else
27382 l_financial_task_fl := p_financial_task_flag(i);
27383 end if;
27384
27385 if l_mapped_task_id_flag = 'N' then
27386 l_mapped_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27387 else
27388 l_mapped_task_id := p_mapped_task_id(i);
27389 end if;
27390
27391 if l_mapped_task_reference_flag = 'N' then
27392 l_mapped_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR;
27393 else
27394 l_mapped_task_reference := p_mapped_task_reference(i);
27395 end if;
27396
27397 -- Progress Management Changes. Bug # 3420093.
27398
27399 if l_etc_effort_flag = 'N' then
27400 l_etc_effort := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27401 else
27402 l_etc_effort := p_etc_effort(i);
27403 end if;
27404
27405 if l_percent_complete_flag = 'N' then
27406 l_percent_complete := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM;
27407 else
27408 l_percent_complete := p_percent_complete(i);
27409 end if;
27410
27411 -- Progress Management Changes. Bug # 3420093.
27412
27413
27414 PA_PROJECT_PUB.load_task (
27415 p_api_version_number => G_API_VERSION_NUMBER
27416 ,p_init_msg_list => p_init_msg_list
27417 ,p_return_status => l_return_status
27418 ,p_pm_task_reference => p_pm_task_reference(i)
27419 ,p_pa_task_id => p_pa_task_id(i)
27420 ,p_task_name => l_task_name
27421 ,p_long_task_name => l_long_task_name
27422 ,p_pa_task_number => l_pa_task_number
27423 ,p_task_description => l_task_description
27424 ,p_task_start_date => l_task_start_date
27425 ,p_task_completion_date => l_task_completion_date
27426 ,p_scheduled_start_date => l_scheduled_start_date
27427 ,p_scheduled_finish_date => l_scheduled_finish_date
27428 ,p_display_sequence => l_display_sequence
27429 ,p_wbs_level => l_wbs_level
27430 ,p_pm_parent_task_reference => l_pm_parent_task_reference
27431 ,p_pa_parent_task_id => l_pa_parent_task_id
27432 ,p_address_id => l_address_id
27433 ,p_carrying_out_organization_id => l_carrying_out_organization_id
27434 ,p_service_type_code => l_service_type_code
27435 ,p_task_manager_person_id => l_task_manager_person_id
27436 ,p_billable_flag => l_billable_flag
27437 ,p_chargeable_flag => l_chargeable_flag
27438 ,p_ready_to_bill_flag => l_ready_to_bill_flag
27439 ,p_ready_to_distribute_flag => l_ready_to_distribute_flag
27440 ,p_limit_to_txn_controls_flag => l_limit_to_txn_controls_flag
27441 ,p_labor_bill_rate_org_id => l_labor_bill_rate_org_id
27442 ,p_labor_std_bill_rate_schdl => l_labor_std_bill_rate_schdl
27443 ,p_labor_schedule_fixed_date => l_labor_schedule_fixed_date
27444 ,p_labor_schedule_discount => l_labor_schedule_discount
27445 ,p_nl_bill_rate_org_id => l_nl_bill_rate_org_id
27446 ,p_nl_std_bill_rate_schdl => l_nl_std_bill_rate_schdl
27447 ,p_nl_schedule_fixed_date => l_nl_schedule_fixed_date
27448 ,p_nl_schedule_discount => l_nl_schedule_discount
27449 ,p_labor_cost_multiplier_name => l_labor_cost_multiplier_name
27450 ,p_cost_ind_rate_sch_id => l_cost_ind_rate_sch_id
27451 ,p_rev_ind_rate_sch_id => l_rev_ind_rate_sch_id
27452 ,p_inv_ind_rate_sch_id => l_inv_ind_rate_sch_id
27453 ,p_cost_ind_sch_fixed_date => l_cost_ind_sch_fixed_date
27454 ,p_rev_ind_sch_fixed_date => l_rev_ind_sch_fixed_date
27455 ,p_inv_ind_sch_fixed_date => l_inv_ind_sch_fixed_date
27456 ,p_labor_sch_type => l_labor_sch_type
27457 ,p_nl_sch_type => l_nl_sch_type
27458 ,p_actual_start_date => l_actual_start_date
27459 ,p_actual_finish_date => l_actual_finish_date
27460 ,p_early_start_date => l_early_start_date
27461 ,p_early_finish_date => l_early_finish_date
27462 ,p_late_start_date => l_late_start_date
27463 ,p_late_finish_date => l_late_finish_date
27464 ,p_attribute_category => l_attribute_category
27465 ,p_attribute1 => l_attribute1
27466 ,p_attribute2 => l_attribute2
27467 ,p_attribute3 => l_attribute3
27468 ,p_attribute4 => l_attribute4
27469 ,p_attribute5 => l_attribute5
27470 ,p_attribute6 => l_attribute6
27471 ,p_attribute7 => l_attribute7
27472 ,p_attribute8 => l_attribute8
27473 ,p_attribute9 => l_attribute9
27474 ,p_attribute10 => l_attribute10
27475 ,p_allow_cross_charge_flag => l_allow_cross_charge_flag
27476 ,p_project_rate_date => l_project_rate_date
27477 ,p_project_rate_type => l_project_rate_type
27478 ,p_cc_process_labor_flag => l_cc_process_labor_flag
27479 ,p_labor_tp_schedule_id => l_labor_tp_schedule_id
27480 ,p_labor_tp_fixed_date => l_labor_tp_fixed_date
27481 ,p_cc_process_nl_flag => l_cc_process_nl_flag
27482 ,p_nl_tp_schedule_id => l_nl_tp_schedule_id
27483 ,p_nl_tp_fixed_date => l_nl_tp_fixed_date
27484 ,p_receive_project_invoice_flag => l_receive_project_invoice_flag
27485 ,p_work_type_id => l_work_type_id
27486 ,p_emp_bill_rate_schedule_id => l_emp_bill_rate_schedule_id
27487 ,p_job_bill_rate_schedule_id => l_job_bill_rate_schedule_id
27488 ,p_non_lab_std_bill_rt_sch_id => l_non_lab_std_bill_rt_sch_id
27489 ,p_taskfunc_cost_rate_type => l_taskfunc_cost_rate_type
27490 ,p_taskfunc_cost_rate_date => l_taskfunc_cost_rate_date
27491 ,P_OBLIGATION_START_DATE => l_obligation_start_date
27492 ,P_OBLIGATION_FINISH_DATE => l_obligation_finish_date
27493 ,P_BASELINE_START_DATE => l_baseline_start_date
27494 ,P_BASELINE_FINISH_DATE => l_baseline_finish_date
27495 ,P_CLOSED_DATE => l_closed_date
27496 ,P_WQ_UOM_CODE => l_wq_uom_code
27497 ,P_WQ_ITEM_CODE => l_wq_item_code
27498 ,P_STATUS_CODE => l_status_code
27499 ,P_WF_STATUS_CODE => l_wf_status_code
27500 ,P_PM_SOURCE_CODE => l_pm_source_code
27501 ,P_INC_PROJ_PROGRESS_FLAG => l_inc_proj_progress_flag
27502 ,P_LINK_TASK_FLAG => l_link_task_flag
27503 ,P_CALENDAR_ID => l_calendar_id
27504 ,P_PLANNED_EFFORT => l_planned_effort
27505 ,P_PLANNED_WORK_QUANTITY => l_planned_work_quantity
27506 ,P_TASK_TYPE => l_task_type
27507 --bug 2744729, 2740565
27508 ,P_estimated_start_date => l_estimated_start_date
27509 ,P_estimated_finish_date => l_estimated_start_date
27510 ,P_milestone_flag => l_milestone_flag
27511 ,P_critical_flag => l_critical_flag
27512 ,P_priority_code => l_priority_code
27513 --bug 2744729, 2740565
27514 ,P_labor_disc_reason_code => l_labor_disc_reason_code
27515 ,P_non_labor_disc_reason_code => l_non_labor_disc_reason_code
27516 --bug 2872708
27517 ,p_retirement_cost_flag => l_retirement_cost_flag
27518 ,p_cint_eligible_flag => l_cint_eligible_flag
27519 ,p_cint_stop_date => l_cint_stop_date
27520 --bug 2872708
27521 -- FP-M Bug # 3301192
27522 ,p_pred_string => l_pred_string
27523 ,p_pred_delimiter => l_pred_delimiter
27524 --Copied Venkat's FP-M changes from load_task API to load_tasks API.
27525 -- FP M changes begin (venkat)
27526 ,p_base_percent_comp_deriv_code => l_base_percent_comp_deriv_code
27527 ,p_sch_tool_tsk_type_code => l_sch_tool_tsk_type_code
27528 ,p_constraint_type_code => l_constraint_type_code
27529 ,p_constraint_date => l_constraint_date
27530 ,p_free_slack => l_free_slack
27531 ,p_total_slack => l_total_slack
27532 ,p_effort_driven_flag => l_effort_driven_flag
27533 ,p_level_assignments_flag => l_level_assignments_flag
27534 ,p_invoice_method => l_invoice_method
27535 ,p_customer_id => l_customer_id
27536 ,p_gen_etc_source_code => l_gen_etc_source_code
27537 -- FP M changes end (venkat)
27538 --SMukka
27539 ,p_financial_task_flag => l_financial_task_fl
27540 ,p_mapped_task_id => l_mapped_task_id
27541 ,p_mapped_task_reference => l_mapped_task_reference
27542 ,p_deliverable => l_deliverable
27543 ,p_deliverable_id => l_deliverable_id -- 3661788 Passing added deliverable_id to load_task
27544 -- (begin venkat) new params for bug #3450684 ----------------------------------------------
27545 ,p_ext_act_duration => l_ext_act_duration
27546 ,p_ext_remain_duration => l_ext_remain_duration
27547 ,p_ext_sch_duration => l_ext_sch_duration
27548 -- (end venkat) new params for bug #3450684 ----------------------------------------------
27549
27550 -- Progress Management Changes. Bug # 3420093.
27551 ,p_etc_effort => l_etc_effort
27552 ,p_percent_complete => l_percent_complete
27553 -- Progress Management Changes. Bug # 3420093.
27554
27555 );
27556
27557 l_stage := '1.4';
27558
27559 if (l_return_status <> 'S') then
27560 p_return_status := l_return_status;
27561 return;
27562 end if;
27563
27564 END LOOP;
27565
27566 p_return_status := l_return_status;
27567
27568 -- 4537865
27569 EXCEPTION
27570
27571 WHEN OTHERS THEN
27572 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27573
27574 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27575 THEN
27576 FND_MSG_PUB.add_exc_msg
27577 ( p_pkg_name => G_PKG_NAME
27578 , p_procedure_name => 'load_tasks');
27579 END IF;
27580
27581 END load_tasks;
27582
27583
27584 PROCEDURE fetch_tasks
27585 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27586 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
27587 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27588 ,p_task_index IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
27589 ,p_pa_task_id OUT NOCOPY PA_NUM_1000_NUM /*Added the nocopy check for 4537865 */
27590 ,p_task_version_id OUT NOCOPY PA_NUM_1000_NUM /*Added the nocopy check for 4537865 */
27591 ,p_pm_task_reference OUT NOCOPY PA_VC_1000_150 /*Added the nocopy check for 4537865 */
27592 ,p_task_return_status OUT NOCOPY PA_VC_1000_150 /*Added the nocopy check for 4537865 */
27593 )
27594 IS
27595
27596 l_return_status VARCHAR2(1):= 'S';
27597 l_pm_task_reference PA_VC_1000_150 := PA_VC_1000_150(1);
27598 l_task_return_status PA_VC_1000_150 := PA_VC_1000_150(1);
27599 l_pa_task_id PA_NUM_1000_NUM := PA_NUM_1000_NUM(1);
27600 --project structrues
27601 l_task_version_id PA_NUM_1000_NUM := PA_NUM_1000_NUM(1);
27602 --project structures
27603 BEGIN
27604
27605 l_pm_task_reference.extend(1000);
27606 l_task_return_status.extend(1000);
27607 l_pa_task_id.extend(1000);
27608 --project structrues
27609 l_task_version_id.extend(1000);
27610 --project structrues
27611
27612 FOR i in 1..1000 LOOP
27613
27614 if p_task_index(i) is null or p_task_index(i) = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM then
27615 p_return_status := l_return_status;
27616 p_pm_task_reference := l_pm_task_reference;
27617 p_task_return_status := l_task_return_status;
27618 p_pa_task_id := l_pa_task_id;
27619 return;
27620 end if;
27621
27622 fetch_task( p_api_version_number => p_api_version_number
27623 ,p_init_msg_list => p_init_msg_list
27624 ,p_return_status => l_return_status
27625 ,p_task_index => p_task_index(i)
27626 ,p_pa_task_id => l_pa_task_id(i)
27627 ,p_pm_task_reference => l_pm_task_reference(i)
27628 ,p_task_return_status => l_task_return_status(i));
27629
27630 if (l_return_status <> 'S') then
27631 p_return_status := l_return_status;
27632 p_pm_task_reference := l_pm_task_reference;
27633 p_task_return_status := l_task_return_status;
27634 p_pa_task_id := l_pa_task_id;
27635 return;
27636 end if;
27637
27638
27639 fetch_task_version( p_api_version_number => p_api_version_number
27640 ,p_init_msg_list => p_init_msg_list
27641 ,p_return_status => l_return_status
27642 ,p_task_index => p_task_index(i)
27643 ,p_task_version_id => l_task_version_id(i)
27644 ,p_task_return_status => l_task_return_status(i));
27645
27646 if (l_return_status <> 'S') then
27647 p_return_status := l_return_status;
27648 p_pm_task_reference := l_pm_task_reference;
27649 p_task_return_status := l_task_return_status;
27650 p_pa_task_id := l_pa_task_id;
27651 return;
27652 end if;
27653
27654 END LOOP;
27655
27656 p_return_status := l_return_status;
27657 p_pm_task_reference := l_pm_task_reference;
27658 p_task_return_status := l_task_return_status;
27659 p_pa_task_id := l_pa_task_id;
27660
27661 --project structrues
27662 p_task_version_id := l_task_version_id;
27663 --project structrues
27664
27665 -- 4537865
27666 EXCEPTION
27667
27668 WHEN OTHERS THEN
27669 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27670
27671 p_pm_task_reference := NULL ;
27672 p_pa_task_id := NULL ;
27673 p_task_version_id := NULL ;
27674
27675 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27676 THEN
27677 FND_MSG_PUB.add_exc_msg
27678 ( p_pkg_name => G_PKG_NAME
27679 , p_procedure_name => 'fetch_tasks');
27680 END IF;
27681
27682 END fetch_tasks;
27683 -- <EA>
27684 --------------------------------------------------------------------------------
27685 --Name: LOAD_EXTENSIBLE_ATTRIBUTE
27686 --Type: Procedure
27687 --Description: This procedure can be used to move an extensible attribute value
27688 -- from the client side to a PL/SQL table on the server side,
27689 -- where it will be used by a LOAD/EXECUTE/FETCH cycle.
27690 --
27691 --Called subprograms:
27692 --
27693 --History:
27694 -- 16-APR-2003 zahid.khan Initial creation
27695 --
27696
27697 PROCEDURE load_extensible_attribute(P_API_VERSION_NUMBER IN NUMBER := 1.0,
27698 P_INIT_MSG_LIST IN VARCHAR2 := FND_API.G_FALSE,
27699 P_COMMIT IN VARCHAR2 := FND_API.G_FALSE,
27700 X_RETURN_STATUS OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
27701 P_TRANSACTION_TYPE IN VARCHAR2 := PA_PROJECT_PUB.G_SYNC_MODE,
27702 P_TASK_ID IN NUMBER := NULL,
27703 P_TASK_REFERENCE IN VARCHAR2 := NULL,
27704 P_ATTR_GRP_INTERNAL_NAME IN VARCHAR2 := NULL,
27705 P_ATTR_GRP_ID IN NUMBER := NULL,
27706 P_ATTR_GRP_ROW_INDEX IN NUMBER := NULL,
27707 P_ATTR_INTERNAL_NAME IN VARCHAR2 := NULL,
27708 P_ATTR_VALUE_STR IN VARCHAR2 := NULL,
27709 P_ATTR_VALUE_NUM IN NUMBER := NULL,
27710 P_ATTR_VALUE_NUM_UOM IN VARCHAR2 := NULL,
27711 P_ATTR_VALUE_DATE IN DATE := NULL,
27712 P_ATTR_DISP_VALUE IN VARCHAR2 := NULL
27713 )
27714
27715 IS
27716
27717 l_api_name CONSTANT VARCHAR2(30) := 'Load_Extensible_Attribute';
27718 i NUMBER;
27719
27720 BEGIN
27721 -- Standard begin of API savepoint
27722
27723 SAVEPOINT load_extensible_attribute_pub;
27724
27725 -- Standard call to check for call compatibility.
27726 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
27727 p_api_version_number ,
27728 l_api_name,
27729 G_PKG_NAME)
27730 THEN
27731 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27732 END IF;
27733
27734 -- Initialize the message table if requested.
27735 IF FND_API.TO_BOOLEAN( p_init_msg_list )
27736 THEN
27737 FND_MSG_PUB.initialize;
27738 END IF;
27739
27740 -- assign a value to the global counter for this table
27741 G_ext_attr_tbl_count := G_ext_attr_tbl_count + 1;
27742
27743 G_ext_attr_in_tbl(G_ext_attr_tbl_count).PROJ_ELEMENT_ID := P_TASK_ID;
27744 G_ext_attr_in_tbl(G_ext_attr_tbl_count).PROJ_ELEMENT_REFERENCE := P_TASK_REFERENCE;
27745 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ROW_IDENTIFIER := P_ATTR_GRP_ROW_INDEX;
27746 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_GROUP_INT_NAME := P_ATTR_GRP_INTERNAL_NAME;
27747 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_GROUP_ID := P_ATTR_GRP_ID;
27748 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_INT_NAME := P_ATTR_INTERNAL_NAME;
27749 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_STR := P_ATTR_VALUE_STR;
27750 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_NUM := P_ATTR_VALUE_NUM;
27751 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_VALUE_DATE := P_ATTR_VALUE_DATE;
27752 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_DISP_VALUE := P_ATTR_DISP_VALUE;
27753 G_ext_attr_in_tbl(G_ext_attr_tbl_count).ATTR_UNIT_OF_MEASURE:= P_ATTR_VALUE_NUM_UOM;
27754 G_ext_attr_in_tbl(G_ext_attr_tbl_count).TRANSACTION_TYPE := P_TRANSACTION_TYPE;
27755
27756 -- Set API return status to success
27757 x_return_status := FND_API.G_RET_STS_SUCCESS;
27758
27759 EXCEPTION
27760
27761 WHEN FND_API.G_EXC_ERROR
27762 THEN
27763 ROLLBACK TO load_extensible_attribute_pub;
27764
27765 x_return_status := FND_API.G_RET_STS_ERROR;
27766
27767 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
27768 THEN
27769 ROLLBACK TO load_extensible_attribute_pub;
27770
27771 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27772
27773 WHEN OTHERS THEN
27774 ROLLBACK TO load_extensible_attribute_pub;
27775
27776 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27777
27778 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
27779 THEN
27780 FND_MSG_PUB.add_exc_msg
27781 ( p_pkg_name => G_PKG_NAME
27782 , p_procedure_name => l_api_name );
27783
27784 END IF;
27785
27786 END load_extensible_attribute;
27787
27788 --------------------------------------------------------------------------------
27789 --Name: LOAD_EXTENSIBLE_ATTRIBUTES
27790 --Type: Procedure
27791 --Description: This procedure can be used to bulk-load extensible attribute
27792 -- information into the global pl/sql table in batch of thousand
27793 -- records.
27794 --
27795 --Called subprograms: LOAD_EXTENSIBLE_ATTRIBUTE
27796 --
27797 --History:
27798 -- 22-APR-2003 zahid.khan Initial creation
27799 --
27800 PROCEDURE load_extensible_attributes(P_API_VERSION_NUMBER IN NUMBER,
27801 P_INIT_MSG_LIST IN VARCHAR2 := FND_API.G_FALSE,
27802 P_COMMIT IN VARCHAR2 := FND_API.G_FALSE,
27803 X_RETURN_STATUS OUT NOCOPY VARCHAR2, /*Added the nocopy check for 4537865 */
27804 P_TRANSACTION_TYPE IN PA_VC_1000_10 := PA_VC_1000_10(PA_PROJECT_PUB.G_SYNC_MODE),
27805 P_TASK_ID IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(NULL),
27806 P_TASK_REFERENCE IN PA_VC_1000_150 := PA_VC_1000_150(NULL),
27807 P_ATTR_GRP_INTERNAL_NAME IN PA_VC_1000_30 := PA_VC_1000_30(NULL),
27808 P_ATTR_GRP_ID IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(NULL),
27809 P_ATTR_GRP_ROW_INDEX IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(NULL),
27810 P_ATTR_INTERNAL_NAME IN PA_VC_1000_30 := PA_VC_1000_30(NULL),
27811 P_ATTR_VALUE_STR IN PA_VC_1000_1000 := PA_VC_1000_1000(NULL),
27812 P_ATTR_VALUE_NUM IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(NULL),
27813 P_ATTR_VALUE_NUM_UOM IN PA_VC_1000_30 := PA_VC_1000_30(NULL),
27814 P_ATTR_VALUE_DATE IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(NULL),
27815 P_ATTR_DISP_VALUE IN PA_VC_1000_150 := PA_VC_1000_150(NULL)
27816 )
27817 IS
27818 l_api_name CONSTANT VARCHAR2(30) := 'Load_Extensible_Attributes';
27819 l_return_status VARCHAR(1) := FND_API.G_RET_STS_SUCCESS;
27820
27821 l_proj_element_id_flag BOOLEAN := (P_TASK_ID.count = 1 and P_TASK_ID(1) = NULL);
27822 l_proj_element_reference_flag BOOLEAN := (P_TASK_REFERENCE.count = 1 and P_TASK_REFERENCE(1) = NULL);
27823 l_row_identifier_flag BOOLEAN := (P_ATTR_GRP_ROW_INDEX.count = 1 and P_ATTR_GRP_ROW_INDEX(1) = NULL);
27824 l_attr_group_int_name_flag BOOLEAN := (P_ATTR_GRP_INTERNAL_NAME.count = 1 and P_ATTR_GRP_INTERNAL_NAME(1) = NULL);
27825 l_attr_group_id_flag BOOLEAN := (P_ATTR_GRP_ID.count = 1 and P_ATTR_GRP_ID(1) = NULL);
27826 l_attr_int_name_flag BOOLEAN := (P_ATTR_INTERNAL_NAME.count = 1 and P_ATTR_INTERNAL_NAME(1) = NULL);
27827 l_attr_value_str_flag BOOLEAN := (P_ATTR_VALUE_STR.count = 1 and P_ATTR_VALUE_STR(1) = NULL);
27828 l_attr_value_num_flag BOOLEAN := (P_ATTR_VALUE_NUM.count = 1 and P_ATTR_VALUE_NUM(1) = NULL);
27829 l_attr_value_date_flag BOOLEAN := (P_ATTR_VALUE_DATE.count = 1 and P_ATTR_VALUE_DATE(1) = NULL);
27830 l_attr_disp_value_flag BOOLEAN := (P_ATTR_DISP_VALUE.count = 1 and P_ATTR_DISP_VALUE(1) = NULL);
27831 l_attr_unit_of_measure_flag BOOLEAN := (P_ATTR_VALUE_NUM_UOM.count = 1 and P_ATTR_VALUE_NUM_UOM(1) = NULL);
27832 l_transaction_type_flag BOOLEAN := (P_TRANSACTION_TYPE.count = 1 and P_TRANSACTION_TYPE(1) = PA_PROJECT_PUB.G_SYNC_MODE);
27833
27834 l_proj_element_id NUMBER;
27835 l_proj_element_reference VARCHAR2(30);
27836 l_attr_group_int_name VARCHAR2(30);
27837 l_attr_group_id NUMBER;
27838 l_attr_int_name VARCHAR2(30);
27839 l_attr_value_str VARCHAR2(1000);
27840 l_attr_value_num NUMBER;
27841 l_attr_value_date DATE;
27842 l_attr_disp_value VARCHAR2(150);
27843 l_attr_unit_of_measure VARCHAR2(30);
27844 l_user_row_identifier VARCHAR2(150);
27845 l_transaction_type VARCHAR2(30);
27846 BEGIN
27847 -- initialize message stack, if needed
27848 IF FND_API.to_boolean(p_init_msg_list)
27849 THEN
27850 FND_MSG_PUB.initialize;
27851 END IF;
27852
27853 -- There are two ways to load the global pl/sql table:
27854 -- 1. Call Load_Extensible_Attribute
27855 -- 2. Directly populate the table
27856 -- We will use approach 1.
27857 FOR i in 1..1000 LOOP
27858 -- increment global table record counter
27859 G_ext_attr_tbl_count := G_ext_attr_tbl_count + 1;
27860
27861 -- if Row Identifier is NULL, that means there were
27862 -- fewer than 1000 rows and we're done processing
27863 IF(P_ATTR_GRP_ROW_INDEX(i) IS NULL) THEN
27864 return;
27865 END IF;
27866
27867 -- default parameter values if they were not bound
27868 -- by caller. This needs to be done because
27869 -- there is no way to default the entire
27870 -- array contents to NULL via the procedure
27871 -- declaration. For e.g., using the syntax
27872 -- 'P_ATTR_UNIT_OF_MEASURE IN PA_VC_1000_30 := PA_VC_1000_30(NULL)'
27873 -- only sets the first array cell to the
27874 -- value NULL
27875 if (l_proj_element_id_flag <> TRUE) then
27876 l_proj_element_id := P_TASK_ID(i);
27877 else
27878 l_proj_element_id := NULL;
27879 end if;
27880
27881 if (l_proj_element_reference_flag <> TRUE) then
27882 l_proj_element_reference := P_TASK_REFERENCE(i);
27883 else
27884 l_proj_element_reference := NULL;
27885 end if;
27886
27887 if (l_attr_group_int_name_flag <> TRUE) then
27888 l_attr_group_int_name := P_ATTR_GRP_INTERNAL_NAME(i);
27889 else
27890 l_attr_group_int_name := NULL;
27891 end if;
27892
27893 if (l_attr_group_id_flag <> TRUE) then
27894 l_attr_group_id := P_ATTR_GRP_ID(i);
27895 else
27896 l_attr_group_id := NULL;
27897 end if;
27898
27899 if (l_attr_int_name_flag <> TRUE) then
27900 l_attr_int_name := P_ATTR_INTERNAL_NAME(i);
27901 else
27902 l_attr_int_name := NULL;
27903 end if;
27904
27905 if (l_attr_value_str_flag <> TRUE) then
27906 l_attr_value_str := P_ATTR_VALUE_STR(i);
27907 else
27908 l_attr_value_str := NULL;
27909 end if;
27910
27911 if (l_attr_value_num_flag <> TRUE) then
27912 l_attr_value_num := P_ATTR_VALUE_NUM(i);
27913 else
27914 l_attr_value_num := NULL;
27915 end if;
27916
27917 if (l_attr_value_date_flag <> TRUE) then
27918 l_attr_value_date := P_ATTR_VALUE_DATE(i);
27919 else
27920 l_attr_value_date := NULL;
27921 end if;
27922
27923 if (l_attr_disp_value_flag <> TRUE) then
27924 l_attr_disp_value := P_ATTR_DISP_VALUE(i);
27925 else
27926 l_attr_disp_value := NULL;
27927 end if;
27928
27929 if (l_attr_unit_of_measure_flag <> TRUE) then
27930 l_attr_unit_of_measure := P_ATTR_VALUE_NUM_UOM(i);
27931 else
27932 l_attr_unit_of_measure := NULL;
27933 end if;
27934
27935 if (l_transaction_type_flag <> TRUE) then
27936 l_transaction_type := P_TRANSACTION_TYPE(i);
27937 else
27938 l_transaction_type := PA_PROJECT_PUB.G_SYNC_MODE;
27939 end if;
27940
27941 -- call unit api
27942 load_extensible_attribute
27943 ( P_INIT_MSG_LIST => P_INIT_MSG_LIST,
27944 P_COMMIT => FND_API.G_FALSE,--bug 3766967
27945 X_RETURN_STATUS => l_return_status,
27946 P_TASK_ID => l_proj_element_id,
27947 P_TASK_REFERENCE => l_proj_element_reference,
27948 P_ATTR_GRP_ROW_INDEX => P_ATTR_GRP_ROW_INDEX(i),
27949 P_ATTR_GRP_INTERNAL_NAME => l_attr_group_int_name,
27950 P_ATTR_GRP_ID => l_attr_group_id,
27951 P_ATTR_INTERNAL_NAME => l_attr_int_name,
27952 P_ATTR_VALUE_STR => l_attr_value_str,
27953 P_ATTR_VALUE_NUM => l_attr_value_num,
27954 P_ATTR_VALUE_DATE => l_attr_value_date,
27955 P_ATTR_DISP_VALUE => l_attr_disp_value,
27956 P_ATTR_VALUE_NUM_UOM => l_attr_unit_of_measure,
27957 P_TRANSACTION_TYPE => l_transaction_type
27958 );
27959
27960 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
27961 THEN
27962 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
27963 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
27964 THEN
27965 RAISE FND_API.G_EXC_ERROR;
27966 END IF;
27967
27968 END LOOP;
27969
27970 X_RETURN_STATUS := FND_API.G_RET_STS_SUCCESS;
27971 EXCEPTION
27972 WHEN FND_API.G_EXC_ERROR THEN
27973 x_return_status := FND_API.G_RET_STS_ERROR;
27974 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
27975 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27976 WHEN OTHERS THEN
27977 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
27978 IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
27979 FND_MSG_PUB.Add_Exc_Msg
27980 ( G_PKG_NAME
27981 , l_api_name
27982 );
27983 END IF;
27984 END load_extensible_attributes;
27985 -- </EA>
27986
27987 --------------------------------------------------------------------------------
27988 --Project Structures
27989
27990 PROCEDURE load_structure
27991 ( p_api_version_number IN NUMBER
27992 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
27993 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
27994 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27995 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
27996 ,p_structure_version_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27997 ,P_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
27998 ,P_DESCRIPTION IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
27999 /*,P_VERSION_NUMBER IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28000 ,P_NAME IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28001 ,P_CURRENT_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28002 ,P_ORIGINAL_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28003 ,P_LATEST_EFF_PUBLISHED_FLAG IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28004 ,P_EFFECTIVE_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28005 ,P_PUBLISHED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28006 ,P_PUBLISHED_BY_PERSON_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28007 ,P_CURRENT_BASELINE_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28008 ,P_CURRENT_BASELINE_PERSON_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28009 ,P_ORIGINAL_BASELINE_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28010 ,P_ORIGINAL_BASELINE_PERSON_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28011 ,P_LOCK_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28012 ,P_LOCKED_BY_PERSON_ID IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28013 ,P_LOCKED_DATE IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
28014 ,P_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28015 ,P_WF_STATUS_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28016 ,P_PM_SOURCE_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28017 ,P_PM_SOURCE_REFERENCE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28018 ,P_CHANGE_REASON_CODE IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
28019 */
28020 ) IS
28021
28022 l_api_name CONSTANT VARCHAR2(30) := 'load_structure';
28023
28024
28025 BEGIN
28026
28027 -- Standard begin of API savepoint
28028
28029 SAVEPOINT load_structure_pub;
28030
28031 -- Standard call to check for call compatibility.
28032
28033 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28034 p_api_version_number ,
28035 l_api_name ,
28036 G_PKG_NAME )
28037 THEN
28038
28039 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28040
28041 END IF;
28042
28043 -- Initialize the message table if requested.
28044
28045 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28046 THEN
28047
28048 FND_MSG_PUB.initialize;
28049
28050 END IF;
28051
28052 -- Set API return status to success
28053
28054 p_return_status := FND_API.G_RET_STS_SUCCESS;
28055
28056 -- Bug 2978114.
28057 -- Validate the structure type. It should be FINANCIAL / WORKPLAN /DELIVERABLE.
28058 -- Throw an error otherwise.
28059
28060 IF nvl(p_structure_type,'-99') not in ('FINANCIAL','WORKPLAN', 'DELIVERABLE') THEN
28061 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28062 ,p_msg_name => 'PA_PS_INV_STR_TYPE');
28063
28064 RAISE FND_API.G_EXC_ERROR;
28065 END IF;
28066
28067 -- assign incoming parameters to the fields of global structure record
28068
28069 G_structure_in_rec.pa_project_id := p_pa_project_id;
28070 G_structure_in_rec.structure_type := p_structure_type;
28071 G_structure_in_rec.structure_version_name := p_structure_version_name;
28072 G_structure_in_rec.structure_version_id := p_structure_version_id;
28073 G_structure_in_rec.DESCRIPTION := p_DESCRIPTION;
28074 /*G_structure_in_rec.VERSION_NUMBER := p_VERSION_NUMBER;
28075 G_structure_in_rec.NAME := p_NAME;
28076 G_structure_in_rec.CURRENT_FLAG := p_CURRENT_FLAG;
28077 G_structure_in_rec.ORIGINAL_FLAG := p_ORIGINAL_FLAG;
28078 G_structure_in_rec.LATEST_EFF_PUBLISHED_FLAG := p_LATEST_EFF_PUBLISHED_FLAG;
28079 G_structure_in_rec.EFFECTIVE_DATE := p_EFFECTIVE_DATE;
28080 G_structure_in_rec.PUBLISHED_DATE := p_PUBLISHED_DATE;
28081 G_structure_in_rec.PUBLISHED_BY_PERSON_ID := p_PUBLISHED_BY_PERSON_ID;
28082 G_structure_in_rec.CURRENT_BASELINE_DATE := p_CURRENT_BASELINE_DATE;
28083 G_structure_in_rec.CURRENT_BASELINE_PERSON_ID := p_CURRENT_BASELINE_PERSON_ID;
28084 G_structure_in_rec.ORIGINAL_BASELINE_DATE := p_ORIGINAL_BASELINE_DATE;
28085 G_structure_in_rec.ORIGINAL_BASELINE_PERSON_ID := p_ORIGINAL_BASELINE_PERSON_ID;
28086 G_structure_in_rec.LOCK_STATUS_CODE := p_LOCK_STATUS_CODE;
28087 G_structure_in_rec.LOCKED_BY_PERSON_ID := p_LOCKED_BY_PERSON_ID;
28088 G_structure_in_rec.LOCKED_DATE := p_LOCKED_DATE;
28089 G_structure_in_rec.STATUS_CODE := p_STATUS_CODE;
28090 G_structure_in_rec.WF_STATUS_CODE := p_WF_STATUS_CODE;
28091 G_structure_in_rec.PM_SOURCE_CODE := p_PM_SOURCE_CODE;
28092 G_structure_in_rec.PM_SOURCE_REFERENCE := p_PM_SOURCE_REFERENCE;
28093 G_structure_in_rec.CHANGE_REASON_CODE := p_CHANGE_REASON_CODE;
28094 */
28095
28096 EXCEPTION
28097
28098 WHEN FND_API.G_EXC_ERROR
28099 THEN
28100 ROLLBACK TO load_structure_pub;
28101
28102 p_return_status := FND_API.G_RET_STS_ERROR;
28103
28104
28105 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28106 THEN
28107 ROLLBACK TO load_structure_pub;
28108
28109 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28110
28111
28112 WHEN OTHERS THEN
28113 ROLLBACK TO load_structure_pub;
28114
28115 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28116
28117 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28118 THEN
28119 FND_MSG_PUB.add_exc_msg
28120 ( p_pkg_name => G_PKG_NAME
28121 , p_procedure_name => l_api_name );
28122
28123 END IF;
28124
28125
28126 END load_structure;
28127
28128 PROCEDURE change_structure_status
28129 (p_api_version_number IN NUMBER := 1.0 -- for bug# 3802319
28130 , p_init_msg_list IN VARCHAR2 := 'F'
28131 , p_commit IN VARCHAR2 := 'F'
28132 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28133 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28134 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28135 , p_structure_version_id IN NUMBER
28136 , p_pa_project_id IN NUMBER
28137 , p_status_code IN VARCHAR2
28138 , p_process_mode IN VARCHAR2 := 'ONLINE'
28139 , p_published_struct_ver_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28140
28141 )IS
28142
28143 l_api_name CONSTANT VARCHAR2(30) := 'change_structure_status';
28144 l_update_wbs_flag VARCHAR2(1);
28145 l_msg_count NUMBER ;
28146 l_msg_data VARCHAR2(2000);
28147 l_return_status VARCHAR2(1);
28148 BEGIN
28149
28150 -- Begin fix for Bug # 4314797.
28151
28152 -- Standard begin of API savepoint
28153 -- Bug 10434606
28154 IF p_commit = FND_API.G_TRUE THEN
28155 SAVEPOINT change_structure_status;
28156 END IF;
28157
28158 -- Standard call to check for call compatibility.
28159
28160 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28161 p_api_version_number ,
28162 l_api_name ,
28163 G_PKG_NAME )
28164 THEN
28165
28166 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28167
28168 END IF;
28169
28170 -- Initialize the message table if requested.
28171
28172 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28173 THEN
28174
28175 FND_MSG_PUB.initialize;
28176
28177 END IF;
28178
28179 -- Set API return status to success
28180
28181 p_return_status := FND_API.G_RET_STS_SUCCESS;
28182
28183 -- End fix for Bug # 4314797.
28184
28185 PA_WORKPLAN_AMG_PUB.CHANGE_STRUCTURE_STATUS
28186 (
28187 p_api_version_number => p_api_version_number
28188 ,p_init_msg_list => p_init_msg_list
28189 ,p_commit => FND_API.G_FALSE--bug 3766967
28190 ,p_pa_project_id => p_pa_project_id
28191 ,p_structure_version_id => p_structure_version_id
28192 ,p_status_code => p_status_code
28193 ,p_return_status => p_return_status
28194 ,p_msg_count => p_msg_count
28195 ,p_msg_data => p_msg_data
28196 , p_published_struct_ver_id => p_published_struct_ver_id
28197 );
28198 IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28199 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28200 ELSIF (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28201 RAISE FND_API.G_EXC_ERROR;
28202 END IF;
28203
28204 -- PA L Changes 3010538
28205 --Commenting as for a publishing case we need to always check for update wbs required flag
28206 -- IF ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'N' ) OR
28207 -- ( PA_PROJECT_PUB.G_IS_WP_VERSIONING_ENABLED = 'Y' AND
28208 -- PA_PROJECT_PUB.G_IS_WP_SEPARATE_FROM_FN = 'N' AND
28209 -- PA_PROJECT_PUB.G_Published_version_exists = 'N')
28210 -- THEN
28211
28212 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => p_pa_project_id
28213 ,p_structure_version_id => p_published_struct_ver_id ) ;
28214 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
28215 IF p_process_mode = 'ONLINE' THEN
28216
28217 --Added by rtarway for BUG 4032291
28218 if p_status_code = 'STRUCTURE_PUBLISHED' then
28219 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_PUBLISH'
28220 ,p_project_id => p_pa_project_id
28221 ,p_commit => p_commit
28222 -- Fix for Bug # 4314797.
28223 ,p_structure_version_id => p_structure_version_id
28224 ,p_pub_struc_ver_id => p_published_struct_ver_id
28225 ,x_return_status => l_return_status
28226 ,x_msg_count => l_msg_count
28227 ,x_msg_data => l_msg_data ) ;
28228 --Added by rtarway for BUG 4032291
28229 else
28230 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
28231 ,p_project_id => p_pa_project_id
28232 ,p_structure_version_id => p_published_struct_ver_id
28233 ,x_return_status => l_return_status
28234 ,x_msg_count => l_msg_count
28235 ,x_msg_data => l_msg_data ) ;
28236 end if;
28237
28238
28239
28240 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
28241 THEN
28242 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28243 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
28244 THEN
28245 RAISE FND_API.G_EXC_ERROR;
28246 END IF;
28247 ELSIF p_process_mode = 'CONCURRENT' THEN
28248 /* Added if block for bug 5390015 */
28249 IF p_status_code = 'STRUCTURE_PUBLISHED' THEN
28250
28251 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_PUBLISH'
28252 ,p_project_id => p_pa_project_id
28253 ,p_commit => p_commit
28254 ,p_structure_version_id => p_structure_version_id
28255 ,p_pub_struc_ver_id => p_published_struct_ver_id
28256 ,x_return_status => l_return_status
28257 ,x_msg_count => l_msg_count
28258 ,x_msg_data => l_msg_data ) ;
28259 ELSE
28260
28261 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
28262 ,p_project_id => p_pa_project_id
28263 ,p_structure_version_id => p_published_struct_ver_id
28264 ,x_return_status => l_return_status
28265 ,x_msg_count => l_msg_count
28266 ,x_msg_data => l_msg_data ) ;
28267 END IF;
28268
28269 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
28270 THEN
28271 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28272 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
28273 THEN
28274 RAISE FND_API.G_EXC_ERROR;
28275 END IF;
28276
28277
28278 END IF ;
28279 END IF ;
28280 -- END IF ;
28281
28282 -- PA L Changes 3010538
28283
28284 EXCEPTION
28285 WHEN FND_API.G_EXC_ERROR THEN
28286 p_return_status := FND_API.G_RET_STS_ERROR;
28287
28288 -- 4537865
28289 p_published_struct_ver_id := NULL ;
28290
28291 -- Begin fix for Bug # 4314797.
28292 -- Bug 10434606
28293
28294 IF p_commit = FND_API.G_TRUE THEN
28295 ROLLBACK TO change_structure_status;
28296 END IF;
28297
28298 p_msg_count := l_msg_count;
28299 p_msg_data := l_msg_data;
28300
28301 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
28302 , p_data => p_msg_data);
28303
28304 -- End fix for Bug # 4314797.
28305
28306 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
28307 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28308
28309 -- 4537865
28310 p_published_struct_ver_id := NULL ;
28311
28312 -- Begin fix for Bug # 4314797.
28313 -- Bug 10434606
28314 IF p_commit = FND_API.G_TRUE THEN
28315 ROLLBACK TO change_structure_status;
28316 END IF;
28317
28318 p_msg_count := l_msg_count;
28319 p_msg_data := l_msg_data;
28320
28321 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
28322 , p_data => p_msg_data);
28323
28324 -- End fix for Bug # 4314797.
28325
28326
28327 WHEN OTHERS THEN
28328 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28329
28330 -- 4537865
28331 p_published_struct_ver_id := NULL ;
28332
28333 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
28334 FND_MSG_PUB.add_exc_msg
28335 (p_pkg_name => G_PKG_NAME
28336 ,p_procedure_name => l_api_name);
28337 END IF;
28338
28339
28340 -- Begin fix for Bug # 4314797.
28341 -- Bug 10434606
28342
28343 IF p_commit = FND_API.G_TRUE THEN
28344 ROLLBACK TO change_structure_status;
28345 END IF;
28346
28347 p_msg_count := l_msg_count;
28348 p_msg_data := l_msg_data;
28349
28350 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
28351 , p_data => p_msg_data);
28352
28353 -- End fix for Bug # 4314797.
28354
28355 END change_structure_status;
28356
28357
28358 PROCEDURE baseline_structure
28359 (p_api_version_number IN NUMBER
28360 , p_init_msg_list IN VARCHAR2 := 'F'
28361 , p_commit IN VARCHAR2 := 'F'
28362 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28363 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28364 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28365 , p_structure_version_id IN NUMBER
28366 , p_pa_project_id IN NUMBER
28367
28368 ) IS
28369
28370 l_api_name CONSTANT VARCHAR2(30) := 'baseline_structure';
28371
28372 BEGIN
28373
28374 -- 4537865
28375 --Initialize p_return_status to Success
28376 p_return_status := FND_API.G_RET_STS_SUCCESS ;
28377
28378 PA_WORKPLAN_AMG_PUB.BASELINE_STRUCTURE
28379 (
28380 p_api_version_number => p_api_version_number
28381 ,p_init_msg_list => p_init_msg_list
28382 ,p_commit => FND_API.G_FALSE--bug 3766967
28383 ,p_pa_project_id => p_pa_project_id
28384 ,p_structure_version_id => p_structure_version_id
28385 ,p_return_status => p_return_status
28386 ,p_msg_count => p_msg_count
28387 ,p_msg_data => p_msg_data
28388 );
28389 IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28390 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28391 ELSIF (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28392 RAISE FND_API.G_EXC_ERROR;
28393 END IF;
28394
28395 EXCEPTION
28396 WHEN FND_API.G_EXC_ERROR THEN
28397 p_return_status := FND_API.G_RET_STS_ERROR;
28398
28399 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
28400 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28401
28402 WHEN OTHERS THEN
28403 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28404
28405 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
28406 FND_MSG_PUB.add_exc_msg
28407 (p_pkg_name => G_PKG_NAME
28408 ,p_procedure_name => l_api_name);
28409 END IF;
28410 END baseline_structure;
28411
28412
28413 PROCEDURE delete_structure_version
28414 ( p_api_version_number IN NUMBER := 1.0 -- for bug# 3802759
28415 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
28416 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
28417 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28418 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28419 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28420 ,p_structure_version_id IN NUMBER
28421 ,p_record_version_number IN NUMBER
28422 ) IS
28423 l_api_name CONSTANT VARCHAR2(30) := 'delete_structure_version';
28424
28425 BEGIN
28426
28427 -- Standard begin of API savepoint
28428
28429 SAVEPOINT delete_structure_ver_pub;
28430
28431 -- Standard call to check for call compatibility.
28432
28433 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28434 p_api_version_number ,
28435 l_api_name ,
28436 G_PKG_NAME )
28437 THEN
28438
28439 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28440
28441 END IF;
28442
28443 -- Initialize the message table if requested.
28444
28445 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28446 THEN
28447
28448 FND_MSG_PUB.initialize;
28449
28450 END IF;
28451
28452 -- Set API return status to success
28453
28454 p_return_status := FND_API.G_RET_STS_SUCCESS;
28455
28456 PA_PROJ_TASK_STRUC_PUB.DELETE_STRUCTURE_VERSION(
28457 p_api_version => p_api_version_number
28458 ,p_init_msg_list => p_init_msg_list
28459 ,p_commit => FND_API.G_FALSE--bug 3766967
28460 ,p_calling_module => 'AMG'
28461 ,p_structure_version_id => p_structure_version_id
28462 ,p_record_version_number => p_record_version_number
28463 ,x_return_status => p_return_status
28464 ,x_msg_count => p_msg_count
28465 ,x_msg_data => p_msg_data
28466 );
28467
28468 IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28469 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28470 ELSIF (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28471 RAISE FND_API.G_EXC_ERROR;
28472 END IF;
28473
28474 EXCEPTION
28475
28476 WHEN FND_API.G_EXC_ERROR
28477 THEN
28478 ROLLBACK TO delete_structure_ver_pub;
28479
28480 p_return_status := FND_API.G_RET_STS_ERROR;
28481
28482
28483 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28484 THEN
28485 ROLLBACK TO delete_structure_ver_pub;
28486
28487 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28488
28489
28490 WHEN OTHERS THEN
28491 ROLLBACK TO delete_structure_ver_pub;
28492
28493 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28494
28495 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28496 THEN
28497 FND_MSG_PUB.add_exc_msg
28498 ( p_pkg_name => G_PKG_NAME
28499 , p_procedure_name => l_api_name );
28500
28501 END IF;
28502
28503 END delete_structure_version;
28504
28505 --Project Structures
28506
28507 --Project Connect 4.0
28508 --------------------------------------------------------------------------------
28509 --Name: fetch_structure_version
28510 --Type: Procedure
28511 --Description: This procedure can be used to get the structure version ids
28512 -- to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
28513 --
28514 --Called subprograms:
28515 --
28516 --
28517 --
28518 --History:
28519 -- 03-DEC-2002 Created
28520 --
28521
28522 PROCEDURE fetch_structure_version
28523 ( p_api_version_number IN NUMBER
28524 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
28525 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28526 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
28527 ,p_pa_structure_version_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28528 ,p_struc_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28529 )
28530 IS
28531 l_api_name CONSTANT VARCHAR2(30) := 'fetch_structure_version';
28532 l_index NUMBER;
28533 i NUMBER;
28534
28535 BEGIN
28536
28537 -- Standard begin of API savepoint
28538
28539 SAVEPOINT fetch_struc_pub;
28540
28541 -- Standard call to check for call compatibility.
28542
28543 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28544 p_api_version_number ,
28545 l_api_name ,
28546 G_PKG_NAME )
28547 THEN
28548
28549 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28550
28551 END IF;
28552
28553 -- Initialize the message table if requested.
28554
28555 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28556 THEN
28557
28558 FND_MSG_PUB.initialize;
28559
28560 END IF;
28561
28562 -- Set API return status to success
28563
28564 p_return_status := FND_API.G_RET_STS_SUCCESS;
28565
28566
28567 FOR i in 1..G_Struc_out_tbl.count LOOP
28568
28569 IF G_struc_out_tbl(i).structure_type = p_structure_type
28570 THEN
28571
28572 IF G_struc_out_tbl(i).structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28573 THEN
28574 p_pa_structure_version_id := NULL;
28575 ELSE
28576
28577 p_pa_structure_version_id := G_struc_out_tbl(i).structure_version_id;
28578
28579 END IF;
28580 p_struc_return_status := G_struc_out_tbl(i).return_status;
28581 exit;
28582 END IF;
28583 END LOOP;
28584
28585 EXCEPTION
28586 WHEN FND_API.G_EXC_ERROR
28587 THEN
28588 ROLLBACK TO fetch_struc_pub;
28589
28590 p_return_status := FND_API.G_RET_STS_ERROR;
28591
28592 -- 4537865
28593 p_pa_structure_version_id := NULL ;
28594 p_struc_return_status := NULL ;
28595
28596
28597 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28598 THEN
28599 ROLLBACK TO fetch_struc_pub;
28600
28601 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28602
28603 -- 4537865
28604 p_pa_structure_version_id := NULL ;
28605 p_struc_return_status := NULL ;
28606
28607
28608 WHEN OTHERS THEN
28609 ROLLBACK TO fetch_struc_pub;
28610
28611 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28612
28613 -- 4537865
28614 p_pa_structure_version_id := NULL ;
28615 p_struc_return_status := NULL ;
28616
28617 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28618 THEN
28619 FND_MSG_PUB.add_exc_msg
28620 ( p_pkg_name => G_PKG_NAME
28621 , p_procedure_name => l_api_name );
28622
28623 END IF;
28624
28625
28626 END fetch_structure_version;
28627
28628
28629 --------------------------------------------------------------------------------
28630 --Name: fetch_task_version
28631 --Type: Procedure
28632 --Description: This procedure can be used to get the task version related output data
28633 -- to the client side as part part of the LOAD/EXECUTE/FETCH cycle.
28634 --
28635 --Called subprograms:
28636 --
28637 --
28638 --
28639 --History:
28640 -- 30-JAN-2003 anlee Created
28641 --
28642
28643 PROCEDURE fetch_task_version
28644 ( p_api_version_number IN NUMBER
28645 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
28646 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28647 ,p_task_index IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28648 ,p_task_version_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28649 ,p_task_return_status OUT NOCOPY VARCHAR2 ) /*Added the nocopy check for 4537865 */
28650 IS
28651
28652 l_api_name CONSTANT VARCHAR2(30) := 'fetch_task_version';
28653 l_index NUMBER;
28654 i NUMBER;
28655
28656 BEGIN
28657
28658 -- Standard begin of API savepoint
28659
28660 SAVEPOINT fetch_task_version_pub;
28661
28662 -- Standard call to check for call compatibility.
28663
28664 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28665 p_api_version_number ,
28666 l_api_name ,
28667 G_PKG_NAME )
28668 THEN
28669
28670 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28671
28672 END IF;
28673
28674 -- Initialize the message table if requested.
28675
28676 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28677 THEN
28678
28679 FND_MSG_PUB.initialize;
28680
28681 END IF;
28682
28683 -- Set API return status to success
28684
28685 p_return_status := FND_API.G_RET_STS_SUCCESS;
28686
28687 -- Check Task index value, when they don't provide an index we will error out
28688 IF p_task_index = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28689 OR p_task_index IS NULL
28690 THEN
28691 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28692 THEN
28693 pa_interface_utils_pub.map_new_amg_msg
28694 ( p_old_message_code => 'PA_INDEX_NOT_PROVIDED'
28695 ,p_msg_attribute => 'CHANGE'
28696 ,p_resize_flag => 'N'
28697 ,p_msg_context => 'GENERAL'
28698 ,p_attribute1 => ''
28699 ,p_attribute2 => ''
28700 ,p_attribute3 => ''
28701 ,p_attribute4 => ''
28702 ,p_attribute5 => '');
28703 END IF;
28704
28705 p_return_status := FND_API.G_RET_STS_ERROR;
28706 RAISE FND_API.G_EXC_ERROR;
28707 ELSE
28708 l_index := p_task_index;
28709 END IF;
28710
28711 If G_Tasks_out_tbl.exists(l_index) THEN
28712 -- assign global table fields to the outgoing parameter
28713 -- we don't want to return the big number G_PA_MISS_NUM
28714
28715 --project structrues
28716 IF G_tasks_out_tbl(l_index).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28717 THEN
28718 p_task_version_id := NULL;
28719 ELSE
28720
28721 p_task_version_id := G_tasks_out_tbl(l_index).task_version_id;
28722
28723 END IF;
28724 --project structrues
28725
28726 p_task_return_status := G_tasks_out_tbl(l_index).return_status;
28727
28728 END IF;
28729
28730 EXCEPTION
28731
28732 WHEN FND_API.G_EXC_ERROR
28733 THEN
28734 ROLLBACK TO fetch_task_version_pub;
28735
28736 p_return_status := FND_API.G_RET_STS_ERROR;
28737
28738 -- 4537865
28739 p_task_version_id := NULL ;
28740
28741
28742 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28743 THEN
28744 ROLLBACK TO fetch_task_version_pub;
28745
28746 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28747
28748 -- 4537865
28749 p_task_version_id := NULL ;
28750
28751
28752 WHEN OTHERS THEN
28753 ROLLBACK TO fetch_task_version_pub;
28754
28755 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28756 -- 4537865
28757 p_task_version_id := NULL ;
28758
28759 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28760 THEN
28761 FND_MSG_PUB.add_exc_msg
28762 ( p_pkg_name => G_PKG_NAME
28763 , p_procedure_name => l_api_name );
28764
28765 END IF;
28766
28767
28768 END fetch_task_version;
28769
28770 --bug 2765115
28771 PROCEDURE get_task_version
28772 ( p_api_version_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28773 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
28774 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28775 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28776 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28777 ,p_pa_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
28778 ,p_task_version_id OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28779 ) IS
28780
28781 l_api_name CONSTANT VARCHAR2(30) := 'get_task_version';
28782 l_index NUMBER;
28783 i NUMBER;
28784
28785 BEGIN
28786
28787 -- Standard begin of API savepoint
28788
28789 SAVEPOINT get_task_version_pub;
28790
28791 -- Standard call to check for call compatibility.
28792
28793 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28794 p_api_version_number ,
28795 l_api_name ,
28796 G_PKG_NAME )
28797 THEN
28798
28799 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28800
28801 END IF;
28802
28803 -- Initialize the message table if requested.
28804
28805 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28806 THEN
28807
28808 FND_MSG_PUB.initialize;
28809
28810 END IF;
28811
28812 -- Set API return status to success
28813 p_return_status := FND_API.G_RET_STS_SUCCESS;
28814
28815 IF ( p_pa_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_task_id IS NULL ) OR
28816 ( p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_project_id IS NULL ) OR
28817 ( p_pa_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_structure_version_id IS NULL )
28818 THEN
28819 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28820 THEN
28821 --My suggestion was to create a new message but Sakthi asked me use the following
28822 --Since these changes are done at the last moment of PA K around build9. We are hesitant to
28823 --log a new message bug. Sakthi suggested to use an existing message PA_PS_INV_STR_VER_ID
28824 --although it does not convey full message here and we will change it later
28825 --The message PA_PS_INV_STR_VER_ID does not have the AMG at the end so I cant use the standard api
28826 --call for AMG messages i.e,pa_interface_utils_pub.map_new_amg_msg
28827
28828 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28829 ,p_msg_name => 'PA_PS_INV_STR_VER_ID');
28830 END IF;
28831 p_return_status := FND_API.G_RET_STS_ERROR;
28832 RAISE FND_API.G_EXC_ERROR;
28833 END IF;
28834
28835 PA_PROJ_TASK_STRUC_PUB.get_task_version_id(
28836 p_project_id => p_pa_project_id
28837 ,p_structure_version_id => p_pa_structure_version_id
28838 ,p_task_id => p_pa_task_id
28839 ,x_task_version_id => p_task_version_id
28840 );
28841
28842 IF p_task_version_id IS NULL
28843 THEN
28844 p_return_status := FND_API.G_RET_STS_ERROR;
28845 RAISE FND_API.G_EXC_ERROR;
28846 END IF;
28847
28848 EXCEPTION
28849
28850 WHEN FND_API.G_EXC_ERROR
28851 THEN
28852 ROLLBACK TO get_task_version_pub;
28853
28854 p_return_status := FND_API.G_RET_STS_ERROR;
28855
28856 --4537865
28857 p_task_version_id := NULL ;
28858
28859
28860 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
28861 THEN
28862 ROLLBACK TO get_task_version_pub;
28863
28864 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28865 --4537865
28866 p_task_version_id := NULL ;
28867
28868
28869 WHEN OTHERS THEN
28870 ROLLBACK TO get_task_version_pub;
28871
28872 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
28873 --4537865
28874 p_task_version_id := NULL ;
28875 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
28876 THEN
28877 FND_MSG_PUB.add_exc_msg
28878 ( p_pkg_name => G_PKG_NAME
28879 , p_procedure_name => l_api_name );
28880
28881 END IF;
28882
28883 END get_task_version;
28884 --bug 2765115
28885
28886 --------------------------- FP M changes begin (venkat) 4 ------------------------------------
28887
28888 PROCEDURE change_current_working_version
28889 (p_api_version_number IN NUMBER
28890 , p_init_msg_list IN VARCHAR2 := 'F'
28891 , p_commit IN VARCHAR2 := 'F'
28892 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28893 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
28894 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
28895 , p_structure_version_id IN NUMBER
28896 , p_pa_project_id IN NUMBER
28897 )
28898
28899 IS
28900
28901 l_api_name CONSTANT VARCHAR2(30) := 'change_current_working_version';
28902 l_rec_version_number NUMBER;
28903 l_pev_structure_id NUMBER;
28904 l_name VARCHAR2(30);
28905
28906 CURSOR l_temp_cursor
28907 IS
28908 SELECT record_version_number, pev_structure_id, name
28909 FROM PA_PROJ_ELEM_VER_STRUCTURE
28910 WHERE project_id = p_pa_project_id and element_version_id = p_structure_version_id;
28911
28912
28913 BEGIN
28914
28915 -- Standard begin of API savepoint
28916
28917 SAVEPOINT get_task_version_pub;
28918
28919 -- Standard call to check for call compatibility.
28920
28921 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
28922 p_api_version_number ,
28923 l_api_name ,
28924 G_PKG_NAME )
28925 THEN
28926
28927 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28928
28929 END IF;
28930
28931 -- Initialize the message table if requested.
28932
28933 IF FND_API.TO_BOOLEAN( p_init_msg_list )
28934 THEN
28935
28936 FND_MSG_PUB.initialize;
28937
28938 END IF;
28939
28940 -- Set API return status to success
28941 p_return_status := FND_API.G_RET_STS_SUCCESS;
28942
28943 IF ( p_pa_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_pa_project_id IS NULL ) OR
28944 ( p_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR p_structure_version_id IS NULL )
28945 THEN
28946 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28947 THEN
28948
28949 -- Using the message name PA_PS_INV_STR_VER_ID
28950
28951 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28952 ,p_msg_name => 'PA_PS_INV_STR_VER_ID');
28953 END IF;
28954 p_return_status := FND_API.G_RET_STS_ERROR;
28955 RAISE FND_API.G_EXC_ERROR;
28956 END IF;
28957
28958 OPEN l_temp_cursor;
28959 FETCH l_temp_cursor INTO l_rec_version_number, l_pev_structure_id, l_name;
28960
28961 IF l_temp_cursor%NOTFOUND
28962 THEN
28963 CLOSE l_temp_cursor;
28964 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
28965 THEN
28966 -- Using the message name PA_PS_INV_STR_VER_ID
28967 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
28968 ,p_msg_name => 'PA_PS_INV_STR_VER_ID');
28969 END IF;
28970 p_return_status := FND_API.G_RET_STS_ERROR;
28971 RAISE FND_API.G_EXC_ERROR;
28972 END IF;
28973 CLOSE l_temp_cursor;
28974
28975 PA_PROJECT_STRUCTURE_PVT1.update_structure_version_attr
28976 (p_api_version => p_api_version_number
28977 ,p_init_msg_list => p_init_msg_list
28978 ,p_commit => FND_API.G_FALSE--bug 3766967
28979 ,p_pev_structure_id => l_pev_structure_id
28980 ,p_structure_version_name => l_name
28981 ,p_record_version_number => l_rec_version_number
28982 ,p_current_working_ver_flag => 'Y'
28983 ,x_return_status => p_return_status
28984 ,x_msg_count => p_msg_count
28985 ,x_msg_data => p_msg_data
28986 );
28987
28988 IF (p_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
28989 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
28990 ELSIF (p_return_status = FND_API.G_RET_STS_ERROR) THEN
28991 RAISE FND_API.G_EXC_ERROR;
28992 END IF;
28993
28994 EXCEPTION
28995
28996 WHEN FND_API.G_EXC_ERROR
28997 THEN
28998 ROLLBACK TO get_task_version_pub;
28999
29000 p_return_status := FND_API.G_RET_STS_ERROR;
29001
29002
29003 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29004 THEN
29005 ROLLBACK TO get_task_version_pub;
29006
29007 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29008
29009
29010 WHEN OTHERS THEN
29011 ROLLBACK TO get_task_version_pub;
29012
29013 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29014 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29015 THEN
29016 FND_MSG_PUB.add_exc_msg
29017 ( p_pkg_name => G_PKG_NAME
29018 , p_procedure_name => l_api_name );
29019
29020 END IF;
29021
29022
29023 END change_current_working_version;
29024
29025 -------------------------- FP M changes end (venkat) 4 ----------------------------------------
29026
29027 -- Progress Management Changes. Bug # 3420093.
29028
29029 -- Name: apply_lp_prog_on_cwv
29030 -- Type: Procedure
29031 -- Description: This procedure can be used to apply the latest progress on the given
29032 -- structure_version.
29033 --
29034 -- Called subprograms: pa_progress_pub.apply_lp_prog_on_cwv().
29035 --
29036 --
29037 --
29038 --History:
29039 --
29040 -- 02-APR-2004 Rakesh Raghavan Created
29041
29042 PROCEDURE apply_lp_prog_on_cwv(
29043 p_api_version IN NUMBER :=1.0
29044 ,p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE
29045 ,p_commit IN VARCHAR2 :=FND_API.G_FALSE
29046 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29047 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29048 ,p_working_str_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29049 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29050 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
29051 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29052 )
29053
29054 IS
29055 l_api_name CONSTANT VARCHAR2(30) := 'APPLY_LP_PROG_ON_CWV';
29056 l_api_version CONSTANT NUMBER := p_api_version;
29057 l_user_id NUMBER := FND_GLOBAL.USER_ID;
29058 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
29059 l_return_status VARCHAR2(1);
29060 l_msg_count NUMBER;
29061 l_msg_data VARCHAR2(250);
29062
29063 l_function_allowed VARCHAR2(1);
29064 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
29065 l_debug_mode VARCHAR2(1);
29066
29067 l_project_id NUMBER;
29068
29069 BEGIN
29070 -- Standard begin of API savepoint.
29071
29072 savepoint APPLY_LP_PROG_ON_CWV;
29073
29074 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
29075
29076 -- Standard call to check for call compatibility.
29077
29078 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
29079
29080 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29081
29082 END IF;
29083
29084 -- Initialize the message table if requested.
29085
29086 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
29087
29088 FND_MSG_PUB.initialize;
29089
29090 END IF;
29091
29092 -- Set API return status to success.
29093
29094 p_return_status := FND_API.G_RET_STS_SUCCESS;
29095
29096 /* Checking function security. */
29097
29098 -- Actions performed using the APIs would be subject to
29099 -- function security. If the responsibility does not allow
29100 -- such functions to be executed, the API should not proceed further
29101 -- since the user does not have access to such functions.
29102 -- The function security for this API is the same as that enforced
29103 -- in the the update_task() API.
29104
29105 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
29106 (p_api_version_number => p_api_version,
29107 p_responsibility_id => l_resp_id,
29108 p_function_name => 'PA_PM_UPDATE_TASK',
29109 p_msg_count => l_msg_count,
29110 p_msg_data => l_msg_data,
29111 p_return_status => l_return_status,
29112 p_function_allowed => l_function_allowed );
29113
29114 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
29115 THEN
29116 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29117
29118 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
29119 THEN
29120 RAISE FND_API.G_EXC_ERROR;
29121 END IF;
29122 IF l_function_allowed = 'N' THEN
29123 pa_interface_utils_pub.map_new_amg_msg
29124 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
29125 ,p_msg_attribute => 'CHANGE'
29126 ,p_resize_flag => 'Y'
29127 ,p_msg_context => 'GENERAL'
29128 ,p_attribute1 => ''
29129 ,p_attribute2 => ''
29130 ,p_attribute3 => ''
29131 ,p_attribute4 => ''
29132 ,p_attribute5 => '');
29133 p_return_status := FND_API.G_RET_STS_ERROR;
29134 RAISE FND_API.G_EXC_ERROR;
29135 END IF;
29136
29137 /* Converting project_reference to project_id */
29138
29139 PA_PROJECT_PVT.Convert_pm_projref_to_id
29140 (p_pm_project_reference => p_pm_project_reference
29141 , p_pa_project_id => p_pa_project_id
29142 , p_out_project_id => l_project_id
29143 , p_return_status => l_return_status);
29144
29145 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
29146 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29147 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
29148 RAISE FND_API.G_EXC_ERROR;
29149 END IF;
29150
29151 /* Getting the working structure_version_id */
29152
29153 if (p_working_str_version_id = NULL or p_working_str_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) then
29154 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
29155 pa_interface_utils_pub.map_new_amg_msg
29156 (p_old_message_code => 'PA_WRKG_STR_VER_ID_IS_MISSING'
29157 ,p_msg_attribute => 'CHANGE'
29158 ,p_resize_flag => 'N'
29159 ,p_msg_context => 'GENERAL'
29160 ,p_attribute1 => ''
29161 ,p_attribute2 => ''
29162 ,p_attribute3 => ''
29163 ,p_attribute4 => ''
29164 ,p_attribute5 => '');
29165 end if;
29166
29167 p_return_status := FND_API.G_RET_STS_ERROR;
29168 RAISE FND_API.G_EXC_ERROR;
29169 end if;
29170
29171 /* Calling: PA_PROGRESS_PUB.apply_lp_prog_on_cwv. */
29172
29173 PA_PROGRESS_PUB.apply_lp_prog_on_cwv(p_api_version => p_api_version
29174 ,p_init_msg_list => p_init_msg_list
29175 ,p_commit => FND_API.G_FALSE--bug 3766967
29176 ,p_project_id => l_project_id
29177 ,p_working_str_version_id => p_working_str_version_id
29178 ,x_return_status => l_return_status
29179 ,x_msg_count => l_msg_count
29180 ,x_msg_data => l_msg_data);
29181
29182 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
29183 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
29184 p_msg_name => l_msg_data);
29185 p_msg_data := l_msg_data;
29186 p_return_status := 'E';
29187 p_msg_count := l_msg_count;
29188 RAISE FND_API.G_EXC_ERROR;
29189 END IF;
29190
29191 IF (p_commit = FND_API.G_TRUE) THEN
29192 COMMIT;
29193 END IF;
29194
29195 EXCEPTION
29196
29197 when FND_API.G_EXC_ERROR then
29198
29199 if p_commit = FND_API.G_TRUE then
29200 rollback to APPLY_LP_PROG_ON_CWV;
29201 end if;
29202
29203 p_return_status := FND_API.G_RET_STS_ERROR;
29204
29205 FND_MSG_PUB.Count_And_Get
29206 (p_count => p_msg_count
29207 ,p_data => p_msg_data);
29208
29209 when FND_API.G_EXC_UNEXPECTED_ERROR then
29210 if p_commit = FND_API.G_TRUE then
29211 rollback to APPLY_LP_PROG_ON_CWV;
29212 end if;
29213
29214 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29215
29216 FND_MSG_PUB.Count_And_Get
29217 (p_count => p_msg_count
29218 ,p_data => p_msg_data);
29219
29220 when OTHERS then
29221
29222 if p_commit = FND_API.G_TRUE then
29223 rollback to APPLY_LP_PROG_ON_CWV;
29224 end if;
29225
29226 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29227
29228 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29229 THEN
29230 FND_MSG_PUB.add_exc_msg
29231 (p_pkg_name => G_PKG_NAME
29232 ,p_procedure_name => l_api_name);
29233 END IF;
29234
29235 FND_MSG_PUB.Count_And_Get
29236 (p_count => p_msg_count
29237 ,p_data => p_msg_data);
29238 raise;
29239
29240 END apply_lp_prog_on_cwv;
29241
29242 -- Progress Management Changes. Bug # 3420093.
29243
29244 -- 3435905 FP M Changes for Deliverables : Start
29245
29246 --------------------------------------------------------------------------------
29247 --Name: load_deliverable
29248 --Type: Procedure
29249 --Description: This procedure can be used to load a record of deliverable from input
29250 -- paramters to global table
29251 --
29252 --Called subprograms:
29253 --
29254 --
29255 --
29256 --History:
29257 -- 03-Mar-2004 Puneet Created
29258 --
29259
29260 PROCEDURE load_deliverable
29261 ( p_api_version IN NUMBER := 1.0
29262 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
29263 , p_debug_mode IN VARCHAR2 := 'N'
29264 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29265 , p_deliverable_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29266 , p_deliverable_short_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29267 , p_deliverable_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29268 , p_deliverable_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29269 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29270 , p_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29271 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29272 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29273 , p_progress_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29274 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29275 , px_deliverable_id IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
29276 , p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29277 -- for bug# 3729250
29278 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29279 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29280 , p_task_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29281 , p_item_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29282 , P_inventory_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29283 , p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29284 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29285 -- for bug# 3729250
29286 -- , p_item_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29287 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29288 -- for bug# 3729250
29289 , p_unit_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29290 , p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29291 )
29292 IS
29293
29294 l_api_name CONSTANT VARCHAR2(30) := 'load_deliverable';
29295
29296 BEGIN
29297
29298 -- Standard begin of API savepoint
29299
29300 SAVEPOINT load_deliverable_pub;
29301
29302 -- Standard call to check for call compatibility.
29303
29304 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
29305 p_api_version ,
29306 l_api_name ,
29307 G_PKG_NAME )
29308 THEN
29309
29310 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29311
29312 END IF;
29313
29314 -- Initialize the message table if requested.
29315
29316 IF FND_API.TO_BOOLEAN( p_init_msg_list )
29317 THEN
29318
29319 FND_MSG_PUB.initialize;
29320
29321 END IF;
29322
29323 -- Set API return status to success
29324
29325 x_return_status := FND_API.G_RET_STS_SUCCESS;
29326
29327 -- Load the record only if deliverable_short_name is passed
29328 -- IF (p_deliverable_short_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND /* Bug 39590235 */
29329 IF (p_deliverable_short_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29330 (p_deliverable_short_name IS NOT NULL) THEN
29331
29332 -- assign a value to the global counter for this table
29333 G_deliverables_in_tbl_count := G_deliverables_in_tbl_count + 1;
29334
29335 IF p_debug_mode = 'Y' THEN
29336 pa_debug.g_err_stage := 'Loading deliverable ['|| p_deliverable_short_name||'] element [ '||G_deliverables_in_tbl_count ||']';
29337 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29338 END IF;
29339
29340 -- assign incoming parameters to the global table fields
29341 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_name := p_deliverable_name ;
29342 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_short_name := p_deliverable_short_name ;
29343 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_type_id := p_deliverable_type_id ;
29344 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_owner_id := p_deliverable_owner_id ;
29345 G_deliverables_in_tbl(G_deliverables_in_tbl_count).description := p_description ;
29346 G_deliverables_in_tbl(G_deliverables_in_tbl_count).status_code := p_status_code ;
29347 G_deliverables_in_tbl(G_deliverables_in_tbl_count).due_date := p_due_date ;
29348 G_deliverables_in_tbl(G_deliverables_in_tbl_count).completion_date := p_completion_date ;
29349 G_deliverables_in_tbl(G_deliverables_in_tbl_count).progress_weight := p_progress_weight ;
29350 G_deliverables_in_tbl(G_deliverables_in_tbl_count).pm_source_code := p_pm_source_code ;
29351 G_deliverables_in_tbl(G_deliverables_in_tbl_count).deliverable_id := px_deliverable_id ;
29352 G_deliverables_in_tbl(G_deliverables_in_tbl_count).pm_deliverable_reference := p_pm_deliverable_reference;
29353 -- for bug# 3729250
29354 -- G_deliverables_in_tbl(G_deliverables_in_tbl_count).carrying_out_org_id := p_carrying_out_org_id ;
29355 G_deliverables_in_tbl(G_deliverables_in_tbl_count).task_id := p_task_id ;
29356 G_deliverables_in_tbl(G_deliverables_in_tbl_count).task_source_reference := p_task_source_reference ;
29357 G_deliverables_in_tbl(G_deliverables_in_tbl_count).item_id := p_item_id ;
29358 G_deliverables_in_tbl(G_deliverables_in_tbl_count).inventory_org_id := p_inventory_org_id ;
29359 G_deliverables_in_tbl(G_deliverables_in_tbl_count).quantity := p_quantity ;
29360 G_deliverables_in_tbl(G_deliverables_in_tbl_count).uom_code := p_uom_code ;
29361 -- for bug# 3729250
29362 -- G_deliverables_in_tbl(G_deliverables_in_tbl_count).item_description := p_item_description ;
29363 G_deliverables_in_tbl(G_deliverables_in_tbl_count).unit_price := p_unit_price ;
29364 G_deliverables_in_tbl(G_deliverables_in_tbl_count).unit_number := p_unit_number ;
29365 G_deliverables_in_tbl(G_deliverables_in_tbl_count).currency_code := p_currency_code ;
29366 END IF;
29367
29368 EXCEPTION
29369
29370 WHEN FND_API.G_EXC_ERROR THEN
29371 ROLLBACK TO load_deliverable_pub;
29372 x_return_status := FND_API.G_RET_STS_ERROR;
29373
29374
29375 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
29376 ROLLBACK TO load_deliverable_pub;
29377 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29378
29379
29380 WHEN OTHERS THEN
29381 ROLLBACK TO load_deliverable_pub;
29382 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29383
29384 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29385 THEN
29386 FND_MSG_PUB.add_exc_msg
29387 ( p_pkg_name => G_PKG_NAME
29388 , p_procedure_name => l_api_name );
29389
29390 END IF;
29391
29392 END load_deliverable;
29393
29394 --------------------------------------------------------------------------------
29395 --Name: load_deliverables
29396 --Type: Procedure
29397 --Description: This procedure can be used to load a set record of deliverables from input
29398 -- paramters to global table
29399 --
29400 --Called subprograms: load_deliverable
29401 --
29402 --
29403 --
29404 --History:
29405 -- 03-Mar-2004 Puneet Created
29406 --
29407
29408 PROCEDURE load_deliverables
29409 ( p_api_version IN NUMBER := 1.0
29410 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
29411 , p_debug_mode IN VARCHAR2 := 'N'
29412 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29413 , p_deliverable_name IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29414 --, p_deliverable_name IN PA_VC_1000_240 := PA_VC_1000_240(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29415 -- , p_deliverable_short_name IN PA_VC_1000_100 := PA_VC_1000_100(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29416 , p_deliverable_short_name IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29417 , p_deliverable_type_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29418 , p_deliverable_owner_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29419 , p_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29420 , p_status_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29421 , p_due_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29422 , p_completion_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29423 , p_progress_weight IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29424 , p_pm_source_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29425 , px_deliverable_id IN OUT NOCOPY PA_NUM_1000_NUM /*Added the nocopy check for 4537865 */
29426 , p_pm_deliverable_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29427 -- for bug# 3729250
29428 -- , p_carrying_out_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29429 , p_task_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29430 , p_task_source_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29431 , p_item_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29432 , P_inventory_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29433 , p_quantity IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29434 , p_uom_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29435 -- for bug# 3729250
29436 -- , p_item_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29437 , p_unit_price IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29438 -- for bug# 3729250
29439 , p_unit_number IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29440 -- , p_currency_code IN PA_VC_1000_15 := PA_VC_1000_15(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29441 , p_currency_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29442 )
29443 IS
29444
29445 l_api_name CONSTANT VARCHAR2(30) := 'load_deliverables';
29446
29447 BEGIN
29448
29449 -- Standard begin of API savepoint
29450
29451 SAVEPOINT load_deliverables_pub;
29452
29453 -- Standard call to check for call compatibility.
29454
29455 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
29456 p_api_version ,
29457 l_api_name ,
29458 G_PKG_NAME )
29459 THEN
29460
29461 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29462
29463 END IF;
29464
29465 -- Initialize the message table if requested.
29466
29467 IF FND_API.TO_BOOLEAN( p_init_msg_list )
29468 THEN
29469
29470 FND_MSG_PUB.initialize;
29471
29472 END IF;
29473
29474 -- Set API return status to success
29475
29476 x_return_status := FND_API.G_RET_STS_SUCCESS;
29477
29478 -- Load the table only if deliverable_short_name is passed
29479 FOR i in 1..1000 LOOP
29480 IF (p_deliverable_short_name(i) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND /* Bug # 3590235 */
29481 (p_deliverable_short_name(i) IS NOT NULL) THEN
29482
29483 load_deliverable
29484 ( p_api_version => p_api_version
29485 , p_init_msg_list => p_init_msg_list
29486 , p_debug_mode => p_debug_mode
29487 , x_return_status => x_return_status
29488 , p_deliverable_name => p_deliverable_name(i)
29489 , p_deliverable_short_name => p_deliverable_short_name(i)
29490 , p_deliverable_type_id => p_deliverable_type_id(i)
29491 , p_deliverable_owner_id => p_deliverable_owner_id(i)
29492 , p_description => p_description(i)
29493 , p_status_code => p_status_code(i)
29494 , p_due_date => p_due_date(i)
29495 , p_completion_date => p_completion_date(i)
29496 , p_progress_weight => p_progress_weight(i)
29497 , p_pm_source_code => p_pm_source_code(i)
29498 , px_deliverable_id => px_deliverable_id(i)
29499 , p_pm_deliverable_reference => p_pm_deliverable_reference(i)
29500 -- for bug# 3729250
29501 -- , p_carrying_out_org_id => p_carrying_out_org_id(i)
29502 , p_task_id => p_task_id(i)
29503 , p_task_source_reference => p_task_source_reference(i)
29504 , p_item_id => p_item_id(i)
29505 , P_inventory_org_id => p_inventory_org_id(i)
29506 , p_quantity => p_quantity(i)
29507 , p_uom_code => p_uom_code(i)
29508 -- for bug# 3729250
29509 -- , p_item_description => p_item_description(i)
29510 , p_unit_price => p_unit_price(i)
29511 , p_unit_number => p_unit_number(i)
29512 , p_currency_code => p_currency_code(i)
29513 ) ;
29514 END IF;
29515 END LOOP;
29516
29517 EXCEPTION
29518
29519 WHEN FND_API.G_EXC_ERROR
29520 THEN
29521 ROLLBACK TO load_deliverables_pub;
29522
29523 x_return_status := FND_API.G_RET_STS_ERROR;
29524
29525
29526 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29527 THEN
29528 ROLLBACK TO load_deliverables_pub;
29529
29530 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29531
29532
29533 WHEN OTHERS THEN
29534 ROLLBACK TO load_deliverables_pub;
29535
29536 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29537
29538 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29539 THEN
29540 FND_MSG_PUB.add_exc_msg
29541 ( p_pkg_name => G_PKG_NAME
29542 , p_procedure_name => l_api_name );
29543
29544 END IF;
29545
29546 END load_deliverables;
29547
29548 --------------------------------------------------------------------------------
29549 --Name: load_action
29550 --Type: Procedure
29551 --Description: This procedure can be used to load a record of Deliverable
29552 -- Actions from input paramters to global tables
29553 --
29554 --Called subprograms:
29555 --
29556 --
29557 --
29558 --History:
29559 -- 03-Mar-2004 Puneet Created
29560 --
29561
29562 PROCEDURE load_action
29563 ( p_api_version IN NUMBER := 1.0
29564 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
29565 , p_debug_mode IN VARCHAR2 := 'N'
29566 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29567 , p_action_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29568 , p_action_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29569 , p_action_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29570 , p_function_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29571 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29572 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29573 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29574 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29575 , p_pm_action_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29576 -- for bug# 3729250
29577 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29578 , p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29579 , p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29580 -- added for bug# 3729250
29581 , p_financial_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29582 , p_financial_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29583 , p_destination_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29584 , p_receiving_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29585 , p_receiving_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29586 , p_po_need_by_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29587 , p_vendor_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29588 , p_vendor_site_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29589 -- , p_project_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29590 , p_Quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29591 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29592 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29593 , p_exchange_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29594 , p_exchange_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29595 , p_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM /* Bug 3590235 */
29596 , p_expenditure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29597 , p_expenditure_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29598 , p_expenditure_item_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29599 , p_requisition_line_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29600 , p_category_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29601 , p_ready_to_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29602 , p_initiate_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29603 , p_ship_from_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29604 , p_ship_from_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29605 , p_ship_to_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29606 , p_ship_to_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29607 , p_demand_schedule IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29608 , p_expected_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29609 , p_promised_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29610 , p_volume IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29611 , p_volume_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29612 , p_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29613 , p_weight_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29614 , p_ready_to_ship_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29615 , p_initiate_planning_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29616 , p_initiate_shipping_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29617 , p_event_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29618 , p_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29619 , p_invoice_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29620 , p_revenue_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29621 , p_event_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29622 , p_event_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29623 , p_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29624 , p_bill_hold_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29625 , p_project_functional_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29626 , p_project_functional_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29627 , p_project_functional_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29628 , p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29629 , p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29630 , p_project_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29631 , p_funding_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
29632 , p_funding_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
29633 , p_funding_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
29634 , p_pm_event_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
29635 )
29636 IS
29637
29638 l_api_name CONSTANT VARCHAR2(30) := 'load_actions';
29639
29640 BEGIN
29641
29642 -- Standard begin of API savepoint
29643
29644 SAVEPOINT load_action_pub;
29645
29646 -- Standard call to check for call compatibility.
29647
29648 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
29649 p_api_version ,
29650 l_api_name ,
29651 G_PKG_NAME )
29652 THEN
29653
29654 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29655
29656 END IF;
29657
29658 -- Initialize the message table if requested.
29659
29660 IF FND_API.TO_BOOLEAN( p_init_msg_list )
29661 THEN
29662
29663 FND_MSG_PUB.initialize;
29664
29665 END IF;
29666
29667 -- Set API return status to success
29668
29669 x_return_status := FND_API.G_RET_STS_SUCCESS;
29670
29671 -- Load the table only if action_name is passed
29672 IF (p_action_name <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29673 (p_action_name IS NOT NULL) THEN
29674
29675 -- assign a value to the global counter for this table
29676 G_dlvr_actions_in_tbl_count := G_dlvr_actions_in_tbl_count + 1;
29677
29678 IF p_debug_mode = 'Y' THEN
29679 pa_debug.g_err_stage := 'Loading action ['|| p_action_name||'] element [ '||G_dlvr_actions_in_tbl_count ||']';
29680 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
29681 END IF;
29682
29683 -- assign incoming parameters to the global table fields
29684 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_name := p_action_name ;
29685 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_owner_id := p_action_owner_id ;
29686 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).action_id := p_action_id ;
29687 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).function_code := p_function_code ;
29688 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).due_date := p_due_date ;
29689 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).description := p_description ;
29690 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).completion_date := p_completion_date ;
29691 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_source_code := p_pm_source_code ;
29692 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_action_reference := p_pm_action_reference ;
29693 -- for bug# 3729250
29694 -- G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).carrying_out_org_id := p_carrying_out_org_id ;
29695 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_deliverable_reference := p_pm_deliverable_reference ;
29696 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).deliverable_id := p_deliverable_id ;
29697 -- added for bug# 3729250
29698 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).financial_task_reference := p_financial_task_reference ;
29699 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).financial_task_id := p_financial_task_id ;
29700 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).destination_type_code := p_destination_type_code ;
29701 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).receiving_org_id := p_receiving_org_id ;
29702 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).receiving_location_id := p_receiving_location_id ;
29703 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).po_need_by_date := p_po_need_by_date ;
29704 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).vendor_id := p_vendor_id ;
29705 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).vendor_site_code := p_vendor_site_code ;
29706 -- G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_currency := p_project_currency ;
29707 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).Quantity := p_Quantity ;
29708 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).uom_code := p_uom_code ;
29709 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).unit_price := p_unit_price ;
29710 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate_type := p_exchange_rate_type ;
29711 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate_date := p_exchange_rate_date ;
29712 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).exchange_rate := p_exchange_rate ;
29713 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_type := p_expenditure_type ;
29714 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_org_id := p_expenditure_org_id ;
29715 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expenditure_item_date := p_expenditure_item_date ;
29716 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).requisition_line_type_id := p_requisition_line_type_id ;
29717 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).category_id := p_category_id ;
29718 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ready_to_procure_flag := p_ready_to_procure_flag ;
29719 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_procure_flag := p_initiate_procure_flag ;
29720 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_from_organization_id := p_ship_from_organization_id ;
29721 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_from_location_id := p_ship_from_location_id ;
29722 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_to_organization_id := p_ship_to_organization_id ;
29723 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ship_to_location_id := p_ship_to_location_id ;
29724 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).demand_schedule := p_demand_schedule ;
29725 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).expected_shipment_date := p_expected_shipment_date ;
29726 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).promised_shipment_date := p_promised_shipment_date ;
29727 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).volume := p_volume ;
29728 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).volume_uom := p_volume_uom ;
29729 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).weight := p_weight ;
29730 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).weight_uom := p_weight_uom ;
29731 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).ready_to_ship_flag := p_ready_to_ship_flag ;
29732 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_planning_flag := p_initiate_planning_flag ;
29733 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).initiate_shipping_flag := p_initiate_shipping_flag ;
29734 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_type := p_event_type ;
29735 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).currency := p_currency ;
29736 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).invoice_amount := p_invoice_amount ;
29737 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).revenue_amount := p_revenue_amount ;
29738 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_date := p_event_date ;
29739 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).event_number := p_event_number ;
29740 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).organization_id := p_organization_id ;
29741 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).bill_hold_flag := p_bill_hold_flag ;
29742 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate_type := p_project_functional_rate_type ;
29743 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate_date := p_project_functional_rate_date ;
29744 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_functional_rate := p_project_functional_rate ;
29745 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate_type := p_project_rate_type ;
29746 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate_date := p_project_rate_date ;
29747 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).project_rate := p_project_rate ;
29748 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate_type := p_funding_rate_type ;
29749 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate_date := p_funding_rate_date ;
29750 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).funding_rate := p_funding_rate ;
29751 G_deliverable_actions_in_tbl(G_dlvr_actions_in_tbl_count).pm_event_reference := p_pm_event_reference ; -- 3651489 added parameter
29752 END IF;
29753
29754 EXCEPTION
29755
29756 WHEN FND_API.G_EXC_ERROR
29757 THEN
29758 ROLLBACK TO load_action_pub;
29759
29760 x_return_status := FND_API.G_RET_STS_ERROR;
29761
29762
29763 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
29764 THEN
29765 ROLLBACK TO load_action_pub;
29766
29767 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29768
29769
29770 WHEN OTHERS THEN
29771 ROLLBACK TO load_action_pub;
29772
29773 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
29774
29775 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
29776 THEN
29777 FND_MSG_PUB.add_exc_msg
29778 ( p_pkg_name => G_PKG_NAME
29779 , p_procedure_name => l_api_name );
29780
29781 END IF;
29782
29783 END load_action;
29784
29785 --------------------------------------------------------------------------------
29786 --Name: load_actions
29787 --Type: Procedure
29788 --Description: This procedure can be used to load Actions from input
29789 -- paramters to global tables
29790 --
29791 --Called subprograms:
29792 --
29793 --
29794 --
29795 --History:
29796 -- 03-Mar-2004 Puneet Created
29797 --
29798 PROCEDURE load_actions
29799 ( p_api_version IN NUMBER := 1.0
29800 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
29801 , p_debug_mode IN VARCHAR2 := 'N'
29802 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
29803 --, p_action_name IN PA_VC_1000_240 := PA_VC_1000_240(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29804 , p_action_name IN PA_VC_1000_150 := PA_VC_1000_150(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29805 , p_action_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29806 , p_action_owner_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29807 , p_function_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29808 , p_due_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29809 , p_description IN PA_VC_1000_2000 := PA_VC_1000_2000(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29810 , p_completion_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29811 , p_pm_source_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29812 , p_pm_action_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29813 -- for bug# 3729250
29814 -- , p_carrying_out_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29815 , p_pm_deliverable_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29816 , p_deliverable_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29817 -- added for bug# 3729250
29818 , p_financial_task_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29819 , p_financial_task_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29820 , p_destination_type_code IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29821 , p_receiving_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29822 , p_receiving_location_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29823 , p_po_need_by_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29824 , p_vendor_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29825 , p_vendor_site_code IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29826 -- , p_project_currency IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29827 , p_Quantity IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29828 , p_uom_code IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29829 , p_unit_price IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29830 , p_exchange_rate_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29831 , p_exchange_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29832 , p_exchange_rate IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) /* Bug # 3590235 */
29833 , p_expenditure_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29834 , p_expenditure_org_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29835 , p_expenditure_item_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29836 , p_requisition_line_type_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29837 , p_category_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29838 -- , p_ready_to_procure_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29839 -- , p_initiate_procure_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29840 , p_ready_to_procure_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29841 , p_initiate_procure_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29842 , p_ship_from_organization_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29843 , p_ship_from_location_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29844 , p_ship_to_organization_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29845 , p_ship_to_location_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29846 , p_demand_schedule IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29847 , p_expected_shipment_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29848 , p_promised_shipment_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29849 , p_volume IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29850 , p_volume_uom IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29851 , p_weight IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29852 , p_weight_uom IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29853 -- , p_ready_to_ship_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29854 -- , p_initiate_planning_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29855 -- , p_initiate_shipping_flag IN PA_VC_1000_1 := PA_VC_1000_1(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29856 , p_ready_to_ship_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29857 , p_initiate_planning_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29858 , p_initiate_shipping_flag IN PA_VC_1000_10 := PA_VC_1000_10(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29859 , p_event_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29860 , p_currency IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29861 , p_invoice_amount IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29862 , p_revenue_amount IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29863 , p_event_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29864 , p_event_number IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29865 , p_organization_id IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29866 , p_bill_hold_flag IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29867 , p_project_functional_rate_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29868 , p_project_functional_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29869 , p_project_functional_rate IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29870 , p_project_rate_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29871 , p_project_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29872 , p_project_rate IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29873 , p_funding_rate_type IN PA_VC_1000_30 := PA_VC_1000_30(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
29874 , p_funding_rate_date IN PA_DATE_1000_DATE := PA_DATE_1000_DATE(PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE)
29875 , p_funding_rate IN PA_NUM_1000_NUM := PA_NUM_1000_NUM(PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
29876 , p_pm_event_reference IN PA_VC_1000_25 := PA_VC_1000_25(PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) -- 3651489 added parameter
29877 )
29878 IS
29879
29880 l_api_name CONSTANT VARCHAR2(30) := 'load_actions';
29881 l_return_status VARCHAR2(1) := null;
29882
29883 BEGIN
29884
29885 -- Standard begin of API savepoint
29886
29887 SAVEPOINT load_actions_pub;
29888
29889 -- Standard call to check for call compatibility.
29890
29891 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
29892 p_api_version ,
29893 l_api_name ,
29894 G_PKG_NAME )
29895 THEN
29896
29897 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
29898
29899 END IF;
29900
29901 -- Initialize the message table if requested.
29902
29903 IF FND_API.TO_BOOLEAN( p_init_msg_list )
29904 THEN
29905
29906 FND_MSG_PUB.initialize;
29907
29908 END IF;
29909
29910 -- Set API return status to success
29911
29912 x_return_status := FND_API.G_RET_STS_SUCCESS;
29913
29914 -- Load the table only if action_name is passed
29915 FOR i in 1..1000 LOOP
29916 IF (p_action_name(i) <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
29917 (p_action_name(i) IS NOT NULL) THEN
29918
29919 -- assign a value to the global counter for this table
29920 G_dlvr_actions_in_tbl_count := G_dlvr_actions_in_tbl_count + 1;
29921
29922 -- assign incoming parameters to the global table fields
29923 load_action
29924 ( p_api_version => p_api_version
29925 , p_init_msg_list => p_init_msg_list
29926 , p_debug_mode => p_debug_mode
29927 , x_return_status => l_return_status
29928 , p_action_name => p_action_name(i)
29929 , p_action_id => p_action_id(i)
29930 , p_action_owner_id => p_action_owner_id(i)
29931 , p_function_code => p_function_code(i)
29932 , p_due_date => p_due_date(i)
29933 , p_description => p_description(i)
29934 , p_completion_date => p_completion_date(i)
29935 , p_pm_source_code => p_pm_source_code(i)
29936 , p_pm_action_reference => p_pm_action_reference(i)
29937 -- for bug# 3729250
29938 -- , p_carrying_out_org_id => p_carrying_out_org_id(i)
29939 , p_pm_deliverable_reference => p_pm_deliverable_reference(i)
29940 , p_deliverable_id => p_deliverable_id(i)
29941 , p_financial_task_reference => p_financial_task_reference(i) -- added for bug# 3729250
29942 , p_financial_task_id => p_financial_task_id(i)
29943 , p_destination_type_code => p_destination_type_code(i)
29944 , p_receiving_org_id => p_receiving_org_id(i)
29945 , p_receiving_location_id => p_receiving_location_id(i)
29946 , p_po_need_by_date => p_po_need_by_date(i)
29947 , p_vendor_id => p_vendor_id(i)
29948 , p_vendor_site_code => p_vendor_site_code(i)
29949 -- , p_project_currency => p_project_currency(i)
29950 , p_Quantity => p_Quantity(i)
29951 , p_uom_code => p_uom_code(i)
29952 , p_unit_price => p_unit_price(i)
29953 , p_exchange_rate_type => p_exchange_rate_type(i)
29954 , p_exchange_rate_date => p_exchange_rate_date(i)
29955 , p_exchange_rate => p_exchange_rate(i)
29956 , p_expenditure_type => p_expenditure_type(i)
29957 , p_expenditure_org_id => p_expenditure_org_id(i)
29958 , p_expenditure_item_date => p_expenditure_item_date(i)
29959 , p_requisition_line_type_id => p_requisition_line_type_id(i)
29960 , p_category_id => p_category_id(i)
29961 , p_ready_to_procure_flag => p_ready_to_procure_flag(i)
29962 , p_initiate_procure_flag => p_initiate_procure_flag(i)
29963 , p_ship_from_organization_id => p_ship_from_organization_id(i)
29964 , p_ship_from_location_id => p_ship_from_location_id(i)
29965 , p_ship_to_organization_id => p_ship_to_organization_id(i)
29966 , p_ship_to_location_id => p_ship_to_location_id(i)
29967 , p_demand_schedule => p_demand_schedule(i)
29968 , p_expected_shipment_date => p_expected_shipment_date(i)
29969 , p_promised_shipment_date => p_promised_shipment_date(i)
29970 , p_volume => p_volume(i)
29971 , p_volume_uom => p_volume_uom(i)
29972 , p_weight => p_weight(i)
29973 , p_weight_uom => p_weight_uom(i)
29974 , p_ready_to_ship_flag => p_ready_to_ship_flag(i)
29975 , p_initiate_planning_flag => p_initiate_planning_flag(i)
29976 , p_initiate_shipping_flag => p_initiate_shipping_flag(i)
29977 , p_event_type => p_event_type(i)
29978 , p_currency => p_currency(i)
29979 , p_invoice_amount => p_invoice_amount(i)
29980 , p_revenue_amount => p_revenue_amount(i)
29981 , p_event_date => p_event_date(i)
29982 , p_event_number => p_event_number(i)
29983 , p_organization_id => p_organization_id(i)
29984 , p_bill_hold_flag => p_bill_hold_flag(i)
29985 , p_project_functional_rate_type => p_project_functional_rate_type(i)
29986 , p_project_functional_rate_date => p_project_functional_rate_date(i)
29987 , p_project_functional_rate => p_project_functional_rate(i)
29988 , p_project_rate_type => p_project_rate_type(i)
29989 , p_project_rate_date => p_project_rate_date(i)
29990 , p_project_rate => p_project_rate(i)
29991 , p_funding_rate_type => p_funding_rate_type(i)
29992 , p_funding_rate_date => p_funding_rate_date(i)
29993 , p_funding_rate => p_funding_rate(i)
29994 , p_pm_event_reference => p_pm_event_reference(i) -- 3651489 added parameter
29995 );
29996
29997 END IF;
29998 END LOOP;
29999
30000 EXCEPTION
30001
30002 WHEN FND_API.G_EXC_ERROR
30003 THEN
30004 ROLLBACK TO load_actions_pub;
30005
30006 x_return_status := FND_API.G_RET_STS_ERROR;
30007
30008
30009 WHEN FND_API.G_EXC_UNEXPECTED_ERROR
30010 THEN
30011 ROLLBACK TO load_actions_pub;
30012
30013 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30014
30015
30016 WHEN OTHERS THEN
30017 ROLLBACK TO load_actions_pub;
30018
30019 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30020
30021 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
30022 THEN
30023 FND_MSG_PUB.add_exc_msg
30024 ( p_pkg_name => G_PKG_NAME
30025 , p_procedure_name => l_api_name );
30026
30027 END IF;
30028
30029 END load_actions;
30030
30031
30032 --------------------------------------------------------------------------------
30033 --Name: Create_Deliverable
30034 --Type: Procedure
30035 --Description: This procedure creates a deliverable and its related actions
30036 -- which are passed through actions PLSQL table
30037 --
30038 --Called subprograms: PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
30039 -- Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
30040 --
30041 --
30042 --
30043 --History:
30044 -- 08-Mar-2004 Puneet Created
30045 --
30046
30047 PROCEDURE create_deliverable
30048 ( p_api_version IN NUMBER := 1.0
30049 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
30050 , p_commit IN VARCHAR2 := FND_API.G_FALSE
30051 , p_debug_mode IN VARCHAR2 := 'N'
30052 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30053 , p_deliverable_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30054 , p_deliverable_short_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30055 , p_deliverable_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30056 , p_deliverable_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30057 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30058 , p_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30059 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30060 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30061 , p_progress_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30062 , px_deliverable_id IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
30063 , p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30064 -- for bug# 3729250
30065 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30066 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30067 , p_task_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30068 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30069 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30070 , p_action_in_tbl IN action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
30071 , x_action_out_tbl OUT NOCOPY action_out_tbl_type /*Added the nocopy check for 4537865 */
30072 , p_item_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30073 , P_inventory_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30074 , p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30075 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30076 -- for bug# 3729250
30077 -- , p_item_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30078 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30079 -- for bug# 3729250
30080 , p_unit_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30081 , p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30082 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR /* Bug no. 3651113 */
30083 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
30084 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30085 )
30086
30087 IS
30088
30089 l_project_id NUMBER;
30090 l_task_id NUMBER;
30091 l_project_number Pa_Projects_All.Segment1%TYPE;
30092 l_task_number Pa_Proj_Elements.Name%TYPE;
30093 l_task_source_reference VARCHAR2(240);
30094 l_deliverable_element_id NUMBER;
30095 l_deliverable_version_id NUMBER;
30096 l_dlvr_prg_enabled VARCHAR2(1) := NULL;
30097 l_dlvr_action_enabled VARCHAR2(1) := NULL;
30098 l_dlvr_enabled VARCHAR2(1) := NULL;
30099 l_status_code PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
30100
30101 l_unique_flag VARCHAR2(1) := null;
30102 l_err_message Fnd_New_Messages.Message_text%TYPE; -- for AMG message
30103
30104 l_data VARCHAR2(2000); -- 4537865
30105 l_action_in_tbl action_in_tbl_type;
30106 l_action_out_tlb action_out_tbl_type;
30107
30108 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_DELIVERABLES';
30109 l_msg_index_out NUMBER;
30110
30111 i NUMBER := 0;
30112 i_actn NUMBER := 0;
30113
30114 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
30115 l_function_allowed VARCHAR2(1);
30116 l_pm_product_code VARCHAR2(2) :='Z'; /* Bug 3651113 */
30117
30118 -- 3651542 added local variable
30119
30120 l_dlvr_owner_id PA_PROJ_ELEMENTS.MANAGER_PERSON_ID%TYPE;
30121 l_dlvr_owner_name PER_ALL_PEOPLE_F.FULL_NAME%TYPE;
30122 l_default_date DATE;
30123
30124 /*cursor added for Bug 3651113 */
30125 Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
30126 Is
30127 Select 'X'
30128 from pa_lookups
30129 where lookup_type='PM_PRODUCT_CODE'
30130 and lookup_code = p_pm_product_code;
30131
30132 l_wp_task_flag varchar2(1); -- Added for bug5462298
30133
30134 BEGIN
30135 -- Initialize the message table if requested.
30136 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
30137 FND_MSG_PUB.initialize;
30138 END IF;
30139
30140 -- 3735792 , setting save point unconditionally
30141 -- IF (p_commit = FND_API.G_TRUE) THEN
30142 savepoint CREATE_DELIVERABLE_PUB;
30143 -- END IF;
30144
30145 -- Validation check for product code : Bug 3651113
30146
30147 OPEN p_product_code_csr (p_pm_source_code);
30148 FETCH p_product_code_csr INTO l_pm_product_code;
30149 CLOSE p_product_code_csr;
30150
30151 IF l_pm_product_code <> 'X'
30152 AND p_pm_source_code <> 'WORKPLAN'
30153 THEN
30154 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
30155 THEN
30156 pa_interface_utils_pub.map_new_amg_msg
30157 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
30158 ,p_msg_attribute => 'CHANGE'
30159 ,p_resize_flag => 'N'
30160 ,p_msg_context => 'GENERAL'
30161 ,p_attribute1 => ''
30162 ,p_attribute2 => ''
30163 ,p_attribute3 => ''
30164 ,p_attribute4 => ''
30165 ,p_attribute5 => '');
30166 END IF;
30167 x_return_status := FND_API.G_RET_STS_ERROR;
30168 RAISE FND_API.G_EXC_ERROR;
30169 END IF;
30170
30171 IF p_debug_mode = 'Y' THEN
30172 PA_DEBUG.set_curr_function( p_function => l_api_name,
30173 p_debug_mode => p_debug_mode );
30174 pa_debug.g_err_stage:= 'Inside '||l_api_name;
30175 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
30176 END IF;
30177
30178 -- Set API return status to success
30179 x_return_status := FND_API.G_RET_STS_SUCCESS;
30180
30181
30182 IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
30183 l_task_id := NULL;
30184 ELSE
30185 l_task_id := p_task_id;
30186 END IF;
30187
30188
30189 IF p_task_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
30190 l_task_source_reference := NULL;
30191 ELSE
30192 l_task_source_reference := p_task_source_reference;
30193 END IF;
30194
30195
30196
30197 -- Function Security Check
30198 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
30199 (p_api_version_number => p_api_version,
30200 p_responsibility_id => l_resp_id,
30201 p_function_name => 'PA_DELIVERABLE_EDIT',
30202 p_msg_count => x_msg_count,
30203 p_msg_data => x_msg_data,
30204 p_return_status => x_return_status,
30205 p_function_allowed => l_function_allowed);
30206
30207 IF p_debug_mode = 'Y' THEN
30208 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
30209 END IF;
30210
30211 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30212 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30213 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30214 RAISE FND_API.G_EXC_ERROR;
30215 END IF;
30216
30217 IF l_function_allowed = 'N' THEN
30218 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
30219 ,p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
30220 x_return_status := FND_API.G_RET_STS_ERROR;
30221 RAISE FND_API.G_EXC_ERROR;
30222 END IF;
30223
30224 -- validate the input parameters.
30225 -- Get the task and Project details based on source reference passed
30226 PA_PROJECT_PVT.Convert_pm_projref_to_id (
30227 p_pm_project_reference => p_proj_source_reference
30228 , p_pa_project_id => p_project_id
30229 , p_out_project_id => l_project_id
30230 , p_return_status => x_return_status
30231 );
30232
30233 IF p_debug_mode = 'Y' THEN
30234 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
30235 END IF;
30236
30237 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30238 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30239 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30240 RAISE FND_API.G_EXC_ERROR;
30241 END IF;
30242
30243 IF ( l_task_id IS NOT NULL OR l_task_source_reference IS NOT NULL ) THEN
30244 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
30245 p_pa_project_id => l_project_id
30246 , p_structure_type => 'WORKPLAN'
30247 , p_pa_task_id => p_task_id
30248 , p_pm_task_reference => p_task_source_reference
30249 , p_out_task_id => l_task_id
30250 , p_return_status => x_return_status );
30251
30252 IF p_debug_mode = 'Y' THEN
30253 pa_debug.write(g_pkg_name,'Task Ref to ID Return Status ['||x_return_status||']Task ID['||l_task_id||']',3) ;
30254 END IF;
30255
30256 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30257 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30258 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30259 RAISE FND_API.G_EXC_ERROR;
30260 END IF;
30261
30262 -- 5462298 Added below code to validate passed task id
30263 -- if it is not workplan task , throw error message
30264
30265 l_wp_task_flag := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_WORKPLAN_TASK (
30266 p_project_id => l_project_id
30267 , p_proj_element_id => l_task_id );
30268
30269 IF l_wp_task_flag <> 'Y' THEN
30270
30271 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
30272 THEN
30273
30274 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
30275 ,p_msg_name => 'PA_TASK_ID_INVALID');
30276
30277 x_return_status := FND_API.G_RET_STS_ERROR;
30278 RAISE FND_API.G_EXC_ERROR;
30279
30280 END IF;
30281
30282 END IF;
30283
30284 -- 5462298 end
30285
30286 END IF;
30287
30288 -- Validate Deliverable reference - not null, unique
30289 PA_Deliverable_Utils.is_dlvr_reference_unique(
30290 p_deliverable_reference => p_pm_deliverable_reference
30291 , p_project_id => l_project_id
30292 , x_unique_flag => l_unique_flag
30293 , x_return_status => x_return_status );
30294
30295 IF p_debug_mode = 'Y' THEN
30296 pa_debug.write(g_pkg_name,'Dlvr Reference Unique Return Status ['||x_return_status||']Unique['||l_unique_flag||']',3) ;
30297 END IF;
30298
30299 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30300 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30301 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30302 RAISE FND_API.G_EXC_ERROR;
30303 END IF;
30304
30305 -- Fetching Task Name , Project Name to use as token in Error Messages.
30306
30307 IF (l_task_id IS NOT NULL) THEN
30308 SELECT name INTO l_task_number
30309 FROM Pa_Proj_Elements
30310 WHERE proj_element_id = l_task_id;
30311 ELSE
30312 l_task_number := null;
30313 END IF;
30314
30315 SELECT segment1 INTO l_project_number
30316 FROM Pa_Projects_All
30317 WHERE project_id = l_project_id;
30318
30319 IF p_debug_mode = 'Y' THEN
30320 pa_debug.g_err_stage := 'Creating deliverable ['|| p_deliverable_short_name||']['||p_pm_deliverable_reference||']['
30321 ||p_deliverable_owner_id||']['||p_deliverable_Type_id||']['||l_project_id||']['||l_task_id||']';
30322 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30323 END IF;
30324
30325 -- Check if deliverable is enabled for project.
30326 -- If not then first enable it before creating the deliverable.
30327
30328 -- 3700247, check for G_DLVR_STRUCTURE_ENABLED parameter, if it is null,
30329 -- check for target project, whether deliverable is enabled or not
30330 -- if deliverable is not enabled and deliverables are loaded, throw error message
30331
30332 IF p_debug_mode = 'Y' THEN
30333 pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
30334 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30335 END IF;
30336
30337 IF G_DLVR_STRUCTURE_ENABLED IS NULL THEN
30338 G_DLVR_STRUCTURE_ENABLED := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_id);
30339
30340 IF p_debug_mode = 'Y' THEN
30341 pa_debug.g_err_stage := 'Deliverable Enabled ['||G_DLVR_STRUCTURE_ENABLED||']';
30342 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30343 END IF;
30344 END IF;
30345
30346 IF G_DLVR_STRUCTURE_ENABLED = 'N' THEN
30347 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
30348 ,p_msg_name => 'PA_DLV_STRUCTURE_DISABLED');
30349 x_return_status := FND_API.G_RET_STS_ERROR;
30350 RAISE FND_API.G_EXC_ERROR;
30351 END IF;
30352
30353 -- 3700247, if deliverable structure is not enabled for target and deliverables are passed in loading,
30354 -- error message is thrown. So, removing the below code , which enables the structure for the target project in
30355 -- above condition.
30356
30357 /*
30358 l_dlvr_enabled := Pa_Project_Structure_Utils.Check_Deliverable_Enabled(l_project_id);
30359
30360 IF p_debug_mode = 'Y' THEN
30361 pa_debug.g_err_stage := 'Deliverable Enabled ['||l_dlvr_enabled||']';
30362 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30363 END IF;
30364
30365 IF ( l_dlvr_enabled = 'N' ) THEN
30366
30367 Pa_Deliverable_Utils.enable_deliverable(
30368 p_api_version => p_api_version
30369 , p_init_msg_list => FND_API.G_FALSE
30370 , p_commit => p_commit
30371 , p_debug_mode => p_debug_mode
30372 , p_validate_only => FND_API.G_FALSE
30373 , p_project_id => l_project_id
30374 , x_return_status => x_return_status
30375 , x_msg_count => x_msg_count
30376 , x_msg_data => x_msg_data
30377 );
30378
30379 IF p_debug_mode = 'Y' THEN
30380 pa_debug.write(g_pkg_name,'Pa_Deliverable_Utils.enable_deliverable Return Status ['||x_return_status||']',3) ;
30381 END IF;
30382
30383 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30384 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30385 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30386 RAISE FND_API.G_EXC_ERROR;
30387 END IF;
30388
30389 END IF; -- deliverable not enabled
30390 */
30391
30392
30393 -- 3651542 if deliverable onwer and date is not passed
30394 -- call util api to retrieve default value and assign it to local variables
30395 -- if it is passed, use the passed owner id and due date
30396
30397 -- here in defaulting , considered only project flow
30398 -- task flow is not considered and passing task ver id as NULL
30399
30400 IF p_deliverable_owner_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
30401 PA_DELIVERABLE_UTILS.GET_DEFAULT_DLVR_OWNER
30402 (
30403 p_project_id => p_project_id
30404 ,p_task_ver_id => NULL
30405 ,x_owner_id => l_dlvr_owner_id
30406 ,x_owner_name => l_dlvr_owner_name
30407 );
30408 ELSE
30409 l_dlvr_owner_id := p_deliverable_owner_id;
30410 END IF;
30411
30412 IF p_due_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE THEN
30413 PA_DELIVERABLE_UTILS.GET_DEFAULT_DLVR_DATE
30414 (
30415 p_project_id => p_project_id
30416 ,p_task_ver_id => NULL
30417 ,x_due_date => l_default_date
30418 );
30419 ELSE
30420 l_default_date := p_due_date;
30421 END IF;
30422
30423 -- 3651542 end
30424
30425 -- All other validations done in PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
30426 --invoke the api to create deliverable
30427 Pa_Deliverable_Pub.Create_Deliverable
30428 ( p_api_version => p_api_version
30429 , p_init_msg_list => FND_API.G_FALSE -- passed as false as doesn't want message stack to be reset.
30430 -- 3735792, passing p_commit as false to next level api calls
30431 , p_commit => FND_API.G_FALSE
30432 , p_validate_only => FND_API.G_FALSE
30433 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
30434 , p_calling_module => 'AMG'
30435 , p_debug_mode => p_debug_mode
30436 , p_max_msg_count => NULL
30437 , p_record_version_number => 1
30438 , p_object_type => 'PA_DELIVERABLES'
30439 , p_project_id => l_project_id
30440 , p_dlvr_number => p_deliverable_short_name
30441 , p_dlvr_name => p_deliverable_name
30442 , p_dlvr_description => p_description
30443 , p_dlvr_owner_id => l_dlvr_owner_id -- for bug# 3651542, earlier p_deliverable_owner_id was passed
30444 , p_dlvr_owner_name => NULL
30445 -- for bug# 3729250
30446 -- , p_carrying_out_org_id => p_carrying_out_org_id
30447 , p_carrying_out_org_name => NULL
30448 , p_dlvr_version_id => null
30449 , p_status_code => p_status_code
30450 , p_parent_structure_id => NULL
30451 , p_dlvr_type_id => p_deliverable_type_id
30452 , p_dlvr_type_name => NULL
30453 , p_progress_weight => p_progress_weight
30454 , p_scheduled_finish_date => l_default_date -- for bug# 3651542, earlier p_due_date was passed
30455 , p_actual_finish_date => p_completion_date
30456 , p_task_id => l_task_id
30457 , p_task_version_id => null
30458 , p_task_name => null
30459 , p_deliverable_reference => p_pm_deliverable_reference
30460 , p_item_id => p_item_id
30461 , p_inventory_org_id => p_inventory_org_id
30462 , p_quantity => p_quantity
30463 , p_uom_code => p_uom_code
30464 -- for bug# 3729250
30465 -- , p_item_description => p_item_description
30466 , p_unit_price => p_unit_price
30467 , p_unit_number => p_unit_number
30468 , p_currency_code => p_currency_code
30469 , p_dlvr_item_id => px_deliverable_id
30470 , p_pm_source_code => p_pm_source_code /* Bug no. 3651113 */
30471 , x_return_status => x_return_status
30472 , x_msg_count => x_msg_count
30473 , x_msg_data => x_msg_data
30474 );
30475
30476 l_deliverable_element_id := px_deliverable_id ;
30477
30478 IF p_debug_mode = 'Y' THEN
30479 pa_debug.g_err_stage := 'Created deliverable ['|| l_deliverable_element_id||']['||x_return_status||']';
30480 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30481 END IF;
30482
30483
30484 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30485 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30486 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30487 RAISE FND_API.G_EXC_ERROR;
30488 END IF;
30489 -- Will create actions only when deliverable type of deliverable
30490 -- has action creation enabled.
30491
30492 Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
30493 (
30494 p_dlvr_type_id => p_deliverable_type_id
30495 ,x_dlvr_prg_enabled => l_dlvr_prg_enabled
30496 ,x_dlvr_action_enabled => l_dlvr_action_enabled
30497 ,x_dlvr_default_status_code => l_status_code
30498 );
30499
30500 IF p_debug_mode = 'Y' THEN
30501 pa_debug.g_err_stage := 'Dlvr Type allow action creation ['|| l_dlvr_action_enabled||']';
30502 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30503 END IF;
30504
30505 -- invoke the api pa_actions_pub.create_dlvr_action_wrapper
30506 -- to create actions for the deliverable, insert records
30507 -- in OKE tables, create events if required.
30508
30509 i := p_action_in_tbl.first();
30510 l_action_in_tbl.delete;
30511
30512
30513 WHILE (i IS NOT NULL ) LOOP
30514 IF ( p_pm_deliverable_reference = p_action_in_tbl(i).pm_deliverable_reference) THEN
30515 i_actn := i_actn + 1;
30516 l_action_in_tbl(i_actn) := p_action_in_tbl(i);
30517 l_action_in_tbl(i_actn).deliverable_id := l_deliverable_element_id;
30518
30519 -- added for bug# 3749447
30520 -- if pm_source_code is not passed in action record, use it from deliverable record
30521 IF p_action_in_tbl(i).pm_source_code IS NOT NULL and p_action_in_tbl(i).pm_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
30522 l_action_in_tbl(i_actn).pm_source_code := p_pm_source_code;
30523 END IF;
30524
30525 END IF;
30526 i := p_action_in_tbl.next(i);
30527 END LOOP;
30528
30529 IF p_debug_mode = 'Y' THEN
30530 pa_debug.g_err_stage := 'About to Create ['|| i_actn ||'] out of ['||i ||'] Actn enabled ['||l_dlvr_action_enabled||']';
30531 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30532 END IF;
30533
30534
30535 IF (i_actn > 0 ) THEN
30536
30537 IF ( l_dlvr_action_enabled = 'Y') THEN
30538
30539 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
30540 ( p_api_version => p_api_version
30541 , p_init_msg_list => FND_API.G_FALSE
30542 , p_commit => FND_API.G_FALSE
30543 , p_validate_only => FND_API.G_FALSE
30544 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
30545 , p_calling_module => 'AMG'
30546 , p_debug_mode => p_debug_mode
30547 , p_insert_or_update => 'INSERT'
30548 , p_action_in_tbl => l_action_in_tbl
30549 , x_action_out_tbl => x_action_out_tbl
30550 , x_return_status => x_return_status
30551 , x_msg_count => x_msg_count
30552 , x_msg_data => x_msg_data);
30553
30554 IF p_debug_mode = 'Y' THEN
30555 pa_debug.g_err_stage := 'Returned after Create actions for ['|| i_actn ||'] action return['||x_return_status||']';
30556 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30557 END IF;
30558
30559 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30560 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30561 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30562 RAISE FND_API.G_EXC_ERROR;
30563 END IF;
30564
30565 ELSE --l_dlvr_action_enabled <> 'Y'
30566
30567 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
30568 l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
30569 PA_UTILS.ADD_MESSAGE
30570 (p_app_short_name => 'PA',
30571 p_msg_name => 'PA_DLVR_VALID_ERR',
30572 p_token1 => 'PROJECT',
30573 p_value1 => l_project_number,
30574 p_token2 => 'TASK',
30575 p_value2 => l_task_number,
30576 p_token3 => 'DLVR_REFERENCE',
30577 p_value3 => p_pm_deliverable_reference,
30578 p_token4 => 'MESSAGE',
30579 p_value4 => l_err_message
30580 );
30581 END IF;
30582
30583 x_return_status := FND_API.G_RET_STS_ERROR;
30584 RAISE FND_API.G_EXC_ERROR;
30585 END IF; -- l_dlvr_action_enabled = 'Y'
30586
30587 END IF; --i_actn > 0
30588
30589 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
30590 IF (p_commit = FND_API.G_TRUE) THEN
30591 COMMIT;
30592 END IF;
30593
30594 IF p_debug_mode = 'Y' THEN
30595 pa_debug.reset_curr_function;
30596 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
30597 END IF;
30598
30599 EXCEPTION
30600 WHEN FND_API.G_EXC_ERROR THEN
30601 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
30602 --IF (p_commit = FND_API.G_TRUE) THEN
30603 ROLLBACK TO CREATE_DELIVERABLE_PUB;
30604 --END IF;
30605
30606 IF p_debug_mode = 'Y' THEN
30607 pa_debug.reset_curr_function;
30608 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
30609 END IF;
30610 x_return_status := FND_API.G_RET_STS_ERROR;
30611 x_msg_count := FND_MSG_PUB.count_msg;
30612
30613 IF x_msg_count = 1 THEN
30614 PA_INTERFACE_UTILS_PUB.get_messages
30615 (p_encoded => FND_API.G_FALSE,
30616 p_msg_index => 1,
30617 p_msg_count => x_msg_count,
30618 p_msg_data => x_msg_data,
30619 p_data => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
30620 p_msg_index_out => l_msg_index_out);
30621 x_msg_data := l_data ; -- 4537865
30622 END IF;
30623
30624 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
30625 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
30626 --IF (p_commit = FND_API.G_TRUE) THEN
30627 ROLLBACK TO CREATE_DELIVERABLE_PUB;
30628 --END IF;
30629
30630 IF p_debug_mode = 'Y' THEN
30631 pa_debug.reset_curr_function;
30632 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
30633 END IF;
30634 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30635 x_msg_count := FND_MSG_PUB.count_msg;
30636
30637 IF x_msg_count = 1 THEN
30638 PA_INTERFACE_UTILS_PUB.get_messages
30639 (p_encoded => FND_API.G_FALSE,
30640 p_msg_index => 1,
30641 p_msg_count => x_msg_count,
30642 p_msg_data => x_msg_data,
30643 p_data => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
30644 p_msg_index_out => l_msg_index_out);
30645 x_msg_data := l_data ; -- 4537865
30646 END IF;
30647
30648 WHEN OTHERS THEN
30649 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
30650 --IF (p_commit = FND_API.G_TRUE) THEN
30651 ROLLBACK TO CREATE_DELIVERABLE_PUB;
30652 --END IF;
30653
30654 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
30655 x_msg_count := 1;
30656 x_msg_data := SQLERRM;
30657
30658 IF p_debug_mode = 'Y' THEN
30659 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
30660 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
30661 pa_debug.reset_curr_function;
30662 END IF;
30663
30664 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
30665 FND_MSG_PUB.add_exc_msg
30666 ( p_pkg_name => G_PKG_NAME
30667 , p_procedure_name => l_api_name );
30668 END IF;
30669 END create_deliverable;
30670
30671 PROCEDURE create_deliverable_action
30672 ( p_api_version IN NUMBER := 1.0
30673 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
30674 , p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
30675 , p_commit IN VARCHAR2 := FND_API.G_FALSE
30676 , p_action_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30677 , p_action_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30678 , p_function_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30679 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30680 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30681 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30682 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30683 , p_pm_action_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30684 -- for bug# 3729250
30685 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30686 , p_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30687 , p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30688 -- added for bug# 3729250
30689 , p_pm_proj_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30690 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30691 -- added for bug# 3729250
30692 , p_financial_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30693 , p_financial_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30694 , p_destination_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30695 , p_receiving_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30696 , p_receiving_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30697 , p_po_need_by_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30698 , p_vendor_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30699 , p_vendor_site_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30700 -- , p_project_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30701 , p_Quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30702 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30703 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30704 , p_exchange_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30705 , p_exchange_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30706 , p_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30707 , p_expenditure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30708 , p_expenditure_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30709 , p_expenditure_item_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30710 , p_requisition_line_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30711 , p_category_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30712 , p_ready_to_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30713 , p_initiate_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30714 , p_ship_from_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30715 , p_ship_from_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30716 , p_ship_to_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30717 , p_ship_to_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30718 , p_demand_schedule IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30719 , p_expected_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30720 , p_promised_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30721 , p_volume IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30722 , p_volume_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30723 , p_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30724 , p_weight_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30725 , p_ready_to_ship_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30726 , p_initiate_planning_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30727 , p_initiate_shipping_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30728 , p_event_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30729 , p_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3749462 changed datatype
30730 , p_invoice_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30731 , p_revenue_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30732 , p_event_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30733 , p_event_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30734 , p_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30735 , p_bill_hold_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30736 , p_project_functional_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30737 , p_project_functional_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30738 , p_project_functional_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30739 , p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30740 , p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30741 , p_project_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30742 , p_funding_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
30743 , p_funding_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
30744 , p_funding_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
30745 , p_pm_event_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
30746 , x_action_out OUT NOCOPY action_out_tbl_type
30747 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30748 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
30749 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
30750 )
30751 IS
30752
30753 -- 3749462 changed the cursor, added two parameters and using it
30754 Cursor C_dlvr_type(l_project_id NUMBER, l_deliverable_id NUMBER) IS
30755 SELECT type_id
30756 FROM PA_PROJ_ELEMENTS
30757 WHERE proj_element_id = l_deliverable_id
30758 AND project_id = l_project_id
30759 AND OBJECT_TYPE = 'PA_DELIVERABLES';
30760
30761 l_api_name CONSTANT VARCHAR2(30) := 'create_deliverable_actions';
30762
30763 l_action_in_tbl action_in_tbl_type ;
30764 l_action_out_tbl action_out_tbl_type ;
30765
30766 l_project_id NUMBER;
30767 l_task_id NUMBER;
30768 l_project_number Pa_Projects_All.Segment1%TYPE;
30769 l_task_number Pa_Proj_Elements.Name%TYPE;
30770 l_dlvr_type_id Pa_Proj_Elements.type_id%TYPE;
30771
30772 l_dlvr_prg_enabled VARCHAR2(1) := NULL;
30773 l_dlvr_action_enabled VARCHAR2(1) := NULL;
30774 l_status_code PA_PROJ_ELEMENTS.STATUS_CODE%TYPE;
30775
30776 l_msg_index_out NUMBER;
30777 l_msg_count NUMBER ;
30778 l_data VARCHAR2(2000);
30779 l_msg_data VARCHAR2(2000);
30780 l_err_message VARCHAR2(2000);
30781 l_unique_flag VARCHAR2(1);
30782
30783 l_function_allowed VARCHAR2(1);
30784 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
30785
30786 l_deliverable_id NUMBER := 0;
30787
30788 i NUMBER := 1;
30789
30790 -- 3729250 added local variables
30791 l_fin_task_id NUMBER := NULL;
30792
30793 BEGIN
30794
30795 -- Standard begin of API savepoint
30796
30797 -- 3735792, setting save point unconditionally
30798 -- IF (p_commit = FND_API.G_TRUE) THEN
30799 SAVEPOINT create_deliverable_actions_pub;
30800 -- END IF;
30801
30802 -- Standard call to check for call compatibility.
30803 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
30804 p_api_version ,
30805 l_api_name ,
30806 G_PKG_NAME )
30807 THEN
30808 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30809 END IF;
30810
30811 -- Initialize the message table if requested.
30812 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
30813 FND_MSG_PUB.initialize;
30814 END IF;
30815
30816 IF p_debug_mode = 'Y' THEN
30817 PA_DEBUG.set_curr_function( p_function => l_api_name,
30818 p_debug_mode => p_debug_mode );
30819 pa_debug.g_err_stage:= 'Inside '||l_api_name;
30820 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
30821 END IF;
30822
30823 -- Set API return status to success
30824 x_return_status := FND_API.G_RET_STS_SUCCESS;
30825
30826 -- Function Security Check
30827 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
30828 (p_api_version_number => p_api_version,
30829 p_responsibility_id => l_resp_id,
30830 p_function_name => 'PA_DELIVERABLE_EDIT',
30831 p_msg_count => x_msg_count,
30832 p_msg_data => x_msg_data,
30833 p_return_status => x_return_status,
30834 p_function_allowed => l_function_allowed);
30835
30836 IF p_debug_mode = 'Y' THEN
30837 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
30838 END IF;
30839
30840 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30841 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30842 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30843 RAISE FND_API.G_EXC_ERROR;
30844 END IF;
30845
30846 IF l_function_allowed = 'N' THEN
30847 pa_interface_utils_pub.map_new_amg_msg
30848 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
30849 ,p_msg_attribute => 'CHANGE'
30850 ,p_resize_flag => 'Y'
30851 ,p_msg_context => 'GENERAL'
30852 ,p_attribute1 => ''
30853 ,p_attribute2 => ''
30854 ,p_attribute3 => ''
30855 ,p_attribute4 => ''
30856 ,p_attribute5 => '');
30857
30858 x_return_status := FND_API.G_RET_STS_ERROR;
30859 RAISE FND_API.G_EXC_ERROR;
30860 END IF;
30861
30862 -- validate the input parameters.
30863 PA_PROJECT_PVT.Convert_pm_projref_to_id (
30864 p_pm_project_reference => p_pm_proj_reference -- 3729250 , earlier was passed as null
30865 , p_pa_project_id => p_project_id
30866 , p_out_project_id => l_project_id
30867 , p_return_status => x_return_status
30868 );
30869
30870 IF p_debug_mode = 'Y' THEN
30871 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
30872 END IF;
30873
30874 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
30875 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30876 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
30877 RAISE FND_API.G_EXC_ERROR;
30878 END IF;
30879
30880 -- Validate Deliverable reference / ID
30881 PA_Deliverable_Utils.Convert_pm_dlvrref_to_id(
30882 p_deliverable_reference => p_deliverable_reference
30883 , p_deliverable_id => p_deliverable_id
30884 , p_project_id => l_project_id
30885 , p_out_deliverable_id => l_deliverable_id
30886 , p_return_status => x_return_status);
30887
30888 IF p_debug_mode = 'Y' THEN
30889 pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID ['||l_deliverable_id||'] Return Status ['||x_return_status||']',3) ;
30890 END IF;
30891
30892 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30893 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30894 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30895 RAISE FND_API.G_EXC_ERROR;
30896 END IF;
30897
30898 -- 3729250, Validate Financial Task Reference / ID
30899 -- PA_PROJECT_PVT.Convert_pm_taskref_to_id_all should only be called if either p_financial_task_id or
30900 -- p_financial_task_reference is passed
30901
30902 IF ( ( p_financial_task_id IS NOT NULL AND p_financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
30903 ( p_financial_task_reference IS NOT NULL AND p_financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) THEN
30904
30905 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
30906 p_pa_project_id => l_project_id
30907 , p_structure_type => 'FINANCIAL'
30908 , p_pa_task_id => p_financial_task_id
30909 , p_pm_task_reference => p_financial_task_reference
30910 , p_out_task_id => l_fin_task_id
30911 , p_return_status => x_return_status );
30912
30913 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30914 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30915 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30916 RAISE FND_API.G_EXC_ERROR;
30917 END IF;
30918
30919 END IF;
30920
30921 -- Validate Action reference - not null, unique
30922 pa_deliverable_utils.is_action_reference_unique (
30923 p_action_reference => p_pm_action_reference
30924 , p_deliverable_id => l_deliverable_id
30925 , p_project_id => l_project_id
30926 , x_unique_flag => l_unique_flag
30927 , x_return_status => x_return_status
30928 );
30929
30930 IF p_debug_mode = 'Y' THEN
30931 pa_debug.write(g_pkg_name,'Action Reference Unique Return Status ['||x_return_status||']Unique['||l_unique_flag||']',3) ;
30932 END IF;
30933
30934 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
30935 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
30936 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
30937 RAISE FND_API.G_EXC_ERROR;
30938 END IF;
30939
30940 -- Derive the dlvr_Type of a deliverable
30941 -- 3749462 passing l_project_id and l_deliverable_id to cursor
30942 -- earlier p_project_id and p_deliverable_id was used directly, which may be G_PA_MISS_NUM and
30943 -- cursor will return l_dlvr_type_id as NULL
30944
30945 OPEN C_dlvr_type(l_project_id,l_deliverable_id);
30946 FETCH C_dlvr_Type INTO l_dlvr_type_id;
30947 CLOSE C_dlvr_type;
30948
30949 -- Will create actions only when deliverable type of deliverable
30950 -- has action creation enabled.
30951
30952 Pa_Deliverable_Utils.GET_DLVR_TYPE_INFO
30953 (
30954 p_dlvr_type_id => l_dlvr_type_id
30955 ,x_dlvr_prg_enabled => l_dlvr_prg_enabled
30956 ,x_dlvr_action_enabled => l_dlvr_action_enabled
30957 ,x_dlvr_default_status_code => l_status_code
30958 );
30959
30960 IF p_debug_mode = 'Y' THEN
30961 pa_debug.g_err_stage := 'Dlvr Type allow action creation ['|| l_dlvr_action_enabled||']';
30962 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
30963 END IF;
30964
30965 -- Populate the table with input parameters
30966 ---- --dbms_output.put_line('loading');
30967
30968 IF ( i IS NOT NULL ) THEN
30969
30970 IF (l_dlvr_action_enabled = 'Y') THEN
30971
30972 l_action_in_tbl(i).action_name := p_action_name ;
30973 l_action_in_tbl(i).action_owner_id := p_action_owner_id ;
30974 l_action_in_tbl(i).function_code := p_function_code ;
30975 l_action_in_tbl(i).due_date := p_due_date ;
30976 l_action_in_tbl(i).description := p_description ;
30977 l_action_in_tbl(i).completion_date := p_completion_date ;
30978 l_action_in_tbl(i).pm_source_code := p_pm_source_code ;
30979 l_action_in_tbl(i).pm_action_reference := p_pm_action_reference ;
30980 -- for bug# 3729250
30981 -- l_action_in_tbl(i).carrying_out_org_id := p_carrying_out_org_id ;
30982 l_action_in_tbl(i).pm_deliverable_reference := p_deliverable_reference ;
30983 l_action_in_tbl(i).deliverable_id := l_deliverable_id ; -- 3749462 earlier p_deliverable_id was passed
30984 l_action_in_tbl(i).financial_task_id := l_fin_task_id ; -- for bug# 3729250
30985 l_action_in_tbl(i).destination_type_code := p_destination_type_code ;
30986 l_action_in_tbl(i).receiving_org_id := p_receiving_org_id ;
30987 l_action_in_tbl(i).receiving_location_id := p_receiving_location_id ;
30988 l_action_in_tbl(i).po_need_by_date := p_po_need_by_date ;
30989 l_action_in_tbl(i).vendor_id := p_vendor_id ;
30990 l_action_in_tbl(i).vendor_site_code := p_vendor_site_code ;
30991 l_action_in_tbl(i).Quantity := p_Quantity ;
30992 l_action_in_tbl(i).uom_code := p_uom_code ;
30993 l_action_in_tbl(i).unit_price := p_unit_price ;
30994 l_action_in_tbl(i).exchange_rate_type := p_exchange_rate_type ;
30995 l_action_in_tbl(i).exchange_rate_date := p_exchange_rate_date ;
30996 l_action_in_tbl(i).exchange_rate := p_exchange_rate ;
30997 l_action_in_tbl(i).expenditure_type := p_expenditure_type ;
30998 l_action_in_tbl(i).expenditure_org_id := p_expenditure_org_id ;
30999 l_action_in_tbl(i).expenditure_item_date := p_expenditure_item_date ;
31000 l_action_in_tbl(i).requisition_line_type_id := p_requisition_line_type_id ;
31001 l_action_in_tbl(i).category_id := p_category_id ;
31002 l_action_in_tbl(i).ready_to_procure_flag := p_ready_to_procure_flag ;
31003 l_action_in_tbl(i).initiate_procure_flag := p_initiate_procure_flag ;
31004 l_action_in_tbl(i).ship_from_organization_id := p_ship_from_organization_id ;
31005 l_action_in_tbl(i).ship_from_location_id := p_ship_from_location_id ;
31006 l_action_in_tbl(i).ship_to_organization_id := p_ship_to_organization_id ;
31007 l_action_in_tbl(i).ship_to_location_id := p_ship_to_location_id ;
31008 l_action_in_tbl(i).demand_schedule := p_demand_schedule ;
31009 l_action_in_tbl(i).expected_shipment_date := p_expected_shipment_date ;
31010 l_action_in_tbl(i).promised_shipment_date := p_promised_shipment_date ;
31011 l_action_in_tbl(i).volume := p_volume ;
31012 l_action_in_tbl(i).volume_uom := p_volume_uom ;
31013 l_action_in_tbl(i).weight := p_weight ;
31014 l_action_in_tbl(i).weight_uom := p_weight_uom ;
31015 l_action_in_tbl(i).ready_to_ship_flag := p_ready_to_ship_flag ;
31016 l_action_in_tbl(i).initiate_planning_flag := p_initiate_planning_flag ;
31017 l_action_in_tbl(i).initiate_shipping_flag := p_initiate_shipping_flag ;
31018 l_action_in_tbl(i).event_type := p_event_type ;
31019 l_action_in_tbl(i).currency := p_currency ;
31020 l_action_in_tbl(i).invoice_amount := p_invoice_amount ;
31021 l_action_in_tbl(i).revenue_amount := p_revenue_amount ;
31022 l_action_in_tbl(i).event_date := p_event_date ;
31023 l_action_in_tbl(i).event_number := p_event_number ;
31024 l_action_in_tbl(i).organization_id := p_organization_id ;
31025 l_action_in_tbl(i).bill_hold_flag := p_bill_hold_flag ;
31026 l_action_in_tbl(i).project_functional_rate_type:= p_project_functional_rate_type;
31027 l_action_in_tbl(i).project_functional_rate_date:= p_project_functional_rate_date;
31028 l_action_in_tbl(i).project_functional_rate := p_project_functional_rate ;
31029 l_action_in_tbl(i).project_rate_type := p_project_rate_type ;
31030 l_action_in_tbl(i).project_rate_date := p_project_rate_date ;
31031 l_action_in_tbl(i).project_rate := p_project_rate ;
31032 l_action_in_tbl(i).funding_rate_type := p_funding_rate_type ;
31033 l_action_in_tbl(i).funding_rate_date := p_funding_rate_date ;
31034 l_action_in_tbl(i).funding_rate := p_funding_rate ;
31035 l_action_in_tbl(i).pm_event_reference := p_pm_event_reference ; -- 3651489 added parameter
31036
31037
31038 ELSE --l_dlvr_action_enabled <> 'Y'
31039
31040 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
31041 l_err_message := FND_MESSAGE.GET_STRING('PA','DLVR_ACTION_NOT_ENABLED') ;
31042 PA_UTILS.ADD_MESSAGE
31043 (p_app_short_name => 'PA',
31044 p_msg_name => 'PA_DLVR_VALID_ERR',
31045 p_token1 => 'PROJECT',
31046 p_value1 => l_project_number,
31047 p_token2 => 'TASK',
31048 p_value2 => l_task_number,
31049 p_token3 => 'DLVR_REFERENCE',
31050 p_value3 => p_deliverable_reference,
31051 p_token4 => 'MESSAGE',
31052 p_value4 => l_err_message
31053 );
31054 END IF;
31055 x_return_status := FND_API.G_RET_STS_ERROR;
31056 RAISE FND_API.G_EXC_ERROR;
31057
31058 END IF; -- l_dlvr_action_enabled = 'Y'
31059 END IF;
31060
31061 -- Call api to create actions passing the newly populated plsql table
31062 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31063 ( p_api_version => p_api_version
31064 , p_init_msg_list => FND_API.G_FALSE
31065 , p_commit => FND_API.G_FALSE
31066 , p_validate_only => FND_API.G_FALSE
31067 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
31068 , p_calling_module => 'AMG'
31069 , p_debug_mode => p_debug_mode
31070 , p_insert_or_update => 'INSERT'
31071 , p_action_in_tbl => l_action_in_tbl
31072 , x_action_out_tbl => x_action_out
31073 , x_return_status => x_return_status
31074 , x_msg_count => l_msg_count
31075 , x_msg_data => l_msg_data);
31076
31077 IF p_debug_mode = 'Y' THEN
31078 pa_debug.g_err_stage := 'Returned from Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper ['|| x_return_status||']';
31079 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
31080 END IF;
31081
31082 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31083 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31084 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31085 RAISE FND_API.G_EXC_ERROR;
31086 END IF; i := l_action_out_tbl.first();
31087
31088 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31089 IF (p_commit = FND_API.G_TRUE) THEN
31090 COMMIT;
31091 END IF;
31092
31093 IF p_debug_mode = 'Y' THEN
31094 pa_debug.reset_curr_function;
31095 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31096 END IF;
31097
31098 EXCEPTION
31099 WHEN FND_API.G_EXC_ERROR THEN
31100 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31101 -- IF (p_commit = FND_API.G_TRUE) THEN
31102 ROLLBACK TO create_deliverable_actions_pub;
31103 -- END IF;
31104
31105 x_return_status := FND_API.G_RET_STS_ERROR;
31106 l_msg_count := FND_MSG_PUB.count_msg;
31107
31108 IF l_msg_count = 1 AND x_msg_data IS NULL
31109 THEN
31110 PA_INTERFACE_UTILS_PUB.get_messages
31111 (p_encoded => FND_API.G_FALSE,
31112 p_msg_index => 1,
31113 p_msg_count => x_msg_count,
31114 p_msg_data => l_msg_data,
31115 p_data => l_data,
31116 p_msg_index_out => l_msg_index_out);
31117
31118 x_msg_data := l_data;
31119 x_msg_count := l_msg_count;
31120 ELSE
31121 x_msg_count := l_msg_count;
31122
31123 END IF;
31124
31125 IF p_debug_mode = 'Y' THEN
31126 pa_debug.reset_curr_function;
31127 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31128 END IF;
31129
31130 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
31131 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31132 --IF (p_commit = FND_API.G_TRUE) THEN
31133 ROLLBACK TO create_deliverable_actions_pub;
31134 --END IF;
31135
31136 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31137 l_msg_count := FND_MSG_PUB.count_msg;
31138
31139 IF l_msg_count = 1 AND x_msg_data IS NULL
31140 THEN
31141 PA_INTERFACE_UTILS_PUB.get_messages
31142 (p_encoded => FND_API.G_FALSE,
31143 p_msg_index => 1,
31144 p_msg_count => x_msg_count,
31145 p_msg_data => l_msg_data,
31146 p_data => l_data,
31147 p_msg_index_out => l_msg_index_out);
31148
31149 x_msg_data := l_data;
31150 x_msg_count := l_msg_count;
31151 ELSE
31152 x_msg_count := l_msg_count;
31153
31154 END IF;
31155
31156 IF p_debug_mode = 'Y' THEN
31157 pa_debug.reset_curr_function;
31158 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31159 END IF;
31160
31161 WHEN OTHERS THEN
31162 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31163 --IF (p_commit = FND_API.G_TRUE) THEN
31164 ROLLBACK TO create_deliverable_actions_pub;
31165 --END IF;
31166
31167 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31168 x_msg_count := 1;
31169 x_msg_data := SQLERRM;
31170
31171 IF p_debug_mode = 'Y' THEN
31172 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31173 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31174 pa_debug.reset_curr_function;
31175 END IF;
31176
31177
31178 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
31179 FND_MSG_PUB.add_exc_msg
31180 ( p_pkg_name => G_PKG_NAME
31181 , p_procedure_name => l_api_name );
31182 END IF;
31183 END create_deliverable_action;
31184
31185 --------------------------------------------------------------------------------
31186 --Name: Update_Deliverable
31187 --Type: Procedure
31188 --Description: This procedure updates a deliverable and its related actions
31189 -- which are passed through actions PLSQL table
31190 --
31191 --Called subprograms: PA_DELIVERABLE_PUB.UPDATE_DELIVERABLE
31192 -- Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31193 --
31194 --
31195 --
31196 --History:
31197 -- 08-Mar-2004 Puneet Created
31198 --
31199
31200 PROCEDURE update_deliverable
31201 ( p_api_version IN NUMBER := 1.0
31202 , p_init_msg_list IN VARCHAR2 := 'F'
31203 , p_commit IN VARCHAR2 := FND_API.G_FALSE
31204 , p_debug_mode IN VARCHAR2 := 'N'
31205 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31206 , p_deliverable_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31207 , p_deliverable_short_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31208 , p_deliverable_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31209 , p_deliverable_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31210 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31211 , p_status_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31212 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31213 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31214 , p_progress_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31215 , px_deliverable_id IN OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31216 , p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31217 -- for bug# 3729250
31218 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31219 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31220 , p_task_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31221 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31222 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31223 , p_action_in_tbl IN action_in_tbl_type := G_deliverable_actions_in_tbl -- 3435905 passing default
31224 , x_action_out_tbl OUT NOCOPY action_out_tbl_type /*Added the nocopy check for 4537865 */
31225 , p_item_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31226 , P_inventory_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31227 , p_quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31228 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31229 -- for bug# 3729250
31230 -- , p_item_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31231 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31232 -- for bug# 3729250
31233 , p_unit_number IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31234 , p_currency_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31235 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR /* Bug no. 3651113 */
31236 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31237 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31238 )
31239
31240 IS
31241 l_project_id NUMBER;
31242 l_task_id NUMBER;
31243 l_task_source_reference VARCHAR2(240);
31244 l_msg_count NUMBER;
31245 l_msg_data VARCHAR2(2000);
31246 l_msg_index_out NUMBER;
31247 l_data VARCHAR2(2000);
31248
31249
31250 l_deliverable_id NUMBER;
31251 l_action_id NUMBER;
31252 l_deliverable_version_id NUMBER;
31253
31254 l_action_in_tbl_ins action_in_tbl_type;
31255 l_action_in_tbl_upd action_in_tbl_type;
31256
31257 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_DELIVERABLE';
31258
31259 i NUMBER := 0;
31260 i_actn NUMBER := 0;
31261 i_actn_ins NUMBER := 0;
31262 i_actn_upd NUMBER := 0;
31263
31264 l_function_allowed VARCHAR2(1);
31265 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31266 l_pm_product_code VARCHAR2(2) :='Z'; /* Bug 3651113 */
31267
31268 /*cursor added for Bug 3651113 */
31269 Cursor p_product_code_csr (p_pm_product_code IN VARCHAR2)
31270 Is
31271 Select 'X'
31272 from pa_lookups
31273 where lookup_type='PM_PRODUCT_CODE'
31274 and lookup_code = p_pm_product_code;
31275
31276 Cursor C_vers (p_proj_element_id NUMBER) IS
31277 SELECT vers.element_version_id
31278 FROM pa_proj_element_versions vers
31279 , pa_proj_elements elem
31280 WHERE vers.proj_element_id = elem.proj_element_id
31281 AND elem.project_id = vers.project_id
31282 AND elem.proj_element_id = p_proj_element_id
31283 AND elem.project_id = vers.project_id
31284 AND elem.object_type = 'PA_DELIVERABLES';
31285
31286 l_dlvr_id NUMBER; -- added for bug# 3749447
31287
31288 BEGIN
31289 -- Initialize the message table if requested.
31290 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
31291 FND_MSG_PUB.initialize;
31292 END IF;
31293 ---- --dbms_output.put_line('entering pa_project_pub.Update_deliverable['||p_project_id||']['||p_task_id||']');
31294
31295 -- 3735792, setting save point unconditionally
31296 --IF (p_commit = FND_API.G_TRUE) THEN
31297 savepoint UPDATE_DELIVERABLE_PUB;
31298 --END IF;
31299
31300 IF p_debug_mode = 'Y' THEN
31301 PA_DEBUG.set_curr_function( p_function => l_api_name,
31302 p_debug_mode => p_debug_mode );
31303 pa_debug.g_err_stage:= 'Inside '||l_api_name;
31304 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31305 END IF;
31306
31307 -- Validation check for product code : Bug 3651113
31308
31309 OPEN p_product_code_csr (p_pm_source_code);
31310 FETCH p_product_code_csr INTO l_pm_product_code;
31311 CLOSE p_product_code_csr;
31312
31313 IF l_pm_product_code <> 'X'
31314 AND p_pm_source_code <> 'WORKPLAN'
31315 THEN
31316 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
31317 THEN
31318 pa_interface_utils_pub.map_new_amg_msg
31319 ( p_old_message_code => 'PA_PRODUCT_CODE_IS_INVALID'
31320 ,p_msg_attribute => 'CHANGE'
31321 ,p_resize_flag => 'N'
31322 ,p_msg_context => 'GENERAL'
31323 ,p_attribute1 => ''
31324 ,p_attribute2 => ''
31325 ,p_attribute3 => ''
31326 ,p_attribute4 => ''
31327 ,p_attribute5 => '');
31328 END IF;
31329 x_return_status := FND_API.G_RET_STS_ERROR;
31330 RAISE FND_API.G_EXC_ERROR;
31331 END IF;
31332
31333 -- Set API return status to success
31334 x_return_status := FND_API.G_RET_STS_SUCCESS;
31335
31336 IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
31337 l_task_id := NULL;
31338 ELSE
31339 l_task_id := p_task_id;
31340 END IF;
31341
31342 IF p_task_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
31343 l_task_source_reference := NULL;
31344 ELSE
31345 l_task_source_reference := p_task_source_reference;
31346 END IF;
31347
31348 -- Function Security Check
31349 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31350 (p_api_version_number => p_api_version,
31351 p_responsibility_id => l_resp_id,
31352 p_function_name => 'PA_DELIVERABLE_EDIT',
31353 p_msg_count => x_msg_count,
31354 p_msg_data => x_msg_data,
31355 p_return_status => x_return_status,
31356 p_function_allowed => l_function_allowed);
31357
31358 IF p_debug_mode = 'Y' THEN
31359 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
31360 END IF;
31361
31362 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31363 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31364 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31365 RAISE FND_API.G_EXC_ERROR;
31366 END IF;
31367
31368 IF l_function_allowed = 'N' THEN
31369 pa_interface_utils_pub.map_new_amg_msg
31370 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
31371 ,p_msg_attribute => 'CHANGE'
31372 ,p_resize_flag => 'Y'
31373 ,p_msg_context => 'GENERAL'
31374 ,p_attribute1 => ''
31375 ,p_attribute2 => ''
31376 ,p_attribute3 => ''
31377 ,p_attribute4 => ''
31378 ,p_attribute5 => '');
31379
31380 x_return_status := FND_API.G_RET_STS_ERROR;
31381 RAISE FND_API.G_EXC_ERROR;
31382 END IF;
31383
31384 -- validate the input parameters.
31385 -- Get the task and Project details based on source reference passed
31386 PA_PROJECT_PVT.Convert_pm_projref_to_id (
31387 p_pm_project_reference => p_proj_source_reference
31388 , p_pa_project_id => p_project_id
31389 , p_out_project_id => l_project_id
31390 , p_return_status => x_return_status
31391 );
31392
31393 IF p_debug_mode = 'Y' THEN
31394 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31395 END IF;
31396
31397 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31398 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31399 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31400 RAISE FND_API.G_EXC_ERROR;
31401 END IF;
31402
31403 -- 3749447 Changed from p_task_id to l_task_id in if conditon
31404 -- also did the same change in below api's parameter passing
31405
31406 IF ( l_task_id IS NOT NULL OR l_task_source_reference IS NOT NULL ) THEN
31407 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
31408 p_pa_project_id => l_project_id
31409 , p_structure_type => 'WORKPLAN'
31410 , p_pa_task_id => l_task_id
31411 , p_pm_task_reference => l_task_source_reference
31412 , p_out_task_id => l_task_id
31413 , p_return_status => x_return_status );
31414
31415 IF p_debug_mode = 'Y' THEN
31416 pa_debug.write(g_pkg_name,'Task Ref to ID Return Status ['||x_return_status||']Task ID['||l_task_id||']',3) ;
31417 END IF;
31418
31419 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31420 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31421 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31422 RAISE FND_API.G_EXC_ERROR;
31423 END IF;
31424 END IF;
31425
31426 -- Validate Deliverable reference / id- not null, unique
31427 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
31428 ( p_deliverable_reference => p_pm_deliverable_reference
31429 , p_deliverable_id => px_deliverable_id
31430 , p_project_id => l_project_id
31431 , p_out_deliverable_id => l_deliverable_id
31432 , p_return_status => x_return_status
31433 );
31434
31435 IF p_debug_mode = 'Y' THEN
31436 pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID ['||l_deliverable_id||'] Return Status ['||x_return_status||']',3) ;
31437 END IF;
31438
31439 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31440 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31441 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31442 RAISE FND_API.G_EXC_ERROR;
31443 END IF;
31444
31445 OPEN C_vers(l_deliverable_id);
31446 FETCH C_vers INTO l_deliverable_version_id;
31447 CLOSE C_vers;
31448
31449 IF p_debug_mode = 'Y' THEN
31450 pa_debug.write(g_pkg_name,'Updatinging deliverable ['|| p_deliverable_short_name||']['||l_deliverable_id||']['||l_project_id||']['||l_task_id||']',3);
31451 END IF;
31452
31453 -- All other validations done in PA_DELIVERABLE_PUB.UPDATE_DELIVERABLE
31454 --invoke the api to Update deliverable
31455
31456 Pa_Deliverable_Pub.Update_Deliverable
31457 ( p_api_version => p_api_version
31458 , p_init_msg_list => p_init_msg_list
31459 -- 3735792, passing p_commit as false to next level api calls
31460 , p_commit => FND_API.G_FALSE
31461 , p_validate_only => FND_API.G_FALSE
31462 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
31463 , p_calling_module => 'AMG'
31464 , p_debug_mode => p_debug_mode
31465 , p_max_msg_count => NULL
31466 , p_record_version_number => null
31467 , p_object_type => 'PA_DELIVERABLES'
31468 , p_project_id => l_project_id
31469 , p_dlvr_number => p_deliverable_short_name
31470 , p_dlvr_name => p_deliverable_name
31471 , p_dlvr_description => p_description
31472 , p_dlvr_owner_id => p_deliverable_owner_id
31473 , p_dlvr_owner_name => NULL
31474 -- for bug# 3729250
31475 -- , p_carrying_out_org_id => p_carrying_out_org_id
31476 , p_carrying_out_org_name => NULL
31477 , p_dlvr_version_id => l_deliverable_version_id --3733221
31478 , p_status_code => p_status_code
31479 , p_parent_structure_id => NULL
31480 , p_dlvr_type_id => p_deliverable_type_id
31481 , p_dlvr_type_name => NULL
31482 , p_progress_weight => p_progress_weight
31483 , p_scheduled_finish_date => p_due_date
31484 , p_actual_finish_date => p_completion_date
31485 , p_task_id => l_task_id
31486 , p_task_version_id => null
31487 , p_task_name => null
31488 , p_deliverable_reference => p_pm_deliverable_reference
31489 , p_item_id => p_item_id
31490 , p_inventory_org_id => p_inventory_org_id
31491 , p_quantity => p_quantity
31492 , p_uom_code => p_uom_code
31493 -- for bug# 3729250
31494 -- , p_item_description => p_item_description
31495 , p_unit_price => p_unit_price
31496 , p_unit_number => p_unit_number
31497 , p_currency_code => p_currency_code
31498 , p_dlvr_item_id => l_deliverable_id -- 3749447 changed from px_deliverable_id to l_deliverable_id
31499 , p_pm_source_code => p_pm_source_code -- 3749447 passing p_pm_source_code
31500 , x_return_status => x_return_status
31501 , x_msg_count => l_msg_count
31502 , x_msg_data => l_msg_data
31503 );
31504
31505 -- 3749447 assigning the derived deliverale id, this is required in the below case
31506 -- while calling update_deliverable, if user has passed only deliverable reference,
31507 -- after api execution, returned value for px_deliverable_id will be g_pa_miss_num
31508 px_deliverable_id := l_deliverable_id;
31509
31510 x_msg_count := l_msg_count;
31511 x_msg_data := l_msg_data;
31512
31513 IF p_debug_mode = 'Y' THEN
31514 pa_debug.g_err_stage := 'Pa_Deliverable_Pub.Update_Deliverable return status ['||x_return_status||']';
31515 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
31516 END IF;
31517
31518 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31519 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31520 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31521 RAISE FND_API.G_EXC_ERROR;
31522 END IF;
31523
31524 -- From the action_in table, select the actions for the given deliverable.
31525 -- Based on action_reference / action_id identify if new action is to
31526 -- to be created or existing action is to be updated.
31527
31528 i := p_action_in_tbl.first();
31529
31530 -- added for bug# 3749447, added below code to handle following scenario
31531 -- if user has not passed deliverable id in action record , only deliverable reference is passed
31532 -- and for deliverable record not passed passed deliverable id
31533 -- in this case, passed action will not be considered for update or create
31534
31535 -- deriving deliverable id from deliverable reference
31536
31537 IF i IS NOT NULL THEN
31538 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
31539 ( p_deliverable_reference => p_action_in_tbl(i).pm_deliverable_reference
31540 , p_deliverable_id => p_action_in_tbl(i).deliverable_id
31541 , p_project_id => l_project_id
31542 , p_out_deliverable_id => l_dlvr_id
31543 , p_return_status => x_return_status
31544 );
31545
31546 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31547 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31548 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31549 RAISE FND_API.G_EXC_ERROR;
31550 END IF;
31551
31552 END IF;
31553
31554 WHILE (i IS NOT NULL ) LOOP
31555 IF ( p_pm_deliverable_reference = p_action_in_tbl(i).pm_deliverable_reference OR
31556 px_deliverable_id = l_dlvr_id ) THEN -- 3749447 using derived deliverable id instead of passed id, for above mentioned case
31557
31558 -- action is for current deliverable only
31559 IF (p_action_in_tbl(i).action_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM OR
31560 p_action_in_tbl(i).action_id = NULL) THEN
31561 l_action_id := NULL;
31562 ELSE
31563 l_action_id := p_action_in_tbl(i).action_id;
31564 END IF;
31565
31566 i_actn := i_actn + 1;
31567
31568 -- added for bug# 3749447, added if condition to check for not null action id
31569 -- if action id not null, then and only then , action reference to id validation should be done
31570 -- in case of new action below validon will fail and will not allow user to create new actions from update_deliverable
31571
31572 IF l_action_id IS NOT NULL THEN
31573 Pa_Deliverable_Utils.Convert_pm_actionref_to_id (
31574 p_action_reference => p_action_in_tbl(i_actn).pm_action_reference
31575 ,p_action_id => l_action_id
31576 ,p_deliverable_id => l_deliverable_id
31577 ,p_project_id => l_Project_id
31578 ,p_out_action_id => l_action_id
31579 ,p_return_status => x_return_status
31580 );
31581 END IF;
31582
31583 IF p_debug_mode = 'Y' THEN
31584 pa_debug.write(g_pkg_name,'Dlvr Action Reference Valid Return Status ['||x_return_status||']Action ID['||l_action_id||']',3) ;
31585 END IF;
31586
31587 IF (l_action_id is NOT NULL) THEN
31588 -- action is an existing action and is to be updated
31589 i_actn_upd := i_actn_upd + 1 ;
31590 l_action_in_tbl_upd(i_actn_upd) := p_action_in_tbl(i);
31591
31592 -- added for bug# 3749447
31593 -- passing derived values of action id and deliverable id
31594 -- when ever deliverable and action reference is passed , update will not work
31595 l_action_in_tbl_upd(i_actn_upd).action_id := l_action_id;
31596 l_action_in_tbl_upd(i_actn_upd).deliverable_id := l_deliverable_id;
31597
31598 -- added for bug# 3749447
31599 -- if for action record , pm_source_code is not passed , use it from deliverable pm source code
31600 IF p_action_in_tbl(i).pm_source_code IS NOT NULL and p_action_in_tbl(i).pm_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
31601 l_action_in_tbl_upd(i_actn_upd).pm_source_code := p_pm_source_code;
31602 END IF;
31603
31604 ELSE
31605 -- New action is to be created.
31606 i_actn_ins := i_actn_ins + 1 ;
31607 l_action_in_tbl_ins(i_actn_ins) := p_action_in_tbl(i);
31608
31609 -- added for bug# 3749447
31610 -- passing derived values of action id and deliverable id
31611 -- when ever deliverable reference is passed , create will not work
31612 l_action_in_tbl_ins(i_actn_ins).deliverable_id := l_deliverable_id;
31613
31614 -- added for bug# 3749447
31615 -- if pm_source_code is not passed in action record, use it from deliverable record
31616
31617 IF p_action_in_tbl(i).pm_source_code IS NOT NULL and p_action_in_tbl(i).pm_source_code = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
31618 l_action_in_tbl_ins(i_actn_ins).pm_source_code := p_pm_source_code;
31619 END IF;
31620
31621 END IF; -- l_action_id is NULL
31622
31623 END IF; -- deliverable reference
31624 i := p_action_in_tbl.next(i); -- added for bug# 3749447, next was not done
31625 END LOOP;
31626
31627 IF p_debug_mode = 'Y' THEN
31628 pa_debug.write(g_pkg_name,'Uploaded action detail for Updation/Insertion upd ['||i_actn_upd||'] ins ['||i_actn_ins||'] tot ['||i_actn||']',3) ;
31629 END IF;
31630
31631 IF (i_actn_upd > 0 ) THEN
31632
31633 -- There are actions to be updated
31634 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31635 ( p_api_version => p_api_version
31636 , p_init_msg_list => FND_API.G_FALSE
31637 , p_commit => FND_API.G_FALSE
31638 , p_validate_only => FND_API.G_FALSE
31639 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
31640 , p_calling_module => 'AMG'
31641 , p_debug_mode => p_debug_mode
31642 , p_insert_or_update => 'UPDATE'
31643 , p_action_in_tbl => l_action_in_tbl_upd
31644 , x_action_out_tbl => x_action_out_tbl
31645 , x_return_status => x_return_status
31646 , x_msg_count => l_msg_count
31647 , x_msg_data => l_msg_data);
31648
31649 IF p_debug_mode = 'Y' THEN
31650 pa_debug.write(g_pkg_name,'Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper upd return status['||x_return_status||']',3) ;
31651 END IF;
31652
31653 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31654 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31655 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31656 RAISE FND_API.G_EXC_ERROR;
31657 END IF;
31658
31659 END IF; --i_actn_upd > 0
31660
31661 IF (i_actn_ins > 0 ) THEN
31662
31663 -- There are actions to be updated
31664 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
31665 ( p_api_version => p_api_version
31666 , p_init_msg_list => FND_API.G_FALSE
31667 , p_commit => FND_API.G_FALSE
31668 , p_validate_only => FND_API.G_FALSE
31669 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
31670 , p_calling_module => 'AMG'
31671 , p_debug_mode => p_debug_mode
31672 , p_insert_or_update => 'INSERT'
31673 , p_action_in_tbl => l_action_in_tbl_ins
31674 , x_action_out_tbl => x_action_out_tbl
31675 , x_return_status => x_return_status
31676 , x_msg_count => l_msg_count
31677 , x_msg_data => l_msg_data);
31678
31679 IF p_debug_mode = 'Y' THEN
31680 pa_debug.write(g_pkg_name,'Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper upd return status['||x_return_status||']',3) ;
31681 END IF;
31682
31683 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31684 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31685 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31686 RAISE FND_API.G_EXC_ERROR;
31687 END IF;
31688
31689 END IF; --i_actn_upd > 0
31690
31691 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
31692 IF (p_commit = FND_API.G_TRUE) THEN
31693 COMMIT;
31694 END IF;
31695
31696 IF p_debug_mode = 'Y' THEN
31697 pa_debug.reset_curr_function;
31698 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
31699 END IF;
31700
31701 EXCEPTION
31702 WHEN FND_API.G_EXC_ERROR THEN
31703 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31704 --IF (p_commit = FND_API.G_TRUE) THEN
31705 ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31706 --END IF;
31707
31708 IF p_debug_mode = 'Y' THEN
31709 pa_debug.reset_curr_function;
31710 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
31711 END IF;
31712 x_return_status := FND_API.G_RET_STS_ERROR;
31713 x_msg_count := FND_MSG_PUB.count_msg;
31714
31715 IF x_msg_count = 1 THEN
31716 PA_INTERFACE_UTILS_PUB.get_messages
31717 (p_encoded => FND_API.G_FALSE,
31718 p_msg_index => 1,
31719 p_msg_count => x_msg_count,
31720 p_msg_data => x_msg_data,
31721 p_data => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31722 p_msg_index_out => l_msg_index_out);
31723 x_msg_data := l_data ; -- 4537865
31724 END IF;
31725
31726 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
31727 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31728 --IF (p_commit = FND_API.G_TRUE) THEN
31729 ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31730 --END IF;
31731
31732 IF p_debug_mode = 'Y' THEN
31733 pa_debug.reset_curr_function;
31734 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
31735 END IF;
31736 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31737 x_msg_count := FND_MSG_PUB.count_msg;
31738
31739 IF x_msg_count = 1 THEN
31740 PA_INTERFACE_UTILS_PUB.get_messages
31741 (p_encoded => FND_API.G_FALSE,
31742 p_msg_index => 1,
31743 p_msg_count => x_msg_count,
31744 p_msg_data => x_msg_data,
31745 p_data => l_data, -- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
31746 p_msg_index_out => l_msg_index_out);
31747 x_msg_data := l_data ; -- 4537865
31748 END IF;
31749
31750 WHEN OTHERS THEN
31751 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
31752 --IF (p_commit = FND_API.G_TRUE) THEN
31753 ROLLBACK TO UPDATE_DELIVERABLE_PUB;
31754 --END IF;
31755
31756 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
31757 x_msg_count := 1;
31758 x_msg_data := SQLERRM;
31759
31760 IF p_debug_mode = 'Y' THEN
31761 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
31762 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
31763 pa_debug.reset_curr_function;
31764 END IF;
31765
31766
31767 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
31768 FND_MSG_PUB.add_exc_msg
31769 ( p_pkg_name => G_PKG_NAME
31770 , p_procedure_name => l_api_name );
31771 END IF;
31772 END update_deliverable;
31773
31774
31775 PROCEDURE update_deliverable_action
31776 ( p_api_version IN NUMBER := 1.0
31777 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
31778 , p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
31779 , p_commit IN VARCHAR2 := FND_API.G_FALSE
31780 , p_action_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31781 , p_action_owner_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31782 , p_function_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31783 , p_due_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31784 , p_description IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31785 , p_completion_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31786 , p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31787 , p_pm_action_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31788 -- added for bug# 3729250
31789 , p_action_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31790 -- for bug# 3729250
31791 -- , p_carrying_out_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31792 , p_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31793 , p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31794 -- added for bug# 3729250
31795 , p_pm_proj_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31796 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31797 , p_financial_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31798 -- added for bug# 3729250
31799 , p_financial_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31800 , p_destination_type_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31801 , p_receiving_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31802 , p_receiving_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31803 , p_po_need_by_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31804 , p_vendor_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31805 , p_vendor_site_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31806 -- , p_project_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31807 , p_Quantity IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31808 , p_uom_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31809 , p_unit_price IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31810 , p_exchange_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31811 , p_exchange_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31812 , p_exchange_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31813 , p_expenditure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31814 , p_expenditure_org_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31815 , p_expenditure_item_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31816 , p_requisition_line_type_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31817 , p_category_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31818 , p_ready_to_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31819 , p_initiate_procure_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31820 , p_ship_from_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31821 , p_ship_from_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31822 , p_ship_to_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31823 , p_ship_to_location_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31824 , p_demand_schedule IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31825 , p_expected_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31826 , p_promised_shipment_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31827 , p_volume IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31828 , p_volume_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31829 , p_weight IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31830 , p_weight_uom IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31831 , p_ready_to_ship_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31832 , p_initiate_planning_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31833 , p_initiate_shipping_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31834 , p_event_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31835 , p_currency IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3749474 changed data type
31836 , p_invoice_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31837 , p_revenue_amount IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31838 , p_event_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31839 , p_event_number IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31840 , p_organization_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31841 , p_bill_hold_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31842 , p_project_functional_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31843 , p_project_functional_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31844 , p_project_functional_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31845 , p_project_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31846 , p_project_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31847 , p_project_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31848 , p_funding_rate_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
31849 , p_funding_rate_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
31850 , p_funding_rate IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
31851 , p_pm_event_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR -- 3651489 added parameter
31852 , x_action_out OUT NOCOPY action_out_tbl_type
31853 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31854 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
31855 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
31856 )
31857 IS
31858 l_api_name CONSTANT VARCHAR2(30) := 'update_deliverable_actions';
31859
31860 l_action_in_tbl action_in_tbl_type ;
31861 l_action_out_tbl action_out_tbl_type ;
31862
31863 l_msg_count NUMBER := null;
31864 l_msg_data VARCHAR2(2000) := null;
31865 l_msg_index_out NUMBER;
31866 l_data VARCHAR2(2000);
31867
31868
31869 l_project_id NUMBER := null;
31870 l_deliverable_id NUMBER := null;
31871 l_function_allowed VARCHAR2(1);
31872 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
31873
31874 -- 3729250 added local variables
31875 l_fin_task_id NUMBER := NULL;
31876 l_action_id NUMBER := NULL;
31877
31878 i NUMBER := 1;
31879 BEGIN
31880
31881 -- Standard begin of API savepoint
31882 SAVEPOINT update_deliverable_actions_pub;
31883
31884 -- Standard call to check for call compatibility.
31885 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
31886 p_api_version ,
31887 l_api_name ,
31888 G_PKG_NAME )
31889 THEN
31890 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31891 END IF;
31892
31893 -- Initialize the message table if requested.
31894 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
31895 FND_MSG_PUB.initialize;
31896 END IF;
31897
31898 IF p_debug_mode = 'Y' THEN
31899 PA_DEBUG.set_curr_function( p_function => l_api_name,
31900 p_debug_mode => p_debug_mode );
31901 pa_debug.g_err_stage:= 'Inside '||l_api_name;
31902 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
31903 END IF;
31904 -- Set API return status to success
31905 x_return_status := FND_API.G_RET_STS_SUCCESS;
31906
31907 -- Function Security Check
31908 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
31909 (p_api_version_number => p_api_version,
31910 p_responsibility_id => l_resp_id,
31911 p_function_name => 'PA_DELIVERABLE_EDIT',
31912 p_msg_count => x_msg_count,
31913 p_msg_data => x_msg_data,
31914 p_return_status => x_return_status,
31915 p_function_allowed => l_function_allowed);
31916
31917
31918 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31919 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31920 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31921 RAISE FND_API.G_EXC_ERROR;
31922 END IF;
31923
31924 IF l_function_allowed = 'N' THEN
31925 pa_interface_utils_pub.map_new_amg_msg
31926 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
31927 ,p_msg_attribute => 'CHANGE'
31928 ,p_resize_flag => 'Y'
31929 ,p_msg_context => 'GENERAL'
31930 ,p_attribute1 => ''
31931 ,p_attribute2 => ''
31932 ,p_attribute3 => ''
31933 ,p_attribute4 => ''
31934 ,p_attribute5 => '');
31935
31936 x_return_status := FND_API.G_RET_STS_ERROR;
31937 RAISE FND_API.G_EXC_ERROR;
31938 END IF;
31939
31940 -- validate the input parameters.
31941 -- Validate Project reference/id
31942 PA_PROJECT_PVT.Convert_pm_projref_to_id (
31943 p_pm_project_reference => p_pm_proj_reference -- 3729250, earlier was passed as null
31944 , p_pa_project_id => p_project_id
31945 , p_out_project_id => l_project_id
31946 , p_return_status => x_return_status
31947 );
31948
31949 IF p_debug_mode = 'Y' THEN
31950 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
31951 END IF;
31952
31953 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
31954 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31955 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
31956 RAISE FND_API.G_EXC_ERROR;
31957 END IF;
31958
31959 -- Validate Deliverable reference / ID
31960 PA_Deliverable_Utils.Convert_pm_dlvrref_to_id(
31961 p_deliverable_reference => p_deliverable_reference
31962 , p_deliverable_id => p_deliverable_id
31963 , p_project_id => l_project_id
31964 , p_out_deliverable_id => l_deliverable_id
31965 , p_return_status => x_return_status);
31966
31967 IF p_debug_mode = 'Y' THEN
31968 pa_debug.write(g_pkg_name,'Dlvr Reference Ref to ID Return Status ['||x_return_status,3) ;
31969 END IF;
31970
31971 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31972 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31973 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31974 RAISE FND_API.G_EXC_ERROR;
31975 END IF;
31976
31977
31978 -- 3729250 Validate Deliverable Action reference / ID
31979 PA_Deliverable_Utils.Convert_pm_actionref_to_id(
31980 p_action_reference => p_pm_action_reference
31981 , p_action_id => p_action_id
31982 , p_deliverable_id => l_deliverable_id
31983 , p_project_id => l_project_id
31984 , p_out_action_id => l_action_id
31985 , p_return_status => x_return_status);
31986
31987 IF p_debug_mode = 'Y' THEN
31988 pa_debug.write(g_pkg_name,'Convert_pm_actionref_to_id Return Status ['||x_return_status,3) ;
31989 END IF;
31990
31991 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
31992 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
31993 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
31994 RAISE FND_API.G_EXC_ERROR;
31995 END IF;
31996
31997 -- 3729250, Validate Financial Task Reference / ID
31998 -- PA_PROJECT_PVT.Convert_pm_taskref_to_id_all should only be called if either p_financial_task_id or
31999 -- p_financial_task_reference is passed
32000
32001 IF ( ( p_financial_task_id IS NOT NULL AND p_financial_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM ) OR
32002 ( p_financial_task_reference IS NOT NULL AND p_financial_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR ) ) THEN
32003 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
32004 p_pa_project_id => l_project_id
32005 , p_structure_type => 'FINANCIAL'
32006 , p_pa_task_id => p_financial_task_id
32007 , p_pm_task_reference => p_financial_task_reference
32008 , p_out_task_id => l_fin_task_id
32009 , p_return_status => x_return_status );
32010
32011 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32012 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32013 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32014 RAISE FND_API.G_EXC_ERROR;
32015 END IF;
32016 END IF;
32017
32018 -- Populate the table with input parameters
32019
32020 IF ( i IS NOT NULL ) THEN
32021 l_action_in_tbl(i).action_name := p_action_name ;
32022 l_action_in_tbl(i).action_owner_id := p_action_owner_id ;
32023 l_action_in_tbl(i).function_code := p_function_code ;
32024 l_action_in_tbl(i).due_date := p_due_date ;
32025 l_action_in_tbl(i).description := p_description ;
32026 l_action_in_tbl(i).completion_date := p_completion_date ;
32027 l_action_in_tbl(i).pm_source_code := p_pm_source_code ;
32028 l_action_in_tbl(i).pm_action_reference := p_pm_action_reference ;
32029 -- for bug# 3729250
32030 -- l_action_in_tbl(i).carrying_out_org_id := p_carrying_out_org_id ;
32031 l_action_in_tbl(i).pm_deliverable_reference := p_deliverable_reference ;
32032 l_action_in_tbl(i).deliverable_id := l_deliverable_id ; -- 3749474 earlier p_deliverable_id was passed
32033 l_action_in_tbl(i).financial_task_id := l_fin_task_id ; -- for bug# 3729250
32034 l_action_in_tbl(i).destination_type_code := p_destination_type_code ;
32035 l_action_in_tbl(i).receiving_org_id := p_receiving_org_id ;
32036 l_action_in_tbl(i).receiving_location_id := p_receiving_location_id ;
32037 l_action_in_tbl(i).po_need_by_date := p_po_need_by_date ;
32038 l_action_in_tbl(i).vendor_id := p_vendor_id ;
32039 l_action_in_tbl(i).vendor_site_code := p_vendor_site_code ;
32040 -- l_action_in_tbl(i).project_currency := p_project_currency ;
32041 l_action_in_tbl(i).Quantity := p_Quantity ;
32042 l_action_in_tbl(i).uom_code := p_uom_code ;
32043 l_action_in_tbl(i).unit_price := p_unit_price ;
32044 l_action_in_tbl(i).exchange_rate_type := p_exchange_rate_type ;
32045 l_action_in_tbl(i).exchange_rate_date := p_exchange_rate_date ;
32046 l_action_in_tbl(i).exchange_rate := p_exchange_rate ;
32047 l_action_in_tbl(i).expenditure_type := p_expenditure_type ;
32048 l_action_in_tbl(i).expenditure_org_id := p_expenditure_org_id ;
32049 l_action_in_tbl(i).expenditure_item_date := p_expenditure_item_date ;
32050 l_action_in_tbl(i).requisition_line_type_id := p_requisition_line_type_id ;
32051 l_action_in_tbl(i).category_id := p_category_id ;
32052 l_action_in_tbl(i).ready_to_procure_flag := p_ready_to_procure_flag ;
32053 l_action_in_tbl(i).initiate_procure_flag := p_initiate_procure_flag ;
32054 l_action_in_tbl(i).ship_from_organization_id := p_ship_from_organization_id ;
32055 l_action_in_tbl(i).ship_from_location_id := p_ship_from_location_id ;
32056 l_action_in_tbl(i).ship_to_organization_id := p_ship_to_organization_id ;
32057 l_action_in_tbl(i).ship_to_location_id := p_ship_to_location_id ;
32058 l_action_in_tbl(i).demand_schedule := p_demand_schedule ;
32059 l_action_in_tbl(i).expected_shipment_date := p_expected_shipment_date ;
32060 l_action_in_tbl(i).promised_shipment_date := p_promised_shipment_date ;
32061 l_action_in_tbl(i).volume := p_volume ;
32062 l_action_in_tbl(i).volume_uom := p_volume_uom ;
32063 l_action_in_tbl(i).weight := p_weight ;
32064 l_action_in_tbl(i).weight_uom := p_weight_uom ;
32065 l_action_in_tbl(i).ready_to_ship_flag := p_ready_to_ship_flag ;
32066 l_action_in_tbl(i).initiate_planning_flag := p_initiate_planning_flag ;
32067 l_action_in_tbl(i).initiate_shipping_flag := p_initiate_shipping_flag ;
32068 l_action_in_tbl(i).event_type := p_event_type ;
32069 l_action_in_tbl(i).currency := p_currency ;
32070 l_action_in_tbl(i).invoice_amount := p_invoice_amount ;
32071 l_action_in_tbl(i).revenue_amount := p_revenue_amount ;
32072 l_action_in_tbl(i).event_date := p_event_date ;
32073 l_action_in_tbl(i).event_number := p_event_number ;
32074 l_action_in_tbl(i).organization_id := p_organization_id ;
32075 l_action_in_tbl(i).bill_hold_flag := p_bill_hold_flag ;
32076 l_action_in_tbl(i).project_functional_rate_type:= p_project_functional_rate_type;
32077 l_action_in_tbl(i).project_functional_rate_date:= p_project_functional_rate_date;
32078 l_action_in_tbl(i).project_functional_rate := p_project_functional_rate ;
32079 l_action_in_tbl(i).project_rate_type := p_project_rate_type ;
32080 l_action_in_tbl(i).project_rate_date := p_project_rate_date ;
32081 l_action_in_tbl(i).project_rate := p_project_rate ;
32082 l_action_in_tbl(i).funding_rate_type := p_funding_rate_type ;
32083 l_action_in_tbl(i).funding_rate_date := p_funding_rate_date ;
32084 l_action_in_tbl(i).funding_rate := p_funding_rate ;
32085 l_action_in_tbl(i).pm_event_reference := p_pm_event_reference ; -- 3651489 added parameter
32086 l_action_in_tbl(i).action_id := l_action_id ; -- 3729250 added parameter
32087 END IF;
32088
32089 -- Call api to update actions passing the newly populated plsql table
32090 Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper
32091 ( p_api_version => p_api_version
32092 , p_init_msg_list => FND_API.G_FALSE
32093 , p_commit => FND_API.G_FALSE
32094 , p_validate_only => FND_API.G_FALSE
32095 , p_validation_level => FND_API.G_VALID_LEVEL_FULL
32096 , p_calling_module => 'AMG'
32097 , p_debug_mode => p_debug_mode
32098 , p_insert_or_update => 'UPDATE'
32099 , p_action_in_tbl => l_action_in_tbl
32100 , x_action_out_tbl => l_action_out_tbl
32101 , x_return_status => x_return_status
32102 , x_msg_count => l_msg_count
32103 , x_msg_data => l_msg_data);
32104
32105 -- 3749474 added code to check for return status
32106
32107 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32108 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32109 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32110 RAISE FND_API.G_EXC_ERROR;
32111 END IF;
32112
32113 ---- --dbms_output.put_line('after Pa_Actions_Pub.Create_Dlvr_Actions_Wrapper'||x_return_status);
32114 i := l_action_out_tbl.first();
32115
32116 WHILE i IS NOT NULL LOOP
32117 ---- --dbms_output.put_line('action created ['||l_action_out_tbl(i).action_id||'] status ['||l_action_out_tbl(i).return_status);
32118 i := l_action_out_tbl.next(i);
32119 END LOOP;
32120
32121 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32122 IF (p_commit = FND_API.G_TRUE) THEN
32123 COMMIT;
32124 END IF;
32125
32126 IF p_debug_mode = 'Y' THEN
32127 pa_debug.reset_curr_function;
32128 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32129 END IF;
32130
32131 EXCEPTION
32132 WHEN FND_API.G_EXC_ERROR THEN
32133 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32134 --IF (p_commit = FND_API.G_TRUE) THEN
32135 ROLLBACK TO update_deliverable_actions_pub;
32136 --END IF;
32137
32138 IF p_debug_mode = 'Y' THEN
32139 pa_debug.reset_curr_function;
32140 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32141 END IF;
32142 x_return_status := FND_API.G_RET_STS_ERROR;
32143 x_msg_count := FND_MSG_PUB.count_msg;
32144
32145 IF x_msg_count = 1 THEN
32146 PA_INTERFACE_UTILS_PUB.get_messages
32147 (p_encoded => FND_API.G_FALSE,
32148 p_msg_index => 1,
32149 p_msg_count => x_msg_count,
32150 p_msg_data => x_msg_data,
32151 p_data => l_data, --4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
32152 p_msg_index_out => l_msg_index_out);
32153 x_msg_data := l_data ; -- 4537865
32154 END IF;
32155
32156 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
32157 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32158 --IF (p_commit = FND_API.G_TRUE) THEN
32159 ROLLBACK TO update_deliverable_actions_pub;
32160 --END IF;
32161
32162 IF p_debug_mode = 'Y' THEN
32163 pa_debug.reset_curr_function;
32164 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32165 END IF;
32166 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32167 x_msg_count := FND_MSG_PUB.count_msg;
32168
32169 IF x_msg_count = 1 THEN
32170 PA_INTERFACE_UTILS_PUB.get_messages
32171 (p_encoded => FND_API.G_FALSE,
32172 p_msg_index => 1,
32173 p_msg_count => x_msg_count,
32174 p_msg_data => x_msg_data,
32175 p_data => l_data,-- 4537865 Changed from x_msg_data to l_data ,as it may have problem with NOCOPY
32176 p_msg_index_out => l_msg_index_out);
32177 x_msg_data := l_data ; -- 4537865
32178 END IF;
32179
32180 WHEN OTHERS THEN
32181 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32182 -- IF (p_commit = FND_API.G_TRUE) THEN
32183 ROLLBACK TO update_deliverable_actions_pub;
32184 -- END IF;
32185
32186 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32187 x_msg_count := 1;
32188 x_msg_data := SQLERRM;
32189
32190 IF p_debug_mode = 'Y' THEN
32191 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32192 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32193 pa_debug.reset_curr_function;
32194 END IF;
32195
32196 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
32197 FND_MSG_PUB.add_exc_msg
32198 ( p_pkg_name => G_PKG_NAME
32199 , p_procedure_name => l_api_name );
32200 END IF;
32201
32202 END update_deliverable_action;
32203
32204
32205 -- SubProgram : DELETE_DELIVERABLES
32206 -- Type : PUBLIC FUNCTION
32207 -- Purpose : This function will delete the deliverable - Single record
32208 -- Assumptions : None
32209
32210 Procedure Delete_Deliverables (
32211 p_api_version IN NUMBER := 1.0
32212 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
32213 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
32214 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32215 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32216 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32217 --for bug# 3729250
32218 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32219 ,p_pm_dlv_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32220 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32221 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32222 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32223 )IS
32224 l_api_name VARCHAR2(30) := 'Delete_Deliverables';
32225 l_deliverable_id NUMBER;
32226 l_dlvr_version_id NUMBER;
32227 l_project_id NUMBER;
32228 l_function_allowed VARCHAR2(1);
32229 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32230
32231 l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
32232 l_msg_index_out NUMBER;
32233 l_msg_count NUMBER ;
32234 l_data VARCHAR2(2000);
32235 l_msg_data VARCHAR2(2000);
32236
32237
32238 BEGIN
32239 -- Initialize the message table if requested.
32240 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
32241 FND_MSG_PUB.initialize;
32242 END IF;
32243
32244 -- 3735792, setting save point unconditionally
32245 --IF (p_commit = FND_API.G_TRUE) THEN
32246 savepoint DELETE_DELIVERABLE_PUB;
32247 --END IF;
32248
32249 IF l_debug_mode = 'Y' THEN
32250 PA_DEBUG.set_curr_function( p_function => l_api_name,
32251 p_debug_mode => l_debug_mode );
32252 pa_debug.g_err_stage:= 'Inside '||l_api_name;
32253 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32254 END IF;
32255
32256 -- Set API return status to success
32257 x_return_status := FND_API.G_RET_STS_SUCCESS;
32258
32259 -- Function Security Check
32260 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32261 (p_api_version_number => p_api_version,
32262 p_responsibility_id => l_resp_id,
32263 p_function_name => 'PA_DELIVERABLE_EDIT',
32264 p_msg_count => x_msg_count,
32265 p_msg_data => x_msg_data,
32266 p_return_status => x_return_status,
32267 p_function_allowed => l_function_allowed);
32268
32269 IF l_debug_mode = 'Y' THEN
32270 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
32271 END IF;
32272
32273 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32274 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32275 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32276 RAISE FND_API.G_EXC_ERROR;
32277 END IF;
32278
32279 IF l_function_allowed = 'N' THEN
32280 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
32281 ,p_msg_name => 'PA_FUNCTION_SECURITY_ENFORCED');
32282 x_return_status := FND_API.G_RET_STS_ERROR;
32283 RAISE FND_API.G_EXC_ERROR;
32284 END IF;
32285
32286 -- validate the input parameters.
32287 -- Validate Project Reference / ID
32288 PA_PROJECT_PVT.Convert_pm_projref_to_id (
32289 p_pm_project_reference => p_pm_project_reference
32290 , p_pa_project_id => p_project_id
32291 , p_out_project_id => l_project_id
32292 , p_return_status => x_return_status
32293 );
32294
32295 IF l_debug_mode = 'Y' THEN
32296 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
32297 END IF;
32298
32299 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32300 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32301 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32302 RAISE FND_API.G_EXC_ERROR;
32303 END IF;
32304
32305 -- Validate Deliverable Reference / ID
32306 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32307 ( p_deliverable_reference => p_pm_dlv_source_reference
32308 -- for bug# 3729250
32309 , p_deliverable_id => p_deliverable_id
32310 , p_project_id => l_project_id
32311 , p_out_deliverable_id => l_deliverable_id
32312 , p_return_status => x_return_status
32313 );
32314
32315 IF l_debug_mode = 'Y' THEN
32316 pa_debug.write(g_pkg_name,'Dlvr Reference Valid Return Status ['||x_return_status||']Dlvr ID['||l_deliverable_id||']',3) ;
32317 END IF;
32318
32319 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32320 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32321 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32322 RAISE FND_API.G_EXC_ERROR;
32323 END IF;
32324
32325 -- Derive deliverable version ID and call api Delete Deliverable. It
32326 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32327
32328 IF l_debug_mode = 'Y' THEN
32329 pa_debug.write(g_pkg_name,'Derived Dlvr Version ID ['||l_dlvr_version_id||'] for Dlvr ID['||l_deliverable_id||']',3) ;
32330 END IF;
32331
32332 -- deletes the corresponding actions and associations also.
32333 IF ( l_dlvr_version_id IS NOT NULL )
32334 THEN
32335 pa_deliverable_pvt.delete_deliverable
32336 (p_api_version => p_api_version
32337 ,p_init_msg_list => FND_API.G_FALSE
32338 -- 3735792, passing p_commit as false to next level api calls
32339 ,p_commit => FND_API.G_FALSE
32340 ,p_validate_only => FND_API.G_FALSE
32341 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
32342 ,p_calling_module => 'AMG'
32343 ,p_debug_mode => l_debug_mode
32344 ,p_max_msg_count => null
32345 ,p_dlv_element_id => l_deliverable_id
32346 ,p_dlv_version_id => l_dlvr_version_id
32347 ,p_rec_ver_number => null
32348 ,p_project_id => l_project_id
32349 ,x_return_status => x_return_status
32350 ,x_msg_count => x_msg_count
32351 ,x_msg_data => x_msg_data );
32352
32353 IF l_debug_mode = 'Y' THEN
32354 pa_debug.write(g_pkg_name,' after pa_deliverable_pvt.delete_deliverable ['||x_return_status||']',3) ;
32355 END IF;
32356
32357 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32358 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32359 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32360 RAISE FND_API.G_EXC_ERROR;
32361 END IF;
32362
32363 END IF;
32364
32365 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32366 IF (p_commit = FND_API.G_TRUE) THEN
32367 COMMIT;
32368 END IF;
32369
32370 IF l_debug_mode = 'Y' THEN
32371 pa_debug.reset_curr_function;
32372 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32373 END IF;
32374
32375 EXCEPTION
32376 WHEN FND_API.G_EXC_ERROR THEN
32377 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32378 --IF (p_commit = FND_API.G_TRUE) THEN
32379 ROLLBACK TO DELETE_DELIVERABLE_PUB;
32380 --END IF;
32381
32382 x_return_status := FND_API.G_RET_STS_ERROR;
32383 l_msg_count := FND_MSG_PUB.count_msg;
32384
32385 IF l_msg_count = 1 AND x_msg_data IS NULL
32386 THEN
32387 PA_INTERFACE_UTILS_PUB.get_messages
32388 (p_encoded => FND_API.G_FALSE,
32389 p_msg_index => 1,
32390 p_msg_count => x_msg_count,
32391 p_msg_data => l_msg_data,
32392 p_data => l_data,
32393 p_msg_index_out => l_msg_index_out);
32394
32395 x_msg_data := l_data;
32396 x_msg_count := l_msg_count;
32397 ELSE
32398 x_msg_count := l_msg_count;
32399
32400 END IF;
32401
32402 IF l_debug_mode = 'Y' THEN
32403 pa_debug.reset_curr_function;
32404 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32405 END IF;
32406
32407 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
32408 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32409 --IF (p_commit = FND_API.G_TRUE) THEN
32410 ROLLBACK TO DELETE_DELIVERABLE_PUB;
32411 --END IF;
32412
32413 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32414 l_msg_count := FND_MSG_PUB.count_msg;
32415
32416 IF l_msg_count = 1 AND x_msg_data IS NULL
32417 THEN
32418 PA_INTERFACE_UTILS_PUB.get_messages
32419 (p_encoded => FND_API.G_FALSE,
32420 p_msg_index => 1,
32421 p_msg_count => x_msg_count,
32422 p_msg_data => l_msg_data,
32423 p_data => l_data,
32424 p_msg_index_out => l_msg_index_out);
32425
32426 x_msg_data := l_data;
32427 x_msg_count := l_msg_count;
32428 ELSE
32429 x_msg_count := l_msg_count;
32430 END IF;
32431
32432 IF l_debug_mode = 'Y' THEN
32433 pa_debug.reset_curr_function;
32434 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32435 END IF;
32436
32437 WHEN OTHERS THEN
32438 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32439 --IF (p_commit = FND_API.G_TRUE) THEN
32440 ROLLBACK TO DELETE_DELIVERABLE_PUB;
32441 --END IF;
32442
32443 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32444 x_msg_count := 1;
32445 x_msg_data := SQLERRM;
32446
32447 IF l_debug_mode = 'Y' THEN
32448 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32449 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32450 pa_debug.reset_curr_function;
32451 END IF;
32452
32453 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32454 FND_MSG_PUB.add_exc_msg
32455 ( p_pkg_name => G_PKG_NAME
32456 , p_procedure_name => l_api_name );
32457 END IF;
32458
32459 END Delete_Deliverables;
32460
32461 -- SubProgram : DELETE_DELIVERABLE_ACTIONS
32462 -- Type : PUBLIC FUNCTION
32463 -- Purpose : This function will delete the action - Single record
32464 -- Assumptions : None
32465
32466 PROCEDURE delete_deliverable_actions
32467 ( p_api_version IN NUMBER := 1.0 -- 3749480 earlier defaulted with G_PA_MISS_NUM ; Bug#3451073 Removed Quotes
32468 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
32469 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
32470 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32471 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32472 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32473 -- for bug# 3729250 , changed datatype from NUMBER TO VARCHAR2
32474 ,p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32475 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32476 -- for bug# 3729250 , changed datatype from NUMBER TO VARCHAR2
32477 ,p_action_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32478 ,p_action_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32479 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32480 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32481 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32482 )
32483
32484 IS
32485 l_api_name VARCHAR2(30) := 'Delete_Deliverable_Actions';
32486 l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
32487
32488 l_project_id NUMBER ;
32489 l_action_id NUMBER;
32490 l_action_version_id NUMBER;
32491 l_deliverable_id NUMBER;
32492 l_dlvr_version_id NUMBER;
32493 l_function_code Pa_Proj_Elements.function_code%TYPE;
32494
32495 l_function_allowed VARCHAR2(1);
32496 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32497
32498 l_msg_index_out NUMBER;
32499 l_msg_count NUMBER ;
32500 l_data VARCHAR2(2000);
32501 l_msg_data VARCHAR2(2000);
32502
32503 BEGIN
32504 -- Initialize the message table if requested.
32505 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
32506 FND_MSG_PUB.initialize;
32507 END IF;
32508
32509 -- 3735792, setting save point unconditionally
32510 --IF (p_commit = FND_API.G_TRUE) THEN
32511 savepoint DELETE_DELIVERABLE_ACTION_PUB;
32512 --END IF;
32513
32514 IF l_debug_mode = 'Y' THEN
32515 PA_DEBUG.set_curr_function( p_function => l_api_name,
32516 p_debug_mode => l_debug_mode );
32517 pa_debug.g_err_stage:= 'Inside '||l_api_name;
32518 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32519 END IF;
32520 -- Set API return status to success
32521 x_return_status := FND_API.G_RET_STS_SUCCESS;
32522
32523 -- Function Security Check
32524 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32525 (p_api_version_number => p_api_version,
32526 p_responsibility_id => l_resp_id,
32527 p_function_name => 'PA_DELIVERABLE_EDIT',
32528 p_msg_count => x_msg_count,
32529 p_msg_data => x_msg_data,
32530 p_return_status => x_return_status,
32531 p_function_allowed => l_function_allowed);
32532
32533 IF l_debug_mode = 'Y' THEN
32534 pa_debug.write(g_pkg_name,'Func Security Return Status ['||x_return_status||']Func Allow['||l_function_allowed||']',3) ;
32535 END IF;
32536
32537 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32538 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32539 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32540 RAISE FND_API.G_EXC_ERROR;
32541 END IF;
32542
32543 IF l_function_allowed = 'N' THEN
32544 pa_interface_utils_pub.map_new_amg_msg
32545 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32546 ,p_msg_attribute => 'CHANGE'
32547 ,p_resize_flag => 'Y'
32548 ,p_msg_context => 'GENERAL'
32549 ,p_attribute1 => ''
32550 ,p_attribute2 => ''
32551 ,p_attribute3 => ''
32552 ,p_attribute4 => ''
32553 ,p_attribute5 => '');
32554
32555 x_return_status := FND_API.G_RET_STS_ERROR;
32556 RAISE FND_API.G_EXC_ERROR;
32557 END IF;
32558
32559 -- validate the input parameters.
32560 -- Validate Project Reference / ID
32561 PA_PROJECT_PVT.Convert_pm_projref_to_id (
32562 p_pm_project_reference => p_pm_project_reference
32563 , p_pa_project_id => p_project_id
32564 , p_out_project_id => l_project_id
32565 , p_return_status => x_return_status
32566 );
32567
32568 IF l_debug_mode = 'Y' THEN
32569 pa_debug.write(g_pkg_name,'Proj Ref to ID Return Status ['||x_return_status||']Proj ID['||l_project_id||']',3) ;
32570 END IF;
32571
32572 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32573 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32574 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32575 RAISE FND_API.G_EXC_ERROR;
32576 END IF;
32577
32578 -- Validate Deliverable Reference / ID
32579 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32580 ( p_deliverable_reference => p_pm_deliverable_reference
32581 , p_deliverable_id => p_deliverable_id
32582 , p_project_id => l_project_id
32583 , p_out_deliverable_id => l_deliverable_id
32584 , p_return_status => x_return_status
32585 );
32586
32587 IF l_debug_mode = 'Y' THEN
32588 pa_debug.write(g_pkg_name,'Dlvr Reference Valid Return Status ['||x_return_status||']Dlvr ID['||l_deliverable_id||']',3) ;
32589 END IF;
32590
32591 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32592 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32593 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32594 RAISE FND_API.G_EXC_ERROR;
32595 END IF;
32596
32597 -- Validate Action Reference / ID
32598 Pa_Deliverable_Utils.Convert_pm_actionref_to_id
32599 (
32600 p_action_reference => p_action_source_reference
32601 ,p_action_id => p_action_id
32602 ,p_deliverable_id => l_deliverable_id -- 3749480 earlier p_deliverable_id was used
32603 ,p_project_id => l_project_id
32604 ,p_out_action_id => l_action_id
32605 ,p_return_status => x_return_status
32606 );
32607
32608 IF l_debug_mode = 'Y' THEN
32609 pa_debug.write(g_pkg_name,'Dlvr Action Reference Valid Return Status ['||x_return_status||']Action ID['||l_action_id||']',3) ;
32610 END IF;
32611
32612 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32613 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32614 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32615 RAISE FND_API.G_EXC_ERROR;
32616 END IF;
32617
32618 -- Derive Deliverable_version_id
32619 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32620
32621 IF l_debug_mode = 'Y' THEN
32622 pa_debug.write(g_pkg_name,'Derived Dlvr Version ID ['||l_dlvr_version_id||'] for Dlvr ID['||l_deliverable_id||']',3) ;
32623 END IF;
32624
32625 -- Derive Action_version_id and Function Code
32626 l_action_version_id := Pa_Deliverable_Utils.Get_Action_Version_Id (l_action_id, null, l_project_id) ;
32627 l_function_code := Pa_Deliverable_Utils.GET_FUNCTION_CODE(l_action_id) ;
32628
32629 IF l_debug_mode = 'Y' THEN
32630 pa_debug.write(g_pkg_name,'Derived Action version ID ['||l_action_version_id||']and function code ['||l_function_code||']',3) ;
32631 END IF;
32632
32633 -- Calling Actions API to delete actions.
32634
32635 pa_actions_pvt.DELETE_DLV_ACTION
32636 (p_api_version => p_api_version
32637 ,p_init_msg_list => FND_API.G_FALSE
32638 ,p_commit => FND_API.G_FALSE
32639 ,p_validate_only => FND_API.G_FALSE
32640 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
32641 ,p_calling_module => 'AMG'
32642 ,p_debug_mode => l_debug_mode
32643 ,p_max_msg_count => null
32644 ,p_action_id => l_action_id
32645 ,p_action_ver_id => l_action_version_id
32646 ,p_dlv_element_id => l_deliverable_id
32647 ,p_dlv_version_id => l_dlvr_version_id
32648 ,p_function_code => l_function_code
32649 ,p_project_id => l_project_id
32650 ,x_return_status => x_return_status
32651 ,x_msg_count => x_msg_count
32652 ,x_msg_data => x_msg_data
32653 ) ;
32654
32655 IF l_debug_mode = 'Y' THEN
32656 pa_debug.write(g_pkg_name,' after pa_actions_pvt.DELETE_DLV_ACTION ['||x_return_status||']',3) ;
32657 END IF;
32658
32659 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32660 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32661 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32662 RAISE FND_API.G_EXC_ERROR;
32663 END IF;
32664
32665 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32666 IF (p_commit = FND_API.G_TRUE) THEN
32667 COMMIT;
32668 END IF;
32669
32670 IF l_debug_mode = 'Y' THEN
32671 pa_debug.reset_curr_function;
32672 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32673 END IF;
32674
32675 EXCEPTION
32676 WHEN FND_API.G_EXC_ERROR THEN
32677 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32678 --IF (p_commit = FND_API.G_TRUE) THEN
32679 ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32680 --END IF;
32681
32682 x_return_status := FND_API.G_RET_STS_ERROR;
32683 l_msg_count := FND_MSG_PUB.count_msg;
32684
32685 IF l_msg_count = 1 AND x_msg_data IS NULL
32686 THEN
32687 PA_INTERFACE_UTILS_PUB.get_messages
32688 (p_encoded => FND_API.G_FALSE,
32689 p_msg_index => 1,
32690 p_msg_count => x_msg_count,
32691 p_msg_data => l_msg_data,
32692 p_data => l_data,
32693 p_msg_index_out => l_msg_index_out);
32694
32695 x_msg_data := l_data;
32696 x_msg_count := l_msg_count;
32697 ELSE
32698 x_msg_count := l_msg_count;
32699
32700 END IF;
32701
32702 IF l_debug_mode = 'Y' THEN
32703 pa_debug.reset_curr_function;
32704 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32705 END IF;
32706
32707 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
32708 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32709 --IF (p_commit = FND_API.G_TRUE) THEN
32710 ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32711 --END IF;
32712
32713 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32714 l_msg_count := FND_MSG_PUB.count_msg;
32715
32716 IF l_msg_count = 1 AND x_msg_data IS NULL
32717 THEN
32718 PA_INTERFACE_UTILS_PUB.get_messages
32719 (p_encoded => FND_API.G_FALSE,
32720 p_msg_index => 1,
32721 p_msg_count => x_msg_count,
32722 p_msg_data => l_msg_data,
32723 p_data => l_data,
32724 p_msg_index_out => l_msg_index_out);
32725
32726 x_msg_data := l_data;
32727 x_msg_count := l_msg_count;
32728 ELSE
32729 x_msg_count := l_msg_count;
32730
32731 END IF;
32732
32733 IF l_debug_mode = 'Y' THEN
32734 pa_debug.reset_curr_function;
32735 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
32736 END IF;
32737
32738 WHEN OTHERS THEN
32739 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32740 --IF (p_commit = FND_API.G_TRUE) THEN
32741 ROLLBACK TO DELETE_DELIVERABLE_ACTION_PUB;
32742 --END IF;
32743
32744 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
32745 x_msg_count := 1;
32746 x_msg_data := SQLERRM;
32747
32748 IF l_debug_mode = 'Y' THEN
32749 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
32750 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
32751 pa_debug.reset_curr_function;
32752 END IF;
32753
32754 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
32755 FND_MSG_PUB.add_exc_msg
32756 ( p_pkg_name => G_PKG_NAME
32757 , p_procedure_name => l_api_name );
32758 END IF;
32759
32760 END Delete_Deliverable_Actions;
32761
32762 -- SubProgram : DELETE_DLV_TO_TASK_ASSCN
32763 -- Type : PUBLIC FUNCTION
32764 -- Purpose : This function will delete the association of Deliverable with Task - Single record
32765 -- Assumptions : None
32766
32767 Procedure DELETE_DLV_TO_TASK_ASSCN (
32768 p_api_version IN NUMBER := 1.0
32769 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
32770 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
32771 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32772 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32773 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32774 ,p_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32775 ,p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32776 ,p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
32777 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
32778 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32779 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
32780 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
32781 )IS
32782
32783
32784 l_api_name VARCHAR2(30) := 'DELETE_DLV_TO_TASK_ASSCN';
32785 l_project_id NUMBER ;
32786 l_task_id NUMBER;
32787 l_task_reference VARCHAR2(240);
32788 l_deliverable_id NUMBER;
32789 l_dlvr_version_id NUMBER;
32790 l_function_code Pa_Proj_Elements.function_code%TYPE;
32791 l_object_relationship_Id pa_object_relationships.object_relationship_Id%TYPE;
32792 l_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
32793
32794 l_function_allowed VARCHAR2(1);
32795 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
32796
32797 l_msg_index_out NUMBER;
32798 l_msg_count NUMBER ;
32799 l_data VARCHAR2(2000);
32800 l_msg_data VARCHAR2(2000);
32801
32802 BEGIN
32803
32804 -- Initialize the message table if requested.
32805 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
32806 FND_MSG_PUB.initialize;
32807 END IF;
32808
32809 -- 3735792, setting save point unconditionally
32810 --IF (p_commit = FND_API.G_TRUE) THEN
32811 savepoint DELETE_DLV_TO_TASK_ASSCN_PUB;
32812 --END IF;
32813
32814 IF l_debug_mode = 'Y' THEN
32815 PA_DEBUG.set_curr_function( p_function => l_api_name,
32816 p_debug_mode => l_debug_mode );
32817 pa_debug.g_err_stage:= 'Inside '||l_api_name;
32818 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
32819 END IF;
32820
32821 -- Set API return status to success
32822 x_return_status := FND_API.G_RET_STS_SUCCESS;
32823
32824 -- Function Security Check
32825 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
32826 (p_api_version_number => p_api_version,
32827 p_responsibility_id => l_resp_id,
32828 p_function_name => 'PA_DELIVERABLE_EDIT',
32829 p_msg_count => x_msg_count,
32830 p_msg_data => x_msg_data,
32831 p_return_status => x_return_status,
32832 p_function_allowed => l_function_allowed);
32833
32834
32835 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32836 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32837 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32838 RAISE FND_API.G_EXC_ERROR;
32839 END IF;
32840
32841 IF l_function_allowed = 'N' THEN
32842 pa_interface_utils_pub.map_new_amg_msg
32843 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
32844 ,p_msg_attribute => 'CHANGE'
32845 ,p_resize_flag => 'Y'
32846 ,p_msg_context => 'GENERAL'
32847 ,p_attribute1 => ''
32848 ,p_attribute2 => ''
32849 ,p_attribute3 => ''
32850 ,p_attribute4 => ''
32851 ,p_attribute5 => '');
32852
32853 x_return_status := FND_API.G_RET_STS_ERROR;
32854 RAISE FND_API.G_EXC_ERROR;
32855 END IF;
32856
32857 -- validate the input parameters.
32858 -- Validate Project Reference / ID
32859 PA_PROJECT_PVT.Convert_pm_projref_to_id (
32860 p_pm_project_reference => p_pm_project_reference
32861 , p_pa_project_id => p_project_id
32862 , p_out_project_id => l_project_id
32863 , p_return_status => x_return_status
32864 );
32865
32866 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
32867 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32868 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
32869 RAISE FND_API.G_EXC_ERROR;
32870 END IF;
32871
32872 -- Validate Deliverable Reference / ID
32873 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
32874 ( p_deliverable_reference => p_pm_deliverable_reference
32875 , p_deliverable_id => p_deliverable_id
32876 , p_project_id => l_project_id
32877 , p_out_deliverable_id => l_deliverable_id
32878 , p_return_status => x_return_status
32879 );
32880
32881 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32882 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32883 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32884 RAISE FND_API.G_EXC_ERROR;
32885 END IF;
32886
32887 -- Validate Task Reference / ID
32888 IF p_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
32889 l_task_id := NULL;
32890 ELSE
32891 l_task_id := p_task_id;
32892 END IF;
32893
32894 IF p_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
32895 l_task_reference := NULL;
32896 ELSE
32897 l_task_reference := p_task_reference;
32898 END IF;
32899
32900 IF ( p_task_id IS NOT NULL OR l_task_reference IS NOT NULL ) THEN
32901 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
32902 p_pa_project_id => l_project_id
32903 , p_structure_type => 'WORKPLAN'
32904 , p_pa_task_id => p_task_id
32905 , p_pm_task_reference => p_task_reference
32906 , p_out_task_id => l_task_id
32907 , p_return_status => x_return_status );
32908
32909 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32910 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32911 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32912 RAISE FND_API.G_EXC_ERROR;
32913 END IF;
32914 END IF;
32915
32916
32917 -- Derive Deliverable_version_id
32918 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
32919
32920 -- Derive Object Relationship ID
32921 l_object_relationship_id := Pa_Deliverable_Utils.Get_Dlvr_Task_Asscn_ID(l_deliverable_id, l_task_id);
32922
32923 -- Calling deliverable api to Delete Association
32924 pa_deliverable_pub.DELETE_DLV_TASK_ASSOCIATION
32925 (p_api_version => p_api_version
32926 ,p_init_msg_list => FND_API.G_FALSE
32927 ,p_commit => FND_API.G_FALSE
32928 ,p_validate_only => FND_API.G_FALSE
32929 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
32930 ,p_calling_module => 'AMG'
32931 ,p_debug_mode => l_debug_mode
32932 ,p_max_msg_count => null
32933 ,p_task_element_id => l_task_id
32934 ,p_task_version_id => -99 -- 3749498 passing -99 instead of null
32935 ,p_dlv_element_id => l_deliverable_Id
32936 ,p_dlv_version_id => l_dlvr_version_id
32937 ,p_object_relationship_id => l_object_relationship_id
32938 ,p_obj_rec_ver_number => null
32939 ,p_project_id => l_project_id
32940 ,p_calling_context => 'TASKS'
32941 ,x_return_status => x_return_status
32942 ,x_msg_count => x_msg_count
32943 ,x_msg_data => x_msg_data
32944 );
32945
32946 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
32947 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
32948 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
32949 RAISE FND_API.G_EXC_ERROR;
32950 END IF;
32951
32952 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
32953 IF (p_commit = FND_API.G_TRUE) THEN
32954 COMMIT;
32955 END IF;
32956
32957 IF l_debug_mode = 'Y' THEN
32958 pa_debug.reset_curr_function;
32959 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
32960 END IF;
32961
32962 EXCEPTION
32963 WHEN FND_API.G_EXC_ERROR THEN
32964 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32965 --IF (p_commit = FND_API.G_TRUE) THEN
32966 ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32967 --END IF;
32968
32969 x_return_status := FND_API.G_RET_STS_ERROR;
32970 l_msg_count := FND_MSG_PUB.count_msg;
32971
32972 IF l_msg_count = 1 AND x_msg_data IS NULL
32973 THEN
32974 PA_INTERFACE_UTILS_PUB.get_messages
32975 (p_encoded => FND_API.G_FALSE,
32976 p_msg_index => 1,
32977 p_msg_count => x_msg_count,
32978 p_msg_data => l_msg_data,
32979 p_data => l_data,
32980 p_msg_index_out => l_msg_index_out);
32981
32982 x_msg_data := l_data;
32983 x_msg_count := l_msg_count;
32984 ELSE
32985 x_msg_count := l_msg_count;
32986 END IF;
32987
32988 IF l_debug_mode = 'Y' THEN
32989 pa_debug.reset_curr_function;
32990 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
32991 END IF;
32992
32993 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
32994 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
32995 -- IF (p_commit = FND_API.G_TRUE) THEN
32996 ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
32997 --END IF;
32998
32999 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33000 l_msg_count := FND_MSG_PUB.count_msg;
33001
33002 IF l_msg_count = 1 AND x_msg_data IS NULL
33003 THEN
33004 PA_INTERFACE_UTILS_PUB.get_messages
33005 (p_encoded => FND_API.G_FALSE,
33006 p_msg_index => 1,
33007 p_msg_count => x_msg_count,
33008 p_msg_data => l_msg_data,
33009 p_data => l_data,
33010 p_msg_index_out => l_msg_index_out);
33011
33012 x_msg_data := l_data;
33013 x_msg_count := l_msg_count;
33014 ELSE
33015 x_msg_count := l_msg_count;
33016 END IF;
33017
33018 IF l_debug_mode = 'Y' THEN
33019 pa_debug.reset_curr_function;
33020 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33021 END IF;
33022
33023 WHEN OTHERS THEN
33024 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33025 --IF (p_commit = FND_API.G_TRUE) THEN
33026 ROLLBACK TO DELETE_DLV_TO_TASK_ASSCN_PUB;
33027 --END IF;
33028
33029 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33030 x_msg_count := 1;
33031 x_msg_data := SQLERRM;
33032
33033 IF l_debug_mode = 'Y' THEN
33034 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33035 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33036 pa_debug.reset_curr_function;
33037 END IF;
33038
33039 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33040 FND_MSG_PUB.add_exc_msg
33041 ( p_pkg_name => G_PKG_NAME
33042 , p_procedure_name => l_api_name );
33043 END IF;
33044
33045 END DELETE_DLV_TO_TASK_ASSCN;
33046
33047 -- SubProgram : ASSOCIATE_DLV_TO_TASK
33048 -- Type : PUBLIC FUNCTION
33049 -- Purpose : This function will create the association of Deliverable with Task - Single record
33050 -- Assumptions : None
33051
33052 Procedure ASSOCIATE_DLV_TO_TASK (
33053 p_api_version IN NUMBER := 1.0
33054 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
33055 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
33056 ,p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
33057 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33058 -- added for bug# 3729250
33059 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33060 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33061 -- added for bug# 3729250
33062 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33063 ,p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33064 -- added for bug# 3729250
33065 ,p_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33066 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33067 ,x_return_status OUT NOCOPY VARCHAR2/*Added the nocopy check for 4537865 */
33068 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33069 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33070 )IS
33071
33072 l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK';
33073 l_project_id NUMBER ;
33074 l_task_id NUMBER;
33075 l_task_reference VARCHAR2(240);
33076 l_deliverable_id NUMBER;
33077 l_dlvr_version_id NUMBER;
33078 l_function_code Pa_Proj_Elements.function_code%TYPE;
33079 l_object_relationship_Id pa_object_relationships.object_relationship_Id%TYPE;
33080
33081 l_function_allowed VARCHAR2(1);
33082 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
33083
33084 l_msg_index_out NUMBER;
33085 l_msg_count NUMBER ;
33086 l_data VARCHAR2(2000);
33087 l_msg_data VARCHAR2(2000);
33088
33089 l_wp_task_flag varchar2(1); -- Added for bug5462298
33090
33091 BEGIN
33092
33093 -- Initialize the message table if requested.
33094 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
33095 FND_MSG_PUB.initialize;
33096 END IF;
33097
33098 -- 3735792, setting save point unconditionally
33099 --IF (p_commit = FND_API.G_TRUE) THEN
33100 savepoint ASSOCIATE_DLV_TO_TASK_PUB;
33101 --END IF;
33102
33103 IF p_debug_mode = 'Y' THEN
33104 PA_DEBUG.set_curr_function( p_function => l_api_name,
33105 p_debug_mode => p_debug_mode );
33106 pa_debug.g_err_stage:= 'Inside '||l_api_name;
33107 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33108 END IF;
33109
33110 -- Set API return status to success
33111 x_return_status := FND_API.G_RET_STS_SUCCESS;
33112
33113 -- Function Security Check
33114 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
33115 (p_api_version_number => p_api_version,
33116 p_responsibility_id => l_resp_id,
33117 p_function_name => 'PA_DELIVERABLE_EDIT',
33118 p_msg_count => x_msg_count,
33119 p_msg_data => x_msg_data,
33120 p_return_status => x_return_status,
33121 p_function_allowed => l_function_allowed);
33122
33123
33124 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33125 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33126 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33127 RAISE FND_API.G_EXC_ERROR;
33128 END IF;
33129
33130 IF l_function_allowed = 'N' THEN
33131 pa_interface_utils_pub.map_new_amg_msg
33132 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
33133 ,p_msg_attribute => 'CHANGE'
33134 ,p_resize_flag => 'Y'
33135 ,p_msg_context => 'GENERAL'
33136 ,p_attribute1 => ''
33137 ,p_attribute2 => ''
33138 ,p_attribute3 => ''
33139 ,p_attribute4 => ''
33140 ,p_attribute5 => '');
33141
33142 x_return_status := FND_API.G_RET_STS_ERROR;
33143 RAISE FND_API.G_EXC_ERROR;
33144 END IF;
33145
33146 -- validate the input parameters.
33147 -- Validate Project Reference / ID
33148 PA_PROJECT_PVT.Convert_pm_projref_to_id (
33149 p_pm_project_reference => p_pm_project_reference -- 3729250, earlier null was passed
33150 , p_pa_project_id => p_project_id
33151 , p_out_project_id => l_project_id
33152 , p_return_status => x_return_status
33153 );
33154
33155 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33156 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33157 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33158 RAISE FND_API.G_EXC_ERROR;
33159 END IF;
33160
33161 -- Validate Deliverable Reference / ID
33162 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
33163 ( p_deliverable_reference => p_deliverable_reference -- 3729250, earlier null was passed
33164 , p_deliverable_id => p_deliverable_id
33165 , p_project_id => l_project_id
33166 , p_out_deliverable_id => l_deliverable_id
33167 , p_return_status => x_return_status
33168 );
33169
33170 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33171 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33172 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33173 RAISE FND_API.G_EXC_ERROR;
33174 END IF;
33175
33176 -- Validate Task Reference / ID
33177 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
33178 p_pa_project_id => l_project_id
33179 , p_structure_type => 'WORKPLAN'
33180 , p_pa_task_id => p_task_id
33181 , p_pm_task_reference => p_pm_task_reference -- 3729250, earlier null was passed
33182 , p_out_task_id => l_task_id
33183 , p_return_status => x_return_status );
33184
33185 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33186 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33187 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33188 RAISE FND_API.G_EXC_ERROR;
33189 END IF;
33190
33191
33192 -- 5462298 Added below code to validate passed task id
33193 -- if it is not workplan task , throw error message
33194
33195 l_wp_task_flag := PA_PROJ_ELEMENTS_UTILS.CHECK_IS_WORKPLAN_TASK (
33196 p_project_id => l_project_id
33197 , p_proj_element_id => l_task_id );
33198
33199 IF l_wp_task_flag <> 'Y' THEN
33200
33201 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_ERROR)
33202 THEN
33203
33204 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA'
33205 ,p_msg_name => 'PA_TASK_ID_INVALID');
33206
33207 x_return_status := FND_API.G_RET_STS_ERROR;
33208 RAISE FND_API.G_EXC_ERROR;
33209
33210 END IF;
33211
33212 END IF;
33213
33214 -- 5462298 end
33215
33216 -- Derive Deliverable_version_id
33217 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
33218
33219 -- Calling deliverable api to Create Association
33220 pa_deliverable_pvt.CREATE_DLV_TASK_ASSOCIATION
33221 (p_api_version => p_api_version
33222 ,p_init_msg_list => FND_API.G_FALSE
33223 ,p_commit => FND_API.G_FALSE
33224 ,p_validate_only => FND_API.G_FALSE
33225 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
33226 ,p_calling_module => 'AMG'
33227 ,p_debug_mode => p_debug_mode
33228 ,p_max_msg_count => null
33229 ,p_task_element_id => l_task_id
33230 ,p_task_version_id => null
33231 ,p_dlv_element_id => l_deliverable_id
33232 ,p_dlv_version_id => l_dlvr_version_id
33233 ,p_project_id => l_project_id
33234 ,x_return_status => x_return_status
33235 ,x_msg_count => x_msg_count
33236 ,x_msg_data => x_msg_data
33237 );
33238
33239 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33240 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33241 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33242 RAISE FND_API.G_EXC_ERROR;
33243 END IF;
33244
33245 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
33246 IF (p_commit = FND_API.G_TRUE) THEN
33247 COMMIT;
33248 END IF;
33249
33250 IF p_debug_mode = 'Y' THEN
33251 pa_debug.reset_curr_function;
33252 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
33253 END IF;
33254
33255 EXCEPTION
33256 WHEN FND_API.G_EXC_ERROR THEN
33257
33258 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33259 --IF (p_commit = FND_API.G_TRUE) THEN
33260 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
33261 --END IF;
33262
33263 x_return_status := FND_API.G_RET_STS_ERROR;
33264 l_msg_count := FND_MSG_PUB.count_msg;
33265
33266 IF l_msg_count = 1 AND x_msg_data IS NULL
33267 THEN
33268 PA_INTERFACE_UTILS_PUB.get_messages
33269 (p_encoded => FND_API.G_FALSE,
33270 p_msg_index => 1,
33271 p_msg_count => x_msg_count,
33272 p_msg_data => l_msg_data,
33273 p_data => l_data,
33274 p_msg_index_out => l_msg_index_out);
33275
33276 x_msg_data := l_data;
33277 x_msg_count := l_msg_count;
33278 ELSE
33279 x_msg_count := l_msg_count;
33280 END IF;
33281
33282 IF p_debug_mode = 'Y' THEN
33283 pa_debug.reset_curr_function;
33284 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
33285 END IF;
33286
33287 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
33288 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33289 --IF (p_commit = FND_API.G_TRUE) THEN
33290 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
33291 --END IF;
33292
33293 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33294 l_msg_count := FND_MSG_PUB.count_msg;
33295
33296 IF l_msg_count = 1 AND x_msg_data IS NULL
33297 THEN
33298 PA_INTERFACE_UTILS_PUB.get_messages
33299 (p_encoded => FND_API.G_FALSE,
33300 p_msg_index => 1,
33301 p_msg_count => x_msg_count,
33302 p_msg_data => l_msg_data,
33303 p_data => l_data,
33304 p_msg_index_out => l_msg_index_out);
33305
33306 x_msg_data := l_data;
33307 x_msg_count := l_msg_count;
33308 ELSE
33309 x_msg_count := l_msg_count;
33310 END IF;
33311
33312 IF p_debug_mode = 'Y' THEN
33313 pa_debug.reset_curr_function;
33314 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33315 END IF;
33316
33317 WHEN OTHERS THEN
33318 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33319 -- IF (p_commit = FND_API.G_TRUE) THEN
33320 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_PUB;
33321 -- END IF;
33322
33323 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33324 x_msg_count := 1;
33325 x_msg_data := SQLERRM;
33326
33327 IF p_debug_mode = 'Y' THEN
33328 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33329 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33330 pa_debug.reset_curr_function;
33331 END IF;
33332
33333 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33334 FND_MSG_PUB.add_exc_msg
33335 ( p_pkg_name => G_PKG_NAME
33336 , p_procedure_name => l_api_name );
33337 END IF;
33338
33339 END ASSOCIATE_DLV_TO_TASK;
33340
33341 Procedure ASSOCIATE_DLV_TO_TASK_ASSIGN (
33342 p_api_version IN NUMBER := 1.0
33343 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
33344 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
33345 ,p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
33346 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33347 -- added for bug# 3729250
33348 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33349 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33350 ,p_pm_task_asgmt_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33351 ,p_task_assign_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33352 -- added for bug# 3729250
33353 ,p_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33354 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33355 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33356 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33357 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33358 )IS
33359
33360 l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK_ASSIGN';
33361 l_project_id NUMBER ;
33362 l_task_assign_id NUMBER;
33363 l_task_assign_reference VARCHAR2(240);
33364 l_deliverable_id NUMBER;
33365 l_dlvr_version_id NUMBER;
33366 l_function_code Pa_Proj_Elements.function_code%TYPE;
33367 l_object_relationship_Id pa_object_relationships.object_relationship_Id%TYPE;
33368 l_task_assignment_id NUMBER ;
33369
33370 l_function_allowed VARCHAR2(1);
33371 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
33372
33373 l_msg_index_out NUMBER;
33374 l_msg_count NUMBER ;
33375 l_data VARCHAR2(2000);
33376 l_msg_data VARCHAR2(2000);
33377
33378 BEGIN
33379
33380 -- Initialize the message table if requested.
33381 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
33382 FND_MSG_PUB.initialize;
33383 END IF;
33384
33385 -- 3735792, setting save point unconditionally
33386 -- IF (p_commit = FND_API.G_TRUE) THEN
33387 savepoint ASSOCIATE_DLV_TO_TASK_ASSIGN;
33388 --END IF;
33389
33390 IF p_debug_mode = 'Y' THEN
33391 PA_DEBUG.set_curr_function( p_function => l_api_name,
33392 p_debug_mode => p_debug_mode );
33393 pa_debug.g_err_stage:= 'Inside '||l_api_name;
33394 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33395 END IF;
33396
33397 -- Set API return status to success
33398 x_return_status := FND_API.G_RET_STS_SUCCESS;
33399
33400 -- Function Security Check
33401 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
33402 (p_api_version_number => p_api_version,
33403 p_responsibility_id => l_resp_id,
33404 p_function_name => 'PA_DELIVERABLE_EDIT',
33405 p_msg_count => x_msg_count,
33406 p_msg_data => x_msg_data,
33407 p_return_status => x_return_status,
33408 p_function_allowed => l_function_allowed);
33409
33410
33411 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33412 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33413 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33414 RAISE FND_API.G_EXC_ERROR;
33415 END IF;
33416
33417 IF l_function_allowed = 'N' THEN
33418 pa_interface_utils_pub.map_new_amg_msg
33419 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
33420 ,p_msg_attribute => 'CHANGE'
33421 ,p_resize_flag => 'Y'
33422 ,p_msg_context => 'GENERAL'
33423 ,p_attribute1 => ''
33424 ,p_attribute2 => ''
33425 ,p_attribute3 => ''
33426 ,p_attribute4 => ''
33427 ,p_attribute5 => '');
33428
33429 x_return_status := FND_API.G_RET_STS_ERROR;
33430 RAISE FND_API.G_EXC_ERROR;
33431 END IF;
33432
33433 -- validate the input parameters.
33434 -- Validate Project Reference / ID
33435 PA_PROJECT_PVT.Convert_pm_projref_to_id (
33436 p_pm_project_reference => p_pm_project_reference -- 3729250, earlier was passed as null
33437 , p_pa_project_id => p_project_id
33438 , p_out_project_id => l_project_id
33439 , p_return_status => x_return_status
33440 );
33441
33442 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33443 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33444 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33445 RAISE FND_API.G_EXC_ERROR;
33446 END IF;
33447
33448 -- Validate Deliverable Reference / ID
33449 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
33450 ( p_deliverable_reference => p_deliverable_reference -- 3729250 , earlier passed was null
33451 , p_deliverable_id => p_deliverable_id
33452 , p_project_id => l_project_id
33453 , p_out_deliverable_id => l_deliverable_id
33454 , p_return_status => x_return_status
33455 );
33456
33457 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33458 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33459 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33460 RAISE FND_API.G_EXC_ERROR;
33461 END IF;
33462
33463 -- Validate Task Assignment Reference / ID
33464 IF p_task_assign_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33465 l_task_assign_id := NULL;
33466 ELSE
33467 l_task_assign_id := p_task_assign_id;
33468 END IF;
33469
33470
33471 PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID
33472 ( p_pm_product_code => p_pm_source_code
33473 ,p_pa_project_id => l_project_id
33474 ,p_pa_structure_version_id => null
33475 ,p_pa_task_id => null
33476 ,p_pa_task_elem_ver_id => null
33477 ,p_pm_task_asgmt_reference => p_pm_task_asgmt_reference
33478 ,p_pa_task_assignment_id => p_task_assign_id
33479 ,p_resource_alias => null
33480 ,p_resource_list_member_id => null
33481 ,x_pa_task_assignment_id => l_task_assignment_id
33482 ,x_return_status => x_return_status
33483 ) ;
33484
33485 IF p_debug_mode = 'Y' THEN
33486 pa_debug.write(g_pkg_name,'PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID ret status'||x_return_status||
33487 ']task assign ref['||l_task_assign_reference||']task assign id['||l_task_assign_id||']',3) ;
33488 END IF;
33489
33490 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33491 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33492 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33493 RAISE FND_API.G_EXC_ERROR;
33494 END IF;
33495
33496 -- Derive Deliverable_version_id
33497 l_dlvr_version_id := Pa_Deliverable_Utils.Get_Deliverable_Version_Id (l_deliverable_id, null, l_project_id) ;
33498
33499 -- Calling deliverable api to Create Association
33500 pa_deliverable_pvt.CREATE_DLV_TASK_ASSOCIATION
33501 (p_api_version => p_api_version
33502 ,p_init_msg_list => FND_API.G_FALSE
33503 ,p_commit => FND_API.G_FALSE
33504 ,p_validate_only => FND_API.G_FALSE
33505 ,p_validation_level => FND_API.G_VALID_LEVEL_FULL
33506 ,p_calling_module => 'AMG'
33507 ,p_calling_context => 'PA_ASSIGNMENTS'
33508 ,p_debug_mode => p_debug_mode
33509 ,p_max_msg_count => null
33510 ,p_task_element_id => l_task_assignment_id
33511 ,p_task_version_id => null
33512 ,p_dlv_element_id => l_deliverable_id
33513 ,p_dlv_version_id => l_dlvr_version_id
33514 ,p_project_id => l_project_id
33515 ,x_return_status => x_return_status
33516 ,x_msg_count => x_msg_count
33517 ,x_msg_data => x_msg_data
33518 );
33519
33520 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33521 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33522 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33523 RAISE FND_API.G_EXC_ERROR;
33524 END IF;
33525
33526 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
33527 IF (p_commit = FND_API.G_TRUE) THEN
33528 COMMIT;
33529 END IF;
33530
33531 IF p_debug_mode = 'Y' THEN
33532 pa_debug.reset_curr_function;
33533 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
33534 END IF;
33535
33536 EXCEPTION
33537 WHEN FND_API.G_EXC_ERROR THEN
33538 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33539 -- IF (p_commit = FND_API.G_TRUE) THEN
33540 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33541 -- END IF;
33542
33543 x_return_status := FND_API.G_RET_STS_ERROR;
33544 l_msg_count := FND_MSG_PUB.count_msg;
33545
33546 IF l_msg_count = 1 AND x_msg_data IS NULL
33547 THEN
33548 PA_INTERFACE_UTILS_PUB.get_messages
33549 (p_encoded => FND_API.G_FALSE,
33550 p_msg_index => 1,
33551 p_msg_count => x_msg_count,
33552 p_msg_data => l_msg_data,
33553 p_data => l_data,
33554 p_msg_index_out => l_msg_index_out);
33555
33556 x_msg_data := l_data;
33557 x_msg_count := l_msg_count;
33558 ELSE
33559 x_msg_count := l_msg_count;
33560 END IF;
33561
33562 IF p_debug_mode = 'Y' THEN
33563 pa_debug.reset_curr_function;
33564 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
33565 END IF;
33566
33567 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
33568 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33569 --IF (p_commit = FND_API.G_TRUE) THEN
33570 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33571 --END IF;
33572 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33573 l_msg_count := FND_MSG_PUB.count_msg;
33574
33575 IF l_msg_count = 1 AND x_msg_data IS NULL
33576 THEN
33577 PA_INTERFACE_UTILS_PUB.get_messages
33578 (p_encoded => FND_API.G_FALSE,
33579 p_msg_index => 1,
33580 p_msg_count => x_msg_count,
33581 p_msg_data => l_msg_data,
33582 p_data => l_data,
33583 p_msg_index_out => l_msg_index_out);
33584
33585 x_msg_data := l_data;
33586 x_msg_count := l_msg_count;
33587 ELSE
33588 x_msg_count := l_msg_count;
33589 END IF;
33590
33591 IF p_debug_mode = 'Y' THEN
33592 pa_debug.reset_curr_function;
33593 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33594 END IF;
33595
33596 WHEN OTHERS THEN
33597 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33598 --IF (p_commit = FND_API.G_TRUE) THEN
33599 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33600 --END IF;
33601
33602 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33603 x_msg_count := 1;
33604 x_msg_data := SQLERRM;
33605
33606 IF p_debug_mode = 'Y' THEN
33607 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33608 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33609 pa_debug.reset_curr_function;
33610 END IF;
33611
33612 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33613 FND_MSG_PUB.add_exc_msg
33614 ( p_pkg_name => G_PKG_NAME
33615 , p_procedure_name => l_api_name );
33616 END IF;
33617
33618 END ASSOCIATE_DLV_TO_TASK_ASSIGN;
33619
33620
33621 Procedure DELETE_DLV_TO_TASK_ASSIGN (
33622 p_api_version IN NUMBER := 1.0
33623 ,p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
33624 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
33625 ,p_debug_mode IN VARCHAR2 := FND_API.G_FALSE
33626 ,p_pm_source_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33627 ,p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33628 -- added for bug# 3729250
33629 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33630 ,p_task_assign_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33631 ,p_pm_task_asgmt_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33632 ,p_deliverable_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM --added for bug 3888280
33633 ,p_pm_deliverable_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR --added for bug 3888280
33634 ,x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33635 ,x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33636 ,x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33637 )IS
33638
33639 l_api_name VARCHAR2(30) := 'ASSOCIATE_DLV_TO_TASK_ASSIGN';
33640 l_project_id NUMBER ;
33641 l_task_assign_id NUMBER;
33642 l_task_assign_reference VARCHAR2(240);
33643 l_deliverable_id NUMBER;
33644 l_dlvr_version_id NUMBER;
33645 l_function_code Pa_Proj_Elements.function_code%TYPE;
33646 l_object_relationship_Id pa_object_relationships.object_relationship_Id%TYPE;
33647 l_task_assignment_id NUMBER ;
33648
33649 l_function_allowed VARCHAR2(1);
33650 l_resp_id NUMBER := FND_GLOBAL.Resp_id;
33651
33652 l_msg_index_out NUMBER;
33653 l_msg_count NUMBER ;
33654 l_data VARCHAR2(2000);
33655 l_msg_data VARCHAR2(2000);
33656
33657 -- 3888280 Added cursor to retrieve object_relationship_id for a TA to a DLVR
33658 -- Association
33659
33660 CURSOR c_obj_rel_id(l_task_assng_id NUMBER, l_dlvr_id NUMBER) IS
33661 SELECT
33662 OBJ.OBJECT_RELATIONSHIP_ID
33663 FROM PA_OBJECT_RELATIONSHIPS OBJ
33664 WHERE
33665 OBJ.OBJECT_ID_FROM2 = l_task_assng_id
33666 AND OBJ.OBJECT_ID_TO2 = l_dlvr_id
33667 AND OBJ.OBJECT_TYPE_FROM = 'PA_ASSIGNMENTS'
33668 AND OBJ.OBJECT_TYPE_TO = 'PA_DELIVERABLES'
33669 AND OBJ.RELATIONSHIP_TYPE = 'A'
33670 AND OBJ.RELATIONSHIP_SUBTYPE = 'ASSIGNMENT_TO_DELIVERABLE';
33671
33672 BEGIN
33673
33674 -- Initialize the message table if requested.
33675 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
33676 FND_MSG_PUB.initialize;
33677 END IF;
33678
33679 -- 3735792, setting save point unconditionally
33680 --IF (p_commit = FND_API.G_TRUE) THEN
33681 savepoint ASSOCIATE_DLV_TO_TASK_ASSIGN;
33682 --END IF;
33683
33684 IF p_debug_mode = 'Y' THEN
33685 PA_DEBUG.set_curr_function( p_function => l_api_name,
33686 p_debug_mode => p_debug_mode );
33687 pa_debug.g_err_stage:= 'Inside '||l_api_name;
33688 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33689 END IF;
33690
33691 -- Set API return status to success
33692 x_return_status := FND_API.G_RET_STS_SUCCESS;
33693
33694 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33695 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33696 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33697 RAISE FND_API.G_EXC_ERROR;
33698 END IF;
33699
33700 IF l_function_allowed = 'N' THEN
33701 pa_interface_utils_pub.map_new_amg_msg
33702 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
33703 ,p_msg_attribute => 'CHANGE'
33704 ,p_resize_flag => 'Y'
33705 ,p_msg_context => 'GENERAL'
33706 ,p_attribute1 => ''
33707 ,p_attribute2 => ''
33708 ,p_attribute3 => ''
33709 ,p_attribute4 => ''
33710 ,p_attribute5 => '');
33711
33712 x_return_status := FND_API.G_RET_STS_ERROR;
33713 RAISE FND_API.G_EXC_ERROR;
33714 END IF;
33715
33716 -- validate the input parameters.
33717 -- Validate Project Reference / ID
33718 PA_PROJECT_PVT.Convert_pm_projref_to_id (
33719 p_pm_project_reference => p_pm_project_reference -- 3729250 , earlier null was passed
33720 , p_pa_project_id => p_project_id
33721 , p_out_project_id => l_project_id
33722 , p_return_status => x_return_status
33723 );
33724
33725 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
33726 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33727 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
33728 RAISE FND_API.G_EXC_ERROR;
33729 END IF;
33730
33731 -- Validate Task Assignment Reference / ID
33732 IF p_task_assign_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
33733 l_task_assign_id := NULL;
33734 ELSE
33735 l_task_assign_id := p_task_assign_id;
33736 END IF;
33737
33738 PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID
33739 ( p_pm_product_code => p_pm_source_code
33740 ,p_pa_project_id => l_project_id
33741 ,p_pa_structure_version_id => null
33742 ,p_pa_task_id => null
33743 ,p_pa_task_elem_ver_id => null
33744 ,p_pm_task_asgmt_reference => p_pm_task_asgmt_reference
33745 ,p_pa_task_assignment_id => p_task_assign_id
33746 ,p_resource_alias => null
33747 ,p_resource_list_member_id => null
33748 ,x_pa_task_assignment_id => l_task_assignment_id
33749 ,x_return_status => x_return_status
33750 ) ;
33751
33752 IF p_debug_mode = 'Y' THEN
33753 pa_debug.write(g_pkg_name,'PA_TASK_ASSIGNMENTS_PUB.Convert_PM_TARef_To_ID ret status'||x_return_status||
33754 ']task assign ref['||l_task_assign_reference||']task assign id['||l_task_assign_id||']',3) ;
33755 END IF;
33756
33757 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33758 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33759 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33760 RAISE FND_API.G_EXC_ERROR;
33761 END IF;
33762
33763 -- 3888280 start
33764 -- Added code to validate Deliverable Reference and Id
33765
33766 -- Validate Deliverable Reference / ID
33767 Pa_Deliverable_Utils.Convert_pm_dlvrref_to_id
33768 ( p_deliverable_reference => p_pm_deliverable_reference
33769 , p_deliverable_id => p_deliverable_id
33770 , p_project_id => l_project_id
33771 , p_out_deliverable_id => l_deliverable_id
33772 , p_return_status => x_return_status
33773 );
33774
33775 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
33776 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
33777 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
33778 RAISE FND_API.G_EXC_ERROR;
33779 END IF;
33780
33781 -- Addec code to retrieve object_relationship_id for a TA to a DLVR relationship
33782 -- passing this retrieved id to DELETE_DLV_TASK_ASSOCIATION api
33783
33784 OPEN c_obj_rel_id(l_task_assignment_id,l_deliverable_id) ;
33785 FETCH c_obj_rel_id into l_object_relationship_Id ;
33786 CLOSE c_obj_rel_id;
33787
33788 -- commented below code because below api was deleting all the association to deliverables
33789 -- for a TA
33790
33791 /*
33792 PA_DELIVERABLE_PVT.DELETE_DLV_TASK_ASSCN_IN_BULK
33793 (p_calling_module => 'AMG'
33794 ,p_calling_context => 'PA_ASSIGNMENTS'
33795 ,p_task_element_id => l_task_assignment_id
33796 ,p_task_version_id => null
33797 ,p_project_id => l_project_id
33798 ,x_return_status => x_return_status
33799 ,x_msg_count => x_msg_count
33800 ,x_msg_data => x_msg_data
33801 ) ;
33802 */
33803
33804 IF p_debug_mode = 'Y' THEN
33805 pa_debug.g_err_stage:= ' l_object_relationship_Id is ' || l_object_relationship_Id;
33806 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3) ;
33807 END IF ;
33808
33809 -- Added below api call to delete a TA to a DLVR association
33810 -- passing calling context as TASK_ASSIGNMENT and for calling context TASK_ASSIGNMENT
33811 -- below api is not doing any validation to check whether the deletion is allowed or not
33812
33813 PA_DELIVERABLE_PVT.DELETE_DLV_TASK_ASSOCIATION
33814 (
33815 p_calling_module => 'AMG'
33816 ,p_task_element_id => l_task_assignment_id
33817 ,p_task_version_id => NULL
33818 ,p_dlv_element_id => l_deliverable_id
33819 ,p_dlv_version_id => NULL
33820 ,p_object_relationship_id => l_object_relationship_Id
33821 ,p_obj_rec_ver_number => NULL
33822 ,p_project_id => l_project_id
33823 ,p_calling_context => 'TASK_ASSIGNMENT'
33824 ,x_return_status => x_return_status
33825 ,x_msg_count => x_msg_count
33826 ,x_msg_data => x_msg_data
33827 );
33828
33829 -- 3888280 end
33830
33831 -- 3735792, if return status is 'S' and p_commit is passed as TRUE call commit
33832 IF (p_commit = FND_API.G_TRUE) THEN
33833 COMMIT;
33834 END IF;
33835
33836 IF p_debug_mode = 'Y' THEN
33837 pa_debug.reset_curr_function;
33838 pa_debug.write(g_pkg_name,l_api_name||': Exiting succesfully',5);
33839 END IF;
33840
33841 EXCEPTION
33842 WHEN FND_API.G_EXC_ERROR THEN
33843 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33844 --IF (p_commit = FND_API.G_TRUE) THEN
33845 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33846 --END IF;
33847
33848 x_return_status := FND_API.G_RET_STS_ERROR;
33849 l_msg_count := FND_MSG_PUB.count_msg;
33850
33851 IF l_msg_count = 1 AND x_msg_data IS NULL
33852 THEN
33853 PA_INTERFACE_UTILS_PUB.get_messages
33854 (p_encoded => FND_API.G_FALSE,
33855 p_msg_index => 1,
33856 p_msg_count => x_msg_count,
33857 p_msg_data => l_msg_data,
33858 p_data => l_data,
33859 p_msg_index_out => l_msg_index_out);
33860
33861 x_msg_data := l_data;
33862 x_msg_count := l_msg_count;
33863 ELSE
33864 x_msg_count := l_msg_count;
33865 END IF;
33866
33867 IF p_debug_mode = 'Y' THEN
33868 pa_debug.reset_curr_function;
33869 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_ERROR exception',5);
33870 END IF;
33871
33872 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
33873 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33874 --IF (p_commit = FND_API.G_TRUE) THEN
33875 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33876 --END IF;
33877
33878 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33879 l_msg_count := FND_MSG_PUB.count_msg;
33880
33881 IF l_msg_count = 1 AND x_msg_data IS NULL
33882 THEN
33883 PA_INTERFACE_UTILS_PUB.get_messages
33884 (p_encoded => FND_API.G_FALSE,
33885 p_msg_index => 1,
33886 p_msg_count => x_msg_count,
33887 p_msg_data => l_msg_data,
33888 p_data => l_data,
33889 p_msg_index_out => l_msg_index_out);
33890
33891 x_msg_data := l_data;
33892 x_msg_count := l_msg_count;
33893 ELSE
33894 x_msg_count := l_msg_count;
33895 END IF;
33896
33897 IF p_debug_mode = 'Y' THEN
33898 pa_debug.reset_curr_function;
33899 pa_debug.write(g_pkg_name,l_api_name||': Inside G_EXC_UNEXPECTED_ERROR exception',5);
33900 END IF;
33901
33902 WHEN OTHERS THEN
33903 -- 3735792, if return status is 'U' or 'E' , rollback to save point , don't check for p_commit
33904 --IF (p_commit = FND_API.G_TRUE) THEN
33905 ROLLBACK TO ASSOCIATE_DLV_TO_TASK_ASSIGN;
33906 --END IF;
33907
33908 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
33909 x_msg_count := 1;
33910 x_msg_data := SQLERRM;
33911
33912 IF p_debug_mode = 'Y' THEN
33913 pa_debug.g_err_stage:=l_api_name||': Unexpected Error'||SQLERRM;
33914 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,5);
33915 pa_debug.reset_curr_function;
33916 END IF;
33917
33918 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)THEN
33919 FND_MSG_PUB.add_exc_msg
33920 ( p_pkg_name => G_PKG_NAME
33921 , p_procedure_name => l_api_name );
33922 END IF;
33923
33924 END DELETE_DLV_TO_TASK_ASSIGN;
33925 -- FP M Changes for deliverables : End
33926
33927 --Added by rtarway for FP.M Development
33928 PROCEDURE Delete_Mapping
33929 (
33930 p_api_version IN NUMBER := 1.0
33931 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
33932 , p_commit IN VARCHAR2 := FND_API.G_TRUE
33933 , p_debug_mode IN VARCHAR2 := 'N'
33934 , p_wp_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33935 , p_fp_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33936 , p_wp_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33937 , p_fp_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33938 , p_pm_wp_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33939 , p_pm_fp_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33940 , p_wp_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33941 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
33942 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
33943 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33944 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
33945 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
33946 )
33947 IS
33948 l_msg_count NUMBER;
33949 l_msg_data VARCHAR2(2000);
33950 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_MAPPING';
33951 l_return_status VARCHAR2(1);
33952 l_debug_mode VARCHAR2(1);
33953 l_debug_level2 CONSTANT NUMBER := 2;
33954 l_debug_level3 CONSTANT NUMBER := 3;
33955 l_debug_level4 CONSTANT NUMBER := 4;
33956 l_debug_level5 CONSTANT NUMBER := 5;
33957
33958 l_wp_task_version_id NUMBER;
33959 l_fp_task_version_id NUMBER;
33960 l_wp_task_id NUMBER;
33961 l_fp_task_id NUMBER;
33962 l_project_id NUMBER;
33963 l_wp_structure_version_id NUMBER;
33964
33965 --This cursor is based on assumption that a financial structure will have only one version in a project.
33966 CURSOR cur_get_fin_task_version_id(l_project_id NUMBER, l_fp_task_id NUMBER)
33967 is
33968 Select element_version_id
33969 from pa_proj_element_versions
33970 where proj_element_id = l_fp_task_id
33971 and project_id = l_project_id
33972 and financial_task_flag = 'Y';
33973
33974
33975 BEGIN
33976
33977 -- 4537865
33978 x_return_status := FND_API.G_RET_STS_SUCCESS;
33979
33980 -- Initialize the message table if requested.
33981 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
33982 FND_MSG_PUB.initialize;
33983 END IF;
33984
33985 -- Bug 4142254 : Commenting this condition, as we want to create savepoint always.
33986 -- We could have done other way around too i.e. Savepoint and rollback shoud both be in
33987 -- conditions. But we prefer removing conditions due to bug 3735792
33988 -- IF (p_commit = FND_API.G_TRUE) THEN
33989 savepoint DELETE_MAPPING_PUB;
33990 -- END IF;
33991
33992 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
33993 IF l_debug_mode = 'Y' THEN
33994 PA_DEBUG.set_curr_function( p_function => 'DELETE_MAPPING',
33995 p_debug_mode => l_debug_mode );
33996 END IF;
33997
33998 IF l_debug_mode = 'Y' THEN
33999 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : DELETE_MAPPING : Printing Input parameters';
34000 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34001 l_debug_level3);
34002 Pa_Debug.WRITE(g_pkg_name,'p_wp_task_version_id'||':'||p_wp_task_version_id,
34003 l_debug_level3);
34004 Pa_Debug.WRITE(g_pkg_name,'p_fp_task_version_id'||':'||p_fp_task_version_id,
34005 l_debug_level3);
34006 Pa_Debug.WRITE(g_pkg_name,'p_wp_task_id'||':'||p_wp_task_id,
34007 l_debug_level3);
34008 Pa_Debug.WRITE(g_pkg_name,'p_fp_task_id'||':'||p_fp_task_id,
34009 l_debug_level3);
34010 Pa_Debug.WRITE(g_pkg_name,'p_pm_wp_task_reference'||':'||p_pm_wp_task_reference,
34011 l_debug_level3);
34012 Pa_Debug.WRITE(g_pkg_name,'p_pm_fp_task_reference'||':'||p_pm_fp_task_reference,
34013 l_debug_level3);
34014 Pa_Debug.WRITE(g_pkg_name,'p_wp_structure_version_id'||':'||p_wp_structure_version_id,
34015 l_debug_level3);
34016 Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34017 l_debug_level3);
34018
34019 END IF;
34020 --Validate for input parameters
34021 IF l_debug_mode = 'Y' THEN
34022 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : DELETE_MAPPING : Validating Input parameters';
34023 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34024 l_debug_level3);
34025 END IF;
34026
34027 --If task ids or names are passed , then we need to derive task_version_ids to be used by the DELETE_MAPPING API.
34028
34029 --1. If Task version ids are null , start deriving task version id
34030 IF (
34031 (p_wp_task_version_id IS NULL OR p_wp_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34032 AND
34033 (p_fp_task_version_id IS NULL OR p_fp_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34034 )
34035 THEN
34036 --1.0 Get the project id
34037 IF (
34038 ( p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34039 AND
34040 ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34041 )
34042 THEN
34043
34044 PA_PROJECT_PVT.Convert_pm_projref_to_id (
34045 p_pm_project_reference => p_proj_source_reference
34046 , p_pa_project_id => p_project_id
34047 , p_out_project_id => l_project_id
34048 , p_return_status => x_return_status
34049 );
34050
34051 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34052 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34053 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34054 RAISE FND_API.G_EXC_ERROR;
34055 END IF;
34056 ELSE
34057 l_project_id := p_project_id;
34058 END IF;
34059
34060 IF p_debug_mode = 'Y' THEN
34061 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'DELETE_MAPPING'||'Project ID:'||l_project_id;
34062 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34063 END IF;
34064 --1.1 Get the task ids if these are null
34065 --WP TASK ID
34066 IF( (p_wp_task_id IS NULL OR p_wp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34067 AND
34068 (p_pm_wp_task_reference IS NOT NULL AND p_pm_wp_task_reference <>PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34069 )
34070 THEN
34071 --get the task id from task reference
34072 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all(
34073 p_pa_project_id => l_project_id
34074 ,p_structure_type => 'WORKPLAN'
34075 ,p_pm_task_reference => p_pm_wp_task_reference
34076 ,p_out_task_id => l_wp_task_id
34077 ,p_return_status => l_return_status);
34078
34079 x_return_status := l_return_status;
34080 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
34081 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34082 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
34083 RAISE FND_API.G_EXC_ERROR;
34084 END IF;
34085
34086 ELSE
34087 l_wp_task_id := p_wp_task_id;
34088 END IF;
34089 --FP TASK ID
34090 IF(
34091 (p_fp_task_id IS NULL OR p_fp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34092 AND
34093 (p_pm_fp_task_reference IS NOT NULL AND p_pm_fp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34094 )
34095 THEN
34096 --get the task id from task reference
34097 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all(
34098 p_pa_project_id => l_project_id
34099 ,p_structure_type => 'FINANCIAL'
34100 ,p_pm_task_reference => p_pm_fp_task_reference
34101 ,p_out_task_id => l_fp_task_id
34102 ,p_return_status => l_return_status);
34103 x_return_status := l_return_status;
34104 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
34105 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34106 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
34107 RAISE FND_API.G_EXC_ERROR;
34108 END IF;
34109 ELSE
34110 l_fp_task_id := p_fp_task_id;
34111 END IF;
34112 --1.2 Get the task version ids
34113 --1.2.1 get the wp structure version id
34114 IF (
34115 l_wp_task_id IS NOT NULL
34116 AND ( p_wp_structure_version_id IS NULL OR p_wp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34117 )
34118 THEN
34119
34120 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
34121 l_wp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
34122 IF (l_wp_structure_version_id = -1 OR l_wp_structure_version_id = NULL)
34123 THEN
34124 l_wp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
34125 END IF;
34126 END IF;
34127 ELSIF(p_wp_structure_version_id IS NOT NULL AND p_wp_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34128 THEN
34129 l_wp_structure_version_id :=p_wp_structure_version_id;
34130 END IF;
34131 --1.2.1.1 get the l_wp_task_version_id
34132 l_wp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
34133 (
34134 p_structure_version_id => l_wp_structure_version_id
34135 , p_task_id => l_wp_task_id
34136 );
34137
34138 --1.2.2 get the fp task version id, as there will be only one structure version for financial
34139 IF (l_fp_task_id IS NOT NULL) THEN
34140 open cur_get_fin_task_version_id (l_project_id, l_fp_task_id);
34141 fetch cur_get_fin_task_version_id into l_fp_task_version_id;
34142 close cur_get_fin_task_version_id ;
34143 END IF;
34144
34145
34146 ELSE
34147 l_wp_task_version_id := p_wp_task_version_id;
34148 l_fp_task_version_id := p_fp_task_version_id;
34149 END IF;
34150
34151
34152 --Calling Delete Mapping
34153 PA_PROJ_STRUC_MAPPING_PUB.DELETE_MAPPING
34154 (
34155 p_api_version => p_api_version
34156 , p_init_msg_list => FND_API.G_FALSE
34157 , p_commit => FND_API.G_FALSE--bug 3766967
34158 , p_debug_mode => p_debug_mode
34159 , p_wp_task_version_id => l_wp_task_version_id
34160 , p_fp_task_version_id => l_fp_task_version_id
34161 , p_calling_module => 'AMG' -- Bug 4142254
34162 , x_return_status => x_return_status
34163 , x_msg_count => l_msg_count
34164 , x_msg_data => l_msg_data
34165 );
34166 x_msg_count := l_msg_count;
34167 x_msg_data := l_msg_data;
34168
34169 IF p_debug_mode = 'Y' THEN
34170 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'DELETE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.DELETE_MAPPING:'||x_return_status;
34171 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34172 END IF;
34173
34174 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34175 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34176 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34177 RAISE FND_API.G_EXC_ERROR;
34178 END IF;
34179
34180 EXCEPTION
34181 WHEN FND_API.G_EXC_ERROR THEN
34182 ROLLBACK TO DELETE_MAPPING_PUB;
34183 x_return_status := FND_API.G_RET_STS_ERROR;
34184
34185 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34186 ROLLBACK TO DELETE_MAPPING_PUB;
34187 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34188
34189 WHEN OTHERS THEN
34190 ROLLBACK TO DELETE_MAPPING_PUB;
34191 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34192
34193 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
34194 FND_MSG_PUB.add_exc_msg
34195 ( p_pkg_name => G_PKG_NAME
34196 , p_procedure_name => l_api_name );
34197 END IF;
34198
34199 END Delete_Mapping ;
34200 --------------------------------------------------------------------------------
34201 --Name: Create_Mapping
34202 --Type: Procedure
34203 --Description: This procedure creates a Mapping for the passed Wkp Task Id and Financial Task Id
34204 -- This program can be called as per following:
34205 --mapped_task_id mapped_task_ref mapped_task_name wkp_task_id wkp_task_name wkp_task_reference wkp_structure_ver_id Status
34206 -- y N N y N N N Valid
34207 -- N N Y N Y N Y Valid
34208 -- N Y N N N Y N Valid
34209 --
34210 --Called subprograms: PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING
34211
34212 --History:
34213 -- 24-Mar-2004 Ritesg Created
34214 --
34215
34216 PROCEDURE create_mapping
34217 ( p_api_version IN NUMBER := 1.0
34218 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
34219 , p_commit IN VARCHAR2 := FND_API.G_TRUE
34220 , p_debug_mode IN VARCHAR2 := 'N'
34221 , px_mapped_task_id IN NUMBER
34222 , p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34223 , p_mapped_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34224 , p_wkp_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34225 , p_wkp_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34226 , p_wkp_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34227 , p_wkp_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34228 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34229 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34230 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34231 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
34232 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34233 )
34234
34235 IS
34236 l_project_id NUMBER;
34237
34238 l_wkp_task_id NUMBER;
34239 l_wkp_structure_version_id NUMBER;
34240 l_wkp_task_version_id NUMBER;
34241 l_wkp_task_name VARCHAR2(240);
34242
34243 l_mapped_task_id NUMBER;
34244 l_mapped_task_reference VARCHAR2(240);
34245 l_mapped_task_version_id NUMBER;
34246 l_mapped_task_name VARCHAR2(240);
34247
34248 l_msg_count NUMBER;
34249 l_msg_data VARCHAR2(2000);
34250 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_MAPPING';
34251
34252 l_debug_mode VARCHAR2(1);
34253 l_debug_level2 CONSTANT NUMBER := 2;
34254 l_debug_level3 CONSTANT NUMBER := 3;
34255 l_debug_level4 CONSTANT NUMBER := 4;
34256 l_debug_level5 CONSTANT NUMBER := 5;
34257
34258 --This cursor is based on assumption that a financial structure will have only one version in a project.
34259 CURSOR cur_get_mapped_task_version_id(p_project_id NUMBER, p_mapped_task_id NUMBER)
34260 is
34261 Select element_version_id
34262 from pa_proj_element_versions
34263 where proj_element_id = p_mapped_task_id
34264 and project_id = p_project_id
34265 and financial_task_flag = 'Y';
34266
34267 BEGIN
34268 -- Initialize the message table if requested.
34269 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
34270 FND_MSG_PUB.initialize;
34271 END IF;
34272
34273 IF (p_commit = FND_API.G_TRUE) THEN
34274 savepoint CREATE_MAPPING_PUB;
34275 END IF;
34276
34277 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34278 IF l_debug_mode = 'Y' THEN
34279 PA_DEBUG.set_curr_function( p_function => 'CREATE_MAPPING',
34280 p_debug_mode => l_debug_mode );
34281 END IF;
34282
34283 IF l_debug_mode = 'Y' THEN
34284 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : Printing Input parameters';
34285 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34286 l_debug_level3);
34287 Pa_Debug.WRITE(g_pkg_name,'px_mapped_task_id'||':'||px_mapped_task_id,
34288 l_debug_level3);
34289 Pa_Debug.WRITE(g_pkg_name,'p_mapped_task_name'||':'||p_mapped_task_name,
34290 l_debug_level3);
34291 Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_id'||':'||p_wkp_task_id,
34292 l_debug_level3);
34293 Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_name'||':'||p_wkp_task_name,
34294 l_debug_level3);
34295 Pa_Debug.WRITE(g_pkg_name,'p_wkp_structure_version_id'||':'||p_wkp_structure_version_id,
34296 l_debug_level3);
34297 Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34298 l_debug_level3);
34299 Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34300 l_debug_level3);
34301 END IF;
34302 --Validate for input parameters
34303 IF l_debug_mode = 'Y' THEN
34304 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : Validating Input parameters';
34305 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34306 l_debug_level3);
34307 END IF;
34308
34309 IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34310 AND
34311 (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34312 )
34313 THEN
34314 IF l_debug_mode = 'Y' THEN
34315 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving Project id should be passed';
34316 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34317 l_debug_level3);
34318 END IF;
34319 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34320 END IF;
34321
34322 IF (
34323 ( px_mapped_task_id IS NULL OR px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
34324 ( p_mapped_task_reference IS NULL OR p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
34325 ( p_mapped_task_name IS NULL OR p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34326 )
34327 THEN
34328 IF l_debug_mode = 'Y' THEN
34329 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving financial task version id should be passed';
34330 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34331 l_debug_level3);
34332 END IF;
34333 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34334 END IF;
34335
34336 IF (
34337 (p_wkp_task_id IS NULL OR p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) AND
34338 (p_wkp_task_reference IS NULL OR p_wkp_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR) AND
34339 (p_wkp_task_name IS NULL OR p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34340 )
34341 THEN
34342 IF l_debug_mode = 'Y' THEN
34343 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : CREATE_MAPPING : At least one of the parameters for deriving workplan task version id should be passed';
34344 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34345 l_debug_level3);
34346 END IF;
34347 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34348 END IF;
34349
34350
34351 -- Set API return status to success
34352 x_return_status := FND_API.G_RET_STS_SUCCESS;
34353
34354 IF p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34355 l_wkp_task_id := NULL;
34356 ELSE
34357 l_wkp_task_id := p_wkp_task_id;
34358 END IF;
34359
34360 IF px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34361 l_mapped_task_id := NULL;
34362 ELSE
34363 l_mapped_task_id := px_mapped_task_id;
34364 END IF;
34365
34366 IF p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34367 l_mapped_task_reference := NULL;
34368 ELSE
34369 l_mapped_task_reference := p_mapped_task_reference;
34370 END IF;
34371
34372 IF p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34373 l_wkp_task_name := NULL;
34374 ELSE
34375 l_wkp_task_name := p_wkp_task_name;
34376 END IF;
34377
34378 IF p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34379 l_mapped_task_name := NULL;
34380 ELSE
34381 l_mapped_task_name := p_mapped_task_name;
34382 END IF;
34383
34384 IF p_wkp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34385 l_wkp_structure_version_id := NULL;
34386 ELSE
34387 l_wkp_structure_version_id := p_wkp_structure_version_id;
34388 END IF;
34389
34390 IF p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34391 l_project_id := NULL;
34392 ELSE
34393 l_project_id := p_project_id;
34394 END IF;
34395
34396 -- Get the task and Project details based on source reference passed
34397 IF (
34398 p_project_id IS NULL
34399 AND ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34400 )
34401 THEN
34402 PA_PROJECT_PVT.Convert_pm_projref_to_id (
34403 p_pm_project_reference => p_proj_source_reference
34404 , p_pa_project_id => p_project_id
34405 , p_out_project_id => l_project_id
34406 , p_return_status => x_return_status
34407 );
34408 END IF;
34409
34410 IF p_debug_mode = 'Y' THEN
34411 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'Project ID:'||l_project_id;
34412 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34413 END IF;
34414
34415 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34416 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34417 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34418 RAISE FND_API.G_EXC_ERROR;
34419 END IF;
34420
34421 --Get the Wkp Task ID using Wkp Task Reference
34422 IF (
34423 (l_wkp_task_id IS NULL)
34424 AND
34425 (p_wkp_task_reference IS NOT NULL AND p_wkp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34426 )
34427 THEN
34428 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34429 p_pa_project_id => l_project_id
34430 , p_structure_type => 'WORKPLAN'
34431 , p_pm_task_reference => p_wkp_task_reference
34432 , p_out_task_id => l_wkp_task_id
34433 , p_return_status => x_return_status );
34434
34435 IF p_debug_mode = 'Y' THEN
34436 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'wkp_task_id:'||l_wkp_task_id;
34437 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34438 END IF;
34439
34440 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
34441 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34442 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
34443 RAISE FND_API.G_EXC_ERROR;
34444 END IF;
34445 END IF;
34446
34447 -- Get the mapped task Id based in mapped_task_reference
34448 IF ( l_mapped_task_id IS NULL
34449 AND
34450 l_mapped_task_reference IS NOT NULL
34451 )
34452 THEN
34453 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34454 p_pa_project_id => l_project_id
34455 , p_structure_type => 'FINANCIAL'
34456 , p_pm_task_reference => p_mapped_task_reference
34457 , p_out_task_id => l_mapped_task_id
34458 , p_return_status => x_return_status );
34459
34460 --Assign mapped task_id to px_mapped_task_id as it is in out parameter
34461 IF p_debug_mode = 'Y' THEN
34462 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'mapped_task_id:'||l_mapped_task_id;
34463 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34464 END IF;
34465 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
34466 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34467 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
34468 RAISE FND_API.G_EXC_ERROR;
34469 END IF;
34470 END IF;
34471 --Get the task version id from Wkp task Id
34472 -- Avoid this call if wkp task name and wkp task version ids are passed
34473 IF (l_wkp_task_id IS NOT NULL AND l_wkp_structure_version_id IS NULL ) THEN
34474
34475 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
34476 l_wkp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
34477 IF (l_wkp_structure_version_id = -1 OR l_wkp_structure_version_id = NULL)
34478 THEN
34479 l_wkp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
34480 END IF;
34481 END IF;
34482 END IF;
34483 l_wkp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
34484 (
34485 p_structure_version_id => l_wkp_structure_version_id
34486 , p_task_id => l_wkp_task_id
34487 );
34488
34489
34490 --Get the financial task version id from financial task id,
34491 IF (l_mapped_task_id IS NOT NULL) THEN
34492 open cur_get_mapped_task_version_id (l_project_id, l_mapped_task_id);
34493 fetch cur_get_mapped_task_version_id into l_mapped_task_version_id;
34494 close cur_get_mapped_task_version_id ;
34495 END IF;
34496 IF p_debug_mode = 'Y' THEN
34497 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'Before Calling PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING:';
34498 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34499 END IF;
34500
34501
34502 -- All other validations done in PA_DELIVERABLE_PUB.CREATE_DELIVERABLE
34503 -- call PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING here only
34504
34505 PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING
34506 (
34507 p_api_version => p_api_version
34508 , p_init_msg_list => FND_API.G_FALSE
34509 , p_calling_module => 'AMG'
34510 , p_commit => FND_API.G_FALSE--bug 3766967
34511 , p_debug_mode => p_debug_mode
34512 , p_wp_task_name => l_wkp_task_name
34513 , p_wp_task_version_id => l_wkp_task_version_id
34514 , p_parent_str_version_id => l_wkp_structure_version_id
34515 , p_fp_task_version_id => l_mapped_task_version_id
34516 , p_fp_task_name => l_mapped_task_name
34517 , p_project_id => l_project_id
34518 , x_return_status => x_return_status
34519 , x_msg_count => l_msg_count
34520 , x_msg_data => l_msg_data
34521 );
34522 x_msg_count := l_msg_count;
34523 x_msg_data := l_msg_data;
34524
34525 IF p_debug_mode = 'Y' THEN
34526 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'CREATE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.CREATE_MAPPING:'||x_return_status;
34527 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34528 END IF;
34529
34530 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34531 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34532 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34533 RAISE FND_API.G_EXC_ERROR;
34534 END IF;
34535
34536 EXCEPTION
34537 WHEN FND_API.G_EXC_ERROR THEN
34538 IF (p_commit = FND_API.G_TRUE) THEN
34539 ROLLBACK TO CREATE_MAPPING_PUB;
34540 END IF;
34541 x_return_status := FND_API.G_RET_STS_ERROR;
34542
34543 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34544 IF (p_commit = FND_API.G_TRUE) THEN
34545 ROLLBACK TO CREATE_MAPPING_PUB;
34546 END IF;
34547 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34548
34549 WHEN OTHERS THEN
34550 IF (p_commit = FND_API.G_TRUE) THEN
34551 ROLLBACK TO CREATE_MAPPING_PUB;
34552 END IF;
34553 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34554
34555 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
34556 FND_MSG_PUB.add_exc_msg
34557 ( p_pkg_name => G_PKG_NAME
34558 , p_procedure_name => l_api_name );
34559 END IF;
34560 END create_mapping;
34561 --------------------------------------------------------------------------------
34562 --Name: Update_Mapping
34563 --Type: Procedure
34564 --Description: This procedure creates a Mapping for the passed Wkp Task Id and Financial Task Id
34565 -- This program can be called as per following:
34566 --mapped_task_id mapped_task_ref mapped_task_name wkp_task_id wkp_task_name wkp_task_reference wkp_structure_ver_id Status
34567 -- y N N y N N N Valid
34568 -- N N Y N Y N Y Valid
34569 -- N Y N N N Y N Valid
34570 --
34571 --Called subprograms: PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34572
34573 --History:
34574 -- 24-Mar-2004 Ritesg Created
34575 --
34576
34577 PROCEDURE update_mapping
34578 ( p_api_version IN NUMBER := 1.0
34579 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
34580 , p_commit IN VARCHAR2 := FND_API.G_TRUE
34581 , p_debug_mode IN VARCHAR2 := 'N'
34582 , px_mapped_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34583 , p_mapped_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34584 , p_mapped_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34585 , p_wkp_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34586 , p_wkp_task_name IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34587 , p_wkp_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34588 , p_wkp_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34589 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34590 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34591 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34592 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
34593 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34594 )
34595
34596 IS
34597 l_project_id NUMBER;
34598
34599 l_wkp_task_id NUMBER;
34600 l_wkp_structure_version_id NUMBER;
34601 l_wkp_task_version_id NUMBER;
34602 l_wkp_task_name VARCHAR2(240);
34603
34604 l_mapped_task_id NUMBER;
34605 l_mapped_task_reference VARCHAR2(240);
34606 l_mapped_task_version_id NUMBER;
34607 l_mapped_task_name VARCHAR2(240);
34608
34609 l_msg_count NUMBER;
34610 l_msg_data VARCHAR2(2000);
34611 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_MAPPING';
34612
34613 l_return_status VARCHAR2(1);
34614 l_debug_mode VARCHAR2(1);
34615 l_debug_level2 CONSTANT NUMBER := 2;
34616 l_debug_level3 CONSTANT NUMBER := 3;
34617 l_debug_level4 CONSTANT NUMBER := 4;
34618 l_debug_level5 CONSTANT NUMBER := 5;
34619
34620 --This cursor is based on assumption that a financial structure will have only one version in a project.
34621 CURSOR cur_get_mapped_task_version_id(p_project_id NUMBER, p_mapped_task_id NUMBER)
34622 is
34623 Select element_version_id
34624 from pa_proj_element_versions
34625 where proj_element_id = p_mapped_task_id
34626 and project_id = p_project_id
34627 and financial_task_flag = 'Y';
34628
34629 BEGIN
34630 -- Initialize the message table if requested.
34631 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
34632 FND_MSG_PUB.initialize;
34633 END IF;
34634
34635 IF (p_commit = FND_API.G_TRUE) THEN
34636 savepoint UPDATE_MAPPING_PUB;
34637 END IF;
34638
34639 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34640 IF l_debug_mode = 'Y' THEN
34641 PA_DEBUG.set_curr_function( p_function => 'UPDATE_MAPPING',
34642 p_debug_mode => l_debug_mode );
34643 END IF;
34644
34645 IF l_debug_mode = 'Y' THEN
34646 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : Printing Input parameters';
34647 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34648 l_debug_level3);
34649 Pa_Debug.WRITE(g_pkg_name,'px_mapped_task_id'||':'||px_mapped_task_id,
34650 l_debug_level3);
34651 Pa_Debug.WRITE(g_pkg_name,'p_mapped_task_name'||':'||p_mapped_task_name,
34652 l_debug_level3);
34653 Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_id'||':'||p_wkp_task_id,
34654 l_debug_level3);
34655 Pa_Debug.WRITE(g_pkg_name,'p_wkp_task_name'||':'||p_wkp_task_name,
34656 l_debug_level3);
34657 Pa_Debug.WRITE(g_pkg_name,'p_wkp_structure_version_id'||':'||p_wkp_structure_version_id,
34658 l_debug_level3);
34659 Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34660 l_debug_level3);
34661 Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34662 l_debug_level3);
34663 END IF;
34664 --Validate for input parameters
34665 IF l_debug_mode = 'Y' THEN
34666 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : Validating Input parameters';
34667 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34668 l_debug_level3);
34669 END IF;
34670
34671 IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34672 AND
34673 (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34674 )
34675 THEN
34676 IF l_debug_mode = 'Y' THEN
34677 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : At least one of the parameters for deriving Project id should be passed';
34678 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34679 l_debug_level3);
34680 END IF;
34681 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34682 END IF;
34683
34684
34685 IF (
34686 (p_wkp_task_id IS NULL OR p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34687 AND
34688 (p_wkp_task_reference IS NULL OR p_wkp_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34689 AND
34690 ( p_wkp_task_name IS NULL OR p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34691 )
34692 THEN
34693 IF l_debug_mode = 'Y' THEN
34694 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : UPDATE_MAPPING : At least one of the parameters for deriving workplan task version id should be passed';
34695 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34696 l_debug_level3);
34697 END IF;
34698 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34699 END IF;
34700
34701
34702 -- Set API return status to success
34703 x_return_status := FND_API.G_RET_STS_SUCCESS;
34704
34705 IF p_wkp_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34706 l_wkp_task_id := NULL;
34707 ELSE
34708 l_wkp_task_id := p_wkp_task_id;
34709 END IF;
34710
34711 IF px_mapped_task_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34712 l_mapped_task_id := NULL;
34713 ELSE
34714 l_mapped_task_id := px_mapped_task_id;
34715 END IF;
34716
34717 IF p_mapped_task_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34718 l_mapped_task_reference := NULL;
34719 ELSE
34720 l_mapped_task_reference := p_mapped_task_reference;
34721 END IF;
34722
34723 IF p_wkp_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34724 l_wkp_task_name := NULL;
34725 ELSE
34726 l_wkp_task_name := p_wkp_task_name;
34727 END IF;
34728
34729 IF p_mapped_task_name = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR THEN
34730 l_mapped_task_name := NULL;
34731 ELSE
34732 l_mapped_task_name := p_mapped_task_name;
34733 END IF;
34734
34735 IF p_wkp_structure_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34736 l_wkp_structure_version_id := NULL;
34737 ELSE
34738 l_wkp_structure_version_id := p_wkp_structure_version_id;
34739 END IF;
34740
34741 IF p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
34742 l_project_id := NULL;
34743 ELSE
34744 l_project_id := p_project_id;
34745 END IF;
34746 -- Get the task and Project details based on source reference passed
34747 IF (
34748 ( p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM )
34749 AND
34750 ( p_proj_source_reference IS NOT NULL AND p_proj_source_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR )
34751 )
34752 THEN
34753 PA_PROJECT_PVT.Convert_pm_projref_to_id (
34754 p_pm_project_reference => p_proj_source_reference
34755 , p_pa_project_id => p_project_id
34756 , p_out_project_id => l_project_id
34757 , p_return_status => x_return_status
34758 );
34759 END IF;
34760
34761 IF p_debug_mode = 'Y' THEN
34762 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'Project ID:'||l_project_id;
34763 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34764 END IF;
34765
34766 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34767 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34768 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34769 RAISE FND_API.G_EXC_ERROR;
34770 END IF;
34771 --Get the Wkp Task ID using Wkp Task Reference
34772 IF ( l_wkp_task_id IS NULL
34773 AND
34774 (p_wkp_task_reference IS NOT NULL AND p_wkp_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34775 )
34776 THEN
34777 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34778 p_pa_project_id => l_project_id
34779 , p_structure_type => 'WORKPLAN'
34780 , p_pm_task_reference => p_wkp_task_reference
34781 , p_out_task_id => l_wkp_task_id
34782 , p_return_status => x_return_status );
34783
34784 IF p_debug_mode = 'Y' THEN
34785 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'wkp_task_id:'||l_wkp_task_id;
34786 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34787 END IF;
34788
34789 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
34790 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34791 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
34792 RAISE FND_API.G_EXC_ERROR;
34793 END IF;
34794 END IF;
34795
34796 -- Get the mapped task Id based in mapped_task_reference
34797 IF ( l_mapped_task_id IS NULL
34798 AND
34799 (l_mapped_task_reference IS NOT NULL AND l_mapped_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
34800 )
34801 THEN
34802 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all (
34803 p_pa_project_id => l_project_id
34804 , p_structure_type => 'FINANCIAL'
34805 , p_pm_task_reference => p_mapped_task_reference
34806 , p_out_task_id => l_mapped_task_id
34807 , p_return_status => x_return_status );
34808
34809 IF p_debug_mode = 'Y' THEN
34810 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'mapped_task_id:'||l_mapped_task_id;
34811 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34812 END IF;
34813 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
34814 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34815 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
34816 RAISE FND_API.G_EXC_ERROR;
34817 END IF;
34818 END IF;
34819
34820 --Get the task version id from Wkp task Id
34821 -- Avoid this call if wkp task name and wkp task version ids are passed
34822 IF (l_wkp_task_id IS NOT NULL AND l_wkp_structure_version_id IS NULL ) THEN
34823 IF (PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS(l_project_id) = 'Y') THEN
34824 l_wkp_structure_version_id := PA_PROJ_ELEMENTS_UTILS.LATEST_PUBLISHED_VER_ID(l_project_id, 'WORKPLAN');
34825 IF (l_wkp_structure_version_id IS NULL OR l_wkp_structure_version_id = -1) THEN
34826 l_wkp_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.get_current_working_ver_id(l_project_id);
34827 END IF;
34828 END IF;
34829 END IF;
34830 l_wkp_task_version_id := PA_PROJ_ELEMENTS_UTILS.GET_TASK_VERSION_ID
34831 (
34832 p_structure_version_id => l_wkp_structure_version_id
34833 , p_task_id => l_wkp_task_id
34834 );
34835 --Get the financial task version id from financial task id,
34836 IF (l_mapped_task_id IS NOT NULL) THEN
34837 open cur_get_mapped_task_version_id (l_project_id, l_mapped_task_id);
34838 fetch cur_get_mapped_task_version_id into l_mapped_task_version_id;
34839 close cur_get_mapped_task_version_id ;
34840
34841 END IF;
34842
34843 IF p_debug_mode = 'Y' THEN
34844 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'Before Calling PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING:';
34845 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34846 END IF;
34847
34848
34849 -- All other validations done in PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34850 -- call PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING here only
34851
34852 PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING
34853 (
34854 p_api_version => p_api_version
34855 , p_calling_module => 'AMG'
34856 , p_init_msg_list => FND_API.G_FALSE
34857 , p_commit => FND_API.G_FALSE--bug 3766967
34858 , p_debug_mode => p_debug_mode
34859 , p_project_id => l_project_id
34860 , p_wp_task_name => l_wkp_task_name
34861 , p_wp_prnt_str_ver_id => l_wkp_structure_version_id
34862 , p_wp_task_version_id => l_wkp_task_version_id
34863 , p_fp_task_name => l_mapped_task_name
34864 , p_fp_task_version_id => l_mapped_task_version_id
34865 , x_return_status => l_return_status
34866 , x_msg_count => x_msg_count
34867 , x_msg_data => x_msg_data
34868 );
34869
34870 x_msg_count := l_msg_count;
34871 x_msg_data := l_msg_data;
34872
34873 IF p_debug_mode = 'Y' THEN
34874 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'UPDATE_MAPPING'||'After Calling PA_PROJ_STRUC_MAPPING_PUB.UPDATE_MAPPING:'||x_return_status;
34875 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
34876 END IF;
34877
34878 -- 10053423
34879 IF l_debug_mode = 'Y' THEN
34880 pa_debug.reset_curr_function;
34881 pa_debug.write(g_pkg_name, l_api_name || ': Exiting succesfully', 5);
34882 END IF;
34883
34884 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
34885 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
34886 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
34887 RAISE FND_API.G_EXC_ERROR;
34888 END IF;
34889
34890 EXCEPTION
34891 WHEN FND_API.G_EXC_ERROR THEN
34892 IF (p_commit = FND_API.G_TRUE) THEN
34893 ROLLBACK TO UPDATE_MAPPING_PUB;
34894 END IF;
34895 x_return_status := FND_API.G_RET_STS_ERROR;
34896 -- Bug 10053423
34897 IF l_debug_mode = 'Y' THEN
34898 pa_debug.reset_curr_function;
34899 pa_debug.write(g_pkg_name, l_api_name || ': Inside G_EXC_ERROR exception', 5);
34900 END IF;
34901
34902 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
34903 IF (p_commit = FND_API.G_TRUE) THEN
34904 ROLLBACK TO UPDATE_MAPPING_PUB;
34905 END IF;
34906 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34907 -- Bug 10053423
34908 IF l_debug_mode = 'Y' THEN
34909 pa_debug.reset_curr_function;
34910 pa_debug.write(g_pkg_name, l_api_name || ': Inside G_EXC_UNEXPECTED_ERROR exception', 5);
34911 END IF;
34912
34913 WHEN OTHERS THEN
34914 IF (p_commit = FND_API.G_TRUE) THEN
34915 ROLLBACK TO UPDATE_MAPPING_PUB;
34916 END IF;
34917 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
34918 -- Bug 10053423
34919 IF l_debug_mode = 'Y' THEN
34920 pa_debug.reset_curr_function;
34921 pa_debug.write(g_pkg_name, l_api_name || ': Inside OTHERS exception', 5);
34922 END IF;
34923
34924 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
34925 FND_MSG_PUB.add_exc_msg
34926 ( p_pkg_name => G_PKG_NAME
34927 , p_procedure_name => l_api_name );
34928 END IF;
34929 END UPDATE_MAPPING;
34930 --------------------------------------------------------------------------------
34931 --Name: process_tasks_table
34932 --Type: Procedure
34933
34934 --History:
34935 -- 24-Mar-2004 Ritesh Created
34936 --
34937
34938 PROCEDURE process_tasks_table
34939 ( p_api_version IN NUMBER := 1.0
34940 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
34941 , p_debug_mode IN VARCHAR2 := 'N'
34942 , p_structure_type IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34943 , p_tasks_in_tbl IN OUT NOCOPY task_in_tbl_type /*Added the nocopy check for 4537865 */
34944 -- , p_tasks_out_tbl OUT task_in_tbl_type
34945 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
34946 , p_proj_source_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
34947 , x_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34948 , x_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
34949 , x_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
34950 )
34951
34952 IS
34953 l_project_id NUMBER;
34954 l_proj_share_type VARCHAR2(240);
34955 iCounter NUMBER := 0;
34956 last_financial_flag VARCHAR2(1) := NULL;
34957 last_wbs_level NUMBER := -1;
34958 l_task_rec task_in_rec_type;
34959 l_msg_count NUMBER;
34960 l_msg_data VARCHAR2(2000);
34961 l_api_name CONSTANT VARCHAR2(30) := 'PROCESS_TASK_TABLE';
34962
34963 l_return_status VARCHAR2(1);
34964 l_debug_mode VARCHAR2(1);
34965 l_debug_level2 CONSTANT NUMBER := 2;
34966 l_debug_level3 CONSTANT NUMBER := 3;
34967 l_debug_level4 CONSTANT NUMBER := 4;
34968 l_debug_level5 CONSTANT NUMBER := 5;
34969
34970 BEGIN
34971 --Initialize the message table if requested.
34972 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
34973 FND_MSG_PUB.initialize;
34974 END IF;
34975
34976 l_debug_mode := NVL(FND_PROFILE.value('PA_DEBUG_MODE'),'N');
34977 IF l_debug_mode = 'Y' THEN
34978 PA_DEBUG.set_curr_function( p_function => 'PROCESS_TASK_TABLE',
34979 p_debug_mode => l_debug_mode );
34980 END IF;
34981
34982 IF l_debug_mode = 'Y' THEN
34983 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Printing Input parameters';
34984 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34985 l_debug_level3);
34986 Pa_Debug.WRITE(g_pkg_name,'p_project_id'||':'||p_project_id,
34987 l_debug_level3);
34988 Pa_Debug.WRITE(g_pkg_name,'p_proj_source_reference'||':'||p_proj_source_reference,
34989 l_debug_level3);
34990 END IF;
34991 --Validate for input parameters
34992 IF l_debug_mode = 'Y' THEN
34993 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Validating Input parameters';
34994 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
34995 l_debug_level3);
34996 END IF;
34997
34998 IF ( (p_project_id IS NULL OR p_project_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
34999 AND
35000 (p_proj_source_reference IS NULL OR p_proj_source_reference = PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)
35001 )
35002 THEN
35003 IF l_debug_mode = 'Y' THEN
35004 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : At least one of the parameters for deriving Project id should be passed';
35005 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
35006 l_debug_level3);
35007 END IF;
35008 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35009 END IF;
35010
35011 IF ( p_tasks_in_tbl IS NULL OR p_tasks_in_tbl.count <= 0 )
35012 THEN
35013 IF l_debug_mode = 'Y' THEN
35014 Pa_Debug.g_err_stage:= 'PA_PROJECTS_PUB : PROCESS_TASK_TABLE : Empty or NULL Task Table';
35015 Pa_Debug.WRITE(g_pkg_name,Pa_Debug.g_err_stage,
35016 l_debug_level3);
35017 END IF;
35018 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35019 END IF;
35020
35021
35022
35023 -- Set API return status to success
35024 x_return_status := FND_API.G_RET_STS_SUCCESS;
35025
35026
35027 -- Get the task and Project details based on source reference passed
35028 IF (p_project_id IS NULL AND p_proj_source_reference IS NOT NULL ) THEN
35029 PA_PROJECT_PVT.Convert_pm_projref_to_id (
35030 p_pm_project_reference => p_proj_source_reference
35031 , p_pa_project_id => p_project_id
35032 , p_out_project_id => l_project_id
35033 , p_return_status => x_return_status
35034 );
35035 END IF;
35036
35037 IF p_debug_mode = 'Y' THEN
35038 pa_debug.g_err_stage := 'PA_PROJECTS_PUB:'||'PROCESS_TASK_TABLE'||'Project ID:'||l_project_id;
35039 pa_debug.write(g_pkg_name,pa_debug.g_err_stage,3);
35040 END IF;
35041
35042 IF (x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35043 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35044 ELSIF (x_return_status = FND_API.G_RET_STS_ERROR) THEN
35045 RAISE FND_API.G_EXC_ERROR;
35046 END IF;
35047 -- Get the project sharing type
35048 l_proj_share_type := PA_PROJ_TASK_STRUC_PUB.GET_SHARE_TYPE(l_project_id);
35049 IF (l_proj_share_type = 'SHARE_PARTIAL' and p_structure_type = 'FINANCIAL')
35050 THEN
35051 FOR iCounter IN REVERSE p_tasks_in_tbl.FIRST..p_tasks_in_tbl.LAST LOOP
35052 l_task_rec := p_tasks_in_tbl(iCounter);
35053
35054 IF (iCounter <> p_tasks_in_tbl.LAST OR last_wbs_level <> 1)
35055 THEN
35056 --If not the summary task and not at the same level as the last task, set flag as 'Y', if lower task is 'Y'
35057 IF (l_task_rec.wbs_level <> last_wbs_level )
35058 THEN
35059 l_task_rec.financial_task_flag := last_financial_flag;
35060 END IF;
35061
35062 END IF;
35063
35064 IF (l_task_rec.financial_task_flag IS NOT NULL)
35065 THEN
35066 IF(
35067 l_task_rec.wbs_level = last_wbs_level
35068 and
35069 last_financial_flag = 'Y'
35070 and
35071 l_task_rec.financial_task_flag = 'N'
35072 )
35073 THEN
35074 NULL;
35075 ELSE
35076 last_financial_flag := l_task_rec.financial_task_flag;
35077 END IF;
35078 ELSE
35079 last_financial_flag := 'N';
35080 END IF;
35081
35082 last_wbs_level := l_task_rec.wbs_level;
35083 --p_tasks_out_tbl(iCounter):= l_task_rec;
35084 END LOOP;
35085
35086 END IF;
35087
35088 EXCEPTION
35089 WHEN FND_API.G_EXC_ERROR THEN
35090
35091 x_return_status := FND_API.G_RET_STS_ERROR;
35092
35093 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35094
35095 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35096
35097 WHEN OTHERS THEN
35098
35099 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35100
35101 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35102 FND_MSG_PUB.add_exc_msg
35103 ( p_pkg_name => G_PKG_NAME
35104 , p_procedure_name => l_api_name );
35105 END IF;
35106 END process_tasks_table;
35107 --End Add by rtarway for FP.M Development
35108
35109 --added by hsiu
35110 --
35111 PROCEDURE Create_Dependency(
35112 p_api_version_number IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35113 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
35114 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
35115 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
35116 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35117 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35118 ,p_pm_product_code IN VARCHAR2
35119 ,p_pm_project_reference IN VARCHAR2
35120 ,p_pa_project_id IN NUMBER
35121 ,p_structure_version_id IN NUMBER
35122 ,p_pm_task_reference IN VARCHAR2
35123 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35124 ,p_pm_pred_reference IN VARCHAR2
35125 ,p_pa_pred_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35126 ,p_type IN VARCHAR2 := 'FS'
35127 ,p_lag_days IN NUMBER := 0
35128 ,p_comments IN VARCHAR2 := NULL
35129 )
35130 IS
35131 l_msg_count NUMBER;
35132 l_msg_data VARCHAR2(250);
35133 l_return_status VARCHAR2(1);
35134 l_project_id NUMBER;
35135 l_task_ver_id NUMBER;
35136 l_pred_ver_id NUMBER;
35137 l_template_flag VARCHAR2(1);
35138 l_wp_status VARCHAR2(150);
35139 l_versioning VARCHAR2(1);
35140
35141 -- CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER) --Bug 3735799
35142 CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2) --Bug 3735799
35143 IS
35144 select ppev.element_version_id
35145 from pa_proj_elements ppe, pa_proj_element_versions ppev
35146 where ppe.project_id = c_project_id
35147 and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
35148 and ppe.project_id = ppev.project_Id
35149 and ppe.proj_element_id = ppev.proj_element_id
35150 and ppev.parent_structure_version_id = p_structure_version_id;
35151
35152 CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER) --Bug 3880403
35153 IS
35154 select ppev.element_version_id
35155 from pa_proj_elements ppe, pa_proj_element_versions ppev
35156 where ppe.project_id = c_project_id
35157 and ppe.proj_element_id = c_task_id
35158 and ppe.project_id = ppev.project_Id
35159 and ppe.proj_element_id = ppev.proj_element_id
35160 and ppev.parent_structure_version_id = p_structure_version_id;
35161
35162 CURSOR get_template_flag(c_project_id NUMBER)
35163 IS
35164 select template_flag
35165 from pa_projects_all
35166 where project_id = c_project_id;
35167
35168 CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
35169 IS
35170 select STATUS_CODE
35171 from pa_proj_elem_ver_structure
35172 where project_id = c_project_id
35173 and element_version_id = c_structure_version_id;
35174 BEGIN
35175 savepoint create_dep_pub_amg;
35176
35177 IF FND_API.TO_BOOLEAN( p_init_msg_list )
35178 THEN
35179 FND_MSG_PUB.Initialize;
35180 END IF;
35181
35182 --get project id
35183 PA_PROJECT_PVT.Convert_pm_projref_to_id
35184 ( p_pm_project_reference => p_pm_project_reference
35185 , p_pa_project_id => p_pa_project_id
35186 , p_out_project_id => l_project_id
35187 , p_return_status => l_return_status
35188 );
35189
35190 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35191 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35192 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35193 RAISE FND_API.G_EXC_ERROR;
35194 END IF;
35195 --
35196 --Bug 3768875
35197 If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
35198 If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
35199 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35200 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35201 RAISE FND_API.G_EXC_ERROR;
35202 End If;
35203 Else
35204 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35205 p_msg_name => 'PA_INV_PROJECT_ID');
35206 RAISE FND_API.G_EXC_ERROR;
35207 End If;
35208 --
35209 --check if structure version can be modified
35210 OPEN get_template_flag(l_project_id);
35211 FETCH get_template_flag into l_template_flag;
35212 CLOSE get_template_flag;
35213
35214 l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
35215
35216 --if template, then ok
35217 IF l_template_flag = 'N' THEN
35218 --project, check if versioning is enabled
35219 -- ok if versioning is disabled
35220 IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
35221 -- if versioning enabled, ok if working
35222 OPEN get_workplan_status(l_project_id, p_structure_version_id);
35223 FETCH get_workplan_status into l_wp_status;
35224 CLOSE get_workplan_status;
35225 IF l_wp_status <> 'STRUCTURE_WORKING' THEN
35226 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35227 p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
35228 RAISE FND_API.G_EXC_ERROR;
35229 END IF;
35230 ELSE
35231 IF (l_versioning IS NULL) THEN
35232 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35233 p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
35234 RAISE FND_API.G_EXC_ERROR;
35235 END IF;
35236 END IF;
35237 END IF;
35238
35239 --get task id
35240 IF (p_pm_task_reference IS NOT NULL) THEN
35241 open get_task_ver_id(l_project_id, p_pm_task_reference);
35242 Fetch get_task_ver_id into l_task_ver_id;
35243 -- Bug 3768875
35244 IF get_task_ver_id%NOTFOUND THEN
35245 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35246 p_msg_name => 'PA_PS_INV_TASK_ID');
35247 CLOSE get_task_ver_id;
35248 RAISE FND_API.G_EXC_ERROR;
35249 END IF;
35250 CLOSE get_task_ver_id;
35251 END IF;
35252
35253 --bug 3880403
35254 IF (p_pm_task_reference IS NULL OR l_task_ver_id IS NULL) THEN
35255 --need to get id using task id
35256 OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
35257 FETCH get_task_Ver_id2 into l_task_ver_id;
35258 IF get_task_ver_id2%NOTFOUND THEN
35259 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35260 p_msg_name => 'PA_PS_INV_TASK_ID');
35261 CLOSE get_task_ver_id2;
35262 RAISE FND_API.G_EXC_ERROR;
35263 END IF;
35264 CLOSE get_task_ver_id2;
35265 END IF;
35266 --end bug 3880403
35267 --
35268 --get predecessor id
35269 IF (p_pm_pred_reference IS NOT NULL) THEN
35270 open get_task_ver_id(l_project_id, p_pm_pred_reference);
35271 Fetch get_task_ver_id into l_pred_ver_id;
35272 --Bug 3768875
35273 IF get_task_ver_id%NOTFOUND THEN
35274 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35275 p_msg_name => 'PA_PS_INV_TASK_ID');
35276 CLOSE get_task_ver_id;
35277 RAISE FND_API.G_EXC_ERROR;
35278 END IF;
35279 CLOSE get_task_ver_id;
35280 END IF;
35281
35282 --bug 3880403
35283 IF (p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL) THEN
35284 --need to get id using task id
35285 OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
35286 FETCH get_task_Ver_id2 into l_pred_ver_id;
35287 IF get_task_ver_id2%NOTFOUND THEN
35288 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35289 p_msg_name => 'PA_PS_INV_TASK_ID');
35290 CLOSE get_task_ver_id2;
35291 RAISE FND_API.G_EXC_ERROR;
35292 END IF;
35293 CLOSE get_task_ver_id2;
35294 END IF;
35295 --end bug 3880403
35296 --
35297 -- Bug 3768933 Validating the relationship_subtype
35298 -- Bug 8513869 - Replaced lookup type PA_OBJECT_DEPENDENCY_TYPES with PA_DEPENDENCY_TYPE
35299 IF PA_PROJ_ELEMENTS_UTILS.check_pa_lookup_exists('PA_DEPENDENCY_TYPE',p_type) <> 'Y' THEN
35300 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35301 p_msg_name => 'PA_PS_INV_REL_SUBTYPE_VAL');
35302 RAISE FND_API.G_EXC_ERROR;
35303 END IF;
35304 --
35305 --call existing create dependency API to create intra dependency
35306 PA_RELATIONSHIP_PVT.Create_Dependency(
35307 p_calling_module => 'SELF_SERVICE'
35308 ,p_src_proj_id => l_project_id
35309 ,p_src_task_ver_id => l_task_ver_id
35310 ,p_dest_proj_id => l_project_id
35311 ,p_dest_task_ver_id => l_pred_ver_id
35312 ,p_type => p_type
35313 ,p_lag_days => p_lag_days
35314 ,p_comments => p_comments
35315 ,x_return_status => p_return_status
35316 ,x_msg_count => p_msg_count
35317 ,x_msg_data => p_msg_data
35318 );
35319
35320 IF p_msg_count > 0 THEN
35321 RAISE FND_API.G_EXC_ERROR;
35322 END IF;
35323
35324 p_return_status := FND_API.G_RET_STS_SUCCESS;
35325
35326 EXCEPTION
35327 WHEN FND_API.G_EXC_ERROR THEN
35328 ROLLBACK TO create_dep_pub_amg;
35329 p_return_status := FND_API.G_RET_STS_ERROR;
35330
35331 -- Begin fix for Bug # 4323969.
35332
35333 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35334 , p_data => p_msg_data);
35335
35336 -- End fix for Bug # 4323969.
35337
35338 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35339 ROLLBACK TO create_dep_pub_amg;
35340 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35341
35342 -- Begin fix for Bug # 4323969.
35343
35344 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35345 , p_data => p_msg_data);
35346
35347 -- End fix for Bug # 4323969.
35348
35349 When OTHERS then
35350 ROLLBACK TO create_dep_pub_amg;
35351 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35352
35353 -- Begin fix for Bug # 4323969.
35354
35355 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35356 , p_data => p_msg_data);
35357
35358 -- End fix for Bug # 4323969.
35359
35360 END Create_Dependency;
35361
35362
35363
35364 PROCEDURE Update_Dependency(
35365 p_api_version_number IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35366 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
35367 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
35368 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
35369 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35370 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35371 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35372 ,p_pm_project_reference IN VARCHAR2
35373 ,p_pa_project_id IN NUMBER
35374 ,p_structure_version_id IN NUMBER
35375 ,p_pm_task_reference IN VARCHAR2
35376 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35377 ,p_pm_pred_reference IN VARCHAR2
35378 ,p_pa_pred_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35379 ,p_type IN VARCHAR2 := 'FS'
35380 ,p_lag_days IN NUMBER := 0
35381 ,p_comments IN VARCHAR2 := NULL
35382 )
35383 IS
35384 l_return_status VARCHAR2(1);
35385 l_project_id NUMBER;
35386 l_task_ver_id NUMBER;
35387 l_pred_ver_id NUMBER;
35388 l_template_flag VARCHAR2(1);
35389 l_wp_status VARCHAR2(150);
35390 l_versioning VARCHAR2(1);
35391 l_record_version_number NUMBER;
35392
35393 -- CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER) --Bug 3735799
35394 CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2) --Bug 3735799
35395 IS
35396 select ppev.element_version_id
35397 from pa_proj_elements ppe, pa_proj_element_versions ppev
35398 where ppe.project_id = c_project_id
35399 and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
35400 and ppe.project_id = ppev.project_Id
35401 and ppe.proj_element_id = ppev.proj_element_id
35402 and ppev.parent_structure_version_id = p_structure_version_id;
35403
35404 CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER) --Bug 3880403
35405 IS
35406 select ppev.element_version_id
35407 from pa_proj_elements ppe, pa_proj_element_versions ppev
35408 where ppe.project_id = c_project_id
35409 and ppe.proj_element_id = c_task_id
35410 and ppe.project_id = ppev.project_Id
35411 and ppe.proj_element_id = ppev.proj_element_id
35412 and ppev.parent_structure_version_id = p_structure_version_id;
35413
35414 CURSOR get_template_flag(c_project_id NUMBER)
35415 IS
35416 select template_flag
35417 from pa_projects_all
35418 where project_id = c_project_id;
35419
35420 CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
35421 IS
35422 select STATUS_CODE
35423 from pa_proj_elem_ver_structure
35424 where project_id = c_project_id
35425 and element_version_id = c_structure_version_id;
35426
35427 CURSOR get_rvn(c_id_from NUMBER, c_id_to NUMBER) IS
35428 SELECT record_version_number
35429 FROM pa_object_relationships
35430 WHERE object_id_to1 = c_id_to
35431 AND object_id_from1 = c_id_from
35432 AND relationship_type = 'D';
35433 BEGIN
35434 savepoint update_dep_pub_amg;
35435
35436 IF FND_API.TO_BOOLEAN( p_init_msg_list )
35437 THEN
35438 FND_MSG_PUB.Initialize;
35439 END IF;
35440
35441 --get project id
35442 PA_PROJECT_PVT.Convert_pm_projref_to_id
35443 ( p_pm_project_reference => p_pm_project_reference
35444 , p_pa_project_id => p_pa_project_id
35445 , p_out_project_id => l_project_id
35446 , p_return_status => l_return_status
35447 );
35448
35449 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35450 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35451 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35452 RAISE FND_API.G_EXC_ERROR;
35453 END IF;
35454 --
35455 --Bug 3769089
35456 If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
35457 If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
35458 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35459 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35460
35461 RAISE FND_API.G_EXC_ERROR;
35462 End If;
35463 Else
35464 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35465 p_msg_name => 'PA_INV_PROJECT_ID');
35466 RAISE FND_API.G_EXC_ERROR;
35467 End If;
35468 --
35469 --
35470 --check if structure version can be modified
35471 OPEN get_template_flag(l_project_id);
35472 FETCH get_template_flag into l_template_flag;
35473 CLOSE get_template_flag;
35474
35475 l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
35476
35477 --if template, then ok
35478 IF l_template_flag = 'N' THEN
35479 --project, check if versioning is enabled
35480 -- ok if versioning is disabled
35481 IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
35482 -- if versioning enabled, ok if working
35483 OPEN get_workplan_status(l_project_id, p_structure_version_id);
35484 FETCH get_workplan_status into l_wp_status;
35485 CLOSE get_workplan_status;
35486 IF l_wp_status <> 'STRUCTURE_WORKING' THEN
35487 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35488 p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
35489 RAISE FND_API.G_EXC_ERROR;
35490 END IF;
35491 ELSE
35492 IF (l_versioning IS NULL) THEN
35493 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35494 p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
35495 RAISE FND_API.G_EXC_ERROR;
35496 END IF;
35497 END IF;
35498 END IF;
35499
35500 --get task id
35501 IF p_pm_task_reference IS NOT NULL THEN
35502 open get_task_ver_id(l_project_id, p_pm_task_reference);
35503 Fetch get_task_ver_id into l_task_ver_id;
35504 --Bug 3769089
35505 IF get_task_ver_id%NOTFOUND THEN
35506 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35507 p_msg_name => 'PA_PS_INV_TASK_ID');
35508 CLOSE get_task_ver_id;
35509 RAISE FND_API.G_EXC_ERROR;
35510 END IF;
35511 CLOSE get_task_ver_id;
35512 END IF;
35513
35514 --bug 3880403
35515 IF p_pm_task_reference IS NULL OR l_task_ver_id IS NULL THEN
35516 --need to get id using task id
35517 OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
35518 FETCH get_task_Ver_id2 into l_task_ver_id;
35519 IF get_task_ver_id2%NOTFOUND THEN
35520 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35521 p_msg_name => 'PA_PS_INV_TASK_ID');
35522 CLOSE get_task_ver_id2;
35523 RAISE FND_API.G_EXC_ERROR;
35524 END IF;
35525 CLOSE get_task_ver_id2;
35526 END IF;
35527 --end bug 3880403
35528
35529
35530 --get predecessor id
35531 IF (p_pm_pred_reference IS NOT NULL) THEN
35532 open get_task_ver_id(l_project_id, p_pm_pred_reference);
35533 Fetch get_task_ver_id into l_pred_ver_id;
35534 --Bug 3769089
35535 IF get_task_ver_id%NOTFOUND THEN
35536 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35537 p_msg_name => 'PA_PS_INV_TASK_ID');
35538 CLOSE get_task_ver_id;
35539 RAISE FND_API.G_EXC_ERROR;
35540 END IF;
35541 CLOSE get_task_ver_id;
35542 END IF;
35543
35544 --bug 3880403
35545 IF p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL THEN
35546 --need to get id using task id
35547 OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
35548 FETCH get_task_Ver_id2 into l_pred_ver_id;
35549 IF get_task_ver_id2%NOTFOUND THEN
35550 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35551 p_msg_name => 'PA_PS_INV_TASK_ID');
35552 CLOSE get_task_ver_id2;
35553 RAISE FND_API.G_EXC_ERROR;
35554 END IF;
35555 CLOSE get_task_ver_id2;
35556 END IF;
35557 --end bug 3880403
35558
35559 --
35560 --get record version number
35561 open get_rvn(l_task_ver_id, l_pred_ver_id);
35562 FETCH get_rvn into l_record_version_number;
35563 --Bug 3769047
35564 IF get_rvn%NOTFOUND THEN
35565 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35566 p_msg_name => 'PA_PS_INV_DEP_ID');
35567 RAISE FND_API.G_EXC_ERROR;
35568 END IF;
35569 CLOSE get_rvn;
35570 --
35571 --call existing update dependency API to create intra dependency
35572 PA_RELATIONSHIP_PVT.Update_Dependency(
35573 p_calling_module => 'SELF_SERVICE'
35574 ,p_task_version_id => l_pred_ver_id
35575 ,p_src_task_version_id => l_task_ver_id
35576 ,p_type => p_type
35577 ,p_lag_days => p_lag_days
35578 ,p_comments => p_comments
35579 ,p_record_version_number => l_record_version_number
35580 ,x_return_status => p_return_status
35581 ,x_msg_count => p_msg_count
35582 ,x_msg_data => p_msg_data
35583 );
35584
35585 IF p_msg_count > 0 THEN
35586 RAISE FND_API.G_EXC_ERROR;
35587 END IF;
35588
35589 p_return_status := FND_API.G_RET_STS_SUCCESS;
35590
35591 EXCEPTION
35592 WHEN FND_API.G_EXC_ERROR THEN
35593 ROLLBACK TO update_dep_pub_amg;
35594 p_return_status := FND_API.G_RET_STS_ERROR;
35595
35596 -- 4537865 Included same fix as 4323969.
35597 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35598 , p_data => p_msg_data);
35599
35600 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35601 ROLLBACK TO update_dep_pub_amg;
35602 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35603
35604 -- 4537865 : Included same fix as 4323969.
35605 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35606 , p_data => p_msg_data);
35607
35608 When OTHERS then
35609 ROLLBACK TO update_dep_pub_amg;
35610 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35611 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35612
35613 FND_MSG_PUB.add_exc_msg
35614 (p_pkg_name => G_PKG_NAME
35615 , p_procedure_name => 'Update_Dependency');
35616
35617 END IF;
35618 -- 4537865 : Included same fix as 4323969.
35619 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35620 , p_data => p_msg_data);
35621 END Update_Dependency;
35622
35623
35624
35625 PROCEDURE Delete_Dependency(
35626 p_api_version_number IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35627 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
35628 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
35629 ,p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
35630 ,p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35631 ,p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35632 ,p_pm_product_code IN VARCHAR2
35633 ,p_pm_project_reference IN VARCHAR2
35634 ,p_pa_project_id IN NUMBER
35635 ,p_structure_version_id IN NUMBER
35636 ,p_pm_task_reference IN VARCHAR2
35637 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35638 ,p_pm_pred_reference IN VARCHAR2
35639 ,p_pa_pred_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35640 )
35641 IS
35642 l_msg_count NUMBER;
35643 l_msg_data VARCHAR2(250);
35644 l_return_status VARCHAR2(1);
35645 l_project_id NUMBER;
35646 l_task_ver_id NUMBER;
35647 l_pred_ver_id NUMBER;
35648 l_template_flag VARCHAR2(1);
35649 l_wp_status VARCHAR2(150);
35650 l_versioning VARCHAR2(1);
35651 l_record_version_number NUMBER;
35652 l_obj_rel_id NUMBER;
35653
35654 -- CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference NUMBER) --Bug 3735799
35655 CURSOR get_task_ver_id(c_project_id NUMBER, c_pm_task_reference VARCHAR2) --Bug 3735799
35656 IS
35657 select ppev.element_version_id
35658 from pa_proj_elements ppe, pa_proj_element_versions ppev
35659 where ppe.project_id = c_project_id
35660 and ppe.PM_SOURCE_REFERENCE = c_pm_task_reference
35661 and ppe.project_id = ppev.project_Id
35662 and ppe.proj_element_id = ppev.proj_element_id
35663 and ppev.parent_structure_version_id = p_structure_version_id;
35664
35665 CURSOR get_task_ver_id2(c_project_id NUMBER, c_task_id NUMBER) --Bug 3880403
35666 IS
35667 select ppev.element_version_id
35668 from pa_proj_elements ppe, pa_proj_element_versions ppev
35669 where ppe.project_id = c_project_id
35670 and ppe.proj_element_id = c_task_id
35671 and ppe.project_id = ppev.project_Id
35672 and ppe.proj_element_id = ppev.proj_element_id
35673 and ppev.parent_structure_version_id = p_structure_version_id;
35674
35675 CURSOR get_template_flag(c_project_id NUMBER)
35676 IS
35677 select template_flag
35678 from pa_projects_all
35679 where project_id = c_project_id;
35680
35681 CURSOR get_workplan_status(c_project_id NUMBER, c_structure_version_id NUMBER)
35682 IS
35683 select STATUS_CODE
35684 from pa_proj_elem_ver_structure
35685 where project_id = c_project_id
35686 and element_version_id = c_structure_version_id;
35687
35688 CURSOR get_rvn(c_id_from NUMBER, c_id_to NUMBER) IS
35689 SELECT object_relationship_id, record_version_number
35690 FROM pa_object_relationships
35691 WHERE object_id_to1 = c_id_to
35692 AND object_id_from1 = c_id_from
35693 AND relationship_type = 'D';
35694 BEGIN
35695 savepoint delete_dep_pub_amg;
35696
35697 IF FND_API.TO_BOOLEAN( p_init_msg_list )
35698 THEN
35699 FND_MSG_PUB.Initialize;
35700 END IF;
35701
35702 --get project id
35703 PA_PROJECT_PVT.Convert_pm_projref_to_id
35704 ( p_pm_project_reference => p_pm_project_reference
35705 , p_pa_project_id => p_pa_project_id
35706 , p_out_project_id => l_project_id
35707 , p_return_status => l_return_status
35708 );
35709
35710 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
35711 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
35712 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
35713 RAISE FND_API.G_EXC_ERROR;
35714 END IF;
35715 --
35716 --Bug 3769079
35717 If PA_PROJECT_STRUCTURE_UTILS.Check_Project_exists(l_project_id) = 'Y' Then
35718 If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id,p_structure_version_id) <> 'Y' THEN
35719 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35720 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
35721 RAISE FND_API.G_EXC_ERROR;
35722 End If;
35723 Else
35724 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35725 p_msg_name => 'PA_INV_PROJECT_ID');
35726 RAISE FND_API.G_EXC_ERROR;
35727 End If;
35728 --
35729 --
35730 --check if structure version can be modified
35731 OPEN get_template_flag(l_project_id);
35732 FETCH get_template_flag into l_template_flag;
35733 CLOSE get_template_flag;
35734
35735 l_versioning := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id);
35736
35737 --if template, then ok
35738 IF l_template_flag = 'N' THEN
35739 --project, check if versioning is enabled
35740 -- ok if versioning is disabled
35741 IF (l_versioning IS NOT NULL and l_versioning = 'Y') THEN
35742 -- if versioning enabled, ok if working
35743 OPEN get_workplan_status(l_project_id, p_structure_version_id);
35744 FETCH get_workplan_status into l_wp_status;
35745 CLOSE get_workplan_status;
35746 IF l_wp_status <> 'STRUCTURE_WORKING' THEN
35747 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35748 p_msg_name => 'PA_UPDATE_PUB_VER_ERR');
35749 RAISE FND_API.G_EXC_ERROR;
35750 END IF;
35751 ELSE
35752 IF (l_versioning IS NULL) THEN
35753 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35754 p_msg_name => 'PA_PS_WORKPLAN_DISABLED');
35755 RAISE FND_API.G_EXC_ERROR;
35756 END IF;
35757 END IF;
35758 END IF;
35759
35760 --get task id
35761 IF (p_pm_task_reference IS NOT NULL) THEN
35762 open get_task_ver_id(l_project_id, p_pm_task_reference);
35763 Fetch get_task_ver_id into l_task_ver_id;
35764 --Bug 3769079
35765 IF get_task_ver_id%NOTFOUND THEN
35766 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35767 p_msg_name => 'PA_PS_INV_TASK_ID');
35768 CLOSE get_task_ver_id;
35769 RAISE FND_API.G_EXC_ERROR;
35770 END IF;
35771 CLOSE get_task_ver_id;
35772 END IF;
35773
35774 --bug 3880403
35775 IF p_pm_task_reference IS NULL OR l_task_ver_id IS NULL THEN
35776 --need to get id using task id
35777 OPEN get_task_ver_id2(l_project_id, p_pa_task_id);
35778 FETCH get_task_Ver_id2 into l_task_ver_id;
35779 IF get_task_ver_id2%NOTFOUND THEN
35780 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35781 p_msg_name => 'PA_PS_INV_TASK_ID');
35782 CLOSE get_task_ver_id2;
35783 RAISE FND_API.G_EXC_ERROR;
35784 END IF;
35785 CLOSE get_task_ver_id2;
35786 END IF;
35787 --end bug 3880403
35788 --
35789 --get predecessor id
35790 IF (p_pm_pred_reference IS NOT NULL) THEN
35791 open get_task_ver_id(l_project_id, p_pm_pred_reference);
35792 Fetch get_task_ver_id into l_pred_ver_id;
35793 --Bug 3769079
35794 IF get_task_ver_id%NOTFOUND THEN
35795 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35796 p_msg_name => 'PA_PS_INV_TASK_ID');
35797 CLOSE get_task_ver_id;
35798 RAISE FND_API.G_EXC_ERROR;
35799 END IF;
35800 CLOSE get_task_ver_id;
35801 END IF;
35802
35803 --bug 3880403
35804 IF p_pm_pred_reference IS NULL OR l_pred_ver_id IS NULL THEN
35805 --need to get id using task id
35806 OPEN get_task_ver_id2(l_project_id, p_pa_pred_id);
35807 FETCH get_task_Ver_id2 into l_pred_ver_id;
35808 IF get_task_ver_id2%NOTFOUND THEN
35809 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35810 p_msg_name => 'PA_PS_INV_TASK_ID');
35811 CLOSE get_task_ver_id2;
35812 RAISE FND_API.G_EXC_ERROR;
35813 END IF;
35814 CLOSE get_task_ver_id2;
35815 END IF;
35816 --end bug 3880403
35817
35818
35819 --call existing delete dependency API to create intra dependency
35820 --get record version number
35821 open get_rvn(l_task_ver_id, l_pred_ver_id);
35822 FETCH get_rvn into l_obj_rel_id, l_record_version_number;
35823 --Bug 3769066
35824 IF get_rvn%NOTFOUND THEN
35825 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
35826 p_msg_name => 'PA_PS_INV_DEP_ID');
35827 RAISE FND_API.G_EXC_ERROR;
35828 END IF;
35829 CLOSE get_rvn;
35830
35831 PA_RELATIONSHIP_PVT.Delete_Dependency(
35832 p_calling_module => 'SELF_SERVICE'
35833 ,p_object_relationship_id => l_obj_rel_id
35834 ,x_return_status => l_return_status
35835 ,x_msg_count => l_msg_count
35836 ,x_msg_data => l_msg_data
35837 );
35838
35839 -- 4537865 : Check has to be made against l_msg_count ,not p_msg_count
35840 -- IF p_msg_count > 0 THEN
35841 IF l_msg_count > 0 THEN
35842 RAISE FND_API.G_EXC_ERROR;
35843 END IF;
35844
35845 p_return_status := FND_API.G_RET_STS_SUCCESS;
35846 EXCEPTION
35847
35848 WHEN FND_API.G_EXC_ERROR THEN
35849 ROLLBACK TO delete_dep_pub_amg;
35850 p_return_status := FND_API.G_RET_STS_ERROR;
35851 -- 4537865 Included same fix as 4323969.
35852 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35853 , p_data => p_msg_data);
35854 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
35855 ROLLBACK TO delete_dep_pub_amg;
35856 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35857 -- 4537865 Included same fix as 4323969.
35858 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35859 , p_data => p_msg_data);
35860 When OTHERS then
35861 ROLLBACK TO delete_dep_pub_amg;
35862 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
35863
35864 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
35865
35866 FND_MSG_PUB.add_exc_msg
35867 (p_pkg_name => G_PKG_NAME
35868 , p_procedure_name => 'Delete_Dependency');
35869
35870 END IF;
35871 -- 4537865 Included same fix as 4323969.
35872 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
35873 , p_data => p_msg_data);
35874
35875 END Delete_Dependency;
35876 --
35877 --
35878 -- Begin fix for Bug # 4096218.
35879
35880 PROCEDURE check_task_mfd
35881 ( p_api_version_number IN NUMBER
35882 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
35883 , p_return_status OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35884 , p_msg_count OUT NOCOPY NUMBER /*Added the nocopy check for 4537865 */
35885 , p_msg_data OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35886 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35887 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35888 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35889 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
35890 , p_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
35891 , p_structure_type IN VARCHAR2 := 'FINANCIAL'
35892 , p_perform_check_delete_task_ok IN VARCHAR2 := 'N'
35893 , p_check_task_mfd_flag OUT NOCOPY VARCHAR2 /*Added the nocopy check for 4537865 */
35894 )
35895 IS
35896
35897 cursor cur_task_status(c_project_id NUMBER, c_task_id NUMBER, c_task_version_id NUMBER)
35898 is
35899 select task_unpub_ver_status_code,parent_structure_version_id
35900 from pa_proj_element_versions ppev
35901 where ppev.project_id = c_project_id
35902 and ppev.proj_element_id = c_task_id
35903 and ppev.element_version_id = c_task_version_id;
35904
35905 cursor c_valid_task_id(c_task_id NUMBER,c_project_id NUMBER)
35906 is
35907 select 'Y'
35908 from pa_proj_elements
35909 where proj_element_id = c_task_id
35910 and project_id = c_project_id ;
35911
35912 cursor get_task_ver_id(c_task_id NUMBER)
35913 is
35914 select element_version_id from pa_proj_element_versions
35915 where proj_element_id = c_task_id ;
35916
35917 -- Begin fix for Bug # 4096218 : 09-AUG-2005.
35918
35919 -- Modified cursor to return the element_number if the task exists
35920 -- in a published workplan structure version. This cursor will
35921 -- work for both split and shared projects.
35922 /*
35923
35924 CURSOR l_amg_task_csr
35925 (p_pa_task_id pa_tasks.task_id%type)
35926 IS
35927 SELECT task_number
35928 FROM pa_tasks p
35929 WHERE p.task_id = p_pa_task_id;
35930
35931 */
35932
35933 -- The Following cursor has been commented for Performance Bug 4878722 SQL ID 14909071
35934 -- The purpose of this cursor per usage in this API is to verify whether the task exists in any of the previously published versions
35935 -- cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35936 -- select ppe.element_number
35937 -- from pa_proj_elements ppe, pa_proj_elem_ver_structure ppevs
35938 -- where ppe.proj_element_id = p_pa_task_id
35939 -- and ppe.parent_structure_id = ppevs.proj_element_id
35940 -- and ppevs.status_code = 'STRUCTURE_PUBLISHED';
35941
35942 -- The Following cursor has been re-written for Performance Bug 4878722 SQL ID 14909071
35943
35944 /*
35945 Bug Fix 5263426
35946
35947 Issue:
35948
35949 After succesful deletion of a task and the publishing of the structure, a new task is added to the current working version.
35950 And that the task was deleted and the MSP was returning a message saying 'Mark this task for deletion?'. Ideally this
35951 should be used for tasks which are present in the published versions as well. Only those tasks will be marked for deletion
35952 and during publishing those marked tasks will be deleted. All the other tasks which dont have any transactions and are not
35953 present in the published versions should be deleted right away and the MSP should not show any message.
35954
35955 Analysis:
35956
35957 This is happening due to value 'M' being returned from the PA_PROJECT_PUB.check_task_mfd APIs OUT param p_check_task_mfd_flag.
35958 The reason is due to the bug in the cursor l_amg_task_csr.
35959 This SQL is starting with an element id i.e the task id and getting the parent sturcture id and looking for that parent
35960 structure id's published status in other tables.
35961
35962 Ideally this is ignoring the versions of a strucutre. Even if one structure version is published the above SQL will always
35963 find a record in the structures table with status published irrespective of the fact that the task was added to a working
35964 version and same is not in a published version.
35965
35966 Solution:
35967 The correct way of doing this is to get the task status directly from the element versions table itself as shown below
35968 and modify the logic to use the above column value.
35969
35970
35971 cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35972 select 1 from dual
35973 where exists (select ppe.element_number
35974 from pa_proj_elements ppe, pa_proj_elem_ver_structure ppevs
35975 where ppe.proj_element_id = p_pa_task_id
35976 and ppe.object_type = 'PA_TASKS'
35977 and ppe.parent_structure_id = ppevs.proj_element_id
35978 and ppe.project_id = ppevs.project_id
35979 and ppevs.status_code = 'STRUCTURE_PUBLISHED');
35980 */
35981
35982 cursor l_amg_task_csr (p_pa_task_id pa_tasks.task_id%type) is
35983 select 1 from dual
35984 where exists(
35985 select pev.task_unpub_ver_status_code
35986 from pa_proj_element_versions pev
35987 where pev.proj_element_id = p_pa_task_id
35988 and pev.object_type = 'PA_TASKS'
35989 and pev.task_unpub_ver_status_code in ('PUBLISHED','TO_BE_DELETED'));
35990 -- End fix for Bug 5263429
35991 -- End fix for Bug # 4096218 : 09-AUG-2005.
35992
35993 l_dummy varchar2(1);
35994 l_derive varchar2(1);
35995
35996 l_project_id NUMBER := NULL;
35997
35998 l_task_version_id NUMBER := NULL;
35999
36000 l_task_id NUMBER := NULL;
36001
36002 l_structure_version_id NUMBER := NULL;
36003
36004 l_task_status VARCHAR2(30) := NULL;
36005
36006 l_check_task_mfd_flag VARCHAR2(1) := NULL;
36007
36008 l_api_name CONSTANT VARCHAR2(30) := 'check_task_mfd';
36009
36010 l_return_status VARCHAR2(1) := NULL;
36011
36012 l_msg_count NUMBER := NULL; -- 4096218 : Issues found during Unit Testing
36013
36014 l_msg_data VARCHAR2(2000) := NULL; -- 4096218 : This was declared as size 30 ,causing unexpected error.Corrected it
36015
36016
36017 l_delete_task_ok_flag VARCHAR2(1);
36018
36019 l_wp_str_exists VARCHAR2(1);
36020
36021 l_versioning_enabled VARCHAR2(1);
36022
36023 l_pub_ver_exists VARCHAR2(1);
36024
36025 l_amg_task_number NUMBER; -- Datatype changed for Bug 4878722
36026 BEGIN
36027
36028 IF NOT FND_API.Compatible_API_Call (g_api_version_number
36029 , p_api_version_number
36030 , l_api_name
36031 , G_PKG_NAME) THEN
36032
36033 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36034
36035 END IF;
36036
36037 IF FND_API.TO_BOOLEAN(p_init_msg_list) THEN
36038
36039 FND_MSG_PUB.initialize;
36040
36041 END IF;
36042
36043 p_return_status := FND_API.G_RET_STS_SUCCESS;
36044
36045 -- Initialize output flag.
36046
36047 l_check_task_mfd_flag := 'N';
36048 l_delete_task_ok_flag := 'N';
36049 l_versioning_enabled := 'N' ;
36050 l_pub_ver_exists :='N' ;
36051
36052 -- Convert project reference to id.
36053
36054 PA_PROJECT_PVT.Convert_pm_projref_to_id
36055 (p_pm_project_reference => p_pm_project_reference
36056 , p_pa_project_id => p_project_id
36057 , p_out_project_id => l_project_id
36058 , p_return_status => l_return_status);
36059
36060 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36061
36062 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36063
36064 ELSIF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
36065
36066 RAISE FND_API.G_EXC_ERROR;
36067 END IF;
36068
36069 -- If task id is passed ,verify whether it is a valid value
36070 IF p_task_id IS NOT NULL AND p_task_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36071 THEN
36072
36073 open c_valid_task_id(p_task_id,l_project_id) ;
36074 fetch c_valid_task_id into l_dummy;
36075 close c_valid_task_id ;
36076
36077 IF nvl(l_dummy,'N') = 'Y' THEN
36078 l_task_id := p_task_id ;
36079 -- Task ID exists and its a valid one.
36080 ELSE
36081 -- Try to derive task_id from its reference
36082 l_derive := 'Y';
36083 END IF;
36084
36085 END IF;
36086
36087 IF (p_task_id is NULL AND p_pm_task_reference IS NOT NULL
36088 AND p_pm_task_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)
36089 OR nvl(l_derive,'N') = 'Y'
36090 THEN
36091 -- Convert task reference to id.
36092
36093 PA_PROJECT_PVT.Convert_pm_taskref_to_id_all
36094 (p_pa_project_id => l_project_id
36095 , p_pa_task_id => p_task_id
36096 , p_pm_task_reference => p_pm_task_reference
36097 , p_out_task_id => l_task_id
36098 , p_return_status => l_return_status);
36099
36100
36101 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36102
36103 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36104
36105 ELSIF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
36106
36107 RAISE FND_API.G_EXC_ERROR;
36108 END IF;
36109
36110 END IF;
36111 --get structure_version_id and task_version_id
36112
36113 PA_PROJ_TASK_STRUC_PUB.get_version_ids
36114 (p_task_id => l_task_id
36115 , p_task_version_id => p_task_version_id
36116 , p_project_id => l_project_id
36117 , x_structure_version_id => l_structure_version_id
36118 , x_task_version_id => l_task_version_id);
36119 --------------------------------------------------------------------------------------------------------------------------------
36120 -- If p_perform_check_delete_task_ok is "Y" , then we need to call the API
36121 -- pa_project_pub.Check_Delete_Task_OK
36122
36123 IF p_perform_check_delete_task_ok ='Y' THEN
36124 pa_project_pub.Check_Delete_Task_OK
36125 (
36126 p_api_version_number => p_api_version_number
36127 -- Start OUT params
36128 , p_return_status => l_return_status
36129 , p_msg_count => l_msg_count
36130 , p_msg_data => l_msg_data
36131 -- End OUT params
36132 , p_project_id => l_project_id
36133 , p_pm_project_reference => p_pm_project_reference
36134 , p_task_id => l_task_id
36135 , p_pm_task_reference => p_pm_task_reference
36136 , p_structure_type => p_structure_type
36137 , p_task_version_id => l_task_version_id
36138 , p_delete_task_ok_flag => l_delete_task_ok_flag -- OUT param
36139 );
36140 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
36141
36142 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36143
36144 /* Commented because of Issue found during Unit testing
36145 In Check_Delete_Task_OK ,already message has been retrieved and
36146 Hence ,If we raise again here ,In this API ,it wont be able to find any msg in stack now
36147 thereby returning empty message
36148
36149 The commented check corresponds to return status 'E' check .It will be 'E' if its nt
36150 allowed to delete the task. So, Just set the OUT params appropriately
36151 and return
36152
36153 ELSIF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
36154
36155 RAISE FND_API.G_EXC_ERROR;
36156 */
36157 END IF;
36158
36159 IF l_delete_task_ok_flag = 'N' THEN
36160
36161 -- Its not Ok to delete this task,so skip further steps and just return with 'N'
36162 l_check_task_mfd_flag := 'N';
36163
36164 ELSIF l_delete_task_ok_flag = 'Y' THEN
36165
36166 -- Its Ok to delete this task , Check whether it can be deleted immediately (l_check_task_mfd_flag = 'Y')
36167 -- (Or) it has to be marked for deletion. (l_check_task_mfd_flag = 'M')
36168
36169 open cur_task_status(l_project_id, l_task_id, l_task_version_id);
36170 fetch cur_task_status into l_task_status,l_structure_version_id;
36171 close cur_task_status;
36172
36173 open l_amg_task_csr(l_task_id );
36174 fetch l_amg_task_csr INTO l_amg_task_number;
36175 close l_amg_task_csr;
36176
36177 l_wp_str_exists := PA_PROJ_TASK_STRUC_PUB.WP_STR_EXISTS( p_project_id );
36178 l_versioning_enabled := PA_PROJ_TASK_STRUC_PUB.IS_WP_VERSIONING_ENABLED( l_project_id);
36179 l_pub_ver_exists := PA_PROJ_TASK_STRUC_PUB.Published_version_exists( l_project_id );
36180
36181 -- If this passed task belongs to a Split - Fin. Only structure
36182 IF nvl(l_wp_str_exists,'N') = 'N'
36183 AND (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id, 'FINANCIAL') = 'Y')
36184 THEN
36185 -- Its ok to delete this task
36186 l_check_task_mfd_flag := 'Y' ;
36187 -- Begin Bug 9480442
36188 -- Logic to handle the deletion of task from Financial Plans in a project that also contains WBS(NSTBM structure projects)
36189 ELSIF (PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id,'FINANCIAL') = 'Y') AND NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id),' ') = 'SPLIT_MAPPING'
36190 THEN
36191 l_check_task_mfd_flag := 'Y' ;
36192 -- End Bug 9480442
36193 -- If this passed task belongs to a WP structure (be it shared or be it split)
36194 ELSIF PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(l_structure_version_id,'WORKPLAN') = 'Y'
36195 THEN
36196 IF l_versioning_enabled = 'Y'
36197 AND l_pub_ver_exists = 'Y'
36198 THEN
36199 IF l_amg_task_number IS NULL -- It means ,task is only in current working version,not in any previous pub. versions
36200 THEN
36201 -- It can be deleted, there is no need to mark it for deletion.
36202 l_check_task_mfd_flag := 'Y';
36203 ELSE -- Task exists in prior published version and it has entry in pa_tasks.
36204 -- So, Mark it for deletion ,so that it can be deleted in publishing flow
36205
36206 /* This API call marks the task for deletion in OP
36207 PA_TASK_PVT1.update_task_ver_delete_status(
36208 p_task_version_id => p_task_version_id
36209 ,x_return_status => l_return_status
36210 ,x_msg_count => x_msg_count
36211 ,x_msg_data => x_msg_data);
36212 */
36213
36214 l_check_task_mfd_flag := 'M' ;
36215
36216 END IF;
36217 ELSIF l_versioning_enabled = 'Y' and l_pub_ver_exists = 'N'
36218 THEN
36219 -- Versioning Enabled , But there is no published version so far .So,This is the Working version
36220 -- So,its ok to delete this task.
36221 l_check_task_mfd_flag := 'Y';
36222 ELSIF l_versioning_enabled = 'N'
36223 THEN
36224 -- Versioning Disabled Case , Its ok to delete this task.
36225 l_check_task_mfd_flag := 'Y';
36226 END IF;
36227 END IF;
36228
36229 END IF; -- End If for l_delete_task_ok_flag = 'Y'
36230
36231 ELSE -- So, Now the case if p_perform_check_delete_task_ok ='N'
36232
36233 -- If this flag p_perform_check_delete_task_ok is passed as 'N' ,it means just we need to check
36234 -- whether task is marked for deletion or not in Oracle Projects.
36235 -- Return 'M' if marked for delete
36236
36237
36238 -- Check for task status.
36239
36240 open cur_task_status(l_project_id, l_task_id, l_task_version_id);
36241 fetch cur_task_status into l_task_status,l_structure_version_id;
36242 close cur_task_status;
36243
36244 if l_task_status = 'TO_BE_DELETED' then
36245
36246 l_check_task_mfd_flag := 'M';
36247 else
36248 l_check_task_mfd_flag := 'N';
36249 end if;
36250
36251 END IF;
36252 --------------------------------------------------------------------------------------------------------------------------------
36253 -- Set output variables.
36254
36255 p_check_task_mfd_flag := l_check_task_mfd_flag;
36256
36257 p_return_status := l_return_status;
36258 p_msg_count := l_msg_count;
36259 p_msg_data := l_msg_data;
36260
36261 EXCEPTION
36262
36263 WHEN FND_API.G_EXC_ERROR THEN
36264
36265 p_return_status := FND_API.G_RET_STS_ERROR;
36266
36267 -- 4537865
36268 p_check_task_mfd_flag := NULL ;
36269
36270 FND_MSG_PUB.Count_And_Get
36271 ( p_count => p_msg_count ,
36272 p_data => p_msg_data );
36273
36274 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
36275
36276 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36277
36278 -- 4537865
36279 p_check_task_mfd_flag := NULL ;
36280
36281 FND_MSG_PUB.Count_And_Get
36282 ( p_count => p_msg_count ,
36283 p_data => p_msg_data );
36284
36285 WHEN OTHERS THEN
36286
36287 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36288
36289 p_check_task_mfd_flag := NULL ; -- 4537865
36290
36291 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
36292
36293 FND_MSG_PUB.add_exc_msg
36294 (p_pkg_name => G_PKG_NAME
36295 , p_procedure_name => l_api_name);
36296
36297 END IF;
36298
36299 FND_MSG_PUB.Count_And_Get
36300 (p_count => p_msg_count
36301 , p_data => p_msg_data);
36302
36303 END check_task_mfd;
36304
36305
36306 -- API Name : get_deleted_tasks_from_op
36307 --
36308 -- Parameters :
36309 --
36310 -- x_deleted_task_ver_ids OUT PA_NUM_1000_NUM
36311 -- x_return_status OUT VARCHAR2
36312 -- x_msg_count OUT NUMBER
36313 -- x_msg_data OUT VARCHAR2
36314 --
36315 -- HISTORY
36316 -- Created by avaithia for Bug 4096218
36317 -- 29-Jun-2005 Changed out param name from x_deleted_task_ver_ids to x_deleted_task_ids
36318 -- Changed global var name from G_DELETED_TASK_VER_IDS_FROM_OP to G_DELETED_TASK_IDS_FROM_OP
36319 --
36320 -- Notes About the API :-
36321 -- This API is supposed to be calling only in AMG/MSP context.
36322 --
36323 -- This is not a standalone API .This API will produce useful output only if its called after WP publishing flow
36324 --
36325 -- We set the value for out param x_deleted_task_ver_ids in the global VARRAY PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP
36326 -- in the Publish_Structure API (PAXSTCVB.pls) ONLY if p_calling_module in that API is 'AMG'
36327
36328 PROCEDURE get_deleted_tasks_from_op
36329 (
36330 x_deleted_task_ids OUT NOCOPY PA_NUM_1000_NUM,/*4537865 : Added nocopy hint manually */
36331 x_return_status OUT NOCOPY VARCHAR2, /*4537865 : Added nocopy hint manually */
36332 x_msg_count OUT NOCOPY NUMBER, /*4537865 : Added nocopy hint manually */
36333 x_msg_data OUT NOCOPY VARCHAR2 /*4537865 : Added nocopy hint manually */
36334 )
36335 IS
36336 BEGIN
36337 x_msg_count := 0;
36338 x_return_status := FND_API.G_RET_STS_SUCCESS;
36339 x_msg_data := NULL;
36340 x_deleted_task_ids := PA_PROJECT_PUB.G_DELETED_TASK_IDS_FROM_OP;
36341 EXCEPTION
36342 WHEN OTHERS THEN
36343 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36344 IF FND_MSG_PUB.Check_Msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
36345
36346 FND_MSG_PUB.add_exc_msg
36347 (p_pkg_name => G_PKG_NAME
36348 , p_procedure_name => 'get_deleted_tasks_from_op');
36349
36350 END IF;
36351
36352 FND_MSG_PUB.Count_And_Get
36353 (p_count => x_msg_count
36354 , p_data => x_msg_data);
36355
36356 END get_deleted_tasks_from_op;
36357
36358 -- End fix for Bug # 4096218.
36359
36360
36361 -- -------------
36362 -- Bug 5436264 : AMG API FOR PROCESS STRUCTURE UPDATES
36363
36364 PROCEDURE process_structure_updates
36365 (p_api_version_number IN NUMBER := 1.0
36366 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
36367 , p_commit IN VARCHAR2 := FND_API.G_FALSE
36368 , p_return_status OUT NOCOPY VARCHAR2
36369 , p_msg_count OUT NOCOPY NUMBER
36370 , p_msg_data OUT NOCOPY VARCHAR2
36371 , p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36372 , p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36373 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36374 , p_process_mode IN VARCHAR2 := 'ONLINE'
36375 , p_calling_context IN VARCHAR2 := 'AMG')
36376 IS
36377
36378 l_api_name CONSTANT VARCHAR2(30) := 'process_structure_updates';
36379 l_msg_count NUMBER;
36380 l_msg_data VARCHAR2(2000);
36381 l_return_status VARCHAR2(1);
36382 l_responsibility_id NUMBER := 0;
36383 l_user_id NUMBER := 0;
36384 l_module_name VARCHAR2(80);
36385 l_function_allowed VARCHAR2(1);
36386
36387 l_project_id pa_projects.project_id%type;
36388
36389 l_update_wbs_flag VARCHAR2(1);
36390
36391 l_str_ver_id NUMBER:= null;
36392 l_conc_request_id NUMBER := null;
36393 l_message_name VARCHAR2(30) := null;
36394 l_message_type VARCHAR2(30) := null;
36395 l_process_code pa_proj_elem_ver_structure.process_code%TYPE; --Bug# 5973460
36396
36397 BEGIN
36398
36399 -- Standard begin of API savepoint
36400
36401 SAVEPOINT process_structure_updates;
36402
36403 -- Standard call to check for call compatibility
36404
36405 IF NOT FND_API.Compatible_API_Call ( g_api_version_number ,
36406 p_api_version_number ,
36407 l_api_name ,
36408 g_pkg_name )
36409 THEN
36410
36411 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36412
36413 END IF;
36414
36415 -- Initialize the message table if requested
36416
36417 IF FND_API.TO_BOOLEAN( p_init_msg_list )
36418 THEN
36419
36420 FND_MSG_PUB.initialize;
36421
36422 END IF;
36423
36424 -- Set API return status to success
36425
36426 p_return_status := FND_API.G_RET_STS_SUCCESS;
36427
36428
36429 -- Get the project ID
36430 -- Added if clause for Bug 6727014
36431 IF p_calling_context = 'CONC_WRP' then
36432
36433 l_project_id := p_pa_project_id;
36434
36435 ELSE
36436
36437 PA_PROJECT_PVT.Convert_pm_projref_to_id
36438 ( p_pm_project_reference => p_pm_project_reference
36439 , p_pa_project_id => p_pa_project_id
36440 , p_out_project_id => l_project_id
36441 , p_return_status => l_return_status
36442 );
36443
36444 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36445
36446 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36447
36448 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
36449
36450 RAISE FND_API.G_EXC_ERROR;
36451 END IF;
36452
36453 END IF;
36454
36455 If PA_PROJECT_STRUCTURE_UTILS.Check_Structure_Ver_Exists(l_project_id, p_structure_version_id) <> 'Y' THEN
36456 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
36457 p_msg_name => 'PA_INV_STRUCUTRE_VER_ID');
36458
36459 RAISE FND_API.G_EXC_ERROR;
36460 End If;
36461
36462 l_responsibility_id := FND_GLOBAL.Resp_id;
36463 l_user_id := FND_GLOBAL.User_id;
36464
36465
36466 -- As part of enforcing project security, which would determine
36467 -- whether the user has the necessary privileges to update the project
36468 -- need to call the pa_security package
36469
36470 pa_security.initialize (X_user_id => l_user_id,
36471 X_calling_module => l_module_name);
36472
36473 -- Actions performed using the APIs would be subject to
36474 -- function security. If the responsibility does not allow
36475 -- such functions to be executed, the API should not proceed further
36476 -- since the user does not have access to such functions
36477
36478 -- Function security procedure check whether user has the
36479 -- privilege to update the project or not
36480
36481 PA_INTERFACE_UTILS_PUB.G_PROJECT_ID := l_project_id;
36482
36483 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36484 (p_api_version_number => p_api_version_number,
36485 p_responsibility_id => l_responsibility_id,
36486 p_function_name => 'PA_PM_UPDATE_PROJECT',
36487 p_msg_count => l_msg_count,
36488 p_msg_data => l_msg_data,
36489 p_return_status => l_return_status,
36490 p_function_allowed => l_function_allowed);
36491
36492 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
36493 THEN
36494 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36495
36496 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
36497 THEN
36498 RAISE FND_API.G_EXC_ERROR;
36499
36500 END IF;
36501
36502 IF l_function_allowed = 'N' THEN
36503 pa_interface_utils_pub.map_new_amg_msg
36504 ( p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
36505 ,p_msg_attribute => 'CHANGE'
36506 ,p_resize_flag => 'Y'
36507 ,p_msg_context => 'GENERAL'
36508 ,p_attribute1 => ''
36509 ,p_attribute2 => ''
36510 ,p_attribute3 => ''
36511 ,p_attribute4 => ''
36512 ,p_attribute5 => '');
36513 p_return_status := FND_API.G_RET_STS_ERROR;
36514 RAISE FND_API.G_EXC_ERROR;
36515 END IF;
36516
36517 --Bug# 5973460
36518 l_process_code := PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_CODE(p_project_id => l_project_id
36519 ,p_structure_version_id => p_structure_version_id );
36520
36521 IF l_process_code = 'PUE'
36522 THEN
36523 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
36524 ,p_msg_name => 'PA_PS_PUBLISH_ERROR');
36525
36526 RAISE FND_API.G_EXC_ERROR;
36527 END IF;
36528 --Bug# 5973460
36529
36530 -- check the process_update_wbs_flag
36531
36532 l_update_wbs_flag := PA_PROJECT_STRUCTURE_UTILS.GET_UPDATE_WBS_FLAG(p_project_id => l_project_id
36533 ,p_structure_version_id => p_structure_version_id ) ;
36534
36535 IF nvl(l_update_wbs_flag,'N') = 'Y' THEN
36536
36537 PA_PROJECT_STRUCTURE_UTILS.GET_PROCESS_STATUS_MSG(
36538 p_project_id => l_project_id
36539 , p_structure_version_id => p_structure_version_id
36540 , p_context => 'UPDATE_AMG'
36541 , x_message_name => l_message_name
36542 , x_message_type => l_message_type
36543 , x_structure_version_id => l_str_ver_id
36544 , x_conc_request_id => l_conc_request_id);
36545
36546
36547 IF nvl(l_message_type,'NOT_PROCESS') <> 'PROCESS' THEN
36548
36549 IF p_process_mode = 'ONLINE' THEN
36550
36551 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES(p_calling_context => 'ONLINE_UPDATE'
36552 ,p_project_id => l_project_id
36553 ,p_structure_version_id => p_structure_version_id
36554 ,x_return_status => l_return_status
36555 ,x_msg_count => l_msg_count
36556 ,x_msg_data => l_msg_data ) ;
36557
36558 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
36559 THEN
36560 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36561 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
36562 THEN
36563 RAISE FND_API.G_EXC_ERROR;
36564 END IF;
36565
36566 ELSIF p_process_mode = 'CONCURRENT' THEN
36567
36568 PA_PROJ_TASK_STRUC_PUB.PROCESS_WBS_UPDATES_CONC_WRP(p_calling_context => 'CONC_UPDATE'
36569 ,p_project_id => l_project_id
36570 ,p_structure_version_id => p_structure_version_id
36571 ,x_return_status => l_return_status
36572 ,x_msg_count => l_msg_count
36573 ,x_msg_data => l_msg_data ) ;
36574
36575 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR
36576 THEN
36577 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36578 ELSIF l_return_status = FND_API.G_RET_STS_ERROR
36579 THEN
36580 RAISE FND_API.G_EXC_ERROR;
36581 END IF;
36582
36583 END IF ; -- p_process_mode
36584
36585 END IF ; -- l_message_type
36586
36587 END IF; -- l_update_wbs_flag
36588
36589 IF FND_API.to_boolean( p_commit )
36590 THEN
36591 COMMIT;
36592 END IF;
36593
36594 EXCEPTION
36595 WHEN FND_API.G_EXC_ERROR THEN
36596 p_return_status := FND_API.G_RET_STS_ERROR;
36597
36598 ROLLBACK TO process_structure_updates;
36599
36600 p_msg_count := l_msg_count;
36601 p_msg_data := l_msg_data;
36602
36603 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
36604 , p_data => p_msg_data);
36605
36606
36607 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
36608 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36609
36610 ROLLBACK TO process_structure_updates;
36611
36612 p_msg_count := l_msg_count;
36613 p_msg_data := l_msg_data;
36614
36615 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
36616 , p_data => p_msg_data);
36617
36618 WHEN OTHERS THEN
36619 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36620
36621 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
36622 FND_MSG_PUB.add_exc_msg
36623 (p_pkg_name => G_PKG_NAME
36624 ,p_procedure_name => l_api_name
36625 ,p_error_text => SUBSTRB(SQLERRM,1,120));
36626 END IF;
36627
36628 ROLLBACK TO process_structure_updates;
36629
36630 p_msg_count := fnd_msg_pub.count_msg;
36631 p_msg_data := SUBSTRB(SQLERRM,1,120);
36632
36633 FND_MSG_PUB.Count_And_Get(p_count => p_msg_count
36634 , p_data => p_msg_data);
36635
36636 END process_structure_updates;
36637 -- -------------
36638
36639
36640 -- Bug 6727014. Creating a wrapper on process_structure_updates to be used in new concurrent request
36641
36642 PROCEDURE process_structure_updates_wrp
36643 (errbuf OUT NOCOPY VARCHAR2
36644 , retcode OUT NOCOPY VARCHAR2
36645 , p_operating_unit IN VARCHAR2
36646 , p_project_num_from IN VARCHAR2
36647 , p_project_num_to IN VARCHAR2
36648 )
36649 is
36650
36651 CURSOR cur_get_structures IS
36652 select ppes.pev_structure_id
36653 ,ppes.project_id project_id
36654 ,ppes.element_version_id structure_version_id
36655 ,ppa.segment1 project_number
36656 ,ppes.name structure_name
36657 from pa_proj_elem_ver_structure ppes,
36658 pa_projects_all ppa
36659 where ppa.project_id = ppes.project_id
36660 and ppes.process_update_wbs_flag = 'Y'
36661 and NVL(ppes.process_code,'WUE') = 'WUE'
36662 and ppa.segment1 between nvl(p_project_num_from,ppa.segment1)
36663 and nvl(p_project_num_to,ppa.segment1)
36664 and nvl(ppa.org_id,-99) = nvl(p_operating_unit, nvl(org_id,-99))
36665 Order by 4,5;
36666
36667 l_msg_count NUMBER;
36668 l_msg_data VARCHAR2(2000);
36669 l_return_status VARCHAR2(1);
36670
36671 l_data VARCHAR2(2000);
36672 l_msg_index_out NUMBER;
36673 l_retcode NUMBER := 0;
36674
36675 l_status VARCHAR2(2000);
36676 l_exists VARCHAR2(1);
36677
36678 begin
36679 --Initializing global variable
36680
36681 -- Print the input parameter values
36682 fnd_file.put_line(1, '');
36683 fnd_file.put_line(1, '***********************************************');
36684 fnd_file.put_line(1, '* Process Structure Update Concurrent Program *');
36685 fnd_file.put_line(1, '***********************************************');
36686 fnd_file.put_line(1, '');
36687 fnd_file.put_line(1,'Parameters List ');
36688 fnd_file.put_line(1,'------------------------------------------------');
36689 fnd_file.put_line(1,'Operating Unit : '||p_operating_unit);
36690 fnd_file.put_line(1,'From Project Number : '||p_project_num_from);
36691 fnd_file.put_line(1,'To Project Number : '||p_project_num_to);
36692 fnd_file.put_line(1, '');
36693 fnd_file.put_line(1, '');
36694 fnd_file.put_line(1, 'List of Projects and Structures processed by the concurrent request and their Status');
36695 fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36696 fnd_file.put_line(1, 'Project Number Structure Name Status');
36697 fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36698
36699 For i in cur_get_structures loop
36700 l_return_status := 'S';
36701 l_msg_count := 0;
36702 l_msg_data := Null;
36703 l_status := 'Success';
36704 l_exists := NULL;
36705
36706 Begin
36707 -- the below query will use PA_PROJ_ELEM_VER_STRUCTURE_U1 index
36708 select 'X'
36709 into l_exists
36710 from pa_proj_elem_ver_structure ppes
36711 where ppes.process_update_wbs_flag = 'Y'
36712 and NVL(ppes.process_code,'WUE') = 'WUE'
36713 and ppes.pev_structure_id = i.pev_structure_id;
36714
36715 if nvl(l_exists,'Y') = 'X' Then
36716 PA_PROJECT_PUB.process_structure_updates
36717 ( p_api_version_number => 1.0
36718 , p_init_msg_list => FND_API.G_TRUE
36719 , p_commit => FND_API.G_FALSE
36720 , p_return_status => l_return_status
36721 , p_msg_count => l_msg_count
36722 , p_msg_data => l_msg_data
36723 , p_structure_version_id => i.structure_version_id
36724 , p_pa_project_id => i.project_id
36725 , p_pm_project_reference => PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36726 , p_process_mode => 'ONLINE'
36727 , p_calling_context => 'CONC_WRP');
36728
36729 IF (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
36730 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
36731 ELSIF (l_return_status = FND_API.G_RET_STS_ERROR) THEN
36732 RAISE FND_API.G_EXC_ERROR;
36733 ELSIF (l_return_status = FND_API.G_RET_STS_SUCCESS) THEN
36734 COMMIT;
36735 END IF;
36736
36737 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status);
36738 Else
36739 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||'A process is already running for this structure');
36740 End If;
36741
36742 EXCEPTION
36743 WHEN FND_API.G_EXC_ERROR THEN
36744 l_retcode := '1';
36745
36746 IF l_msg_count >= 1 THEN
36747 PA_INTERFACE_UTILS_PUB.get_messages
36748 (p_encoded => FND_API.G_FALSE
36749 ,p_msg_index => 1
36750 ,p_msg_count => l_msg_count
36751 ,p_msg_data => l_msg_data
36752 ,p_data => l_data
36753 ,p_msg_index_out => l_msg_index_out);
36754 errbuf := l_data;
36755 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36756 END IF;
36757 ROLLBACK;
36758
36759 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
36760 l_retcode := '1';
36761
36762 IF l_msg_count >= 1 THEN
36763 PA_INTERFACE_UTILS_PUB.get_messages
36764 (p_encoded => FND_API.G_FALSE
36765 ,p_msg_index => 1
36766 ,p_msg_count => l_msg_count
36767 ,p_msg_data => l_msg_data
36768 ,p_data => l_data
36769 ,p_msg_index_out => l_msg_index_out);
36770 errbuf := l_data;
36771 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36772 END IF;
36773 ROLLBACK;
36774
36775 WHEN OTHERS THEN
36776 l_retcode := '1';
36777 errbuf := SQLERRM;
36778 fnd_file.put_line(1, rpad(i.project_number,30,' ')||rpad(substrb(i.structure_name,1,60),65,' ')||l_return_status||' - '||errbuf);
36779 ROLLBACK;
36780
36781 end;
36782 end loop;
36783 fnd_file.put_line(1, '-----------------------------------------------------------------------------------------------------');
36784 fnd_file.put_line(1, '');
36785 fnd_file.put_line(1, '');
36786
36787 if l_retcode = 1 then
36788 retcode := '1';
36789 else
36790 retcode := '0';
36791 end if;
36792
36793
36794 exception
36795 when others then
36796 retcode := '2';
36797 errbuf := sqlerrm;
36798 return;
36799 End process_structure_updates_wrp;
36800
36801
36802 -- Bug # 5072032.
36803
36804 PROCEDURE SETUP_PROJECT_AS_PROGRAM
36805 (p_api_version IN NUMBER := 1.0
36806 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
36807 , p_commit IN VARCHAR2 := FND_API.G_FALSE
36808 , p_debug_mode IN VARCHAR2 := 'N'
36809 , p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36810 , p_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
36811 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36812 , p_sys_program_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36813 , p_allow_multi_program_rollup IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
36814 , x_return_status OUT NOCOPY VARCHAR2
36815 , x_msg_count OUT NOCOPY NUMBER
36816 , x_msg_data OUT NOCOPY VARCHAR2)
36817 is
36818
36819 l_api_name CONSTANT VARCHAR2(30) := 'SETUP_PRJ_AS_PGM';
36820
36821 l_pm_product_code VARCHAR2(2) := NULL;
36822 l_function_allowed VARCHAR2(1) := NULL;
36823
36824 l_project_id NUMBER := NULL;
36825 l_wp_enabled VARCHAR2(1) := NULL;
36826 l_fin_enabled VARCHAR2(1) := NULL;
36827 l_delv_enabled VARCHAR2(1) := NULL;
36828 l_share_code VARCHAR2(30) := null;
36829
36830 l_sys_program_flag VARCHAR2(1) := NULL;
36831 l_allow_multi_program_rollup VARCHAR2(1) := NULL;
36832
36833 cursor l_cur_sys_program_flag(c_project_id NUMBER) is
36834 select ppa.sys_program_flag
36835 from pa_projects_all ppa
36836 where ppa.project_id = c_project_id;
36837
36838 cursor l_cur_allow_multi_prog_rollup(c_project_id NUMBER) is
36839 select ppa.allow_multi_program_rollup
36840 from pa_projects_all ppa
36841 where ppa.project_id = c_project_id;
36842
36843 l_msg_index_out NUMBER := NULL;
36844 l_return_status VARCHAR2(1) := NULL;
36845 l_msg_count NUMBER := NULL;
36846 l_msg_data VARCHAR2(2000) := NULL;
36847
36848 begin
36849
36850 -- Establish the save point.
36851 savepoint SETUP_PROJECT_AS_PROGRAM_AMG;
36852
36853 -- Initialize the message table if requested.
36854 if FND_API.TO_BOOLEAN(p_init_msg_list) then
36855 FND_MSG_PUB.initialize;
36856 end if;
36857
36858 -- Standard call to check for API compatibility.
36859 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
36860 raise FND_API.G_EXC_UNEXPECTED_ERROR;
36861 end if;
36862
36863 -- Initialize the return status
36864 x_return_status := FND_API.G_RET_STS_SUCCESS;
36865
36866 -- Convert project reference to id.
36867 PA_PROJECT_PVT.Convert_pm_projref_to_id
36868 (p_pm_project_reference => p_pm_project_reference
36869 , p_pa_project_id => p_project_id
36870 , p_out_project_id => l_project_id
36871 , p_return_status => l_return_status);
36872
36873 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36874 raise FND_API.G_EXC_UNEXPECTED_ERROR;
36875 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36876 raise FND_API.G_EXC_ERROR;
36877 end if;
36878
36879 -- Get the current attributes of the project.
36880 l_wp_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_workplan_enabled(l_project_id);
36881 l_fin_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_financial_enabled(l_project_id);
36882 l_delv_enabled := PA_PROJECT_STRUCTURE_UTILS.Check_deliverable_enabled(l_project_id);
36883 l_share_code := PA_PROJECT_STRUCTURE_UTILS.Get_Structure_sharing_code(l_project_id);
36884
36885 -- Check if valid values are passed into the parameters: p_sys_program_flag, p_allow_multi_program_rollup, else use the current values.
36886 if ((p_sys_program_flag = 'Y') or (p_sys_program_flag = 'N')) then
36887 l_sys_program_flag := p_sys_program_flag;
36888 else
36889 open l_cur_sys_program_flag(l_project_id);
36890 fetch l_cur_sys_program_flag into l_sys_program_flag;
36891 close l_cur_sys_program_flag;
36892 end if;
36893
36894 if ((p_allow_multi_program_rollup = 'Y') or (p_allow_multi_program_rollup = 'N')) then
36895 l_allow_multi_program_rollup := p_allow_multi_program_rollup;
36896 else
36897 open l_cur_allow_multi_prog_rollup(l_project_id);
36898 fetch l_cur_allow_multi_prog_rollup into l_allow_multi_program_rollup;
36899 close l_cur_allow_multi_prog_rollup;
36900 end if;
36901
36902 -- Actions performed using the APIs are subject to function security.
36903 -- If the responsibility does not allow a function to be executed the API
36904 -- will error out as the user does not have access.
36905
36906 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
36907 (p_api_version_number => p_api_version
36908 , p_responsibility_id => FND_GLOBAL.RESP_ID
36909 , p_function_name => 'PA_PM_UPDATE_PROJECT'
36910 , p_msg_count => l_msg_count
36911 , p_msg_data => l_msg_data
36912 , p_return_status => l_return_status
36913 , p_function_allowed => l_function_allowed);
36914
36915 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36916 raise FND_API.G_EXC_UNEXPECTED_ERROR;
36917 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36918 raise FND_API.G_EXC_ERROR;
36919 end if;
36920
36921 if l_function_allowed = 'N' then
36922 pa_interface_utils_pub.map_new_amg_msg
36923 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
36924 , p_msg_attribute => 'CHANGE'
36925 , p_resize_flag => 'Y'
36926 , p_msg_context => 'GENERAL'
36927 , p_attribute1 => ''
36928 , p_attribute2 => ''
36929 , p_attribute3 => ''
36930 , p_attribute4 => ''
36931 , p_attribute5 => '');
36932 raise FND_API.G_EXC_ERROR;
36933 end if;
36934
36935 -- Call the API to setup the project as a program.
36936 PA_PROJECT_STRUCTURE_PUB1.UPDATE_STRUCTURES_SETUP_ATTR
36937 (p_api_version => p_api_version
36938 , p_init_msg_list => p_init_msg_list
36939 , p_commit => p_commit
36940 , p_calling_module => 'AMG'
36941 , p_debug_mode => p_debug_mode
36942 , p_max_msg_count => p_max_msg_count
36943 , p_project_id => l_project_id
36944 , p_workplan_enabled_flag => l_wp_enabled
36945 , p_financial_enabled_flag => l_fin_enabled
36946 , p_deliverables_enabled_flag => l_delv_enabled
36947 , p_sharing_option_code => l_share_code
36948 , p_sys_program_flag => l_sys_program_flag
36949 , p_allow_multi_prog_rollup => l_allow_multi_program_rollup
36950 , x_return_status => l_return_status
36951 , x_msg_count => l_msg_count
36952 , x_msg_data => l_msg_data);
36953
36954 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
36955 raise FND_API.G_EXC_UNEXPECTED_ERROR;
36956 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
36957 raise FND_API.G_EXC_ERROR;
36958 end if;
36959
36960 -- Commit if p_commit = FND_API.G_TRUE.
36961 if (p_commit = FND_API.G_TRUE) then
36962 commit;
36963 end if;
36964
36965 exception
36966
36967 when FND_API.G_EXC_ERROR then
36968 rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36969 x_return_status := FND_API.G_RET_STS_ERROR;
36970 x_msg_count := FND_MSG_PUB.count_msg;
36971
36972 if x_msg_count = 1 then
36973 PA_INTERFACE_UTILS_PUB.get_messages
36974 (p_encoded => FND_API.G_FALSE
36975 , p_msg_index => 1
36976 , p_msg_count => x_msg_count
36977 , p_msg_data => x_msg_data
36978 , p_data => x_msg_data
36979 , p_msg_index_out => l_msg_index_out);
36980 end if;
36981
36982 when FND_API.G_EXC_UNEXPECTED_ERROR then
36983 rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36984 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
36985 x_msg_count := FND_MSG_PUB.count_msg;
36986
36987 if x_msg_count = 1 then
36988 PA_INTERFACE_UTILS_PUB.get_messages
36989 (p_encoded => FND_API.G_FALSE
36990 , p_msg_index => 1
36991 , p_msg_count => x_msg_count
36992 , p_msg_data => x_msg_data
36993 , p_data => x_msg_data
36994 , p_msg_index_out => l_msg_index_out);
36995 end if;
36996
36997 when OTHERS then
36998 rollback to SETUP_PROJECT_AS_PROGRAM_AMG;
36999 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37000 x_msg_count := 1;
37001 x_msg_data := SQLERRM;
37002 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
37003 FND_MSG_PUB.add_exc_msg
37004 ( p_pkg_name => G_PKG_NAME
37005 , p_procedure_name => l_api_name);
37006 end if;
37007
37008 end SETUP_PROJECT_AS_PROGRAM;
37009
37010 PROCEDURE CREATE_PROGRAM_LINKS
37011 (p_api_version IN NUMBER := 1.0
37012 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
37013 , p_commit IN VARCHAR2 := FND_API.G_FALSE
37014 , p_debug_mode IN VARCHAR2 := 'N'
37015 , p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37016 , p_program_links_tbl IN PA_PROJECT_PUB.PROGRAM_LINKS_TBL_TYPE
37017 , x_return_status OUT NOCOPY VARCHAR2
37018 , x_msg_count OUT NOCOPY NUMBER
37019 , x_msg_data OUT NOCOPY VARCHAR2)
37020 is
37021
37022 l_api_name CONSTANT VARCHAR2(30) := 'CREATE_PROGRAM_LINKS';
37023
37024 l_pm_product_code VARCHAR2(2) := NULL;
37025 l_function_allowed VARCHAR2(1) := NULL;
37026
37027 l_count NUMBER := NULL;
37028 l_parent_project_id NUMBER := NULL;
37029 l_sub_project_id NUMBER := NULL;
37030 l_task_id NUMBER := NULL;
37031 l_task_id_out NUMBER := NULL;
37032 l_task_version_id NUMBER := NULL;
37033
37034 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
37035 select ppev.element_version_id
37036 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
37037 , pa_proj_structure_types ppst, pa_structure_types pst
37038 where ppevs.proj_element_id = ppst.proj_element_id
37039 and ppst.structure_type_id = pst.structure_type_id
37040 and ppev.project_id = ppevs.project_id
37041 and ppev.parent_structure_version_id = ppevs.element_version_id
37042 and ppevs.current_working_flag = 'Y'
37043 and ppev.proj_element_id = c_task_id
37044 and pst.structure_type = c_structure_type;
37045
37046 cursor l_cur_project_id1(c_task_id NUMBER) is
37047 select ppe.project_id
37048 from pa_proj_elements ppe
37049 where ppe.proj_element_id = c_task_id;
37050
37051 cursor l_cur_project_id2(c_task_version_id NUMBER) is
37052 select ppev.project_id, ppev.proj_element_id
37053 from pa_proj_element_versions ppev
37054 where ppev.element_version_id = c_task_version_id;
37055
37056 l_unexp_error_flag VARCHAR2(1) := 'N';
37057 l_exp_error_flag VARCHAR2(1) := 'N';
37058
37059 l_msg_index_out NUMBER := NULL;
37060 l_return_status VARCHAR2(1) := NULL;
37061 l_msg_count NUMBER := NULL;
37062 l_msg_data VARCHAR2(2000) := NULL;
37063
37064 cursor l_cur_prog_name (c_task_version_id NUMBER) is
37065 select ppa.name
37066 from pa_projects_all ppa, pa_proj_element_versions ppev
37067 where ppa.project_id = ppev.project_id
37068 and ppev.element_version_id = c_task_version_id;
37069
37070 cursor l_cur_prog_name2 (c_project_id NUMBER) is
37071 select ppa.name
37072 from pa_projects_all ppa
37073 where ppa.project_id = c_project_id;
37074
37075 cursor l_cur_proj_name (c_project_id NUMBER) is
37076 select ppa.name
37077 from pa_projects_all ppa
37078 where ppa.project_id = c_project_id;
37079
37080 cursor l_cur_task_name (c_task_ver_id NUMBER) is
37081 select ppe.name
37082 from pa_proj_elements ppe, pa_proj_element_versions ppev
37083 where ppe.project_id = ppev.project_id
37084 and ppe.proj_element_id = ppev.proj_element_id
37085 and ppev.element_version_id = c_task_ver_id;
37086
37087 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
37088 select ppa.project_id
37089 from pa_projects_all ppa
37090 where pm_project_reference = c_sub_project_reference
37091 and ppa.project_id = c_sub_project_id;
37092
37093 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
37094 select ppa.project_id
37095 from pa_projects_all ppa
37096 where pm_project_reference = c_sub_project_reference;
37097
37098 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
37099 select ppa.project_id
37100 from pa_projects_all ppa
37101 where ppa.project_id = c_sub_project_id;
37102
37103 l_parent_sub_flag VARCHAR2(1) := NULL;
37104
37105 l_program_name VARCHAR2(30) := NULL;
37106 l_project_name VARCHAR2(30) := NULL;
37107 l_task_name VARCHAR2(30) := NULL;
37108
37109 TYPE l_prog_error_rec_type IS RECORD
37110 (program_name VARCHAR2(300) := null
37111 ,object_relationship_id NUMBER := null
37112 ,error_msg VARCHAR2(2000) := null);
37113
37114 TYPE l_prog_error_tbl_type IS TABLE OF l_prog_error_rec_type INDEX BY BINARY_INTEGER;
37115
37116 l_prog_error_tbl l_prog_error_tbl_type;
37117
37118 l_error_count NUMBER := 0;
37119 l_msg_code VARCHAR2(30) := null;
37120
37121 l NUMBER := 0;
37122
37123 begin
37124
37125 -- Establish the save point.
37126 savepoint CREATE_PROGRAM_LINKS_AMG;
37127
37128 -- Initialize the message table if requested.
37129 if FND_API.TO_BOOLEAN(p_init_msg_list) then
37130 FND_MSG_PUB.initialize;
37131 end if;
37132
37133 -- Standard call to check for API compatibility.
37134 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
37135 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37136 end if;
37137
37138 -- Initialize the return status
37139 x_return_status := FND_API.G_RET_STS_SUCCESS;
37140
37141 -- Initialize the error flags.
37142 l_unexp_error_flag := 'N';
37143 l_exp_error_flag := 'N';
37144
37145 -- Loop through the records in the input PL/SQL table.
37146 for l_count in p_program_links_tbl.FIRST..p_program_links_tbl.LAST loop
37147
37148 -- Clear the message stack.
37149 FND_MSG_PUB.initialize;
37150
37151 -- Initialize the error flags.
37152 l_unexp_error_flag := 'N';
37153 l_exp_error_flag := 'N';
37154 l_parent_sub_flag := 'P'; -- By default assume that any errors will be for the parent project.
37155
37156 -- Initialize the local variables.
37157 l_parent_project_id := NULL;
37158 l_sub_project_id := NULL;
37159 l_task_id := NULL;
37160 l_task_id_out := NULL;
37161 l_task_version_id := NULL;
37162
37163 -- If task version id is not passed in.
37164 if ((p_program_links_tbl(l_count).task_version_id is null)
37165 or (p_program_links_tbl(l_count).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37166
37167 -- Convert parent project reference to id.
37168 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37169 PA_PROJECT_PVT.Convert_pm_projref_to_id
37170 (p_pm_project_reference => p_program_links_tbl(l_count).pm_parent_project_reference
37171 , p_pa_project_id => p_program_links_tbl(l_count).parent_project_id
37172 , p_out_project_id => l_parent_project_id
37173 , p_return_status => l_return_status);
37174
37175 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37176 l_unexp_error_flag := 'Y';
37177 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37178 l_exp_error_flag := 'Y';
37179 end if;
37180
37181 end if;
37182
37183 -- Convert task reference to id.
37184 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37185 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37186 (p_pa_project_id => l_parent_project_id
37187 , p_pm_task_reference => p_program_links_tbl(l_count).pm_task_reference
37188 , p_pa_task_id => p_program_links_tbl(l_count).task_id
37189 , p_structure_type => p_program_links_tbl(l_count).structure_type
37190 , p_out_task_id => l_task_id
37191 , p_return_status => l_return_status);
37192
37193 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37194 l_unexp_error_flag := 'Y';
37195 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37196 l_exp_error_flag := 'Y';
37197 end if;
37198
37199 end if;
37200
37201 -- Find the task version id in the current working workplan structure version.
37202 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37203 open l_cur_task_ver_id(l_task_id, p_program_links_tbl(l_count).structure_type);
37204 fetch l_cur_task_ver_id into l_task_version_id;
37205 close l_cur_task_ver_id;
37206
37207 -- Validate that the task has a version in the specified structure type.
37208 if (l_task_version_id is null) then
37209 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
37210 l_exp_error_flag := 'Y';
37211 end if;
37212
37213 end if;
37214
37215 -- If task version id is passed in.
37216 else
37217 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37218 l_task_version_id := p_program_links_tbl(l_count).task_version_id;
37219 end if;
37220
37221 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37222 open l_cur_project_id2(l_task_version_id);
37223 fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
37224 if l_cur_project_id2%NOTFOUND then
37225 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
37226 l_exp_error_flag := 'Y';
37227 end if;
37228 close l_cur_project_id2;
37229 end if;
37230
37231 -- Validate the task id and project id of the task version id.
37232 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37233 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37234 (p_pa_project_id => l_parent_project_id
37235 , p_pa_task_id => l_task_id
37236 , p_structure_type => p_program_links_tbl(l_count).structure_type
37237 , p_out_task_id => l_task_id_out
37238 , p_return_status => l_return_status);
37239
37240 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37241 l_unexp_error_flag := 'Y';
37242 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37243 l_exp_error_flag := 'Y';
37244 end if;
37245 end if;
37246
37247 end if;
37248
37249 -- Validate sub-project across organizations and convert sub-project reference to id.
37250 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37251
37252 if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37253 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37254 and ((p_program_links_tbl(l_count).sub_project_id is not null)
37255 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37256
37257 open l_cur_sub_proj1(p_program_links_tbl(l_count).pm_sub_project_reference, p_program_links_tbl(l_count).sub_project_id);
37258 fetch l_cur_sub_proj1 into l_sub_project_id;
37259 close l_cur_sub_proj1;
37260
37261 elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37262 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37263
37264 open l_cur_sub_proj2(p_program_links_tbl(l_count).pm_sub_project_reference);
37265 fetch l_cur_sub_proj2 into l_sub_project_id;
37266 close l_cur_sub_proj2;
37267
37268 elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37269 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37270
37271 open l_cur_sub_proj3(p_program_links_tbl(l_count).sub_project_id);
37272 fetch l_cur_sub_proj3 into l_sub_project_id;
37273 close l_cur_sub_proj3;
37274
37275 else
37276
37277 l_sub_project_id := null;
37278
37279 end if;
37280
37281 if (l_sub_project_id is null) then
37282
37283 PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
37284 l_exp_error_flag := 'Y';
37285
37286 l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37287
37288 end if;
37289
37290 end if;
37291
37292 -- Check if the task version id corresponds to a summary task.
37293 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration
37294 if (pa_proj_elements_utils.is_summary_task_or_structure(l_task_version_id) = 'Y') then
37295 -- The task is a summary task.
37296 open l_cur_prog_name(l_task_version_id);
37297 fetch l_cur_prog_name into l_program_name;
37298 close l_cur_prog_name;
37299
37300 open l_cur_proj_name(l_sub_project_id);
37301 fetch l_cur_proj_name into l_project_name;
37302 close l_cur_proj_name;
37303
37304 open l_cur_task_name(l_task_version_id);
37305 fetch l_cur_task_name into l_task_name;
37306 close l_cur_task_name;
37307
37308 PA_UTILS.ADD_MESSAGE('PA','PA_PS_CANT_LINK_SUMMARY_TASK'
37309 ,'PROJ', l_project_name
37310 ,'PROG', l_program_name
37311 ,'TASK', l_task_name);
37312
37313 l_exp_error_flag := 'Y';
37314
37315 end if;
37316 end if;
37317
37318 -- Actions performed using the APIs are subject to function security.
37319 -- If the responsibility does not allow a function to be executed the API
37320 -- will error out as the user does not have access.
37321 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37322 if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN'
37323 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37324 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37325 (p_api_version_number => p_api_version
37326 , p_responsibility_id => FND_GLOBAL.RESP_ID
37327 , p_function_name => 'PA_PAXPREPR_WP_LINK_PROJ'
37328 , p_msg_count => l_msg_count
37329 , p_msg_data => l_msg_data
37330 , p_return_status => l_return_status
37331 , p_function_allowed => l_function_allowed);
37332
37333 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37334 l_unexp_error_flag := 'Y';
37335 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37336 l_exp_error_flag := 'Y';
37337 end if;
37338
37339 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37340 if l_function_allowed = 'N' then
37341 pa_interface_utils_pub.map_new_amg_msg
37342 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
37343 , p_msg_attribute => 'CHANGE'
37344 , p_resize_flag => 'Y'
37345 , p_msg_context => 'GENERAL'
37346 , p_attribute1 => ''
37347 , p_attribute2 => ''
37348 , p_attribute3 => ''
37349 , p_attribute4 => ''
37350 , p_attribute5 => '');
37351 l_exp_error_flag := 'Y';
37352 end if;
37353 end if;
37354 end if;
37355 end if;
37356
37357 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37358 if (p_program_links_tbl(l_count).structure_type = 'FINANCIAL'
37359 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37360 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37361 (p_api_version_number => p_api_version
37362 , p_responsibility_id => FND_GLOBAL.RESP_ID
37363 , p_function_name => 'PA_PAXPREPR_OPT_SUBPROJECTS'
37364 , p_msg_count => l_msg_count
37365 , p_msg_data => l_msg_data
37366 , p_return_status => l_return_status
37367 , p_function_allowed => l_function_allowed);
37368
37369 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37370 l_unexp_error_flag := 'Y';
37371 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37372 l_exp_error_flag := 'Y';
37373 end if;
37374
37375 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37376 if l_function_allowed = 'N' then
37377 pa_interface_utils_pub.map_new_amg_msg
37378 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
37379 , p_msg_attribute => 'CHANGE'
37380 , p_resize_flag => 'Y'
37381 , p_msg_context => 'GENERAL'
37382 , p_attribute1 => ''
37383 , p_attribute2 => ''
37384 , p_attribute3 => ''
37385 , p_attribute4 => ''
37386 , p_attribute5 => '');
37387 l_exp_error_flag := 'Y';
37388 end if;
37389 end if;
37390 end if;
37391 end if;
37392
37393 -- Check if the sub-project has the appropriate structure type enabled.
37394 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37395 if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN') then
37396 if (pa_project_structure_utils.check_workplan_enabled(l_sub_project_id) = 'N') then
37397
37398 open l_cur_proj_name(l_sub_project_id);
37399 fetch l_cur_proj_name into l_project_name;
37400 close l_cur_proj_name;
37401
37402 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_WORKPLAN_TO_LINK'
37403 ,'PROJ', l_project_name);
37404 l_exp_error_flag := 'Y';
37405
37406 l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37407
37408 end if;
37409 elsif (p_program_links_tbl(l_count).structure_type = 'FINANCIAL') then
37410 if (pa_project_structure_utils.check_financial_enabled(l_sub_project_id) = 'N') then
37411
37412 open l_cur_proj_name(l_sub_project_id);
37413 fetch l_cur_proj_name into l_project_name;
37414 close l_cur_proj_name;
37415
37416 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_FINANCIAL_TO_LINK'
37417 ,'PROJ', l_project_name);
37418 l_exp_error_flag := 'Y';
37419
37420 l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37421
37422 end if;
37423 end if;
37424 end if;
37425
37426 -- Call the API to create the sub-project association.
37427 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37428 PA_RELATIONSHIP_PUB.CREATE_SUBPROJECT_ASSOCIATION
37429 (p_api_version => p_api_version
37430 , p_init_msg_list => FND_API.G_FALSE
37431 , p_commit => p_commit
37432 , p_calling_module => 'AMG'
37433 , p_debug_mode => p_debug_mode
37434 , p_max_msg_count => p_max_msg_count
37435 , p_src_proj_id => l_parent_project_id
37436 , p_task_ver_id => l_task_version_id
37437 , p_dest_proj_id => l_sub_project_id
37438 , p_comment => p_program_links_tbl(l_count).comments
37439 , x_return_status => l_return_status
37440 , x_msg_count => l_msg_count
37441 , x_msg_data => l_msg_data);
37442
37443 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37444 l_unexp_error_flag := 'Y';
37445 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37446 l_exp_error_flag := 'Y';
37447 end if;
37448 end if;
37449
37450 -- In case of any errors in the loop store the message context and message code for the error message reported
37451 -- in the local pl/sql error table.
37452
37453 if ((l_unexp_error_flag = 'Y') or (l_exp_error_flag = 'Y')) then
37454
37455 l_prog_error_tbl(l_count).program_name := NULL;
37456 l_prog_error_tbl(l_count).object_relationship_id := NULL;
37457
37458 if (l_parent_sub_flag = 'P') then -- Indicates that the error is for the parent_project.
37459
37460 if (((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
37461 and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37462 and ((p_program_links_tbl(l_count).parent_project_id is not null)
37463 and (p_program_links_tbl(l_count).parent_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37464 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
37465 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
37466 elsif ((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
37467 and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37468 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
37469 elsif ((p_program_links_tbl(l_count).parent_project_id is not null)
37470 and (p_program_links_tbl(l_count).parent_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37471 open l_cur_prog_name2(p_program_links_tbl(l_count).parent_project_id);
37472 fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
37473 close l_cur_prog_name2;
37474 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
37475 elsif ((p_program_links_tbl(l_count).task_version_id is not null)
37476 and (p_program_links_tbl(l_count).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37477 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).task_version_id;
37478 end if;
37479
37480 elsif (l_parent_sub_flag = 'S') then -- Indicates that the error is for the sub-project.
37481
37482 if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37483 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37484 and ((p_program_links_tbl(l_count).sub_project_id is not null)
37485 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37486 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
37487 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
37488 elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37489 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37490 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
37491 elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37492 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37493 open l_cur_prog_name2(p_program_links_tbl(l_count).sub_project_id);
37494 fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
37495 close l_cur_prog_name2;
37496 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
37497 end if;
37498
37499 end if;
37500
37501 PA_INTERFACE_UTILS_PUB.get_messages
37502 (p_encoded => FND_API.G_FALSE -- Get the encoded message.
37503 , p_msg_index => 1 -- Get the message at index 1.
37504 , p_data => l_prog_error_tbl(l_count).error_msg
37505 , p_msg_index_out => l_msg_index_out);
37506
37507 end if;
37508
37509 end loop;
37510
37511 -- In case of any errors in the above loop, populate the tokenized error messages in the error stack and raise an exception:
37512 l_error_count := l_prog_error_tbl.count;
37513
37514 if (l_error_count > 0) then
37515
37516 -- Set the return status to error.
37517 x_return_status := FND_API.G_RET_STS_ERROR;
37518
37519 -- Clear all previous messages from the message stack.
37520 FND_MSG_PUB.initialize;
37521
37522 -- Populate the generic error message.
37523 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
37524
37525 -- Loop through the local pl/sql error table to populate the tokenized error messages.
37526 for l in l_prog_error_tbl.first..l_prog_error_tbl.last
37527 loop
37528 if (l_prog_error_tbl.exists(l)) then
37529 PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
37530 ,'TASKNAME',l_prog_error_tbl(l).program_name
37531 ,'TASKNUMBER',l_prog_error_tbl(l).object_relationship_id
37532 ,'ERRORMSG', l_prog_error_tbl(l).error_msg);
37533 end if;
37534 end loop;
37535
37536 raise FND_API.G_EXC_ERROR;
37537
37538 end if;
37539
37540 -- Commit if p_commit = FND_API.G_TRUE.
37541 if (p_commit = FND_API.G_TRUE) then
37542 commit;
37543 end if;
37544
37545 exception
37546
37547 when FND_API.G_EXC_ERROR then
37548 rollback to CREATE_PROGRAM_LINKS_AMG;
37549 x_return_status := FND_API.G_RET_STS_ERROR;
37550 x_msg_count := FND_MSG_PUB.count_msg;
37551
37552 if x_msg_count = 1 then
37553 PA_INTERFACE_UTILS_PUB.get_messages
37554 (p_encoded => FND_API.G_FALSE
37555 , p_msg_index => 1
37556 , p_msg_count => x_msg_count
37557 , p_msg_data => x_msg_data
37558 , p_data => x_msg_data
37559 , p_msg_index_out => l_msg_index_out);
37560 end if;
37561
37562 when FND_API.G_EXC_UNEXPECTED_ERROR then
37563 rollback to CREATE_PROGRAM_LINKS_AMG;
37564 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37565 x_msg_count := FND_MSG_PUB.count_msg;
37566
37567 if x_msg_count = 1 then
37568 PA_INTERFACE_UTILS_PUB.get_messages
37569 (p_encoded => FND_API.G_FALSE
37570 , p_msg_index => 1
37571 , p_msg_count => x_msg_count
37572 , p_msg_data => x_msg_data
37573 , p_data => x_msg_data
37574 , p_msg_index_out => l_msg_index_out);
37575 end if;
37576
37577 when OTHERS then
37578 rollback to CREATE_PROGRAM_LINKS_AMG;
37579 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
37580 x_msg_count := 1;
37581 x_msg_data := SQLERRM;
37582 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
37583 FND_MSG_PUB.add_exc_msg
37584 ( p_pkg_name => G_PKG_NAME
37585 , p_procedure_name => l_api_name);
37586 end if;
37587
37588 end CREATE_PROGRAM_LINKS;
37589
37590 PROCEDURE UPDATE_PROGRAM_LINK_COMMENTS
37591 (p_api_version IN NUMBER := 1.0
37592 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
37593 , p_commit IN VARCHAR2 := FND_API.G_FALSE
37594 , p_debug_mode IN VARCHAR2 := 'N'
37595 , p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
37596 , p_program_links_tbl IN PA_PROJECT_PUB.PROGRAM_LINKS_TBL_TYPE
37597 , x_return_status OUT NOCOPY VARCHAR2
37598 , x_msg_count OUT NOCOPY NUMBER
37599 , x_msg_data OUT NOCOPY VARCHAR2)
37600 is
37601
37602 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_PROGRAM_LINK_COMMENTS';
37603
37604 l_pm_product_code VARCHAR2(2) := NULL;
37605 l_function_allowed VARCHAR2(1) := NULL;
37606
37607 l_count NUMBER := NULL;
37608 l_parent_project_id NUMBER := NULL;
37609 l_sub_project_id NUMBER := NULL;
37610 l_task_id NUMBER := NULL;
37611 l_task_id_out NUMBER := NULL;
37612 l_task_version_id NUMBER := NULL;
37613 l_object_relationship_id NUMBER := NULL;
37614 l_record_version_number NUMBER := NULL;
37615
37616
37617 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
37618 select ppev.element_version_id
37619 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
37620 , pa_proj_structure_types ppst, pa_structure_types pst
37621 where ppevs.proj_element_id = ppst.proj_element_id
37622 and ppst.structure_type_id = pst.structure_type_id
37623 and ppev.project_id = ppevs.project_id
37624 and ppev.parent_structure_version_id = ppevs.element_version_id
37625 and ppevs.current_working_flag = 'Y'
37626 and ppev.proj_element_id = c_task_id
37627 and pst.structure_type = c_structure_type;
37628
37629 cursor l_cur_por1(c_task_version_id NUMBER, c_sub_proj_id NUMBER, c_structure_type VARCHAR2) is
37630 select por2.object_relationship_id, por2.record_version_number
37631 from pa_object_relationships por1, pa_object_relationships por2
37632 where por1.object_id_to1 = por2.object_id_from1
37633 and por1.relationship_type = 'S'
37634 and por1.object_id_from1 = c_task_version_id
37635 and por2.object_id_to2 = c_sub_proj_id
37636 and por2.relationship_type = decode(c_structure_type, 'WORKPLAN', 'LW', 'FINANCIAL', 'LF');
37637
37638 cursor l_cur_por2(c_object_relationship_id NUMBER) is
37639 select por.object_relationship_id, por.record_version_number, por.object_id_from2
37640 from pa_object_relationships por
37641 where por.relationship_type in ('LW','LF')
37642 and por.object_relationship_id = c_object_relationship_id;
37643
37644 cursor l_cur_prog_name (c_task_version_id NUMBER) is
37645 select ppa.name
37646 from pa_projects_all ppa, pa_proj_element_versions ppev
37647 where ppa.project_id = ppev.project_id
37648 and ppev.element_version_id = c_task_version_id;
37649
37650 cursor l_cur_prog_name2 (c_project_id NUMBER) is
37651 select ppa.name
37652 from pa_projects_all ppa
37653 where ppa.project_id = c_project_id;
37654
37655 cursor l_cur_proj_name (c_project_id NUMBER) is
37656 select ppa.name
37657 from pa_projects_all ppa
37658 where ppa.project_id = c_project_id;
37659
37660 cursor l_cur_task_name (c_task_ver_id NUMBER) is
37661 select ppe.name
37662 from pa_proj_elements ppe, pa_proj_element_versions ppev
37663 where ppe.project_id = ppev.project_id
37664 and ppe.proj_element_id = ppev.proj_element_id
37665 and ppev.element_version_id = c_task_ver_id;
37666
37667 cursor l_cur_project_id2(c_task_version_id NUMBER) is
37668 select ppev.project_id, ppev.proj_element_id
37669 from pa_proj_element_versions ppev
37670 where ppev.element_version_id = c_task_version_id;
37671
37672 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
37673 select ppa.project_id
37674 from pa_projects_all ppa
37675 where pm_project_reference = c_sub_project_reference
37676 and ppa.project_id = c_sub_project_id;
37677
37678 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
37679 select ppa.project_id
37680 from pa_projects_all ppa
37681 where pm_project_reference = c_sub_project_reference;
37682
37683 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
37684 select ppa.project_id
37685 from pa_projects_all ppa
37686 where ppa.project_id = c_sub_project_id;
37687
37688 l_parent_sub_flag VARCHAR2(1) := NULL;
37689
37690 l_program_name VARCHAR2(30) := NULL;
37691 l_project_name VARCHAR2(30) := NULL;
37692 l_task_name VARCHAR2(30) := NULL;
37693
37694 l_unexp_error_flag VARCHAR2(1) := 'N';
37695 l_exp_error_flag VARCHAR2(1) := 'N';
37696
37697 l_msg_index_out NUMBER := NULL;
37698 l_return_status VARCHAR2(1) := NULL;
37699 l_msg_count NUMBER := NULL;
37700 l_msg_data VARCHAR2(2000) := NULL;
37701
37702 TYPE l_prog_error_rec_type IS RECORD
37703 (program_name VARCHAR2(300) := null
37704 ,object_relationship_id NUMBER := null
37705 ,error_msg VARCHAR2(2000) := null);
37706
37707 TYPE l_prog_error_tbl_type IS TABLE OF l_prog_error_rec_type INDEX BY BINARY_INTEGER;
37708
37709 l_prog_error_tbl l_prog_error_tbl_type;
37710
37711 l_error_count NUMBER := 0;
37712 l_msg_code VARCHAR2(30) := null;
37713
37714 l NUMBER := 0;
37715
37716 begin
37717
37718 -- Establish the save point.
37719 savepoint UPDATE_PROGRAM_LINK_CMNTS_AMG;
37720
37721 -- Initialize the message table if requested.
37722 if FND_API.TO_BOOLEAN(p_init_msg_list) then
37723 FND_MSG_PUB.initialize;
37724 end if;
37725
37726 -- Standard call to check for API compatibility.
37727 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
37728 raise FND_API.G_EXC_UNEXPECTED_ERROR;
37729 end if;
37730
37731 -- Initialize the return status
37732 x_return_status := FND_API.G_RET_STS_SUCCESS;
37733
37734 -- Initialize the error flags.
37735 l_unexp_error_flag := 'N';
37736 l_exp_error_flag := 'N';
37737
37738 -- Loop through the records in the input PL/SQL table.
37739 for l_count in p_program_links_tbl.FIRST..p_program_links_tbl.LAST loop
37740
37741 -- Clear the message stack.
37742 FND_MSG_PUB.initialize;
37743
37744 -- Initialize the error flags.
37745 l_unexp_error_flag := 'N';
37746 l_exp_error_flag := 'N';
37747 l_parent_sub_flag := 'P'; -- By default assume that any errors will be for the parent project.
37748
37749 -- Initialize the local variables.
37750 l_parent_project_id := NULL;
37751 l_sub_project_id := NULL;
37752 l_task_id := NULL;
37753 l_task_id_out := NULL;
37754 l_task_version_id := NULL;
37755 l_object_relationship_id := NULL;
37756 l_record_version_number := NULL;
37757
37758 -- If object relationship id is not passed in.
37759 if ((p_program_links_tbl(l_count).object_relationship_id is null)
37760 or (p_program_links_tbl(l_count).object_relationship_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37761
37762 -- If task version id is not passed in.
37763 if ((p_program_links_tbl(l_count).task_version_id is null)
37764 or (p_program_links_tbl(l_count).task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37765
37766 -- Convert parent project reference to id.
37767 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37768 PA_PROJECT_PVT.Convert_pm_projref_to_id
37769 (p_pm_project_reference => p_program_links_tbl(l_count).pm_parent_project_reference
37770 , p_pa_project_id => p_program_links_tbl(l_count).parent_project_id
37771 , p_out_project_id => l_parent_project_id
37772 , p_return_status => l_return_status);
37773
37774 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37775 l_unexp_error_flag := 'Y';
37776 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37777 l_exp_error_flag := 'Y';
37778 end if;
37779 end if;
37780
37781 -- Convert task reference to id
37782 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37783 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37784 (p_pa_project_id => l_parent_project_id
37785 , p_pm_task_reference => p_program_links_tbl(l_count).pm_task_reference
37786 , p_pa_task_id => p_program_links_tbl(l_count).task_id
37787 , p_structure_type => p_program_links_tbl(l_count).structure_type
37788 , p_out_task_id => l_task_id
37789 , p_return_status => l_return_status);
37790
37791 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37792 l_unexp_error_flag := 'Y';
37793 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37794 l_exp_error_flag := 'Y';
37795 end if;
37796 end if;
37797
37798 -- Find the task version id in the current working workplan structure version.
37799 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37800 open l_cur_task_ver_id(l_task_id, p_program_links_tbl(l_count).structure_type);
37801 fetch l_cur_task_ver_id into l_task_version_id;
37802 close l_cur_task_ver_id;
37803
37804 -- Validate that the task has a version in the specified structure type.
37805 if (l_task_version_id is null) then
37806 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
37807 l_exp_error_flag := 'Y';
37808 end if;
37809
37810 end if;
37811
37812 -- If task version id is passed in.
37813 else
37814 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37815 l_task_version_id := p_program_links_tbl(l_count).task_version_id;
37816 end if;
37817
37818 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37819 open l_cur_project_id2(l_task_version_id);
37820 fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
37821 if l_cur_project_id2%NOTFOUND then
37822 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
37823 l_exp_error_flag := 'Y';
37824 end if;
37825
37826 close l_cur_project_id2;
37827 end if;
37828
37829 -- Validate the task id and project id of the task version id.
37830 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37831 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
37832 (p_pa_project_id => l_parent_project_id
37833 , p_pa_task_id => l_task_id
37834 , p_structure_type => p_program_links_tbl(l_count).structure_type
37835 , p_out_task_id => l_task_id_out
37836 , p_return_status => l_return_status);
37837
37838 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37839 l_unexp_error_flag := 'Y';
37840 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37841 l_exp_error_flag := 'Y';
37842 end if;
37843 end if;
37844
37845 end if;
37846
37847 -- Validate sub-project across organizations and convert sub-project reference to id.
37848 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37849
37850 if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37851 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
37852 and ((p_program_links_tbl(l_count).sub_project_id is not null)
37853 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
37854
37855 open l_cur_sub_proj1(p_program_links_tbl(l_count).pm_sub_project_reference, p_program_links_tbl(l_count).sub_project_id);
37856 fetch l_cur_sub_proj1 into l_sub_project_id;
37857 close l_cur_sub_proj1;
37858
37859 elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
37860 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
37861
37862 open l_cur_sub_proj2(p_program_links_tbl(l_count).pm_sub_project_reference);
37863 fetch l_cur_sub_proj2 into l_sub_project_id;
37864 close l_cur_sub_proj2;
37865
37866 elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
37867 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
37868
37869 open l_cur_sub_proj3(p_program_links_tbl(l_count).sub_project_id);
37870 fetch l_cur_sub_proj3 into l_sub_project_id;
37871 close l_cur_sub_proj3;
37872
37873 else
37874
37875 l_sub_project_id := null;
37876
37877 end if;
37878
37879 if (l_sub_project_id is null) then
37880
37881 PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
37882 l_exp_error_flag := 'Y';
37883
37884 l_parent_sub_flag := 'S'; -- Indicates that the error is for the sub-project.
37885
37886 end if;
37887
37888 end if;
37889
37890 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37891 open l_cur_por1(l_task_version_id, l_sub_project_id, p_program_links_tbl(l_count).structure_type);
37892 fetch l_cur_por1 into l_object_relationship_id, l_record_version_number;
37893 if l_cur_por1%NOTFOUND then
37894 -- Program Link does not exist between the parent project and the sub-project.
37895 open l_cur_prog_name(l_task_version_id);
37896 fetch l_cur_prog_name into l_program_name;
37897 close l_cur_prog_name;
37898
37899 open l_cur_proj_name(l_sub_project_id);
37900 fetch l_cur_proj_name into l_project_name;
37901 close l_cur_proj_name;
37902
37903 open l_cur_task_name(l_task_version_id);
37904 fetch l_cur_task_name into l_task_name;
37905 close l_cur_task_name;
37906
37907 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_LINK_EXISTS'
37908 ,'PROJ', l_project_name
37909 ,'PROG', l_program_name
37910 ,'TASK', l_task_name
37911 ,'STR', p_program_links_tbl(l_count).structure_type);
37912
37913 l_exp_error_flag := 'Y';
37914 end if;
37915 close l_cur_por1;
37916 end if;
37917
37918 -- If object relationship id is passed in.
37919 else
37920 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37921 open l_cur_por2(p_program_links_tbl(l_count).object_relationship_id);
37922 fetch l_cur_por2 into l_object_relationship_id, l_record_version_number, l_parent_project_id;
37923 if l_cur_por2%NOTFOUND then
37924 -- Invalid object_relationship_id.
37925 PA_UTILS.ADD_MESSAGE('PA','PA_PS_INVALID_OBJ_REL_ID'
37926 ,'OBJRELID', p_program_links_tbl(l_count).object_relationship_id);
37927
37928 l_exp_error_flag := 'Y';
37929 end if;
37930 close l_cur_por2;
37931 end if;
37932 end if;
37933
37934 -- Actions performed using the APIs are subject to function security.
37935 -- If the responsibility does not allow a function to be executed the API
37936 -- will error out as the user does not have access.
37937 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37938 if (p_program_links_tbl(l_count).structure_type = 'WORKPLAN'
37939 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37940 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37941 (p_api_version_number => p_api_version
37942 , p_responsibility_id => FND_GLOBAL.RESP_ID
37943 , p_function_name => 'PA_PAXPREPR_WP_LINK_PROJ'
37944 , p_msg_count => l_msg_count
37945 , p_msg_data => l_msg_data
37946 , p_return_status => l_return_status
37947 , p_function_allowed => l_function_allowed);
37948
37949 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37950 l_unexp_error_flag := 'Y';
37951 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37952 l_exp_error_flag := 'Y';
37953 end if;
37954
37955 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37956 if l_function_allowed = 'N' then
37957 pa_interface_utils_pub.map_new_amg_msg
37958 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
37959 , p_msg_attribute => 'CHANGE'
37960 , p_resize_flag => 'Y'
37961 , p_msg_context => 'GENERAL'
37962 , p_attribute1 => ''
37963 , p_attribute2 => ''
37964 , p_attribute3 => ''
37965 , p_attribute4 => ''
37966 , p_attribute5 => '');
37967 l_exp_error_flag := 'Y';
37968 end if;
37969 end if;
37970 end if;
37971
37972 end if;
37973
37974 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37975 if (p_program_links_tbl(l_count).structure_type = 'FINANCIAL'
37976 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
37977 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
37978 (p_api_version_number => p_api_version
37979 , p_responsibility_id => FND_GLOBAL.RESP_ID
37980 , p_function_name => 'PA_PAXPREPR_OPT_SUBPROJECTS'
37981 , p_msg_count => l_msg_count
37982 , p_msg_data => l_msg_data
37983 , p_return_status => l_return_status
37984 , p_function_allowed => l_function_allowed);
37985
37986 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
37987 l_unexp_error_flag := 'Y';
37988 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
37989 l_exp_error_flag := 'Y';
37990 end if;
37991
37992 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
37993 if l_function_allowed = 'N' then
37994 pa_interface_utils_pub.map_new_amg_msg
37995 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
37996 , p_msg_attribute => 'CHANGE'
37997 , p_resize_flag => 'Y'
37998 , p_msg_context => 'GENERAL'
37999 , p_attribute1 => ''
38000 , p_attribute2 => ''
38001 , p_attribute3 => ''
38002 , p_attribute4 => ''
38003 , p_attribute5 => '');
38004 l_exp_error_flag := 'Y';
38005 end if;
38006 end if;
38007 end if;
38008 end if;
38009
38010 if (l_exp_error_flag = 'N' and l_unexp_error_flag = 'N') then -- Indicates no errors thus far in the loop iteration.
38011 -- Call the API to update the sub-project association.
38012 PA_RELATIONSHIP_PUB.UPDATE_SUBPROJECT_ASSOCIATION
38013 (p_api_version => p_api_version
38014 , p_init_msg_list => FND_API.G_FALSE
38015 , p_calling_module => 'AMG'
38016 , p_max_msg_count => p_max_msg_count
38017 , p_commit => p_commit
38018 , p_debug_mode => p_debug_mode
38019 , p_object_relationship_id => l_object_relationship_id
38020 , p_record_version_number => l_record_version_number
38021 , p_comment => p_program_links_tbl(l_count).comments
38022 , x_return_status => l_return_status
38023 , x_msg_count => l_msg_count
38024 , x_msg_data => l_msg_data);
38025
38026 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38027 l_unexp_error_flag := 'Y';
38028 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38029 l_exp_error_flag := 'Y';
38030 end if;
38031 end if;
38032
38033 -- In case of any errors in the loop store the message context and message code for the error message reported
38034 -- in the local pl/sql error table.
38035
38036 if ((l_unexp_error_flag = 'Y') or (l_exp_error_flag = 'Y')) then
38037
38038 l_prog_error_tbl(l_count).program_name := NULL;
38039 l_prog_error_tbl(l_count).object_relationship_id := NULL;
38040
38041 if (l_parent_sub_flag = 'P') then -- Indicates that the error is for the parent_project.
38042
38043 if (((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
38044 and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
38045 and ((p_program_links_tbl(l_count).parent_project_id is not null)
38046 and (p_program_links_tbl(l_count).parent_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
38047 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
38048 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
38049 elsif ((p_program_links_tbl(l_count).pm_parent_project_reference is not null)
38050 and (p_program_links_tbl(l_count).pm_parent_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
38051 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_parent_project_reference;
38052 elsif ((p_program_links_tbl(l_count).parent_project_id is not null)
38053 and (p_program_links_tbl(l_count).parent_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38054 open l_cur_prog_name2(p_program_links_tbl(l_count).parent_project_id);
38055 fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
38056 close l_cur_prog_name2;
38057 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).parent_project_id;
38058 elsif ((p_program_links_tbl(l_count).task_version_id is not null)
38059 and (p_program_links_tbl(l_count).task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38060 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).task_version_id;
38061 end if;
38062
38063 elsif (l_parent_sub_flag = 'S') then -- Indicates that the error is for the sub-project.
38064
38065 if (((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
38066 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
38067 and ((p_program_links_tbl(l_count).sub_project_id is not null)
38068 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
38069 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
38070 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
38071 elsif ((p_program_links_tbl(l_count).pm_sub_project_reference is not null)
38072 and (p_program_links_tbl(l_count).pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
38073 l_prog_error_tbl(l_count).program_name := p_program_links_tbl(l_count).pm_sub_project_reference;
38074 elsif ((p_program_links_tbl(l_count).sub_project_id is not null)
38075 and (p_program_links_tbl(l_count).sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38076 open l_cur_prog_name2(p_program_links_tbl(l_count).sub_project_id);
38077 fetch l_cur_prog_name2 into l_prog_error_tbl(l_count).program_name;
38078 close l_cur_prog_name2;
38079 l_prog_error_tbl(l_count).object_relationship_id := p_program_links_tbl(l_count).sub_project_id;
38080 end if;
38081
38082 end if;
38083
38084 PA_INTERFACE_UTILS_PUB.get_messages
38085 (p_encoded => FND_API.G_FALSE -- Get the encoded message.
38086 , p_msg_index => 1 -- Get the message at index 1.
38087 , p_data => l_prog_error_tbl(l_count).error_msg
38088 , p_msg_index_out => l_msg_index_out);
38089
38090 end if;
38091
38092 end loop;
38093
38094 -- In case of any errors in the above loop, populate the tokenized error messages in the error stack and raise an exception:
38095 l_error_count := l_prog_error_tbl.count;
38096
38097 if (l_error_count > 0) then
38098
38099 -- Set the return status to error.
38100 x_return_status := FND_API.G_RET_STS_ERROR;
38101
38102 -- Clear all previous messages from the message stack.
38103 FND_MSG_PUB.initialize;
38104
38105 -- Populate the generic error message.
38106 PA_UTILS.ADD_MESSAGE('PA','PA_PS_GENERIC_ERROR');
38107
38108 -- Loop through the local pl/sql error table to populate the tokenized error messages.
38109 for l in l_prog_error_tbl.first..l_prog_error_tbl.last
38110 loop
38111 if (l_prog_error_tbl.exists(l)) then
38112 PA_UTILS.ADD_MESSAGE('PA','PA_PS_TOKENIZED_ERROR'
38113 ,'TASKNAME',l_prog_error_tbl(l).program_name
38114 ,'TASKNUMBER',l_prog_error_tbl(l).object_relationship_id
38115 ,'ERRORMSG', l_prog_error_tbl(l).error_msg);
38116 end if;
38117 end loop;
38118
38119 raise FND_API.G_EXC_ERROR;
38120
38121 end if;
38122
38123 -- Commit if p_commit = FND_API.G_TRUE.
38124 if (p_commit = FND_API.G_TRUE) then
38125 commit;
38126 end if;
38127
38128 exception
38129
38130 when FND_API.G_EXC_ERROR then
38131 rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
38132 x_return_status := FND_API.G_RET_STS_ERROR;
38133 x_msg_count := FND_MSG_PUB.count_msg;
38134
38135 if x_msg_count = 1 then
38136 PA_INTERFACE_UTILS_PUB.get_messages
38137 (p_encoded => FND_API.G_FALSE
38138 , p_msg_index => 1
38139 , p_msg_count => x_msg_count
38140 , p_msg_data => x_msg_data
38141 , p_data => x_msg_data
38142 , p_msg_index_out => l_msg_index_out);
38143 end if;
38144
38145 when FND_API.G_EXC_UNEXPECTED_ERROR then
38146 rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
38147 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38148 x_msg_count := FND_MSG_PUB.count_msg;
38149
38150 if x_msg_count = 1 then
38151 PA_INTERFACE_UTILS_PUB.get_messages
38152 (p_encoded => FND_API.G_FALSE
38153 , p_msg_index => 1
38154 , p_msg_count => x_msg_count
38155 , p_msg_data => x_msg_data
38156 , p_data => x_msg_data
38157 , p_msg_index_out => l_msg_index_out);
38158 end if;
38159
38160 when OTHERS then
38161 rollback to UPDATE_PROGRAM_LINK_CMNTS_AMG;
38162 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38163 x_msg_count := 1;
38164 x_msg_data := SQLERRM;
38165 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
38166 FND_MSG_PUB.add_exc_msg
38167 ( p_pkg_name => G_PKG_NAME
38168 , p_procedure_name => l_api_name);
38169 end if;
38170
38171 end UPDATE_PROGRAM_LINK_COMMENTS;
38172
38173 PROCEDURE DELETE_PROGRAM_LINK
38174 (p_api_version IN NUMBER := 1.0
38175 , p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE
38176 , p_commit IN VARCHAR2 := FND_API.G_FALSE
38177 , p_debug_mode IN VARCHAR2 := 'N'
38178 , p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38179 , p_object_relationship_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38180 , p_parent_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38181 , p_pm_parent_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38182 , p_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38183 , p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38184 , p_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38185 , p_structure_type IN VARCHAR2 := 'WORKPLAN'
38186 , p_sub_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
38187 , p_pm_sub_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
38188 , x_return_status OUT NOCOPY VARCHAR2
38189 , x_msg_count OUT NOCOPY NUMBER
38190 , x_msg_data OUT NOCOPY VARCHAR2)
38191 is
38192
38193 l_api_name CONSTANT VARCHAR2(30) := 'DELETE_PROGRAM_LINK';
38194
38195 l_pm_product_code VARCHAR2(2) := NULL;
38196 l_function_allowed VARCHAR2(1) := NULL;
38197
38198 l_count NUMBER := NULL;
38199 l_parent_project_id NUMBER := NULL;
38200 l_sub_project_id NUMBER := NULL;
38201 l_task_id NUMBER := NULL;
38202 l_task_id_out NUMBER := NULL;
38203 l_task_version_id NUMBER := NULL;
38204 l_object_relationship_id NUMBER := NULL;
38205 l_record_version_number NUMBER := NULL;
38206
38207 cursor l_cur_task_ver_id(c_task_id NUMBER, c_structure_type VARCHAR2) is
38208 select ppev.element_version_id
38209 from pa_proj_element_versions ppev, pa_proj_elem_ver_structure ppevs
38210 , pa_proj_structure_types ppst, pa_structure_types pst
38211 where ppevs.proj_element_id = ppst.proj_element_id
38212 and ppst.structure_type_id = pst.structure_type_id
38213 and ppev.project_id = ppevs.project_id
38214 and ppev.parent_structure_version_id = ppevs.element_version_id
38215 and ppevs.current_working_flag = 'Y'
38216 and ppev.proj_element_id = c_task_id
38217 and pst.structure_type = c_structure_type;
38218
38219 cursor l_cur_por1(c_task_version_id NUMBER, c_sub_proj_id NUMBER, c_structure_type VARCHAR2) is
38220 select por2.object_relationship_id, por2.record_version_number
38221 from pa_object_relationships por1, pa_object_relationships por2
38222 where por1.object_id_to1 = por2.object_id_from1
38223 and por1.relationship_type = 'S'
38224 and por1.object_id_from1 = c_task_version_id
38225 and por2.object_id_to2 = c_sub_proj_id
38226 and por2.relationship_type = decode(c_structure_type, 'WORKPLAN', 'LW', 'FINANCIAL', 'LF');
38227
38228 cursor l_cur_por2(c_object_relationship_id NUMBER) is
38229 select por.object_relationship_id, por.record_version_number, por.object_id_from2
38230 from pa_object_relationships por
38231 where por.relationship_type in ('LW','LF')
38232 and por.object_relationship_id = c_object_relationship_id;
38233
38234 cursor l_cur_prog_name (c_task_version_id NUMBER) is
38235 select ppa.name
38236 from pa_projects_all ppa, pa_proj_element_versions ppev
38237 where ppa.project_id = ppev.project_id
38238 and ppev.element_version_id = c_task_version_id;
38239
38240 cursor l_cur_proj_name (c_project_id NUMBER) is
38241 select ppa.name
38242 from pa_projects_all ppa
38243 where ppa.project_id = c_project_id;
38244
38245 cursor l_cur_task_name (c_task_ver_id NUMBER) is
38246 select ppe.name
38247 from pa_proj_elements ppe, pa_proj_element_versions ppev
38248 where ppe.project_id = ppev.project_id
38249 and ppe.proj_element_id = ppev.proj_element_id
38250 and ppev.element_version_id = c_task_ver_id;
38251
38252 cursor l_cur_project_id2(c_task_version_id NUMBER) is
38253 select ppev.project_id, ppev.proj_element_id
38254 from pa_proj_element_versions ppev
38255 where ppev.element_version_id = c_task_version_id;
38256
38257 cursor l_cur_sub_proj1(c_sub_project_reference VARCHAR2, c_sub_project_id NUMBER) is
38258 select ppa.project_id
38259 from pa_projects_all ppa
38260 where pm_project_reference = c_sub_project_reference
38261 and ppa.project_id = c_sub_project_id;
38262
38263 cursor l_cur_sub_proj2(c_sub_project_reference VARCHAR2) is
38264 select ppa.project_id
38265 from pa_projects_all ppa
38266 where pm_project_reference = c_sub_project_reference;
38267
38268 cursor l_cur_sub_proj3(c_sub_project_id NUMBER) is
38269 select ppa.project_id
38270 from pa_projects_all ppa
38271 where ppa.project_id = c_sub_project_id;
38272
38273 l_program_name VARCHAR2(30) := NULL;
38274 l_project_name VARCHAR2(30) := NULL;
38275 l_task_name VARCHAR2(30) := NULL;
38276
38277 l_msg_index_out NUMBER := NULL;
38278 l_return_status VARCHAR2(1) := NULL;
38279 l_msg_count NUMBER := NULL;
38280 l_msg_data VARCHAR2(2000) := NULL;
38281
38282 begin
38283
38284 -- Establish the save point.
38285 savepoint DELETE_PROGRAM_LINK_AMG;
38286
38287 -- Initialize the message table if requested.
38288 if FND_API.TO_BOOLEAN(p_init_msg_list) then
38289 FND_MSG_PUB.initialize;
38290 end if;
38291
38292 -- Standard call to check for API compatibility.
38293 if NOT FND_API.Compatible_API_Call (g_api_version_number, p_api_version, l_api_name, G_PKG_NAME) then
38294 raise FND_API.G_EXC_UNEXPECTED_ERROR;
38295 end if;
38296
38297 -- Initialize the return status
38298 x_return_status := FND_API.G_RET_STS_SUCCESS;
38299
38300 -- If object relationship id is not passed in.
38301 if ((p_object_relationship_id is null)
38302 or (p_object_relationship_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38303
38304 -- If task version id is not passed in.
38305 if ((p_task_version_id is null)
38306 or (p_task_version_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38307
38308 -- Convert parent project reference to id.
38309 PA_PROJECT_PVT.Convert_pm_projref_to_id
38310 (p_pm_project_reference => p_pm_parent_project_reference
38311 , p_pa_project_id => p_parent_project_id
38312 , p_out_project_id => l_parent_project_id
38313 , p_return_status => l_return_status);
38314
38315 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38316 raise FND_API.G_EXC_UNEXPECTED_ERROR;
38317 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38318 raise FND_API.G_EXC_ERROR;
38319 end if;
38320
38321 -- Convert task reference to id
38322 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
38323 (p_pa_project_id => l_parent_project_id
38324 , p_pm_task_reference => p_pm_task_reference
38325 , p_pa_task_id => p_task_id
38326 , p_structure_type => p_structure_type
38327 , p_out_task_id => l_task_id
38328 , p_return_status => l_return_status);
38329
38330 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38331 raise FND_API.G_EXC_UNEXPECTED_ERROR;
38332 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38333 raise FND_API.G_EXC_ERROR;
38334 end if;
38335
38336 -- Find the task version id in the current working workplan structure version.
38337 open l_cur_task_ver_id(l_task_id, p_structure_type);
38338 fetch l_cur_task_ver_id into l_task_version_id;
38339 close l_cur_task_ver_id;
38340
38341 -- Validate that the task has a version in the specified structure type.
38342 if (l_task_version_id is null) then
38343 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_ID_INVALID');
38344 raise FND_API.G_EXC_ERROR;
38345 end if;
38346
38347 -- If task version id is passed in.
38348 else
38349 l_task_version_id := p_task_version_id;
38350
38351 open l_cur_project_id2(l_task_version_id);
38352 fetch l_cur_project_id2 into l_parent_project_id, l_task_id;
38353 if l_cur_project_id2%NOTFOUND then
38354 PA_UTILS.ADD_MESSAGE('PA','PA_TASK_VERSION_REQUIRED');
38355 raise FND_API.G_EXC_ERROR;
38356 end if;
38357 close l_cur_project_id2;
38358
38359 -- Validate the task id and project id of the task version id.
38360 PA_PROJECT_PVT.CONVERT_PM_TASKREF_TO_ID_ALL
38361 (p_pa_project_id => l_parent_project_id
38362 , p_pa_task_id => l_task_id
38363 , p_structure_type => p_structure_type
38364 , p_out_task_id => l_task_id_out
38365 , p_return_status => l_return_status);
38366
38367 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38368 raise FND_API.G_EXC_UNEXPECTED_ERROR;
38369 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38370 raise FND_API.G_EXC_ERROR;
38371 end if;
38372
38373 end if;
38374
38375 -- Validate sub-project across organizations and convert sub-project reference to id.
38376 if (((p_pm_sub_project_reference is not null)
38377 and (p_pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR))
38378 and ((p_sub_project_id is not null)
38379 and (p_sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM))) then
38380
38381 open l_cur_sub_proj1(p_pm_sub_project_reference, p_sub_project_id);
38382 fetch l_cur_sub_proj1 into l_sub_project_id;
38383 close l_cur_sub_proj1;
38384
38385 elsif ((p_pm_sub_project_reference is not null)
38386 and (p_pm_sub_project_reference <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR)) then
38387
38388 open l_cur_sub_proj2(p_pm_sub_project_reference);
38389 fetch l_cur_sub_proj2 into l_sub_project_id;
38390 close l_cur_sub_proj2;
38391
38392 elsif ((p_sub_project_id is not null)
38393 and (p_sub_project_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM)) then
38394
38395 open l_cur_sub_proj3(p_sub_project_id);
38396 fetch l_cur_sub_proj3 into l_sub_project_id;
38397 close l_cur_sub_proj3;
38398
38399 else
38400
38401 l_sub_project_id := null;
38402
38403 end if;
38404
38405 if (l_sub_project_id is null) then
38406
38407 PA_UTILS.ADD_MESSAGE('PA','PA_INV_PROJECT_ID');
38408 raise FND_API.G_EXC_ERROR;
38409
38410 end if;
38411
38412 open l_cur_por1(l_task_version_id, l_sub_project_id, p_structure_type);
38413 fetch l_cur_por1 into l_object_relationship_id, l_record_version_number;
38414 if l_cur_por1%NOTFOUND then
38415 -- Program Link does not exist between the parent project and the sub-project.
38416
38417 open l_cur_prog_name(l_task_version_id);
38418 fetch l_cur_prog_name into l_program_name;
38419 close l_cur_prog_name;
38420
38421 open l_cur_proj_name(l_sub_project_id);
38422 fetch l_cur_proj_name into l_project_name;
38423 close l_cur_proj_name;
38424
38425 open l_cur_task_name(l_task_version_id);
38426 fetch l_cur_task_name into l_task_name;
38427 close l_cur_task_name;
38428
38429 PA_UTILS.ADD_MESSAGE('PA','PA_PS_NO_LINK_EXISTS'
38430 ,'PROJ', l_project_name
38431 ,'PROG', l_program_name
38432 ,'TASK', l_task_name
38433 ,'STR', p_structure_type);
38434
38435 close l_cur_por1;
38436
38437 RAISE FND_API.G_EXC_ERROR;
38438 end if;
38439
38440 close l_cur_por1;
38441
38442 -- If object relationship id is passed in.
38443 else
38444 open l_cur_por2(p_object_relationship_id);
38445 fetch l_cur_por2 into l_object_relationship_id, l_record_version_number, l_parent_project_id;
38446 if l_cur_por2%NOTFOUND then
38447 -- Invalid object_relationship_id.
38448
38449 PA_UTILS.ADD_MESSAGE('PA','PA_PS_INVALID_OBJ_REL_ID'
38450 ,'OBJRELID', p_object_relationship_id);
38451
38452 close l_cur_por2;
38453
38454 RAISE FND_API.G_EXC_ERROR;
38455 end if;
38456
38457 close l_cur_por2;
38458 end if;
38459
38460 -- Actions performed using the APIs are subject to function security.
38461 -- If the responsibility does not allow a function to be executed the API
38462 -- will error out as the user does not have access.
38463 if (p_structure_type = 'WORKPLAN'
38464 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
38465 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
38466 (p_api_version_number => p_api_version
38467 , p_responsibility_id => FND_GLOBAL.RESP_ID
38468 , p_function_name => 'PA_PAXPREPR_WP_LINK_PROJ'
38469 , p_msg_count => l_msg_count
38470 , p_msg_data => l_msg_data
38471 , p_return_status => l_return_status
38472 , p_function_allowed => l_function_allowed);
38473
38474 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38475 raise FND_API.G_EXC_UNEXPECTED_ERROR;
38476 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38477 raise FND_API.G_EXC_ERROR;
38478 end if;
38479
38480 if l_function_allowed = 'N' then
38481 pa_interface_utils_pub.map_new_amg_msg
38482 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
38483 , p_msg_attribute => 'CHANGE'
38484 , p_resize_flag => 'Y'
38485 , p_msg_context => 'GENERAL'
38486 , p_attribute1 => ''
38487 , p_attribute2 => ''
38488 , p_attribute3 => ''
38489 , p_attribute4 => ''
38490 , p_attribute5 => '');
38491 raise FND_API.G_EXC_ERROR;
38492 end if;
38493 end if;
38494
38495 if (p_structure_type = 'FINANCIAL'
38496 or PA_PROJECT_STRUCTURE_UTILS.CHECK_SHARING_ENABLED(l_parent_project_id) = 'Y') then
38497 PA_PM_FUNCTION_SECURITY_PUB.check_function_security
38498 (p_api_version_number => p_api_version
38499 , p_responsibility_id => FND_GLOBAL.RESP_ID
38500 , p_function_name => 'PA_PAXPREPR_OPT_SUBPROJECTS'
38501 , p_msg_count => l_msg_count
38502 , p_msg_data => l_msg_data
38503 , p_return_status => l_return_status
38504 , p_function_allowed => l_function_allowed);
38505
38506 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38507 raise FND_API.G_EXC_UNEXPECTED_ERROR;
38508 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38509 raise FND_API.G_EXC_ERROR;
38510 end if;
38511
38512 if l_function_allowed = 'N' then
38513 pa_interface_utils_pub.map_new_amg_msg
38514 (p_old_message_code => 'PA_FUNCTION_SECURITY_ENFORCED'
38515 , p_msg_attribute => 'CHANGE'
38516 , p_resize_flag => 'Y'
38517 , p_msg_context => 'GENERAL'
38518 , p_attribute1 => ''
38519 , p_attribute2 => ''
38520 , p_attribute3 => ''
38521 , p_attribute4 => ''
38522 , p_attribute5 => '');
38523 raise FND_API.G_EXC_ERROR;
38524 end if;
38525 end if;
38526
38527 -- Call the API to delete the sub-project association.
38528 PA_RELATIONSHIP_PUB.DELETE_SUBPROJECT_ASSOCIATION
38529 (p_api_version => p_api_version
38530 , p_init_msg_list => p_init_msg_list
38531 , p_commit => p_commit
38532 , p_calling_module => 'AMG'
38533 , p_debug_mode => p_debug_mode
38534 , p_max_msg_count => p_max_msg_count
38535 , p_object_relationships_id => l_object_relationship_id
38536 , p_record_version_number => l_record_version_number
38537 , x_return_status => l_return_status
38538 , x_msg_count => l_msg_count
38539 , x_msg_data => l_msg_data);
38540
38541 if (l_return_status = FND_API.G_RET_STS_UNEXP_ERROR) then
38542 raise FND_API.G_EXC_UNEXPECTED_ERROR;
38543 elsif (l_return_status <> FND_API.G_RET_STS_SUCCESS) then
38544 raise FND_API.G_EXC_ERROR;
38545 end if;
38546
38547 -- Commit if p_commit = FND_API.G_TRUE.
38548 if (p_commit = FND_API.G_TRUE) then
38549 commit;
38550 end if;
38551
38552 exception
38553
38554 when FND_API.G_EXC_ERROR then
38555 rollback to DELETE_PROGRAM_LINK_AMG;
38556 x_return_status := FND_API.G_RET_STS_ERROR;
38557 x_msg_count := FND_MSG_PUB.count_msg;
38558
38559 if x_msg_count = 1 then
38560 PA_INTERFACE_UTILS_PUB.get_messages
38561 (p_encoded => FND_API.G_FALSE
38562 , p_msg_index => 1
38563 , p_msg_count => x_msg_count
38564 , p_msg_data => x_msg_data
38565 , p_data => x_msg_data
38566 , p_msg_index_out => l_msg_index_out);
38567 end if;
38568
38569 when FND_API.G_EXC_UNEXPECTED_ERROR then
38570 rollback to DELETE_PROGRAM_LINK_AMG;
38571 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38572 x_msg_count := FND_MSG_PUB.count_msg;
38573
38574 if x_msg_count = 1 then
38575 PA_INTERFACE_UTILS_PUB.get_messages
38576 (p_encoded => FND_API.G_FALSE
38577 , p_msg_index => 1
38578 , p_msg_count => x_msg_count
38579 , p_msg_data => x_msg_data
38580 , p_data => x_msg_data
38581 , p_msg_index_out => l_msg_index_out);
38582 end if;
38583
38584 when OTHERS then
38585 rollback to DELETE_PROGRAM_LINK_AMG;
38586 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38587 x_msg_count := 1;
38588 x_msg_data := SQLERRM;
38589 if FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) then
38590 FND_MSG_PUB.add_exc_msg
38591 ( p_pkg_name => G_PKG_NAME
38592 , p_procedure_name => l_api_name);
38593 end if;
38594
38595 end DELETE_PROGRAM_LINK;
38596
38597 -- Bug # 5072032.
38598
38599
38600 -- Bug 7525628
38601 PROCEDURE UPDATE_FINANCIAL_ATTRIBUTES
38602 (
38603 P_API_VERSION_NUMBER IN NUMBER,
38604 P_COMMIT IN VARCHAR2,
38605 P_INIT_MSG_LIST IN VARCHAR2,
38606 P_PA_PROJECT_ID IN NUMBER,
38607 P_TASK_ID_TBL IN SYSTEM.PA_NUM_TBL_TYPE,
38608 P_SERVICE_TYPE_CODE_TBL IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
38609 P_CHARGEABLE_FLAG_TBL IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
38610 P_BILLABLE_FLAG_TBL IN SYSTEM.PA_VARCHAR2_150_TBL_TYPE,
38611 X_MSG_COUNT OUT NOCOPY NUMBER,
38612 X_MSG_DATA OUT NOCOPY VARCHAR2,
38613 X_RETURN_STATUS OUT NOCOPY VARCHAR2
38614 )
38615 IS
38616 l_published_version NUMBER(15);
38617 l_prev_published_version NUMBER(15);
38618 l_new_task NUMBER(15);
38619 i NUMBER := 0;
38620 l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_FINANCIAL_ATTRIBUTES';
38621
38622 --cursor which fetches the previous published version
38623 cursor c_prev_published_version(p_pa_project_id IN NUMBER) is
38624 select element_version_id from (
38625 select element_version_id
38626 from pa_proj_elem_ver_structure ppevs,
38627 pa_proj_structure_types ppst
38628 where ppevs.latest_eff_published_flag = 'N'
38629 and ppst.proj_element_id = ppevs.proj_element_id
38630 and ppst.structure_type_id = 1
38631 and ppevs.status_code = 'STRUCTURE_PUBLISHED'
38632 and ppevs.project_id = p_pa_project_id
38633 order by ppevs.published_date desc
38634 ) where rownum = 1;
38635
38636 --cursor which fetches all tasks added as a result of last publish
38637 cursor c_newly_added_tasks(l_published_version IN NUMBER,l_prev_published_version IN NUMBER) is
38638 select proj_element_id
38639 from pa_proj_element_versions
38640 where project_id = P_PA_PROJECT_ID
38641 and object_type = 'PA_TASKS'
38642 and PARENT_STRUCTURE_VERSION_ID = l_published_version
38643 MINUS
38644 select proj_element_id
38645 from pa_proj_element_versions
38646 where project_id = P_PA_PROJECT_ID
38647 and object_type = 'PA_TASKS'
38648 and PARENT_STRUCTURE_VERSION_ID = l_prev_published_version;
38649
38650
38651 BEGIN
38652
38653 l_published_version := PA_PROJECT_STRUCTURE_UTILS.GET_LATEST_WP_VERSION(p_pa_project_id);
38654
38655 OPEN c_prev_published_version(p_pa_project_id);
38656 FETCH c_prev_published_version INTO l_prev_published_version;
38657 CLOSE c_prev_published_version;
38658
38659 FOR rec IN c_newly_added_tasks(l_published_version, l_prev_published_version) LOOP
38660 FOR i IN p_task_id_tbl.FIRST .. p_task_id_tbl.LAST LOOP
38661 IF p_task_id_tbl(i) = rec.proj_element_id THEN
38662
38663 UPDATE pa_tasks
38664 SET service_type_code = nvl(p_service_type_code_tbl(i),service_type_code), -- 7525628
38665 chargeable_flag = nvl(p_chargeable_flag_tbl(i),chargeable_flag), -- 7525628
38666 billable_flag = nvl(p_billable_flag_tbl(i),billable_flag) -- 7525628
38667 WHERE task_id = p_task_id_tbl(i);
38668 EXIT;
38669
38670
38671 END IF;
38672 END LOOP;
38673 END LOOP;
38674
38675 x_return_status := FND_API.G_RET_STS_SUCCESS;
38676
38677 EXCEPTION
38678
38679 WHEN FND_API.G_EXC_ERROR THEN
38680
38681 x_return_status := FND_API.G_RET_STS_ERROR;
38682
38683
38684 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
38685
38686 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38687
38688 WHEN OTHERS THEN
38689
38690 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
38691
38692 IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
38693 THEN
38694 FND_MSG_PUB.add_exc_msg
38695 ( p_pkg_name => G_PKG_NAME
38696 , p_procedure_name => l_api_name );
38697
38698 END IF;
38699
38700 END UPDATE_FINANCIAL_ATTRIBUTES;
38701 --End of fix for Bug 7525628
38702
38703 -- Added BULK_UPDATE_TASKS_LITE api for Huawei enhancement bug 13923366 by skkoppul
38704 PROCEDURE BULK_UPDATE_TASKS_LITE
38705 ( p_api_version_number IN NUMBER
38706 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
38707 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
38708 ,x_msg_count OUT NOCOPY NUMBER
38709 ,x_msg_data OUT NOCOPY VARCHAR2
38710 ,x_return_status OUT NOCOPY VARCHAR2
38711 ,p_project_id IN NUMBER
38712 ,p_tasks_in IN pa_project_pub.lite_task_in_tbl_type
38713 ,p_pass_entire_structure IN VARCHAR2
38714 ,p_pm_product_code IN VARCHAR2
38715 ,p_bulk_update_mode IN VARCHAR2 := 'ALL' -- other possible value is 'NO_DATES'
38716 ,p_op_validate_flag IN VARCHAR2 := 'N'
38717 ,p_update_mode IN VARCHAR2 := 'PA_UPD_WBS_ATTR'
38718 ) IS
38719
38720 --variables needed for API standard parameters
38721 l_return_status VARCHAR2(1);
38722 l_msg_count NUMBER;
38723 l_msg_data VARCHAR2(2000);
38724
38725 CURSOR get_project_details_csr (c_project_id NUMBER) IS
38726 SELECT project_id, name, segment1, pm_project_reference,
38727 start_date, completion_date, project_type, structure_sharing_code
38728 FROM PA_PROJECTS_ALL
38729 WHERE project_id = c_project_id;
38730
38731 CURSOR get_task_details_csr (c_project_id NUMBER) IS
38732 SELECT element_version_id,proj_element_id,display_sequence,wbs_level,wbs_number
38733 FROM pa_proj_element_versions
38734 WHERE project_id = p_project_id
38735 AND object_type = 'PA_TASKS'
38736 ORDER BY display_sequence;
38737
38738 l_project_details_rec get_project_details_csr%ROWTYPE;
38739 l_project_in_rec pa_project_pub.project_in_rec_type;
38740 l_project_out_rec pa_project_pub.project_out_rec_type;
38741 l_tasks_in pa_project_pub.task_in_tbl_type;
38742 l_tasks_out pa_project_pub.task_out_tbl_type;
38743 l_workflow_started VARCHAR2(1);
38744 l_first_index NUMBER;
38745 l_last_index NUMBER;
38746 l_count NUMBER;
38747 l_structure_version_id NUMBER;
38748 message varchar2(2000);
38749 t_str varchar2(1);
38750 BEGIN
38751
38752 SAVEPOINT BULK_UPDATE_TASKS_LITE;
38753
38754 /* Added below block to ensure that the new API's are controlled by Dev*/
38755 begin
38756 select 'x' into t_str
38757 from pji_system_parameters
38758 where name = 'BULK_LITE'
38759 and value = 'Y';
38760
38761 exception
38762 when no_data_found then
38763 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
38764 p_msg_name => 'PA_LITE_API_CANT_USE');
38765 RAISE FND_API.G_EXC_ERROR;
38766 when others then
38767
38768 raise;
38769 end;
38770
38771 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
38772 FND_MSG_PUB.Initialize;
38773 END IF;
38774
38775 OPEN get_project_details_csr (p_project_id);
38776 FETCH get_project_details_csr INTO l_project_details_rec;
38777 CLOSE get_project_details_csr;
38778
38779 --IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id),' ') <> 'SHARE_FULL'
38780 IF NVL(l_project_details_rec.structure_sharing_code,' ') <> 'SHARE_FULL'
38781 OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id),'N') = 'Y' THEN
38782 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
38783 p_msg_name => 'PA_CANT_USE_LITE_API');
38784 RAISE FND_API.G_EXC_ERROR;
38785 END IF;
38786
38787 l_project_in_rec.pm_project_reference := l_project_details_rec.pm_project_reference;
38788 l_project_in_rec.pa_project_number := l_project_details_rec.segment1;
38789 l_project_in_rec.project_name := l_project_details_rec.name;
38790 l_project_in_rec.pa_project_id := p_project_id;
38791 l_project_in_rec.process_mode := 'CONCURRENT';
38792
38793 PA_PROJECT_PUB.G_MASS_UPDATE_TASKS := 'Y';
38794 PA_PROJECT_PUB.G_UPDATE_TASK_ALLOWED := NULL;
38795 PA_PROJECT_PUB.G_UPDATE_PRJ_ALLOWED := NULL;
38796 PA_PROJECT_PUB.G_VALID_PRODUCT_CODE := NULL;
38797 PA_PROJECT_PUB.G_SEGMENT1 := l_project_details_rec.segment1;
38798 PA_PROJECT_PUB.G_PROJ_START_DATE := l_project_details_rec.start_date;
38799 PA_PROJECT_PUB.G_PROJ_COMPLETION_DATE := l_project_details_rec.completion_date;
38800 PA_PROJECT_PUB.G_STRUC_ELEMENT_ID := NULL;
38801 PA_PROJECT_PUB.G_PROJECT_TYPE := l_project_details_rec.project_type;
38802 PA_PROJECT_PUB.G_IS_SUB_PROJ_ASSOCIATED := NULL;
38803 PA_PROJECT_PUB.G_BULK_UPDATE_MODE := p_bulk_update_mode;
38804
38805 -- Set the G_ROLLUP_FLAG based on profile options
38806 PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
38807 l_structure_version_id := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id);
38808 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38809 PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'UPDATE',l_msg_data,l_return_status);
38810 IF l_return_status <> 'S'
38811 THEN
38812 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
38813 p_msg_name =>'PA_CANT_USE_LITE_API' );
38814 RAISE FND_API.G_EXC_ERROR;
38815 ELSE
38816 PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_project_id,l_structure_version_id,'UPDATE');
38817 END IF;
38818 END IF;
38819
38820
38821 PA_PROJECT_PUB.G_FP_DFF_TBL.delete;
38822 l_first_index := p_tasks_in.first;
38823 l_last_index := p_tasks_in.last;
38824 l_count := 0;
38825 FOR j IN l_first_index..l_last_index LOOP
38826 l_count := l_count + 1;
38827
38828 IF p_tasks_in(j).tasks_dff = 'B' THEN
38829 G_FP_DFF_TBL(l_count).pa_task_id := p_tasks_in(j).pa_task_id;
38830 G_FP_DFF_TBL(l_count).pa_task_name := p_tasks_in(j).task_name;
38831 G_FP_DFF_TBL(l_count).pm_task_reference := p_tasks_in(j).pm_task_reference;
38832 G_FP_DFF_TBL(l_count).attribute_category := p_tasks_in(j).fp_attribute_category;
38833 G_FP_DFF_TBL(l_count).attribute1 := p_tasks_in(j).fp_attribute1;
38834 G_FP_DFF_TBL(l_count).attribute2 := p_tasks_in(j).fp_attribute2;
38835 G_FP_DFF_TBL(l_count).attribute3 := p_tasks_in(j).fp_attribute3;
38836 G_FP_DFF_TBL(l_count).attribute4 := p_tasks_in(j).fp_attribute4;
38837 G_FP_DFF_TBL(l_count).attribute5 := p_tasks_in(j).fp_attribute5;
38838 G_FP_DFF_TBL(l_count).attribute6 := p_tasks_in(j).fp_attribute6;
38839 G_FP_DFF_TBL(l_count).attribute7 := p_tasks_in(j).fp_attribute7;
38840 G_FP_DFF_TBL(l_count).attribute8 := p_tasks_in(j).fp_attribute8;
38841 G_FP_DFF_TBL(l_count).attribute9 := p_tasks_in(j).fp_attribute9;
38842 G_FP_DFF_TBL(l_count).attribute10 := p_tasks_in(j).fp_attribute10;
38843 l_tasks_in(l_count).tasks_dff := 'N';
38844 ELSE
38845 l_tasks_in(l_count).tasks_dff := p_tasks_in(j).tasks_dff;
38846 END IF;
38847
38848 l_tasks_in(l_count).pm_task_reference := p_tasks_in(j).pm_task_reference;
38849 l_tasks_in(l_count).pa_task_id := p_tasks_in(j).pa_task_id;
38850 l_tasks_in(l_count).task_name := p_tasks_in(j).task_name;
38851 l_tasks_in(l_count).long_task_name := p_tasks_in(j).long_task_name;
38852 l_tasks_in(l_count).pa_task_number := p_tasks_in(j).pa_task_number;
38853 l_tasks_in(l_count).task_description := p_tasks_in(j).task_description;
38854 -- we'll not allow customer to change the parent task
38855 l_tasks_in(l_count).pm_parent_task_reference := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR; --p_tasks_in(j).pm_parent_task_reference;
38856 l_tasks_in(l_count).pa_parent_task_id := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM; --p_tasks_in(j).pa_parent_task_id;
38857 -- l_tasks_in(l_count).tasks_dff := p_tasks_in(j).tasks_dff; -- Moved code to top to handle BOTH scenario for Huawei
38858 l_tasks_in(l_count).attribute_category := p_tasks_in(j).attribute_category;
38859 l_tasks_in(l_count).attribute1 := p_tasks_in(j).attribute1;
38860 l_tasks_in(l_count).attribute2 := p_tasks_in(j).attribute2;
38861 l_tasks_in(l_count).attribute3 := p_tasks_in(j).attribute3;
38862 l_tasks_in(l_count).attribute4 := p_tasks_in(j).attribute4;
38863 l_tasks_in(l_count).attribute5 := p_tasks_in(j).attribute5;
38864 l_tasks_in(l_count).attribute6 := p_tasks_in(j).attribute6;
38865 l_tasks_in(l_count).attribute7 := p_tasks_in(j).attribute7;
38866 l_tasks_in(l_count).attribute8 := p_tasks_in(j).attribute8;
38867 l_tasks_in(l_count).attribute9 := p_tasks_in(j).attribute9;
38868 l_tasks_in(l_count).attribute10 := p_tasks_in(j).attribute10;
38869 l_tasks_in(l_count).attribute11 := p_tasks_in(j).attribute11;
38870 l_tasks_in(l_count).attribute12 := p_tasks_in(j).attribute12;
38871 l_tasks_in(l_count).attribute13 := p_tasks_in(j).attribute13;
38872 l_tasks_in(l_count).attribute14 := p_tasks_in(j).attribute14;
38873 l_tasks_in(l_count).attribute15 := p_tasks_in(j).attribute15;
38874 l_tasks_in(l_count).PM_SOURCE_CODE := p_tasks_in(j).PM_SOURCE_CODE;
38875 l_tasks_in(l_count).STATUS_CODE := p_tasks_in(j).STATUS_CODE;
38876
38877 -- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
38878 l_tasks_in(l_count).service_type_code := p_tasks_in(j).service_type_code;
38879 l_tasks_in(l_count).chargeable_flag := p_tasks_in(j).chargeable_flag;
38880 l_tasks_in(l_count).MILESTONE_FLAG := p_tasks_in(j).MILESTONE_FLAG;
38881 l_tasks_in(l_count).PLANNED_WORK_QUANTITY := p_tasks_in(j).PLANNED_WORK_QUANTITY;
38882 l_tasks_in(l_count).TASK_TYPE := p_tasks_in(j).TASK_TYPE;
38883 l_tasks_in(l_count).WQ_UOM_CODE := p_tasks_in(j).WQ_UOM_CODE;
38884 l_tasks_in(l_count).carrying_out_organization_id := p_tasks_in(j).carrying_out_organization_id;
38885 l_tasks_in(l_count).task_manager_person_id := p_tasks_in(j).task_manager_person_id;
38886 l_tasks_in(l_count).work_type_id := p_tasks_in(j).work_type_id;
38887 l_tasks_in(l_count).CRITICAL_FLAG := p_tasks_in(j).CRITICAL_FLAG;
38888 l_tasks_in(l_count).financial_task_flag := p_tasks_in(j).financial_task_flag;
38889
38890 IF p_bulk_update_mode = 'ALL' THEN
38891 l_tasks_in(l_count).task_start_date := p_tasks_in(j).task_start_date;
38892 l_tasks_in(l_count).task_completion_date := p_tasks_in(j).task_completion_date;
38893 l_tasks_in(l_count).actual_start_date := p_tasks_in(j).actual_start_date;
38894 l_tasks_in(l_count).actual_finish_date := p_tasks_in(j).actual_finish_date;
38895 l_tasks_in(l_count).early_start_date := p_tasks_in(j).early_start_date;
38896 l_tasks_in(l_count).early_finish_date := p_tasks_in(j).early_finish_date;
38897 l_tasks_in(l_count).late_start_date := p_tasks_in(j).late_start_date;
38898 l_tasks_in(l_count).late_finish_date := p_tasks_in(j).late_finish_date;
38899 l_tasks_in(l_count).scheduled_start_date := p_tasks_in(j).scheduled_start_date;
38900 l_tasks_in(l_count).scheduled_finish_date:= p_tasks_in(j).scheduled_finish_date;
38901 l_tasks_in(l_count).ESTIMATED_START_DATE := p_tasks_in(j).ESTIMATED_START_DATE;
38902 l_tasks_in(l_count).ESTIMATED_FINISH_DATE:= p_tasks_in(j).ESTIMATED_FINISH_DATE;
38903 l_tasks_in(l_count).BASELINE_START_DATE := p_tasks_in(j).BASELINE_START_DATE;
38904 l_tasks_in(l_count).BASELINE_FINISH_DATE := p_tasks_in(j).BASELINE_FINISH_DATE;
38905 l_tasks_in(l_count).CLOSED_DATE := p_tasks_in(j).CLOSED_DATE;
38906 ELSE
38907 l_tasks_in(l_count).task_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38908 l_tasks_in(l_count).task_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38909 l_tasks_in(l_count).actual_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38910 l_tasks_in(l_count).actual_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38911 l_tasks_in(l_count).early_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38912 l_tasks_in(l_count).early_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38913 l_tasks_in(l_count).late_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38914 l_tasks_in(l_count).late_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38915 l_tasks_in(l_count).scheduled_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38916 l_tasks_in(l_count).scheduled_finish_date:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38917 l_tasks_in(l_count).ESTIMATED_START_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38918 l_tasks_in(l_count).ESTIMATED_FINISH_DATE:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38919 l_tasks_in(l_count).BASELINE_START_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38920 l_tasks_in(l_count).BASELINE_FINISH_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38921 l_tasks_in(l_count).CLOSED_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
38922 END IF;
38923 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38924 PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,p_tasks_in(j).pa_task_id,l_structure_version_id,'UPDATE');
38925 END IF;
38926 END LOOP;
38927
38928 pa_project_pub.update_project(p_api_version_number => p_api_version_number,
38929 p_commit => p_commit,
38930 p_init_msg_list => p_init_msg_list,
38931 p_msg_count => l_msg_count,
38932 p_msg_data => l_msg_data,
38933 p_return_status => l_return_status,
38934 p_workflow_started => l_workflow_started,
38935 p_pm_product_code => p_pm_product_code,
38936 p_project_in => l_project_in_rec,
38937 p_project_out => l_project_out_rec,
38938 p_tasks_in => l_tasks_in,
38939 p_tasks_out => l_tasks_out,
38940 p_op_validate_flag => p_op_validate_flag,
38941 p_pass_entire_structure => p_pass_entire_structure,
38942 p_update_mode => p_update_mode);
38943 IF l_return_status <> 'S' THEN
38944 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
38945 p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
38946 RAISE FND_API.G_EXC_ERROR;
38947 END IF;
38948 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38949 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
38950 END IF;
38951 -- reset all global variables with NULL
38952 PA_PROJECT_PUB.G_MASS_UPDATE_TASKS := NULL;
38953 PA_PROJECT_PUB.G_UPDATE_TASK_ALLOWED := NULL;
38954 PA_PROJECT_PUB.G_UPDATE_PRJ_ALLOWED := NULL;
38955 PA_PROJECT_PUB.G_VALID_PRODUCT_CODE := NULL;
38956 PA_PROJECT_PUB.G_SEGMENT1 := NULL;
38957 PA_PROJECT_PUB.G_PROJ_START_DATE := NULL;
38958 PA_PROJECT_PUB.G_PROJ_COMPLETION_DATE := NULL;
38959 PA_PROJECT_PUB.G_STRUC_ELEMENT_ID := NULL;
38960 PA_PROJECT_PUB.G_PROJECT_TYPE := NULL;
38961 PA_PROJECT_PUB.G_IS_SUB_PROJ_ASSOCIATED := NULL;
38962 PA_PROJECT_PUB.G_BULK_UPDATE_MODE := NULL;
38963
38964 PA_PROJECT_PUB.G_FP_DFF_TBL.delete;
38965
38966 IF (FND_API.to_boolean( p_commit )) THEN
38967 COMMIT WORK;
38968 END IF;
38969 x_return_status := FND_API.G_RET_STS_SUCCESS;
38970
38971 EXCEPTION
38972 WHEN FND_API.G_EXC_ERROR THEN
38973 x_return_status := FND_API.G_RET_STS_ERROR ;
38974 ROLLBACK TO BULK_UPDATE_TASKS_LITE;
38975
38976 FND_MSG_PUB.Count_And_Get
38977 ( p_count => x_msg_count ,
38978 p_data => x_msg_data );
38979 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38980 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
38981 END IF;
38982
38983 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
38984 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
38985 ROLLBACK TO BULK_UPDATE_TASKS_LITE;
38986
38987 FND_MSG_PUB.Count_And_Get
38988 ( p_count => x_msg_count ,
38989 p_data => x_msg_data );
38990
38991 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
38992 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
38993 END IF;
38994
38995 WHEN OTHERS THEN
38996 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
38997 ROLLBACK TO BULK_UPDATE_TASKS_LITE;
38998
38999 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
39000 FND_MSG_PUB.add_exc_msg
39001 ( p_pkg_name => G_PKG_NAME
39002 , p_procedure_name => 'BULK_UPDATE_TASKS_LITE');
39003 END IF;
39004
39005 FND_MSG_PUB.Count_And_Get
39006 ( p_count => x_msg_count ,
39007 p_data => x_msg_data );
39008
39009 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39010 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39011 END IF;
39012
39013 END BULK_UPDATE_TASKS_LITE;
39014
39015 -- Added BULK_ADD_TASKS_LITE api for Huawei enhancement bug 13923366 by skkoppul
39016 PROCEDURE BULK_ADD_TASKS_LITE
39017 ( p_api_version_number IN NUMBER
39018 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
39019 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
39020 ,x_msg_count OUT NOCOPY NUMBER
39021 ,x_msg_data OUT NOCOPY VARCHAR2
39022 ,x_return_status OUT NOCOPY VARCHAR2
39023 ,p_project_id IN NUMBER
39024 ,p_tasks_in IN pa_project_pub.lite_task_in_tbl_type
39025 ,p_pass_entire_structure IN VARCHAR2
39026 ,p_pm_product_code IN VARCHAR2
39027 ,p_bulk_add_mode IN VARCHAR2 := 'ALL' -- other possible value is 'NO_DATES'
39028 ,p_op_validate_flag IN VARCHAR2 := 'N'
39029 ,p_update_mode IN VARCHAR2 := 'PA_UPD_WBS_ATTR'
39030 ,p_tasks_out OUT NOCOPY pa_project_pub.task_out_tbl_type
39031 ) IS
39032
39033 --variables needed for API standard parameters
39034 l_return_status VARCHAR2(1);
39035 l_msg_count NUMBER;
39036 l_msg_data VARCHAR2(2000);
39037
39038 CURSOR get_project_details_csr (c_project_id NUMBER) IS
39039 SELECT project_id, name, segment1, pm_project_reference,
39040 start_date, completion_date, project_type, structure_sharing_code
39041 FROM PA_PROJECTS_ALL
39042 WHERE project_id = c_project_id;
39043
39044 CURSOR check_tasks_exists_csr(c_project_id NUMBER) IS
39045 SELECT 'Y'
39046 FROM pa_tasks
39047 WHERE project_id = c_project_id
39048 AND ROWNUM = 1;
39049
39050 l_project_details_rec get_project_details_csr%ROWTYPE;
39051 l_project_in_rec pa_project_pub.project_in_rec_type;
39052 l_project_out_rec pa_project_pub.project_out_rec_type;
39053 l_tasks_in pa_project_pub.task_in_tbl_type;
39054 l_tasks_out pa_project_pub.task_out_tbl_type;
39055 l_workflow_started VARCHAR2(1);
39056 l_first_index NUMBER;
39057 l_last_index NUMBER;
39058 l_count NUMBER;
39059 l_incremental_add_tasks VARCHAR2(1);
39060 l_task_id NUMBER(15);
39061 l_project_number VARCHAR2(25);
39062 o_project_id NUMBER(15);
39063 l_tasks_dff VARCHAR(1);
39064 message varchar2(2000);
39065 t_str varchar2(1);
39066
39067 BEGIN
39068 SAVEPOINT BULK_ADD_TASKS_LITE;
39069
39070 /* Added below block to ensure that the new API's are controlled by Dev*/
39071 begin
39072 select 'x' into t_str
39073 from pji_system_parameters
39074 where name = 'BULK_LITE'
39075 and value = 'Y';
39076
39077 exception
39078 when no_data_found then
39079 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39080 p_msg_name => 'PA_LITE_API_CANT_USE');
39081 RAISE FND_API.G_EXC_ERROR;
39082 when others then
39083
39084 raise;
39085 end;
39086
39087 IF FND_API.TO_BOOLEAN( p_init_msg_list ) THEN
39088 FND_MSG_PUB.Initialize;
39089 END IF;
39090
39091 OPEN get_project_details_csr (p_project_id);
39092 FETCH get_project_details_csr INTO l_project_details_rec;
39093 CLOSE get_project_details_csr;
39094
39095 OPEN check_tasks_exists_csr (p_project_id);
39096 FETCH check_tasks_exists_csr INTO l_incremental_add_tasks;
39097 IF check_tasks_exists_csr%NOTFOUND THEN
39098 l_incremental_add_tasks := 'N';
39099 END IF;
39100 CLOSE check_tasks_exists_csr;
39101
39102 --IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id),' ') <> 'SHARE_FULL'
39103 IF NVL(l_project_details_rec.structure_sharing_code,' ') <> 'SHARE_FULL'
39104 OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id),'N') = 'Y' THEN
39105 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39106 p_msg_name => 'PA_CANT_USE_LITE_API');
39107 RAISE FND_API.G_EXC_ERROR;
39108 END IF;
39109
39110 PA_PROJECT_PUB.G_MASS_ADD_TASKS := 'Y';
39111 PA_PROJECT_PUB.G_UPDATE_TASK_ALLOWED := NULL;
39112 PA_PROJECT_PUB.G_UPDATE_PRJ_ALLOWED := NULL;
39113 PA_PROJECT_PUB.G_VALID_PRODUCT_CODE := NULL;
39114 PA_PROJECT_PUB.G_SEGMENT1 := l_project_details_rec.segment1;
39115 PA_PROJECT_PUB.G_PROJ_START_DATE := l_project_details_rec.start_date;
39116 PA_PROJECT_PUB.G_PROJ_COMPLETION_DATE := l_project_details_rec.completion_date;
39117 PA_PROJECT_PUB.G_STRUC_ELEMENT_ID := NULL;
39118 PA_PROJECT_PUB.G_PROJECT_TYPE := l_project_details_rec.project_type;
39119 PA_PROJECT_PUB.G_IS_SUB_PROJ_ASSOCIATED := NULL;
39120 PA_PROJECT_PUB.G_BULK_ADD_MODE := p_bulk_add_mode;
39121 PA_PROJECT_PUB.G_STRUC_VERSION_ID := PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_project_id);
39122 PA_PROJECT_PUB.G_FP_DFF_TBL.delete;
39123
39124 -- Set the G_ROLLUP_FLAG based on profile options
39125 PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
39126 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39127 IF l_incremental_add_tasks = 'Y' THEN
39128 PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'ADD',l_msg_data,l_return_status);
39129 ELSE
39130 PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'ADD_F',l_msg_data,l_return_status);
39131 END IF;
39132 IF l_return_status <> 'S'
39133 THEN
39134 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39135 p_msg_name =>l_msg_data );
39136 RAISE FND_API.G_EXC_ERROR;
39137 ELSE
39138 PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_project_id,PA_PROJECT_PUB.G_STRUC_VERSION_ID,'ADD');
39139 END IF;
39140 END IF;
39141
39142 IF l_incremental_add_tasks = 'Y' THEN
39143
39144 l_first_index := p_tasks_in.first;
39145 l_last_index := p_tasks_in.last;
39146
39147 IF p_bulk_add_mode = 'ALL' THEN
39148 FOR j IN l_first_index..l_last_index LOOP
39149
39150 IF p_tasks_in(j).tasks_dff = 'B' THEN
39151 G_FP_DFF_TBL(1).pa_task_name := p_tasks_in(j).task_name;
39152 G_FP_DFF_TBL(1).pm_task_reference := p_tasks_in(j).pm_task_reference;
39153 G_FP_DFF_TBL(1).attribute_category := p_tasks_in(j).fp_attribute_category;
39154 G_FP_DFF_TBL(1).attribute1 := p_tasks_in(j).fp_attribute1;
39155 G_FP_DFF_TBL(1).attribute2 := p_tasks_in(j).fp_attribute2;
39156 G_FP_DFF_TBL(1).attribute3 := p_tasks_in(j).fp_attribute3;
39157 G_FP_DFF_TBL(1).attribute4 := p_tasks_in(j).fp_attribute4;
39158 G_FP_DFF_TBL(1).attribute5 := p_tasks_in(j).fp_attribute5;
39159 G_FP_DFF_TBL(1).attribute6 := p_tasks_in(j).fp_attribute6;
39160 G_FP_DFF_TBL(1).attribute7 := p_tasks_in(j).fp_attribute7;
39161 G_FP_DFF_TBL(1).attribute8 := p_tasks_in(j).fp_attribute8;
39162 G_FP_DFF_TBL(1).attribute9 := p_tasks_in(j).fp_attribute9;
39163 G_FP_DFF_TBL(1).attribute10 := p_tasks_in(j).fp_attribute10;
39164 l_tasks_dff := 'N';
39165 ELSE
39166 l_tasks_dff := p_tasks_in(j).tasks_dff;
39167 END IF;
39168
39169 pa_project_pub.add_task(
39170 p_api_version_number => p_api_version_number
39171 ,p_commit => p_commit
39172 ,p_init_msg_list => p_init_msg_list
39173 ,p_msg_count => l_msg_count --Out
39174 ,p_msg_data => l_msg_data --Out
39175 ,p_return_status => l_return_status --Out
39176 ,p_pm_product_code => p_pm_product_code
39177 ,p_pa_project_id => p_project_id
39178 ,p_pm_task_reference => p_tasks_in(j).pm_task_reference
39179 ,p_pa_task_number => p_tasks_in(j).pa_task_number
39180 ,p_task_name => p_tasks_in(j).task_name
39181 ,p_long_task_name => p_tasks_in(j).long_task_name
39182 ,p_task_description => p_tasks_in(j).task_description
39183 ,p_pm_parent_task_reference => p_tasks_in(j).pm_parent_task_reference
39184 ,p_pa_parent_task_id => p_tasks_in(j).pa_parent_task_id
39185 ,p_tasks_dff => l_tasks_dff
39186 ,p_attribute_category => p_tasks_in(j).attribute_category
39187 ,p_attribute1 => p_tasks_in(j).attribute1
39188 ,p_attribute2 => p_tasks_in(j).attribute2
39189 ,p_attribute3 => p_tasks_in(j).attribute3
39190 ,p_attribute4 => p_tasks_in(j).attribute4
39191 ,p_attribute5 => p_tasks_in(j).attribute5
39192 ,p_attribute6 => p_tasks_in(j).attribute6
39193 ,p_attribute7 => p_tasks_in(j).attribute7
39194 ,p_attribute8 => p_tasks_in(j).attribute8
39195 ,p_attribute9 => p_tasks_in(j).attribute9
39196 ,p_attribute10 => p_tasks_in(j).attribute10
39197 ,p_attribute11 => p_tasks_in(j).attribute11
39198 ,p_attribute12 => p_tasks_in(j).attribute12
39199 ,p_attribute13 => p_tasks_in(j).attribute13
39200 ,p_attribute14 => p_tasks_in(j).attribute14
39201 ,p_attribute15 => p_tasks_in(j).attribute15
39202 ,P_PM_SOURCE_CODE => p_tasks_in(j).PM_SOURCE_CODE
39203 ,P_STATUS_CODE => p_tasks_in(j).STATUS_CODE
39204 -- All dates attributes start from here
39205 ,p_task_start_date => p_tasks_in(j).task_start_date
39206 ,p_task_completion_date => p_tasks_in(j).task_completion_date
39207 ,p_actual_start_date => p_tasks_in(j).actual_start_date
39208 ,p_actual_finish_date => p_tasks_in(j).actual_finish_date
39209 ,p_early_start_date => p_tasks_in(j).early_start_date
39210 ,p_early_finish_date => p_tasks_in(j).early_finish_date
39211 ,p_late_start_date => p_tasks_in(j).late_start_date
39212 ,p_late_finish_date => p_tasks_in(j).late_finish_date
39213 ,p_scheduled_start_date => p_tasks_in(j).scheduled_start_date
39214 ,p_scheduled_finish_date => p_tasks_in(j).scheduled_finish_date
39215 ,P_ESTIMATED_START_DATE => p_tasks_in(j).ESTIMATED_START_DATE
39216 ,P_ESTIMATED_FINISH_DATE => p_tasks_in(j).ESTIMATED_FINISH_DATE
39217 ,P_BASELINE_START_DATE => p_tasks_in(j).BASELINE_START_DATE
39218 ,P_BASELINE_FINISH_DATE => p_tasks_in(j).BASELINE_FINISH_DATE
39219 ,P_CLOSED_DATE => p_tasks_in(j).CLOSED_DATE
39220 ,p_structure_version_id => PA_PROJECT_PUB.G_STRUC_VERSION_ID
39221 ,p_pa_project_id_out => o_project_id --OUT
39222 ,p_pa_project_number_out => l_project_number --OUT
39223 ,p_task_id => l_task_id--OUT
39224 ,p_process_mode => 'CONCURRENT'
39225 ,p_structure_updates_flag => 'N'
39226 ,p_op_validate_flag => p_op_validate_flag,
39227 -- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
39228 p_service_type_code => p_tasks_in(j).service_type_code,
39229 p_chargeable_flag => p_tasks_in(j).chargeable_flag,
39230 p_MILESTONE_FLAG => p_tasks_in(j).MILESTONE_FLAG,
39231 p_PLANNED_WORK_QUANTITY => p_tasks_in(j).PLANNED_WORK_QUANTITY,
39232 p_TASK_TYPE => p_tasks_in(j).TASK_TYPE,
39233 p_WQ_UOM_CODE => p_tasks_in(j).WQ_UOM_CODE,
39234 p_carrying_out_organization_id => p_tasks_in(j).carrying_out_organization_id,
39235 p_task_manager_person_id => p_tasks_in(j).task_manager_person_id,
39236 p_work_type_id => p_tasks_in(j).work_type_id,
39237 p_CRITICAL_FLAG => p_tasks_in(j).CRITICAL_FLAG,
39238 p_financial_task_flag => p_tasks_in(j).financial_task_flag
39239 );
39240 IF l_return_status <> 'S' THEN
39241 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39242 p_msg_name => 'PA_ERROR_ADDING_TASKS');
39243 RAISE FND_API.G_EXC_ERROR;
39244 ELSE
39245 IF(p_commit=FND_API.G_TRUE) THEN
39246 commit;
39247 SAVEPOINT BULK_ADD_TASKS_LITE;
39248 END IF;
39249 p_tasks_out(j).pa_task_id:=l_task_id;
39250
39251 END IF;
39252 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39253 PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,l_task_id,PA_PROJECT_PUB.G_STRUC_VERSION_ID,'ADD_INC');
39254 END IF;
39255 END LOOP;
39256
39257 ELSE -- NON_DATES scenario while adding tasking incrementally
39258 FOR j IN l_first_index..l_last_index LOOP
39259
39260 IF p_tasks_in(j).tasks_dff = 'B' THEN
39261 G_FP_DFF_TBL(1).pa_task_name := p_tasks_in(j).task_name;
39262 G_FP_DFF_TBL(1).pm_task_reference := p_tasks_in(j).pm_task_reference;
39263 G_FP_DFF_TBL(1).attribute_category := p_tasks_in(j).fp_attribute_category;
39264 G_FP_DFF_TBL(1).attribute1 := p_tasks_in(j).fp_attribute1;
39265 G_FP_DFF_TBL(1).attribute2 := p_tasks_in(j).fp_attribute2;
39266 G_FP_DFF_TBL(1).attribute3 := p_tasks_in(j).fp_attribute3;
39267 G_FP_DFF_TBL(1).attribute4 := p_tasks_in(j).fp_attribute4;
39268 G_FP_DFF_TBL(1).attribute5 := p_tasks_in(j).fp_attribute5;
39269 G_FP_DFF_TBL(1).attribute6 := p_tasks_in(j).fp_attribute6;
39270 G_FP_DFF_TBL(1).attribute7 := p_tasks_in(j).fp_attribute7;
39271 G_FP_DFF_TBL(1).attribute8 := p_tasks_in(j).fp_attribute8;
39272 G_FP_DFF_TBL(1).attribute9 := p_tasks_in(j).fp_attribute9;
39273 G_FP_DFF_TBL(1).attribute10 := p_tasks_in(j).fp_attribute10;
39274 l_tasks_dff := 'N';
39275 ELSE
39276 l_tasks_dff := p_tasks_in(j).tasks_dff;
39277 END IF;
39278
39279 pa_project_pub.add_task(
39280 p_api_version_number => p_api_version_number
39281 ,p_commit => p_commit
39282 ,p_init_msg_list => p_init_msg_list
39283 ,p_msg_count => l_msg_count --Out
39284 ,p_msg_data => l_msg_data --Out
39285 ,p_return_status => l_return_status --Out
39286 ,p_pm_product_code => p_pm_product_code
39287 ,p_pa_project_id => p_project_id
39288 ,p_pm_task_reference => p_tasks_in(j).pm_task_reference
39289 ,p_pa_task_number => p_tasks_in(j).pa_task_number
39290 ,p_task_name => p_tasks_in(j).task_name
39291 ,p_long_task_name => p_tasks_in(j).long_task_name
39292 ,p_task_description => p_tasks_in(j).task_description
39293 ,p_pm_parent_task_reference => p_tasks_in(j).pm_parent_task_reference
39294 ,p_pa_parent_task_id => p_tasks_in(j).pa_parent_task_id
39295 ,p_tasks_dff => l_tasks_dff
39296 ,p_attribute_category => p_tasks_in(j).attribute_category
39297 ,p_attribute1 => p_tasks_in(j).attribute1
39298 ,p_attribute2 => p_tasks_in(j).attribute2
39299 ,p_attribute3 => p_tasks_in(j).attribute3
39300 ,p_attribute4 => p_tasks_in(j).attribute4
39301 ,p_attribute5 => p_tasks_in(j).attribute5
39302 ,p_attribute6 => p_tasks_in(j).attribute6
39303 ,p_attribute7 => p_tasks_in(j).attribute7
39304 ,p_attribute8 => p_tasks_in(j).attribute8
39305 ,p_attribute9 => p_tasks_in(j).attribute9
39306 ,p_attribute10 => p_tasks_in(j).attribute10
39307 ,p_attribute11 => p_tasks_in(j).attribute11
39308 ,p_attribute12 => p_tasks_in(j).attribute12
39309 ,p_attribute13 => p_tasks_in(j).attribute13
39310 ,p_attribute14 => p_tasks_in(j).attribute14
39311 ,p_attribute15 => p_tasks_in(j).attribute15
39312 ,P_PM_SOURCE_CODE => p_tasks_in(j).PM_SOURCE_CODE
39313 ,P_STATUS_CODE => p_tasks_in(j).STATUS_CODE
39314 ,p_structure_version_id => PA_PROJECT_PUB.G_STRUC_VERSION_ID
39315 ,p_pa_project_id_out => o_project_id --OUT
39316 ,p_pa_project_number_out => l_project_number --OUT
39317 ,p_task_id => l_task_id--OUT
39318 ,p_process_mode => 'CONCURRENT'
39319 ,p_structure_updates_flag => 'N'
39320 ,p_op_validate_flag => p_op_validate_flag,
39321 -- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
39322 p_service_type_code => p_tasks_in(j).service_type_code,
39323 p_chargeable_flag => p_tasks_in(j).chargeable_flag,
39324 p_MILESTONE_FLAG => p_tasks_in(j).MILESTONE_FLAG,
39325 p_PLANNED_WORK_QUANTITY => p_tasks_in(j).PLANNED_WORK_QUANTITY,
39326 p_TASK_TYPE => p_tasks_in(j).TASK_TYPE,
39327 p_WQ_UOM_CODE => p_tasks_in(j).WQ_UOM_CODE,
39328 p_carrying_out_organization_id => p_tasks_in(j).carrying_out_organization_id,
39329 p_task_manager_person_id => p_tasks_in(j).task_manager_person_id,
39330 p_work_type_id => p_tasks_in(j).work_type_id,
39331 p_CRITICAL_FLAG => p_tasks_in(j).CRITICAL_FLAG,
39332 p_financial_task_flag => p_tasks_in(j).financial_task_flag
39333 );
39334 IF l_return_status <> 'S' THEN
39335 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39336 p_msg_name => 'PA_ERROR_ADDING_TASKS');
39337 RAISE FND_API.G_EXC_ERROR;
39338 ELSE
39339 IF(p_commit=FND_API.G_TRUE) THEN
39340 commit;
39341 SAVEPOINT BULK_ADD_TASKS_LITE;
39342 END IF;
39343 p_tasks_out(j).pa_task_id:=l_task_id;
39344
39345 END IF;
39346 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39347 PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,l_task_id,PA_PROJECT_PUB.G_STRUC_VERSION_ID,'ADD_INC');
39348 END IF;
39349 END LOOP;
39350
39351 END IF;
39352
39353
39354
39355 ELSE -- First time adding new tasks
39356
39357 --PA_PROJECT_PUB.G_ROLLUP_DEFER:='N'; -- Defer flag should be N while adding task for the first time
39358
39359 l_project_in_rec.pm_project_reference := l_project_details_rec.pm_project_reference;
39360 l_project_in_rec.pa_project_number := l_project_details_rec.segment1;
39361 l_project_in_rec.project_name := l_project_details_rec.name;
39362 l_project_in_rec.pa_project_id := p_project_id;
39363 l_project_in_rec.process_mode := 'CONCURRENT';
39364
39365 l_first_index := p_tasks_in.first;
39366 l_last_index := p_tasks_in.last;
39367 l_count := 0;
39368
39369 FOR j IN l_first_index..l_last_index LOOP
39370 l_count := l_count + 1;
39371
39372 IF p_tasks_in(j).tasks_dff = 'B' THEN
39373 G_FP_DFF_TBL(l_count).pa_task_id := p_tasks_in(j).pa_task_id;
39374 G_FP_DFF_TBL(l_count).pa_task_name := p_tasks_in(j).task_name;
39375 G_FP_DFF_TBL(l_count).pm_task_reference := p_tasks_in(j).pm_task_reference;
39376 G_FP_DFF_TBL(l_count).attribute_category := p_tasks_in(j).fp_attribute_category;
39377 G_FP_DFF_TBL(l_count).attribute1 := p_tasks_in(j).fp_attribute1;
39378 G_FP_DFF_TBL(l_count).attribute2 := p_tasks_in(j).fp_attribute2;
39379 G_FP_DFF_TBL(l_count).attribute3 := p_tasks_in(j).fp_attribute3;
39380 G_FP_DFF_TBL(l_count).attribute4 := p_tasks_in(j).fp_attribute4;
39381 G_FP_DFF_TBL(l_count).attribute5 := p_tasks_in(j).fp_attribute5;
39382 G_FP_DFF_TBL(l_count).attribute6 := p_tasks_in(j).fp_attribute6;
39383 G_FP_DFF_TBL(l_count).attribute7 := p_tasks_in(j).fp_attribute7;
39384 G_FP_DFF_TBL(l_count).attribute8 := p_tasks_in(j).fp_attribute8;
39385 G_FP_DFF_TBL(l_count).attribute9 := p_tasks_in(j).fp_attribute9;
39386 G_FP_DFF_TBL(l_count).attribute10 := p_tasks_in(j).fp_attribute10;
39387 l_tasks_in(l_count).tasks_dff := 'N';
39388 ELSE
39389 l_tasks_in(l_count).tasks_dff := p_tasks_in(j).tasks_dff;
39390 END IF;
39391 l_tasks_in(l_count).pm_task_reference := p_tasks_in(j).pm_task_reference;
39392 l_tasks_in(l_count).pa_task_id := p_tasks_in(j).pa_task_id;
39393 l_tasks_in(l_count).task_name := p_tasks_in(j).task_name;
39394 l_tasks_in(l_count).long_task_name := p_tasks_in(j).long_task_name;
39395 l_tasks_in(l_count).pa_task_number := p_tasks_in(j).pa_task_number;
39396 l_tasks_in(l_count).task_description := p_tasks_in(j).task_description;
39397 l_tasks_in(l_count).pm_parent_task_reference := p_tasks_in(j).pm_parent_task_reference;
39398 l_tasks_in(l_count).pa_parent_task_id := p_tasks_in(j).pa_parent_task_id;
39399 -- l_tasks_in(l_count).tasks_dff := p_tasks_in(j).tasks_dff; Moved code to top to handle BOTH scenario for Huawe
39400 l_tasks_in(l_count).attribute_category := p_tasks_in(j).attribute_category;
39401 l_tasks_in(l_count).attribute1 := p_tasks_in(j).attribute1;
39402 l_tasks_in(l_count).attribute2 := p_tasks_in(j).attribute2;
39403 l_tasks_in(l_count).attribute3 := p_tasks_in(j).attribute3;
39404 l_tasks_in(l_count).attribute4 := p_tasks_in(j).attribute4;
39405 l_tasks_in(l_count).attribute5 := p_tasks_in(j).attribute5;
39406 l_tasks_in(l_count).attribute6 := p_tasks_in(j).attribute6;
39407 l_tasks_in(l_count).attribute7 := p_tasks_in(j).attribute7;
39408 l_tasks_in(l_count).attribute8 := p_tasks_in(j).attribute8;
39409 l_tasks_in(l_count).attribute9 := p_tasks_in(j).attribute9;
39410 l_tasks_in(l_count).attribute10 := p_tasks_in(j).attribute10;
39411 l_tasks_in(l_count).attribute11 := p_tasks_in(j).attribute11;
39412 l_tasks_in(l_count).attribute12 := p_tasks_in(j).attribute12;
39413 l_tasks_in(l_count).attribute13 := p_tasks_in(j).attribute13;
39414 l_tasks_in(l_count).attribute14 := p_tasks_in(j).attribute14;
39415 l_tasks_in(l_count).attribute15 := p_tasks_in(j).attribute15;
39416 l_tasks_in(l_count).PM_SOURCE_CODE := p_tasks_in(j).PM_SOURCE_CODE;
39417 l_tasks_in(l_count).STATUS_CODE := p_tasks_in(j).STATUS_CODE;
39418
39419 -- 14556729:Huawei Code change : Added new parameters for Add and Update Task Lite API.
39420 l_tasks_in(l_count).service_type_code := p_tasks_in(j).service_type_code;
39421 l_tasks_in(l_count).chargeable_flag := p_tasks_in(j).chargeable_flag;
39422 l_tasks_in(l_count).MILESTONE_FLAG := p_tasks_in(j).MILESTONE_FLAG;
39423 l_tasks_in(l_count).PLANNED_WORK_QUANTITY := p_tasks_in(j).PLANNED_WORK_QUANTITY;
39424 l_tasks_in(l_count).TASK_TYPE := p_tasks_in(j).TASK_TYPE;
39425 l_tasks_in(l_count).WQ_UOM_CODE := p_tasks_in(j).WQ_UOM_CODE;
39426 l_tasks_in(l_count).carrying_out_organization_id := p_tasks_in(j).carrying_out_organization_id;
39427 l_tasks_in(l_count).task_manager_person_id := p_tasks_in(j).task_manager_person_id;
39428 l_tasks_in(l_count).work_type_id := p_tasks_in(j).work_type_id;
39429 l_tasks_in(l_count).CRITICAL_FLAG := p_tasks_in(j).CRITICAL_FLAG;
39430 l_tasks_in(l_count).financial_task_flag := p_tasks_in(j).financial_task_flag;
39431
39432 IF p_bulk_add_mode = 'ALL' THEN
39433 l_tasks_in(l_count).task_start_date := p_tasks_in(j).task_start_date;
39434 l_tasks_in(l_count).task_completion_date := p_tasks_in(j).task_completion_date;
39435 l_tasks_in(l_count).actual_start_date := p_tasks_in(j).actual_start_date;
39436 l_tasks_in(l_count).actual_finish_date := p_tasks_in(j).actual_finish_date;
39437 l_tasks_in(l_count).early_start_date := p_tasks_in(j).early_start_date;
39438 l_tasks_in(l_count).early_finish_date := p_tasks_in(j).early_finish_date;
39439 l_tasks_in(l_count).late_start_date := p_tasks_in(j).late_start_date;
39440 l_tasks_in(l_count).late_finish_date := p_tasks_in(j).late_finish_date;
39441 l_tasks_in(l_count).scheduled_start_date := p_tasks_in(j).scheduled_start_date;
39442 l_tasks_in(l_count).scheduled_finish_date:= p_tasks_in(j).scheduled_finish_date;
39443 l_tasks_in(l_count).ESTIMATED_START_DATE := p_tasks_in(j).ESTIMATED_START_DATE;
39444 l_tasks_in(l_count).ESTIMATED_FINISH_DATE:= p_tasks_in(j).ESTIMATED_FINISH_DATE;
39445 l_tasks_in(l_count).BASELINE_START_DATE := p_tasks_in(j).BASELINE_START_DATE;
39446 l_tasks_in(l_count).BASELINE_FINISH_DATE := p_tasks_in(j).BASELINE_FINISH_DATE;
39447 l_tasks_in(l_count).CLOSED_DATE := p_tasks_in(j).CLOSED_DATE;
39448 ELSE
39449 l_tasks_in(l_count).task_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39450 l_tasks_in(l_count).task_completion_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39451 l_tasks_in(l_count).actual_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39452 l_tasks_in(l_count).actual_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39453 l_tasks_in(l_count).early_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39454 l_tasks_in(l_count).early_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39455 l_tasks_in(l_count).late_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39456 l_tasks_in(l_count).late_finish_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39457 l_tasks_in(l_count).scheduled_start_date := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39458 l_tasks_in(l_count).scheduled_finish_date:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39459 l_tasks_in(l_count).ESTIMATED_START_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39460 l_tasks_in(l_count).ESTIMATED_FINISH_DATE:= PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39461 l_tasks_in(l_count).BASELINE_START_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39462 l_tasks_in(l_count).BASELINE_FINISH_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39463 l_tasks_in(l_count).CLOSED_DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE;
39464 END IF;
39465
39466 END LOOP;
39467
39468 pa_project_pub.update_project(p_api_version_number => p_api_version_number,
39469 p_commit => p_commit,
39470 p_init_msg_list => p_init_msg_list,
39471 p_msg_count => l_msg_count,
39472 p_msg_data => l_msg_data,
39473 p_return_status => l_return_status,
39474 p_workflow_started => l_workflow_started,
39475 p_pm_product_code => p_pm_product_code,
39476 p_project_in => l_project_in_rec,
39477 p_project_out => l_project_out_rec,
39478 p_tasks_in => l_tasks_in,
39479 p_tasks_out => p_tasks_out,
39480 p_op_validate_flag => p_op_validate_flag,
39481 p_pass_entire_structure => p_pass_entire_structure,
39482 p_update_mode => p_update_mode);
39483 IF l_return_status <> 'S' THEN
39484 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39485 p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
39486 RAISE FND_API.G_EXC_ERROR;
39487 END IF;
39488 PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,PA_PROJECT_PUB.G_STRUC_VERSION_ID,PA_PROJECT_PUB.G_STRUC_VERSION_ID,'ADD_FIRST');
39489 --PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39490
39491
39492 END IF; -- add_task or update_project
39493 -- 14556729:Huawei Code change to defer the roll up API when G_ROLLUP_DEFER is set to Y , so that all the roll up is processed once at the end .
39494 IF PA_PROJECT_PUB.G_MASS_ADD_TASKS = 'Y' and NVL(PA_PROJECT_PUB.G_ROLLUP_DEFER,'N') = 'N' then
39495
39496 PA_PROJECT_STRUCTURE_PVT1.REFRESH_STRUCTURE_VERSION
39497 ( p_project_id => p_project_id
39498 ,p_structure_version_id => PA_PROJECT_PUB.G_STRUC_VERSION_ID
39499 ,x_return_status => l_return_status
39500 ,x_msg_count => l_msg_count
39501 ,x_msg_data => l_msg_data
39502 );
39503
39504 IF l_return_status <> 'S' THEN
39505 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39506 p_msg_name => 'PA_ERROR_REFRESHING_STRUCTURE');
39507 RAISE FND_API.G_EXC_ERROR;
39508 END IF;
39509 END IF;
39510
39511 -- reset all global variables with NULL
39512 PA_PROJECT_PUB.G_MASS_ADD_TASKS := NULL;
39513 PA_PROJECT_PUB.G_UPDATE_TASK_ALLOWED := NULL;
39514 PA_PROJECT_PUB.G_UPDATE_PRJ_ALLOWED := NULL;
39515 PA_PROJECT_PUB.G_VALID_PRODUCT_CODE := NULL;
39516 PA_PROJECT_PUB.G_SEGMENT1 := NULL;
39517 PA_PROJECT_PUB.G_PROJ_START_DATE := NULL;
39518 PA_PROJECT_PUB.G_PROJ_COMPLETION_DATE := NULL;
39519 PA_PROJECT_PUB.G_STRUC_ELEMENT_ID := NULL;
39520 PA_PROJECT_PUB.G_PROJECT_TYPE := NULL;
39521 PA_PROJECT_PUB.G_IS_SUB_PROJ_ASSOCIATED := NULL;
39522 PA_PROJECT_PUB.G_BULK_ADD_MODE := NULL;
39523 PA_PROJECT_PUB.G_STRUC_VERSION_ID := NULL;
39524
39525 PA_PROJECT_PUB.G_FP_DFF_TBL.delete;
39526
39527 IF (FND_API.to_boolean( p_commit )) THEN
39528 COMMIT WORK;
39529 END IF;
39530
39531 x_return_status := FND_API.G_RET_STS_SUCCESS;
39532
39533 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39534 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39535 END IF;
39536
39537 EXCEPTION
39538 WHEN FND_API.G_EXC_ERROR THEN
39539 x_return_status := FND_API.G_RET_STS_ERROR ;
39540 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39541 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39542 END IF;
39543 ROLLBACK TO BULK_ADD_TASKS_LITE;
39544
39545 FND_MSG_PUB.Count_And_Get
39546 ( p_count => x_msg_count ,
39547 p_data => x_msg_data );
39548
39549
39550 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
39551 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
39552 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39553 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39554 END IF;
39555 ROLLBACK TO BULK_ADD_TASKS_LITE;
39556
39557 FND_MSG_PUB.Count_And_Get
39558 ( p_count => x_msg_count ,
39559 p_data => x_msg_data );
39560
39561
39562 WHEN OTHERS THEN
39563 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
39564 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39565 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
39566 END IF;
39567 ROLLBACK TO BULK_ADD_TASKS_LITE;
39568
39569 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
39570 FND_MSG_PUB.add_exc_msg
39571 ( p_pkg_name => G_PKG_NAME
39572 , p_procedure_name => 'BULK_ADD_TASKS_LITE' );
39573 END IF;
39574
39575 FND_MSG_PUB.Count_And_Get
39576 ( p_count => x_msg_count ,
39577 p_data => x_msg_data );
39578
39579 END BULK_ADD_TASKS_LITE;
39580
39581 -- Added new api BULK_MOVE_TASKS_LITE for Huawei enhancement - bug 13923366 by skkoppul
39582 PROCEDURE BULK_MOVE_TASKS_LITE
39583 ( p_api_version IN NUMBER := 1.0,
39584 p_init_msg_list IN VARCHAR2 := FND_API.G_TRUE,
39585 p_commit IN VARCHAR2 := FND_API.G_FALSE,
39586 p_validate_only IN VARCHAR2 := FND_API.G_TRUE,
39587 p_validation_level IN NUMBER := FND_API.G_VALID_LEVEL_FULL,
39588 p_calling_module IN VARCHAR2 := 'SELF_SERVICE',
39589 p_debug_mode IN VARCHAR2 := 'N',
39590 p_max_msg_count IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
39591 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
39592 p_task_version_id_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
39593 p_ref_task_version_id IN NUMBER,
39594 p_ref_project_id IN NUMBER,
39595 p_peer_or_sub IN VARCHAR2,
39596 p_record_version_number_tbl IN SYSTEM.PA_NUM_TBL_TYPE := SYSTEM.PA_NUM_TBL_TYPE(),
39597 x_return_status OUT NOCOPY VARCHAR2,
39598 x_msg_count OUT NOCOPY NUMBER,
39599 x_msg_data OUT NOCOPY VARCHAR2
39600 )
39601 IS
39602 l_api_name CONSTANT VARCHAR(30) := 'BULK_MOVE_TASKS_LITE';
39603 l_api_version CONSTANT NUMBER := 1.0;
39604
39605 l_return_status VARCHAR2(1);
39606 l_msg_count NUMBER;
39607 l_msg_data VARCHAR2(2000);
39608 l_data VARCHAR2(2000);
39609 l_msg_index_out NUMBER;
39610 l_error_msg_code VARCHAR2(250);
39611
39612 l_delete_project_allowed VARCHAR2(1);
39613 l_update_proj_num_allowed VARCHAR2(1);
39614 l_update_proj_name_allowed VARCHAR2(1);
39615 l_update_proj_desc_allowed VARCHAR2(1);
39616 l_update_proj_dates_allowed VARCHAR2(1);
39617 l_update_proj_status_allowed VARCHAR2(1);
39618 l_update_proj_manager_allowed VARCHAR2(1);
39619 l_update_proj_org_allowed VARCHAR2(1);
39620 l_add_task_allowed VARCHAR2(1);
39621 l_delete_task_allowed VARCHAR2(1);
39622 l_update_task_num_allowed VARCHAR2(1);
39623 l_update_task_name_allowed VARCHAR2(1);
39624 l_update_task_dates_allowed VARCHAR2(1);
39625 l_update_task_desc_allowed VARCHAR2(1);
39626 l_update_parent_task_allowed VARCHAR2(1);
39627 l_update_task_org_allowed VARCHAR2(1);
39628
39629 ref_task_temp_version_id NUMBER;
39630
39631 l_err_code NUMBER := 0;
39632 l_err_stack VARCHAR2(200) := NULL;
39633 l_err_stage VARCHAR2(200) := NULL;
39634
39635 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
39636
39637 l_cur_project_id NUMBER;
39638 CURSOR cur_proj_id
39639 IS
39640 SELECT project_id
39641 FROM pa_proj_element_versions
39642 WHERE element_version_id = p_structure_version_id;
39643
39644 CURSOR get_product_code ( c_project_id NUMBER ) IS
39645 SELECT pm_product_code
39646 FROM PA_PROJECTS_ALL
39647 WHERE project_id = c_project_id;
39648
39649 CURSOR cur_struc_type( c_structure_id NUMBER )
39650 IS
39651 SELECT 'Y'
39652 FROM pa_proj_structure_types ppst
39653 ,pa_structure_types pst
39654 WHERE ppst.proj_element_id = c_structure_id
39655 AND ppst.structure_type_id = pst.structure_type_id
39656 AND pst.structure_type_class_code = 'FINANCIAL' ;
39657
39658 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
39659 select 'Y'
39660 from pa_proj_elem_ver_structure
39661 where proj_element_id = c_structure_id
39662 AND project_id = c_project_id
39663 and STATUS_CODE = 'STRUCTURE_PUBLISHED';
39664
39665 l_versioned VARCHAR2(1) := 'N';
39666 l_shared VARCHAR2(1) := 'N';
39667 l_sharing_code VARCHAR2(30);
39668
39669 l_task_version_id NUMBER;
39670 l_structure_id NUMBER;
39671 l_published_version VARCHAR2(1);
39672 l_wp_type VARCHAR2(1);
39673 l_fin_type VARCHAR2(1);
39674
39675 l_weighting_basis_code VARCHAR2(30);
39676 l_check_third_party_flag VARCHAR2(1);
39677 l_dummy_char VARCHAR2(1);
39678 l_project_id NUMBER;
39679 message varchar2(2000);
39680 t_str varchar2(1);
39681
39682 BEGIN
39683
39684 pa_debug.init_err_stack ('PA_PROJECT_PUB.BULK_MOVE_TASKS_LITE');
39685
39686 x_return_status := FND_API.G_RET_STS_SUCCESS ;
39687
39688
39689
39690 -- Set the G_ROLLUP_FLAG based on profile options
39691 --IF(p_calling_module = 'AMG') THEN
39692 --PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
39693 --END IF;
39694
39695 OPEN cur_proj_id;
39696 FETCH cur_proj_id into l_project_id;
39697 CLOSE cur_proj_id;
39698
39699
39700 IF (p_debug_mode = 'Y') THEN
39701 pa_debug.debug('PA_PROJECT_PUB.BULK_MOVE_TASKS_LITE begin');
39702 END IF;
39703
39704 IF (p_commit = FND_API.G_TRUE) THEN
39705 savepoint BULK_MOVE_TASKS_LITE ;
39706 END IF;
39707
39708 /* Added below block to ensure that the new API's are controlled by Dev*/
39709 begin
39710 select 'x' into t_str
39711 from pji_system_parameters
39712 where name = 'BULK_LITE'
39713 and value = 'Y';
39714
39715 exception
39716 when no_data_found then
39717 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39718 p_msg_name => 'PA_LITE_API_CANT_USE');
39719 RAISE FND_API.G_EXC_ERROR;
39720 when others then
39721
39722 raise;
39723 end;
39724
39725 IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(l_project_id),' ') <> 'SHARE_FULL'
39726 OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id),'N') = 'Y' THEN
39727 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39728 p_msg_name => 'PA_CANT_USE_LITE_API');
39729 RAISE FND_API.G_EXC_ERROR;
39730 END IF;
39731 -- Set the G_ROLLUP_FLAG based on profile options
39732 PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
39733 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39734 PA_PROJECT_PVT.CONC_LOCK_PROJECT(l_project_id,'MOVE',l_msg_data,l_return_status);
39735 IF l_return_status <> 'S'
39736 THEN
39737 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39738 p_msg_name =>l_msg_data );
39739 RAISE FND_API.G_EXC_ERROR;
39740 ELSE
39741 PA_PROJECT_PVT.LOG_ROLLUP_EVENT(l_project_id,p_structure_version_id,'MOVE');
39742 --PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(l_project_id,p_ref_task_version_id,p_structure_version_id,'MOVE');
39743 --Loop through and update log event for all the tasks
39744 for i in 1..p_task_version_id_tbl.count LOOP
39745 PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(l_project_id,p_task_version_id_tbl(i),p_structure_version_id,'MOVE');
39746 END LOOP;
39747 END IF;
39748 END IF;
39749
39750 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
39751 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
39752 END IF;
39753
39754 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
39755 FND_MSG_PUB.initialize;
39756 END IF;
39757 IF p_calling_module = 'SELF_SERVICE' THEN
39758
39759 l_cur_project_id := p_ref_project_id;
39760
39761 OPEN get_product_code(l_cur_project_id);
39762 FETCH get_product_code INTO l_pm_product_code;
39763 CLOSE get_product_code;
39764
39765 If l_pm_product_code IS NOT NULL THEN
39766 pa_pm_controls.Get_Project_actions_allowed
39767 (P_PM_PRODUCT_CODE => l_pm_product_code,
39768 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
39769 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
39770 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
39771 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
39772 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
39773 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
39774 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
39775 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
39776 P_ADD_TASK_ALLOWED => l_add_task_allowed,
39777 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
39778 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
39779 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
39780 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
39781 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
39782 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
39783 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
39784 P_ERROR_CODE => l_err_code,
39785 P_ERROR_STACK => l_err_stack,
39786 P_ERROR_STAGE => l_err_stage );
39787
39788 IF l_err_code <> 0 THEN
39789 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39790 p_msg_name => l_err_stage);
39791 END IF;
39792 IF l_update_parent_task_allowed = 'N' THEN
39793 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
39794 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
39795 raise FND_API.G_EXC_ERROR;
39796 END IF;
39797 End If;
39798
39799 End If; /* End if calling module is self service*/
39800
39801 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(p_ref_project_id);
39802 l_sharing_code := PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_ref_project_id);
39803
39804 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN');
39805 l_fin_type := PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL');
39806
39807 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_ref_project_id);
39808 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_ref_project_id);
39809 l_check_third_party_flag := PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(p_ref_project_id);
39810
39811 IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
39812 l_task_version_id := p_task_version_id_tbl(1);
39813
39814 SELECT proj_element_id INTO l_structure_id
39815 FROM pa_proj_element_versions
39816 WHERE element_version_id = ( Select parent_structure_version_id
39817 from pa_proj_element_versions
39818 where element_version_id = l_task_version_id )
39819 AND object_type = 'PA_STRUCTURES';
39820 OPEN cur_struc_type( l_structure_id );
39821 FETCH cur_struc_type INTO l_dummy_char;
39822
39823 IF cur_struc_type%FOUND
39824 THEN
39825 l_published_version := 'N';
39826 OPEN cur_pub_versions( l_structure_id, p_ref_project_id );
39827 FETCH cur_pub_versions INTO l_published_version;
39828 CLOSE cur_pub_versions;
39829 END IF;
39830
39831 CLOSE cur_struc_type;
39832 END IF;
39833
39834 ref_task_temp_version_id := p_ref_task_version_id;
39835
39836 IF nvl(p_task_version_id_tbl.LAST,0)>0 THEN
39837 FOR i IN p_task_version_id_tbl.FIRST..p_task_version_id_tbl.LAST LOOP
39838 PA_TASK_PUB1.Move_Task_Version(
39839 p_init_msg_list => FND_API.G_FALSE,
39840 p_structure_version_id => p_structure_version_id,
39841 p_task_version_id => p_task_version_id_tbl(i),
39842 p_ref_task_version_id => ref_task_temp_version_id,
39843 p_peer_or_sub => p_peer_or_sub,
39844 p_record_version_number => p_record_version_number_tbl(i),
39845 p_ref_project_id => p_ref_project_id,
39846 p_structure_id => l_structure_id,
39847 p_published_version => l_published_version,
39848 p_shared => l_shared ,
39849 p_sharing_code => l_sharing_code,
39850 p_versioned => l_versioned,
39851 p_wp_type => l_wp_type,
39852 p_fin_type => l_fin_type,
39853 p_weighting_basis_code => l_weighting_basis_code,
39854 p_check_third_party_flag => l_check_third_party_flag,
39855 p_called_from_bulk_api => 'Y',
39856 x_return_status => x_return_status,
39857 x_msg_count => x_msg_count,
39858 x_msg_data => x_msg_data
39859 );
39860 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
39861 RAISE FND_API.G_EXC_ERROR ;
39862 END IF;
39863 ref_task_temp_version_id := p_task_version_id_tbl(i);
39864 END LOOP;
39865
39866 END IF;
39867 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39868 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(l_project_id);
39869 END IF;
39870
39871 IF (p_commit = FND_API.G_TRUE) THEN
39872 COMMIT;
39873 END IF;
39874
39875 EXCEPTION
39876 when FND_API.G_EXC_ERROR then
39877 if p_commit = FND_API.G_TRUE then
39878 rollback to BULK_MOVE_TASKS_LITE;
39879 end if;
39880 x_return_status := FND_API.G_RET_STS_ERROR;
39881 x_msg_count := Fnd_Msg_Pub.count_msg;
39882
39883 IF x_msg_count = 1 AND x_msg_data IS NULL
39884 THEN
39885 Pa_Interface_Utils_Pub.get_messages
39886 ( p_encoded => Fnd_Api.G_FALSE
39887 , p_msg_index => 1
39888 , p_msg_count => l_msg_count
39889 , p_msg_data => l_msg_data
39890 , p_data => l_data
39891 , p_msg_index_out => l_msg_index_out);
39892 x_msg_data := l_data;
39893 END IF;
39894 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39895 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(l_project_id);
39896 END IF;
39897 FND_MSG_PUB.Count_And_Get
39898 ( p_count => x_msg_count ,
39899 p_data => x_msg_data );
39900
39901 when FND_API.G_EXC_UNEXPECTED_ERROR then
39902 if p_commit = FND_API.G_TRUE then
39903 rollback to BULK_MOVE_TASKS_LITE;
39904 end if;
39905 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
39906 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
39907 p_procedure_name => l_api_name,
39908 p_error_text => SUBSTRB(SQLERRM,1,240));
39909 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39910 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(l_project_id);
39911 END IF;
39912 when OTHERS then
39913 if p_commit = FND_API.G_TRUE then
39914 rollback to BULK_MOVE_TASKS_LITE;
39915 end if;
39916 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
39917 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
39918 p_procedure_name => l_api_name,
39919 p_error_text => SUBSTRB(SQLERRM,1,240));
39920 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
39921 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(l_project_id);
39922 END IF;
39923 FND_MSG_PUB.Count_And_Get
39924 ( p_count => x_msg_count ,
39925 p_data => x_msg_data );
39926 raise;
39927 END BULK_MOVE_TASKS_LITE ;
39928
39929 -- Added new api BULK_INDENT_TASKS_LITE for Huawei enhancement - bug 13923366 by skkoppul
39930 PROCEDURE BULK_INDENT_TASKS_LITE (
39931 p_api_version IN NUMBER :=1.0,
39932 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
39933 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
39934 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
39935 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
39936 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
39937 p_debug_mode IN VARCHAR2 :='N',
39938 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
39939 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
39940 p_task_version_id IN NUMBER,
39941 p_project_id IN NUMBER,
39942 p_record_version_number IN NUMBER,
39943 x_return_status OUT NOCOPY VARCHAR2,
39944 x_msg_count OUT NOCOPY NUMBER,
39945 x_msg_data OUT NOCOPY VARCHAR2
39946 ) IS
39947
39948 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
39949 SELECT 'Y'
39950 FROM pa_proj_structure_types ppst
39951 ,pa_structure_types pst
39952 WHERE ppst.proj_element_id = c_structure_id
39953 AND ppst.structure_type_id = pst.structure_type_id
39954 AND pst.structure_type_class_code IN( 'FINANCIAL' );
39955
39956 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
39957 SELECT 'Y'
39958 FROM dual
39959 WHERE EXISTS(
39960 SELECT 'xyz'
39961 FROM pa_proj_elem_ver_structure
39962 WHERE proj_element_id = c_structure_id
39963 AND project_id = c_project_id
39964 AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
39965 );
39966
39967 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
39968 SELECT object_id_from1
39969 FROM pa_object_relationships
39970 WHERE object_id_to1 = c_elem_ver_id
39971 AND object_type_to = 'PA_TASKS'
39972 AND relationship_type = 'S';
39973
39974 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
39975 SELECT object_id_from1
39976 , object_relationship_id
39977 , record_version_number
39978 , relationship_subtype
39979 FROM pa_object_relationships
39980 WHERE object_id_to1 = p_child_version_id
39981 AND relationship_type = 'S';
39982
39983 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
39984
39985 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
39986 SELECT a.object_id_from1
39987 , a.weighting_percentage
39988 FROM pa_object_relationships a
39989 WHERE a.object_id_to1 = c_task_version_id
39990 AND a.object_type_to = 'PA_TASKS'
39991 AND a.relationship_type = 'S'
39992 AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
39993
39994 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
39995 SELECT '1'
39996 FROM dual
39997 WHERE EXISTS
39998 (SELECT 'xyz'
39999 FROM pa_object_relationships
40000 WHERE object_id_from1 = c_task_version_id
40001 AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
40002 AND relationship_type = 'S'
40003 );
40004
40005 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
40006 SELECT ptt.prog_entry_enable_flag
40007 FROM pa_task_types ptt
40008 , pa_proj_element_versions ppev,
40009 pa_proj_elements ppe
40010 WHERE ppev.element_version_id = c_element_version_id
40011 AND ppev.proj_element_id = ppe.proj_element_id
40012 AND ptt.object_type = 'PA_TASKS'
40013 AND ppe.TYPE_ID = ptt.task_type_id;
40014
40015
40016
40017 l_api_name CONSTANT VARCHAR(30) := 'BULK_INDENT_TASKS_LITE';
40018 l_api_version CONSTANT NUMBER := 1.0;
40019 l_return_status VARCHAR2(1);
40020 l_msg_count NUMBER;
40021 l_msg_data VARCHAR2(250);
40022 l_data VARCHAR2(250);
40023 l_msg_index_out NUMBER;
40024
40025 l_peer_or_sub VARCHAR2(30);
40026 l_project_id NUMBER;
40027 l_structure_id NUMBER;
40028 l_ref_task_id NUMBER;
40029 l_task_id NUMBER;
40030 l_task_record_version_number NUMBER;
40031 l_wbs_record_version_number NUMBER;
40032 l_dummy_char VARCHAR2(1);
40033 l_published_version VARCHAR2(1);
40034 l_relationship_subtype VARCHAR2(20);
40035 l_struc_version_from NUMBER;
40036 l_task_version_from NUMBER;
40037 l_version_from NUMBER;
40038 l_versioned VARCHAR2(1) := 'N';
40039 l_shared VARCHAR2(1) := 'N';
40040
40041 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
40042 l_parent_ver_id NUMBER;
40043 l_error_msg_code VARCHAR2(30);
40044
40045 src_elem_ver_id NUMBER;
40046 src_proj_element_id NUMBER;
40047 src_wbs_number VARCHAR2(240);
40048 src_seq_number NUMBER;
40049 src_wbs_level NUMBER;
40050 src_parent_str_ver_id NUMBER;
40051 src_object_type VARCHAR2(30);
40052
40053 ref_elem_ver_id NUMBER;
40054 ref_proj_element_id NUMBER;
40055 ref_wbs_number VARCHAR2(240);
40056 ref_seq_number NUMBER;
40057 ref_wbs_level NUMBER;
40058 ref_parent_str_ver_id NUMBER;
40059 ref_object_type VARCHAR2(30);
40060
40061 l_old_parent_id NUMBER;
40062 l_dummy VARCHAR2(1);
40063
40064 l_new_weighting NUMBER(17,2);
40065 l_old_weighting NUMBER(17,2);
40066 l_progress_allowed VARCHAR2(1);
40067
40068 l_element_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
40069 l_proj_element_id_tab PA_FORECAST_GLOB.NumberTabTyp;
40070 l_object_type_tab PA_FORECAST_GLOB.VCTabTyp;
40071 l_project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
40072 l_parent_str_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
40073 l_display_sequence_tab PA_FORECAST_GLOB.NumberTabTyp;
40074 l_wbs_level_tab PA_FORECAST_GLOB.NumberTabTyp;
40075 l_wbs_number_tab PA_FORECAST_GLOB.VCTabTyp;
40076 l_record_version_tab PA_FORECAST_GLOB.NumberTabTyp;
40077 l_changed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
40078
40079 l_wbs_number VARCHAR2(1000);
40080 src_branch_mask VARCHAR2(1000);
40081 ref_branch_mask VARCHAR2(1000);
40082 l_str1 VARCHAR2(1000);
40083 l_str2 VARCHAR2(1000);
40084 l_number NUMBER;
40085 l_new_wbs_number VARCHAR2(1000);
40086 l_user_id NUMBER;
40087 l_login_id NUMBER;
40088
40089 CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
40090 select object_id_from1
40091 from pa_object_relationships
40092 where object_id_to1 = c_object_id_to1
40093 and relationship_type = 'S';
40094 l_ref_parent_ver_id NUMBER;
40095
40096 CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
40097 select wbs_number
40098 from pa_proj_element_versions
40099 where element_version_id = c_elem_ver_id
40100 and object_type ='PA_TASKS';
40101
40102 l_delete_project_allowed VARCHAR2(1);
40103 l_update_proj_num_allowed VARCHAR2(1);
40104 l_update_proj_name_allowed VARCHAR2(1);
40105 l_update_proj_desc_allowed VARCHAR2(1);
40106 l_update_proj_dates_allowed VARCHAR2(1);
40107 l_update_proj_status_allowed VARCHAR2(1);
40108 l_update_proj_manager_allowed VARCHAR2(1);
40109 l_update_proj_org_allowed VARCHAR2(1);
40110 l_add_task_allowed VARCHAR2(1);
40111 l_delete_task_allowed VARCHAR2(1);
40112 l_update_task_num_allowed VARCHAR2(1);
40113 l_update_task_name_allowed VARCHAR2(1);
40114 l_update_task_dates_allowed VARCHAR2(1);
40115 l_update_task_desc_allowed VARCHAR2(1);
40116 l_update_parent_task_allowed VARCHAR2(1);
40117 l_update_task_org_allowed VARCHAR2(1);
40118
40119 l_err_code NUMBER := 0;
40120 l_err_stack VARCHAR2(200) := NULL;
40121 l_err_stage VARCHAR2(200) := NULL;
40122
40123 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
40124
40125 CURSOR get_product_code ( c_project_id NUMBER ) IS
40126 SELECT pm_product_code
40127 FROM PA_PROJECTS_ALL
40128 WHERE project_id = c_project_id;
40129
40130 l_cur_project_id NUMBER;
40131 CURSOR cur_proj_id
40132 IS
40133 SELECT project_id
40134 FROM pa_proj_element_versions
40135 WHERE element_version_id = p_structure_version_id;
40136
40137 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
40138 l_parent_task_id NUMBER;
40139 l_old_parent_task_id NUMBER;
40140 l_top_task_id NUMBER;
40141 l_old_top_task_id NUMBER; --bug 2967204
40142
40143 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER ) IS
40144 SELECT parent_task_id, top_task_id FROM pa_tasks
40145 WHERE project_id = c_project_id and task_id = c_task_id;
40146
40147 l_wp_type VARCHAR2(1);
40148 l_weighting_basis_Code VARCHAR2(30);
40149
40150 cursor get_task_type_id(c_proj_element_id NUMBER) IS
40151 select type_id
40152 from pa_proj_elements
40153 where proj_element_id = c_proj_element_id;
40154 l_task_type_id NUMBER;
40155 l_wp_process_flag VARCHAR2(1);
40156
40157 Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
40158 select object_id_to1
40159 from pa_object_relationships
40160 where relationshiP_type = 'S'
40161 and object_type_to = 'PA_TASKS'
40162 start with object_id_to1 = c_task_ver_id
40163 and object_type_to = 'PA_TASKS'
40164 and relationship_type = 'S'
40165 connect by prior object_id_from1 = object_id_to1
40166 and prior object_type_from = object_type_to
40167 and prior relationship_type = relationship_type
40168 intersect
40169 select a.object_id_to1
40170 from pa_object_relationships a, pa_proj_element_versions b
40171 where a.relationshiP_type = 'S'
40172 and a.object_id_from1 = b.parent_structure_version_id
40173 and b.element_version_id = c_task_ver_id
40174 and a.object_type_from = 'PA_STRUCTURES';
40175 l_old_par_ver_id NUMBER;
40176 l_new_par_ver_id NUMBER;
40177
40178 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
40179 l_lowest_task_flag1 VARCHAR2(1);
40180 l_lowest_task_flag2 VARCHAR2(1);
40181 l_fin_task_flag VARCHAR2(1);
40182
40183 l_ref_tsk_version_id NUMBER;
40184
40185 CURSOR cur_get_ref_tsk_ver_id(c_src_wbs_level NUMBER) IS
40186 SELECT element_version_id
40187 FROM PA_PROJ_ELEMENT_VERSIONS
40188 WHERE parent_structure_version_id = p_structure_version_id
40189 AND project_id = p_project_id
40190 AND wbs_level = c_src_wbs_level
40191 AND object_type = 'PA_TASKS'
40192 AND display_sequence < src_seq_number
40193 AND display_sequence =
40194 (SELECT max (display_sequence)
40195 FROM pa_proj_element_versions
40196 WHERE project_id = p_project_id
40197 AND parent_structure_version_id = p_structure_version_id
40198 AND wbs_level = c_src_wbs_level
40199 AND display_sequence < src_seq_number
40200 AND object_type = 'PA_TASKS');
40201
40202 l_ref_parent_task_id NUMBER;
40203 message varchar2(2000);
40204 t_str varchar2(1);
40205
40206 BEGIN
40207
40208 pa_debug.init_err_stack ('PA_PROJECT_PUB.BULK_INDENT_TASKS_LITE');
40209
40210 IF (p_debug_mode = 'Y') THEN
40211 pa_debug.debug('PA_PROJECT_PUB.BULK_INDENT_TASKS_LITE begin');
40212 END IF;
40213
40214 IF (p_commit = FND_API.G_TRUE) THEN
40215 savepoint BULK_INDENT_TASKS_LITE;
40216 END IF;
40217
40218 /* Added below block to ensure that the new API's are controlled by Dev*/
40219 begin
40220 select 'x' into t_str
40221 from pji_system_parameters
40222 where name = 'BULK_LITE'
40223 and value = 'Y';
40224
40225 exception
40226 when no_data_found then
40227 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40228 p_msg_name => 'PA_LITE_API_CANT_USE');
40229 RAISE FND_API.G_EXC_ERROR;
40230 when others then
40231
40232 raise;
40233 end;
40234
40235 IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id),' ') <> 'SHARE_FULL'
40236 OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id),'N') = 'Y' THEN
40237 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40238 p_msg_name => 'PA_CANT_USE_LITE_API');
40239 RAISE FND_API.G_EXC_ERROR;
40240 END IF;
40241
40242 -- Set the G_ROLLUP_FLAG based on profile options
40243 --IF(p_calling_module = 'AMG') THEN
40244 PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
40245 --END IF;
40246
40247 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
40248 PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'INDENT',l_msg_data,l_return_status);
40249 IF l_return_status <> 'S'
40250 THEN
40251 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40252 p_msg_name =>l_msg_data );
40253 RAISE FND_API.G_EXC_ERROR;
40254 ELSE
40255 PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_project_id,p_structure_version_id,'INDENT');
40256 PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,p_task_version_id,p_structure_version_id,'INDENT');
40257 END IF;
40258 END IF;
40259
40260 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
40261 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
40262 END IF;
40263
40264 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
40265 FND_MSG_PUB.initialize;
40266 END IF;
40267
40268 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
40269
40270 l_wp_process_flag := 'N';
40271
40272 IF p_calling_module = 'SELF_SERVICE' THEN
40273
40274 OPEN cur_proj_id;
40275 FETCH cur_proj_id INTO l_cur_project_id;
40276 CLOSE cur_proj_id;
40277
40278 OPEN get_product_code(l_cur_project_id);
40279 FETCH get_product_code INTO l_pm_product_code;
40280 CLOSE get_product_code;
40281
40282 If l_pm_product_code IS NOT NULL THEN
40283 pa_pm_controls.Get_Project_actions_allowed
40284 (P_PM_PRODUCT_CODE => l_pm_product_code,
40285 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
40286 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
40287 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
40288 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
40289 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
40290 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
40291 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
40292 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
40293 P_ADD_TASK_ALLOWED => l_add_task_allowed,
40294 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
40295 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
40296 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
40297 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
40298 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
40299 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
40300 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
40301 P_ERROR_CODE => l_err_code,
40302 P_ERROR_STACK => l_err_stack,
40303 P_ERROR_STAGE => l_err_stage );
40304
40305 IF l_err_code <> 0 THEN
40306 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40307 p_msg_name => l_err_stage);
40308 END IF;
40309 IF l_update_parent_task_allowed = 'N' THEN
40310 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40311 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
40312 raise FND_API.G_EXC_ERROR;
40313 END IF;
40314 END IF;
40315 END IF;
40316
40317 BEGIN
40318 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
40319 INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
40320 FROM PA_PROJ_ELEMENT_VERSIONS
40321 WHERE element_version_id = p_task_version_id
40322 AND project_id = p_project_id
40323 AND parent_structure_version_id = p_structure_version_id;
40324 EXCEPTION
40325 WHEN OTHERS THEN
40326 raise;
40327 END;
40328
40329
40330
40331 IF (p_structure_version_id IS NOT NULL) AND
40332 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
40333 IF (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
40334 , src_proj_element_id
40335 , p_task_version_id),'N') = 'Y') THEN
40336 --deleting linked task. Error
40337 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_IND_LINKED_TASK');
40338 raise FND_API.G_EXC_ERROR;
40339 END IF;
40340 END IF;
40341
40342 -- Get Source Task Information
40343 BEGIN
40344 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
40345 INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
40346 FROM PA_PROJ_ELEMENT_VERSIONS
40347 WHERE element_version_id = p_task_version_id
40348 AND project_id = p_project_id
40349 AND parent_structure_version_id = p_structure_version_id;
40350 EXCEPTION
40351 WHEN OTHERS THEN
40352 raise;
40353 END;
40354
40355 -- Locking should be implemented here
40356
40357 -- Lifecycle Phase validation Changes. Check if task has phase associated with it
40358 IF (p_task_version_id IS NOT NULL) AND
40359 (p_task_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
40360
40361 IF ('Y' = pa_proj_elements_utils.CHECK_ELEMENT_HAS_PHASE(
40362 src_proj_element_id)) THEN
40363 --Indenting a task with phase. Error
40364 PA_UTILS.ADD_MESSAGE('PA', 'PA_LC_NO_INDENT_PHASE_TASK');
40365 raise FND_API.G_EXC_ERROR;
40366 END IF;
40367 END IF;
40368
40369
40370 IF src_seq_number = 1 then
40371 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
40372 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
40373 raise FND_API.G_EXC_ERROR;
40374 END IF;
40375
40376 /* Bug 2843737 Added logic to populate the error message when you try to indent lowest task
40377 Also restructured the logic to get the reference task */
40378
40379 -- Get the previous task information. If its wbs_level is equal to src_wbs_level then this will become refernce task
40380 -- Otherwise we will again fetch the correct reference task
40381
40382 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
40383 INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number, ref_parent_str_ver_id, ref_object_type
40384 FROM PA_PROJ_ELEMENT_VERSIONS
40385 WHERE display_sequence = src_seq_number - 1
40386 AND parent_structure_version_id = p_structure_version_id
40387 AND project_id = p_project_id
40388 AND object_type = 'PA_TASKS';
40389
40390 IF src_wbs_level > ref_wbs_level then
40391 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
40392 ,p_msg_name => 'PA_PS_CANNOT_INDENT');
40393 raise FND_API.G_EXC_ERROR;
40394 END IF;
40395
40396 IF src_wbs_level = ref_wbs_level then
40397 l_peer_or_sub := 'SUB';
40398 --bug 4214825, start
40399 l_ref_tsk_version_id := ref_elem_ver_id;
40400 --bug 4214825, end
40401 ELSE
40402 l_peer_or_sub := 'PEER';
40403
40404 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
40405 INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number, ref_parent_str_ver_id, ref_object_type
40406 FROM PA_PROJ_ELEMENT_VERSIONS
40407 WHERE parent_structure_version_id = p_structure_version_id
40408 AND project_id = p_project_id
40409 AND wbs_level = src_wbs_level+1
40410 AND object_type = 'PA_TASKS'
40411 AND display_sequence < src_seq_number
40412 AND display_sequence =
40413 (SELECT max (display_sequence)
40414 FROM pa_proj_element_versions
40415 WHERE project_id = p_project_id
40416 AND parent_structure_version_id = p_structure_version_id
40417 AND wbs_level = src_wbs_level+1
40418 AND display_sequence < src_seq_number
40419 AND object_type = 'PA_TASKS');
40420
40421 OPEN cur_get_ref_tsk_ver_id(src_wbs_level);
40422 FETCH cur_get_ref_tsk_ver_id INTO l_ref_tsk_version_id;
40423 CLOSE cur_get_ref_tsk_ver_id;
40424
40425 END IF;
40426
40427 IF PA_PROJ_ELEMENTS_UTILS.check_deliv_in_hierarchy(p_task_version_id, l_ref_tsk_version_id) = 'Y' THEN
40428 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40429 p_msg_name => 'PA_PS_CHK_DELIV_UPDATE');
40430 raise FND_API.G_EXC_ERROR;
40431 END IF;
40432
40433 --Check if ok to indent this task
40434 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
40435 p_task_ver_id => p_task_version_id
40436 ,x_return_status => l_return_status
40437 ,x_error_message_code => l_error_msg_code
40438 );
40439
40440 IF (l_return_status <> 'Y') THEN
40441 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40442 p_msg_name => l_error_msg_code);
40443 raise FND_API.G_EXC_ERROR;
40444 END IF;
40445
40446 --check if ok to create subtask
40447 IF (l_peer_or_sub = 'PEER') THEN
40448 OPEN get_parent_version_id(ref_elem_ver_id);
40449 FETCH get_parent_version_id into l_parent_ver_id;
40450 CLOSE get_parent_version_id;
40451
40452 --bug 3069306
40453 --if financial task, check if changing parent ok
40454 IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
40455 OPEN get_top_task_ver_id(l_parent_ver_id);
40456 FETCH get_top_task_ver_id into l_new_par_ver_id;
40457 CLOSE get_top_task_ver_id;
40458
40459 OPEN get_top_task_ver_id(p_task_version_id);
40460 FETCH get_top_task_ver_id into l_old_par_ver_id;
40461 CLOSE get_top_task_Ver_id;
40462
40463 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
40464 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40465 p_msg_name => 'PA_CANT_CHANGE_PARENT');
40466 raise FND_API.G_EXC_ERROR;
40467 END IF;
40468 END IF;
40469 --end bug 3069306
40470
40471 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
40472 p_parent_task_ver_id => l_parent_ver_id
40473 ,x_return_status => l_return_status
40474 ,x_error_message_code => l_error_msg_code
40475 );
40476
40477 IF (l_return_status <> 'Y') THEN
40478 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40479 p_msg_name => l_error_msg_code);
40480 raise FND_API.G_EXC_ERROR;
40481 END IF;
40482
40483 --bug 4099488
40484 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(l_parent_ver_id, p_task_version_id) = 'N' THEN
40485 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40486 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
40487 raise FND_API.G_EXC_ERROR;
40488 END IF;
40489 --end bug 4099488
40490 ELSE
40491 --bug 3069306
40492 --if financial task, check if changing parent ok
40493 IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
40494 OPEN get_top_task_ver_id(ref_elem_ver_id);
40495 FETCH get_top_task_ver_id into l_new_par_ver_id;
40496 CLOSE get_top_task_ver_id;
40497
40498 OPEN get_top_task_ver_id(p_task_version_id);
40499 FETCH get_top_task_ver_id into l_old_par_ver_id;
40500 CLOSE get_top_task_Ver_id;
40501
40502 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
40503 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40504 p_msg_name => 'PA_CANT_CHANGE_PARENT');
40505 raise FND_API.G_EXC_ERROR;
40506 END IF;
40507 END IF;
40508 --end bug 3069306
40509
40510
40511 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
40512 p_parent_task_ver_id => ref_elem_ver_id
40513 ,x_return_status => l_return_status
40514 ,x_error_message_code => l_error_msg_code
40515 );
40516
40517 IF (l_return_status <> 'Y') THEN
40518 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40519 p_msg_name => l_error_msg_code);
40520 raise FND_API.G_EXC_ERROR;
40521 END IF;
40522
40523 --bug 4099488
40524 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(ref_elem_ver_id, p_task_version_id) = 'N' THEN
40525 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40526 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
40527 raise FND_API.G_EXC_ERROR;
40528 END IF;
40529 --end bug 4099488
40530 END IF;
40531
40532 If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
40533 IN ('SHARE_PARTIAL')
40534 Then
40535
40536 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
40537 p_task_version_id => p_task_version_id
40538 , p_ref_task_version_id => ref_elem_ver_id
40539 , x_return_status => x_return_status
40540 , x_msg_count => x_msg_count
40541 , x_msg_data => x_msg_data
40542 , x_error_msg_code => l_error_msg_code);
40543
40544 IF (x_return_status <> 'S') THEN -- 4275757 : Changed from 'Y' to 'S'
40545 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
40546 p_msg_name => l_error_msg_code);
40547 raise FND_API.G_EXC_ERROR;
40548 End If;
40549 End If;
40550
40551 --check the task is a lowest task bug 3301192
40552 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
40553
40554 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
40555
40556 -- Logic Added for plsql table
40557 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
40558
40559 l_element_version_id_tab.delete;
40560 l_proj_element_id_tab.delete;
40561 l_object_type_tab.delete;
40562 l_project_id_tab.delete;
40563 l_parent_str_version_id_tab.delete;
40564 l_display_sequence_tab.delete;
40565 l_wbs_level_tab.delete;
40566 l_wbs_number_tab.delete;
40567 l_record_version_tab.delete;
40568 l_changed_flag_tab.delete;
40569
40570 If (l_peer_or_sub = 'SUB') THEN
40571 OPEN get_ref_parent_id(ref_elem_ver_id);
40572 FETCH get_ref_parent_id into l_ref_parent_ver_id;
40573 CLOSE get_ref_parent_id;
40574 ELSE
40575 OPEN get_ref_parent_id(p_task_version_id);
40576 FETCH get_ref_parent_id into l_ref_parent_ver_id;
40577 CLOSE get_ref_parent_id;
40578 END IF;
40579
40580 -- Sridhar Huawei 18-Sept add the below if statement.
40581 -- Need not derive wbs_number and wbs_level in defer mode
40582 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='N') THEN
40583
40584 BEGIN
40585 -- Using OR is beneficial than using UNION here
40586 /*
40587 SELECT element_version_id, proj_element_id, object_type,
40588 project_id, parent_structure_version_id,
40589 display_sequence, wbs_level, wbs_number,
40590 record_version_number, 'N' changed_flag
40591 BULK COLLECT INTO l_element_version_id_tab,
40592 l_proj_element_id_tab, l_object_type_tab,
40593 l_project_id_tab, l_parent_str_version_id_tab,
40594 l_display_sequence_tab, l_wbs_level_tab,
40595 l_wbs_number_tab, l_record_version_tab,
40596 l_changed_flag_tab
40597 FROM
40598 pa_proj_element_versions
40599 WHERE
40600 project_id = p_project_id
40601 AND parent_structure_version_id = p_structure_version_id
40602 AND object_type = 'PA_TASKS'
40603 AND(
40604 element_version_id = p_task_version_id -- Source task itself
40605 OR (element_version_id IN -- All tasks below the source task with wbs_level >= src_wbs_level-1
40606 (select object_id_to1
40607 from pa_object_relationships
40608 where relationship_type = 'S'
40609 and object_type_to = 'PA_TASKS'
40610 start with object_id_from1 = l_ref_parent_ver_id
40611 connect by object_id_from1 = PRIOR object_id_to1
40612 and relationship_type = PRIOR relationship_type
40613 and relationship_type = 'S')
40614 )
40615 and display_sequence > src_seq_number)
40616 ORDER BY display_sequence ;
40617 */
40618 select proj_element_id INTO l_ref_parent_task_id from pa_proj_element_versions
40619 where element_version_id = l_ref_parent_ver_id and project_id= p_project_id;
40620
40621 insert into pa_tasks_tmp (task_id)
40622 SELECT task_id
40623 FROM pa_tasks
40624 WHERE project_id = p_project_id
40625 START WITH parent_task_id = l_ref_parent_task_id
40626 CONNECT BY parent_task_id = prior task_id;
40627
40628 insert into pa_tasks_tmp (task_id)
40629 select proj_element_id
40630 from pa_proj_element_versions
40631 where ELEMENT_VERSION_ID = p_task_version_id and project_id = p_project_id and not exists (select null from pa_tasks_tmp where task_id = proj_element_id);
40632
40633 SELECT /*+ ordered index(ev1 pa_proj_element_versions_n1) */
40634 element_version_id, proj_element_id, object_type,
40635 project_id, parent_structure_version_id,
40636 display_sequence, wbs_level, wbs_number,
40637 record_version_number, 'N' changed_flag
40638 BULK COLLECT INTO l_element_version_id_tab,
40639 l_proj_element_id_tab, l_object_type_tab,
40640 l_project_id_tab, l_parent_str_version_id_tab,
40641 l_display_sequence_tab, l_wbs_level_tab,
40642 l_wbs_number_tab, l_record_version_tab,
40643 l_changed_flag_tab
40644 FROM pa_tasks_tmp t1 ,
40645 pa_proj_element_versions ev1
40646 WHERE
40647 project_id = p_project_id
40648 AND parent_structure_version_id = p_structure_version_id
40649 AND object_type = 'PA_TASKS'
40650 AND proj_element_id = t1.task_id
40651 and display_sequence >= src_seq_number
40652 ORDER BY display_sequence ;
40653
40654
40655
40656 EXCEPTION
40657 WHEN OTHERS THEN
40658 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
40659 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
40660 END IF;
40661 raise;
40662 END;
40663
40664
40665 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
40666 -- Here we can also incorporate sequence number update. In indent sequence number does not change.
40667
40668 -- Update wbs level
40669
40670 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
40671 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
40672 l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
40673 l_changed_flag_tab(j) := 'Y';
40674 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
40675 -- Direct Childs of source
40676 l_wbs_level_tab(j) := l_wbs_level_tab(j) + 1;
40677 l_changed_flag_tab(j) := 'Y';
40678 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
40679 -- Exit level changes, IT means no Direct childs are left
40680 EXIT;
40681 END IF;
40682 END LOOP;
40683
40684
40685 -- Update wbs_number
40686
40687 src_branch_mask := src_wbs_number;
40688
40689 OPEN get_wbs_number(l_ref_parent_ver_id);
40690 FETCH get_wbs_number into ref_branch_mask;
40691 CLOSE get_wbs_number;
40692
40693
40694
40695 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
40696 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
40697 IF l_peer_or_sub = 'SUB' THEN
40698 l_wbs_number := ref_wbs_number || '.1';
40699 l_wbs_number_tab(j) := l_wbs_number;
40700 l_changed_flag_tab(j) := 'Y';
40701 l_new_wbs_number := l_wbs_number;
40702 ELSE
40703 l_number := instr(ref_wbs_number,'.', -1, 1);
40704 l_str1 := substr(ref_wbs_number, 1, l_number -1);
40705 l_str2 := substr(ref_wbs_number, l_number + 1);
40706 l_str2 := to_char(to_number(l_str2 + 1));
40707 l_wbs_number := l_str1 || '.' || l_str2;
40708 l_wbs_number_tab(j) := l_wbs_number;
40709 l_changed_flag_tab(j) := 'Y';
40710 l_new_wbs_number := l_wbs_number;
40711 END IF;
40712 ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
40713 IF l_display_sequence_tab(j) > src_seq_number THEN
40714 IF src_wbs_level = 1 THEN -- This was top task
40715 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
40716 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
40717 -- Direct childs of source
40718 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
40719 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
40720 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
40721 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
40722 l_wbs_number_tab(j) := l_wbs_number;
40723 l_changed_flag_tab(j) := 'Y';
40724 ELSIF(instr(l_wbs_number_tab(j), '.') <> 0) then
40725 -- Not in Direct Childs, But lower tasks
40726 l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
40727 l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
40728 l_str1 := to_char(to_number(l_str1) - 1);
40729 l_wbs_number := l_str1 || l_str2;
40730 l_wbs_number_tab(j) := l_wbs_number;
40731 l_changed_flag_tab(j) := 'Y';
40732 ELSIF (instr(l_wbs_number_tab(j), '.') = 0) then
40733 l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) - 1);
40734 l_wbs_number_tab(j) := l_wbs_number;
40735 l_changed_flag_tab(j) := 'Y';
40736 END IF;
40737 ELSE -- src_wbs_level <> 1 Source was not a Top Task
40738 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
40739 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
40740 -- Direct childs of source
40741 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
40742 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
40743 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
40744 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
40745 l_wbs_number_tab(j) := l_wbs_number;
40746 l_changed_flag_tab(j) := 'Y';
40747 ELSE
40748 l_str1 := substr(l_wbs_number_tab(j), length(ref_branch_mask) + 2);
40749 IF(instr(l_str1, '.') <> 0) THEN
40750 l_str2 := substr(l_str1, instr(l_str1, '.'));
40751 l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
40752 l_str1 := to_char(to_number(l_str1) - 1);
40753 l_wbs_number := ref_branch_mask || '.' || l_str1 || l_str2;
40754 l_wbs_number_tab(j) := l_wbs_number;
40755 l_changed_flag_tab(j) := 'Y';
40756 ELSE
40757 l_str1:= to_char(to_number(l_str1) - 1);
40758 l_wbs_number := ref_branch_mask || '.' || l_str1;
40759 l_wbs_number_tab(j) := l_wbs_number;
40760 l_changed_flag_tab(j) := 'Y';
40761 END IF;
40762 END IF;
40763 END IF; -- src_wbs_level = 1
40764 END IF; -- l_display_sequence_tab(j) > src_seq_number
40765 END IF; -- l_element_version_id_tab(j) = src_elem_ver_id
40766 END LOOP;
40767 l_user_id := fnd_global.user_id;
40768 l_login_id := fnd_global.login_id;
40769
40770 -- Locking should be implemnted here
40771
40772 FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
40773 UPDATE PA_PROJ_ELEMENT_VERSIONS
40774 SET
40775 wbs_level = l_wbs_level_tab(j) ,
40776 wbs_number = l_wbs_number_tab(j) ,
40777 last_update_date = sysdate ,
40778 last_updated_by = l_user_id ,
40779 last_update_login = l_login_id ,
40780 record_version_number = l_record_version_tab(j)+1
40781 WHERE element_version_id = l_element_version_id_tab(j)
40782 AND l_changed_flag_tab(j)='Y';
40783
40784 END IF;
40785 -- Sridhar Huawei 18-Sept add above end if
40786
40787 -- Update Relationship
40788
40789 IF ref_object_type = 'PA_TASKS'
40790 THEN
40791 IF l_peer_or_sub = 'PEER'
40792 THEN
40793 OPEN cur_obj_rel( ref_elem_ver_id );
40794 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
40795 CLOSE cur_obj_rel;
40796
40797 l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
40798
40799 IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
40800 THEN
40801 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
40802 l_task_version_from := null;
40803 ELSE
40804 l_task_version_from := v_cur_obj_rel_rec.object_id_from1;
40805 l_struc_version_from := null;
40806 END IF;
40807 ELSE -- l_peer_or_sub = 'SUB'
40808 --parent task is the reference task
40809 l_task_version_from := ref_elem_ver_id;
40810 l_struc_version_from := null;
40811 l_relationship_subtype := 'TASK_TO_TASK';
40812
40813
40814 END IF;
40815 END IF; -- ref_object_type = 'PA_TASKS'
40816 -- No need to check for PA_STRUCTURES as this is indent and you can not indent below a structure
40817
40818
40819 --update relatonship of the task version p_task_version.
40820 --set structure_version_from and task_version_from accordingly.
40821 OPEN cur_obj_rel( p_task_version_id );
40822 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
40823 CLOSE cur_obj_rel;
40824
40825 --for task weighting
40826 OPEN get_task_weighting(p_task_version_id);
40827 FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
40828 CLOSE get_task_weighting;
40829
40830
40831 IF(l_task_version_from is not null) THEN
40832 l_version_from := l_task_version_from;
40833 ELSE
40834 l_version_from := l_struc_version_from;
40835 END IF;
40836
40837 IF (l_version_from = p_task_version_id) THEN
40838 l_new_weighting := l_old_weighting;
40839 ELSE
40840 OPEN get_sub_tasks(l_version_from);
40841 FETCH get_sub_tasks into l_dummy;
40842 IF (get_sub_tasks%NOTFOUND) THEN
40843 l_new_weighting := 100;
40844 --bug 2673570
40845 OPEN check_progress_allowed(p_task_version_id);
40846 FETCH check_progress_allowed INTO l_progress_allowed;
40847 CLOSE check_progress_allowed;
40848
40849 if l_progress_allowed = 'N' then
40850 l_new_weighting := 0;
40851 end if;
40852 --bug 2673570
40853 ELSE
40854 l_new_weighting := 0;
40855 END IF;
40856 CLOSE get_sub_tasks;
40857 END IF;
40858
40859 PA_RELATIONSHIP_PVT.Update_Relationship
40860 (
40861 p_api_version => p_api_version
40862 ,p_init_msg_list => p_init_msg_list
40863 ,p_commit => p_commit
40864 ,p_validate_only => p_validate_only
40865 ,p_validation_level => p_validation_level
40866 ,p_calling_module => p_calling_module
40867 ,p_debug_mode => p_debug_mode
40868 ,p_max_msg_count => p_max_msg_count
40869 ,p_object_relationship_id => v_cur_obj_rel_rec.object_relationship_id
40870 ,p_project_id_from => null
40871 ,p_structure_id_from => null
40872 ,p_structure_version_id_from => l_struc_version_from
40873 ,p_task_version_id_from => l_task_version_from
40874 ,p_project_id_to => null
40875 ,p_structure_id_to => null
40876 ,p_structure_version_id_to => null
40877 ,p_task_version_id_to => p_task_version_id
40878 ,p_relationship_type => 'S'
40879 ,p_relationship_subtype => l_relationship_subtype
40880 ,p_weighting_percentage => l_new_weighting
40881 ,p_record_version_number => v_cur_obj_rel_rec.record_version_number
40882 ,x_return_status => l_return_status
40883 ,x_msg_count => l_msg_count
40884 ,x_msg_data => l_msg_data
40885 );
40886
40887
40888 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
40889 x_msg_count := FND_MSG_PUB.count_msg;
40890 IF x_msg_count = 1 then
40891 pa_interface_utils_pub.get_messages
40892 (p_encoded => FND_API.G_TRUE,
40893 p_msg_index => 1,
40894 p_msg_count => l_msg_count,
40895 p_msg_data => l_msg_data,
40896 p_data => l_data,
40897 p_msg_index_out => l_msg_index_out);
40898 x_msg_data := l_data;
40899 END IF;
40900 raise FND_API.G_EXC_ERROR;
40901 END IF;
40902
40903 --for task weighting
40904 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
40905 p_task_version_id => l_old_parent_id
40906 ,x_return_status => l_return_status
40907 ,x_msg_count => l_msg_count
40908 ,x_msg_data => l_msg_data
40909 );
40910
40911 x_msg_count := FND_MSG_PUB.count_msg;
40912 IF x_msg_count = 1 then
40913 pa_interface_utils_pub.get_messages
40914 (p_encoded => FND_API.G_TRUE,
40915 p_msg_index => 1,
40916 p_msg_count => l_msg_count,
40917 p_msg_data => l_msg_data,
40918 p_data => l_data,
40919 p_msg_index_out => l_msg_index_out);
40920 x_msg_data := l_data;
40921 END IF;
40922
40923 --bug 2673570
40924 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
40925 p_task_version_id => p_task_version_id
40926 ,x_return_status => l_return_status
40927 ,x_msg_count => l_msg_count
40928 ,x_msg_data => l_msg_data
40929 );
40930
40931 x_msg_count := FND_MSG_PUB.count_msg;
40932 IF x_msg_count = 1 then
40933 pa_interface_utils_pub.get_messages
40934 (p_encoded => FND_API.G_TRUE,
40935 p_msg_index => 1,
40936 p_msg_count => l_msg_count,
40937 p_msg_data => l_msg_data,
40938 p_data => l_data,
40939 p_msg_index_out => l_msg_index_out);
40940 x_msg_data := l_data;
40941 END IF;
40942 --bug 2673570
40943 --end changes for task weighting
40944
40945
40946 /*** End Update_task_version and Update_wbs_number code ***/
40947
40948 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
40949 FROM pa_proj_element_versions
40950 WHERE element_version_id = ( Select parent_structure_version_id
40951 from pa_proj_element_versions
40952 where element_version_id = p_task_version_id )
40953 AND object_type = 'PA_STRUCTURES';
40954
40955
40956 --Do financial task check
40957 --If financial
40958 OPEN cur_struc_type( l_structure_id );
40959 FETCH cur_struc_type INTO l_dummy_char;
40960 IF cur_struc_type%FOUND
40961 THEN
40962 --If structure has any published versions.
40963 l_published_version := 'N';
40964 OPEN cur_pub_versions( l_structure_id, l_project_id );
40965 FETCH cur_pub_versions INTO l_published_version;
40966 CLOSE cur_pub_versions;
40967
40968
40969 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
40970 l_project_id);
40971 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
40972 l_project_id);
40973
40974 l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --indent in corresponding task in pa_tasks
40975
40976 IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
40977 (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
40978 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
40979 THEN
40980
40981 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
40982 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
40983 FROM PA_TASKS pt,
40984 pa_proj_elem_ver_structure ppa,
40985 PA_PROJ_ELEMENT_VERSIONS ppev
40986 WHERE ppev.element_version_id = p_task_version_id
40987 AND ppev.parent_structure_version_id = ppa.element_version_id
40988 AND ppev.project_id = ppa.project_id
40989 AND ppev.proj_element_id = pt.task_id;
40990
40991 SELECT record_version_number, parent_task_id --get old parent id for bug 2947492 (indent )
40992 ,top_task_id --bug 2967204
40993 INTO l_task_record_version_number, l_old_parent_task_id
40994 ,l_old_top_task_id --bug 2967204
40995 FROM pa_tasks
40996 WHERE task_id = l_task_id
40997 AND project_id = l_project_id;
40998
40999
41000 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
41001 p_project_id => l_project_id
41002 ,p_task_id => l_task_id
41003 ,p_edit_mode => 'INDENT'
41004 ,p_record_version_number => l_task_record_version_number
41005 ,p_wbs_record_version_number => 1
41006 ,x_return_status => l_return_status
41007 ,x_msg_count => l_msg_count
41008 ,x_msg_data => l_msg_data );
41009
41010 -- Merged from 85
41011 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
41012 x_msg_count := FND_MSG_PUB.count_msg;
41013 IF x_msg_count = 1 then
41014 pa_interface_utils_pub.get_messages
41015 (p_encoded => FND_API.G_TRUE,
41016 p_msg_index => 1,
41017 p_msg_count => l_msg_count,
41018 p_msg_data => l_msg_data,
41019 p_data => l_data,
41020 p_msg_index_out => l_msg_index_out);
41021 x_msg_data := l_data;
41022 END IF;
41023 raise FND_API.G_EXC_ERROR;
41024 END IF;
41025
41026 OPEN get_parent_task_id( l_task_id , l_project_id );
41027 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
41028 CLOSE get_parent_task_id;
41029
41030 --bug 2967204
41031 --Cannot move out of the current hierarchy
41032 IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
41033 THEN
41034 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41035 p_msg_name => 'PA_CANT_CHANGE_PARENT');
41036 raise FND_API.G_EXC_ERROR;
41037 END IF;
41038 --End bug 2967204
41039
41040 END IF;
41041 END IF;
41042 CLOSE cur_struc_type;
41043
41044 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
41045
41046 If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
41047
41048 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
41049 p_structure_version_id => P_Structure_Version_ID
41050 ,p_dirty_flag => 'Y' --bug 3902282
41051 ,x_return_status => x_return_status
41052 ,x_msg_count => x_msg_count
41053 ,x_msg_data => x_msg_data
41054 );
41055
41056 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
41057 x_msg_count := FND_MSG_PUB.count_msg;
41058 If x_msg_count = 1 then
41059 pa_interface_utils_pub.get_messages
41060 (p_encoded => FND_API.G_TRUE,
41061 p_msg_index => 1,
41062 p_msg_count => l_msg_count,
41063 p_msg_data => l_msg_data,
41064 p_data => l_data,
41065 p_msg_index_out => l_msg_index_out);
41066 x_msg_data := l_data;
41067 End If;
41068 raise FND_API.G_EXC_ERROR;
41069 End If;
41070 End If;
41071 -- End of FP_M changes
41072
41073 l_tasks_ver_ids.extend;
41074 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
41075
41076 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
41077 p_commit => FND_API.G_FALSE,
41078 p_element_versions => l_tasks_ver_ids,
41079 x_return_status => l_return_status,
41080 x_msg_count => l_msg_count,
41081 x_msg_data => l_msg_data);
41082
41083 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41084 x_msg_count := FND_MSG_PUB.count_msg;
41085 if x_msg_count = 1 then
41086 pa_interface_utils_pub.get_messages
41087 (p_encoded => FND_API.G_TRUE,
41088 p_msg_index => 1,
41089 p_msg_count => l_msg_count,
41090 p_msg_data => l_msg_data,
41091 p_data => l_data,
41092 p_msg_index_out => l_msg_index_out);
41093 x_msg_data := l_data;
41094 end if;
41095 raise FND_API.G_EXC_ERROR;
41096 end if;
41097
41098 --hsiu added for task status
41099 --if versioning is off, rollup.
41100 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
41101 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
41102 p_structure_version_id => p_structure_version_id
41103 ,p_element_version_id => p_task_version_id
41104 ,x_return_status => l_return_status
41105 ,x_msg_count => l_msg_count
41106 ,x_msg_data => l_msg_data
41107 );
41108
41109 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41110 x_msg_count := FND_MSG_PUB.count_msg;
41111 if x_msg_count = 1 then
41112 pa_interface_utils_pub.get_messages
41113 (p_encoded => FND_API.G_TRUE,
41114 p_msg_index => 1,
41115 p_msg_count => l_msg_count,
41116 p_msg_data => l_msg_data,
41117 p_data => l_data,
41118 p_msg_index_out => l_msg_index_out);
41119 x_msg_data := l_data;
41120 end if;
41121 raise FND_API.G_EXC_ERROR;
41122 end if;
41123 END IF;
41124
41125 --end task status changes
41126
41127 END IF;
41128
41129 --bug 3053281 --set flag if not (manual and workplan only)
41130 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
41131 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
41132
41133 --3035902: process update flag changes
41134 OPEN get_task_type_id(src_proj_element_id);
41135 FETCH get_task_type_id INTO l_task_type_id;
41136 CLOSE get_task_type_id;
41137
41138 --set update process flag if necessary;
41139 IF (l_wp_process_flag = 'N') THEN
41140 --may need to update process flag
41141 IF ((l_shared = 'N') AND
41142 (l_wp_type = 'Y') AND
41143 (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
41144 (l_weighting_basis_code <> 'MANUAL'))
41145 THEN
41146 --split and workplan; only update if progressable task added
41147 l_wp_process_flag := 'Y';
41148 ELSIF ((l_shared = 'N') AND
41149 (l_wp_type = 'N')) THEN
41150 --split and financial; update
41151 l_wp_process_flag := 'Y';
41152 ELSIF (l_shared = 'Y') THEN
41153 l_wp_process_flag := 'Y';
41154 END IF;
41155 END IF;
41156
41157 IF (l_wp_process_flag = 'Y') THEN
41158 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
41159 (
41160 p_calling_context => 'SELF_SERVICE'
41161 ,p_project_id => p_project_id
41162 ,p_structure_version_id => p_structure_version_id
41163 ,p_update_wbs_flag => 'Y'
41164 ,x_return_status => l_return_status
41165 ,x_msg_count => l_msg_count
41166 ,x_msg_data => l_msg_data);
41167
41168 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41169 x_msg_count := FND_MSG_PUB.count_msg;
41170 if x_msg_count = 1 then
41171 pa_interface_utils_pub.get_messages
41172 (p_encoded => FND_API.G_TRUE,
41173 p_msg_index => 1,
41174 p_msg_count => l_msg_count,
41175 p_msg_data => l_msg_data,
41176 p_data => l_data,
41177 p_msg_index_out => l_msg_index_out);
41178 x_msg_data := l_data;
41179 end if;
41180 raise FND_API.G_EXC_ERROR;
41181 end if;
41182 END IF;
41183 --3035902: end process update flag changes
41184
41185 --ideally the following calls should have been cached. but due to time constraints
41186 --we need to write the code this way in multiple places.
41187 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
41188 THEN
41189 IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and l_published_version = 'N' ) THEN
41190 --Indent
41191 pa_fp_refresh_elements_pub.set_process_flag_proj(
41192 p_project_id => p_project_id
41193 ,p_request_id => null
41194 ,p_process_code => null
41195 ,p_refresh_required_flag => 'Y'
41196 ,x_return_status => l_return_status
41197 ,x_msg_count => l_msg_count
41198 ,x_msg_data => l_msg_data );
41199
41200 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41201 x_msg_count := FND_MSG_PUB.count_msg;
41202 if x_msg_count = 1 then
41203 pa_interface_utils_pub.get_messages
41204 (p_encoded => FND_API.G_TRUE,
41205 p_msg_index => 1,
41206 p_msg_count => l_msg_count,
41207 p_msg_data => l_msg_data,
41208 p_data => l_data,
41209 p_msg_index_out => l_msg_index_out);
41210 x_msg_data := l_data;
41211 end if;
41212 raise FND_API.G_EXC_ERROR;
41213 end if;
41214 END IF;
41215 END IF;
41216
41217 --check the task is a lowest task again and check whehter its no more a lowest task.
41218 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
41219
41220 IF l_lowest_task_flag1 = 'Y' AND
41221 l_lowest_task_flag2 = 'N'
41222 THEN
41223 IF l_wp_type = 'Y'
41224 THEN
41225 --now call call delete planning for task version id.
41226 l_task_ver_ids2.extend(1);
41227 l_task_ver_ids2(1) := p_task_version_id;
41228 DECLARE
41229 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
41230 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
41231 SELECT resource_assignment_id
41232 FROM pa_resource_assignments
41233 WHERE wbs_element_Version_id = c_task_ver_id
41234 AND ta_display_flag = 'N';
41235 l_assign_id NUMBER := NULL;
41236 BEGIN
41237 OPEN get_assignment_id(p_task_version_id);
41238 FETCH get_assignment_id into l_assign_id;
41239 CLOSE get_assignment_id;
41240
41241 IF (l_assign_id IS NOT NULL) THEN
41242 l_assign_ids.extend(1);
41243 l_assign_ids(1) := l_assign_id;
41244 pa_fp_planning_transaction_pub.delete_planning_transactions
41245 (
41246 p_context => 'WORKPLAN'
41247 ,p_task_or_res => 'ASSIGNMENT'
41248 ,p_resource_assignment_tbl => l_assign_ids
41249 ,x_return_status => l_return_status
41250 ,x_msg_count => l_msg_count
41251 ,x_msg_data => l_msg_data
41252 );
41253 END IF;
41254 EXCEPTION
41255 WHEN OTHERS THEN
41256 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
41257 p_procedure_name => 'BULK_INDENT_TASKS_LITE',
41258 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
41259 RAISE FND_API.G_EXC_ERROR;
41260 END;
41261
41262 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
41263 x_msg_count := FND_MSG_PUB.count_msg;
41264 if x_msg_count = 1 then
41265 pa_interface_utils_pub.get_messages
41266 (p_encoded => FND_API.G_TRUE,
41267 p_msg_index => 1,
41268 p_msg_count => l_msg_count,
41269 p_msg_data => l_msg_data,
41270 p_data => l_data,
41271 p_msg_index_out => l_msg_index_out);
41272 x_msg_data := l_data;
41273 end if;
41274 raise FND_API.G_EXC_ERROR;
41275 end if;
41276 END IF; --<<l_wp_type>>
41277 END IF; --<<l_lowest_task_flag1>>
41278
41279 --bug 4149392
41280 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
41281 --end bug 4149392
41282
41283 x_return_status := FND_API.G_RET_STS_SUCCESS;
41284
41285 IF (p_commit = FND_API.G_TRUE) THEN
41286 COMMIT;
41287 END IF;
41288
41289 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41290 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
41291 END IF;
41292
41293 IF (p_debug_mode = 'Y') THEN
41294 pa_debug.debug('PA_PROJECT_PUB.BULK_INDENT_TASKS_LITE END');
41295 END IF;
41296
41297 EXCEPTION
41298 when FND_API.G_EXC_ERROR then
41299 if p_commit = FND_API.G_TRUE then
41300 rollback to BULK_INDENT_TASKS_LITE;
41301 end if;
41302 x_return_status := FND_API.G_RET_STS_ERROR;
41303 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41304 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
41305 END IF;
41306 FND_MSG_PUB.Count_And_Get
41307 ( p_count => x_msg_count ,
41308 p_data => x_msg_data );
41309 when FND_API.G_EXC_UNEXPECTED_ERROR then
41310 if p_commit = FND_API.G_TRUE then
41311 rollback to BULK_INDENT_TASKS_LITE;
41312 end if;
41313 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
41314 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
41315 p_procedure_name => 'BULK_INDENT_TASKS_LITE',
41316 p_error_text => SUBSTRB(SQLERRM,1,240));
41317 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41318 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
41319 END IF;
41320 when OTHERS then
41321 if p_commit = FND_API.G_TRUE then
41322 rollback to BULK_INDENT_TASKS_LITE;
41323 end if;
41324 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
41325 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
41326 p_procedure_name => 'BULK_INDENT_TASKS_LITE',
41327 p_error_text => SUBSTRB(SQLERRM,1,240));
41328 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41329 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
41330 END IF;
41331 FND_MSG_PUB.Count_And_Get
41332 ( p_count => x_msg_count ,
41333 p_data => x_msg_data );
41334
41335 raise;
41336
41337 END BULK_INDENT_TASKS_LITE;
41338
41339 -- Added new api BULK_OUTDENT_TASKS_LITE for Huawei enhancement - bug 13923366 by skkoppul
41340 PROCEDURE BULK_OUTDENT_TASKS_LITE (
41341 p_api_version IN NUMBER :=1.0,
41342 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
41343 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
41344 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
41345 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
41346 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
41347 p_debug_mode IN VARCHAR2 :='N',
41348 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
41349 p_structure_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
41350 p_task_version_id IN NUMBER,
41351 p_project_id IN NUMBER,
41352 p_record_version_number IN NUMBER,
41353 x_return_status OUT NOCOPY VARCHAR2,
41354 x_msg_count OUT NOCOPY NUMBER,
41355 x_msg_data OUT NOCOPY VARCHAR2
41356 ) IS
41357
41358
41359 CURSOR cur_struc_type( c_structure_id NUMBER ) IS
41360 SELECT 'Y'
41361 FROM pa_proj_structure_types ppst
41362 ,pa_structure_types pst
41363 WHERE ppst.proj_element_id = c_structure_id
41364 AND ppst.structure_type_id = pst.structure_type_id
41365 AND pst.structure_type_class_code IN( 'FINANCIAL' );
41366
41367 CURSOR cur_pub_versions( c_structure_id NUMBER, c_project_id NUMBER ) is
41368 SELECT 'Y'
41369 FROM dual
41370 WHERE EXISTS(
41371 SELECT 'xyz'
41372 FROM pa_proj_elem_ver_structure
41373 WHERE proj_element_id = c_structure_id
41374 AND project_id = c_project_id
41375 AND STATUS_CODE = 'STRUCTURE_PUBLISHED'
41376 );
41377
41378 CURSOR get_parent_version_id(c_elem_ver_id NUMBER) IS
41379 SELECT object_id_from1
41380 FROM pa_object_relationships
41381 WHERE object_id_to1 = c_elem_ver_id
41382 AND object_type_to = 'PA_TASKS'
41383 AND relationship_type = 'S';
41384
41385 CURSOR cur_obj_rel( p_child_version_id NUMBER ) IS
41386 SELECT object_id_from1
41387 , object_relationship_id
41388 , record_version_number
41389 , relationship_subtype
41390 FROM pa_object_relationships
41391 WHERE object_id_to1 = p_child_version_id
41392 AND relationship_type = 'S';
41393
41394 v_cur_obj_rel_rec cur_obj_rel%ROWTYPE;
41395
41396 CURSOR get_task_weighting(c_task_version_id NUMBER) IS
41397 SELECT a.object_id_from1
41398 , a.weighting_percentage
41399 FROM pa_object_relationships a
41400 WHERE a.object_id_to1 = c_task_version_id
41401 AND a.object_type_to = 'PA_TASKS'
41402 AND a.relationship_type = 'S'
41403 AND a.object_type_from IN ('PA_STRUCTURES', 'PA_TASKS');
41404
41405 CURSOR get_sub_tasks(c_task_version_id NUMBER) IS
41406 SELECT '1'
41407 FROM dual
41408 WHERE EXISTS
41409 (SELECT 'xyz'
41410 FROM pa_object_relationships
41411 WHERE object_id_from1 = c_task_version_id
41412 AND object_type_from IN ('PA_TASKS', 'PA_STRUCTURES')
41413 AND relationship_type = 'S'
41414 );
41415
41416 CURSOR check_progress_allowed(c_element_version_id NUMBER) IS
41417 SELECT ptt.prog_entry_enable_flag
41418 FROM pa_task_types ptt
41419 , pa_proj_element_versions ppev,
41420 pa_proj_elements ppe
41421 WHERE ppev.element_version_id = c_element_version_id
41422 AND ppev.proj_element_id = ppe.proj_element_id
41423 AND ppe.TYPE_ID = ptt.task_type_id;
41424
41425 CURSOR get_peer_tasks IS
41426 SELECT b.object_id_to1 object_id_to1
41427 FROM pa_object_relationships a
41428 , pa_object_relationships b
41429 WHERE a.object_id_to1 = p_task_version_id
41430 AND a.object_type_to = 'PA_TASKS'
41431 AND a.object_id_from1 = b.object_id_from1
41432 AND a.object_type_from = b.object_type_from
41433 AND b.object_type_to = 'PA_TASKS'
41434 AND b.object_id_to1 <> p_task_version_id
41435 AND a.relationship_type = 'S'
41436 AND b.relationship_type = 'S';
41437
41438 c_get_peer_tasks get_peer_tasks%ROWTYPE;
41439
41440 --This cursor fetches all tasks that are child of ref task but now become child of p_task_version
41441 -- This case should not be possible for Outdent/Indent
41442 CURSOR cur_new_child(c_ref_task_version_id NUMBER, c_display_sequence NUMBER) IS
41443 SELECT por.object_id_to1, ppev.display_sequence, por.record_version_number, por.object_relationship_id
41444 FROM pa_object_relationships por,
41445 pa_proj_element_versions ppev
41446 WHERE object_id_from1 = c_ref_task_version_id
41447 AND object_id_to1 = element_version_id
41448 AND display_sequence > c_display_sequence
41449 AND relationship_type = 'S'
41450 order by display_sequence;
41451
41452
41453
41454 l_api_name CONSTANT VARCHAR(30) := 'BULK_OUTDENT_TASKS_LITE';
41455 l_api_version CONSTANT NUMBER := 1.0;
41456 l_return_status VARCHAR2(1);
41457 l_msg_count NUMBER;
41458 l_msg_data VARCHAR2(250);
41459 l_data VARCHAR2(250);
41460 l_msg_index_out NUMBER;
41461
41462 l_peer_or_sub VARCHAR2(30);
41463 l_project_id NUMBER;
41464 l_structure_id NUMBER;
41465 l_ref_task_id NUMBER;
41466 l_task_id NUMBER;
41467 l_task_record_version_number NUMBER;
41468 l_wbs_record_version_number NUMBER;
41469 l_dummy_char VARCHAR2(1);
41470 l_published_version VARCHAR2(1);
41471 l_relationship_subtype VARCHAR2(20);
41472 l_struc_version_from NUMBER;
41473 l_task_version_from NUMBER;
41474 l_version_from NUMBER;
41475 l_versioned VARCHAR2(1) := 'N';
41476 l_shared VARCHAR2(1) := 'N';
41477 l_rollup_task_id NUMBER;
41478
41479 l_tasks_ver_ids PA_NUM_1000_NUM := PA_NUM_1000_NUM();
41480 l_parent_ver_id NUMBER;
41481 l_error_msg_code VARCHAR2(30);
41482
41483 src_elem_ver_id NUMBER;
41484 src_proj_element_id NUMBER;
41485 src_wbs_number VARCHAR2(240);
41486 src_seq_number NUMBER;
41487 src_wbs_level NUMBER;
41488 src_parent_str_ver_id NUMBER;
41489 src_object_type VARCHAR2(30);
41490
41491 ref_elem_ver_id NUMBER;
41492 ref_proj_element_id NUMBER;
41493 ref_wbs_number VARCHAR2(240);
41494 ref_seq_number NUMBER;
41495 ref_wbs_level NUMBER;
41496 ref_parent_str_ver_id NUMBER;
41497 ref_object_type VARCHAR2(30);
41498
41499 l_old_parent_id NUMBER;
41500 l_dummy VARCHAR2(1);
41501
41502 l_new_weighting NUMBER(17,2);
41503 l_old_weighting NUMBER(17,2);
41504 l_progress_allowed VARCHAR2(1);
41505
41506 l_element_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
41507 l_proj_element_id_tab PA_FORECAST_GLOB.NumberTabTyp;
41508 l_object_type_tab PA_FORECAST_GLOB.VCTabTyp;
41509 l_project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
41510 l_parent_str_version_id_tab PA_FORECAST_GLOB.NumberTabTyp;
41511 l_display_sequence_tab PA_FORECAST_GLOB.NumberTabTyp;
41512 l_wbs_level_tab PA_FORECAST_GLOB.NumberTabTyp;
41513 l_old_wbs_level_tab PA_FORECAST_GLOB.NumberTabTyp;
41514 l_wbs_number_tab PA_FORECAST_GLOB.VCTabTyp;
41515 l_record_version_tab PA_FORECAST_GLOB.NumberTabTyp;
41516 l_changed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
41517
41518 l_wbs_number VARCHAR2(1000);
41519 src_branch_mask VARCHAR2(1000);
41520 ref_branch_mask VARCHAR2(1000);
41521 l_str1 VARCHAR2(1000);
41522 l_str2 VARCHAR2(1000);
41523 l_number NUMBER;
41524 l_new_wbs_number VARCHAR2(1000);
41525 l_user_id NUMBER;
41526 l_login_id NUMBER;
41527 l_update_new_child_rels VARCHAR2(1) := 'N';
41528 first_sub_task_below_src_flag boolean;
41529 last_sub_task_below_src VARCHAR2(1000);
41530 temp_old_branch_mask VARCHAR2(1000);
41531 temp_new_branch_mask VARCHAR2(1000);
41532 last_sub_task_number VARCHAR2(1000);
41533
41534 --bug 2843737
41535 CURSOR get_ref_parent_id(c_object_id_to1 NUMBER) is
41536 select object_id_from1
41537 from pa_object_relationships
41538 where object_id_to1 = c_object_id_to1
41539 and relationship_type = 'S';
41540 l_ref_parent_ver_id NUMBER;
41541 --end bug 2843737
41542
41543 CURSOR get_wbs_number(c_elem_ver_id NUMBER) is
41544 select wbs_number
41545 from pa_proj_element_versions
41546 where element_version_id = c_elem_ver_id
41547 and object_type ='PA_TASKS';
41548
41549 ref_parent_branch_mask VARCHAR2(1000);
41550
41551 -- hyau Bug 2852753
41552 l_delete_project_allowed VARCHAR2(1);
41553 l_update_proj_num_allowed VARCHAR2(1);
41554 l_update_proj_name_allowed VARCHAR2(1);
41555 l_update_proj_desc_allowed VARCHAR2(1);
41556 l_update_proj_dates_allowed VARCHAR2(1);
41557 l_update_proj_status_allowed VARCHAR2(1);
41558 l_update_proj_manager_allowed VARCHAR2(1);
41559 l_update_proj_org_allowed VARCHAR2(1);
41560 l_add_task_allowed VARCHAR2(1);
41561 l_delete_task_allowed VARCHAR2(1);
41562 l_update_task_num_allowed VARCHAR2(1);
41563 l_update_task_name_allowed VARCHAR2(1);
41564 l_update_task_dates_allowed VARCHAR2(1);
41565 l_update_task_desc_allowed VARCHAR2(1);
41566 l_update_parent_task_allowed VARCHAR2(1);
41567 l_update_task_org_allowed VARCHAR2(1);
41568
41569 l_err_code NUMBER := 0;
41570 l_err_stack VARCHAR2(200) := NULL;
41571 l_err_stage VARCHAR2(200) := NULL;
41572
41573 l_pm_product_code pa_projects_all.pm_product_code%TYPE;
41574
41575 CURSOR get_product_code ( c_project_id NUMBER ) IS
41576 SELECT pm_product_code
41577 FROM PA_PROJECTS_ALL
41578 WHERE project_id = c_project_id;
41579
41580 l_cur_project_id NUMBER;
41581 CURSOR cur_proj_id
41582 IS
41583 SELECT project_id
41584 FROM pa_proj_element_versions
41585 WHERE element_version_id = p_structure_version_id;
41586
41587 -- end hyau Bug 2852753
41588
41589 l_plannable_tasks_tbl PA_FP_ELEMENTS_PUB.l_impacted_task_in_tbl_typ;
41590 l_parent_task_id NUMBER;
41591 l_old_parent_task_id NUMBER;
41592 l_top_task_id NUMBER;
41593 l_old_top_task_id NUMBER;
41594 l_old_wbs_level NUMBER;
41595 i NUMBER;
41596
41597 CURSOR get_parent_task_id( c_task_id NUMBER, c_project_id NUMBER )
41598 IS
41599 SELECT parent_task_id, top_task_id
41600 FROM pa_tasks
41601 WHERE project_id = c_project_id
41602 AND task_id = c_task_id;
41603
41604 CURSOR cur_new_child_task( c_project_id NUMBER, c_wbs_level NUMBER,
41605 c_task_id NUMBER , c_parent_task_id NUMBER )
41606 IS
41607 SELECT pt.task_id, pt.top_task_id, pt.parent_task_id
41608 FROM pa_tasks pt, pa_proj_element_versions ppev
41609 WHERE pt.wbs_level = c_wbs_level
41610 AND parent_task_id = c_parent_task_id
41611 AND pt.project_id = c_project_id
41612 AND pt.task_id = ppev.proj_element_id
41613 AND ppev.display_sequence > ( SELECT display_sequence FROM pa_proj_element_versions
41614 WHERE project_id = c_project_id
41615 AND object_type = 'PA_TASKS'
41616 AND proj_element_id = c_task_id );
41617
41618 --For financial tasks we can directly join with pa_proj-element_version using proj_element_id
41619 --bcoz this api will be called as long as there is only one version for financial otherwise
41620 --publishing will take care.
41621
41622 l_wp_type VARCHAR2(1);
41623 l_weighting_basis_Code VARCHAR2(30);
41624
41625 cursor get_task_type_id(c_proj_element_id NUMBER) IS
41626 select type_id
41627 from pa_proj_elements
41628 where proj_element_id = c_proj_element_id;
41629 l_task_type_id NUMBER;
41630 l_wp_process_flag VARCHAR2(1);
41631
41632 Cursor get_top_task_ver_id(c_task_ver_id NUMBER) IS
41633 select object_id_to1
41634 from pa_object_relationships
41635 where relationshiP_type = 'S'
41636 and object_type_to = 'PA_TASKS'
41637 start with object_id_to1 = c_task_ver_id
41638 and object_type_to = 'PA_TASKS'
41639 and relationship_type = 'S'
41640 connect by prior object_id_from1 = object_id_to1
41641 and prior object_type_from = object_type_to
41642 and prior relationship_type = relationship_type
41643 intersect
41644 select a.object_id_to1
41645 from pa_object_relationships a, pa_proj_element_versions b
41646 where a.relationshiP_type = 'S'
41647 and a.object_id_from1 = b.parent_structure_version_id
41648 and b.element_version_id = c_task_ver_id
41649 and a.object_type_from = 'PA_STRUCTURES';
41650 l_old_par_ver_id NUMBER;
41651 l_new_par_ver_id NUMBER;
41652
41653 l_task_ver_ids2 SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
41654 l_lowest_task_flag1 VARCHAR2(1);
41655 l_lowest_task_flag2 VARCHAR2(1);
41656 l_fin_task_flag VARCHAR2(1);
41657 l_ref_parent_task_id NUMBER;
41658 message varchar2(2000);
41659 t_str varchar2(1);
41660
41661 BEGIN
41662
41663 pa_debug.init_err_stack ('PA_PROJECT_PUB.BULK_OUTDENT_TASKS_LITE');
41664
41665 IF (p_debug_mode = 'Y') THEN
41666 pa_debug.debug('PA_PROJECT_PUB.BULK_OUTDENT_TASKS_LITE begin');
41667 END IF;
41668
41669 IF (p_commit = FND_API.G_TRUE) THEN
41670 savepoint BULK_OUTDENT_TASKS_LITE;
41671 END IF;
41672
41673 /* Added below block to ensure that the new API's are controlled by Dev*/
41674 begin
41675 select 'x' into t_str
41676 from pji_system_parameters
41677 where name = 'BULK_LITE'
41678 and value = 'Y';
41679
41680 exception
41681 when no_data_found then
41682 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41683 p_msg_name => 'PA_LITE_API_CANT_USE');
41684 RAISE FND_API.G_EXC_ERROR;
41685 when others then
41686
41687 raise;
41688 end;
41689
41690
41691 IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id),' ') <> 'SHARE_FULL'
41692 OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_project_id),'N') = 'Y' THEN
41693 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41694 p_msg_name => 'PA_CANT_USE_LITE_API');
41695 RAISE FND_API.G_EXC_ERROR;
41696 END IF;
41697
41698 -- Set the G_ROLLUP_FLAG based on profile options
41699 --IF(p_calling_module = 'AMG') THEN
41700 PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
41701 --END IF;
41702 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
41703 PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_project_id,'OUTDENT',l_msg_data,l_return_status);
41704 IF l_return_status <> 'S'
41705 THEN
41706 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41707 p_msg_name =>l_msg_data );
41708 RAISE FND_API.G_EXC_ERROR;
41709 ELSE
41710 PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_project_id,p_structure_version_id,'OUTDENT');
41711 PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_project_id,p_task_version_id,p_structure_version_id,'OUTDENT');
41712 END IF;
41713 END IF;
41714
41715 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
41716 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
41717 END IF;
41718
41719 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
41720 FND_MSG_PUB.initialize;
41721 END IF;
41722
41723 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := 'N';
41724
41725 l_wp_process_flag := 'N';
41726
41727 IF p_calling_module = 'SELF_SERVICE' THEN
41728
41729 OPEN cur_proj_id;
41730 FETCH cur_proj_id INTO l_cur_project_id;
41731 CLOSE cur_proj_id;
41732
41733 OPEN get_product_code(l_cur_project_id);
41734 FETCH get_product_code INTO l_pm_product_code;
41735 CLOSE get_product_code;
41736
41737 If l_pm_product_code IS NOT NULL THEN
41738 pa_pm_controls.Get_Project_actions_allowed
41739 (P_PM_PRODUCT_CODE => l_pm_product_code,
41740 P_DELETE_PROJECT_ALLOWED => l_delete_project_allowed,
41741 P_UPDATE_PROJ_NUM_ALLOWED => l_update_proj_num_allowed,
41742 P_UPDATE_PROJ_NAME_ALLOWED => l_update_proj_name_allowed,
41743 P_UPDATE_PROJ_DESC_ALLOWED => l_update_proj_desc_allowed,
41744 P_UPDATE_PROJ_DATES_ALLOWED => l_update_proj_dates_allowed,
41745 P_UPDATE_PROJ_STATUS_ALLOWED => l_update_proj_status_allowed,
41746 P_UPDATE_PROJ_MANAGER_ALLOWED => l_update_proj_manager_allowed,
41747 P_UPDATE_PROJ_ORG_ALLOWED => l_update_proj_org_allowed,
41748 P_ADD_TASK_ALLOWED => l_add_task_allowed,
41749 P_DELETE_TASK_ALLOWED => l_delete_task_allowed,
41750 P_UPDATE_TASK_NUM_ALLOWED => l_update_task_num_allowed,
41751 P_UPDATE_TASK_NAME_ALLOWED => l_update_task_name_allowed,
41752 P_UPDATE_TASK_DATES_ALLOWED => l_update_task_dates_allowed,
41753 P_UPDATE_TASK_DESC_ALLOWED => l_update_task_desc_allowed,
41754 P_UPDATE_PARENT_TASK_ALLOWED => l_update_parent_task_allowed,
41755 P_UPDATE_TASK_ORG_ALLOWED => l_update_task_org_allowed,
41756 P_ERROR_CODE => l_err_code,
41757 P_ERROR_STACK => l_err_stack,
41758 P_ERROR_STAGE => l_err_stage );
41759
41760 IF l_err_code <> 0 THEN
41761 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41762 p_msg_name => l_err_stage);
41763 END IF;
41764 IF l_update_parent_task_allowed = 'N' THEN
41765 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41766 p_msg_name => 'PA_PR_PM_NO_MOVE_TASK');
41767 raise FND_API.G_EXC_ERROR;
41768 END IF;
41769 END IF;
41770 END IF;
41771
41772 IF (p_structure_version_id IS NOT NULL) AND
41773 (p_structure_version_id <> PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM) THEN
41774 IF ('N' = pa_proj_elements_utils.check_task_in_structure(
41775 p_structure_version_id,
41776 p_task_version_id)) THEN
41777 --deleting linked task. Error
41778 PA_UTILS.ADD_MESSAGE('PA', 'PA_PS_NO_OUTD_LINKED_TASK');
41779 raise FND_API.G_EXC_ERROR;
41780 END IF;
41781 END IF;
41782
41783 --hsiu added, for dates rollup
41784 --need to get peer task before it has been outdented.
41785 OPEN get_peer_tasks;
41786 LOOP
41787 FETCH get_peer_tasks INTO c_get_peer_tasks;
41788 EXIT WHEN get_peer_tasks%NOTFOUND;
41789 l_tasks_ver_ids.extend;
41790 l_tasks_ver_ids(l_tasks_ver_ids.count) := c_get_peer_tasks.object_id_to1;
41791 --added for task status rollup
41792 l_rollup_task_id := c_get_peer_tasks.object_id_to1;
41793 END LOOP;
41794 CLOSE get_peer_tasks;
41795
41796 -- Get Source Task Information
41797 BEGIN
41798 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
41799 INTO src_elem_ver_id, src_proj_element_id, src_wbs_number, src_wbs_level, src_seq_number, src_parent_str_ver_id, src_object_type
41800 FROM PA_PROJ_ELEMENT_VERSIONS
41801 WHERE element_version_id = p_task_version_id
41802 AND project_id = p_project_id
41803 AND parent_structure_version_id = p_structure_version_id;
41804 EXCEPTION
41805 WHEN OTHERS THEN
41806 raise;
41807 END;
41808
41809
41810 -- Lifecycle Phase validation Changes should be implemented here
41811
41812 IF src_wbs_level = 1 then
41813 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
41814 ,p_msg_name => 'PA_PS_CANNOT_OUTDENT');
41815 raise FND_API.G_EXC_ERROR;
41816 END IF;
41817
41818 -- Get Refernce Task Information
41819
41820 BEGIN
41821 SELECT element_version_id, proj_element_id, wbs_number, wbs_level, display_sequence, parent_structure_version_id, object_type
41822 INTO ref_elem_ver_id, ref_proj_element_id, ref_wbs_number, ref_wbs_level, ref_seq_number, ref_parent_str_ver_id, ref_object_type
41823 FROM PA_PROJ_ELEMENT_VERSIONS
41824 WHERE parent_structure_version_id = p_structure_version_id
41825 AND project_id = p_project_id
41826 AND (wbs_level = src_wbs_level-1)
41827 AND object_type = 'PA_TASKS'
41828 AND display_sequence =
41829 (SELECT max (display_sequence)
41830 FROM pa_proj_element_versions
41831 WHERE project_id = p_project_id
41832 AND parent_structure_version_id = p_structure_version_id
41833 AND (wbs_level = src_wbs_level-1)
41834 AND display_sequence < src_seq_number
41835 AND object_type = 'PA_TASKS');
41836 EXCEPTION
41837 WHEN OTHERS THEN
41838 raise;
41839 -- It will never return NO_DATA_FOUND as there will always at least one task with wbs_level-1
41840 END;
41841
41842 IF src_wbs_level < ref_wbs_level then
41843 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
41844 ,p_msg_name => 'PA_PS_CANNOT_OUTDENT');
41845 raise FND_API.G_EXC_ERROR;
41846 END IF;
41847
41848 -- While Outdenting always the source task will become peer of reference task
41849 l_peer_or_sub := 'PEER';
41850
41851 OPEN get_ref_parent_id(ref_elem_ver_id);
41852 FETCH get_ref_parent_id into l_ref_parent_ver_id;
41853 CLOSE get_ref_parent_id;
41854
41855 OPEN get_wbs_number(l_ref_parent_ver_id);
41856 FETCH get_wbs_number into ref_parent_branch_mask;
41857 CLOSE get_wbs_number;
41858
41859 -- Bug 8211519 : Dissallowing 'Outdenting' of a task if the task has a subproject association.
41860 if (Nvl(pa_relationship_utils.check_task_has_sub_proj(p_project_id
41861 , src_proj_element_id
41862 , p_task_version_id),'N') = 'Y') then
41863
41864 IF (p_debug_mode = 'Y') THEN
41865 pa_debug.debug('ERROR - PA_PROJECT_PUB.BULK_OUTDENT_TASKS_LITE ');
41866 END IF;
41867
41868 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41869 p_msg_name => 'PA_PS_TASK_HAS_SUB_PROJ');
41870 raise FND_API.G_EXC_ERROR;
41871
41872 end if;
41873
41874 --Check if ok to OUTDENT this task
41875 PA_PROJ_ELEMENTS_UTILS.Check_move_task_ok(
41876 p_task_ver_id => p_task_version_id
41877 ,x_return_status => l_return_status
41878 ,x_error_message_code => l_error_msg_code
41879 );
41880
41881 IF (l_return_status <> 'Y') THEN
41882 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41883 p_msg_name => l_error_msg_code);
41884 raise FND_API.G_EXC_ERROR;
41885 END IF;
41886
41887 --check if ok to create
41888 OPEN get_parent_version_id(ref_elem_ver_id);
41889 FETCH get_parent_version_id into l_parent_ver_id;
41890 CLOSE get_parent_version_id;
41891
41892 --if financial task, check if changing parent ok
41893 IF (PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y') THEN
41894 OPEN get_top_task_ver_id(l_parent_ver_id);
41895 FETCH get_top_task_ver_id into l_new_par_ver_id;
41896 CLOSE get_top_task_ver_id;
41897
41898 OPEN get_top_task_ver_id(p_task_version_id);
41899 FETCH get_top_task_ver_id into l_old_par_ver_id;
41900 CLOSE get_top_task_Ver_id;
41901
41902 IF (NVL(l_new_par_ver_id, -99) <> NVL (l_old_par_ver_id, -99)) THEN
41903 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41904 p_msg_name => 'PA_CANT_CHANGE_PARENT');
41905 raise FND_API.G_EXC_ERROR;
41906 END IF;
41907 END IF;
41908
41909 PA_PROJ_ELEMENTS_UTILS.Check_create_subtask_ok(
41910 p_parent_task_ver_id => l_parent_ver_id
41911 ,x_return_status => l_return_status
41912 ,x_error_message_code => l_error_msg_code
41913 );
41914
41915 IF (l_return_status <> 'Y') THEN
41916 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41917 p_msg_name => l_error_msg_code);
41918 raise FND_API.G_EXC_ERROR;
41919 END IF;
41920
41921 -- Added for FP_M changes. Bug 3305199 : Bhumesh xxx
41922
41923 If PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_project_id)
41924 IN ('SHARE_PARTIAL')
41925 Then
41926
41927 PA_TASKS_MAINT_UTILS.CHECK_MOVE_FINANCIAL_TASK_OK (
41928 p_task_version_id => p_task_version_id
41929 , p_ref_task_version_id => ref_elem_ver_id
41930 , x_return_status => x_return_status
41931 , x_msg_count => x_msg_count
41932 , x_msg_data => x_msg_data
41933 , x_error_msg_code => l_error_msg_code);
41934
41935 IF (x_return_status <> 'S') THEN --Bug 3831786 Added
41936 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
41937 p_msg_name => l_error_msg_code);
41938 raise FND_API.G_EXC_ERROR;
41939 End If;
41940 End If;
41941
41942 --check the task is a lowest task bug 3301192
41943 l_lowest_task_flag1 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
41944
41945 -- End of FP_M changes
41946
41947 /*** The following part should do the same task as done by PA_TASK_PUB1.Update_Task_Version and Update_wbs_numbers ***/
41948
41949 -- Logic Added for plsql table
41950 -- Basically earlier this was done thru update_task_version and update_wbs_numbers
41951
41952 l_element_version_id_tab.delete;
41953 l_proj_element_id_tab.delete;
41954 l_object_type_tab.delete;
41955 l_project_id_tab.delete;
41956 l_parent_str_version_id_tab.delete;
41957 l_display_sequence_tab.delete;
41958 l_wbs_level_tab.delete;
41959 l_old_wbs_level_tab.delete;
41960 l_wbs_number_tab.delete;
41961 l_record_version_tab.delete;
41962 l_changed_flag_tab.delete;
41963
41964 -- Sridhar Huawei 18-Sept add the below if statement.
41965 -- Need not derive wbs_number and wbs_level in defer mode
41966 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='N') THEN
41967 BEGIN
41968 /*
41969 SELECT distinct element_version_id, proj_element_id, object_type,
41970 project_id, parent_structure_version_id,
41971 display_sequence, wbs_level, wbs_number,
41972 record_version_number, 'N' changed_flag
41973 BULK COLLECT INTO l_element_version_id_tab,
41974 l_proj_element_id_tab, l_object_type_tab,
41975 l_project_id_tab, l_parent_str_version_id_tab,
41976 l_display_sequence_tab, l_wbs_level_tab,
41977 l_wbs_number_tab, l_record_version_tab,
41978 l_changed_flag_tab
41979 FROM
41980 pa_proj_element_versions
41981 WHERE
41982 project_id = p_project_id
41983 AND parent_structure_version_id = p_structure_version_id
41984 AND object_type = 'PA_TASKS'
41985 AND(
41986 element_version_id = p_task_version_id -- Source task itself
41987 OR element_version_id IN -- All tasks below the source task
41988 (select object_id_to1
41989 from pa_object_relationships
41990 where relationship_type = 'S'
41991 and object_type_to = 'PA_TASKS'
41992 start with object_id_from1 = l_ref_parent_ver_id
41993 connect by object_id_from1 = PRIOR object_id_to1
41994 and relationship_type = prior relationship_type
41995 and relationship_type = 'S')
41996 )
41997 ORDER BY display_sequence ;
41998 */
41999 select proj_element_id INTO l_ref_parent_task_id from pa_proj_element_versions where element_version_id = l_ref_parent_ver_id and project_id= p_project_id;
42000
42001 insert into pa_tasks_tmp (task_id)
42002 SELECT task_id
42003 FROM pa_tasks
42004 WHERE project_id = p_project_id
42005 START WITH parent_task_id = l_ref_parent_task_id
42006 CONNECT BY parent_task_id = prior task_id;
42007
42008 insert into pa_tasks_tmp (task_id)
42009 select proj_element_id
42010 from pa_proj_element_versions
42011 where ELEMENT_VERSION_ID = p_task_version_id and project_id = p_project_id and not exists (select null from pa_tasks_tmp where task_id = proj_element_id);
42012
42013 SELECT /*+ ordered index(ev1 pa_proj_element_versions_n1) */
42014 element_version_id, proj_element_id, object_type,
42015 project_id, parent_structure_version_id,
42016 display_sequence, wbs_level, wbs_number,
42017 record_version_number, 'N' changed_flag
42018 BULK COLLECT INTO l_element_version_id_tab,
42019 l_proj_element_id_tab, l_object_type_tab,
42020 l_project_id_tab, l_parent_str_version_id_tab,
42021 l_display_sequence_tab, l_wbs_level_tab,
42022 l_wbs_number_tab, l_record_version_tab,
42023 l_changed_flag_tab
42024 FROM pa_tasks_tmp t1 ,
42025 pa_proj_element_versions ev1
42026 WHERE
42027 project_id = p_project_id
42028 AND parent_structure_version_id = p_structure_version_id
42029 AND object_type = 'PA_TASKS'
42030 AND proj_element_id = t1.task_id
42031 ORDER BY display_sequence ;
42032
42033 l_old_wbs_level_tab := l_wbs_level_tab;
42034 EXCEPTION
42035 WHEN OTHERS THEN
42036 raise;
42037 END;
42038
42039 -- For now we are updating wbs_level and wbs_number in seprate loops. It can be combined later on
42040 -- Here we can also incorporate sequence number update. In OUTDENT sequence number does not change.
42041
42042 -- Update wbs level
42043
42044 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
42045 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
42046 l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
42047 l_changed_flag_tab(j) := 'Y';
42048 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) > src_wbs_level) THEN
42049 -- Direct Childs of source
42050 l_wbs_level_tab(j) := l_wbs_level_tab(j) - 1;
42051 l_changed_flag_tab(j) := 'Y';
42052 ELSIF (l_display_sequence_tab(j) > src_seq_number) AND (l_wbs_level_tab(j) <= src_wbs_level) THEN
42053 -- Exit level changes, IT means no Direct childs are left
42054 EXIT;
42055 END IF;
42056 END LOOP;
42057
42058
42059 -- Update wbs_number
42060
42061
42062 src_branch_mask := src_wbs_number;
42063 ref_branch_mask := ref_wbs_number;
42064 first_sub_task_below_src_flag := false;
42065
42066
42067 FOR j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST LOOP
42068 IF l_element_version_id_tab(j) = src_elem_ver_id THEN
42069 IF src_wbs_level = 2 THEN -- This is going to be a top task
42070 l_wbs_number := to_char(to_number(ref_wbs_number)+1);
42071 l_wbs_number_tab(j) := l_wbs_number;
42072 l_changed_flag_tab(j) := 'Y';
42073 l_new_wbs_number := l_wbs_number;
42074 ELSE
42075 l_number := instr(ref_wbs_number,'.', -1, 1);
42076 l_str1 := substr(ref_wbs_number, 1, l_number -1);
42077 l_str2 := substr(ref_wbs_number, l_number + 1);
42078 l_str2 := to_char(to_number(l_str2 + 1));
42079 l_wbs_number := l_str1 || '.' || l_str2;
42080 l_wbs_number_tab(j) := l_wbs_number;
42081 l_changed_flag_tab(j) := 'Y';
42082 l_new_wbs_number := l_wbs_number;
42083 END IF;
42084 ELSE -- IF l_element_version_id_tab(j) <> src_elem_ver_id AND l_display_sequence_tab(j) > src_seq_number THEN
42085 IF l_display_sequence_tab(j) > src_seq_number THEN
42086 IF src_wbs_level = 2 THEN -- Source is going to be a top task
42087 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
42088 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
42089 -- Direct childs of source
42090 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
42091 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
42092 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
42093 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
42094 l_wbs_number_tab(j) := l_wbs_number;
42095 l_changed_flag_tab(j) := 'Y';
42096 IF l_old_wbs_level_tab(j) = src_wbs_level+1 THEN
42097 first_sub_task_below_src_flag := true;
42098 last_sub_task_below_src := l_wbs_number;
42099 END IF;
42100 ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
42101 AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
42102 IF first_sub_task_below_src_flag = false THEN
42103 l_wbs_number := l_new_wbs_number || '.1';
42104 first_sub_task_below_src_flag := true;
42105 last_sub_task_below_src := l_wbs_number;
42106 temp_old_branch_mask := l_wbs_number_tab(j);
42107 temp_new_branch_mask := l_wbs_number;
42108 l_wbs_number_tab(j) := l_wbs_number;
42109 l_changed_flag_tab(j) := 'Y';
42110 ELSE
42111 IF (l_old_wbs_level_tab(j) = src_wbs_level) THEN
42112 l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
42113 l_str1 := to_char(to_number(l_str1 + 1));
42114 l_wbs_number := l_new_wbs_number || '.' || l_str1;
42115 temp_old_branch_mask := l_wbs_number_tab(j);
42116 temp_new_branch_mask := l_wbs_number;
42117 l_wbs_number_tab(j) := l_wbs_number;
42118 l_changed_flag_tab(j) := 'Y';
42119 last_sub_task_below_src := l_wbs_number;
42120 ELSE
42121 l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
42122 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
42123 l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
42124 l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
42125 l_wbs_number_tab(j) := l_wbs_number;
42126 l_changed_flag_tab(j) := 'Y';
42127 END IF;
42128 END IF;
42129 ELSE
42130 IF(instr(l_wbs_number_tab(j), '.') <> 0) then
42131 l_str1 := substr(l_wbs_number_tab(j), 1, instr(l_wbs_number_tab(j), '.') - 1);
42132 l_str2 := substr(l_wbs_number_tab(j), instr(l_wbs_number_tab(j), '.'));
42133 l_str1 := to_char(to_number(l_str1) + 1);
42134 l_wbs_number := l_str1 || l_str2;
42135 l_wbs_number_tab(j) := l_wbs_number;
42136 l_changed_flag_tab(j) := 'Y';
42137 ELSE
42138 l_wbs_number := to_char(to_number(l_wbs_number_tab(j)) + 1);
42139 l_wbs_number_tab(j) := l_wbs_number;
42140 l_changed_flag_tab(j) := 'Y';
42141 END IF;
42142 END IF;
42143 ELSE
42144 IF((substr(l_wbs_number_tab(j), 1, length(src_branch_mask)) = src_branch_mask)
42145 AND(substr(l_wbs_number_tab(j), length(src_branch_mask)+1, 1) = '.')) THEN
42146 -- Direct childs of source
42147 l_number := instr(l_wbs_number_tab(j), src_branch_mask, 1, 1);
42148 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
42149 l_str2 := substr(l_wbs_number_tab(j), length(src_branch_mask)+l_number);
42150 l_wbs_number := l_str1 || l_new_wbs_number || l_str2;
42151 l_wbs_number_tab(j) := l_wbs_number;
42152 l_changed_flag_tab(j) := 'Y';
42153 IF (l_old_wbs_level_tab(j) = src_wbs_level+1) THEN
42154 first_sub_task_below_src_flag := true;
42155 last_sub_task_below_src := l_wbs_number;
42156 END IF;
42157 ELSIF((substr(l_wbs_number_tab(j), 1, length(ref_branch_mask)) = ref_branch_mask)
42158 AND(substr(l_wbs_number_tab(j), length(ref_branch_mask)+1, 1) = '.')) THEN
42159 IF first_sub_task_below_src_flag = false THEN
42160 l_wbs_number := l_new_wbs_number || '.1';
42161 first_sub_task_below_src_flag := true;
42162 last_sub_task_below_src := l_wbs_number;
42163 temp_old_branch_mask := l_wbs_number_tab(j);
42164 temp_new_branch_mask := l_wbs_number;
42165 l_wbs_number_tab(j) := l_wbs_number;
42166 l_changed_flag_tab(j) := 'Y';
42167 ELSE
42168 IF l_old_wbs_level_tab(j) = src_wbs_level THEN
42169 l_str1 := substr(last_sub_task_below_src, length(l_new_wbs_number) + 2);
42170 l_str1 := to_char(to_number(l_str1 + 1));
42171 l_wbs_number := l_new_wbs_number || '.' || l_str1;
42172 temp_old_branch_mask := l_wbs_number_tab(j);
42173 temp_new_branch_mask := l_wbs_number;
42174 l_wbs_number_tab(j) := l_wbs_number;
42175 l_changed_flag_tab(j) := 'Y';
42176 last_sub_task_below_src := l_wbs_number;
42177 ELSE
42178 l_number := instr(l_wbs_number_tab(j), temp_old_branch_mask, 1, 1);
42179 l_str1 := substr(l_wbs_number_tab(j), 1, l_number -1);
42180 l_str2 := substr(l_wbs_number_tab(j), length(temp_old_branch_mask)+l_number);
42181 l_wbs_number := l_str1 || temp_new_branch_mask || l_str2;
42182 l_wbs_number_tab(j) := l_wbs_number;
42183 l_changed_flag_tab(j) := 'Y';
42184 END IF;
42185 END IF;
42186 ELSE
42187 l_str1 := substr(l_wbs_number_tab(j), length(ref_parent_branch_mask) + 2);
42188 IF(instr(l_str1, '.') <> 0) THEN
42189 l_str2 := substr(l_str1, instr(l_str1, '.'));
42190 l_str1 := substr(l_str1, 1, instr(l_str1, '.') - 1);
42191 l_str1 := to_char(to_number(l_str1) + 1);
42192 l_wbs_number := ref_parent_branch_mask || '.' || l_str1 || l_str2;
42193 l_wbs_number_tab(j) := l_wbs_number;
42194 l_changed_flag_tab(j) := 'Y';
42195 ELSE
42196 l_str1:= to_char(to_number(l_str1) + 1);
42197 l_wbs_number := ref_parent_branch_mask || '.' || l_str1;
42198 l_wbs_number_tab(j) := l_wbs_number;
42199 l_changed_flag_tab(j) := 'Y';
42200 END IF;
42201 END IF;
42202 END IF;
42203 END IF;
42204 END IF;
42205 END LOOP;
42206
42207
42208 l_user_id := fnd_global.user_id;
42209 l_login_id := fnd_global.login_id;
42210
42211 -- Locking should be implemented here
42212
42213 FORALL j IN l_element_version_id_tab.FIRST..l_element_version_id_tab.LAST
42214 UPDATE PA_PROJ_ELEMENT_VERSIONS
42215 SET
42216 wbs_level = l_wbs_level_tab(j) ,
42217 wbs_number = l_wbs_number_tab(j) ,
42218 last_update_date = sysdate ,
42219 last_updated_by = l_user_id ,
42220 last_update_login = l_login_id ,
42221 record_version_number = l_record_version_tab(j)+1
42222 WHERE element_version_id = l_element_version_id_tab(j)
42223 AND l_changed_flag_tab(j)='Y';
42224
42225 END IF;
42226 -- Sridhar Huawei 18-Sept add above end if
42227
42228 -- Update Relationship
42229
42230 IF ref_object_type = 'PA_TASKS'
42231 THEN
42232 IF l_peer_or_sub = 'PEER'
42233 THEN
42234 OPEN cur_obj_rel( ref_elem_ver_id );
42235 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
42236 CLOSE cur_obj_rel;
42237
42238 l_relationship_subtype := v_cur_obj_rel_rec.relationship_subtype;
42239
42240 IF v_cur_obj_rel_rec.relationship_subtype = 'STRUCTURE_TO_TASK'
42241 THEN
42242 l_struc_version_from := v_cur_obj_rel_rec.object_id_from1;
42243 l_task_version_from := null;
42244 ELSE
42245 l_task_version_from := v_cur_obj_rel_rec.object_id_from1;
42246 l_struc_version_from := null;
42247 END IF;
42248
42249 --There could be some tasks with sequence number greater than the p_task_version that now become
42250 --children of p_task_version.
42251 -- I don't think so that this is needed. This is not possible in any case
42252 l_update_new_child_rels := 'Y';
42253
42254 ELSE -- l_peer_or_sub = 'SUB' Basically this case will not be for OUTDENT
42255 --parent task is the reference task
42256 l_task_version_from := ref_elem_ver_id;
42257 l_struc_version_from := null;
42258 l_relationship_subtype := 'TASK_TO_TASK';
42259 END IF;
42260 -- The following case is not possible for Indent/Outdent
42261 ELSIF ref_object_type = 'PA_STRUCTURES'
42262 THEN
42263 l_struc_version_from := ref_elem_ver_id;
42264 l_task_version_from := null;
42265 l_relationship_subtype := 'STRUCTURE_TO_TASK';
42266 END IF; -- ref_object_type = 'PA_TASKS'
42267
42268
42269 --update relatonship of the task version p_task_version.
42270 --set structure_version_from and task_version_from accordingly.
42271 OPEN cur_obj_rel( p_task_version_id );
42272 FETCH cur_obj_rel INTO v_cur_obj_rel_rec;
42273 CLOSE cur_obj_rel;
42274
42275 --for task weighting
42276 OPEN get_task_weighting(p_task_version_id);
42277 FETCH get_task_weighting into l_old_parent_id, l_old_weighting;
42278 CLOSE get_task_weighting;
42279
42280
42281 IF(l_task_version_from is not null) THEN
42282 l_version_from := l_task_version_from;
42283 ELSE
42284 l_version_from := l_struc_version_from;
42285 END IF;
42286
42287 IF (l_version_from = p_task_version_id) THEN
42288 l_new_weighting := l_old_weighting;
42289 ELSE
42290 OPEN get_sub_tasks(l_version_from);
42291 FETCH get_sub_tasks into l_dummy;
42292 IF (get_sub_tasks%NOTFOUND) THEN
42293 l_new_weighting := 100;
42294 --bug 2673570
42295 OPEN check_progress_allowed(p_task_version_id);
42296 FETCH check_progress_allowed INTO l_progress_allowed;
42297 CLOSE check_progress_allowed;
42298
42299 if l_progress_allowed = 'N' then
42300 l_new_weighting := 0;
42301 end if;
42302 --bug 2673570
42303 ELSE
42304 l_new_weighting := 0;
42305 END IF;
42306 CLOSE get_sub_tasks;
42307 END IF;
42308
42309 PA_RELATIONSHIP_PVT.Update_Relationship
42310 (
42311 p_api_version => p_api_version
42312 ,p_init_msg_list => p_init_msg_list
42313 ,p_commit => p_commit
42314 ,p_validate_only => p_validate_only
42315 ,p_validation_level => p_validation_level
42316 ,p_calling_module => p_calling_module
42317 ,p_debug_mode => p_debug_mode
42318 ,p_max_msg_count => p_max_msg_count
42319 ,p_object_relationship_id => v_cur_obj_rel_rec.object_relationship_id
42320 ,p_project_id_from => null
42321 ,p_structure_id_from => null
42322 ,p_structure_version_id_from => l_struc_version_from
42323 ,p_task_version_id_from => l_task_version_from
42324 ,p_project_id_to => null
42325 ,p_structure_id_to => null
42326 ,p_structure_version_id_to => null
42327 ,p_task_version_id_to => p_task_version_id
42328 ,p_relationship_type => 'S'
42329 ,p_relationship_subtype => l_relationship_subtype
42330 ,p_weighting_percentage => l_new_weighting
42331 ,p_record_version_number => v_cur_obj_rel_rec.record_version_number
42332 ,x_return_status => l_return_status
42333 ,x_msg_count => l_msg_count
42334 ,x_msg_data => l_msg_data
42335 );
42336
42337
42338 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
42339 x_msg_count := FND_MSG_PUB.count_msg;
42340 IF x_msg_count = 1 then
42341 pa_interface_utils_pub.get_messages
42342 (p_encoded => FND_API.G_TRUE,
42343 p_msg_index => 1,
42344 p_msg_count => l_msg_count,
42345 p_msg_data => l_msg_data,
42346 p_data => l_data,
42347 p_msg_index_out => l_msg_index_out);
42348 x_msg_data := l_data;
42349 END IF;
42350 raise FND_API.G_EXC_ERROR;
42351 END IF;
42352
42353 -- I don't think the following code is needed. This case is impossible in case of OUTDENT
42354 IF l_update_new_child_rels = 'Y' -- AND p_action IN( 'OUTDENT' )
42355 THEN
42356 FOR cur_new_child_rec in cur_new_child(ref_elem_ver_id, src_seq_number) LOOP
42357 OPEN get_sub_tasks(p_task_version_id);
42358 FETCH get_sub_tasks into l_dummy;
42359 IF (get_sub_tasks%NOTFOUND) THEN
42360 l_new_weighting := 100;
42361 ELSE
42362 l_new_weighting := 0;
42363 END IF;
42364 CLOSE get_sub_tasks;
42365
42366 --bug 4099488
42367 IF PA_RELATIONSHIP_UTILS.check_dependencies_valid(p_task_version_id, cur_new_child_rec.object_id_to1) = 'N' THEN
42368 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42369 p_msg_name => 'PA_INV_MOV_TSK_DEP_ERR');
42370 raise FND_API.G_EXC_ERROR;
42371 END IF;
42372 --end bug 4099488
42373
42374 PA_RELATIONSHIP_PVT.Update_Relationship
42375 (
42376 p_api_version => p_api_version
42377 ,p_init_msg_list => p_init_msg_list
42378 ,p_commit => p_commit
42379 ,p_validate_only => p_validate_only
42380 ,p_validation_level => p_validation_level
42381 ,p_calling_module => p_calling_module
42382 ,p_debug_mode => p_debug_mode
42383 ,p_max_msg_count => p_max_msg_count
42384 ,p_object_relationship_id => cur_new_child_rec.object_relationship_id
42385 ,p_project_id_from => null
42386 ,p_structure_id_from => null
42387 ,p_structure_version_id_from => null
42388 ,p_task_version_id_from => p_task_version_id
42389 ,p_project_id_to => null
42390 ,p_structure_id_to => null
42391 ,p_structure_version_id_to => null
42392 ,p_task_version_id_to => cur_new_child_rec.object_id_to1
42393 ,p_relationship_type => 'S'
42394 ,p_relationship_subtype => 'TASK_TO_TASK'
42395 ,p_weighting_percentage => l_new_weighting
42396 ,p_record_version_number => cur_new_child_rec.record_version_number
42397 ,x_return_status => x_return_status
42398 ,x_msg_count => x_msg_count
42399 ,x_msg_data => x_msg_data
42400 );
42401
42402 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
42403 x_msg_count := FND_MSG_PUB.count_msg;
42404 IF x_msg_count = 1 then
42405 pa_interface_utils_pub.get_messages
42406 (p_encoded => FND_API.G_TRUE,
42407 p_msg_index => 1,
42408 p_msg_count => l_msg_count,
42409 p_msg_data => l_msg_data,
42410 p_data => l_data,
42411 p_msg_index_out => l_msg_index_out);
42412 x_msg_data := l_data;
42413 END IF;
42414 raise FND_API.G_EXC_ERROR;
42415 END IF;
42416
42417 END LOOP;
42418 END IF;
42419
42420 --for task weighting
42421 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
42422 p_task_version_id => l_old_parent_id
42423 ,x_return_status => l_return_status
42424 ,x_msg_count => l_msg_count
42425 ,x_msg_data => l_msg_data
42426 );
42427
42428 x_msg_count := FND_MSG_PUB.count_msg;
42429 IF x_msg_count = 1 then
42430 pa_interface_utils_pub.get_messages
42431 (p_encoded => FND_API.G_TRUE,
42432 p_msg_index => 1,
42433 p_msg_count => l_msg_count,
42434 p_msg_data => l_msg_data,
42435 p_data => l_data,
42436 p_msg_index_out => l_msg_index_out);
42437 x_msg_data := l_data;
42438 END IF;
42439
42440 --bug 2673570
42441 PA_TASK_PVT1.RECALC_TASKS_WEIGHTING(
42442 p_task_version_id => p_task_version_id
42443 ,x_return_status => l_return_status
42444 ,x_msg_count => l_msg_count
42445 ,x_msg_data => l_msg_data
42446 );
42447
42448 x_msg_count := FND_MSG_PUB.count_msg;
42449 IF x_msg_count = 1 then
42450 pa_interface_utils_pub.get_messages
42451 (p_encoded => FND_API.G_TRUE,
42452 p_msg_index => 1,
42453 p_msg_count => l_msg_count,
42454 p_msg_data => l_msg_data,
42455 p_data => l_data,
42456 p_msg_index_out => l_msg_index_out);
42457 x_msg_data := l_data;
42458 END IF;
42459 --bug 2673570
42460 --end changes for task weighting
42461
42462
42463 /*** End Update_task_version and Update_wbs_number code ***/
42464
42465 SELECT proj_element_id, project_id INTO l_structure_id, l_project_id
42466 FROM pa_proj_element_versions
42467 WHERE element_version_id = ( Select parent_structure_version_id
42468 from pa_proj_element_versions
42469 where element_version_id = p_task_version_id )
42470 AND object_type = 'PA_STRUCTURES';
42471
42472
42473 --Do financial task check
42474 --If financial
42475 OPEN cur_struc_type( l_structure_id );
42476 FETCH cur_struc_type INTO l_dummy_char;
42477 IF cur_struc_type%FOUND
42478 THEN
42479 --If structure has any published versions.
42480 l_published_version := 'N';
42481 OPEN cur_pub_versions( l_structure_id, l_project_id );
42482 FETCH cur_pub_versions INTO l_published_version;
42483 CLOSE cur_pub_versions;
42484
42485
42486 l_versioned := PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(
42487 l_project_id);
42488 l_shared := PA_PROJECT_STRUCTURE_UTILS.Check_Sharing_Enabled(
42489 l_project_id);
42490
42491 l_fin_task_flag := PA_Proj_Elements_Utils.CHECK_IS_FINANCIAL_TASK(src_proj_element_id); --outdent in corresponding task in pa_tasks
42492
42493 IF (NVL( l_published_version, 'N' ) = 'N' AND l_fin_task_flag = 'Y' ) OR
42494 (l_published_version = 'Y' AND l_versioned = 'N' AND l_shared = 'Y' AND l_fin_task_flag = 'Y' )
42495 OR ((l_published_version = 'Y') AND (l_shared = 'N') AND (l_fin_task_flag = 'Y')) -- Bug # 5064340. -- To accomodate split financial tasks.
42496 THEN
42497
42498 SELECT ppev.proj_element_id, pt.record_version_number, ppa.wbs_record_version_number, ppev.project_id
42499 INTO l_task_id, l_task_record_version_number, l_wbs_record_version_number, l_project_id
42500 FROM PA_TASKS pt,
42501 pa_proj_elem_ver_structure ppa,
42502 PA_PROJ_ELEMENT_VERSIONS ppev
42503 WHERE ppev.element_version_id = p_task_version_id
42504 AND ppev.parent_structure_version_id = ppa.element_version_id
42505 AND ppev.project_id = ppa.project_id
42506 AND ppev.proj_element_id = pt.task_id;
42507
42508 SELECT record_version_number, parent_task_id, wbs_level --get old parent id for bug 2947492 (outdent )
42509 ,top_task_id
42510 INTO l_task_record_version_number, l_old_parent_task_id, l_old_wbs_level
42511 ,l_old_top_task_id
42512 FROM pa_tasks
42513 WHERE task_id = l_task_id
42514 AND project_id = l_project_id;
42515
42516 PA_TASKS_MAINT_PUB.Edit_Task_Structure(
42517 p_project_id => l_project_id
42518 ,p_task_id => l_task_id
42519 ,p_edit_mode => 'OUTDENT'
42520 ,p_record_version_number => l_task_record_version_number
42521 ,p_wbs_record_version_number => 1
42522 ,x_return_status => l_return_status
42523 ,x_msg_count => l_msg_count
42524 ,x_msg_data => l_msg_data );
42525
42526 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
42527 x_msg_count := FND_MSG_PUB.count_msg;
42528 IF x_msg_count = 1 then
42529 pa_interface_utils_pub.get_messages
42530 (p_encoded => FND_API.G_TRUE,
42531 p_msg_index => 1,
42532 p_msg_count => l_msg_count,
42533 p_msg_data => l_msg_data,
42534 p_data => l_data,
42535 p_msg_index_out => l_msg_index_out);
42536 x_msg_data := l_data;
42537 END IF;
42538 raise FND_API.G_EXC_ERROR;
42539 END IF;
42540
42541 OPEN get_parent_task_id( l_task_id , l_project_id );
42542 FETCH get_parent_task_id INTO l_parent_task_id,l_top_task_id;
42543 CLOSE get_parent_task_id;
42544
42545 --bug 2967204
42546 --Cannot move out of the current hierarchy
42547 IF NVL( l_top_task_id, -99 ) <> NVL( l_old_top_task_id, -99 )
42548 THEN
42549 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42550 p_msg_name => 'PA_CANT_CHANGE_PARENT');
42551 raise FND_API.G_EXC_ERROR;
42552 END IF;
42553 END IF;
42554 END IF;
42555 CLOSE cur_struc_type;
42556
42557 -- Added for date rollup; workplan only
42558
42559 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'WORKPLAN') = 'Y' then
42560
42561 -- Added for FP_M changes Bug 3305199 : Bhumesh
42562 If PA_Project_Structure_Utils.Check_Third_Party_Sch_Flag(P_Project_ID) = 'Y' Then
42563
42564 PA_PROJECT_STRUCTURE_PVT1.update_sch_dirty_flag(
42565 p_structure_version_id => P_Structure_Version_ID
42566 ,p_dirty_flag => 'Y' --bug 3902282
42567 ,x_return_status => x_return_status
42568 ,x_msg_count => x_msg_count
42569 ,x_msg_data => x_msg_data
42570 );
42571
42572 IF l_return_status <> FND_API.G_RET_STS_SUCCESS then
42573 x_msg_count := FND_MSG_PUB.count_msg;
42574 If x_msg_count = 1 then
42575 pa_interface_utils_pub.get_messages
42576 (p_encoded => FND_API.G_TRUE,
42577 p_msg_index => 1,
42578 p_msg_count => l_msg_count,
42579 p_msg_data => l_msg_data,
42580 p_data => l_data,
42581 p_msg_index_out => l_msg_index_out);
42582 x_msg_data := l_data;
42583 End If;
42584 raise FND_API.G_EXC_ERROR;
42585 End If;
42586 End If;
42587 -- End of FP_M changes
42588
42589 l_tasks_ver_ids.extend;
42590 l_tasks_ver_ids(l_tasks_ver_ids.count) := p_task_version_id;
42591
42592 --added for task status rollup
42593 IF (l_rollup_task_id IS NULL) THEN
42594 l_rollup_task_id := p_task_version_id;
42595 END IF;
42596
42597 PA_STRUCT_TASK_ROLLUP_PUB.Tasks_Rollup(
42598 p_commit => FND_API.G_FALSE,
42599 p_element_versions => l_tasks_ver_ids,
42600 x_return_status => l_return_status,
42601 x_msg_count => l_msg_count,
42602 x_msg_data => l_msg_data);
42603
42604 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42605 x_msg_count := FND_MSG_PUB.count_msg;
42606 if x_msg_count = 1 then
42607 pa_interface_utils_pub.get_messages
42608 (p_encoded => FND_API.G_TRUE,
42609 p_msg_index => 1,
42610 p_msg_count => l_msg_count,
42611 p_msg_data => l_msg_data,
42612 p_data => l_data,
42613 p_msg_index_out => l_msg_index_out);
42614 x_msg_data := l_data;
42615 end if;
42616 raise FND_API.G_EXC_ERROR;
42617 end if;
42618
42619 --if versioning is off, rollup.
42620 IF ('N' = PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(l_project_id)) THEN
42621 PA_STRUCT_TASK_ROLLUP_PUB.Task_Status_Rollup(
42622 p_structure_version_id => p_structure_version_id
42623 ,p_element_version_id => l_rollup_task_id
42624 ,x_return_status => l_return_status
42625 ,x_msg_count => l_msg_count
42626 ,x_msg_data => l_msg_data
42627 );
42628
42629 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42630 x_msg_count := FND_MSG_PUB.count_msg;
42631 if x_msg_count = 1 then
42632 pa_interface_utils_pub.get_messages
42633 (p_encoded => FND_API.G_TRUE,
42634 p_msg_index => 1,
42635 p_msg_count => l_msg_count,
42636 p_msg_data => l_msg_data,
42637 p_data => l_data,
42638 p_msg_index_out => l_msg_index_out);
42639 x_msg_data := l_data;
42640 end if;
42641 raise FND_API.G_EXC_ERROR;
42642 end if;
42643 END IF;
42644
42645 END IF;
42646
42647 --bug 3010538 ( outdent )
42648 --bug 3053281 --set flag if not (manual and workplan only)
42649 l_wp_type := PA_PROJECT_STRUCTURE_UTILS.Get_Struc_Type_For_Version(p_structure_version_id, 'WORKPLAN');
42650 l_weighting_basis_Code := PA_PROGRESS_UTILS.GET_TASK_WEIGHTING_BASIS(p_project_id);
42651 --3035902: process update flag changes
42652 OPEN get_task_type_id(src_proj_element_id);
42653 FETCH get_task_type_id INTO l_task_type_id;
42654 CLOSE get_task_type_id;
42655
42656 --set update process flag if necessary;
42657 IF (l_wp_process_flag = 'N') THEN
42658 --may need to update process flag
42659 IF ((l_shared = 'N') AND
42660 (l_wp_type = 'Y') AND
42661 (pa_task_type_utils.check_tk_type_progressable(l_task_type_id)='Y') AND
42662 (l_weighting_basis_code <> 'MANUAL'))
42663 THEN
42664 --split and workplan; only update if progressable task added
42665 l_wp_process_flag := 'Y';
42666 ELSIF ((l_shared = 'N') AND
42667 (l_wp_type = 'N')) THEN
42668 --split and financial; update
42669 l_wp_process_flag := 'Y';
42670 ELSIF (l_shared = 'Y') THEN
42671 l_wp_process_flag := 'Y';
42672 END IF;
42673 END IF;
42674
42675 PA_PROJ_TASK_STRUC_PUB.SET_UPDATE_WBS_FLAG
42676 (
42677 p_calling_context => 'SELF_SERVICE'
42678 ,p_project_id => p_project_id
42679 ,p_structure_version_id => p_structure_version_id
42680 ,p_update_wbs_flag => 'Y'
42681 ,x_return_status => l_return_status
42682 ,x_msg_count => l_msg_count
42683 ,x_msg_data => l_msg_data);
42684
42685 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42686 x_msg_count := FND_MSG_PUB.count_msg;
42687 if x_msg_count = 1 then
42688 pa_interface_utils_pub.get_messages
42689 (p_encoded => FND_API.G_TRUE,
42690 p_msg_index => 1,
42691 p_msg_count => l_msg_count,
42692 p_msg_data => l_msg_data,
42693 p_data => l_data,
42694 p_msg_index_out => l_msg_index_out);
42695 x_msg_data := l_data;
42696 end if;
42697 raise FND_API.G_EXC_ERROR;
42698 end if;
42699 --3035902: end process update flag changes
42700
42701 --ideally the following calls should have been cached. but due to time constraints
42702 --we need to write the code this way in multiple places.
42703 IF PA_PROJECT_STRUCTURE_UTILS.GET_STRUC_TYPE_FOR_VERSION(p_structure_version_id, 'FINANCIAL') = 'Y'
42704 THEN
42705 IF ( l_versioned = 'N' ) OR ( l_versioned = 'Y' and l_shared = 'Y' and l_published_version = 'N' ) THEN
42706
42707 --Outdent
42708 pa_fp_refresh_elements_pub.set_process_flag_proj(
42709 p_project_id => p_project_id
42710 ,p_request_id => null
42711 ,p_process_code => null
42712 ,p_refresh_required_flag => 'Y'
42713 ,x_return_status => l_return_status
42714 ,x_msg_count => l_msg_count
42715 ,x_msg_data => l_msg_data );
42716
42717 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42718 x_msg_count := FND_MSG_PUB.count_msg;
42719 if x_msg_count = 1 then
42720 pa_interface_utils_pub.get_messages
42721 (p_encoded => FND_API.G_TRUE,
42722 p_msg_index => 1,
42723 p_msg_count => l_msg_count,
42724 p_msg_data => l_msg_data,
42725 p_data => l_data,
42726 p_msg_index_out => l_msg_index_out);
42727 x_msg_data := l_data;
42728 end if;
42729 raise FND_API.G_EXC_ERROR;
42730 end if;
42731 END IF;
42732 END IF;
42733 --check the task is a lowest task again and check whehter its no more a lowest task.
42734 l_lowest_task_flag2 := PA_PROJ_ELEMENTS_UTILS.IS_LOWEST_TASK(p_task_version_id => p_task_version_id );
42735
42736 IF l_lowest_task_flag1 = 'Y' AND
42737 l_lowest_task_flag2 = 'N'
42738 THEN
42739 IF l_wp_type = 'Y'
42740 THEN
42741 --now call call delete planning for task version id.
42742 l_task_ver_ids2.extend(1); /* Venky */
42743 l_task_ver_ids2(1) := p_task_version_id;
42744 /*Smukka Bug No. 3474141 Date 03/01/2004 */
42745 /*moved pa_fp_planning_transaction_pub.delete_planning_transactions into plsql block */
42746 DECLARE
42747 --p1 bug 3888432
42748 l_assign_ids SYSTEM.pa_num_tbl_type := SYSTEM.pa_num_tbl_type();
42749 CURSOR get_assignment_id(c_task_ver_id NUMBER) IS
42750 SELECT resource_assignment_id
42751 FROM pa_resource_assignments
42752 WHERE wbs_element_Version_id = c_task_ver_id
42753 AND ta_display_flag = 'N';
42754 l_assign_id NUMBER := NULL;
42755 BEGIN
42756 OPEN get_assignment_id(p_task_version_id);
42757 FETCH get_assignment_id into l_assign_id;
42758 CLOSE get_assignment_id;
42759
42760 IF (l_assign_id IS NOT NULL) THEN
42761 l_assign_ids.extend(1);
42762 l_assign_ids(1) := l_assign_id;
42763 pa_fp_planning_transaction_pub.delete_planning_transactions
42764 (
42765 p_context => 'WORKPLAN'
42766 ,p_task_or_res => 'ASSIGNMENT'
42767 -- ,p_element_version_id_tbl => l_task_ver_ids2
42768 -- ,p_maintain_reporting_lines => 'Y'
42769 ,p_resource_assignment_tbl => l_assign_ids
42770 ,x_return_status => l_return_status
42771 ,x_msg_count => l_msg_count
42772 ,x_msg_data => l_msg_data
42773 );
42774 END IF;
42775 EXCEPTION
42776 WHEN OTHERS then
42777 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
42778 p_procedure_name => 'BULK_OUTDENT_TASKS_LITE',
42779 p_error_text => SUBSTRB('pa_fp_planning_transaction_pub.delete_planning_transactions:'||SQLERRM,1,240));
42780 RAISE FND_API.G_EXC_ERROR;
42781 END;
42782 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
42783 x_msg_count := FND_MSG_PUB.count_msg;
42784 if x_msg_count = 1 then
42785 pa_interface_utils_pub.get_messages
42786 (p_encoded => FND_API.G_TRUE,
42787 p_msg_index => 1,
42788 p_msg_count => l_msg_count,
42789 p_msg_data => l_msg_data,
42790 p_data => l_data,
42791 p_msg_index_out => l_msg_index_out);
42792 x_msg_data := l_data;
42793 end if;
42794 raise FND_API.G_EXC_ERROR;
42795 end if;
42796 END IF; --<<l_wp_type>>
42797 END IF; --<<l_lowest_task_flag1>>
42798 --bug 3301192
42799
42800 --bug 4149392
42801 PA_TASK_PUB1.G_CALL_PJI_ROLLUP := NULL;
42802 --end bug 4149392
42803
42804 x_return_status := FND_API.G_RET_STS_SUCCESS;
42805
42806 IF (p_commit = FND_API.G_TRUE) THEN
42807 COMMIT;
42808 END IF;
42809
42810 IF (p_debug_mode = 'Y') THEN
42811 pa_debug.debug('PA_PROJECT_PUB.BULK_OUTDENT_TASKS_LITE END');
42812 END IF;
42813
42814 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42815 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
42816 END IF;
42817
42818 EXCEPTION
42819 when FND_API.G_EXC_ERROR then
42820 if p_commit = FND_API.G_TRUE then
42821 rollback to BULK_OUTDENT_TASKS_LITE;
42822 end if;
42823 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42824 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
42825 END IF;
42826 x_return_status := FND_API.G_RET_STS_ERROR;
42827 FND_MSG_PUB.Count_And_Get
42828 ( p_count => x_msg_count ,
42829 p_data => x_msg_data );
42830 when FND_API.G_EXC_UNEXPECTED_ERROR then
42831 if p_commit = FND_API.G_TRUE then
42832 rollback to BULK_OUTDENT_TASKS_LITE;
42833 end if;
42834 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
42835 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
42836 p_procedure_name => 'BULK_OUTDENT_TASKS_LITE',
42837 p_error_text => SUBSTRB(SQLERRM,1,240));
42838 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42839 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
42840 END IF;
42841 when OTHERS then
42842 if p_commit = FND_API.G_TRUE then
42843 rollback to BULK_OUTDENT_TASKS_LITE;
42844 end if;
42845 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
42846 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
42847 p_procedure_name => 'BULK_OUTDENT_TASKS_LITE',
42848 p_error_text => SUBSTRB(SQLERRM,1,240));
42849 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42850 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_project_id);
42851 END IF;
42852 FND_MSG_PUB.Count_And_Get
42853 ( p_count => x_msg_count ,
42854 p_data => x_msg_data );
42855 raise;
42856
42857 END BULK_OUTDENT_TASKS_LITE;
42858
42859 -- Added new wrapper API for 14556729
42860 PROCEDURE Bulk_Delete_Task ( p_api_version_number IN NUMBER := 1.0
42861 ,p_commit IN VARCHAR2 := FND_API.G_FALSE
42862 ,p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
42863 ,p_msg_count OUT NOCOPY NUMBER
42864 ,p_msg_data OUT NOCOPY VARCHAR2
42865 ,p_return_status OUT NOCOPY VARCHAR2
42866 ,p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42867 ,p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42868 ,p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
42869 ,p_pm_task_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42870 ,p_pa_task_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
42871 ,p_cascaded_delete_flag IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
42872 ,p_project_id OUT NOCOPY NUMBER
42873 ,p_task_id OUT NOCOPY NUMBER
42874 ,p_task_version_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
42875 ,p_structure_type IN VARCHAR2 := 'FINANCIAL'
42876 ,p_process_mode IN VARCHAR2 := 'ONLINE'
42877 ,p_structure_updates_flag IN VARCHAR2 := 'Y'
42878 )
42879 IS
42880 l_structure_type VARCHAR2(2000);
42881 l_process_mode VARCHAR2(2000);
42882 l_structure_version_id NUMBER;
42883 message varchar2(2000);
42884 t_str varchar2(1);
42885 BEGIN
42886
42887 /* Added below block to ensure that the new API's are controlled by Dev*/
42888 begin
42889 select 'x' into t_str
42890 from pji_system_parameters
42891 where name = 'BULK_LITE'
42892 and value = 'Y';
42893
42894 exception
42895 when no_data_found then
42896 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42897 p_msg_name => 'PA_LITE_API_CANT_USE');
42898 RAISE FND_API.G_EXC_ERROR;
42899 when others then
42900 raise;
42901 end;
42902
42903 l_structure_type:=p_structure_type;
42904 l_process_mode:=p_process_mode;
42905
42906 IF NVL(PA_PROJECT_STRUCTURE_UTILS.get_Structure_sharing_code(p_pa_project_id),' ') <> 'SHARE_FULL'
42907 OR NVL(PA_WORKPLAN_ATTR_UTILS.CHECK_WP_VERSIONING_ENABLED(p_pa_project_id),'N') = 'Y' THEN
42908 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42909 p_msg_name => 'PA_CANT_USE_LITE_API');
42910 RAISE FND_API.G_EXC_ERROR;
42911 END IF;
42912
42913 PA_PROJECT_PUB.G_PROJECT_ID:=p_pa_project_id;
42914 l_structure_version_id :=PA_PROJECT_STRUCTURE_UTILS.GET_FIN_STRUC_VER_ID(p_pa_project_id);
42915
42916 -- Set the G_ROLLUP_FLAG based on profile options
42917 PA_PROJECT_PUB.G_ROLLUP_DEFER:=NVL(fnd_profile.value('G_ROLLUP_DEFER'),'N');
42918 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42919 PA_PROJECT_PVT.CONC_LOCK_PROJECT(p_pa_project_id,'DELETE',p_msg_data,p_return_status);
42920 IF p_return_status <> 'S'
42921 THEN
42922 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
42923 p_msg_name => p_msg_data);
42924 RAISE FND_API.G_EXC_ERROR;
42925 ELSE
42926 PA_PROJECT_PVT.LOG_ROLLUP_EVENT(p_pa_project_id,l_structure_version_id,'DELETE');
42927 PA_PROJECT_PVT.LOG_TASK_LEVEL_EVENT(p_pa_project_id,p_pa_task_id,l_structure_version_id,'DELETE');
42928 END IF;
42929 END IF;
42930
42931
42932 -- Call the existing API
42933 DELETE_TASK(
42934 p_api_version_number
42935 ,p_commit
42936 ,p_init_msg_list
42937 ,p_msg_count
42938 ,p_msg_data
42939 ,p_return_status
42940 ,p_pm_product_code
42941 ,p_pm_project_reference
42942 ,p_pa_project_id
42943 ,p_pm_task_reference
42944 ,p_pa_task_id
42945 ,p_cascaded_delete_flag
42946 ,p_project_id
42947 ,p_task_id
42948 ,p_task_version_id
42949 ,l_structure_type
42950 ,l_process_mode
42951 ,p_structure_updates_flag
42952 );
42953
42954
42955 PA_PROJECT_PUB.G_PROJECT_ID:=NULL;
42956
42957 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42958 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_pa_project_id);
42959 END IF;
42960
42961 EXCEPTION
42962 WHEN FND_API.G_EXC_ERROR THEN
42963 p_return_status := FND_API.G_RET_STS_ERROR ;
42964 FND_MSG_PUB.Count_And_Get
42965 ( p_count => p_msg_count ,
42966 p_data => p_msg_data );
42967 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42968 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_pa_project_id);
42969 END IF;
42970
42971 WHEN OTHERS THEN
42972 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
42973 p_msg_count := FND_MSG_PUB.count_msg;
42974 p_project_id := NULL ;
42975 p_task_id := NULL;
42976 PA_PROJECT_PUB.G_PROJECT_ID:=NULL;
42977 IF (PA_PROJECT_PUB.G_ROLLUP_DEFER='Y') THEN
42978 PA_PROJECT_PVT.CONC_RELEASE_LOCK_PROJECT(p_pa_project_id);
42979 END IF;
42980 IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
42981 FND_MSG_PUB.add_exc_msg
42982 ( p_pkg_name => G_PKG_NAME
42983 , p_procedure_name => 'Bulk_Delete_Task' );
42984 END IF;
42985 FND_MSG_PUB.Count_And_Get
42986 ( p_count => p_msg_count ,
42987 p_data => p_msg_data );
42988 END Bulk_Delete_Task;
42989
42990 procedure STRUCTURE_ROLLUP (
42991 p_api_version IN NUMBER :=1.0,
42992 p_init_msg_list IN VARCHAR2 :=FND_API.G_TRUE,
42993 p_commit IN VARCHAR2 :=FND_API.G_FALSE,
42994 p_validate_only IN VARCHAR2 :=FND_API.G_TRUE,
42995 p_validation_level IN NUMBER :=FND_API.G_VALID_LEVEL_FULL,
42996 p_calling_module IN VARCHAR2 :='SELF_SERVICE',
42997 p_debug_mode IN VARCHAR2 :='N',
42998 p_max_msg_count IN NUMBER :=PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM,
42999 p_structure_version_id IN NUMBER := NULL,
43000 p_project_id IN NUMBER := NULL,
43001 p_as_of_date IN DATE := PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE,
43002 p_structure_type IN VARCHAR2 := 'WORKPLAN',
43003 p_entire_structure_flag IN VARCHAR2 := 'Y',
43004 x_return_status OUT NOCOPY VARCHAR2,
43005 x_msg_count OUT NOCOPY NUMBER,
43006 x_msg_data OUT NOCOPY VARCHAR2)
43007 IS
43008 l_structure_version_id pa_proj_elem_ver_structure.element_version_id%TYPE;
43009 l_rollup_as_of_date date;
43010 l_msg_count NUMBER;
43011 l_msg_data VARCHAR2(2000);
43012 l_return_status VARCHAR2(1);
43013 l_api_version CONSTANT NUMBER := 1.0;
43014 l_api_name CONSTANT VARCHAR(30) := 'STRUCTURE_ROLLUP';
43015 l_rollup_method pa_proj_progress_attr.task_weight_basis_code%TYPE;
43016
43017 CURSOR c_get_task_weight_method(c_project_id NUMBER, c_structure_type VARCHAR2)
43018 IS
43019 SELECT task_weight_basis_code
43020 FROM pa_proj_progress_attr
43021 WHERE project_id = c_project_id
43022 AND structure_type = c_structure_type;
43023 message varchar2(2000);
43024 t_str varchar2(1);
43025
43026 BEGIN
43027 pa_debug.init_err_stack ('PA_PROJECT_PUB.STRUCTURE_ROLLUP');
43028
43029 IF (p_debug_mode = 'Y') THEN
43030 pa_debug.debug('PA_PROJECT_PUB.STRUCTURE_ROLLUP begin');
43031 END IF;
43032
43033 IF (p_commit = FND_API.G_TRUE) THEN
43034 savepoint STRUCTURE_ROLLUP;
43035 END IF;
43036 /* Added below block to ensure that the new API's are controlled by Dev*/
43037 begin
43038 select 'x' into t_str
43039 from pji_system_parameters
43040 where name = 'BULK_LITE'
43041 and value = 'Y';
43042
43043 exception
43044 when no_data_found then
43045 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43046 p_msg_name => 'PA_LITE_API_CANT_USE');
43047 RAISE FND_API.G_EXC_ERROR;
43048 when others then
43049
43050 raise;
43051 end;
43052
43053
43054 IF NOT FND_API.COMPATIBLE_API_CALL(l_api_version, p_api_version, l_api_name, g_pkg_name) then
43055 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
43056 END IF;
43057
43058 IF FND_API.TO_BOOLEAN(nvl(p_init_msg_list,FND_API.G_FALSE)) THEN
43059 FND_MSG_PUB.initialize;
43060 END IF;
43061
43062 If p_as_of_date IS NULL OR p_as_of_date = PA_INTERFACE_UTILS_PUB.G_PA_MISS_DATE
43063 then
43064 l_rollup_as_of_date := sysdate;
43065 else
43066 l_rollup_as_of_date := p_as_of_date;
43067 end if;
43068
43069 IF p_project_id is not null and p_structure_version_id is not null
43070 then
43071 PA_TASK_PVT1.Defer_Calc_Task_Weigthage (
43072 p_init_msg_list => p_init_msg_list
43073 ,p_commit => FND_API.G_FALSE
43074 ,p_project_id => p_project_id
43075 ,p_parent_struct_ver_id => p_structure_version_id
43076 ,x_return_status => l_return_status
43077 ,x_msg_count => l_msg_count
43078 ,x_msg_data => l_msg_data
43079 );
43080 IF l_return_status <> 'S' THEN
43081 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43082 p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43083 RAISE FND_API.G_EXC_ERROR;
43084 END IF;
43085
43086 PA_PROJECT_STRUCTURE_PVT1.REFRESH_STRUCTURE_VERSION
43087 ( p_project_id => p_project_id
43088 ,p_structure_version_id => p_structure_version_id
43089 ,x_return_status => l_return_status
43090 ,x_msg_count => l_msg_count
43091 ,x_msg_data => l_msg_data
43092 );
43093 IF l_return_status <> 'S' THEN
43094 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43095 p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43096 RAISE FND_API.G_EXC_ERROR;
43097 END IF;
43098
43099 OPEN c_get_task_weight_method(p_project_id, p_structure_type);
43100 FETCH c_get_task_weight_method INTO l_rollup_method;
43101 CLOSE c_get_task_weight_method;
43102
43103 PA_PROGRESS_PVT.DEFER_ROLLUP_PVT(
43104 p_init_msg_list => p_init_msg_list
43105 ,p_commit => FND_API.G_FALSE
43106 ,p_calling_module => 'AMG'
43107 ,p_project_id => p_project_id
43108 ,p_structure_version_id => p_structure_version_id
43109 ,p_as_of_date => trunc(l_rollup_as_of_date)
43110 ,p_rollup_entire_wbs => p_entire_structure_flag
43111 ,p_structure_type => p_structure_type
43112 ,p_wp_rollup_method => l_rollup_method
43113 ,p_fin_rollup_method => l_rollup_method
43114 ,x_return_status => l_return_status
43115 ,x_msg_count => l_msg_count
43116 ,x_msg_data => l_msg_data);
43117
43118 IF l_return_status <> 'S' THEN
43119 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43120 p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43121 RAISE FND_API.G_EXC_ERROR;
43122 END IF;
43123
43124 UPDATE PA_PROJ_ELEMENT_VERSIONS SET DEFER_CODE=null where project_id=p_project_id
43125 and DEFER_CODE is not null AND parent_structure_version_id=p_structure_version_id;
43126 --Added for bug 16444969
43127 begin
43128 delete from PA_PJI_PROJ_EVENTS_LOG where event_type = 'DEFER_ROLLUP'
43129 and event_object = p_project_id and attribute4=p_structure_version_id;
43130 EXCEPTION
43131 when OTHERS then
43132 null;
43133 end;
43134
43135 IF(p_commit=FND_API.G_TRUE) THEN
43136 commit;
43137 END IF;
43138
43139 else
43140 for i in (select event_object, event_id, attribute4 from PA_PJI_PROJ_EVENTS_LOG where event_type = 'DEFER_ROLLUP')
43141 loop
43142 PA_TASK_PVT1.Defer_Calc_Task_Weigthage (
43143 p_init_msg_list => p_init_msg_list
43144 ,p_commit => FND_API.G_FALSE
43145 ,p_project_id => i.event_object
43146 ,p_parent_struct_ver_id => i.attribute4
43147 ,x_return_status => l_return_status
43148 ,x_msg_count => l_msg_count
43149 ,x_msg_data => l_msg_data
43150 );
43151 IF l_return_status <> 'S' THEN
43152 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43153 p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43154 RAISE FND_API.G_EXC_ERROR;
43155 END IF;
43156
43157 PA_PROJECT_STRUCTURE_PVT1.REFRESH_STRUCTURE_VERSION
43158 ( p_project_id => i.event_object
43159 ,p_structure_version_id => i.attribute4
43160 ,x_return_status => l_return_status
43161 ,x_msg_count => l_msg_count
43162 ,x_msg_data => l_msg_data
43163 );
43164 IF l_return_status <> 'S' THEN
43165 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43166 p_msg_name => 'PA_ERROR_UPDATING_PROJECT');
43167 RAISE FND_API.G_EXC_ERROR;
43168 END IF;
43169
43170 OPEN c_get_task_weight_method(i.event_object, p_structure_type);
43171 FETCH c_get_task_weight_method INTO l_rollup_method;
43172 CLOSE c_get_task_weight_method;
43173
43174 PA_PROGRESS_PVT.DEFER_ROLLUP_PVT(
43175 p_init_msg_list => p_init_msg_list
43176 ,p_commit => FND_API.G_FALSE
43177 ,p_calling_module => 'AMG'
43178 ,p_project_id => i.event_object
43179 ,p_structure_version_id => i.attribute4
43180 ,p_as_of_date => trunc(l_rollup_as_of_date)
43181 ,p_rollup_entire_wbs => p_entire_structure_flag
43182 ,p_structure_type => p_structure_type
43183 ,p_wp_rollup_method => l_rollup_method
43184 ,p_fin_rollup_method => l_rollup_method
43185 ,x_return_status => l_return_status
43186 ,x_msg_count => l_msg_count
43187 ,x_msg_data => l_msg_data);
43188
43189 IF l_return_status <> 'S' THEN
43190 PA_UTILS.ADD_MESSAGE(p_app_short_name => 'PA',
43191 p_msg_name => 'PA_ERROR_REFRESHING_STRUCTURE');
43192 RAISE FND_API.G_EXC_ERROR;
43193 END IF;
43194
43195 UPDATE PA_PROJ_ELEMENT_VERSIONS SET DEFER_CODE=null where project_id=i.event_object
43196 and DEFER_CODE is not null AND parent_structure_version_id=i.attribute4;
43197
43198
43199
43200
43201 delete from PA_PJI_PROJ_EVENTS_LOG where event_type = 'DEFER_ROLLUP' and event_id = i.event_id
43202 and event_object = i.event_object;
43203
43204 IF(p_commit=FND_API.G_TRUE) THEN
43205 commit;
43206 SAVEPOINT STRUCTURE_ROLLUP;
43207 END IF;
43208
43209 end loop;
43210 end if;
43211 x_return_status := FND_API.G_RET_STS_SUCCESS;
43212 IF (p_debug_mode = 'Y') THEN
43213 pa_debug.debug('PA_PROJECT_PUB.STRUCTURE_ROLLUP END');
43214 END IF;
43215 if p_commit = FND_API.G_TRUE then
43216 COMMIT;
43217 end if;
43218 EXCEPTION
43219 when FND_API.G_EXC_ERROR then
43220 if p_commit = FND_API.G_TRUE then
43221 rollback to STRUCTURE_ROLLUP;
43222 end if;
43223 x_return_status := FND_API.G_RET_STS_ERROR;
43224 FND_MSG_PUB.Count_And_Get
43225 ( p_count => x_msg_count ,
43226 p_data => x_msg_data );
43227 when FND_API.G_EXC_UNEXPECTED_ERROR then
43228 if p_commit = FND_API.G_TRUE then
43229 rollback to STRUCTURE_ROLLUP;
43230 end if;
43231 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
43232 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
43233 p_procedure_name => 'STRUCTURE_ROLLUP',
43234 p_error_text => SUBSTRB(SQLERRM,1,240));
43235 when OTHERS then
43236 if p_commit = FND_API.G_TRUE then
43237 rollback to STRUCTURE_ROLLUP;
43238 end if;
43239 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
43240 fnd_msg_pub.add_exc_msg(p_pkg_name => 'PA_PROJECT_PUB',
43241 p_procedure_name => 'STRUCTURE_ROLLUP',
43242 p_error_text => SUBSTRB(SQLERRM,1,240));
43243 FND_MSG_PUB.Count_And_Get
43244 ( p_count => x_msg_count ,
43245 p_data => x_msg_data );
43246 --raise; /*commented for bug#13923366*/
43247 end STRUCTURE_ROLLUP;
43248
43249 --Added below 2 new API for CBS RBS 16627046
43250 /*
43251 This api will be used to add multiple cost codes to multiple tasks for a single project.
43252 We need to ensure p_task_cost_code_in is passed with either proj_element_id or element number
43253 and cost_code / cbs_element_id to add the same to corresponding element.
43254 p_structure_type should be either WORKPLAN or FINANCIAL.
43255 * @param p_api_version_number API standard: version number
43256 * @rep:paraminfo {@rep:required}
43257 * @param p_commit API standard (default = F): indicates if the transaction will be committed
43258 * @rep:paraminfo {@rep:precision 1}
43259 * @param p_init_msg_list API standard (default = F): indicates if message stack will be initialized
43260 * @rep:paraminfo {@rep:precision 1}
43261 * @param x_msg_count API standard: number of error messages
43262 * @rep:paraminfo {@rep:required}
43263 * @param x_msg_data API standard: error message
43264 * @rep:paraminfo {@rep:precision 2000} {@rep:required}
43265 * @param x_return_status API standard: return status of the API (success/failure/unexpected error)
43266 * @rep:paraminfo {@rep:precision 1}
43267 * @param p_pm_product_code The identifier of the external project management system
43268 * from which the project is imported
43269 * @param p_pm_project_reference The reference code that uniquely identifies the project in the external system
43270 * @param p_pa_project_id The unique identifier of the project
43271 * @rep:paraminfo {@rep:required}
43272 * @param p_structure_type represents the structure type workplan or financial
43273 * @rep:paraminfo {@rep:required}
43274 * @param p_task_cost_code_in is record type which hold task and cost code details
43275 * @rep:paraminfo {@rep:required}
43276 */
43277
43278 PROCEDURE ADD_COST_CODE_TO_TASK (
43279 p_api_version IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
43280 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
43281 , p_commit IN VARCHAR2 := FND_API.G_FALSE
43282 , p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
43283 , p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43284 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43285 , p_task_cost_code_in IN TASK_COST_CODE_TBL
43286 , p_structure_type IN VARCHAR2 := 'FINANCIAL'
43287 , x_msg_count OUT NOCOPY NUMBER
43288 , x_msg_data OUT NOCOPY VARCHAR2
43289 , x_return_status OUT NOCOPY VARCHAR2
43290 )
43291
43292 IS
43293 l_return_status varchar2(100);
43294
43295 l_debug_mode varchar2(1) :='N';
43296 l_Proj_Element_Id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43297 l_Cbs_Element_Id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43298
43299 l_project_id Number :=p_pa_project_id;
43300 l_cbs_enabled_flag varchar2(1) :='N';
43301 l_count Number :=0;
43302
43303 Cursor C1(c_proj_id Number) IS
43304 Select NVL(CBS_ENABLE_FLAG,'N')
43305 FROM PA_PROJECTS_ALL
43306 WHERE PROJECT_ID=c_proj_id;
43307
43308 Cursor C2(c_proj_id Number , c_number varchar2) IS
43309 Select proj_element_id
43310 From pa_proj_elements
43311 Where project_id=c_proj_id
43312 and element_number=c_number;
43313
43314 Cursor C3(c_proj_id Number , c_number varchar2) IS
43315 Select Task_id
43316 From pa_Tasks
43317 Where project_id=c_proj_id
43318 and task_number=c_number;
43319
43320 Cursor check_task_exists_wp(c_proj_id Number ,c_task_id Number) IS
43321 Select Count(1)
43322 From pa_proj_elements
43323 Where project_id=c_proj_id
43324 and proj_element_id=c_task_id;
43325
43326 Cursor check_task_exists_fp(c_proj_id Number ,c_task_id Number) IS
43327 Select Count(1)
43328 From pa_Tasks
43329 Where project_id=c_proj_id
43330 and task_id=c_task_id;
43331
43332 Cursor Check_cost_code_valid(c_proj_id Number ,c_cbs_lem_id Number) IS
43333 SELECT COUNT(1)
43334 FROM PA_PROJECTS_ALL PA,PA_RBS_ELEMENTS PRE
43335 WHERE PA.CBS_VERSION_ID=PRE.RBS_VERSION_ID
43336 AND PA.PROJECT_ID=c_proj_id
43337 AND PRE.RBS_ELEMENT_ID=c_cbs_lem_id;
43338
43339 l_task_cost_code_in TASK_COST_CODE_TBL := p_task_cost_code_in;
43340
43341
43342 duplicate Varchar2(1);
43343 j Number;
43344 counter Number;
43345 lp_Proj_Element_Id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43346 lp_Cbs_Element_Id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43347
43348
43349
43350
43351 BEGIN
43352 pa_debug.init_err_stack ('PA_PROJECT_PUB.ADD_COST_CODE_TO_TASK');
43353
43354 IF (l_debug_mode = 'Y') THEN
43355 pa_debug.debug('PA_PROJECT_PUB.ADD_COST_CODE_TO_TASK begin');
43356 END IF;
43357 IF p_pa_project_id is not null then
43358 l_project_id:=p_pa_project_id;
43359 ELSE
43360 PA_PROJECT_PVT.Convert_pm_projref_to_id
43361 ( p_pm_project_reference => p_pm_project_reference
43362 , p_pa_project_id => p_pa_project_id
43363 , p_out_project_id => l_project_id
43364 , p_return_status => l_return_status
43365 );
43366 END IF;
43367
43368 OPEN c1(l_project_id);
43369 Fetch c1 into l_cbs_enabled_flag;
43370 CLOSE C1;
43371
43372 If l_cbs_enabled_flag <> 'Y' THEN
43373 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43374 ,p_msg_name => 'PA_CBS_PRJ_NOT_CBS'
43375 );
43376 x_return_status := FND_API.G_RET_STS_ERROR;
43377 RAISE FND_API.G_EXC_ERROR;
43378
43379 END IF;
43380
43381 if p_task_cost_code_in.count > 0 then
43382 IF (p_commit = FND_API.G_TRUE) THEN
43383 savepoint ADD_COST_CODE_TO_TASK;
43384 END IF;
43385
43386 -- Add validations here
43387 --l_task_cost_code_in := p_task_cost_code_in MULTISET UNION DISTINCT p_task_cost_code_in;
43388
43389 for i in p_task_cost_code_in.first..p_task_cost_code_in.last loop
43390 l_Proj_Element_Id_tbl.extend;
43391 l_Cbs_Element_Id_tbl.extend;
43392
43393 l_Proj_Element_Id_tbl(i) := p_task_cost_code_in(i).pa_task_id;
43394 l_Cbs_Element_Id_tbl(i) :=p_task_cost_code_in(i).cbs_element_id;
43395
43396 IF p_task_cost_code_in(i).cbs_element_id IS NULL OR
43397 p_task_cost_code_in(i).cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
43398
43399 l_Cbs_Element_Id_tbl(i) := PA_ALTERNATE_TASK_PVT.convert_cost_code_to_id(
43400 p_task_cost_code_in(i).cost_code ,p_pa_project_id );
43401 IF l_Cbs_Element_Id_tbl(i) is NULL THEN
43402 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43403 ,p_msg_name => 'PA_CBS_COST_CODE_ID_REQ'
43404 ,p_token1 => 'TASK'
43405 ,p_value1 =>l_Proj_Element_Id_tbl(i)
43406 );
43407 x_return_status := FND_API.G_RET_STS_ERROR;
43408 X_Msg_Data := 'PA_CBS_COST_CODE_ID_REQ';
43409 X_Msg_Count := 1;
43410 ROLLBACK;
43411 RAISE FND_API.G_EXC_ERROR;
43412 ELSE
43413 OPEN Check_cost_code_valid(l_project_id,l_Cbs_Element_Id_tbl(i));
43414 FETCH Check_cost_code_valid into l_count;
43415 CLOSE Check_cost_code_valid;
43416
43417 if l_count = 0 Then
43418 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43419 ,p_msg_name => 'PA_CBS_COST_CODE_INVALID'
43420 ,p_token1 => 'COST_CODE'
43421 ,p_value1 =>p_task_cost_code_in(i).cost_code
43422 );
43423 x_return_status := FND_API.G_RET_STS_ERROR;
43424 X_Msg_Data := 'PA_CBS_COST_CODE_ID_REQ';
43425 X_Msg_Count := 1;
43426 ROLLBACK;
43427 RAISE FND_API.G_EXC_ERROR;
43428 ENd If;
43429
43430 END IF;
43431 END IF;
43432
43433 ---Validate Task details
43434
43435 IF p_structure_type = 'FINACIAL' THEN
43436 IF l_Proj_Element_Id_tbl(i) is null Then
43437
43438 OPEN C3(l_project_id,p_task_cost_code_in(i).pa_task_number);
43439 FETCH C3 into l_Proj_Element_Id_tbl(i);
43440 Close C3;
43441 END If;
43442
43443 OPEN check_task_exists_fp(l_project_id,l_Proj_Element_Id_tbl(i));
43444 FETCH check_task_exists_fp into l_count;
43445 CLOSE check_task_exists_fp;
43446
43447 ELSE
43448 IF l_Proj_Element_Id_tbl(i) is null Then
43449
43450 OPEN C2(l_project_id,p_task_cost_code_in(i).pa_task_number);
43451 FETCH C2 into l_Proj_Element_Id_tbl(i);
43452 Close C2;
43453 END If;
43454
43455 OPEN check_task_exists_wp(l_project_id,l_Proj_Element_Id_tbl(i));
43456 FETCH check_task_exists_wp into l_count;
43457 CLOSE check_task_exists_wp;
43458
43459 END IF;
43460
43461 IF l_Proj_Element_Id_tbl(i) is null Then
43462 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43463 ,p_msg_name => 'PA_CBS_TASK_DETAILS_REQ'
43464 );
43465 x_return_status := FND_API.G_RET_STS_ERROR;
43466 X_Msg_Data := 'PA_CBS_TASK_DETAILS_REQ';
43467 X_Msg_Count := 1;
43468 ROLLBACK;
43469 RAISE FND_API.G_EXC_ERROR;
43470
43471 END IF;
43472 If l_count = 0 Then
43473 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43474 ,p_msg_name => 'PA_CBS_TASK_INVALID'
43475 ,p_token1 => 'TASK'
43476 ,p_value1 =>l_Proj_Element_Id_tbl(i)
43477 );
43478 x_return_status := FND_API.G_RET_STS_ERROR;
43479 X_Msg_Data := 'PA_CBS_TASK_INVALID';
43480 X_Msg_Count := 1;
43481 ROLLBACK;
43482 RAISE FND_API.G_EXC_ERROR;
43483
43484 END If;
43485
43486 end loop;
43487 -- Below for loop will remove the duplicate records 16798970
43488 If l_Proj_Element_Id_tbl.Count > 0 Then
43489 counter :=1;
43490 for i in l_Proj_Element_Id_tbl.first..l_Proj_Element_Id_tbl.last loop
43491
43492 j:=lp_Proj_Element_Id_tbl.Count;
43493 duplicate:='N';
43494 while j>=1 loop
43495 if l_Proj_Element_Id_tbl(i)=lp_Proj_Element_Id_tbl(j) and
43496 l_Cbs_Element_Id_tbl(i)=lp_Cbs_Element_Id_tbl(j) Then
43497 duplicate:='Y';
43498 j:=1;-- to come out of while loop
43499 end if;
43500 j:=j-1;
43501 end loop;
43502
43503 If duplicate = 'N' Then
43504 lp_Proj_Element_Id_tbl.extend;
43505 lp_Cbs_Element_Id_tbl.extend;
43506 lp_Proj_Element_Id_tbl(counter):=l_Proj_Element_Id_tbl(i);
43507 lp_Cbs_Element_Id_tbl(counter) :=l_Cbs_Element_Id_tbl(i);
43508 counter:=counter+1;
43509 End if;
43510
43511 end loop;
43512
43513 end if;
43514
43515 PA_ALTERNATE_TASK_PVT.Create_Alt_Task(
43516 p_Proj_Element_Id => lp_Proj_Element_Id_tbl,
43517 p_Cbs_Element_Id =>lp_Cbs_Element_Id_tbl,
43518 X_Return_Status => X_Return_Status,
43519 X_Msg_Data =>X_Msg_Data,
43520 X_Msg_Count=>X_Msg_Count);
43521
43522 IF X_Return_Status = 'S' THEN
43523 If p_commit=FND_API.G_TRUE then
43524 commit;
43525 end if;
43526 END IF;
43527 end if;
43528 EXCEPTION
43529
43530 When FND_API.G_EXC_ERROR Then
43531 FND_MSG_PUB.Count_And_Get
43532 ( p_count => x_msg_count ,
43533 p_data => x_msg_data );
43534 X_Return_Status := 'E';
43535 ROLLBACK;
43536
43537
43538 When Others Then
43539 FND_MSG_PUB.Count_And_Get
43540 ( p_count => x_msg_count ,
43541 p_data => x_msg_data );
43542 X_Return_Status := 'E';
43543 ROLLBACK;
43544
43545 END ADD_COST_CODE_TO_TASK;
43546
43547 /*
43548 This api will be used to delete multiple cost codes assigned to multiple tasks for a single project.
43549 We need to ensure p_task_cost_code_in is passed with either proj_element_id or element number
43550 and cost_code / cbs_element_id to add the same to corresponding element.
43551 p_structure_type should be either WORKPLAN or FINANCIAL.
43552 * @param p_api_version_number API standard: version number
43553 * @rep:paraminfo {@rep:required}
43554 * @param p_commit API standard (default = F): indicates if the transaction will be committed
43555 * @rep:paraminfo {@rep:precision 1}
43556 * @param p_init_msg_list API standard (default = F): indicates if message stack will be initialized
43557 * @rep:paraminfo {@rep:precision 1}
43558 * @param x_msg_count API standard: number of error messages
43559 * @rep:paraminfo {@rep:required}
43560 * @param x_msg_data API standard: error message
43561 * @rep:paraminfo {@rep:precision 2000} {@rep:required}
43562 * @param x_return_status API standard: return status of the API (success/failure/unexpected error)
43563 * @rep:paraminfo {@rep:precision 1}
43564 * @param p_pm_product_code The identifier of the external project management system
43565 * from which the project is imported
43566 * @param p_pm_project_reference The reference code that uniquely identifies the project in the external system
43567 * @param p_pa_project_id The unique identifier of the project
43568 * @rep:paraminfo {@rep:required}
43569 * @param p_structure_type represents the structure type workplan or financial
43570 * @rep:paraminfo {@rep:required}
43571 * @param p_task_cost_code_in is record type which hold task and cost code details
43572 * @rep:paraminfo {@rep:required}
43573 */
43574
43575
43576 PROCEDURE DELETE_COST_CODE_FROM_TASK (
43577 p_api_version IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
43578 , p_init_msg_list IN VARCHAR2 := FND_API.G_FALSE
43579 , p_commit IN VARCHAR2 := FND_API.G_FALSE
43580 , p_pa_project_id IN NUMBER := PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM
43581 , p_pm_product_code IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43582 , p_pm_project_reference IN VARCHAR2 := PA_INTERFACE_UTILS_PUB.G_PA_MISS_CHAR
43583 , p_task_cost_code_in IN TASK_COST_CODE_TBL
43584 , p_structure_type IN VARCHAR2 := 'FINANCIAL'
43585 , x_msg_count OUT NOCOPY NUMBER
43586 , x_msg_data OUT NOCOPY VARCHAR2
43587 , x_return_status OUT NOCOPY VARCHAR2
43588 )
43589 IS
43590 l_return_status varchar2(100);
43591
43592 l_debug_mode varchar2(1) :='N';
43593 l_Proj_Element_Id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43594 l_Cbs_Element_Id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43595 l_Alt_Task_Id_tbl SYSTEM.pa_num_tbl_type :=SYSTEM.PA_NUM_TBL_TYPE();
43596
43597 l_project_id Number :=p_pa_project_id;
43598 l_cbs_enabled_flag varchar2(1) :='N';
43599 l_count Number :=0;
43600
43601 Cursor C1(c_proj_id Number) IS
43602 Select NVL(CBS_ENABLE_FLAG,'N')
43603 FROM PA_PROJECTS_ALL
43604 WHERE PROJECT_ID=c_proj_id;
43605
43606 Cursor C2(c_proj_id Number , c_number varchar2) IS
43607 Select proj_element_id
43608 From pa_proj_elements
43609 Where project_id=c_proj_id
43610 and element_number=c_number;
43611
43612 Cursor C3(c_proj_id Number , c_number varchar2) IS
43613 Select Task_id
43614 From pa_Tasks
43615 Where project_id=c_proj_id
43616 and task_number=c_number;
43617
43618 Cursor check_task_exists_wp(c_proj_id Number ,c_task_id Number) IS
43619 Select Count(1)
43620 From pa_proj_elements
43621 Where project_id=c_proj_id
43622 and proj_element_id=c_task_id;
43623
43624 Cursor check_task_exists_fp(c_proj_id Number ,c_task_id Number) IS
43625 Select Count(1)
43626 From pa_Tasks
43627 Where project_id=c_proj_id
43628 and task_id=c_task_id;
43629
43630 Cursor Check_cost_code_valid(c_proj_id Number ,c_cbs_lem_id Number) IS
43631 SELECT COUNT(1)
43632 FROM PA_PROJECTS_ALL PA,PA_RBS_ELEMENTS PRE
43633 WHERE PA.CBS_VERSION_ID=PRE.RBS_VERSION_ID
43634 AND PA.PROJECT_ID=c_proj_id
43635 AND PRE.RBS_ELEMENT_ID=c_cbs_lem_id;
43636
43637
43638 Cursor Get_alt_Task(c_task_id Number ,c_cbs_lem_id Number) IS
43639 SELECT ALT_TASK_ID
43640 FROM PA_ALTERNATE_TASKS
43641 WHERE PROJ_ELEMENT_ID=c_task_id and CBS_ELEMENT_ID=c_cbs_lem_id;
43642
43643
43644 BEGIN
43645 pa_debug.init_err_stack ('PA_PROJECT_PUB.DELETE_COST_CODE_FROM_TASK');
43646
43647 IF (l_debug_mode = 'Y') THEN
43648 pa_debug.debug('PA_PROJECT_PUB.DELETE_COST_CODE_FROM_TASK begin');
43649 END IF;
43650 IF p_pa_project_id is not null then
43651 l_project_id:=p_pa_project_id;
43652 ELSE
43653 PA_PROJECT_PVT.Convert_pm_projref_to_id
43654 ( p_pm_project_reference => p_pm_project_reference
43655 , p_pa_project_id => p_pa_project_id
43656 , p_out_project_id => l_project_id
43657 , p_return_status => l_return_status
43658 );
43659 END IF;
43660
43661 OPEN c1(l_project_id);
43662 Fetch c1 into l_cbs_enabled_flag;
43663 CLOSE C1;
43664
43665 If l_cbs_enabled_flag <> 'Y' THEN
43666 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43667 ,p_msg_name => 'PA_CBS_PRJ_NOT_CBS'
43668 );
43669 x_return_status := FND_API.G_RET_STS_ERROR;
43670 RAISE FND_API.G_EXC_ERROR;
43671
43672 END IF;
43673
43674 if p_task_cost_code_in.count > 0 then
43675 IF (p_commit = FND_API.G_TRUE) THEN
43676 savepoint ADD_COST_CODE_TO_TASK;
43677 END IF;
43678
43679 -- Add validations here
43680
43681 for i in p_task_cost_code_in.first..p_task_cost_code_in.last loop
43682 l_Proj_Element_Id_tbl.extend;
43683 l_Cbs_Element_Id_tbl.extend;
43684 l_alt_task_id_tbl.extend;
43685
43686 l_Proj_Element_Id_tbl(i) := p_task_cost_code_in(i).pa_task_id;
43687 l_Cbs_Element_Id_tbl(i) :=p_task_cost_code_in(i).cbs_element_id;
43688
43689 IF p_task_cost_code_in(i).cbs_element_id IS NULL OR
43690 p_task_cost_code_in(i).cbs_element_id = PA_INTERFACE_UTILS_PUB.G_PA_MISS_NUM THEN
43691
43692 l_Cbs_Element_Id_tbl(i) := PA_ALTERNATE_TASK_PVT.convert_cost_code_to_id(
43693 p_task_cost_code_in(i).cost_code ,p_pa_project_id );
43694 IF l_Cbs_Element_Id_tbl(i) is NULL THEN
43695 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43696 ,p_msg_name => 'PA_CBS_COST_CODE_ID_REQ'
43697 ,p_token1 => 'TASK'
43698 ,p_value1 =>l_Proj_Element_Id_tbl(i)
43699 );
43700 x_return_status := FND_API.G_RET_STS_ERROR;
43701 X_Msg_Data := 'PA_CBS_COST_CODE_ID_REQ';
43702 X_Msg_Count := 1;
43703 ROLLBACK;
43704 RAISE FND_API.G_EXC_ERROR;
43705 ELSE
43706 OPEN Check_cost_code_valid(l_project_id,l_Cbs_Element_Id_tbl(i));
43707 FETCH Check_cost_code_valid into l_count;
43708 CLOSE Check_cost_code_valid;
43709
43710 if l_count = 0 Then
43711 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43712 ,p_msg_name => 'PA_CBS_COST_CODE_INVALID'
43713 ,p_token1 => 'COST_CODE'
43714 ,p_value1 =>p_task_cost_code_in(i).cost_code
43715 );
43716 x_return_status := FND_API.G_RET_STS_ERROR;
43717 X_Msg_Data := 'PA_CBS_COST_CODE_ID_REQ';
43718 X_Msg_Count := 1;
43719 ROLLBACK;
43720 RAISE FND_API.G_EXC_ERROR;
43721 ENd If;
43722
43723 END IF;
43724 END IF;
43725
43726 ---Validate Task details
43727
43728 IF p_structure_type = 'FINACIAL' THEN
43729 IF l_Proj_Element_Id_tbl(i) is null Then
43730
43731 OPEN C3(l_project_id,p_task_cost_code_in(i).pa_task_number);
43732 FETCH C3 into l_Proj_Element_Id_tbl(i);
43733 Close C3;
43734 END If;
43735
43736 OPEN check_task_exists_fp(l_project_id,l_Proj_Element_Id_tbl(i));
43737 FETCH check_task_exists_fp into l_count;
43738 CLOSE check_task_exists_fp;
43739
43740 ELSE
43741 IF l_Proj_Element_Id_tbl(i) is null Then
43742
43743 OPEN C2(l_project_id,p_task_cost_code_in(i).pa_task_number);
43744 FETCH C2 into l_Proj_Element_Id_tbl(i);
43745 Close C2;
43746 END If;
43747
43748 OPEN check_task_exists_wp(l_project_id,l_Proj_Element_Id_tbl(i));
43749 FETCH check_task_exists_wp into l_count;
43750 CLOSE check_task_exists_wp;
43751
43752 END IF;
43753
43754 IF l_Proj_Element_Id_tbl(i) is null Then
43755 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43756 ,p_msg_name => 'PA_CBS_TASK_DETAILS_REQ'
43757 );
43758 x_return_status := FND_API.G_RET_STS_ERROR;
43759 X_Msg_Data := 'PA_CBS_TASK_DETAILS_REQ';
43760 X_Msg_Count := 1;
43761 ROLLBACK;
43762 RAISE FND_API.G_EXC_ERROR;
43763
43764 END IF;
43765 If l_count = 0 Then
43766 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43767 ,p_msg_name => 'PA_CBS_TASK_INVALID'
43768 ,p_token1 => 'TASK'
43769 ,p_value1 =>l_Proj_Element_Id_tbl(i)
43770 );
43771 x_return_status := FND_API.G_RET_STS_ERROR;
43772 X_Msg_Data := 'PA_CBS_TASK_INVALID';
43773 X_Msg_Count := 1;
43774 ROLLBACK;
43775 RAISE FND_API.G_EXC_ERROR;
43776
43777 END If;
43778
43779 --Get the Alternate Tasks
43780 l_alt_task_id_tbl(i) :=null;
43781 Open Get_alt_Task(l_Proj_Element_Id_tbl(i),l_Cbs_Element_Id_tbl(i));
43782 Fetch Get_alt_Task into l_alt_task_id_tbl(i);
43783 Close Get_alt_Task;
43784
43785 IF l_alt_task_id_tbl(i) is null then
43786 PA_UTILS.ADD_MESSAGE( p_app_short_name => 'PA'
43787 ,p_msg_name => 'PA_CBS_INVALID_ALT_TASK'
43788 ,p_token1 => 'TASK'
43789 ,p_value1 =>l_Proj_Element_Id_tbl(i)
43790 ,p_token2 => 'COST_CODE_ID'
43791 ,p_value2 =>l_Cbs_Element_Id_tbl(i)
43792 );
43793 x_return_status := FND_API.G_RET_STS_ERROR;
43794 X_Msg_Data := 'PA_CBS_INVALID_ALT_TASK';
43795 X_Msg_Count := 1;
43796 ROLLBACK;
43797 RAISE FND_API.G_EXC_ERROR;
43798
43799 END IF;
43800
43801 end loop;
43802
43803 PA_ALTERNATE_TASK_PVT.Delete_Alt_Task(
43804 p_Alt_Task_Id =>l_alt_task_id_tbl,
43805 X_Return_Status => X_Return_Status,
43806 X_Msg_Data =>X_Msg_Data,
43807 X_Msg_Count=>X_Msg_Count);
43808
43809 IF X_Return_Status = 'S' THEN
43810 If p_commit=FND_API.G_TRUE then
43811 commit;
43812 end if;
43813 END IF;
43814 end if;
43815 EXCEPTION
43816 When FND_API.G_EXC_ERROR Then
43817 FND_MSG_PUB.Count_And_Get
43818 ( p_count => x_msg_count ,
43819 p_data => x_msg_data );
43820 X_Return_Status := 'E';
43821 ROLLBACK;
43822
43823 When Others Then
43824 FND_MSG_PUB.Count_And_Get
43825 ( p_count => x_msg_count ,
43826 p_data => x_msg_data );
43827 X_Return_Status := 'E';
43828 ROLLBACK;
43829
43830 END DELETE_COST_CODE_FROM_TASK;
43831
43832 end PA_PROJECT_PUB;