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