[Home] [Help]
PACKAGE BODY: APPS.PA_FORECASTITEM_PVT
Source
1 PACKAGE BODY PA_FORECASTITEM_PVT as
2 --/* $Header: PARFIGPB.pls 120.18 2010/10/16 08:28:27 nisinha ship $ */
3
4 -- Procedure level variable declaration
5
6 -- Back end code run in self-service cannot use globals.
7 --g_TimelineProfileSetup PA_TIMELINE_GLOB.TimelineProfileSetup;
8 --g_process_mode VARCHAR2(30);
9 --AVAILABILITY_DURATION NUMBER;
10
11 /** The follwing Api prints the message to
12 * different places . this is the centralized api
13 * created by Ranga Iyengar
14 **/
15 P_DEBUG_MODE varchar2(1) := NVL(FND_PROFILE.value('PA_DEBUG_MODE'), 'N'); /* Added Debug Profile Option variable initialization for bug#2674619 */
16
17 PROCEDURE print_message(p_msg IN varchar2) IS
18 BEGIN
19 --PA_FORECAST_ITEMS_UTILS.log_message(p_msg);
20 if (p_msg is not null) then
21 IF P_DEBUG_MODE = 'Y' THEN /* Added Debug Profile Option Check for bug#2674619 */
22 pa_debug.write(x_module => 'pa.plsql.pa_forecastitem_pvt',
23 x_msg => p_msg,
24 x_log_level => 1);
25 pa_debug.write_file('print_message: ' || 'Log :'||p_msg);
26 END IF;
27 --r_msg('Log :'||p_msg);
28 --dbms_output.put_line('Log:'||p_msg);
29 end if;
30 Return;
31 EXCEPTION
32 WHEN OTHERS THEN
33 RAISE;
34 END print_message;
35
36 /*---------------------------------------------------------------------
37 | Procedure : Create_Forecast_Item
38 | Purpose : To create forecast item FOR an assignment
39 | Parameters : p_assignment_id - Input Assignment ID
40 | p_start_date - Start DATE FOR Forecast Item Generation
41 | p_end_date - END DATE FOR Forecast Item Generation
42 | p_process_mode - Mode of Processing.
43 | a) GENERATE : New Generation
44 | Also whenever schedule data changes
45 | b) RECALCULATE : Whenever
46 | i)expenditure OU Changes
47 | ii)expenditure organization Changes
48 | iii)expenditure type Changes
49 | iv)expenditure type class Changes
50 | v)Borrowed flag Changes
51 | c) ERROR : Regeneration of Errored forecast items
52 | by previous generation
53 | x_return_status -
54 | x_msg_count -
55 | x_msg_data -
56 |
57 +----------------------------------------------------------------------*/
58 PROCEDURE Create_Forecast_Item(
59 p_assignment_id IN NUMBER,
60 p_start_date IN DATE DEFAULT NULL,
61 p_end_date IN DATE DEFAULT NULL,
62 p_process_mode IN VARCHAR2,
63 p_gen_res_fi_flag IN VARCHAR2 := 'Y',
64 x_return_status OUT NOCOPY VARCHAR2, /* Added the nocopy check for Bug 4537865 */
65 x_msg_count OUT NOCOPY NUMBER,/* Added the nocopy check for Bug 4537865 */
66 x_msg_data OUT NOCOPY VARCHAR2) IS /* Added the nocopy check for Bug 4537865 */
67
68 TmpAsgnDtlRec PA_FORECAST_GLOB.AsgnDtlRecord;
69 TmpErrHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
70
71 l_msg_index_out NUMBER;
72 lv_res_start_date DATE;
73 lv_res_end_date DATE;
74 lv_return_status VARCHAR2(30);
75
76 l_data VARCHAR2(2000); -- 4537865
77 l_unassigned_fi_start_date DATE;
78 l_unassigned_fi_end_date DATE;
79 g_TimelineProfileSetup PA_TIMELINE_GLOB.TimelineProfileSetup;
80 AVAILABILITY_DURATION NUMBER;
81
82 CURSOR c1 IS
83 SELECT MAX(item_date) item_date
84 FROM pa_forecast_items
85 WHERE resource_id = TmpAsgnDtlRec.resource_id
86 AND delete_flag = 'N'
87 AND forecast_item_type = 'U';
88
89 v_c1 c1%ROWTYPE;
90
91 BEGIN
92
93 TmpErrHdrTab.Delete;
94 lv_return_status := FND_API.G_RET_STS_SUCCESS;
95 PA_DEBUG.Init_err_stack(
96 'PA_FORECASTITEM_PVT.Create_Forecast_Item');
97
98
99 Print_message('1 Calling Get_Assignment_Dtls');
100
101 Get_Assignment_Dtls( p_assignment_id => p_assignment_id ,
102 x_AsgnDtlRec => TmpAsgnDtlRec,
103 x_return_status => lv_return_status,
104 x_msg_count => x_msg_count,
105 x_msg_data => x_msg_data );
106
107 IF (lv_return_status = FND_API.G_RET_STS_SUCCESS) THEN
108
109 IF p_process_mode = 'ERROR' THEN
110
111 Print_message(
112 'Calling FI_Error_Process');
113
114 FI_Error_Process( p_AsgnDtlRec => TmpAsgnDtlRec,
115 p_process_mode => p_process_mode,
116 p_start_date => p_start_date,
117 p_end_date => p_end_date,
118 x_return_status => lv_return_status,
119 x_msg_count => x_msg_count,
120 x_msg_data => x_msg_data );
121
122 ELSIF TmpAsgnDtlRec.assignment_type IN( 'OPEN_ASGMT') THEN
123
124 Print_message(
125 'Calling Generate_Requirement_FI');
126
127 Generate_Requirement_FI(
128 p_AsgnDtlRec => TmpAsgnDtlRec,
129 p_process_mode => p_process_mode,
130 p_start_date => p_start_date,
131 p_end_date => p_end_date,
132 p_ErrHdrTab => TmpErrHdrTab,
133 x_return_status => lv_return_status,
134 x_msg_count => x_msg_count,
135 x_msg_data => x_msg_data );
136 ELSE
137
138 Print_message(
139 'Calling Generate_Assignment_FI');
140
141 Generate_Assignment_FI(
142 p_AsgnDtlRec => TmpAsgnDtlRec,
143 p_process_mode => p_process_mode,
144 p_start_date => p_start_date,
145 p_end_date => p_end_date,
146 p_ErrHdrTab => TmpErrHdrTab,
147 x_res_start_date => lv_res_start_date,
148 x_res_end_date => lv_res_end_date,
149 x_return_status => lv_return_status,
150 x_msg_count => x_msg_count,
151 x_msg_data => x_msg_data );
152
153 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
154
155 IF (p_process_mode <> 'ERROR' ) THEN
156
157 Print_message(
158 'Calling Regenerate_Res_Unassigned_FI');
159
160 IF (p_gen_res_fi_flag = 'Y') then
161 Regenerate_Res_Unassigned_FI(
162 p_resource_id => TmpAsgnDtlRec.resource_id,
163 p_start_date => lv_res_start_date,
164 p_end_date => lv_res_end_date,
165 p_process_mode => p_process_mode,
166 p_ErrHdrTab => TmpErrHdrTab,
167 x_return_status => lv_return_status,
168 x_msg_count => x_msg_count,
169 x_msg_data => x_msg_data );
170 END IF;
171
172 -- Generate Resource FI if the end_date of the current unassigned
173 -- FI is less than sysdate + availability_duration.
174 IF (lv_return_status = FND_API.G_RET_STS_SUCCESS) THEN
175
176 TmpErrHdrTab.DELETE;
177 OPEN c1;
178 FETCH c1 INTO v_c1;
179 IF c1%NOTFOUND THEN
180 l_unassigned_fi_start_date := sysdate;
181 ELSE
182 l_unassigned_fi_start_date := v_c1.item_date +1;
183 END IF;
184 CLOSE c1; -- Bug 4696316
185
186 g_TimelineProfileSetup := PA_TIMELINE_UTIL.get_timeline_profile_setup;
187 availability_duration := nvl(g_TimelineProfileSetup.availability_duration,0);
188 l_unassigned_fi_end_date := ADD_MONTHS(sysdate, availability_duration * (12));
189 IF ((l_unassigned_fi_start_date <=
190 l_unassigned_fi_end_date) AND
191 (availability_duration > 0)) THEN
192 Regenerate_Res_Unassigned_FI(
193 p_resource_id => TmpAsgnDtlRec.resource_id,
194 p_start_date => l_unassigned_fi_start_date,
195 p_end_date => l_unassigned_fi_end_date,
196 p_process_mode => p_process_mode,
197 p_ErrHdrTab => TmpErrHdrTab,
198 x_return_status => lv_return_status,
199 x_msg_count => x_msg_count,
200 x_msg_data => x_msg_data );
201 END IF;
202
203 END IF;
204
205 END IF;
206
207 END IF;
208
209 END IF;
210
211 END IF;
212
213 x_return_status := lv_return_status;
214
215 PA_DEBUG.Reset_Err_Stack;
216
217 EXCEPTION
218
219 WHEN OTHERS THEN
220 print_message('Failed in create forecast item api');
221 print_message('SQLCODE'||sqlcode||sqlerrm);
222
223 x_msg_count := 1;
224 x_msg_data := sqlerrm;
225 FND_MSG_PUB.add_exc_msg
226 (p_pkg_name =>
227 'PA_FORECASTITEM_PVT.Create_Forecast_Item',
228 p_procedure_name => PA_DEBUG.G_Err_Stack);
229 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
230
231 If x_msg_count = 1 THEN
232 pa_interface_utils_pub.get_messages
233 (p_encoded => FND_API.G_TRUE,
234 p_msg_index => 1,
235 p_msg_count => x_msg_count,
236 p_msg_data => x_msg_data,
237 p_data => l_data, -- 4537865
238 p_msg_index_out => l_msg_index_out );
239 x_msg_data := l_data ; -- 4537865
240 End If;
241
242 Print_message(x_msg_data);
243
244 RAISE;
245
246 END Create_Forecast_Item;
247
248 /*---------------------------------------------------------------------
249 | Procedure : Create_Forecast_Item
250 | Purpose : To create forecast item FOR Unassigned time of a resource
251 | Parameters : p_resource_id - Input Resource ID
252 | p_start_date - Start DATE FOR Forecast Item Generation
253 | p_end_date - END DATE FOR Forecast Item Generation
254 | p_process_mode - Mode of Processing.
255 | a) GENERATE : New Generation
256 | Also whenever schedule data changes
257 | b) RECALCULATE : Whenever
258 | i)expenditure OU Changes
259 | ii)expenditure organization Changes
260 | iii)expenditure type Changes
261 | iv)expenditure type class Changes
262 | v)Borrowed flag Changes
263 | x_return_status -
264 | x_msg_count -
265 | x_msg_data -
266 +----------------------------------------------------------------------*/
267 PROCEDURE Create_Forecast_Item (
268 p_resource_id IN NUMBER,
269 p_start_date IN DATE, --Bug 1851096
270 p_end_date IN DATE, --Bug 1851096
271 p_process_mode IN VARCHAR2,
272 x_return_status OUT NOCOPY VARCHAR2, /* Added the nocopy check for Bug 4537865 */
273 x_msg_count OUT NOCOPY NUMBER, /* Added the nocopy check for Bug 4537865 */
274 x_msg_data OUT NOCOPY VARCHAR2) IS /* Added the nocopy check for Bug 4537865 */
275
276 lv_start_date DATE;
277 lv_end_date DATE;
278 TmpErrTab PA_FORECAST_GLOB.FIHdrTabTyp;
279 lv_return_status VARCHAR2(30);
280 l_msg_index_out NUMBER;
281
282 l_data VARCHAR2(2000); -- 4537865
283 BEGIN
284
285 lv_return_status := FND_API.G_RET_STS_SUCCESS;
286
287 TmpErrTab.Delete;
288
289 PA_DEBUG.Init_err_stack(
290 'PA_FORECASTITEM_PVT.Create_Forecast_Item');
291 lv_start_date := p_start_date;
292 lv_end_date := p_end_date;
293
294 Print_message(
295 'Calling Regenerate_Res_Unassigned_FI');
296
297 Regenerate_Res_Unassigned_FI(
298 p_resource_id => p_resource_id,
299 p_start_date => lv_start_date,
300 p_end_date => lv_end_date,
301 p_process_mode => p_process_mode,
302 p_ErrHdrTab => TmpErrTab,
303 x_return_status => lv_return_status,
304 x_msg_count => x_msg_count,
305 x_msg_data => x_msg_data );
306
307 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
308 PA_DEBUG.Reset_Err_Stack;
309 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
310
311 x_return_status := lv_return_status;
312 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
313
314 EXCEPTION
315
316 WHEN OTHERS THEN
317 print_message('Failed in Create_forecast_item api');
318 print_message('SQLCODE'||sqlcode||sqlerrm);
319
320 x_msg_count := 1;
321 x_msg_data := sqlerrm;
322 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
323 FND_MSG_PUB.add_exc_msg
324 (p_pkg_name =>
325 'PA_FORECASTITEM_PVT.Create_Forecast_Item',
326 p_procedure_name => PA_DEBUG.G_Err_Stack);
327
328 If x_msg_count = 1 THEN
329 pa_interface_utils_pub.get_messages
330 (p_encoded => FND_API.G_TRUE,
331 p_msg_index => 1,
332 p_msg_count => x_msg_count,
333 p_msg_data => x_msg_data,
334 p_data => l_data, -- 4537865
335 p_msg_index_out => l_msg_index_out );
336 x_msg_data := l_data ; -- 4537865
337 End If;
338
339 Print_message(x_msg_data);
340
341 RAISE;
342
343 END Create_Forecast_Item;
344
345 /*---------------------------------------------------------------------
346 | Procedure : Create_Forecast_Item
347 | Purpose : To create forecast item FOR Unassigned time of a resource
348 | Parameters : p_person_id - Input person ID
349 | p_start_date - Start DATE FOR Forecast Item Generation
350 | p_end_date - END DATE FOR Forecast Item Generation
351 | p_process_mode - Mode of Processing.
352 | a) GENERATE : New Generation
353 | Also whenever schedule data changes
354 | b) RECALCULATE : Whenever
355 | i)expenditure OU Changes
356 | ii)expenditure organization Changes
357 | iii)expenditure type Changes
358 | iv)expenditure type class Changes
359 | v)Borrowed flag Changes
360 | x_return_status -
361 | x_msg_count -
362 | x_msg_data -
363 +----------------------------------------------------------------------*/
364 PROCEDURE Create_Forecast_Item (
365 p_person_id IN NUMBER,
366 p_start_date IN DATE DEFAULT NULL,
367 p_end_date IN DATE DEFAULT NULL,
368 p_process_mode IN VARCHAR2,
369 x_return_status OUT NOCOPY VARCHAR2, -- 4537865 Added Nocopy
370 x_msg_count OUT NOCOPY NUMBER, -- 4537865 Added Nocopy
371 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865 Added Nocopy
372
373
374 lv_res_start_date DATE;
375 lv_res_end_date DATE;
376
377
378 lv_start_date DATE;
379 lv_end_date DATE;
380 lv_resource_id NUMBER;
381 lv_lock_type VARCHAR2(5);
382
383 TmpAsgnDtlRec PA_FORECAST_GLOB.AsgnDtlRecord;
384 TmpErrHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
385 lv_AssignmentIdTab PA_FORECAST_GLOB.NumberTabTyp;
386 lv_AssignmentTypeTab PA_FORECAST_GLOB.VCTabTyp;
387 lv_StatusCodeTab PA_FORECAST_GLOB.VCTabTyp;
388 lv_StartDateTab PA_FORECAST_GLOB.DateTabTyp;
389 lv_EndDateTab PA_FORECAST_GLOB.DateTabTyp;
390 lv_SourceAssignmentIDTab PA_FORECAST_GLOB.NumberTabTyp;
391 lv_ProjectIDTab PA_FORECAST_GLOB.NumberTabTyp;
392 lv_ResourceIDTab PA_FORECAST_GLOB.NumberTabTyp;
393 lv_WorkTypeIDTab PA_FORECAST_GLOB.NumberTabTyp;
394 lv_ExpenditureOrgIDTab PA_FORECAST_GLOB.NumberTabTyp;
395 lv_ExpenditureOrgnIDTab PA_FORECAST_GLOB.NumberTabTyp;
396 lv_ExpenditureTypeTab PA_FORECAST_GLOB.VCTabTyp;
397 lv_ExpTypeClassTab PA_FORECAST_GLOB.VCTabTyp;
398 lv_FcstTpAmountTypeTab PA_FORECAST_GLOB.VCTabTyp;
399
400 TmpErrTab PA_FORECAST_GLOB.FIHdrTabTyp;
401 l_cannot_acquire_lock EXCEPTION;
402 l_cannot_release_lock EXCEPTION;
403 lv_return_status VARCHAR2(30);
404 lv_err_asg_id NUMBER;
405
406 lv_process_mode VARCHAR2(80);
407
408 -- 2275838: Removed union for performance.
409 CURSOR asgmt_dtls(lv_resource_id NUMBER) IS
410 SELECT proj_asgn.assignment_id,
411 decode(proj_asgn.assignment_type,
412 'OPEN_ASSIGNMENT', 'OPEN_ASGMT',
413 'STAFFED_ASSIGNMENT', 'STAFFED_ASGMT',
414 'STAFFED_ADMIN_ASSIGNMENT', 'STAFFED_ASGMT',
415 'STAFFED_ASGMT'),
416 proj_asgn.status_code,proj_asgn.start_date,
417 proj_asgn.end_date, proj_asgn.source_assignment_id,
418 proj_asgn.project_id, proj_asgn.resource_id,
419 proj_asgn.work_type_id,
420 NVL(proj_asgn.expenditure_org_id,-99)
421 expenditure_org_id,
422 proj_asgn.expenditure_organization_id,
423 proj_asgn.expenditure_type,
424 proj_asgn.expenditure_type_class,
425 fcst_tp_amount_type
426 FROM pa_project_assignments proj_asgn
427 WHERE proj_asgn.resource_id = lv_resource_id
428 AND ( (lv_start_date BETWEEN proj_asgn.start_date AND
429 proj_asgn.end_date)
430 OR (lv_end_date BETWEEN proj_asgn.start_date AND
431 proj_asgn.end_date)
432 OR ( lv_start_date < proj_asgn.start_date AND
433 lv_end_date > proj_asgn.end_date ));
434
435
436 BEGIN
437
438 lv_return_status := FND_API.G_RET_STS_SUCCESS;
439
440 PA_DEBUG.Init_err_stack(
441 'PA_FORECASTITEM_PVT.Create_Forecast_Item');
442
443 -- 2275838: Set process mode correctly.
444 lv_process_mode := p_process_mode;
445 if (p_process_mode = 'GENERATE_ASGMT') then
446 lv_process_mode := 'GENERATE';
447 end if;
448
449 -- 2275838: Removed union above and replaced with NVL.
450 lv_start_date := NVL(p_start_date, TO_DATE('01/01/1950','MM/DD/YYYY'));
451 lv_end_date := NVL(p_end_date, TO_DATE('12/31/4712','MM/DD/YYYY'));
452
453 print_message('lv_start_date: ' || lv_start_date);
454 print_message('lv_end_date: ' || lv_end_date);
455
456 lv_resource_id := PA_FORECAST_ITEMS_UTILS.get_resource_id(
457 p_person_id);
458
459 OPEN asgmt_dtls(lv_resource_id);
460
461 LOOP
462
463 -- fetching all the records and storing them
464 -- corresponding to their tab type
465
466 FETCH asgmt_dtls
467 BULK COLLECT INTO lv_AssignmentIdTab,
468 lv_AssignmentTypeTab,
469 lv_StatusCodeTab ,
470 lv_StartDateTab ,
471 lv_EndDateTab ,
472 lv_SourceAssignmentIDTab,
473 lv_ProjectIDTab,
474 lv_ResourceIDTab,
475 lv_WorkTypeIDTab ,
476 lv_ExpenditureOrgIDTab ,
477 lv_ExpenditureOrgnIDTab ,
478 lv_ExpenditureTypeTab ,
479 lv_ExpTypeClassTab ,
480 lv_FcstTpAmountTypeTab
481 LIMIT 200;
482
483
484 IF lv_AssignmentIdTab.COUNT =0 THEN
485
486 EXIT;
487
488 END IF;
489
490 FOR i IN lv_AssignmentIdTab.FIRST..lv_AssignmentIdTab.LAST LOOP
491
492 -- Commenting out this logic: We must pass start date and end date of assignment to this
493 -- procedure because it has logic to delete assignment fis outside of the range.
494 /*
495 -- 2275838: Removed null check.
496 IF ( lv_StartDateTab(i) < lv_start_date ) THEN
497
498 lv_StartDateTab(i) := lv_start_date;
499
500 END IF;
501
502 IF ( lv_EndDateTab(i) > lv_end_date ) THEN
503
504 lv_EndDateTab(i) := lv_end_date;
505
506 END IF;
507 */
508
509 -- 2275838: Removed locking code because it is taken
510 -- care of in generate_assignment_fi.
511
512 -- Call the Forecast Generation API.
513
514 TmpAsgnDtlRec.assignment_id := lv_AssignmentIdTab(i);
515 TmpAsgnDtlRec.assignment_type := lv_AssignmentTypeTab(i);
516 TmpAsgnDtlRec.status_code := lv_StatusCodeTab(i) ;
517 TmpAsgnDtlRec.start_date := lv_StartDateTab(i) ;
518 TmpAsgnDtlRec.end_date := lv_EndDateTab(i) ;
519 TmpAsgnDtlRec.source_assignment_id :=
520 lv_SourceAssignmentIDTab(i);
521 TmpAsgnDtlRec.project_id := lv_ProjectIDTab(i);
522 TmpAsgnDtlRec.resource_id := lv_ResourceIDTab(i);
523 TmpAsgnDtlRec.work_type_id := lv_WorkTypeIDTab(i);
524 TmpAsgnDtlRec.expenditure_org_id :=
525 lv_ExpenditureOrgIDTab(i);
526 TmpAsgnDtlRec.expenditure_organization_id :=
527 lv_ExpenditureOrgnIDTab(i);
528 TmpAsgnDtlRec.expenditure_type := lv_ExpenditureTypeTab(i);
529 TmpAsgnDtlRec.expenditure_type_class :=
530 lv_ExpTypeClassTab(i);
531 TmpAsgnDtlRec.fcst_tp_amount_type :=
532 lv_FcstTpAmountTypeTab(i);
533
534 Print_message(
535 'Calling Generate_Assignment_FI');
536
537 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
538
539 Generate_Assignment_FI(
540 p_AsgnDtlRec => TmpAsgnDtlRec,
541 p_process_mode => lv_process_mode,
542 p_start_date => lv_StartDateTab(i),
543 p_end_date => lv_EndDateTab(i),
544 p_ErrHdrTab => TmpErrHdrTab,
545 x_res_start_date => lv_res_start_date,
546 x_res_end_date => lv_res_end_date,
547 x_return_status => lv_return_status,
548 x_msg_count => x_msg_count,
549 x_msg_data => x_msg_data );
550 END IF;
551
552 END LOOP;
553
554 lv_AssignmentIdTab.delete;
555 lv_AssignmentIdTab.delete ;
556 lv_AssignmentTypeTab.delete;
557 lv_StatusCodeTab.delete ;
558 lv_StartDateTab.delete ;
559 lv_EndDateTab.delete ;
560 lv_SourceAssignmentIDTab.delete;
561 lv_ProjectIDTab.delete;
562 lv_ResourceIDTab.delete;
563 lv_WorkTypeIDTab.delete ;
564 lv_ExpenditureOrgIDTab.delete ;
565 lv_ExpenditureOrgnIDTab.delete ;
566 lv_ExpenditureTypeTab.delete ;
567 lv_ExpTypeClassTab.delete ;
568 lv_FcstTpAmountTypeTab.delete;
569 END LOOP;
570
571 CLOSE asgmt_dtls;
572
573 -- 2275838: Do not generate unassigned time if GENERATE_ASGMT
574 -- passed.
575 IF (p_process_mode <> 'GENERATE_ASGMT' AND
576 lv_return_status = FND_API.G_RET_STS_SUCCESS) THEN
577
578 Print_message(
579 'Calling Regenerate_Res_Unassigned_FI');
580
581 Regenerate_Res_Unassigned_FI(
582 p_resource_id => lv_resource_id,
583 p_start_date => lv_start_date,
584 p_end_date => lv_end_date,
585 p_process_mode => lv_process_mode,
586 p_ErrHdrTab => TmpErrTab,
587 x_return_status => lv_return_status,
588 x_msg_count => x_msg_count,
589 x_msg_data => x_msg_data );
590 END IF;
591
592 x_return_status := lv_return_status;
593
594 PA_DEBUG.Reset_Err_Stack;
595
596 EXCEPTION
597 -- 2275838: Removed code to handle locking exception
598 -- because locking occurs in sub procedures.
599 WHEN OTHERS THEN
600 print_message('Failed in Create_forecast_item api');
601 print_message('SQLCODE'||sqlcode||sqlerrm);
602
603 x_msg_count := 1;
604 x_msg_data := sqlerrm;
605 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
606 FND_MSG_PUB.add_exc_msg
607 (p_pkg_name =>
608 'PA_FORECASTITEM_PVT.Create_Forecast_Item',
609 p_procedure_name => PA_DEBUG.G_Err_Stack);
610 Print_message(x_msg_data);
611
612 --RAISE;
613
614 END Create_Forecast_Item;
615
616 /*---------------------------------------------------------------------
617 | Procedure : Create_Forecast_Item
618 | Purpose : To Re-create forecast item FOR Unassigned time of 1/many
619 | resource which have errored out IN previous generations
620 | Parameters : p_ErrHdrTab - Table of Resource forecast items which
621 | have errored out IN previous runs.
622 | It has the format of pa_forecast_item
623 | table
624 | p_process_mode - Mode of Processing.
625 | a) ERROR : Regeneration of Errored forecast items
626 | by previous runs
627 | x_return_status -
628 | x_msg_count -
629 | x_msg_data -
630 +----------------------------------------------------------------------*/
631 PROCEDURE Create_Forecast_Item (
632 p_ErrHdrTab IN PA_FORECAST_GLOB.FIHdrTabTyp,
633 p_process_mode IN VARCHAR2,
634 x_return_status OUT NOCOPY VARCHAR2, -- 4537865 Added nocopy
635 x_msg_count OUT NOCOPY NUMBER, -- 4537865 Added nocopy
636 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865 Added nocopy
637
638
639 lv_return_status VARCHAR2(30);
640 l_msg_index_out NUMBER;
641
642 l_data VARCHAR2(2000); -- 4537865
643 BEGIN
644
645 lv_return_status := FND_API.G_RET_STS_SUCCESS;
646
647 PA_DEBUG.Init_err_stack(
648 'PA_FORECASTITEM_PVT.Create_Forecast_Item');
649
650 Print_message(
651 'Calling Resource_Unasg_Error_Process');
652
653 Resource_Unasg_Error_Process(
654 p_ErrHdrTab => p_ErrHdrTab,
655 p_process_mode => p_process_mode,
656 x_return_status => lv_return_status,
657 x_msg_count => x_msg_count,
658 x_msg_data => x_msg_data );
659
660 PA_DEBUG.Reset_Err_Stack;
661
662 x_return_status := lv_return_status;
663
664 EXCEPTION
665
666 WHEN OTHERS THEN
667 print_message('Failed in Create_forecast_item api');
668 print_message('SQLCODE'||sqlcode||sqlerrm);
669
670 x_msg_count := 1;
671 x_msg_data := sqlerrm;
672 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
673 FND_MSG_PUB.add_exc_msg
674 (p_pkg_name =>
675 'PA_FORECASTITEM_PVT.Create_Forecast_Item',
676 p_procedure_name => PA_DEBUG.G_Err_Stack);
677 If x_msg_count = 1 THEN
678 pa_interface_utils_pub.get_messages
679 (p_encoded => FND_API.G_TRUE,
680 p_msg_index => 1,
681 p_msg_count => x_msg_count,
682 p_msg_data => x_msg_data,
683 p_data => l_data, -- 4537865
684 p_msg_index_out => l_msg_index_out );
685 x_msg_data := l_data ; -- 4537865
686 End If;
687 Print_message(x_msg_data);
688 RAISE;
689
690 END Create_Forecast_Item;
691
692
693 /* ---------------------------------------------------------------------
694 | Procedure : Delete_Forecast_Item
695 | Purpose : To delete all FI's for a given assignment_id
696 | Parameters : p_assignment_id - Input assignment id
697 | x_return_status -
698 | x_msg_count -
699 | x_msg_data -
700 +----------------------------------------------------------------------*/
701 PROCEDURE Delete_Forecast_Item (
702 p_assignment_id IN NUMBER,
703 p_resource_id IN NUMBER,
704 p_start_date IN DATE,
705 p_end_date IN DATE,
706 x_return_status OUT NOCOPY VARCHAR2, -- 4537865 Added nocopy
707 x_msg_count OUT NOCOPY NUMBER, -- 4537865 Added nocopy
708 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865 Added nocopy
709
710 TmpAsgnDtlRec PA_FORECAST_GLOB.AsgnDtlRecord;
711 TmpErrTab PA_FORECAST_GLOB.FIHdrTabTyp;
712 lv_process_mode VARCHAR2(15);
713 lv_start_date DATE;
714 lv_end_date DATE;
715 lv_return_status VARCHAR2(30);
716 lv_asg_count NUMBER;
717 l_msg_index_out NUMBER;
718
719 l_data varchar2(2000); -- 4537865
720 BEGIN
721
722 lv_return_status := FND_API.G_RET_STS_SUCCESS;
723
724 PA_DEBUG.Init_err_stack(
725 'PA_FORECASTITEM_PVT.Delete_Forecast_Item');
726
727 SELECT count(*) into lv_asg_count
728 FROM pa_project_assignments
729 WHERE assignment_id = p_assignment_id;
730 /*
731 Get_Assignment_Dtls( p_assignment_id => p_assignment_id ,
732 x_AsgnDtlRec => TmpAsgnDtlRec,
733 x_return_status => lv_return_status,
734 x_msg_count => x_msg_count,
735 x_msg_data => x_msg_data );
736 */
737
738 print_message('lv_asg_count: ' || lv_asg_count);
739 IF lv_asg_count = 0 THEN
740
741 IF TmpAsgnDtlRec.assignment_id IS NULL THEN
742
743 Print_message( 'Calling Delete_FI');
744
745 Delete_FI( p_assignment_id=>p_assignment_id,
746 x_return_status=>lv_return_status,
747 x_msg_count=>x_msg_count,
748 x_msg_data=> x_msg_data );
749 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
750
751 IF p_resource_id IS NOT NULL THEN
752
753 Print_message(
754 'Calling Regenerate_Res_Unassigned_FI');
755
756 lv_process_mode := 'GENERATE';
757 lv_start_date := p_start_date;
758 lv_end_date := p_end_date;
759
760 Regenerate_Res_Unassigned_FI(
761 p_resource_id => p_resource_id,
762 p_start_date => lv_start_date,
763 p_end_date => lv_end_date,
764 p_process_mode => lv_process_mode,
765 p_ErrHdrTab => TmpErrTab,
766 x_return_status => lv_return_status,
767 x_msg_count => x_msg_count,
768 x_msg_data => x_msg_data );
769
770 END IF;
771
772 END IF;
773
774 END IF;
775
776 END IF;
777
778 x_return_status := lv_return_status;
779
780 PA_DEBUG.Reset_Err_Stack;
781
782 EXCEPTION
783
784 WHEN OTHERS THEN
785 print_message('Failed in delete_forecast_item api');
786 print_message('SQLCODE'||sqlcode||sqlerrm);
787
788 x_msg_count := 1;
789 x_msg_data := sqlerrm;
790 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
791 FND_MSG_PUB.add_exc_msg
792 (p_pkg_name =>
793 'PA_FORECASTITEM_PVT.Delete_Forecast_Item',
794 p_procedure_name => PA_DEBUG.G_Err_Stack);
795
796 If x_msg_count = 1 THEN
797 pa_interface_utils_pub.get_messages
798 (p_encoded => FND_API.G_TRUE,
799 p_msg_index => 1,
800 p_msg_count => x_msg_count,
801 p_msg_data => x_msg_data,
802 p_data => l_data, -- 4537865
803 p_msg_index_out => l_msg_index_out );
804 x_msg_data := l_data ; -- 4537865
805 End If;
806 Print_message(x_msg_data);
807 RAISE;
808
809 END Delete_Forecast_Item;
810
811
812 /* ---------------------------------------------------------------------
813 | Procedure : Get_Assignment_Dtls
814 | Purpose : To get Assignment details
815 | Parameters : p_assignment_id - Input assignment id
816 | x_AsgnDtlRec - Stores the details of assignment id
817 | x_return_status -
818 | x_msg_count -
819 | x_msg_data -
820 +----------------------------------------------------------------------*/
821 PROCEDURE Get_Assignment_Dtls(
822 p_assignment_id IN NUMBER,
823 x_AsgnDtlRec OUT NOCOPY PA_FORECAST_GLOB.AsgnDtlRecord, /* 2674619 - Nocopy change */
824 x_return_status OUT NOCOPY VARCHAR2, -- 4537865 Added nocopy
825 x_msg_count OUT NOCOPY NUMBER, -- 4537865 Added nocopy
826 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865 Added nocopy
827
828 lv_return_status VARCHAR2(30);
829 l_msg_index_out NUMBER;
830
831 l_data VARCHAR2(2000); -- 4537865
832 BEGIN
833
834 lv_return_status := FND_API.G_RET_STS_SUCCESS;
835
836 PA_DEBUG.Init_err_stack(
837 'PA_FORECASTITEM_PVT.Get_Assignment_Dtls');
838
839 Print_message(
840 'Entering Get_Assignment_Dtls: ' || p_assignment_id);
841
842 -- 2196924: Adding case when p_asgn_id is null
843 -- This may occur when there's no HR assignment for
844 -- part of the resources time, but it is unlikely.
845 -- This was changed for future support.
846 if (p_assignment_id is null) then
847 x_AsgnDtlRec.assignment_id := null;
848 x_AsgnDtlRec.assignment_type := null;
849 x_AsgnDtlRec.status_code := null;
850 x_AsgnDtlRec.start_date := null;
851 x_AsgnDtlRec.end_date := null;
852 x_AsgnDtlRec.source_assignment_id := null;
853 x_AsgnDtlRec.project_id := -66;
854 x_AsgnDtlRec.resource_id := null;
855 x_AsgnDtlRec.work_type_id := null;
856 x_AsgnDtlRec.expenditure_org_id := -88;
857 x_AsgnDtlRec.expenditure_organization_id := -77;
858 x_AsgnDtlRec.expenditure_type := '-99';
859 x_AsgnDtlRec.expenditure_type_class := '-99';
860 x_AsgnDtlRec.fcst_tp_amount_type := '-99';
861 else
862
863 SELECT assignment_id,assignment_type,
864 status_code,start_date, end_date,
865 source_assignment_id, project_id, resource_id,
866 work_type_id,
867 NVL(expenditure_org_id,-99) expenditure_org_id,
868 expenditure_organization_id,
869 expenditure_type, expenditure_type_class,
870 fcst_tp_amount_type
871 INTO x_AsgnDtlRec
872 FROM pa_project_assignments
873 WHERE assignment_id = p_assignment_id;
874
875 Print_message('x_AsgnDtlRec.resource_id: ' || x_AsgnDtlRec.resource_id);
876 IF x_AsgnDtlRec.assignment_type = 'OPEN_ASSIGNMENT' THEN
877
878 Print_message(
879 x_AsgnDtlRec.assignment_type);
880
881 x_AsgnDtlRec.assignment_type := 'OPEN_ASGMT';
882
883 ELSIF x_AsgnDtlRec.assignment_type in
884 ('STAFFED_ASSIGNMENT', 'STAFFED_ADMIN_ASSIGNMENT') THEN
885
886 Print_message(
887 x_AsgnDtlRec.assignment_type);
888
889 x_AsgnDtlRec.assignment_type := 'STAFFED_ASGMT';
890 END IF;
891
892 END IF;
893
894 Print_message(
895 'Leaving Get_Assignment_Dtls');
896
897 PA_DEBUG.Reset_Err_Stack;
898
899 x_return_status := lv_return_status;
900
901 EXCEPTION
902
903 WHEN OTHERS THEN
904 print_message('Failed in Get_assignemnt_dtls api');
905 print_message('SQLCODE'||sqlcode||sqlerrm);
906
907 x_msg_count := 1;
908 x_msg_data := sqlerrm;
909 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
910 FND_MSG_PUB.add_exc_msg
911 (p_pkg_name =>
912 'PA_FORECASTITEM_PVT.Get_Assignment_Dtls',
913 p_procedure_name => PA_DEBUG.G_Err_Stack);
914
915 If x_msg_count = 1 THEN
916 pa_interface_utils_pub.get_messages
917 (p_encoded => FND_API.G_TRUE,
918 p_msg_index => 1,
919 p_msg_count => x_msg_count,
920 p_msg_data => x_msg_data,
921 p_data => l_data, -- 4537865
922 p_msg_index_out => l_msg_index_out );
923 x_msg_data := l_data ; -- 4537865
924 End If;
925
926 Print_message(x_msg_data);
927 RAISE;
928
929 END Get_Assignment_Dtls;
930
931 /* ---------------------------------------------------------------------
932 | Procedure : Get_Project_Dtls
933 | Purpose : To get details of given project id
934 | Parameters : p_project_id - Input Project ID
935 | x_project_org_id - Project org ID
936 | x_project_orgn_id - Project organization ID
937 | x_work_type_id - Work type ID
938 | x_project_type_class - Project Type Class
939 | x_project_status_code - Project status code
940 | x_return_status -
941 | x_msg_count -
942 | x_msg_data -
943 +----------------------------------------------------------------------*/
944 PROCEDURE Get_Project_Dtls(
945 p_project_id IN NUMBER,
946 x_project_org_id OUT NOCOPY NUMBER, -- 4537865 Added nocopy
947 x_project_orgn_id OUT NOCOPY NUMBER, -- 4537865 Added nocopy
948 x_work_type_id OUT NOCOPY NUMBER, -- 4537865 Added nocopy
949 x_project_type_class OUT NOCOPY VARCHAR2, -- 4537865 Added nocopy
950 x_project_status_code OUT NOCOPY VARCHAR2, -- 4537865 Added nocopy
951 x_return_status OUT NOCOPY VARCHAR2, -- 4537865 Added nocopy
952 x_msg_count OUT NOCOPY NUMBER, -- 4537865 Added nocopy
953 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865 Added nocopy
954
955 lv_return_status VARCHAR2(30);
956 l_msg_index_out NUMBER;
957
958 l_data VARCHAR2(2000);
959 BEGIN
960
961 lv_return_status := FND_API.G_RET_STS_SUCCESS;
962
963 PA_DEBUG.Init_err_stack(
964 'PA_FORECASTITEM_PVT.Get_Project_Dtls');
965
966 Print_message('Entering Get_Project_Dtls: ' || p_project_id);
967
968 -- 2196924: Adding case when p_project_id is null
969 -- This will occur when there's no HR assignment for
970 -- part of the resources time, so no unassigned time project
971 -- because no ou.
972 if (p_project_id = -66 or p_project_id is null) then
973 x_project_org_id := -88;
974 x_project_orgn_id := -77;
975 x_work_type_id := '-99';
976 x_project_type_class := '-99';
977 x_project_status_code := '-99';
978 else
979
980 -- R12: MOAC Changes: removed nvl usage with org_id
981 SELECT pr.org_id, pr.carrying_out_organization_id,
982 pr.work_type_id, pt.project_type_class_code,
983 pr.project_status_code
984 INTO x_project_org_id, x_project_orgn_id,
985 x_work_type_id, x_project_type_class,
986 x_project_status_code
987 FROM pa_projects_all pr, pa_project_types_all pt
988 WHERE pr.project_id = p_project_id
989 AND pt.org_id = pr.org_id
990 AND pt.project_type =pr.project_type;
991
992 end if;
993
994 Print_message('Leaving Get_Project_Dtls');
995
996 PA_DEBUG.Reset_Err_Stack;
997
998 x_return_status := lv_return_status;
999
1000 EXCEPTION
1001
1002 WHEN OTHERS THEN
1003 print_message('Failed in Get_project_Dtls api');
1004 Print_message('Sqlerr '||sqlcode||sqlerrm);
1005
1006 x_msg_count := 1;
1007 x_msg_data := sqlerrm;
1008 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1009
1010 -- 4537865
1011 x_project_org_id := NULL ;
1012 x_project_orgn_id := NULL ;
1013 x_work_type_id := NULL ;
1014 x_project_type_class := NULL ;
1015 x_project_status_code := NULL ;
1016
1017 FND_MSG_PUB.add_exc_msg
1018 (p_pkg_name =>
1019 'PA_FORECASTITEM_PVT.Get_Project_Dtls',
1020 p_procedure_name => PA_DEBUG.G_Err_Stack);
1021 If x_msg_count = 1 THEN
1022 pa_interface_utils_pub.get_messages
1023 (p_encoded => FND_API.G_TRUE,
1024 p_msg_index => 1,
1025 p_msg_count => x_msg_count,
1026 p_msg_data => x_msg_data,
1027 p_data => l_data, -- 4537865
1028 p_msg_index_out => l_msg_index_out );
1029 x_msg_data := l_data ; -- 4537865
1030 End If;
1031 Print_message(x_msg_data);
1032
1033 RAISE;
1034
1035
1036 END Get_Project_Dtls;
1037
1038 /* ---------------------------------------------------------------------
1039 | Procedure : Generate_Requirement_FI
1040 | Purpose : To generate forecast items FOR requirement record
1041 | Parameters : p_AsgnDtlRec - Assignment Details FOR which
1042 | forecast item is to be generated
1043 | p_process_mode - Mode of Processing
1044 | a) GENERATE : New Generation
1045 | Also whenever schedule data changes
1046 | b) RECALCULATE : Whenever
1047 | i)expenditure OU Changes
1048 | ii)expenditure organization Changes
1049 | iii)expenditure type Changes
1050 | iv)expenditure type class Changes
1051 | v)Borrowed flag Changes
1052 | c) ERROR : Regeneration of Errored forecast items
1053 | by previous generation
1054 | p_start_date - Start DATE FOR Forecast Item Generation
1055 | p_end_date - END DATE FOR Forecast Item Generation
1056 | p_ErrHdrTab -
1057 | a)GENERATE/ : Dummy tab is passed
1058 | RECALCULATE Mode
1059 | b) ERROR Mode : Contains all errored forecast item
1060 | Header records
1061 | x_return_status -
1062 | x_msg_count -
1063 | x_msg_data -
1064 +----------------------------------------------------------------------*/
1065
1066
1067 PROCEDURE Generate_Requirement_FI(
1068 p_AsgnDtlRec IN PA_FORECAST_GLOB.AsgnDtlRecord,
1069 p_process_mode IN VARCHAR2,
1070 p_start_date IN DATE,
1071 p_end_date IN DATE,
1072 p_ErrHdrTab IN PA_FORECAST_GLOB.FIHdrTabTyp,
1073 x_return_status OUT NOCOPY VARCHAR2, -- 4537865 Added nocopy
1074 x_msg_count OUT NOCOPY NUMBER, -- 4537865 Added nocopy
1075 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865 Added nocopy
1076
1077
1078 lv_req_exist_flag VARCHAR2(1) := 'N';
1079 TmpDbFIDtlTab PA_FORECAST_GLOB.FIDtlTabTyp;
1080 TmpDbFIHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
1081 TmpFIDtlInsTab PA_FORECAST_GLOB.FIDtlTabTyp;
1082 TmpFIDtlUpdTab PA_FORECAST_GLOB.FIDtlTabTyp;
1083 TmpFIHdrInsTab PA_FORECAST_GLOB.FIHdrTabTyp;
1084 TmpFIHdrUpdTab PA_FORECAST_GLOB.FIHdrTabTyp;
1085 TmpScheduleTab PA_FORECAST_GLOB.SCHEDULETABTYP;
1086 TmpFIDayTab PA_FORECAST_GLOB.FIDayTabTyp;
1087 lv_start_date DATE ;
1088 lv_end_date DATE ;
1089 l_msg_index_out NUMBER;
1090
1091 l_data VARCHAR2(2000); -- 4537865
1092 -- Used to determine start_date AND end_date for
1093 -- Calculating resource unassigned time
1094 -- Not applicable IN this routine
1095
1096 lv_old_start_date DATE := NULL;
1097 lv_old_end_date DATE := NULL;
1098 lv_res_start_date DATE := NULL;
1099 lv_res_end_date DATE := NULL;
1100 lv_err_msg VARCHAR2(30);
1101
1102 lv_return_status VARCHAR2(30);
1103
1104 BEGIN
1105
1106 lv_return_status := FND_API.G_RET_STS_SUCCESS;
1107
1108 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Generate_Requirement_FI');
1109
1110 TmpDbFIDtlTab.Delete;
1111 TmpDbFIHdrTab.Delete;
1112 TmpFIDtlInsTab.Delete;
1113 TmpFIDtlUpdTab.Delete;
1114 TmpFIHdrInsTab.Delete;
1115 TmpFIHdrUpdTab.Delete;
1116 TmpScheduleTab.Delete;
1117 TmpFIDayTab.Delete;
1118
1119 Print_message( 'Entering Generate_Requirement_FI');
1120
1121 IF p_start_date IS NULL THEN
1122
1123 lv_start_date := p_AsgnDtlRec.start_date;
1124
1125 ELSE
1126
1127 lv_start_date := p_start_date;
1128
1129 END IF;
1130
1131 IF p_end_date IS NULL THEN
1132
1133 lv_end_date := p_AsgnDtlRec.end_date;
1134
1135 ELSE
1136
1137 lv_end_date := p_end_date;
1138
1139 END IF;
1140
1141 Print_message(
1142 'Asgn_ID - ' || p_asgndtlrec.assignment_id ||
1143 '; Start_Date - ' || lv_start_date ||
1144 '; End_Date - ' || lv_end_date );
1145
1146 -- Find the requirement is new/modified
1147 IF (p_process_mode <> 'ERROR') THEN
1148
1149 Print_message( 'Req - Calling Chk_Requirement_FI_Exist');
1150
1151 lv_req_exist_flag := Chk_Requirement_FI_Exist( p_AsgnDtlRec.assignment_id);
1152 ELSE
1153
1154 lv_req_exist_flag := 'Y';
1155
1156 END IF;
1157
1158 IF lv_req_exist_flag = 'Y' THEN
1159
1160 IF p_process_mode = 'GENERATE' THEN
1161
1162 -- Reverse forecast items Details FOR this assignment
1163 -- which do not fall BETWEEN startdate AND END DATE
1164
1165 Print_message( 'Req - Calling Reverse_FI_Dtl');
1166
1167 Reverse_FI_Dtl(p_AsgnDtlRec.assignment_id, lv_start_date, lv_end_date,
1168 lv_return_status, x_msg_count, x_msg_data);
1169
1170 -- Reverse forecast items Header FOR this assignment
1171 -- which do not fall BETWEEN startdate AND END DATE
1172
1173 Print_message( 'Req - Calling Reverse_FI_Hdr');
1174
1175 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1176
1177 Reverse_FI_Hdr(p_AsgnDtlRec.assignment_id,
1178 lv_start_date, lv_end_date,
1179 lv_old_start_date, lv_old_end_date,
1180 lv_return_status, x_msg_count, x_msg_data);
1181
1182 END IF;
1183
1184 END IF;
1185
1186 END IF;
1187
1188
1189 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1190
1191 -- Get schedule data AND build day fI Records
1192 Print_message( 'Req - Calling Get_Assignment_Schedule');
1193
1194 PA_FORECAST_ITEMS_UTILS.Get_assignment_Schedule(
1195 p_AsgnDtlRec.assignment_id,
1196 lv_start_date, lv_end_date,p_process_mode,
1197 Tmpscheduletab,
1198 lv_return_status, x_msg_count, x_msg_data);
1199
1200 IF NVL(TmpScheduleTab.Count,0) = 0 THEN
1201
1202 lv_err_msg := 'No_Schedule_Records - Req';
1203 RAISE NO_DATA_FOUND;
1204
1205 END IF;
1206
1207 END IF;
1208
1209
1210 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1211
1212 Print_message( 'Req - Calling Initialize_Day_FI');
1213
1214 Initialize_Day_FI( TmpScheduleTab,
1215 p_process_mode,
1216 lv_start_date,
1217 lv_end_date,
1218 TmpFIDayTab ,
1219 lv_return_status , x_msg_count ,
1220 x_msg_data );
1221 END IF;
1222
1223 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1224
1225 Print_message( 'Req - Calling Build_Day_FI');
1226
1227 Build_Day_FI ( TmpScheduleTab,
1228 lv_start_date, lv_end_date ,
1229 TmpFIDayTab ,
1230 p_AsgnDtlRec.assignment_type,
1231 lv_return_status , x_msg_count ,
1232 x_msg_data );
1233 END IF;
1234
1235
1236 TmpFIHdrInsTab.delete; -- Initialize
1237 TmpFIHdrUpdTab.delete; -- Initialize
1238 TmpFIDtlUpdTab.delete; -- Initialize
1239 TmpFIDtlUpdTab.delete; -- Initialize
1240 TmpDBFIHdrTab.delete; -- Initialize
1241 TmpDBFIDtlTab.delete; -- Initialize
1242
1243 -- FI exists so day FI's built will have to be modified
1244
1245 IF lv_req_exist_flag = 'Y' THEN
1246
1247 lv_start_date := TmpFIDayTab(TmpFIDayTab.FIRST).item_date;
1248 lv_end_date := TmpFIDayTab(TmpFIDayTab.LAST).item_date;
1249
1250 -- Get existing forecast items FOR this assignment
1251 -- which fall BETWEEN startdate AND END DATE
1252
1253 IF (p_process_mode <> 'ERROR') THEN
1254
1255 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1256
1257 Print_message( 'Req - Calling Fetch_FI_Hdr');
1258
1259 Fetch_FI_Hdr (p_AsgnDtlRec.assignment_id,
1260 p_AsgnDtlRec.resource_id,
1261 lv_start_date, lv_end_date,
1262 TmpDBFIHdrTab,
1263 lv_return_status,
1264 x_msg_count, x_msg_data);
1265 END IF;
1266
1267 ELSE
1268
1269 TmpDBFIHdrTab := p_ErrHdrTab;
1270
1271 END IF;
1272
1273 -- Get existing forecast items detail FOR this
1274 -- assignment which fall BETWEEN startdate AND END DATE
1275
1276 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1277
1278 Print_message( 'Req - Calling Fetch_FI_Dtl');
1279
1280 Fetch_FI_Dtl ( p_AsgnDtlRec.assignment_id,
1281 p_AsgnDtlRec.resource_id,
1282 lv_start_date, lv_end_date,
1283 TmpDBFIDtlTab,
1284 lv_return_status,
1285 x_msg_count, x_msg_data);
1286 END IF;
1287
1288 END IF;
1289
1290
1291 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1292
1293 -- Build Forecast Item Header
1294
1295 Print_message( 'Calling Build_FI_Hdr_Req');
1296
1297 Build_FI_Hdr_Req(p_AsgnDtlRec, TmpDBFIHdrTab,
1298 TmpFIDayTab, TmpFIHdrInsTab,
1299 TmpFIHdrUpdTab, lv_return_status,
1300 x_msg_count, x_msg_data);
1301 END IF;
1302
1303
1304 -- Detail Processing Inputs : TmpFIDayTab, TmpDBFIDtlTab, p_asgndltrec
1305 -- TmpFIDayTab.Action_flag is updated by header process.
1306 -- IF action_flag = 'C'
1307 -- check FOR change IN resource_type_code, person_billable_flag,
1308 -- include IN forecast option, provisional_flag, work_type_id
1309 -- If there is change mark action_flag = 'RN';
1310 -- IF action_flag = 'DN'
1311 --Header record has changed
1312 -- Reverse detail record
1313 -- Create new detail record with forecast_item_id
1314 -- (generated by header record, saved IN TmpFIDayTab)
1315 -- AND line_NUMBER = 1;
1316 -- IF action_flag = 'RN'
1317 -- Change IN detail record values
1318 -- Reverse detail record
1319 -- create new detail record with same forecast_item_id
1320 -- AND line_NUMBER = max(line_NUMBER) + 1;
1321 -- IF action_flag = 'N'
1322 -- Create new detail record with forecast_item_id
1323 -- (generated by header record, saved IN TmpFIDayTab)
1324 -- AND line_NUMBER = 1;
1325
1326 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1327
1328 Print_message( 'Calling Build_FI_Dtl_Req');
1329
1330 Build_FI_Dtl_Req(p_AsgnDtlRec, TmpDBFIDtlTab,
1331 TmpFIDayTab, TmpFIDtlInsTab,
1332 TmpFIDtlUpdTab,
1333 lv_return_status,
1334 x_msg_count, x_msg_data);
1335 END IF;
1336
1337 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1338
1339 IF NVL(TmpFIHdrInsTab.COUNT,0) > 0 THEN
1340
1341 Print_message( 'Calling PA_FORECAST_HDR_PKG.Insert_Rows');
1342
1343 PA_FORECAST_HDR_PKG.Insert_Rows(
1344 TmpFIHdrInsTab,
1345 lv_return_status,
1346 x_msg_count,
1347 x_msg_data);
1348 END IF;
1349
1350 END IF;
1351
1352 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1353
1354 IF NVL(TmpFIHdrUpdTab.COUNT,0) > 0 THEN
1355
1356 Print_message( 'Calling PA_FORECAST_HDR_PKG.Update_Rows');
1357
1358 PA_FORECAST_HDR_PKG.Update_Rows(TmpFIHdrUpdTab,
1359 lv_return_status,
1360 x_msg_count,
1361 x_msg_data);
1362
1363 END IF;
1364
1365 END IF;
1366
1367 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1368
1369 IF NVL(TmpFIDtlInsTab.COUNT,0) > 0 THEN
1370
1371 Print_message( 'Calling PA_FORECAST_DTLS_PKG.Insert_Rows');
1372
1373 PA_FORECAST_DTLS_PKG.Insert_Rows(TmpFIDtlInsTab,
1374 lv_return_status,
1375 x_msg_count,
1376 x_msg_data);
1377
1378 END IF;
1379
1380 END IF;
1381
1382 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1383
1384 IF NVL(TmpFIDtlUpdTab.COUNT,0) > 0 THEN
1385
1386 Print_message( 'Calling PA_FORECAST_DTLS_PKG.Update_Rows');
1387
1388 PA_FORECAST_DTLS_PKG.Update_Rows(TmpFIDtlUpdTab,
1389 lv_return_status, x_msg_count, x_msg_data);
1390
1391 END IF;
1392
1393 END IF;
1394
1395 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
1396
1397 IF (p_process_mode = 'GENERATE') THEN
1398
1399 Print_message(
1400 'Calling PA_FORECAST_HDR_PKG.Update_Schedule_Rows');
1401
1402 PA_FORECAST_HDR_PKG.Update_Schedule_Rows( TmpScheduleTab,
1403 lv_return_status,
1404 x_msg_count,
1405 x_msg_data);
1406
1407 END IF;
1408
1409 END IF;
1410
1411 Print_message(
1412 'Leaving Generate_Requirement_FI');
1413
1414 x_return_status := lv_return_status;
1415
1416 PA_DEBUG.Reset_Err_Stack;
1417
1418 EXCEPTION
1419
1420 WHEN NO_DATA_FOUND THEN
1421 print_message('Failed in Generate_requirement_FI api');
1422 print_message('SQLCODE'||sqlcode||sqlerrm);
1423
1424 IF lv_err_msg = 'No_Schedule_Records - Req' THEN
1425
1426 x_msg_count := 1;
1427 x_msg_data := 'No Schedule Records for Req ';
1428 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1429 FND_MSG_PUB.add_exc_msg
1430 (p_pkg_name =>
1431 'PA_FORECASTITEM_PVT.Generate_Requirement_FI',
1432 p_procedure_name => PA_DEBUG.G_Err_Stack);
1433
1434 If x_msg_count = 1 THEN
1435 pa_interface_utils_pub.get_messages
1436 (p_encoded => FND_API.G_TRUE,
1437 p_msg_index => 1,
1438 p_msg_count => x_msg_count,
1439 p_msg_data => x_msg_data,
1440 p_data => l_data,
1441 p_msg_index_out => l_msg_index_out );
1442 x_msg_data := l_data ; -- 4537865
1443 End If;
1444
1445 Print_message(x_msg_data);
1446
1447 RAISE;
1448
1449 ELSE
1450
1451 x_msg_count := 1;
1452 x_msg_data := sqlerrm;
1453 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1454
1455 FND_MSG_PUB.add_exc_msg
1456 (p_pkg_name =>
1457 'PA_FORECASTITEM_PVT.Generate_Requirement_FI',
1458 p_procedure_name => PA_DEBUG.G_Err_Stack);
1459
1460 If x_msg_count = 1 THEN
1461 pa_interface_utils_pub.get_messages
1462 (p_encoded => FND_API.G_TRUE,
1463 p_msg_index => 1,
1464 p_msg_count => x_msg_count,
1465 p_msg_data => x_msg_data,
1466 p_data => l_data, -- 4537865
1467 p_msg_index_out => l_msg_index_out );
1468 x_msg_data := l_data ; -- 4537865
1469 End If;
1470 Print_message(x_msg_data);
1471
1472 RAISE;
1473
1474
1475 END IF;
1476
1477
1478
1479 WHEN OTHERS THEN
1480
1481 x_msg_count := 1;
1482 x_msg_data := sqlerrm;
1483 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1484
1485 FND_MSG_PUB.add_exc_msg
1486 (p_pkg_name =>
1487 'PA_FORECASTITEM_PVT.Generate_Requirement_FI',
1488 p_procedure_name => PA_DEBUG.G_Err_Stack);
1489
1490 If x_msg_count = 1 THEN
1491 pa_interface_utils_pub.get_messages
1492 (p_encoded => FND_API.G_TRUE,
1493 p_msg_index => 1,
1494 p_msg_count => x_msg_count,
1495 p_msg_data => x_msg_data,
1496 p_data => l_data , -- 4537865
1497 p_msg_index_out => l_msg_index_out );
1498 x_msg_data := l_data ; -- 4537865
1499 End If;
1500 Print_message(x_msg_data);
1501
1502 RAISE;
1503
1504
1505 END Generate_Requirement_FI;
1506 /* ---------------------------------------------------------------------
1507 | Function : Chk_Requirement_FI_Exist
1508 | Purpose : To check IF forecast item FOR requirement record exists
1509 | Parameters : p_assignment_id - Input Assignment ID
1510 | p_FI_Type - Forecast Item Type
1511 | 'R' - Requirement
1512 | 'A' - Assignment
1513 +----------------------------------------------------------------------*/
1514
1515 FUNCTION Chk_Requirement_FI_Exist(
1516 p_assignment_id IN NUMBER)
1517
1518 RETURN VARCHAR2 IS
1519
1520 lv_exist_flag VARCHAR2(1) := 'N';
1521 l_msg_index_out NUMBER;
1522
1523 BEGIN
1524
1525 Print_message(
1526 'Entering Chk_Requirement_FI_Exist');
1527
1528 BEGIN
1529 SELECT 'Y'
1530 INTO lv_exist_flag
1531 FROM DUAL
1532 WHERE EXISTS (SELECT NULL
1533 FROM pa_forecast_items
1534 WHERE assignment_id = p_assignment_id
1535 AND delete_flag = 'N');
1536
1537 EXCEPTION
1538
1539 WHEN NO_DATA_FOUND THEN
1540 lv_exist_flag := 'N';
1541
1542 END;
1543
1544 Print_message(
1545 'Leaving Chk_Requirement_FI_Exist');
1546
1547 RETURN(lv_exist_flag);
1548
1549
1550 END Chk_Requirement_FI_Exist;
1551
1552 /* ---------------------------------------------------------------------
1553 | Procedure : Initialize_Day_FI
1554 | Purpose : To initialize forecast item DATEs that are to be built
1555 | based on the schedule(requirement/assignment/resource) tab
1556 | Parameters : p_ScheduleTab - Schedule Record Table FOR
1557 | (requirement/assignment/resource)
1558 | This tab will have
1559 | i) GENERATE mode : New/only those which have been modified
1560 | ii) RECALCULATE mode : Those records which fall under the
1561 | given period
1562 | iii) ERROR mode : Those records FOR which Forecast items
1563 | have errored out
1564 | x_FIDayTab - Initialzied item DATEs FOR which
1565 | forecast item is to be generated
1566 | x_return_status -
1567 | x_msg_count -
1568 | x_msg_data -
1569 +----------------------------------------------------------------------*/
1570
1571 PROCEDURE Initialize_Day_FI(
1572 p_ScheduleTab IN PA_FORECAST_GLOB.SCHEDULETABTYP,
1573 p_Process_Mode IN VARCHAR2,
1574 p_Start_Date IN DATE,
1575 p_End_Date IN DATE,
1576 x_FIDayTab OUT NOCOPY PA_FORECAST_GLOB.FIDaytabtyp, /* 2674619 - Nocopy change */
1577 x_return_status OUT NOCOPY VARCHAR2, -- 4537865 Added nocopy
1578 x_msg_count OUT NOCOPY NUMBER, -- 4537865 Added nocopy
1579 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865 Added nocopy
1580
1581
1582 l_msg_index_out NUMBER;
1583 l_data VARCHAR2(2000); -- 4537865
1584 li_no_of_days NUMBER;
1585 ld_temp_DATE DATE;
1586 ld_act_start_date DATE;
1587 ld_act_end_date DATE;
1588 TmpFIDayTab PA_FORECAST_GLOB.FIDayTabTyp;
1589 lv_index NUMBER;
1590 lv_return_status VARCHAR2(30);
1591 lv_proc_flag VARCHAR2(1);
1592
1593 BEGIN
1594
1595 lv_return_status := FND_API.G_RET_STS_SUCCESS;
1596
1597 PA_DEBUG.Init_err_stack(
1598 'PA_FORECASTITEM_PVT.Initialize_Day_FI');
1599 TmpFIDayTab.Delete;
1600
1601 Print_message('Entering Initialize_Day_FI');
1602
1603 TmpFIDayTab.Delete;
1604
1605
1606 IF (p_process_mode IN ('ERROR', 'RECALCULATE')) THEN
1607
1608
1609 li_no_of_days := trunc(p_end_date) - trunc(p_start_date) + 1;
1610 ld_temp_DATE := p_start_date;
1611
1612
1613 FOR i IN 1 .. li_no_of_days LOOP
1614 TmpFIDayTab(i).forecast_item_id := NULL;
1615 TmpFIDayTab(i).item_date := ld_temp_DATE;
1616 TmpFIDayTab(i).item_quantity := 0;
1617 TmpFIDayTab(i).status_code := NULL;
1618 TmpFIDayTab(i).project_org_id := NULL;
1619 TmpFIDayTab(i).expenditure_org_id := NULL;
1620 TmpFIDayTab(i).project_id := NULL;
1621 TmpFIDayTab(i).resource_id := NULL;
1622 TmpFIDayTab(i).expenditure_organization_id := NULL;
1623 TmpFIDayTab(i).work_type_id := NULL;
1624 TmpFIDayTab(i).person_billable_flag := 'N';
1625 TmpFIDayTab(i).tp_amount_type := NULL;
1626 TmpFIDayTab(i).provisional_flag := NULL;
1627 TmpFIDayTab(i).include_in_forecast := NULL;
1628 TmpFIDayTab(i).action_flag := 'N';
1629 TmpFIDayTab(i).JOB_ID := NULL;
1630 TmpFIDayTab(i).TP_AMOUNT_TYPE := NULL;
1631 TmpFIDayTab(i).OVERPROVISIONAL_QTY := NULL;
1632 TmpFIDayTab(i).OVER_PROV_CONF_QTY := NULL;
1633 TmpFIDayTab(i).CONFIRMED_QTY := NULL;
1634 TmpFIDayTab(i).PROVISIONAL_QTY := NULL;
1635 TmpFIDayTab(i).asgmt_sys_status_code := NULL;
1636 TmpFIDayTab(i).asgmt_confirmed_quantity := NULL;
1637 TmpFIDayTab(i).asgmt_provisional_quantity := NULL;
1638 TmpFIDayTab(i).capacity_quantity := NULL;
1639 TmpFIDayTab(i).overcommitment_quantity := NULL;
1640 TmpFIDayTab(i).availability_quantity := NULL;
1641 TmpFIDayTab(i).overcommitment_flag := NULL;
1642 TmpFIDayTab(i).availability_flag := NULL;
1643 ld_temp_DATE := ld_temp_DATE + 1;
1644 END LOOP;
1645
1646 ELSE
1647
1648
1649 lv_index := 1;
1650
1651 ld_temp_date := p_ScheduleTab(p_ScheduleTab.FIRST).start_date;
1652
1653 If (nvl(p_scheduletab.count,0) > 0) then
1654 FOR i IN p_ScheduleTab.FIRST..p_ScheduleTab.LAST LOOP
1655
1656 IF p_ScheduleTab.EXISTS(i) then
1657 IF p_ScheduleTab(i).end_date < ld_temp_date THEN
1658
1659 lv_proc_flag := 'T';
1660
1661 ELSIF (p_ScheduleTab(i).start_date <= ld_temp_date)
1662 AND (p_ScheduleTab(i).end_date >= ld_temp_date) THEN
1663
1664 ld_act_start_date := ld_temp_date;
1665 ld_act_end_date := p_ScheduleTab(i).end_date;
1666 lv_proc_flag := 'F';
1667
1668 ELSE
1669
1670 ld_act_start_date := p_ScheduleTab(i).start_date;
1671 ld_act_end_date := p_ScheduleTab(i).end_date;
1672 lv_proc_flag := 'F';
1673
1674 END IF;
1675
1676 IF lv_proc_flag = 'F' THEN
1677
1678 li_no_of_days := trunc(ld_act_end_date) -
1679 trunc(ld_act_start_date) + 1;
1680 li_no_of_days := trunc(li_no_of_days);
1681 ld_temp_DATE := ld_act_start_date;
1682
1683 FOR j IN 1..li_no_of_days LOOP
1684
1685 TmpFIDayTab(lv_index).forecast_item_id := NULL;
1686 TmpFIDayTab(lv_index).item_date := ld_temp_DATE;
1687 TmpFIDayTab(lv_index).item_quantity := 0;
1688 TmpFIDayTab(lv_index).status_code := NULL;
1689 TmpFIDayTab(lv_index).project_org_id := NULL;
1690 TmpFIDayTab(lv_index).project_id := NULL;
1691 TmpFIDayTab(lv_index).expenditure_org_id := NULL;
1692 TmpFIDayTab(lv_index).resource_id := NULL;
1693 TmpFIDayTab(lv_index).expenditure_organization_id := NULL;
1694 TmpFIDayTab(lv_index).work_type_id := NULL;
1695 TmpFIDayTab(lv_index).person_billable_flag := 'N';
1696 TmpFIDayTab(lv_index).tp_amount_type := NULL;
1697 TmpFIDayTab(lv_index).provisional_flag := NULL;
1698 TmpFIDayTab(lv_index).action_flag := 'N';
1699 TmpFIDayTab(lv_index).JOB_ID := NULL;
1700 TmpFIDayTab(lv_index).OVERPROVISIONAL_QTY := NULL;
1701 TmpFIDayTab(lv_index).OVER_PROV_CONF_QTY := NULL;
1702 TmpFIDayTab(lv_index).CONFIRMED_QTY := NULL;
1703 TmpFIDayTab(lv_index).PROVISIONAL_QTY := NULL;
1704 TmpFIDayTab(lv_index).asgmt_sys_status_code := NULL;
1705 TmpFIDayTab(lv_index).asgmt_confirmed_quantity := NULL;
1706 TmpFIDayTab(lv_index).asgmt_provisional_quantity := NULL;
1707 TmpFIDayTab(lv_index).capacity_quantity := NULL;
1708 TmpFIDayTab(lv_index).overcommitment_quantity := NULL;
1709 TmpFIDayTab(lv_index).availability_quantity := NULL;
1710 TmpFIDayTab(lv_index).overcommitment_flag := NULL;
1711 TmpFIDayTab(lv_index).availability_flag := NULL;
1712 ld_temp_DATE := ld_temp_DATE + 1;
1713 lv_index := lv_index + 1;
1714
1715 END LOOP;
1716
1717 END IF;
1718 END IF;
1719 END LOOP;
1720 end if;
1721 END IF;
1722
1723 x_FIDayTab:= TmpFIDayTab;
1724
1725
1726 x_return_status := lv_return_status;
1727
1728 PA_DEBUG.Reset_Err_Stack;
1729
1730 Print_message('Leaving Initialize_Day_FI');
1731
1732 EXCEPTION
1733
1734 WHEN OTHERS THEN
1735 print_message('Failed in Intialize_day_FI api');
1736 print_message('SQLCODE'||sqlcode||sqlerrm);
1737
1738 x_msg_count := 1;
1739 x_msg_data := sqlerrm;
1740 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1741
1742 If x_msg_count = 1 THEN
1743 pa_interface_utils_pub.get_messages
1744 (p_encoded => FND_API.G_TRUE,
1745 p_msg_index => 1,
1746 p_msg_count => x_msg_count,
1747 p_msg_data => x_msg_data,
1748 p_data => l_data , -- 4537865
1749 p_msg_index_out => l_msg_index_out );
1750 x_msg_data := l_data ; -- 4537865
1751 End If;
1752
1753 FND_MSG_PUB.add_exc_msg
1754 (p_pkg_name =>
1755 'PA_FORECASTITEM_PVT.Initialize_Day_FI',
1756 p_procedure_name => PA_DEBUG.G_Err_Stack);
1757
1758 Print_message(x_msg_data);
1759
1760 RAISE;
1761
1762
1763 END Initialize_Day_FI;
1764
1765 /* ---------------------------------------------------------------------
1766 | Procedure : Build_Day_FI
1767 | Purpose : To populate quantity, status_code onto forecast item DATEs
1768 | FROM schedule tab
1769 | Parameters : p_ScheduleTab - Schedule Record Table for
1770 | (requirement/assignment/resource)
1771 | This tab will have
1772 | i) GENERATE mode : New/only those which have been modified
1773 | ii) RECALCULATE mode : Those records which fall under the
1774 | given period
1775 | iii) ERROR mode : Those records FOR which Forecast items
1776 | have errored out
1777 | p_start_date - Start DATE FOR Forecast Item Generation
1778 | p_end_date - END DATE FOR Forecast Item Generation
1779 | p_FIDayTab - This tab will contain only those
1780 | item_dates FOR which forecasting is to
1781 | be done.
1782 | Item_quantity, Requirement/Assignment
1783 | status _code are populated FROM
1784 | Schedule Tab
1785 | x_return_status -
1786 | x_msg_count -
1787 | x_msg_data -
1788 +----------------------------------------------------------------------*/
1789
1790 PROCEDURE Build_Day_FI(
1791 p_ScheduleTab IN PA_FORECAST_GLOB.SCHEDULETABTYP,
1792 p_start_date IN DATE,
1793 p_end_date IN DATE,
1794 p_FIDayTab IN OUT NOCOPY PA_FORECAST_GLOB.FIDaytabtyp, /* 2674619 - Nocopy change */
1795 p_AsgType IN VARCHAR2,
1796 x_return_status OUT NOCOPY VARCHAR2, -- 4537865 Added nocopy
1797 x_msg_count OUT NOCOPY NUMBER, -- 4537865 Added nocopy
1798 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865 Added nocopy
1799
1800 l_msg_index_out NUMBER;
1801 l_data VARCHAR2(2000); -- 4537865
1802 li_no_of_days NUMBER := 0;
1803 li_status VARCHAR2(5):= Null;
1804 ld_temp_DATE DATE;
1805 li_current_pos NUMBER;
1806 li_last_pos NUMBER;
1807 lb_found BOOLEAN := FALSE;
1808 lv_cancel_flag VARCHAR2(3);
1809 lv_prov_flag VARCHAR2(3);
1810 TmpFIDayTab PA_FORECAST_GLOB.FIDaytabtyp;
1811 lv_return_status VARCHAR2(30);
1812 li_cur_item_quantity NUMBER;
1813 BEGIN
1814
1815
1816 lv_return_status := FND_API.G_RET_STS_SUCCESS;
1817 Print_message('Entering Build_Day_FI');
1818
1819 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Build_Day_FI');
1820
1821 TmpFIDayTab.Delete;
1822 TmpFIDayTab := p_FIDayTab;
1823
1824
1825 li_no_of_days := trunc(p_end_date) - trunc(p_start_date) + 1;
1826 ld_temp_DATE := p_start_date;
1827
1828 FOR i IN 1 .. li_no_of_days LOOP
1829 TmpFIDayTab(i).item_date := ld_temp_DATE;
1830 TmpFIDayTab(i).item_quantity := 0;
1831 TmpFIDayTab(i).action_flag := 'N';
1832 TmpFIDayTab(i).expenditure_org_id := NULL;
1833 TmpFIDayTab(i).project_id := NULL;
1834 TmpFIDayTab(i).resource_id := NULL;
1835 TmpFIDayTab(i).expenditure_organization_id := NULL;
1836 TmpFIDayTab(i).project_org_id := NULL;
1837 TmpFIDayTab(i).JOB_ID := NULL;
1838 TmpFIDayTab(i).TP_AMOUNT_TYPE := NULL;
1839 TmpFIDayTab(i).OVERPROVISIONAL_QTY := NULL;
1840 TmpFIDayTab(i).OVER_PROV_CONF_QTY := NULL;
1841 TmpFIDayTab(i).CONFIRMED_QTY := NULL;
1842 TmpFIDayTab(i).PROVISIONAL_QTY := NULL;
1843 TmpFIDayTab(i).asgmt_sys_status_code := NULL;
1844 TmpFIDayTab(i).asgmt_confirmed_quantity := NULL;
1845 TmpFIDayTab(i).asgmt_provisional_quantity := NULL;
1846 TmpFIDayTab(i).capacity_quantity := NULL;
1847 TmpFIDayTab(i).overcommitment_quantity := NULL;
1848 TmpFIDayTab(i).availability_quantity := NULL;
1849 TmpFIDayTab(i).overcommitment_flag := NULL;
1850 TmpFIDayTab(i).availability_flag := NULL;
1851 ld_temp_DATE := ld_temp_DATE + 1;
1852 END LOOP;
1853
1854 li_current_pos := p_scheduletab.FIRST;
1855 li_last_pos := p_scheduletab.FIRST;
1856
1857 Print_message('AsgType :'|| p_AsgType);
1858
1859 Print_message('StatusCode :'||
1860 p_scheduletab(li_current_pos).status_code);
1861 Print_message('After StatusCode');
1862
1863 IF (p_AsgType = 'OPEN_ASGMT') THEN
1864
1865 lv_cancel_flag := PA_ASSIGNMENT_UTILS.Is_Open_Asgmt_Cancelled (
1866 p_scheduletab(li_current_pos).status_code,
1867 p_AsgType);
1868
1869 Print_message('CancelFlag:'||
1870 lv_cancel_flag);
1871
1872 ELSIF (p_AsgType = 'STAFFED_ASGMT') THEN
1873
1874 lv_cancel_flag := PA_ASSIGNMENT_UTILS.Is_Staffed_Asgmt_Cancelled (
1875 p_scheduletab(li_current_pos).status_code,
1876 p_AsgType);
1877
1878 Print_message('CancelFlag:'||
1879 lv_cancel_flag);
1880 END IF;
1881
1882 IF p_AsgType in ('OPEN_ASGMT', 'STAFFED_ASGMT')
1883 AND P_DEBUG_MODE = 'Y' THEN -- Bug 4355576
1884
1885 lv_prov_flag := PA_ASSIGNMENT_UTILS.Is_Provisional_Status(
1886 p_scheduletab(li_current_pos).status_code,
1887 p_Asgtype);
1888
1889 Print_message('ProvFlag:'|| lv_prov_flag);
1890
1891 END IF;
1892
1893 IF TmpFIDayTab.count <> 0 then
1894
1895 FOR j IN TmpFIDayTab.FIRST..TmpFIDayTab.LAST LOOP
1896
1897 IF TmpFIDayTab.EXISTS(j) then
1898 IF NVL(p_scheduletab.COUNT,0) <> 0 Then
1899
1900 lb_found := FALSE;
1901
1902 --print_message('Before p_scheduletab(li_last_pos).');
1903 IF (trunc(TmpFIDayTab(j).item_date) NOT BETWEEN
1904 trunc(p_scheduletab(li_last_pos).start_date) AND
1905 trunc(p_scheduletab(li_last_pos).end_date)) THEN
1906
1907 --1993136 li_last_pos := li_current_pos;
1908 li_last_pos := p_scheduletab.first;
1909
1910 IF (p_AsgType = 'OPEN_ASGMT') THEN
1911
1912 lv_cancel_flag := PA_ASSIGNMENT_UTILS.Is_Open_Asgmt_Cancelled (
1913 p_scheduletab(li_last_pos).status_code,
1914 p_AsgType);
1915
1916 Print_message('CancelFlag:'||
1917 lv_cancel_flag);
1918
1919 ELSIF (p_AsgType = 'STAFFED_ASGMT') THEN
1920
1921 lv_cancel_flag := PA_ASSIGNMENT_UTILS.Is_Staffed_Asgmt_Cancelled (
1922 p_scheduletab(li_last_pos).status_code,
1923 p_AsgType);
1924
1925 Print_message('CancelFlag:'||
1926 lv_cancel_flag);
1927
1928 END IF;
1929
1930 IF p_AsgType in ('OPEN_ASGMT', 'STAFFED_ASGMT')
1931 AND P_DEBUG_MODE = 'Y' THEN -- Bug 4355576
1932
1933 lv_prov_flag := PA_ASSIGNMENT_UTILS.Is_Provisional_Status(
1934 p_scheduletab(li_last_pos).status_code,
1935 p_Asgtype);
1936
1937 Print_message('ProvFlag:'||
1938 lv_prov_flag);
1939
1940 END IF;
1941
1942 END IF;
1943
1944 IF (lv_cancel_flag = 'Y') THEN
1945
1946 TmpFIDayTab(j).action_flag := 'D';
1947
1948 END IF;
1949
1950
1951 FOR i IN li_last_pos..p_scheduletab.LAST LOOP
1952 IF p_scheduletab.exists(i) then
1953 IF (trunc(TmpFIDayTab(j).item_date) BETWEEN
1954 trunc(p_scheduletab(i).start_date) AND
1955 trunc(p_scheduletab(i).end_date)) THEN
1956
1957 ld_temp_DATE := TmpFIDayTab(j).item_date;
1958
1959
1960 IF TO_CHAR(ld_temp_DATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') = 'MON' THEN
1961
1962 li_cur_item_quantity := p_scheduletab(i).monday_hours;
1963
1964 ELSIF TO_CHAR(ld_temp_DATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') = 'TUE' THEN
1965
1966 li_cur_item_quantity := p_scheduletab(i).tuesday_hours;
1967
1968 ELSIF TO_CHAR(ld_temp_DATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') = 'WED' THEN
1969
1970 li_cur_item_quantity := p_scheduletab(i).wednesday_hours;
1971
1972 ELSIF TO_CHAR(ld_temp_DATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') = 'THU' THEN
1973
1974 li_cur_item_quantity := p_scheduletab(i).thursday_hours;
1975
1976 ELSIF TO_CHAR(ld_temp_DATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') = 'FRI' THEN
1977
1978 li_cur_item_quantity := p_scheduletab(i).friday_hours;
1979
1980 ELSIF TO_CHAR(ld_temp_DATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') = 'SAT' THEN
1981
1982 li_cur_item_quantity := p_scheduletab(i).saturday_hours;
1983
1984 ELSIF TO_CHAR(ld_temp_DATE, 'DY','NLS_DATE_LANGUAGE=AMERICAN') = 'SUN' THEN
1985
1986 li_cur_item_quantity := p_scheduletab(i).sunday_hours;
1987
1988 END IF;
1989
1990 TmpFIDayTab(j).item_quantity := TmpFIDayTab(j).item_quantity + li_cur_item_quantity;
1991 TmpFIDayTab(j).asgmt_sys_status_code := p_scheduletab(i).system_status_code;
1992 TmpFIDayTab(j).status_code := p_scheduletab(i).status_code;
1993
1994 --print_message('TmpFIDayTab(j).asgmt_sys_status_code: ' || TmpFIDayTab(j).asgmt_sys_status_code);
1995
1996 if (TmpFIDayTab(j).asgmt_sys_status_code = 'STAFFED_ASGMT_PROV') then
1997 TmpFIDayTab(j).provisional_flag := 'Y';
1998 TmpFIDayTab(j).asgmt_provisional_quantity :=
1999 NVL(TmpFIDayTab(j).asgmt_provisional_quantity,0) + li_cur_item_quantity;
2000 elsif (TmpFIDayTab(j).asgmt_sys_status_code = 'STAFFED_ASGMT_CONF') then
2001 TmpFIDayTab(j).provisional_flag := 'N';
2002 TmpFIDayTab(j).asgmt_confirmed_quantity :=
2003 NVL(TmpFIDayTab(j).asgmt_confirmed_quantity,0) + li_cur_item_quantity;
2004 else
2005 TmpFIDayTab(j).provisional_flag := 'N';
2006 end if;
2007 /*
2008 print_message('-------------------------------');
2009 print_message('TmpFIDayTab(j).item_date: ' || TmpFIDayTab(j).item_date);
2010 Print_Message('TmpFIDayTab(j).asgmt_confirmed_quantity: ' || TmpFIDayTab(j).asgmt_confirmed_quantity);
2011 Print_Message('TmpFIDayTab(j).asgmt_provisional_quantity: ' || TmpFIDayTab(j).asgmt_provisional_quantity);
2012 Print_Message('TmpFIDayTab(j).provisional_flag: ' || TmpFIDayTab(j).provisional_flag);
2013 Print_Message('li_cur_item_quantity: ' || li_cur_item_quantity);
2014 Print_message('StatusCode :'|| p_scheduletab(i).status_code);
2015 Print_message('SystemStatusCode :'|| p_scheduletab(i).system_status_code);
2016 Print_message('Schedule ID: ' || p_scheduletab(i).schedule_id);
2017 Print_message('Start Date :'|| p_scheduletab(i).start_date);
2018 Print_message('End Date :'|| p_scheduletab(i).end_date);
2019 */
2020 END IF;
2021
2022 IF trunc(TmpFIDayTab(j).item_date) <
2023 trunc(p_scheduletab(i).start_date) THEN
2024
2025 lb_found := TRUE;
2026 li_current_pos := i;
2027
2028 END IF;
2029
2030 EXIT WHEN lb_found;
2031
2032 END IF;
2033 END LOOP;
2034
2035 END IF;
2036 END IF;
2037 END LOOP;
2038 END IF;
2039
2040 p_FIDayTab := TmpFIDayTab;
2041
2042 Print_message('Leaving Build_Day_FI');
2043
2044 PA_DEBUG.Reset_Err_Stack;
2045
2046 x_return_status := lv_return_status;
2047
2048 EXCEPTION
2049
2050 WHEN OTHERS THEN
2051 print_message('Failed in Build_Day_FI api');
2052 print_message('SQLCODE'||sqlcode||sqlerrm);
2053 x_msg_count := 1;
2054 x_msg_data := sqlerrm;
2055 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2056
2057 FND_MSG_PUB.add_exc_msg
2058 (p_pkg_name =>
2059 'PA_FORECASTITEM_PVT.Build_Day_FI',
2060 p_procedure_name => PA_DEBUG.G_Err_Stack);
2061
2062 If x_msg_count = 1 THEN
2063 pa_interface_utils_pub.get_messages
2064 (p_encoded => FND_API.G_TRUE,
2065 p_msg_index => 1,
2066 p_msg_count => x_msg_count,
2067 p_msg_data => x_msg_data,
2068 p_data => l_data , -- 4537865
2069 p_msg_index_out => l_msg_index_out );
2070 x_msg_data := l_data ; -- 4537865
2071 End If;
2072 Print_message(x_msg_data);
2073
2074 RAISE;
2075
2076 END Build_Day_FI;
2077
2078 /* ---------------------------------------------------------------------
2079 | Procedure : Reverse_FI_Hdr
2080 | Purpose : To reverse the existing forecast items (Requirement ,
2081 | Assignment ) which do not fall IN the given DATE range.
2082 | Also it will RETURN the start_date AND end_date of the
2083 | previous run (existing IN the database)
2084 | This is required FOR regenerating resource
2085 | unassigned time
2086 | Parameters : p_assignment_id - Input Assignment ID
2087 | p_start_date - Current Start DATE FOR forecast item
2088 | p_end_date - Current END DATE FOR forecast item
2089 | x_old_start_date - Previous Start DATE FOR forecast item
2090 | x_old_end_date - Previous END DATE FOR forecast item
2091 | x_return_status -
2092 | x_msg_count -
2093 | x_msg_data -
2094 +----------------------------------------------------------------------*/
2095 PROCEDURE Reverse_FI_Hdr(
2096 p_assignment_id IN NUMBER,
2097 p_start_date IN DATE,
2098 p_end_date IN DATE,
2099 x_old_start_date IN OUT NOCOPY DATE, -- 4537865
2100 x_old_end_date IN OUT NOCOPY DATE, -- 4537865
2101 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
2102 x_msg_count OUT NOCOPY NUMBER, -- 4537865
2103 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
2104
2105 l_msg_index_out NUMBER;
2106 l_data VARCHAR2(2000) ; -- 4537865
2107 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2108 forecast_item_type_tab PA_FORECAST_GLOB.VCTabTyp;
2109 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2110 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2111 expenditure_orgn_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2112 project_organization_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2113 project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2114 project_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
2115 person_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2116 resource_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2117 borrowed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2118 assignment_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2119 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
2120 item_uom_tab PA_FORECAST_GLOB.VCTabTyp;
2121 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
2122 pvdr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
2123 pvdr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
2124 pvdr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
2125 rcvr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
2126 rcvr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
2127 rcvr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
2128 global_exp_period_end_date_tab PA_FORECAST_GLOB.DateTabTyp;
2129 expenditure_type_tab PA_FORECAST_GLOB.VCTabTyp;
2130 expenditure_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
2131 cost_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2132 rev_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2133 tp_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2134 burden_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2135 other_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2136 delete_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2137 error_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2138 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2139 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
2140 TP_AMOUNT_TYPE_tab PA_FORECAST_GLOB.VCTabTyp;
2141 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2142 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2143 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2144 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2145 asgmt_sys_status_code_tab PA_FORECAST_GLOB.VCTabTyp;
2146 capacity_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
2147 overcommitment_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
2148 availability_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
2149 overcommitment_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2150 availability_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2151
2152 TmpUpdTab PA_FORECAST_GLOB.FIHdrTabTyp;
2153 lv_return_status VARCHAR2(30);
2154
2155 BEGIN
2156
2157 lv_return_status := FND_API.G_RET_STS_SUCCESS;
2158
2159 Print_message('Entering Reverse_FI_Hdr');
2160
2161 PA_DEBUG.Init_err_stack(
2162 'PA_FORECASTITEM_PVT.Reverse_FI_Hdr');
2163
2164 forecast_item_id_tab.delete;
2165 forecast_item_type_tab.delete;
2166 project_org_id_tab.delete;
2167 expenditure_org_id_tab.delete;
2168 expenditure_orgn_id_tab.delete;
2169 project_organization_id_tab.delete;
2170 project_id_tab.delete;
2171 project_type_class_tab.delete;
2172 person_id_tab.delete;
2173 resource_id_tab.delete;
2174 borrowed_flag_tab.delete;
2175 assignment_id_tab.delete;
2176 item_date_tab.delete;
2177 item_uom_tab.delete;
2178 item_quantity_tab.delete;
2179 pvdr_period_set_name_tab.delete;
2180 pvdr_pa_period_name_tab.delete;
2181 pvdr_gl_period_name_tab.delete;
2182 rcvr_period_set_name_tab.delete;
2183 rcvr_pa_period_name_tab.delete;
2184 rcvr_gl_period_name_tab.delete;
2185 global_exp_period_end_date_tab.delete;
2186 expenditure_type_tab.delete;
2187 expenditure_type_class_tab.delete;
2188 cost_rejection_code_tab.delete;
2189 rev_rejection_code_tab.delete;
2190 tp_rejection_code_tab.delete;
2191 burden_rejection_code_tab.delete;
2192 other_rejection_code_tab.delete;
2193 delete_flag_tab.delete;
2194 error_flag_tab.delete;
2195 provisional_flag_tab.delete;
2196 JOB_ID_tab.delete;
2197 TP_AMOUNT_TYPE_tab.delete;
2198 OVERPROVISIONAL_QTY_tab.delete;
2199 OVER_PROV_CONF_QTY_tab.delete;
2200 CONFIRMED_QTY_tab.delete;
2201 PROVISIONAL_QTY_tab.delete;
2202 asgmt_sys_status_code_tab.delete;
2203 capacity_quantity_tab.delete;
2204 overcommitment_quantity_tab.delete;
2205 availability_quantity_tab.delete;
2206 overcommitment_flag_tab.delete;
2207 availability_flag_tab.delete;
2208
2209 TmpUpdtab.delete;
2210
2211 SELECT forecast_item_id, forecast_item_type,
2212 project_org_id , expenditure_org_id,
2213 project_organization_id, expenditure_organization_id ,
2214 project_id, project_type_class, person_id ,
2215 resource_id, borrowed_flag, assignment_id,
2216 item_date, item_uom, item_quantity,
2217 pvdr_period_set_name, pvdr_pa_period_name,
2218 pvdr_gl_period_name, rcvr_period_set_name,
2219 rcvr_pa_period_name, rcvr_gl_period_name,
2220 global_exp_period_end_date, expenditure_type,
2221 expenditure_type_class, cost_rejection_code,
2222 rev_rejection_code, tp_rejection_code,
2223 burden_rejection_code, other_rejection_code,
2224 delete_flag, error_flag, provisional_flag,
2225 JOB_ID,
2226 TP_AMOUNT_TYPE,
2227 OVERPROVISIONAL_QTY,
2228 OVER_PROV_CONF_QTY,
2229 CONFIRMED_QTY,
2230 PROVISIONAL_QTY,
2231 asgmt_sys_status_code, capacity_quantity,
2232 overcommitment_quantity, availability_quantity,
2233 overcommitment_flag, availability_flag
2234 BULK COLLECT INTO forecast_item_id_tab, forecast_item_type_tab,
2235 project_org_id_tab, expenditure_org_id_tab,
2236 project_organization_id_tab, expenditure_orgn_id_tab,
2237 project_id_tab, project_type_class_tab, person_id_tab,
2238 resource_id_tab, borrowed_flag_tab, assignment_id_tab,
2239 item_date_tab, item_uom_tab, item_quantity_tab,
2240 pvdr_period_set_name_tab, pvdr_pa_period_name_tab,
2241 pvdr_gl_period_name_tab, rcvr_period_set_name_tab,
2242 rcvr_pa_period_name_tab, rcvr_gl_period_name_tab,
2243 global_exp_period_end_date_tab, expenditure_type_tab,
2244 expenditure_type_class_tab, cost_rejection_code_tab,
2245 rev_rejection_code_tab, tp_rejection_code_tab,
2246 burden_rejection_code_tab, other_rejection_code_tab,
2247 delete_flag_tab, error_flag_tab, provisional_flag_tab,
2248 JOB_ID_tab,
2249 TP_AMOUNT_TYPE_tab,
2250 OVERPROVISIONAL_QTY_tab,
2251 OVER_PROV_CONF_QTY_tab,
2252 CONFIRMED_QTY_tab,
2253 PROVISIONAL_QTY_tab,
2254 asgmt_sys_status_code_tab, capacity_quantity_tab,
2255 overcommitment_quantity_tab, availability_quantity_tab,
2256 overcommitment_flag_tab, availability_flag_tab
2257 FROM pa_forecast_items hdr
2258 WHERE assignment_id = p_assignment_id
2259 AND delete_flag = 'N'
2260 AND (trunc(hdr.item_date) < trunc(p_start_date)
2261 OR trunc(hdr.item_date) > trunc(p_end_date))
2262 order by item_date, forecast_item_id ;
2263
2264
2265 IF nvl(forecast_item_id_tab.count,0) = 0 THEN
2266
2267 x_return_status := lv_return_status;
2268
2269 Print_message('Leaving Reverse_FI_Hdr');
2270
2271 RETURN;
2272
2273 END IF;
2274 -- Move to one table FROM multiple tables
2275
2276 x_old_start_date := item_date_tab(item_date_tab.FIRST);
2277 x_old_end_date := item_date_tab(item_date_tab.LAST);
2278
2279 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
2280
2281 TmpUpdTab(j).forecast_item_id := forecast_item_id_tab(j);
2282 TmpUpdTab(j).forecast_item_type := forecast_item_type_tab(j);
2283 TmpUpdTab(j).project_org_id := project_org_id_tab(j);
2284 TmpUpdTab(j).expenditure_org_id := expenditure_org_id_tab(j);
2285 TmpUpdTab(j).project_organization_id :=
2286 project_organization_id_tab(j);
2287 TmpUpdTab(j).expenditure_organization_id :=
2288 expenditure_orgn_id_tab(j);
2289 TmpUpdTab(j).project_id := project_id_tab(j);
2290 TmpUpdTab(j).project_type_class := project_type_class_tab(j);
2291 TmpUpdTab(j).person_id := person_id_tab(j);
2292 TmpUpdTab(j).resource_id := resource_id_tab(j);
2293 TmpUpdTab(j).borrowed_flag := borrowed_flag_tab(j);
2294 TmpUpdTab(j).assignment_id := assignment_id_tab(j);
2295 TmpUpdTab(j).item_date := item_date_tab(j);
2296 TmpUpdTab(j).item_uom := item_uom_tab(j);
2297 TmpUpdTab(j).item_quantity := 0;
2298 TmpUpdTab(j).pvdr_period_set_name :=
2299 pvdr_period_set_name_tab(j);
2300 TmpUpdTab(j).pvdr_pa_period_name := pvdr_pa_period_name_tab(j);
2301 TmpUpdTab(j).pvdr_gl_period_name := pvdr_gl_period_name_tab(j);
2302 TmpUpdTab(j).rcvr_period_set_name :=
2303 rcvr_period_set_name_tab(j);
2304 TmpUpdTab(j).rcvr_pa_period_name := rcvr_pa_period_name_tab(j);
2305 TmpUpdTab(j).rcvr_gl_period_name := rcvr_gl_period_name_tab(j);
2306 TmpUpdTab(j).global_exp_period_end_date :=
2307 global_exp_period_end_date_tab(j);
2308 TmpUpdTab(j).expenditure_type := expenditure_type_tab(j);
2309 TmpUpdTab(j).expenditure_type_class :=
2310 expenditure_type_class_tab(j);
2311 TmpUpdTab(j).cost_rejection_code := cost_rejection_code_tab(j);
2312 TmpUpdTab(j).rev_rejection_code := rev_rejection_code_tab(j);
2313 TmpUpdTab(j).tp_rejection_code := tp_rejection_code_tab(j);
2314 TmpUpdTab(j).burden_rejection_code :=
2315 burden_rejection_code_tab(j);
2316 TmpUpdTab(j).other_rejection_code :=
2317 other_rejection_code_tab(j);
2318 TmpUpdTab(j).delete_flag := 'Y';
2319 TmpUpdTab(j).error_flag := error_flag_tab(j);
2320 TmpUpdTab(j).provisional_flag := provisional_flag_tab(j);
2321 TmpUpdTab(j).JOB_ID := JOB_ID_tab(j);
2322 TmpUpdTab(j).TP_AMOUNT_TYPE := TP_AMOUNT_TYPE_tab(j);
2323 TmpUpdTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
2324 TmpUpdTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
2325 TmpUpdTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
2326 TmpUpdTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
2327 TmpUpdTab(j).asgmt_sys_status_code := asgmt_sys_status_code_tab(j);
2328 TmpUpdTab(j).capacity_quantity := capacity_quantity_tab(j);
2329 TmpUpdTab(j).overcommitment_quantity := overcommitment_quantity_tab(j);
2330 TmpUpdTab(j).availability_quantity := availability_quantity_tab(j);
2331 TmpUpdTab(j).overcommitment_flag := overcommitment_flag_tab(j);
2332 TmpUpdTab(j).availability_flag := availability_flag_tab(j);
2333 END LOOP;
2334
2335 IF nvl(TmpUpdTab.COUNT,0) > 0 THEN
2336
2337 Print_message('
2338 Calling PA_FORECAST_HDR_PKG.Update_rows');
2339
2340 PA_FORECAST_HDR_PKG.Update_Rows(
2341 TmpUpdTab,
2342 lv_return_status,
2343 x_msg_count,
2344 x_msg_data);
2345
2346 END IF;
2347
2348
2349
2350 Print_message('Leaving Reverse_FI_Hdr');
2351
2352 x_return_status := lv_return_status;
2353
2354 PA_DEBUG.Reset_Err_Stack;
2355
2356 EXCEPTION
2357
2358 WHEN OTHERS THEN
2359 print_message('Failed in Reverse_FI_Hdr api');
2360 print_message('SQLCODE'||sqlcode||sqlerrm);
2361
2362 x_msg_count := 1;
2363 x_msg_data := sqlerrm;
2364 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2365
2366 -- 4537865
2367 x_old_start_date := NULL ;
2368 x_old_end_date := NULL ;
2369
2370 FND_MSG_PUB.add_exc_msg
2371 (p_pkg_name =>
2372 'PA_FORECASTITEM_PVT.Reverse_FI_Hdr',
2373 p_procedure_name => PA_DEBUG.G_Err_Stack);
2374
2375 If x_msg_count = 1 THEN
2376 pa_interface_utils_pub.get_messages
2377 (p_encoded => FND_API.G_TRUE,
2378 p_msg_index => 1,
2379 p_msg_count => x_msg_count,
2380 p_msg_data => x_msg_data,
2381 p_data => l_data, -- 4537865
2382 p_msg_index_out => l_msg_index_out );
2383 x_msg_data := l_data ; -- 4537865
2384 End If;
2385 Print_message(x_msg_data);
2386
2387 RAISE;
2388
2389 END Reverse_FI_Hdr;
2390
2391 /* ---------------------------------------------------------------------
2392 | Procedure : Reverse_FI_Dtl
2393 | Purpose : To reverse the existing forecast item details
2394 | (Requirement , Assignment )which do not fall IN the
2395 | given DATE range
2396 | Parameters : p_assignment_id - Input Assignment ID
2397 | p_start_date - Current Start DATE FOR forecast item
2398 | p_end_date - Current END DATE FOR forecast item
2399 | x_return_status -
2400 | x_msg_count -
2401 | x_msg_data -
2402 +----------------------------------------------------------------------*/
2403 PROCEDURE Reverse_FI_Dtl(
2404 p_assignment_id IN NUMBER,
2405 p_start_date IN DATE,
2406 p_end_date IN DATE,
2407 x_return_status OUT NOCOPY VARCHAR2, --4537865
2408 x_msg_count OUT NOCOPY NUMBER, -- 4537865
2409 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
2410
2411 l_msg_index_out NUMBER;
2412
2413 l_data VARCHAR2(2000); --4537865
2414 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2415 amount_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2416 line_num_tab PA_FORECAST_GLOB.NumberTabTyp;
2417 resource_type_code_tab PA_FORECAST_GLOB.VCTabTyp;
2418 person_billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2419 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
2420 item_UOM_tab PA_FORECAST_GLOB.VCTabTyp;
2421 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
2422 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2423 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2424 PJI_SUMMARIZED_FLAG_tab PA_FORECAST_GLOB.VC1TabTyp;
2425 CAPACITY_QUANTITY_tab PA_FORECAST_GLOB.NumberTabTyp;
2426 OVERCOMMITMENT_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2427 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2428 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2429 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2430 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2431 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
2432 PROJECT_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
2433 RESOURCE_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
2434 EXP_ORGANIZATION_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
2435 pvdr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
2436 pvdr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
2437 rcvr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
2438 rcvr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
2439 proj_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
2440 proj_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
2441 denom_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
2442 denom_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
2443 tp_amount_type_tab PA_FORECAST_GLOB.VCTabTyp;
2444 billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2445 forecast_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
2446 util_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
2447 work_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2448 resource_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2449 org_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2450 resource_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
2451 org_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
2452 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2453 reversed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2454 net_zero_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2455 reduce_capacity_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2456 line_num_reversed_tab PA_FORECAST_GLOB.NumberTabTyp;
2457
2458 TmpRevTab PA_FORECAST_GLOB.FIDtlTabTyp;
2459 TmpUpdTab PA_FORECAST_GLOB.FIDtlTabTyp;
2460 l_rev_index NUMBER;
2461 lv_return_status VARCHAR2(30);
2462
2463 BEGIN
2464
2465 lv_return_status := FND_API.G_RET_STS_SUCCESS;
2466
2467 Print_message('Entering Reverse_FI_Dtl');
2468
2469 PA_DEBUG.Init_err_stack(
2470 'PA_FORECASTITEM_PVT.Reverse_FI_Dtl');
2471
2472 forecast_item_id_tab.delete;
2473 amount_type_id_tab.delete;
2474 line_num_tab.delete;
2475 resource_type_code_tab.delete;
2476 person_billable_flag_tab.delete;
2477 item_date_tab.delete;
2478 item_UOM_tab.delete;
2479 item_quantity_tab.delete;
2480 expenditure_org_id_tab.delete;
2481 project_org_id_tab.delete;
2482 PJI_SUMMARIZED_FLAG_tab.delete;
2483 CAPACITY_QUANTITY_tab.delete;
2484 OVERCOMMITMENT_QTY_tab.delete;
2485 OVERPROVISIONAL_QTY_tab.delete;
2486 OVER_PROV_CONF_QTY_tab.delete;
2487 CONFIRMED_QTY_tab.delete;
2488 PROVISIONAL_QTY_tab.delete;
2489 JOB_ID_tab.delete;
2490 PROJECT_ID_tab.delete;
2491 RESOURCE_ID_tab.delete;
2492 EXP_ORGANIZATION_ID_tab.delete;
2493 pvdr_acct_curr_code_tab.delete;
2494 pvdr_acct_amount_tab.delete;
2495 rcvr_acct_curr_code_tab.delete;
2496 rcvr_acct_amount_tab.delete;
2497 proj_currency_code_tab.delete;
2498 proj_amount_tab.delete;
2499 denom_currency_code_tab.delete;
2500 denom_amount_tab.delete;
2501 tp_amount_type_tab.delete;
2502 billable_flag_tab.delete;
2503 forecast_summarized_code_tab.delete;
2504 util_summarized_code_tab.delete;
2505 work_type_id_tab.delete;
2506 resource_util_category_id_tab.delete;
2507 org_util_category_id_tab.delete;
2508 resource_util_weighted_tab.delete;
2509 org_util_weighted_tab.delete;
2510 provisional_flag_tab.delete;
2511 reversed_flag_tab.delete;
2512 net_zero_flag_tab.delete;
2513 reduce_capacity_flag_tab.delete;
2514 line_num_reversed_tab.delete;
2515
2516 TmpRevTab.delete;
2517 TmpUpdTab.delete;
2518
2519 SELECT dtl.forecast_item_id, dtl.amount_type_id,
2520 dtl.line_num, dtl.resource_type_code,
2521 dtl.person_billable_flag, dtl.item_UOM, dtl.item_date,
2522 dtl.PJI_SUMMARIZED_FLAG,
2523 dtl.CAPACITY_QUANTITY,
2524 dtl.OVERCOMMITMENT_QTY,
2525 dtl.OVERPROVISIONAL_QTY,
2526 dtl.OVER_PROV_CONF_QTY,
2527 dtl.CONFIRMED_QTY,
2528 dtl.PROVISIONAL_QTY,
2529 dtl.JOB_ID,
2530 dtl.PROJECT_ID,
2531 dtl.RESOURCE_ID,
2532 dtl.EXPENDITURE_ORGANIZATION_ID,
2533 dtl.item_quantity, dtl.expenditure_org_id,
2534 dtl.project_org_id, dtl.pvdr_acct_curr_code,
2535 dtl.pvdr_acct_amount, dtl.rcvr_acct_curr_code,
2536 dtl.rcvr_acct_amount, dtl.proj_currency_code,
2537 dtl.proj_amount, dtl.denom_currency_code, dtl.denom_amount,
2538 dtl.tp_amount_type, dtl.billable_flag,
2539 dtl.forecast_summarized_code, dtl.util_summarized_code,
2540 dtl.work_type_id, dtl.resource_util_category_id,
2541 dtl.org_util_category_id, dtl.resource_util_weighted,
2542 dtl.org_util_weighted, dtl.provisional_flag,
2543 dtl.reversed_flag, dtl.net_zero_flag,
2544 dtl.reduce_capacity_flag, dtl.line_num_reversed
2545 BULK COLLECT INTO forecast_item_id_tab,amount_type_id_tab,
2546 line_num_tab, resource_type_code_tab,
2547 person_billable_flag_tab, item_UOM_tab, item_date_tab,
2548 PJI_SUMMARIZED_FLAG_tab,
2549 CAPACITY_QUANTITY_tab,
2550 OVERCOMMITMENT_QTY_tab,
2551 OVERPROVISIONAL_QTY_tab,
2552 OVER_PROV_CONF_QTY_tab,
2553 CONFIRMED_QTY_tab,
2554 PROVISIONAL_QTY_tab,
2555 JOB_ID_tab,
2556 PROJECT_ID_tab,
2557 RESOURCE_ID_tab,
2558 EXP_ORGANIZATION_ID_tab,
2559 item_quantity_tab, expenditure_org_id_tab,
2560 project_org_id_tab, pvdr_acct_curr_code_tab,
2561 pvdr_acct_amount_tab, rcvr_acct_curr_code_tab,
2562 rcvr_acct_amount_tab, proj_currency_code_tab,
2563 proj_amount_tab, denom_currency_code_tab, denom_amount_tab,
2564 tp_amount_type_tab, billable_flag_tab,
2565 forecast_summarized_code_tab, util_summarized_code_tab,
2566 work_type_id_tab, resource_util_category_id_tab,
2567 org_util_category_id_tab, resource_util_weighted_tab,
2568 org_util_weighted_tab, provisional_flag_tab,
2569 reversed_flag_tab, net_zero_flag_tab,
2570 reduce_capacity_flag_tab, line_num_reversed_tab
2571 FROM pa_forecast_item_details dtl, pa_forecast_items hdr
2572 WHERE hdr.assignment_id = p_assignment_id
2573 AND hdr.delete_flag = 'N'
2574 AND dtl.forecast_item_id = hdr.forecast_item_id
2575 AND (dtl.item_date < trunc(p_start_date)
2576 OR dtl.item_date > trunc(p_end_date) + 1 - (1/86400))
2577 AND dtl.line_num =
2578 (SELECT max(line_num)
2579 FROM pa_forecast_item_details dtl1
2580 WHERE dtl1.forecast_item_id = hdr.forecast_item_id)
2581 order by dtl.item_date, dtl.forecast_item_id ;
2582
2583 IF nvl(forecast_item_id_tab.count,0) = 0 THEN
2584
2585 x_return_status := lv_return_status;
2586
2587 Print_message('Leaving Reverse_FI_Dtl');
2588
2589 RETURN;
2590
2591 END IF;
2592
2593 -- Move to one table FROM multiple tables
2594
2595 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
2596
2597 TmpUpdTab(j).forecast_item_id := forecast_item_id_tab(j);
2598 TmpUpdTab(j).amount_type_id :=amount_type_id_tab(j);
2599 TmpUpdTab(j).line_num := line_num_tab(j);
2600 TmpUpdTab(j).resource_type_code := resource_type_code_tab(j);
2601 TmpUpdTab(j).person_billable_flag :=
2602 person_billable_flag_tab(j);
2603 TmpUpdTab(j).item_Uom := item_UOM_tab(j);
2604 TmpUpdTab(j).item_date := item_date_tab(j);
2605 TmpUpdTab(j).item_quantity := item_quantity_tab(j);
2606 TmpUpdTab(j).expenditure_org_id := expenditure_org_id_tab(j);
2607 TmpUpdTab(j).project_org_id := project_org_id_tab(j);
2608 TmpUpdTab(j).pvdr_acct_curr_code := pvdr_acct_curr_code_tab(j);
2609 TmpUpdTab(j).PJI_SUMMARIZED_FLAG := PJI_SUMMARIZED_FLAG_tab(j);
2610 TmpUpdTab(j).CAPACITY_QUANTITY := CAPACITY_QUANTITY_tab(j);
2611 TmpUpdTab(j).OVERCOMMITMENT_QTY := OVERCOMMITMENT_QTY_tab(j);
2612 TmpUpdTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
2613 TmpUpdTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
2614 TmpUpdTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
2615 TmpUpdTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
2616 TmpUpdTab(j).JOB_ID := JOB_ID_tab(j);
2617 TmpUpdTab(j).PROJECT_ID := PROJECT_ID_tab(j);
2618 TmpUpdTab(j).RESOURCE_ID := RESOURCE_ID_tab(j);
2619 TmpUpdTab(j).EXPENDITURE_ORGANIZATION_ID := EXP_ORGANIZATION_ID_tab(j);
2620 TmpUpdTab(j).pvdr_acct_amount := pvdr_acct_amount_tab(j);
2621 TmpUpdTab(j).rcvr_acct_curr_code :=
2622 rcvr_acct_curr_code_tab(j);
2623 TmpUpdTab(j).rcvr_acct_amount := rcvr_acct_amount_tab(j);
2624 TmpUpdTab(j).proj_currency_code := proj_currency_code_tab(j);
2625 TmpUpdTab(j).proj_amount := proj_amount_tab(j);
2626 TmpUpdTab(j).denom_currency_code := denom_currency_code_tab(j);
2627 TmpUpdTab(j).denom_amount := denom_amount_tab(j);
2628 TmpUpdTab(j).tp_amount_type := tp_amount_type_tab(j);
2629 TmpUpdTab(j).billable_flag := billable_flag_tab(j);
2630 TmpUpdTab(j).forecast_summarized_code :=
2631 forecast_summarized_code_tab(j);
2632 TmpUpdTab(j).util_summarized_code :=
2633 util_summarized_code_tab(j);
2634 TmpUpdTab(j).work_type_id := work_type_id_tab(j);
2635 TmpUpdTab(j).resource_util_category_id :=
2636 resource_util_category_id_tab(j);
2637 TmpUpdTab(j).org_util_category_id :=
2638 org_util_category_id_tab(j);
2639 TmpUpdTab(j).resource_util_weighted :=
2640 resource_util_weighted_tab(j);
2641 TmpUpdTab(j).org_util_weighted :=
2642 org_util_weighted_tab(j);
2643 TmpUpdTab(j).provisional_flag := provisional_flag_tab(j);
2644 TmpUpdTab(j).reversed_flag := reversed_flag_tab(j);
2645 TmpUpdTab(j).net_zero_flag := net_zero_flag_tab(j);
2646 TmpUpdTab(j).reduce_capacity_flag :=
2647 reduce_capacity_flag_tab(j);
2648 TmpUpdTab(j).line_num_reversed := line_num_reversed_tab(j);
2649
2650 END LOOP;
2651
2652 l_rev_index := 1;
2653
2654 IF (TmpUpdTab.count <> 0) then
2655 FOR j IN TmpUpdTab.FIRST..TmpUpdTab.LAST LOOP
2656 IF (TmpUpdTab.EXISTS(j)) then
2657
2658 IF (NVL(TmpUpdTab(j).forecast_summarized_code,'Y') = 'Y'
2659 OR NVL(TmpUpdTab(j).PJI_SUMMARIZED_FLAG,'Y') = 'Y'
2660 OR NVL(TmpUpdTab(j).util_summarized_code,'Y') = 'Y')
2661 AND (
2662 NVL(TmpUpdTab(j).CAPACITY_QUANTITY,0) > 0 OR
2663 NVL(TmpUpdTab(j).OVERCOMMITMENT_QTY,0) > 0 OR
2664 NVL(TmpUpdTab(j).OVERPROVISIONAL_QTY,0) > 0 OR
2665 NVL(TmpUpdTab(j).OVER_PROV_CONF_QTY,0) > 0 OR
2666 NVL(TmpUpdTab(j).CONFIRMED_QTY,0) > 0 OR
2667 NVL(TmpUpdTab(j).PROVISIONAL_QTY,0) > 0 OR
2668 TmpUpdTab(j).item_quantity > 0
2669 ) THEN
2670
2671 TmpUpdTab(j).reversed_flag := 'Y';
2672 TmpUpdTab(j).net_zero_flag := 'Y';
2673
2674 TmpRevTab(l_rev_index) := TmpUpdTab(j);
2675 IF (NVL(TmpUpdTab(j).CAPACITY_QUANTITY,0) = 0) THEN
2676 TmpRevTab(l_rev_index).CAPACITY_QUANTITY := NULL;
2677 ELSE
2678 TmpRevTab(l_rev_index).CAPACITY_QUANTITY :=
2679 NVL(TmpUpdTab(j).CAPACITY_QUANTITY,0) * -1;
2680 END IF;
2681 IF (NVL(TmpUpdTab(j).OVERCOMMITMENT_QTY,0) = 0) THEN
2682 TmpRevTab(l_rev_index).OVERCOMMITMENT_QTY := NULL;
2683 ELSE
2684 TmpRevTab(l_rev_index).OVERCOMMITMENT_QTY :=
2685 NVL(TmpUpdTab(j).OVERCOMMITMENT_QTY,0) * -1;
2686 END IF;
2687 IF (NVL(TmpUpdTab(j).OVERPROVISIONAL_QTY,0) = 0) THEN
2688 TmpRevTab(l_rev_index).OVERPROVISIONAL_QTY := NULL;
2689 ELSE
2690 TmpRevTab(l_rev_index).OVERPROVISIONAL_QTY :=
2691 NVL(TmpUpdTab(j).OVERPROVISIONAL_QTY,0) * -1;
2692 END IF;
2693 IF (NVL(TmpUpdTab(j).OVER_PROV_CONF_QTY,0) = 0) THEN
2694 TmpRevTab(l_rev_index).OVER_PROV_CONF_QTY := NULL;
2695 ELSE
2696 TmpRevTab(l_rev_index).OVER_PROV_CONF_QTY :=
2697 NVL(TmpUpdTab(j).OVER_PROV_CONF_QTY,0) * -1;
2698 END IF;
2699 IF (NVL(TmpUpdTab(j).CONFIRMED_QTY,0) = 0) THEN
2700 TmpRevTab(l_rev_index).CONFIRMED_QTY := NULL;
2701 ELSE
2702 TmpRevTab(l_rev_index).CONFIRMED_QTY :=
2703 NVL(TmpUpdTab(j).CONFIRMED_QTY,0) * -1;
2704 END IF;
2705 IF (NVL(TmpUpdTab(j).PROVISIONAL_QTY,0) = 0) THEN
2706 TmpRevTab(l_rev_index).PROVISIONAL_QTY := NULL;
2707 ELSE
2708 TmpRevTab(l_rev_index).PROVISIONAL_QTY :=
2709 NVL(TmpUpdTab(j).PROVISIONAL_QTY,0) * -1;
2710 END IF;
2711 TmpRevTab(l_rev_index).item_quantity :=
2712 TmpUpdTab(j).item_quantity * -1;
2713 TmpRevTab(l_rev_index).resource_util_weighted :=
2714 TmpUpdTab(j).resource_util_weighted * -1;
2715 TmpRevTab(l_rev_index).org_util_weighted :=
2716 TmpUpdTab(j).org_util_weighted * -1;
2717
2718 IF NVL(TmpUpdTab(j).forecast_summarized_code,'Y') = 'Y' THEN
2719
2720 TmpRevTab(l_rev_index).forecast_summarized_code := 'N';
2721
2722 ELSE
2723
2724 TmpRevTab(l_rev_index).forecast_summarized_code :=
2725 TmpUpdTab(j).forecast_summarized_code;
2726 END IF;
2727
2728 IF NVL(TmpUpdTab(j).PJI_SUMMARIZED_FLAG,'Y') = 'Y' THEN
2729 TmpRevTab(l_rev_index).PJI_SUMMARIZED_FLAG := 'N';
2730 ELSE
2731 TmpRevTab(l_rev_index).PJI_SUMMARIZED_FLAG :=
2732 TmpUpdTab(j).PJI_SUMMARIZED_FLAG;
2733 END IF;
2734
2735 IF NVL(TmpUpdTab(j).util_summarized_code,'Y') = 'Y' THEN
2736
2737 TmpRevTab(l_rev_index).util_summarized_code := 'N';
2738
2739 ELSE
2740
2741 TmpRevTab(l_rev_index).util_summarized_code :=
2742 TmpUpdTab(j).util_summarized_code;
2743
2744 END IF;
2745
2746 TmpRevTab(l_rev_index).line_num_reversed :=
2747 TmpUpdTab(j).line_num; -- Added for bug 4244913
2748 -- TmpRevTab(j).line_num; Commented for bug 4244913
2749 TmpRevTab(l_rev_index).line_num :=
2750 TmpUpdTab(j).line_num + 1; -- Added for bug 4244913
2751 -- TmpRevTab(j).line_num + 1; Commented for bug 4244913
2752 TmpRevTab(l_rev_index).net_zero_flag := 'Y';
2753 l_rev_index := l_rev_index + 1;
2754
2755
2756 ELSE
2757
2758 TmpUpdTab(j).CAPACITY_QUANTITY := NULL;
2759 TmpUpdTab(j).OVERCOMMITMENT_QTY := NULL;
2760 TmpUpdTab(j).OVERPROVISIONAL_QTY := NULL;
2761 TmpUpdTab(j).OVER_PROV_CONF_QTY := NULL;
2762 TmpUpdTab(j).CONFIRMED_QTY := NULL;
2763 TmpUpdTab(j).PROVISIONAL_QTY := NULL;
2764 TmpUpdTab(j).item_quantity := 0;
2765 TmpUpdTab(j).org_util_weighted :=0;
2766 TmpUpdTab(j).resource_util_weighted :=0;
2767
2768 END IF;
2769
2770 END IF;
2771 END LOOP;
2772 end if;
2773
2774 IF nvl(TmpRevTab.COUNT,0) > 0 THEN
2775
2776 Print_message(
2777 'Calling PA_FORECAST_DTLS_PKG.Insert_Rows');
2778
2779 PA_FORECAST_DTLS_PKG.Insert_Rows(TmpRevTab,
2780 lv_return_status,
2781 x_msg_count,
2782 x_msg_data);
2783
2784 END IF;
2785
2786 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
2787
2788 IF nvl(TmpUpdTab.COUNT,0) > 0 THEN
2789
2790 Print_message(
2791 'Calling PA_FORECAST_DTLS_PKG.Update_Rows');
2792
2793 PA_FORECAST_DTLS_PKG.Update_Rows(TmpUpdTab,
2794 lv_return_status,
2795 x_msg_count,
2796 x_msg_data);
2797
2798 END IF;
2799
2800 END IF;
2801
2802 PA_DEBUG.Reset_Err_Stack;
2803
2804 Print_message('Leaving Reverse_FI_Dtl');
2805
2806 x_return_status := lv_return_status;
2807
2808 EXCEPTION
2809
2810 WHEN OTHERS THEN
2811 print_message('Failed in Reverse_FI_DTL api');
2812 print_message('SQLCODE'||sqlcode||sqlerrm);
2813
2814 x_msg_count := 1;
2815 x_msg_data := sqlerrm;
2816 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2817
2818 FND_MSG_PUB.add_exc_msg
2819 (p_pkg_name =>
2820 'PA_FORECASTITEM_PVT.Reverse_FI_Dtl',
2821 p_procedure_name => PA_DEBUG.G_Err_Stack);
2822
2823 If x_msg_count = 1 THEN
2824 pa_interface_utils_pub.get_messages
2825 (p_encoded => FND_API.G_TRUE,
2826 p_msg_index => 1,
2827 p_msg_count => x_msg_count,
2828 p_msg_data => x_msg_data,
2829 p_data => l_data, -- 4537865
2830 p_msg_index_out => l_msg_index_out );
2831 x_msg_data := l_data ; -- 4537865
2832 End If;
2833 Print_message(x_msg_data);
2834
2835 RAISE;
2836
2837
2838 END Reverse_FI_Dtl;
2839
2840 /* ---------------------------------------------------------------------
2841 | Procedure : Fetch_FI_Hdr
2842 | Purpose : To get existing forecast items (Requirement , Assignment)
2843 | FOR the given assignment ID which fall BETWEEN
2844 | startdate AND END DATE
2845 | Parameters : p_FI_Type - Forecast Item Type
2846 | 'R' - Requirement
2847 | 'A' - Assignment
2848 | p_assignment_id - Input Assignment ID
2849 | p_resource_id - Input Resource ID
2850 | (only IF forecast item type is Assignment)
2851 | p_start_date - Current Start DATE FOR forecast item
2852 | p_end_date - Current END DATE FOR forecast item
2853 | x_dbFIHdrTab - Holds the data retrieved FROM the database
2854 | x_return_status -
2855 | x_msg_count -
2856 | x_msg_data -
2857 +----------------------------------------------------------------------*/
2858
2859 PROCEDURE Fetch_FI_Hdr(
2860 p_assignment_id IN NUMBER,
2861 p_resource_id IN NUMBER,
2862 p_start_date IN DATE,
2863 p_end_date IN DATE,
2864 x_dbFIHdrTab OUT NOCOPY PA_FORECAST_GLOB.FIHdrTabTyp, /* 2674619 - Nocopy change */
2865 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
2866 x_msg_count OUT NOCOPY NUMBER, -- 4537865
2867 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
2868
2869
2870 l_msg_index_out NUMBER;
2871 l_data VARCHAR2(2000) ;-- 4537865
2872 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2873 forecast_item_type_tab PA_FORECAST_GLOB.VCTabTyp;
2874 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2875 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2876 expenditure_orgn_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2877 project_organization_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2878 project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2879 project_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
2880 person_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2881 resource_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2882 borrowed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2883 assignment_id_tab PA_FORECAST_GLOB.NumberTabTyp;
2884 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
2885 item_uom_tab PA_FORECAST_GLOB.VCTabTyp;
2886 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
2887 pvdr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
2888 pvdr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
2889 pvdr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
2890 rcvr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
2891 rcvr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
2892 rcvr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
2893 global_exp_period_end_date_tab PA_FORECAST_GLOB.DateTabTyp;
2894 expenditure_type_tab PA_FORECAST_GLOB.VCTabTyp;
2895 expenditure_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
2896 cost_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2897 rev_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2898 tp_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2899 burden_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2900 other_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
2901 delete_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2902 error_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2903 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2904 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
2905 TP_AMOUNT_TYPE_tab PA_FORECAST_GLOB.VCTabTyp;
2906 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2907 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2908 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2909 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
2910 asgmt_sys_status_code_tab PA_FORECAST_GLOB.VCTabTyp;
2911 capacity_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
2912 overcommitment_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
2913 availability_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
2914 overcommitment_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2915 availability_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
2916
2917 TmpHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
2918
2919 lv_return_status VARCHAR2(30);
2920
2921 BEGIN
2922
2923 lv_return_status := FND_API.G_RET_STS_SUCCESS;
2924
2925 Print_message('Entering Fetch_FI_Hdr');
2926
2927 PA_DEBUG.Init_err_stack(
2928 'PA_FORECASTITEM_PVT.Fetch_FI_Hdr');
2929
2930 TmpHdrTab.delete;
2931 forecast_item_id_tab.delete;
2932 forecast_item_type_tab.delete;
2933 project_org_id_tab.delete;
2934 expenditure_org_id_tab.delete;
2935 expenditure_orgn_id_tab.delete;
2936 project_organization_id_tab.delete;
2937 project_id_tab.delete;
2938 project_type_class_tab.delete;
2939 person_id_tab.delete;
2940 resource_id_tab.delete;
2941 borrowed_flag_tab.delete;
2942 assignment_id_tab.delete;
2943 item_date_tab.delete;
2944 item_uom_tab.delete;
2945 item_quantity_tab.delete;
2946 pvdr_period_set_name_tab.delete;
2947 pvdr_pa_period_name_tab.delete;
2948 pvdr_gl_period_name_tab.delete;
2949 rcvr_period_set_name_tab.delete;
2950 rcvr_pa_period_name_tab.delete;
2951 rcvr_gl_period_name_tab.delete;
2952 global_exp_period_end_date_tab.delete;
2953 expenditure_type_tab.delete;
2954 expenditure_type_class_tab.delete;
2955 cost_rejection_code_tab.delete;
2956 rev_rejection_code_tab.delete;
2957 tp_rejection_code_tab.delete;
2958 burden_rejection_code_tab.delete;
2959 other_rejection_code_tab.delete;
2960 delete_flag_tab.delete;
2961 error_flag_tab.delete;
2962 provisional_flag_tab.delete;
2963 JOB_ID_tab.delete;
2964 TP_AMOUNT_TYPE_tab.delete;
2965 OVERPROVISIONAL_QTY_tab.delete;
2966 OVER_PROV_CONF_QTY_tab.delete;
2967 CONFIRMED_QTY_tab.delete;
2968 PROVISIONAL_QTY_tab.delete;
2969 asgmt_sys_status_code_tab.delete;
2970 capacity_quantity_tab.delete;
2971 overcommitment_quantity_tab.delete;
2972 availability_quantity_tab.delete;
2973 overcommitment_flag_tab.delete;
2974 availability_flag_tab.delete;
2975
2976
2977 SELECT forecast_item_id, forecast_item_type,
2978 project_org_id , expenditure_org_id,
2979 project_organization_id, expenditure_organization_id ,
2980 project_id, project_type_class, person_id ,
2981 resource_id, borrowed_flag, assignment_id,
2982 item_date, item_uom, item_quantity,
2983 pvdr_period_set_name, pvdr_pa_period_name,
2984 pvdr_gl_period_name, rcvr_period_set_name,
2985 rcvr_pa_period_name, rcvr_gl_period_name,
2986 global_exp_period_end_date, expenditure_type,
2987 expenditure_type_class, cost_rejection_code,
2988 rev_rejection_code, tp_rejection_code,
2989 burden_rejection_code, other_rejection_code,
2990 delete_flag, error_flag, provisional_flag,
2991 JOB_ID,
2992 TP_AMOUNT_TYPE,
2993 OVERPROVISIONAL_QTY,
2994 OVER_PROV_CONF_QTY,
2995 CONFIRMED_QTY,
2996 PROVISIONAL_QTY,
2997 asgmt_sys_status_code, capacity_quantity,
2998 overcommitment_quantity, availability_quantity,
2999 overcommitment_flag, availability_flag
3000 BULK COLLECT INTO forecast_item_id_tab, forecast_item_type_tab,
3001 project_org_id_tab, expenditure_org_id_tab,
3002 project_organization_id_tab, expenditure_orgn_id_tab,
3003 project_id_tab, project_type_class_tab, person_id_tab,
3004 resource_id_tab, borrowed_flag_tab, assignment_id_tab,
3005 item_date_tab, item_uom_tab, item_quantity_tab,
3006 pvdr_period_set_name_tab, pvdr_pa_period_name_tab,
3007 pvdr_gl_period_name_tab, rcvr_period_set_name_tab,
3008 rcvr_pa_period_name_tab, rcvr_gl_period_name_tab,
3009 global_exp_period_end_date_tab, expenditure_type_tab,
3010 expenditure_type_class_tab, cost_rejection_code_tab,
3011 rev_rejection_code_tab, tp_rejection_code_tab,
3012 burden_rejection_code_tab, other_rejection_code_tab,
3013 delete_flag_tab, error_flag_tab, provisional_flag_tab,
3014 JOB_ID_tab,
3015 TP_AMOUNT_TYPE_tab,
3016 OVERPROVISIONAL_QTY_tab,
3017 OVER_PROV_CONF_QTY_tab,
3018 CONFIRMED_QTY_tab,
3019 PROVISIONAL_QTY_tab,
3020 asgmt_sys_status_code_tab, capacity_quantity_tab,
3021 overcommitment_quantity_tab, availability_quantity_tab,
3022 overcommitment_flag_tab, availability_flag_tab
3023 FROM pa_forecast_items
3024 WHERE assignment_id = p_assignment_id
3025 AND delete_flag = 'N'
3026 AND item_date BETWEEN trunc(p_start_date) AND
3027 trunc(p_end_date) + 1 - (1/86400)
3028 order by item_date, forecast_item_id ;
3029
3030 IF nvl(forecast_item_id_tab.COUNT,0) = 0 THEN
3031
3032 Print_message('NO DATA Leaving Fetch_FI_Hdr');
3033 x_return_status := lv_return_status;
3034
3035 RETURN;
3036
3037 END IF;
3038
3039 -- Move to one table FROM multiple tables
3040
3041 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
3042 TmpHdrTab(j).forecast_item_id := forecast_item_id_tab(j);
3043 TmpHdrTab(j).forecast_item_type := forecast_item_type_tab(j);
3044 TmpHdrTab(j).project_org_id := project_org_id_tab(j);
3045 TmpHdrTab(j).expenditure_org_id := expenditure_org_id_tab(j);
3046 TmpHdrTab(j).project_organization_id :=
3047 project_organization_id_tab(j);
3048 TmpHdrTab(j).expenditure_organization_id :=
3049 expenditure_orgn_id_tab(j);
3050 TmpHdrTab(j).project_id := project_id_tab(j);
3051 TmpHdrTab(j).project_type_class := project_type_class_tab(j);
3052 TmpHdrTab(j).person_id := person_id_tab(j);
3053 TmpHdrTab(j).resource_id := resource_id_tab(j);
3054 TmpHdrTab(j).borrowed_flag := borrowed_flag_tab(j);
3055 TmpHdrTab(j).assignment_id := assignment_id_tab(j);
3056 TmpHdrTab(j).item_date := item_date_tab(j);
3057 TmpHdrTab(j).item_uom := item_uom_tab(j);
3058 TmpHdrTab(j).item_quantity := item_quantity_tab(j);
3059 TmpHdrTab(j).pvdr_period_set_name :=
3060 pvdr_period_set_name_tab(j);
3061 TmpHdrTab(j).pvdr_pa_period_name := pvdr_pa_period_name_tab(j);
3062 TmpHdrTab(j).pvdr_gl_period_name := pvdr_gl_period_name_tab(j);
3063 TmpHdrTab(j).rcvr_period_set_name :=
3064 rcvr_period_set_name_tab(j);
3065 TmpHdrTab(j).rcvr_pa_period_name := rcvr_pa_period_name_tab(j);
3066 TmpHdrTab(j).rcvr_gl_period_name := rcvr_gl_period_name_tab(j);
3067 TmpHdrTab(j).global_exp_period_end_date :=
3068 global_exp_period_end_date_tab(j);
3069 TmpHdrTab(j).expenditure_type := expenditure_type_tab(j);
3070 TmpHdrTab(j).expenditure_type_class :=
3071 expenditure_type_class_tab(j);
3072 TmpHdrTab(j).cost_rejection_code := cost_rejection_code_tab(j);
3073 TmpHdrTab(j).rev_rejection_code := rev_rejection_code_tab(j);
3074 TmpHdrTab(j).tp_rejection_code := tp_rejection_code_tab(j);
3075 TmpHdrTab(j).burden_rejection_code :=
3076 burden_rejection_code_tab(j);
3077 TmpHdrTab(j).other_rejection_code :=
3078 other_rejection_code_tab(j);
3079 TmpHdrTab(j).delete_flag := delete_flag_tab(j);
3080 TmpHdrTab(j).error_flag := error_flag_tab(j);
3081 TmpHdrTab(j).provisional_flag := provisional_flag_tab(j);
3082 TmpHdrTab(j).JOB_ID := JOB_ID_tab(j);
3083 TmpHdrTab(j).TP_AMOUNT_TYPE := TP_AMOUNT_TYPE_tab(j);
3084 TmpHdrTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
3085 TmpHdrTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
3086 TmpHdrTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
3087 TmpHdrTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
3088 TmpHdrTab(j).asgmt_sys_status_code := asgmt_sys_status_code_tab(j);
3089 TmpHdrTab(j).capacity_quantity := capacity_quantity_tab(j);
3090 TmpHdrTab(j).overcommitment_quantity := overcommitment_quantity_tab(j);
3091 TmpHdrTab(j).availability_quantity := availability_quantity_tab(j);
3092 TmpHdrTab(j).overcommitment_flag := overcommitment_flag_tab(j);
3093 TmpHdrTab(j).availability_flag := availability_flag_tab(j);
3094
3095 END LOOP;
3096
3097 x_dbFIHdrTab := TmpHdrTab;
3098
3099 --Print_message('!!!x_dbFIHdrTab(1).provisional_flag: ' || x_dbFIHdrTab(1).provisional_flag);
3100 --Print_message('!!!x_dbFIHdrTab(1).item_date: ' || x_dbFIHdrTab(1).provisional_flag);
3101 Print_message('Leaving Fetch_FI_Hdr');
3102
3103 PA_DEBUG.Reset_Err_Stack;
3104
3105 x_return_status := lv_return_status;
3106
3107 EXCEPTION
3108
3109 WHEN OTHERS THEN
3110 print_message('Failed in Fetch_FI_Hdr api');
3111 print_message('SQLCODE'||sqlcode||sqlerrm);
3112
3113 x_msg_count := 1;
3114 x_msg_data := sqlerrm;
3115 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3116
3117 FND_MSG_PUB.add_exc_msg
3118 (p_pkg_name =>
3119 'PA_FORECASTITEM_PVT.Fetch_FI_Hdr',
3120 p_procedure_name => PA_DEBUG.G_Err_Stack);
3121
3122 If x_msg_count = 1 THEN
3123 pa_interface_utils_pub.get_messages
3124 (p_encoded => FND_API.G_TRUE,
3125 p_msg_index => 1,
3126 p_msg_count => x_msg_count,
3127 p_msg_data => x_msg_data,
3128 p_data => l_data , -- 4537865
3129 p_msg_index_out => l_msg_index_out );
3130 x_msg_data := l_data ; -- 4537865
3131 End If;
3132 Print_message(x_msg_data);
3133
3134 RAISE;
3135
3136
3137 END Fetch_FI_Hdr;
3138
3139 /* ---------------------------------------------------------------------
3140 | Procedure : Fetch_FI_Dtl
3141 | Purpose : To get existing forecast item details
3142 | (Requirement , Assignment)FOR the given assignment ID
3143 | which fall BETWEEN startdate AND end date
3144 | Parameters : p_FI_Type - Forecast Item Type
3145 | 'R' - Requirement
3146 | 'A' - Assignment
3147 | p_assignment_id - Input Assignment ID
3148 | p_resource_id - Input Resource ID
3149 | (only IF forecast item type is Assignment)
3150 | p_start_date - Current Start DATE FOR forecast item
3151 | p_end_date - Current END DATE FOR forecast item
3152 | x_dbFIDtlTab - Holds the data retrieved FROM the database
3153 | x_return_status -
3154 | x_msg_count -
3155 | x_msg_data -
3156 +----------------------------------------------------------------------*/
3157 PROCEDURE Fetch_FI_Dtl(
3158 p_assignment_id IN NUMBER,
3159 p_resource_id IN NUMBER,
3160 p_start_date IN DATE,
3161 p_end_date IN DATE,
3162 x_dbFIDtlTab OUT NOCOPY PA_FORECAST_GLOB.FIDtlTabTyp, /* 2674619 - Nocopy change */
3163 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
3164 x_msg_count OUT NOCOPY NUMBER, -- 4537865
3165 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
3166
3167 l_data VARCHAR2(2000) ; -- 4537865
3168 l_msg_index_out NUMBER;
3169 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
3170 amount_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
3171 line_num_tab PA_FORECAST_GLOB.NumberTabTyp;
3172 resource_type_code_tab PA_FORECAST_GLOB.VCTabTyp;
3173 person_billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
3174 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
3175 item_UOM_tab PA_FORECAST_GLOB.VCTabTyp;
3176 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
3177 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
3178 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
3179 PJI_SUMMARIZED_FLAG_tab PA_FORECAST_GLOB.VC1TabTyp;
3180 CAPACITY_QUANTITY_tab PA_FORECAST_GLOB.NumberTabTyp;
3181 OVERCOMMITMENT_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
3182 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
3183 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
3184 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
3185 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
3186 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
3187 PROJECT_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
3188 RESOURCE_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
3189 EXP_ORGANIZATION_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
3190 pvdr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
3191 pvdr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
3192 rcvr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
3193 rcvr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
3194 proj_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
3195 proj_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
3196 denom_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
3197 denom_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
3198 tp_amount_type_tab PA_FORECAST_GLOB.VCTabTyp;
3199 billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
3200 forecast_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
3201 util_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
3202 work_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
3203 resource_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
3204 org_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
3205 resource_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
3206 org_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
3207 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
3208 reversed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
3209 net_zero_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
3210 reduce_capacity_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
3211 line_num_reversed_tab PA_FORECAST_GLOB.NumberTabTyp;
3212
3213 TmpDtlTab PA_FORECAST_GLOB.FIDtlTabTyp;
3214
3215 lv_return_status VARCHAR2(30);
3216
3217 BEGIN
3218
3219 lv_return_status := FND_API.G_RET_STS_SUCCESS;
3220
3221 Print_message('Entering Fetch_FI_Dtl');
3222
3223 PA_DEBUG.Init_err_stack(
3224 'PA_FORECASTITEM_PVT.Fetch_FI_Dtl');
3225
3226 TmpDtlTab.delete;
3227 forecast_item_id_tab.delete;
3228 amount_type_id_tab.delete;
3229 line_num_tab.delete;
3230 resource_type_code_tab.delete;
3231 person_billable_flag_tab.delete;
3232 item_date_tab.delete;
3233 item_UOM_tab.delete;
3234 item_quantity_tab.delete;
3235 expenditure_org_id_tab.delete;
3236 project_org_id_tab.delete;
3237 PJI_SUMMARIZED_FLAG_tab.delete;
3238 CAPACITY_QUANTITY_tab.delete;
3239 OVERCOMMITMENT_QTY_tab.delete;
3240 OVERPROVISIONAL_QTY_tab.delete;
3241 OVER_PROV_CONF_QTY_tab.delete;
3242 CONFIRMED_QTY_tab.delete;
3243 PROVISIONAL_QTY_tab.delete;
3244 JOB_ID_tab.delete;
3245 PROJECT_ID_tab.delete;
3246 RESOURCE_ID_tab.delete;
3247 EXP_ORGANIZATION_ID_tab.delete;
3248 pvdr_acct_curr_code_tab.delete;
3249 pvdr_acct_amount_tab.delete;
3250 rcvr_acct_curr_code_tab.delete;
3251 rcvr_acct_amount_tab.delete;
3252 proj_currency_code_tab.delete;
3253 proj_amount_tab.delete;
3254 denom_currency_code_tab.delete;
3255 denom_amount_tab.delete;
3256 tp_amount_type_tab.delete;
3257 billable_flag_tab.delete;
3258 forecast_summarized_code_tab.delete;
3259 util_summarized_code_tab.delete;
3260 work_type_id_tab.delete;
3261 resource_util_category_id_tab.delete;
3262 org_util_category_id_tab.delete;
3263 resource_util_weighted_tab.delete;
3264 org_util_weighted_tab.delete;
3265 provisional_flag_tab.delete;
3266 reversed_flag_tab.delete;
3267 net_zero_flag_tab.delete;
3268 reduce_capacity_flag_tab.delete;
3269 line_num_reversed_tab.delete;
3270
3271
3272 SELECT dtl.forecast_item_id, dtl.amount_type_id,
3273 dtl.line_num, dtl.resource_type_code,
3274 dtl.person_billable_flag, dtl.item_UOM, dtl.item_date,
3275 dtl.PJI_SUMMARIZED_FLAG,
3276 dtl.CAPACITY_QUANTITY,
3277 dtl.OVERCOMMITMENT_QTY,
3278 dtl.OVERPROVISIONAL_QTY,
3279 dtl.OVER_PROV_CONF_QTY,
3280 dtl.CONFIRMED_QTY,
3281 dtl.PROVISIONAL_QTY,
3282 dtl.JOB_ID,
3283 dtl.PROJECT_ID,
3284 dtl.RESOURCE_ID,
3285 dtl.EXPENDITURE_ORGANIZATION_ID,
3286 dtl.item_quantity, dtl.expenditure_org_id,
3287 dtl.project_org_id, dtl.pvdr_acct_curr_code,
3288 dtl.pvdr_acct_amount, dtl.rcvr_acct_curr_code,
3289 dtl.rcvr_acct_amount, dtl.proj_currency_code,
3290 dtl.proj_amount, dtl.denom_currency_code,
3291 dtl.denom_amount, dtl.tp_amount_type, dtl.billable_flag,
3292 dtl.forecast_summarized_code, dtl.util_summarized_code,
3293 dtl.work_type_id, dtl.resource_util_category_id,
3294 dtl.org_util_category_id, dtl.resource_util_weighted,
3295 dtl.org_util_weighted, dtl.provisional_flag,
3296 dtl.reversed_flag, dtl.net_zero_flag,
3297 dtl.reduce_capacity_flag, dtl.line_num_reversed
3298 BULK COLLECT INTO forecast_item_id_tab,amount_type_id_tab,
3299 line_num_tab, resource_type_code_tab,
3300 person_billable_flag_tab, item_UOM_tab, item_date_tab,
3301 PJI_SUMMARIZED_FLAG_tab,
3302 CAPACITY_QUANTITY_tab,
3303 OVERCOMMITMENT_QTY_tab,
3304 OVERPROVISIONAL_QTY_tab,
3305 OVER_PROV_CONF_QTY_tab,
3306 CONFIRMED_QTY_tab,
3307 PROVISIONAL_QTY_tab,
3308 JOB_ID_tab,
3309 PROJECT_ID_tab,
3310 RESOURCE_ID_tab,
3311 EXP_ORGANIZATION_ID_tab,
3312 item_quantity_tab, expenditure_org_id_tab,
3313 project_org_id_tab, pvdr_acct_curr_code_tab,
3314 pvdr_acct_amount_tab, rcvr_acct_curr_code_tab,
3315 rcvr_acct_amount_tab, proj_currency_code_tab,
3316 proj_amount_tab, denom_currency_code_tab,
3317 denom_amount_tab, tp_amount_type_tab, billable_flag_tab,
3318 forecast_summarized_code_tab, util_summarized_code_tab,
3319 work_type_id_tab, resource_util_category_id_tab,
3320 org_util_category_id_tab, resource_util_weighted_tab,
3321 org_util_weighted_tab, provisional_flag_tab,
3322 reversed_flag_tab, net_zero_flag_tab,
3323 reduce_capacity_flag_tab, line_num_reversed_tab
3324 FROM pa_forecast_item_details dtl , pa_forecast_items hdr
3325 WHERE hdr.assignment_id = p_assignment_id
3326 AND hdr.delete_flag = 'N'
3327 AND dtl.forecast_item_id = hdr.forecast_item_id
3328 AND dtl.item_date BETWEEN trunc(p_start_date) AND
3329 trunc(p_end_date) + 1 - (1/86400)
3330 AND dtl.line_num =
3331 (SELECT max(line_num)
3332 FROM pa_forecast_item_details dtl1
3333 WHERE dtl1.forecast_item_id = hdr.forecast_item_id)
3334 order by dtl.item_date, dtl.forecast_item_id ;
3335
3336 IF nvl(forecast_item_id_tab.COUNT,0) = 0 THEN
3337
3338 Print_message('NO DATA Leaving Fetch_FI_Dtl');
3339 x_return_status := lv_return_status;
3340
3341 RETURN;
3342
3343 END IF;
3344
3345 -- Move to one table FROM multiple tables
3346
3347 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
3348
3349 TmpDtlTab(j).forecast_item_id := forecast_item_id_tab(j);
3350 TmpDtlTab(j).amount_type_id :=amount_type_id_tab(j);
3351 TmpDtlTab(j).line_num := line_num_tab(j);
3352 TmpDtlTab(j).resource_type_code := resource_type_code_tab(j);
3353 TmpDtlTab(j).person_billable_flag :=
3354 person_billable_flag_tab(j);
3355 TmpDtlTab(j).item_Uom := item_UOM_tab(j);
3356 TmpDtlTab(j).item_date := item_date_tab(j);
3357 TmpDtlTab(j).item_quantity := item_quantity_tab(j);
3358 TmpDtlTab(j).expenditure_org_id := expenditure_org_id_tab(j);
3359 TmpDtlTab(j).project_org_id := project_org_id_tab(j);
3360 TmpDtlTab(j).pvdr_acct_curr_code := pvdr_acct_curr_code_tab(j);
3361 TmpDtlTab(j).PJI_SUMMARIZED_FLAG := PJI_SUMMARIZED_FLAG_tab(j);
3362 TmpDtlTab(j).CAPACITY_QUANTITY := CAPACITY_QUANTITY_tab(j);
3363 TmpDtlTab(j).OVERCOMMITMENT_QTY := OVERCOMMITMENT_QTY_tab(j);
3364 TmpDtlTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
3365 TmpDtlTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
3366 TmpDtlTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
3367 TmpDtlTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
3368 TmpDtlTab(j).JOB_ID := JOB_ID_tab(j);
3369 TmpDtlTab(j).PROJECT_ID := PROJECT_ID_tab(j);
3370 TmpDtlTab(j).RESOURCE_ID := RESOURCE_ID_tab(j);
3371 TmpDtlTab(j).EXPENDITURE_ORGANIZATION_ID := EXP_ORGANIZATION_ID_tab(j);
3372 TmpDtlTab(j).pvdr_acct_amount := pvdr_acct_amount_tab(j);
3373 TmpDtlTab(j).rcvr_acct_curr_code :=
3374 rcvr_acct_curr_code_tab(j);
3375 TmpDtlTab(j).rcvr_acct_amount := rcvr_acct_amount_tab(j);
3376 TmpDtlTab(j).proj_currency_code := proj_currency_code_tab(j);
3377 TmpDtlTab(j).proj_amount := proj_amount_tab(j);
3378 TmpDtlTab(j).denom_currency_code := denom_currency_code_tab(j);
3379 TmpDtlTab(j).denom_amount := denom_amount_tab(j);
3380 TmpDtlTab(j).tp_amount_type := tp_amount_type_tab(j);
3381 TmpDtlTab(j).billable_flag := billable_flag_tab(j);
3382 TmpDtlTab(j).forecast_summarized_code :=
3383 forecast_summarized_code_tab(j);
3384 TmpDtlTab(j).util_summarized_code :=
3385 util_summarized_code_tab(j);
3386 TmpDtlTab(j).work_type_id := work_type_id_tab(j);
3387 TmpDtlTab(j).resource_util_category_id :=
3388 resource_util_category_id_tab(j);
3389 TmpDtlTab(j).org_util_category_id :=
3390 org_util_category_id_tab(j);
3391 TmpDtlTab(j).resource_util_weighted :=
3392 resource_util_weighted_tab(j);
3393 TmpDtlTab(j).org_util_weighted :=
3394 org_util_weighted_tab(j);
3395 TmpDtlTab(j).provisional_flag := provisional_flag_tab(j);
3396 TmpDtlTab(j).reversed_flag := reversed_flag_tab(j);
3397 TmpDtlTab(j).net_zero_flag := net_zero_flag_tab(j);
3398 TmpDtlTab(j).reduce_capacity_flag :=
3399 reduce_capacity_flag_tab(j);
3400 TmpDtlTab(j).line_num_reversed := line_num_reversed_tab(j);
3401
3402 END LOOP;
3403
3404 x_dbFIDtlTab := TmpDtlTab;
3405
3406 Print_message('Leaving Fetch_FI_Dtl');
3407
3408 PA_DEBUG.Reset_Err_Stack;
3409
3410 x_return_status := lv_return_status;
3411
3412 EXCEPTION
3413
3414 WHEN OTHERS THEN
3415 print_message('Failed in Fetch_FI_Dtl api');
3416 print_message('SQLCODE'||sqlcode||sqlerrm);
3417
3418 x_msg_count := 1;
3419 x_msg_data := sqlerrm;
3420 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3421
3422 FND_MSG_PUB.add_exc_msg
3423 (p_pkg_name =>
3424 'PA_FORECASTITEM_PVT.Fetch_FI_Dtl',
3425 p_procedure_name => PA_DEBUG.G_Err_Stack);
3426
3427 If x_msg_count = 1 THEN
3428 pa_interface_utils_pub.get_messages
3429 (p_encoded => FND_API.G_TRUE,
3430 p_msg_index => 1,
3431 p_msg_count => x_msg_count,
3432 p_msg_data => x_msg_data,
3433 p_data => l_data , -- 4537865
3434 p_msg_index_out => l_msg_index_out );
3435 x_msg_data := l_data ; -- 4537865
3436 End If;
3437 Print_message(x_msg_data);
3438
3439 RAISE;
3440
3441 END Fetch_FI_Dtl;
3442
3443 /* ---------------------------------------------------------------------
3444 | Procedure : Build_FI_Hdr_Req
3445 | Purpose : To create new/modified forecast item (Requirement) record
3446 | FOR the item DATEs that are built IN the p_FIDayTab
3447 | Parameters : p_AsgnDtlRec - Assignment details
3448 | p_DBHdrTab - Holds forecast item records which are
3449 | already existing
3450 | p_FIDayTab - Holds all item_dates,item_quantity,
3451 | status_code FOR the current run.
3452 | i) action_flag component of this tab will be updated
3453 | to indicate the following
3454 | a) N : New record - item_date does not exist
3455 | b) DN : Delete AND create new -
3456 | item DATE exists but expenditure OU/
3457 | expenditure organization/expenditure type/
3458 | expenditure type class/ borrowed flag has
3459 | changed.
3460 | Existing record is reversed(deleted) AND new
3461 | record is created
3462 | c) RN : Reverse AND create new -
3463 | Quantity has changed.
3464 | IN header : quantity is updated.
3465 | IN detail :
3466 | IF summarized existing line should be reversed
3467 | AND new line created
3468 | IF not summarized existing line should be
3469 | updated to reflect new quantity
3470 | d) C : No change IN header
3471 | Check FOR any changes IN detail record for
3472 | person_billable_flag, provisional_flag,
3473 | work_type OR resource_type
3474 | ii) forecast_item_id component of this tab will be updated
3475 | to hold the forecast_item_id FOR new record. Same will
3476 | be used FOR detail record
3477 | iii) project_org_id,expenditure_org_id,work_type_id,
3478 | person_billable_flag, tp_amount_type : These values
3479 | are required FOR detail record processing. These are
3480 | also updated IN this tab.
3481 |
3482 | x_FIHdrInsTab - Will RETURN all forecast item records that
3483 | are new
3484 | x_FIHdrUpdTab - Will RETURN all forecast item records that
3485 | are modified
3486 | x_return_status -
3487 | x_msg_count -
3488 | x_msg_data -
3489 +----------------------------------------------------------------------*/
3490 PROCEDURE Build_FI_Hdr_Req(
3491 p_AsgnDtlRec IN PA_FORECAST_GLOB.AsgnDtlRecord,
3492 p_DBHdrTab IN PA_FORECAST_GLOB.FIHdrTabTyp,
3493 p_FIDayTab IN OUT NOCOPY PA_FORECAST_GLOB.FIDayTabTyp, /* 2674619 - Nocopy change */
3494 x_FIHdrInsTab OUT NOCOPY PA_FORECAST_GLOB.FIHdrTabTyp, /* 2674619 - Nocopy change */
3495 x_FIHdrUpdTab OUT NOCOPY PA_FORECAST_GLOB.FIHdrTabTyp, /* 2674619 - Nocopy change */
3496 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
3497 x_msg_count OUT NOCOPY NUMBER, -- 4537865
3498 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
3499
3500 l_data VARCHAR2(2000) ; -- 4537865
3501 l_msg_index_out NUMBER;
3502 lv_project_id NUMBER;
3503 lv_project_org_id NUMBER;
3504 lv_project_orgn_id NUMBER;
3505 lv_project_type_class VARCHAR2(30);
3506 lv_project_status_code VARCHAR2(30);
3507 lv_pvdr_period_set_name VARCHAR2(30);
3508 lv_rcvr_period_set_name VARCHAR2(30);
3509 lv_pvdr_pa_period_name VARCHAR2(30):= NULL;
3510
3511 ld_pvdrpa_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
3512 ld_pvdrpa_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
3513 lv_pvdrpa_name_tab PA_FORECAST_GLOB.periodnametabtyp;
3514 lv_pvpa_index NUMBER ;
3515
3516 ld_pvdrgl_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
3517 ld_pvdrgl_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
3518 lv_pvdrgl_name_tab PA_FORECAST_GLOB.periodnametabtyp;
3519 lv_pvgl_index NUMBER ;
3520
3521 ld_rcvrpa_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
3522 ld_rcvrpa_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
3523 lv_rcvrpa_name_tab PA_FORECAST_GLOB.periodnametabtyp;
3524 lv_rcpa_index NUMBER ;
3525
3526 ld_rcvrgl_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
3527 ld_rcvrgl_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
3528 lv_rcvrgl_name_tab PA_FORECAST_GLOB.periodnametabtyp;
3529 lv_rcgl_index NUMBER ;
3530
3531
3532 lv_WeekDateRange_Tab PA_FORECAST_GLOB.WeekDatesRangeFcTabTyp;
3533 lv_wk_index NUMBER;
3534
3535 lv_borrowed_flag VARCHAR2(1) := 'N';
3536 lv_action_code VARCHAR2(30);
3537 lv_include_in_forecast VARCHAR2(1) := 'N';
3538 lv_forecast_item_id NUMBER;
3539 lv_work_type_id NUMBER;
3540 lv_error_flag VARCHAR2(1) := 'N';
3541 lv_prev_index NUMBER := 0;
3542 lv_rejection_code VARCHAR2(30);
3543
3544 d_in NUMBER := 1;
3545 TmpDayTab PA_FORECAST_GLOB.FIDayTabTyp;
3546 TmpInsTab PA_FORECAST_GLOB.FIHdrTabTyp;
3547 i_in NUMBER := 1;
3548 TmpUpdTab PA_FORECAST_GLOB.FIHdrTabTyp;
3549 u_in NUMBER := 1;
3550 TmpHdrRec PA_FORECAST_GLOB.FIHdrRecord;
3551
3552 lv_return_status VARCHAR2(30);
3553 lv_err_msg VARCHAR2(30);
3554 lv_call_pos VARCHAR2(50);
3555 tmp_status_code VARCHAR2(30);
3556
3557 BEGIN
3558
3559 lv_return_status := FND_API.G_RET_STS_SUCCESS;
3560
3561 Print_message('Entering Build_FI_Hdr_Req');
3562
3563 PA_DEBUG.Init_err_stack(
3564 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Req');
3565
3566 TmpDayTab.Delete;
3567 TmpInsTab.Delete;
3568 TmpUpdTab.Delete;
3569 ld_pvdrpa_startdate_tab.delete;
3570 ld_pvdrpa_enddate_tab.delete;
3571 lv_pvdrpa_name_tab.delete;
3572 ld_pvdrgl_startdate_tab.delete;
3573 ld_pvdrgl_enddate_tab.delete;
3574 lv_pvdrgl_name_tab.delete;
3575 ld_rcvrpa_startdate_tab.delete;
3576 ld_rcvrpa_enddate_tab.delete;
3577 lv_rcvrpa_name_tab.delete;
3578 ld_rcvrgl_startdate_tab.delete;
3579 ld_rcvrgl_enddate_tab.delete;
3580 lv_rcvrgl_name_tab.delete;
3581
3582
3583 TmpDayTab := p_FIDayTab;
3584
3585 Print_message(
3586 'Req - Get_period_set_name (pvdr) ');
3587
3588 lv_pvdr_period_set_name :=
3589 PA_FORECAST_ITEMS_UTILS.get_period_set_name
3590 (p_AsgnDtlRec.expenditure_org_id);
3591
3592 if lv_pvdr_period_set_name = 'NO_DATA_FOUND' THEN
3593
3594 lv_pvdr_period_set_name := '-99';
3595 lv_rejection_code := 'PVDR_PRD_SET_NAME_NOT_FOUND';
3596 lv_error_flag := 'Y';
3597
3598 end if;
3599
3600 Print_message(
3601 'Req - Calling Get_Project_Dtls');
3602
3603
3604 Get_Project_Dtls (p_AsgnDtlRec.project_id, lv_project_org_id,
3605 lv_project_orgn_id, lv_work_type_id,
3606 lv_project_type_class, lv_project_status_code,
3607 lv_return_status, x_msg_count, x_msg_data);
3608
3609 IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3610
3611 lv_err_msg := 'No_Project_Record - Req';
3612 RAISE NO_DATA_FOUND;
3613
3614 END IF;
3615
3616 Print_message(
3617 'Req - Get_period_set_name (rcvr) ');
3618
3619 Print_message('lv_project_org_id: ' || lv_project_org_id);
3620 lv_rcvr_period_set_name :=
3621 PA_FORECAST_ITEMS_UTILS.get_period_set_name (
3622 lv_project_org_id);
3623
3624 if lv_rcvr_period_set_name = 'NO_DATA_FOUND' THEN
3625
3626 lv_rcvr_period_set_name := '-99';
3627
3628 IF lv_rejection_code IS NULL THEN
3629
3630 lv_rejection_code := 'RCVR_PRD_SET_NAME_NOT_FOUND';
3631
3632 END IF;
3633
3634 lv_error_flag := 'Y';
3635
3636 end if;
3637
3638
3639 Print_message(
3640 'Req - Get_pa_period_name (pvdr) ');
3641
3642 PA_FORECAST_ITEMS_UTILS.get_pa_period_name(
3643 p_AsgnDtlRec.expenditure_org_id,
3644 p_AsgnDtlRec.start_date,
3645 p_AsgnDtlRec.end_date,
3646 ld_pvdrpa_startdate_tab,
3647 ld_pvdrpa_enddate_tab,
3648 lv_pvdrpa_name_tab);
3649 lv_pvpa_index := lv_pvdrpa_name_tab.FIRST;
3650
3651 Print_message(
3652 'Req - Get_gl_period_name (pvdr) ');
3653
3654 PA_FORECAST_ITEMS_UTILS.get_gl_period_name(
3655 p_AsgnDtlRec.expenditure_org_id,
3656 p_AsgnDtlRec.start_date,
3657 p_AsgnDtlRec.end_date,
3658 ld_pvdrgl_startdate_tab,
3659 ld_pvdrgl_enddate_tab,
3660 lv_pvdrgl_name_tab);
3661 lv_pvgl_index := lv_pvdrgl_name_tab.FIRST;
3662
3663 Print_message(
3664 'Req - Get_pa_period_name (rcvr) ');
3665 Print_message('lv_project_org_id: ' || lv_project_org_id);
3666 PA_FORECAST_ITEMS_UTILS.get_pa_period_name(
3667 lv_project_org_id,
3668 p_AsgnDtlRec.start_date,
3669 p_AsgnDtlRec.end_date,
3670 ld_rcvrpa_startdate_tab,
3671 ld_rcvrpa_enddate_tab,
3672 lv_rcvrpa_name_tab);
3673 lv_rcpa_index := lv_rcvrpa_name_tab.FIRST;
3674
3675 Print_message(
3676 'Req - Get_gl_period_name (rcvr) ');
3677 Print_message('lv_project_org_id: ' || lv_project_org_id);
3678 PA_FORECAST_ITEMS_UTILS.get_gl_period_name(
3679 lv_project_org_id,
3680 p_AsgnDtlRec.start_date,
3681 p_AsgnDtlRec.end_date,
3682 ld_rcvrgl_startdate_tab,
3683 ld_rcvrgl_enddate_tab,
3684 lv_rcvrgl_name_tab);
3685 lv_rcgl_index := lv_rcvrgl_name_tab.FIRST;
3686
3687
3688 Print_message(
3689 'Req - Get_week_dates_range_fc ');
3690
3691 PA_FORECAST_ITEMS_UTILS.get_Week_Dates_Range_Fc(
3692 p_AsgnDtlRec.start_date,
3693 p_AsgnDtlRec.end_date,
3694 lv_WeekDateRange_Tab,
3695 x_return_status,
3696 x_msg_count,
3697 x_msg_data);
3698 lv_wk_index := lv_WeekDateRange_Tab.FIRST;
3699
3700 lv_call_pos := 'Req : chk_borr';
3701
3702 IF ((lv_project_org_id <> p_AsgnDtlRec.expenditure_org_id ) OR
3703 (lv_project_orgn_id <>
3704 p_AsgnDtlRec.expenditure_organization_id ))THEN
3705
3706 lv_borrowed_flag := 'Y';
3707
3708 ELSE
3709
3710 lv_borrowed_flag := 'N';
3711
3712 END IF;
3713
3714 lv_call_pos := 'Req : bef_for';
3715
3716 print_message('TmpDaytab.count: ' || TmpDaytab.count);
3717 if (TmpDaytab.count <> 0) then
3718 FOR i IN TmpDaytab.FIRST..TmpDaytab.LAST LOOP
3719
3720 IF TmpDaytab.EXISTS(i) then
3721 lv_call_pos := 'Req : in_for';
3722
3723 lv_action_code := 'OPEN_ASGMT_PROJ_FORECASTING';
3724
3725 /* Bug No: 1967832 Added conditions before the call */
3726
3727 IF TmpDayTab(i).status_code = tmp_status_code
3728 AND i>TmpDayTab.FIRST THEN
3729
3730 lv_include_in_forecast := lv_include_in_forecast;
3731
3732 ELSE
3733 lv_include_in_forecast :=
3734 pa_project_utils.check_prj_stus_action_allowed(
3735 TmpDayTab(i).status_code,
3736 lv_action_code);
3737 tmp_status_code := TmpDayTab(i).status_code;
3738
3739 END IF;
3740
3741 TmpDayTab(i).include_in_forecast := lv_include_in_forecast;
3742
3743 /*
3744 TmpDayTab(i).provisional_flag :=
3745 PA_ASSIGNMENT_UTILS.Is_Provisional_Status(
3746 TmpDayTab(i).status_code,
3747 p_AsgnDtlRec.assignment_type);
3748 */
3749
3750 IF d_in <= nvl(p_DbHdrTab.COUNT,0) THEN --Some Record Exists
3751
3752 lv_call_pos := 'Req : in_if 1';
3753
3754 IF trunc(TmpDayTab(i).item_date) <
3755 trunc(p_DbHdrTab(d_in).item_date) THEN
3756
3757 -- This Item_date does not exist in Database
3758 lv_call_pos := 'Req : in_if 2';
3759
3760 IF (TmpDayTab(i).action_flag = 'D') OR
3761 (
3762 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) = 0 AND
3763 NVL(TmpDayTab(i).OVERCOMMITMENT_QTY,0) = 0 AND
3764 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
3765 NVL(TmpDayTab(i).OVERCOMMITMENT_QUANTITY,0) = 0 AND
3766 -- End fix for bug 2504222
3767 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) = 0 AND
3768 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) = 0 AND
3769 NVL(TmpDayTab(i).CONFIRMED_QTY,0) = 0 AND
3770 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) = 0 AND
3771 TmpDayTab(i).item_quantity = 0
3772 ) THEN
3773
3774 TmpDayTab(i).action_flag := 'I';
3775
3776 ELSE
3777
3778 TmpDayTab(i).action_flag := 'N';
3779
3780 END IF;
3781
3782 ELSIF trunc(TmpDayTab(i).item_date) =
3783 trunc(p_DbHdrTab(d_in).item_date) THEN
3784
3785 -- This Item_date exists in Database
3786 lv_call_pos := 'Req : in_else 2';
3787
3788 IF (TmpDayTab(i).action_flag = 'D') OR
3789 (
3790 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) = 0 AND
3791 NVL(TmpDayTab(i).OVERCOMMITMENT_QTY,0) = 0 AND
3792 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
3793 NVL(TmpDayTab(i).OVERCOMMITMENT_QUANTITY,0) = 0 AND
3794 -- End fix for bug 2504222
3795 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) = 0 AND
3796 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) = 0 AND
3797 NVL(TmpDayTab(i).CONFIRMED_QTY,0) = 0 AND
3798 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) = 0 AND
3799 TmpDayTab(i).item_quantity = 0
3800 ) THEN
3801
3802 print_message('Req : in_if 3 : TmpUpdTab(u_in).error_flag := N');
3803 lv_call_pos := 'Req : in_if 3';
3804 TmpDayTab(i).action_flag := 'D';
3805 TmpUpdTab(u_in) := p_DbHdrTab(d_in);
3806 TmpUpdTab(u_in).CAPACITY_QUANTITY := NULL;
3807 TmpUpdTab(u_in).OVERCOMMITMENT_QTY := NULL;
3808 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
3809 TmpUpdTab(u_in).OVERCOMMITMENT_QUANTITY := NULL;
3810 -- End fix for bug 2504222
3811 TmpUpdTab(u_in).OVERPROVISIONAL_QTY := NULL;
3812 TmpUpdTab(u_in).OVER_PROV_CONF_QTY := NULL;
3813 TmpUpdTab(u_in).CONFIRMED_QTY := NULL;
3814 TmpUpdTab(u_in).PROVISIONAL_QTY := NULL;
3815 TmpUpdTab(u_in).item_quantity := 0;
3816 TmpUpdTab(u_in).delete_flag := 'Y';
3817 TmpUpdTab(u_in).error_flag := 'N';
3818 TmpUpdTab(u_in).other_rejection_code := NULL;
3819 u_in := u_in + 1;
3820
3821 ELSIF p_DbHdrTab(d_in).error_flag = 'Y' THEN
3822
3823 print_message('Req : in_else 3');
3824 lv_call_pos := 'Req : in_else 3';
3825 -- Previous Run generated Error. Rerun
3826
3827 TmpDayTab(i).action_flag := 'E';
3828 TmpDayTab(i).forecast_item_id :=
3829 p_DbHdrTab(d_in).forecast_item_id;
3830
3831 ELSIF ( (p_AsgnDtlRec.expenditure_org_id <>
3832 p_DbHdrTab(d_in).expenditure_org_id) OR
3833 (p_AsgnDtlRec.expenditure_organization_id <>
3834 p_DbHdrTab(d_in).expenditure_organization_id) OR
3835 (p_AsgnDtlRec.expenditure_type <>
3836 p_DbHdrTab(d_in).expenditure_type) OR
3837 (p_AsgnDtlRec.expenditure_type_class <>
3838 p_DbHdrTab(d_in).expenditure_type_class) OR
3839 (nvl(p_AsgnDtlRec.fcst_tp_amount_type,'Z') <>
3840 nvl(p_DbHdrTab(d_in).tp_amount_type,'Z')) OR
3841 (lv_borrowed_flag <> p_DbHdrTab(d_in).borrowed_flag) OR
3842 (NVL(TmpDayTab(i).asgmt_sys_status_code,'Z') <> NVL(p_DbHdrTab(d_in).asgmt_sys_status_code,'Z'))
3843 ) THEN
3844
3845 print_message('Req : in_else 3a');
3846 lv_call_pos := 'Req : in_else 3a';
3847 -- If any of above values differ,
3848 -- existing record is to be deleted
3849 -- and new record should be created
3850
3851 TmpDayTab(i).action_flag := 'DN';
3852 TmpUpdTab(u_in) := p_DbHdrTab(d_in);
3853 TmpUpdTab(u_in).CAPACITY_QUANTITY := NULL;
3854 TmpUpdTab(u_in).OVERCOMMITMENT_QTY := NULL;
3855 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
3856 TmpUpdTab(u_in).OVERCOMMITMENT_QUANTITY := NULL;
3857 -- End fix for bug 2504222
3858 TmpUpdTab(u_in).OVERPROVISIONAL_QTY := NULL;
3859 TmpUpdTab(u_in).OVER_PROV_CONF_QTY := NULL;
3860 TmpUpdTab(u_in).CONFIRMED_QTY := NULL;
3861 TmpUpdTab(u_in).PROVISIONAL_QTY := NULL;
3862 TmpUpdTab(u_in).item_quantity := 0;
3863 TmpUpdTab(u_in).delete_flag := 'Y';
3864 u_in := u_in + 1;
3865
3866 ELSIF (
3867 TmpDayTab(i).item_quantity <>
3868 p_DbHdrTab(d_in).item_quantity
3869 ) THEN
3870
3871 print_message('Req : in_else 3b');
3872 lv_call_pos := 'Req : in_else 3b';
3873 -- Quantity has changed.
3874 -- Existing detail record should be reversed
3875 -- (if already summarized)and new record created
3876 -- with same forecast item id and next line number
3877 -- or updated ( if not summarized)
3878 -- Summarization check is done in detail processing
3879 -- In header, quantity is updated
3880
3881 TmpDayTab(i).action_flag := 'RN';
3882 TmpDayTab(i).expenditure_org_id :=
3883 p_AsgnDtlRec.expenditure_org_id;
3884 TmpDayTab(i).expenditure_organization_id :=
3885 p_AsgnDtlRec.expenditure_organization_id;
3886 TmpDayTab(i).tp_amount_type :=
3887 p_AsgnDtlRec.fcst_tp_amount_type;
3888 TmpDayTab(i).project_id :=
3889 p_AsgnDtlRec.project_id;
3890 TmpDayTab(i).resource_id :=
3891 p_AsgnDtlRec.resource_id;
3892 TmpDayTab(i).project_org_id := lv_project_org_id;
3893 TmpUpdTab(u_in) := p_DbHdrTab(d_in);
3894 TmpUpdTab(u_in).CAPACITY_QUANTITY :=
3895 TmpDayTab(i).CAPACITY_QUANTITY;
3896 TmpUpdTab(u_in).OVERCOMMITMENT_QTY :=
3897 TmpDayTab(i).OVERCOMMITMENT_QTY;
3898 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
3899 TmpUpdTab(u_in).OVERCOMMITMENT_QUANTITY :=
3900 TmpDayTab(i).OVERCOMMITMENT_QUANTITY;
3901 -- End fix for bug 2504222
3902 TmpUpdTab(u_in).OVERPROVISIONAL_QTY :=
3903 TmpDayTab(i).OVERPROVISIONAL_QTY;
3904 TmpUpdTab(u_in).OVER_PROV_CONF_QTY :=
3905 TmpDayTab(i).OVER_PROV_CONF_QTY;
3906 TmpUpdTab(u_in).CONFIRMED_QTY :=
3907 TmpDayTab(i).CONFIRMED_QTY;
3908 TmpUpdTab(u_in).PROVISIONAL_QTY :=
3909 TmpDayTab(i).PROVISIONAL_QTY;
3910 TmpUpdTab(u_in).item_quantity :=
3911 TmpDayTab(i).item_quantity;
3912 TmpUpdTab(u_in).asgmt_sys_status_code :=
3913 TmpDayTab(i).asgmt_sys_status_code;
3914
3915 u_in := u_in + 1;
3916
3917 ELSE
3918
3919 print_message('Req : in_else 3d');
3920 lv_call_pos := 'Req : in_else 3d';
3921 -- Detail record should be checked for any changes
3922 -- in its values. No change in header
3923
3924 TmpDayTab(i).action_flag := 'C';
3925 TmpDayTab(i).expenditure_org_id :=
3926 p_AsgnDtlRec.expenditure_org_id;
3927 TmpDayTab(i).project_org_id := lv_project_org_id;
3928 TmpDayTab(i).tp_amount_type := p_AsgnDtlRec.fcst_tp_amount_type;
3929 TmpDayTab(i).project_id := p_AsgnDtlRec.project_id;
3930 TmpDayTab(i).resource_id := p_AsgnDtlRec.resource_id;
3931 TmpDayTab(i).EXPENDITURE_ORGANIZATION_ID := p_AsgnDtlRec.EXPENDITURE_ORGANIZATION_ID;
3932
3933 END IF;
3934 d_in := d_in + 1;
3935 END IF;
3936
3937 END IF;
3938
3939 lv_call_pos := 'Req : data create';
3940 IF (TmpDayTab(i).action_flag IN ('N', 'DN','E') AND
3941 (
3942 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) > 0 OR
3943 NVL(TmpDayTab(i).OVERCOMMITMENT_QTY,0) > 0 OR
3944 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
3945 NVL(TmpDayTab(i).OVERCOMMITMENT_QUANTITY,0) > 0 OR
3946 -- End fix for bug 2504222
3947 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) > 0 OR
3948 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) > 0 OR
3949 NVL(TmpDayTab(i).CONFIRMED_QTY,0) > 0 OR
3950 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) > 0 OR
3951 TmpDayTab(i).item_quantity > 0
3952 ))THEN
3953
3954 print_message('Req : in if data create');
3955 lv_call_pos := 'Req : in if data create';
3956 IF TmpDayTab(i).action_flag <> 'E' THEN
3957
3958 lv_forecast_item_id :=
3959 PA_FORECAST_ITEMS_UTILS.get_next_forecast_item_id;
3960
3961 TmpDayTab(i).forecast_item_id := lv_forecast_item_id;
3962
3963 ELSE
3964
3965 lv_forecast_item_id := TmpDayTab(i).forecast_item_id;
3966
3967 END IF;
3968
3969 TmpHdrRec.forecast_item_id := lv_forecast_item_id;
3970 TmpHdrRec.forecast_item_type := 'R';
3971 TmpHdrRec.project_org_id := lv_project_org_id;
3972 TmpDayTab(i).project_org_id := lv_project_org_id;
3973 TmpDayTab(i).expenditure_org_id :=
3974 p_AsgnDtlRec.expenditure_org_id;
3975 TmpDayTab(i).expenditure_organization_id :=
3976 p_AsgnDtlRec.expenditure_organization_id;
3977 TmpDayTab(i).tp_amount_type :=
3978 p_AsgnDtlRec.fcst_tp_amount_type;
3979 TmpDayTab(i).project_id :=
3980 p_AsgnDtlRec.project_id;
3981 TmpDayTab(i).resource_id :=
3982 p_AsgnDtlRec.resource_id;
3983 TmpHdrRec.expenditure_org_id :=
3984 p_AsgnDtlRec.expenditure_org_id;
3985 TmpHdrRec.project_organization_id :=
3986 lv_project_orgn_id;
3987 TmpHdrRec.expenditure_organization_id :=
3988 p_AsgnDtlRec.expenditure_organization_id;
3989 TmpHdrRec.project_id := p_AsgnDtlRec.project_id;
3990 TmpHdrRec.project_type_class := lv_project_type_class;
3991 TmpHdrRec.person_id := NULL;
3992 TmpHdrRec.resource_id := p_AsgnDtlRec.resource_id;
3993 TmpHdrRec.borrowed_flag := lv_borrowed_flag;
3994 TmpHdrRec.assignment_id := p_AsgnDtlRec.assignment_id;
3995 TmpHdrRec.item_date := TmpDayTab(i).item_date;
3996 TmpHdrRec.item_UOM := 'HOURS';
3997 TmpHdrRec.item_quantity := TmpDayTab(i).item_quantity;
3998 TmpHdrRec.pvdr_period_set_name :=
3999 lv_pvdr_period_set_name;
4000 TmpHdrRec.asgmt_sys_status_code := TmpDayTab(i).asgmt_sys_status_code;
4001 TmpHdrRec.capacity_quantity := null;
4002 TmpHdrRec.OVERPROVISIONAL_QTY := NULL;
4003 TmpHdrRec.OVER_PROV_CONF_QTY := NULL;
4004 TmpHdrRec.CONFIRMED_QTY := NULL;
4005 TmpHdrRec.PROVISIONAL_QTY := NULL;
4006 TmpHdrRec.overcommitment_quantity := null;
4007 TmpHdrRec.availability_quantity := null;
4008 TmpHdrRec.overcommitment_flag := null;
4009 TmpHdrRec.availability_flag := null;
4010 TmpHdrRec.tp_amount_type := p_AsgnDtlRec.fcst_tp_amount_type;
4011 print_message('lv_rejection_code := NULL');
4012 lv_error_flag := 'N';
4013 lv_rejection_code := NULL;
4014
4015 lv_call_pos := 'Req : pvdrpa';
4016 IF (nvl(ld_pvdrpa_startdate_tab.count,0) = 0) THEN
4017
4018 lv_error_flag := 'Y';
4019 lv_rejection_code := 'PVDR_PA_PRD_NAME_NOT_FOUND';
4020
4021 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
4022 trunc(ld_pvdrpa_startdate_tab(lv_pvpa_index)) AND
4023 trunc(ld_pvdrpa_enddate_tab(lv_pvpa_index))) THEN
4024
4025 --print_message('JM:10');
4026 lv_prev_index := lv_pvpa_index;
4027
4028 LOOP
4029
4030 IF lv_pvpa_index > nvl(ld_pvdrpa_startdate_tab.COUNT,0) THEN
4031
4032 lv_error_flag := 'Y';
4033 lv_rejection_code := 'PVDR_PA_PRD_NAME_NOT_FOUND';
4034
4035 END IF;
4036
4037 EXIT WHEN lv_error_flag = 'Y' OR
4038 ( (trunc(TmpHdrRec.item_date) >=
4039 trunc(ld_pvdrpa_startdate_tab(lv_pvpa_index))) AND
4040 (trunc(TmpHdrRec.item_date) <=
4041 trunc(ld_pvdrpa_enddate_tab(lv_pvpa_index))));
4042
4043 lv_pvpa_index := lv_pvpa_index + 1;
4044 print_message('JM:11');
4045
4046 END LOOP;
4047
4048 END IF;
4049
4050 IF lv_error_flag = 'Y' THEN
4051
4052 lv_pvpa_index := lv_prev_index;
4053 TmpHdrRec.pvdr_pa_period_name := '-99';
4054
4055 ELSE
4056
4057 TmpHdrRec.pvdr_pa_period_name :=
4058 lv_pvdrpa_name_tab(lv_pvpa_index);
4059 END IF;
4060
4061 print_message('lv_error_flag := N');
4062
4063 lv_error_flag := 'N';
4064
4065 lv_call_pos := 'Req : pvdrgl';
4066 IF (nvl(ld_pvdrgl_startdate_tab.count,0) = 0) THEN
4067
4068 lv_error_flag := 'Y';
4069
4070 IF (lv_rejection_code IS NULL) THEN
4071
4072 lv_rejection_code := 'PVDR_GL_PRD_NAME_NOT_FOUND';
4073
4074 END IF;
4075
4076 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
4077 trunc(ld_pvdrgl_startdate_tab(lv_pvgl_index)) AND
4078 trunc(ld_pvdrgl_enddate_tab(lv_pvgl_index))) THEN
4079
4080 print_message('JM:11');
4081 lv_prev_index := lv_pvgl_index;
4082
4083 LOOP
4084
4085 IF lv_pvgl_index > ld_pvdrgl_startdate_tab.COUNT THEN
4086
4087 lv_error_flag := 'Y';
4088
4089 IF (lv_rejection_code IS NULL) THEN
4090
4091 lv_rejection_code :=
4092 'PVDR_GL_PRD_NAME_NOT_FOUND';
4093
4094 END IF;
4095
4096 END IF;
4097
4098 EXIT WHEN lv_error_flag = 'Y' OR
4099 ((trunc(TmpHdrRec.item_date) >=
4100 trunc(ld_pvdrgl_startdate_tab(lv_pvgl_index))) AND
4101 (trunc(TmpHdrRec.item_date) <=
4102 trunc(ld_pvdrgl_enddate_tab(lv_pvgl_index))));
4103
4104 print_message('JM:13');
4105 lv_pvgl_index := lv_pvgl_index + 1;
4106
4107 END LOOP;
4108
4109 END IF;
4110
4111 IF lv_error_flag = 'Y' THEN
4112
4113 lv_pvgl_index := lv_prev_index;
4114 TmpHdrRec.pvdr_gl_period_name := '-99';
4115
4116 ELSE
4117
4118 TmpHdrRec.pvdr_gl_period_name :=
4119 lv_pvdrgl_name_tab(lv_pvgl_index);
4120
4121 END IF;
4122
4123 TmpHdrRec.rcvr_period_set_name :=
4124 lv_rcvr_period_set_name;
4125
4126 print_message('lv_error_flag := N 15');
4127 lv_error_flag := 'N';
4128
4129 lv_call_pos := 'Req : rcvrpa';
4130 IF (ld_rcvrpa_startdate_tab.count = 0) THEN
4131
4132 lv_error_flag := 'Y';
4133
4134 IF (lv_rejection_code IS NULL) THEN
4135
4136 lv_rejection_code := 'RCVR_PA_PRD_NAME_NOT_FOUND';
4137
4138 END IF;
4139
4140 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
4141 trunc(ld_rcvrpa_startdate_tab(lv_rcpa_index)) AND
4142 trunc(ld_rcvrpa_enddate_tab(lv_rcpa_index))) THEN
4143
4144 print_message('JM:14');
4145 lv_prev_index := lv_rcpa_index;
4146
4147 LOOP
4148 IF lv_rcpa_index > ld_rcvrpa_startdate_tab.COUNT THEN
4149
4150 lv_error_flag := 'Y';
4151
4152 IF (lv_rejection_code IS NULL) THEN
4153
4154 lv_rejection_code :=
4155 'RCVR_PA_PRD_NAME_NOT_FOUND';
4156
4157 END IF;
4158
4159 END IF;
4160
4161 EXIT WHEN lv_error_flag = 'Y' OR
4162 ( (trunc(TmpHdrRec.item_date) >=
4163 trunc(ld_rcvrpa_startdate_tab(lv_rcpa_index))) AND
4164 (trunc(TmpHdrRec.item_date) <=
4165 trunc(ld_rcvrpa_enddate_tab(lv_rcpa_index))));
4166
4167 print_message('JM:15');
4168 lv_rcpa_index := lv_rcpa_index + 1;
4169
4170 END LOOP;
4171
4172 END IF;
4173
4174 IF lv_error_flag = 'Y' THEN
4175
4176 lv_rcpa_index := lv_prev_index;
4177 TmpHdrRec.rcvr_pa_period_name := '-99';
4178
4179 ELSE
4180
4181 TmpHdrRec.rcvr_pa_period_name :=
4182 lv_rcvrpa_name_tab(lv_rcpa_index);
4183 END IF;
4184
4185 print_message('lv_error_flag := N 20');
4186 lv_error_flag := 'N';
4187
4188 lv_call_pos := 'Req : rcvrgl';
4189 IF (ld_rcvrgl_startdate_tab.count = 0) THEN
4190
4191 lv_error_flag := 'Y';
4192
4193 IF (lv_rejection_code IS NULL) THEN
4194
4195 lv_rejection_code := 'RCVR_GL_PRD_NAME_NOT_FOUND';
4196
4197 END IF;
4198
4199 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
4200 trunc(ld_rcvrgl_startdate_tab(lv_rcgl_index)) AND
4201 trunc(ld_rcvrgl_enddate_tab(lv_rcgl_index))) THEN
4202
4203 lv_prev_index := lv_rcgl_index;
4204 print_message('JM:16');
4205
4206 LOOP
4207 IF lv_rcgl_index > ld_rcvrgl_startdate_tab.COUNT THEN
4208
4209 lv_error_flag := 'Y';
4210
4211 IF (lv_rejection_code IS NULL) THEN
4212
4213 lv_rejection_code :=
4214 'RCVR_GL_PRD_NAME_NOT_FOUND';
4215
4216 END IF;
4217
4218 END IF;
4219
4220 EXIT WHEN lv_error_flag = 'Y' OR
4221 ( (trunc(TmpHdrRec.item_date) >=
4222 trunc(ld_rcvrgl_startdate_tab(lv_rcgl_index))) AND
4223 (trunc(TmpHdrRec.item_date) <=
4224 trunc(ld_rcvrgl_enddate_tab(lv_rcgl_index))));
4225
4226 print_message('JM:17');
4227 lv_rcgl_index := lv_rcgl_index + 1;
4228
4229 END LOOP;
4230
4231
4232 END IF;
4233
4234 IF lv_error_flag = 'Y' THEN
4235
4236 lv_rcgl_index := lv_prev_index;
4237 TmpHdrRec.rcvr_gl_period_name := '-99';
4238
4239 ELSE
4240
4241 TmpHdrRec.rcvr_gl_period_name :=
4242 lv_rcvrgl_name_tab(lv_rcgl_index);
4243 END IF;
4244
4245
4246 lv_call_pos := 'Req : wkdtrange';
4247 IF (trunc(TmpHdrRec.item_date) NOT BETWEEN
4248 trunc(lv_WeekDateRange_Tab(lv_wk_index).week_start_date)
4249 AND
4250 trunc(lv_WeekDateRange_Tab(lv_wk_index).week_end_date))
4251 THEN
4252
4253 print_message('JM:18');
4254 lv_prev_index := lv_wk_index;
4255
4256 LOOP
4257 IF lv_wk_index > lv_WeekDateRange_Tab.COUNT THEN
4258
4259 lv_error_flag := 'Y';
4260 lv_wk_index := lv_prev_index;
4261
4262 END IF;
4263 print_message('JM:19');
4264
4265 EXIT WHEN lv_error_flag = 'Y' OR
4266 ((trunc(TmpHdrRec.item_date) >=
4267 trunc(
4268 lv_WeekDateRange_Tab(lv_wk_index).week_start_date))
4269 AND
4270 (trunc(TmpHdrRec.item_date) <=
4271 trunc(
4272 lv_WeekDateRange_Tab(lv_wk_index).week_end_date)));
4273
4274 lv_wk_index := lv_wk_index + 1;
4275
4276 print_message('JM:20');
4277 END LOOP;
4278
4279 print_message('JM:21');
4280 END IF;
4281
4282 print_message('JM:22');
4283 TmpHdrRec.global_exp_period_end_date :=
4284 lv_WeekDateRange_Tab(lv_wk_index).week_end_date;
4285
4286 TmpHdrRec.expenditure_type :=
4287 p_AsgnDtlRec.expenditure_type;
4288 TmpHdrRec.expenditure_type_class :=
4289 p_AsgnDtlRec.expenditure_type_class;
4290 TmpHdrRec.cost_rejection_code := NULL;
4291 TmpHdrRec.rev_rejection_code := NULL;
4292 TmpHdrRec.Tp_rejection_code := NULL;
4293 TmpHdrRec.Burden_rejection_code := NULL;
4294 TmpHdrRec.Other_rejection_code := lv_rejection_code;
4295 TmpHdrRec.Delete_Flag := 'N';
4296 TmpHdrRec.Provisional_flag :=
4297 TmpDayTab(i).provisional_flag;
4298 TmpHdrRec.asgmt_sys_status_code := TmpDayTab(i).asgmt_sys_status_code;
4299
4300 IF (lv_rejection_code IS NOT NULL ) THEN
4301
4302 TmpHdrRec.Error_Flag := 'Y';
4303 TmpDayTab(i).Error_Flag := 'Y';
4304
4305 ELSE
4306
4307 print_message('TmpHdrRec.Error_Flag := N 25');
4308 TmpHdrRec.Error_Flag := 'N';
4309 TmpHdrRec.Other_rejection_code := NULL;
4310
4311 END IF;
4312
4313 IF TmpDayTab(i).action_flag IN ('N','DN') THEN
4314
4315 print_message('JM:23');
4316 TmpInsTab(i_in) := TmpHdrRec;
4317 i_in := i_in + 1;
4318
4319 ELSE
4320
4321 print_message('JM:24');
4322 TmpDayTab(i).action_flag := 'RN';
4323 TmpUpdTab(u_in) := TmpHdrRec;
4324 u_in := u_in + 1;
4325
4326 END IF ;
4327
4328 Print_message('***********');
4329 Print_message(
4330 ' item_date :' || TmpHdrRec.item_date);
4331 /*
4332 Print_message(
4333 'fct_item_id:' || TmpHdrRec.forecast_item_id ||
4334 ' fct_itm_typ:' || TmpHdrRec.forecast_item_type ||
4335 ' prj_org_id:' || TmpHdrRec.project_org_id ||
4336 ' exp_org_id:' || TmpHdrRec.expenditure_org_id||
4337 chr(10)|| 'exp_orgn_id:' ||
4338 TmpHdrRec.expenditure_organization_id ||
4339 ' prj_orgn_id:' ||
4340 TmpHdrRec.project_organization_id ||
4341 ' prj_id:' || TmpHdrRec.project_id);
4342
4343 Print_message(
4344 'prj_typ_cls:' || TmpHdrRec.project_type_class ||
4345 ' person_id:' || TmpHdrRec.person_id||
4346 ' res_id:' || TmpHdrRec.resource_id ||
4347 ' brw_flg:' || TmpHdrRec.borrowed_flag ||
4348 ' asgn_id:' || TmpHdrRec.assignment_id ||
4349 ' item_uom:' || TmpHdrRec.item_uom ||
4350 ' itm_qty:' || TmpHdrRec.item_quantity);
4351
4352 Print_message(
4353 'pvd_set_nme:' || TmpHdrRec.pvdr_period_set_name ||
4354 ' pvd_pa_name:' ||
4355 TmpHdrRec.pvdr_pa_period_name ||
4356 chr(10) || 'pvd_gl_name:' ||
4357 TmpHdrRec.pvdr_gl_period_name ||
4358 ' rcv_set_nme:' ||
4359 TmpHdrRec.rcvr_period_set_name ||
4360 chr(10) || 'rcv_pa_name:' ||
4361 TmpHdrRec.rcvr_pa_period_name ||
4362 ' rcv_gl_name:' ||
4363 TmpHdrRec.rcvr_gl_period_name ||
4364 chr(10) || 'glb_end_dt:' ||
4365 TmpHdrRec.global_exp_period_end_date);
4366
4367 Print_message(
4368 'exp_type:' || TmpHdrRec.expenditure_type ||
4369 ' exp_typ_cls:' ||
4370 TmpHdrRec.expenditure_type_class ||
4371 chr(10) || 'oth_rej_cde:' ||
4372 TmpHdrRec.other_rejection_code ||
4373 ' Del_flag:' || TmpHdrRec.delete_flag ||
4374 ' Err_flag:' || TmpHdrRec.error_flag ||
4375 ' Prv_flag:' || TmpHdrRec.provisional_flag);
4376 */
4377
4378 END IF;
4379 END IF;
4380 END LOOP;
4381 end if;
4382
4383 x_FIHdrInsTab.Delete;
4384 x_FIHdrUpdTab.Delete;
4385
4386 x_FIHdrInsTab := TmpInsTab;
4387 x_FIHdrUpdTab := TmpUpdTab;
4388 p_FIDayTab := TmpDayTab;
4389
4390 Print_message('Leaving Build_FI_Hdr_Req');
4391
4392 PA_DEBUG.Reset_Err_Stack;
4393
4394 x_return_status := lv_return_status;
4395
4396 EXCEPTION
4397
4398
4399 WHEN NO_DATA_FOUND THEN
4400 print_message('Failed in Build_FI_Hdr_Req api');
4401 print_message('SQLCODE'||sqlcode||sqlerrm);
4402
4403 x_msg_count := 1;
4404 x_msg_data := sqlerrm ;
4405 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4406
4407 FND_MSG_PUB.add_exc_msg
4408 (p_pkg_name =>
4409 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Req',
4410 p_procedure_name => PA_DEBUG.G_Err_Stack);
4411
4412 If x_msg_count = 1 THEN
4413 pa_interface_utils_pub.get_messages
4414 (p_encoded => FND_API.G_TRUE,
4415 p_msg_index => 1,
4416 p_msg_count => x_msg_count,
4417 p_msg_data => x_msg_data,
4418 p_data => l_data , -- 4537865
4419 p_msg_index_out => l_msg_index_out );
4420 x_msg_data := l_data ; -- 4537865
4421 End If;
4422 Print_message(x_msg_data);
4423 Print_message(lv_call_pos);
4424
4425 RAISE;
4426
4427
4428 WHEN OTHERS THEN
4429
4430 x_msg_count := 1;
4431 x_msg_data := sqlerrm;
4432 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4433
4434 FND_MSG_PUB.add_exc_msg
4435 (p_pkg_name =>
4436 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Req',
4437 p_procedure_name => PA_DEBUG.G_Err_Stack);
4438
4439 If x_msg_count = 1 THEN
4440 pa_interface_utils_pub.get_messages
4441 (p_encoded => FND_API.G_TRUE,
4442 p_msg_index => 1,
4443 p_msg_count => x_msg_count,
4444 p_msg_data => x_msg_data,
4445 p_data => l_data,
4446 p_msg_index_out => l_msg_index_out );
4447 x_msg_data := l_data ; -- 4537865
4448 End If;
4449 Print_message(x_msg_data);
4450 Print_message(lv_call_pos);
4451
4452 RAISE;
4453
4454 END Build_FI_Hdr_Req;
4455
4456 /* ---------------------------------------------------------------------
4457 | Procedure : Build_FI_Dtl_Req
4458 | Purpose : To create new/modified forecast item detail(Requirement)
4459 | record FOR the item DATEs that are built IN the p_FIDayTab
4460 | Parameters : p_AsgnDtlRec - Assignment details
4461 | p_DBDtlTab - Holds forecast item detail records which are
4462 | already existing
4463 | p_FIDayTab - Holds all item_dates,item_quantity,
4464 | status_code FOR the current run.
4465 | action_flag component of this tab already indicates
4466 | (By Header Processing) the following :
4467 | a) N : New record - item_date does not exist
4468 | b) DN : Delete AND create new -
4469 | item DATE exists but expenditure OU/
4470 | expenditure organization/expenditure type/
4471 | expenditure type class/ borrowed flag has
4472 | changed.
4473 | Existing record is reversed(deleted) AND new
4474 | record is created
4475 | c) RN : Reverse AND create new -
4476 | Quantity has changed.
4477 | IN header : quantity is updated.
4478 | IN detail :
4479 | IF summarized existing line should be reversed
4480 | AND new line created
4481 | IF not summarized existing line should be
4482 | updated to reflect new quantity
4483 | d) C : No change IN header
4484 | Check FOR any changes IN detail record for
4485 | person_billable_flag, provisional_flag,
4486 | work_type OR resource_type
4487 | x_FIDtlInsTab - Will RETURN all forecast item detail records
4488 | that are new
4489 | x_FIDtlUpdTab - Will RETURN all forecast item detail records
4490 | that are modified
4491 | x_return_status -
4492 | x_msg_count -
4493 | x_msg_data -
4494 +----------------------------------------------------------------------*/
4495
4496 PROCEDURE Build_FI_Dtl_Req(
4497 p_AsgnDtlRec IN PA_FORECAST_GLOB.AsgnDtlRecord,
4498 p_DBDtlTab IN PA_FORECAST_GLOB.FIDtlTabTyp,
4499 p_FIDayTab IN PA_FORECAST_GLOB.FIDayTabTyp,
4500 x_FIDtlInsTab OUT NOCOPY PA_FORECAST_GLOB.FIDtlTabTyp, /* 2674619 - Nocopy change */
4501 x_FIDtlUpdTab OUT NOCOPY PA_FORECAST_GLOB.FIDtlTabTyp, /* 2674619 - Nocopy change */
4502 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
4503 x_msg_count OUT NOCOPY NUMBER, -- 4537865
4504 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
4505
4506
4507 l_msg_index_out NUMBER;
4508 l_data VARCHAR2(2000) ; -- 4537865
4509 d_in NUMBER := 1; -- index FOR p_dbDtlTab;
4510 TmpDayTab PA_FORECAST_GLOB.FIDayTabTyp;
4511 TmpInsTab PA_FORECAST_GLOB.FIDtlTabTyp;
4512 i_in NUMBER := 1; -- index FOR TmpDayTab;
4513 TmpUpdTab PA_FORECAST_GLOB.FIDtlTabTyp;
4514 u_in NUMBER := 1; -- index FOR TmpDayTab;
4515 TmpDtlRec PA_FORECAST_GLOB.FIDtlRecord;
4516
4517 lv_billable_flag VARCHAR2(1);
4518 l_resutilweighted NUMBER;
4519 l_orgutilweighted NUMBER;
4520 l_resutilcategoryid NUMBER;
4521 l_orgutilcategoryid NUMBER;
4522
4523 lv_inc_forecast_flag VARCHAR2(3) := 'N';
4524 lv_inc_util_flag VARCHAR2(3) := 'N';
4525 lv_provisional_flag VARCHAR2(3);
4526 lv_next_line_num NUMBER;
4527 lv_new_fcast_sum_code VARCHAR2(1);
4528 lv_new_util_sum_code VARCHAR2(1);
4529 lv_amount_type_id NUMBER;
4530 l_ReduceCapacityFlag VARCHAR2(1);
4531 lv_return_status VARCHAR2(30);
4532
4533
4534 BEGIN
4535 lv_return_status := FND_API.G_RET_STS_SUCCESS;
4536
4537 PA_DEBUG.Init_err_stack(
4538 'PA_FORECASTITEM_PVT.Build_FI_Dtl_Req');
4539
4540 Print_message( 'Entering Build_FI_Dtl_Req');
4541
4542 TmpInsTab.Delete;
4543 TmpUpdTab.Delete;
4544 TmpDayTab.Delete;
4545 TmpDayTab := p_FIDayTab;
4546
4547 Print_message(
4548 'Req - Get_work_type_details');
4549
4550 PA_FORECAST_ITEMS_UTILS.get_work_type_details(
4551 p_AsgnDtlRec.work_type_id,
4552 lv_billable_flag,
4553 l_resutilweighted,
4554 l_orgutilweighted,
4555 l_resutilcategoryid,
4556 l_orgutilcategoryid,
4557 l_ReduceCapacityFlag);
4558
4559 lv_amount_type_id := get_AmountTypeID;
4560
4561 if (TmpDayTab.count <> 0) then
4562 FOR i IN TmpDayTab.FIRST..TmpDayTab.LAST LOOP
4563 IF TmpDayTab.exists(i) then
4564
4565 lv_inc_forecast_flag := TmpDayTab(i).include_in_forecast;
4566
4567 lv_inc_util_flag := 'X';
4568
4569 IF lv_inc_forecast_flag IN ('NO', 'N') THEN
4570
4571 lv_new_fcast_sum_code := 'X';
4572
4573 ELSE
4574
4575 lv_new_fcast_sum_code := 'N';
4576
4577 END IF;
4578
4579 IF lv_inc_util_flag IN ('NO', 'N') THEN
4580
4581 lv_new_util_sum_code := 'X';
4582
4583 ELSE
4584
4585 lv_new_util_sum_code := 'N';
4586
4587 END IF;
4588
4589 lv_provisional_flag :=
4590 TmpDayTab(i).provisional_flag;
4591
4592 lv_next_line_num := 1;
4593
4594 IF d_in <= p_DBDtlTab.COUNT THEN
4595
4596 IF trunc(TmpDayTab(i).item_date) <
4597 trunc(p_DBDtlTab(d_in).item_date) THEN
4598
4599 lv_next_line_num := 1;
4600
4601 -- New record
4602
4603 ELSIF trunc(TmpDayTab(i).item_date) =
4604 trunc(p_dbDtlTab(d_in).item_date) THEN
4605 -- Record exists
4606
4607 IF TmpDayTab(i).action_flag = 'C' THEN
4608
4609 -- Check IF there are changes in
4610 -- provisional_flag, person_billable, resource_type
4611 -- work_type_id, summarized_code
4612
4613 IF (p_DBDtlTab(d_in).provisional_flag <>
4614 lv_provisional_flag) OR
4615 (NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y')
4616 IN ('N', 'Y')
4617 AND lv_new_fcast_sum_code = 'X') OR
4618 (p_DBDtlTab(d_in).forecast_summarized_code = 'X'
4619 AND lv_new_fcast_sum_code = 'N') OR
4620 (NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y')
4621 IN ('N', 'Y')
4622 AND lv_new_util_sum_code = 'X') OR
4623 (NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y') = 'X'
4624 AND lv_new_util_sum_code = 'N') OR
4625
4626 (NVL(p_DBDtlTab(d_in).util_summarized_code,'Y')
4627 IN ('N', 'Y')
4628 AND lv_new_util_sum_code = 'X') OR
4629 (p_DBDtlTab(d_in).util_summarized_code = 'X'
4630 AND lv_new_util_sum_code = 'N') OR
4631 (p_DBDtlTab(d_in).work_type_id <>
4632 p_AsgnDtlRec.work_type_id) THEN
4633
4634 TmpDayTab(i).action_flag := 'RN';
4635
4636 ELSE
4637
4638 TmpDayTab(i).action_flag := 'I';
4639
4640 END IF;
4641
4642 END IF;
4643
4644
4645 IF TmpDayTab(i).action_flag IN ('DN','D') THEN
4646
4647 -- Change IN header attribute values
4648 -- update existing line FOR flags
4649 -- Reverse detail line IF forecast/util
4650 --summarization done
4651 -- IF summ not done IN existing line;
4652 -- item_quantity to zero
4653 -- net_zero flag to Y
4654 -- forecast/util summ_flag = 'X'
4655 -- New line generation is done at the end
4656
4657 lv_next_line_num := 1;
4658
4659 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y')
4660 IN ('N', 'X', 'E')
4661 AND NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y')
4662 IN ('N', 'X', 'E')
4663 AND NVL(p_DBDtlTab(d_in).util_summarized_code,'Y')
4664 IN ('N', 'X', 'E') THEN
4665
4666 TmpUpdTab(u_in) := p_dbDtlTab(d_in);
4667 TmpUpdTab(u_in).forecast_summarized_code := 'X';
4668 TmpUpdTab(u_in).PJI_SUMMARIZED_FLAG := 'X';
4669 TmpUpdTab(u_in).util_summarized_code := 'X';
4670 TmpUpdTab(u_in).CAPACITY_QUANTITY := NULL;
4671 TmpUpdTab(u_in).OVERCOMMITMENT_QTY := NULL;
4672 TmpUpdTab(u_in).OVERPROVISIONAL_QTY := NULL;
4673 TmpUpdTab(u_in).OVER_PROV_CONF_QTY := NULL;
4674 TmpUpdTab(u_in).CONFIRMED_QTY := NULL;
4675 TmpUpdTab(u_in).PROVISIONAL_QTY := NULL;
4676 TmpUpdTab(u_in).item_quantity := 0;
4677 TmpUpdTab(u_in).org_util_weighted :=0;
4678 TmpUpdTab(u_in).resource_util_weighted :=0;
4679 u_in := u_in + 1;
4680
4681 ELSE
4682
4683 TmpUpdTab(u_in) := p_DBDtlTab(d_in);
4684 IF (
4685 nvl(p_DBDtlTab(d_in).CAPACITY_QUANTITY,0) > 0 OR
4686 nvl(p_DBDtlTab(d_in).OVERCOMMITMENT_QTY,0) > 0 OR
4687 nvl(p_DBDtlTab(d_in).OVERPROVISIONAL_QTY,0) > 0 OR
4688 nvl(p_DBDtlTab(d_in).OVER_PROV_CONF_QTY,0) > 0 OR
4689 nvl(p_DBDtlTab(d_in).CONFIRMED_QTY,0) > 0 OR
4690 nvl(p_DBDtlTab(d_in).PROVISIONAL_QTY,0) > 0 OR
4691 nvl(p_DBDtlTab(d_in).item_quantity,0) > 0
4692 )THEN
4693
4694 -- Generate reverse line
4695 TmpInsTab(i_in) := p_DBDtlTab(d_in);
4696 TmpInsTab(i_in).line_num :=
4697 p_DBDtlTab(d_in).line_num + 1;
4698 IF (NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) = 0) THEN
4699 TmpInsTab(i_in).CAPACITY_QUANTITY := NULL;
4700 ELSE
4701 TmpInsTab(i_in).CAPACITY_QUANTITY := NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) * -1;
4702 END IF;
4703 IF (NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) = 0) THEN
4704 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NULL;
4705 ELSE
4706 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) * -1;
4707 END IF;
4708 IF (NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) = 0) THEN
4709 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NULL;
4710 ELSE
4711 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) * -1;
4712 END IF;
4713 IF (NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) = 0) THEN
4714 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NULL;
4715 ELSE
4716 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) * -1;
4717 END IF;
4718 IF (NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) = 0) THEN
4719 TmpInsTab(i_in).CONFIRMED_QTY := NULL;
4720 ELSE
4721 TmpInsTab(i_in).CONFIRMED_QTY := NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) * -1;
4722 END IF;
4723 IF (NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) = 0) THEN
4724 TmpInsTab(i_in).PROVISIONAL_QTY := NULL;
4725 ELSE
4726 TmpInsTab(i_in).PROVISIONAL_QTY := NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) * -1;
4727 END IF;
4728 TmpInsTab(i_in).item_quantity :=
4729 TmpInsTab(i_in).item_quantity * -1;
4730 TmpInsTab(i_in).resource_util_weighted :=
4731 TmpInsTab(i_in).resource_util_weighted * -1;
4732 TmpInsTab(i_in).org_util_weighted :=
4733 TmpInsTab(i_in).org_util_weighted * -1;
4734 TmpInsTab(i_in).reversed_flag := 'N';
4735 TmpInsTab(i_in).line_num_reversed :=
4736 p_DBDtlTab(d_in).line_num;
4737 TmpInsTab(i_in).net_zero_flag := 'Y';
4738
4739 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y') =
4740 'Y' THEN
4741
4742 TmpInsTab(i_in).forecast_summarized_code :=
4743 'N';
4744
4745 ELSE
4746
4747 TmpInsTab(i_in).forecast_summarized_code :=
4748 p_DBDtlTab(d_in).forecast_summarized_code;
4749
4750 END IF;
4751
4752 IF NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y') = 'Y' THEN
4753 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG := 'N';
4754 ELSE
4755 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG :=
4756 p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG;
4757 END IF;
4758
4759 IF NVL(p_DBDtlTab(d_in).util_summarized_code,'Y') = 'Y'
4760 THEN
4761
4762 TmpInsTab(i_in).util_summarized_code := 'N';
4763
4764 ELSE
4765
4766 TmpInsTab(i_in).util_summarized_code :=
4767 p_DBDtlTab(d_in).util_summarized_code;
4768
4769 END IF;
4770
4771 i_in := i_in + 1;
4772
4773
4774 -- update line
4775 TmpUpdTab(u_in).reversed_flag := 'Y';
4776
4777 END IF;
4778 TmpUpdTab(u_in).net_zero_flag := 'Y';
4779 u_in := u_in + 1;
4780
4781 END IF;
4782
4783 ELSIF TmpDayTab(i).action_flag = 'RN' THEN
4784
4785 -- No change IN header
4786 -- There is change IN item_quantity/provisional_flag/
4787 -- include IN forecast/work_type_id
4788 -- If summarization is not done
4789 -- same line to be updated with new values
4790 -- generated. Save forecast_item_id
4791
4792 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y')
4793 IN ('N', 'X', 'E')
4794 AND NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y')
4795 IN ('N', 'X', 'E')
4796 AND NVL(p_DBDtlTab(d_in).util_summarized_code,'Y')
4797 IN ('N', 'X', 'E') THEN
4798
4799 TmpDayTab(i).action_flag := 'RU';
4800 TmpDayTab(i).forecast_item_id :=
4801 p_dbDtlTab(d_in).forecast_item_id;
4802 lv_next_line_num := p_DBDtlTab(d_in).line_num;
4803
4804 ELSE
4805
4806 TmpDayTab(i).forecast_item_id :=
4807 p_dbDtlTab(d_in).forecast_item_id;
4808 TmpUpdTab(u_in) := p_DBDtlTab(d_in);
4809
4810 lv_next_line_num :=
4811 p_dbdtltab(d_in).line_num + 1;
4812
4813 IF (
4814 nvl(p_DBDtlTab(d_in).CAPACITY_QUANTITY,0) > 0 OR
4815 nvl(p_DBDtlTab(d_in).OVERCOMMITMENT_QTY,0) > 0 OR
4816 nvl(p_DBDtlTab(d_in).OVERPROVISIONAL_QTY,0) > 0 OR
4817 nvl(p_DBDtlTab(d_in).OVER_PROV_CONF_QTY,0) > 0 OR
4818 nvl(p_DBDtlTab(d_in).CONFIRMED_QTY,0) > 0 OR
4819 nvl(p_DBDtlTab(d_in).PROVISIONAL_QTY,0) > 0 OR
4820 nvl(p_dbdtltab(d_in).item_quantity,0) > 0
4821 )THEN
4822
4823 -- Generate Reverse Line
4824 TmpInsTab(i_in) := p_DBDtlTab(d_in);
4825 TmpInsTab(i_in).line_num := lv_next_line_num;
4826 lv_next_line_num := lv_next_line_num + 1;
4827 IF (NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) = 0) THEN
4828 TmpInsTab(i_in).CAPACITY_QUANTITY := NULL;
4829 ELSE
4830 TmpInsTab(i_in).CAPACITY_QUANTITY := NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) * -1;
4831 END IF;
4832 IF (NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) = 0) THEN
4833 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NULL;
4834 ELSE
4835 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) * -1;
4836 END IF;
4837 IF (NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) = 0) THEN
4838 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NULL;
4839 ELSE
4840 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) * -1;
4841 END IF;
4842 IF (NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) = 0) THEN
4843 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NULL;
4844 ELSE
4845 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) * -1;
4846 END IF;
4847 IF (NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) = 0) THEN
4848 TmpInsTab(i_in).CONFIRMED_QTY := NULL;
4849 ELSE
4850 TmpInsTab(i_in).CONFIRMED_QTY := NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) * -1;
4851 END IF;
4852 IF (NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) = 0) THEN
4853 TmpInsTab(i_in).PROVISIONAL_QTY := NULL;
4854 ELSE
4855 TmpInsTab(i_in).PROVISIONAL_QTY := NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) * -1;
4856 END IF;
4857 TmpInsTab(i_in).item_quantity :=
4858 p_DBDtlTab(d_in).item_quantity * -1;
4859 TmpInsTab(i_in).resource_util_weighted :=
4860 p_DBDtlTab(d_in).resource_util_weighted * -1;
4861 TmpInsTab(i_in).org_util_weighted :=
4862 p_DBDtlTab(d_in).org_util_weighted * -1;
4863 TmpInsTab(i_in).reversed_flag := 'N';
4864 TmpInsTab(i_in).line_num_reversed :=
4865 p_DBDtlTab(d_in).line_num;
4866 TmpInsTab(i_in).net_zero_flag := 'Y';
4867
4868 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y') =
4869 'Y' THEN
4870
4871 TmpInsTab(i_in).forecast_summarized_code :=
4872 'N';
4873 ELSE
4874
4875 TmpInsTab(i_in).forecast_summarized_code :=
4876 p_DBDtlTab(d_in).forecast_summarized_code;
4877
4878 END IF;
4879
4880 IF NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y') = 'Y' THEN
4881 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG := 'N';
4882 ELSE
4883 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG :=
4884 p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG;
4885 END IF;
4886
4887 IF NVL(p_DBDtlTab(d_in).util_summarized_code,'Y') = 'Y'
4888 THEN
4889
4890 TmpInsTab(i_in).util_summarized_code := 'N';
4891
4892 ELSE
4893
4894 TmpInsTab(i_in).util_summarized_code :=
4895 p_DBDtlTab(d_in).util_summarized_code;
4896
4897 END IF;
4898
4899 i_in := i_in + 1;
4900 -- update Line
4901 TmpUpdTab(u_in).reversed_flag := 'Y';
4902
4903 END IF;
4904
4905 TmpUpdTab(u_in).net_zero_flag := 'Y';
4906 u_in := u_in + 1;
4907
4908
4909 END IF;
4910
4911 END IF;
4912
4913 d_in := d_in + 1;
4914
4915 END IF;
4916
4917 END IF;
4918
4919 -- N New record/new line
4920 -- DN Existing record has header changes
4921 -- New record/new line
4922 -- RN Existing record detail changes
4923 -- The values are already summarized
4924 -- Create new line
4925 -- RU Existing record has detail changes
4926 -- The values are not summarized
4927 -- update existing line with new values
4928 -- All attribute values are.FIRST generated IN Tmp_rec
4929 -- IF action_flag is N,DN,RN copied to TmpInsTab
4930 -- ELSE copied to TmpUpdTab
4931
4932 IF (TmpDayTab(i).action_flag IN ('N', 'DN', 'RN','RU')) AND
4933 (
4934 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) > 0 OR
4935 NVL(TmpDayTab(i).OVERCOMMITMENT_QTY,0) > 0 OR
4936 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) > 0 OR
4937 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) > 0 OR
4938 NVL(TmpDayTab(i).CONFIRMED_QTY,0) > 0 OR
4939 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) > 0 OR
4940 TmpDayTab(i).item_quantity > 0
4941 ) THEN
4942
4943 -- create new line
4944 TmpDtlRec.forecast_item_id := TmpDayTab(i).forecast_item_id;
4945 TmpDtlRec.amount_type_id := lv_amount_type_id;
4946 TmpDtlRec.line_num := lv_next_line_num;
4947 TmpDtlRec.resource_type_code := '99';
4948 TmpDtlRec.person_billable_flag := 'N';
4949 TmpDtlRec.item_date := TmpDayTab(i).item_date;
4950 TmpDtlRec.expenditure_org_id :=
4951 TmpDayTab(i).expenditure_org_id;
4952 TmpDtlRec.expenditure_organization_id :=
4953 TmpDayTab(i).expenditure_organization_id;
4954 TmpDtlRec.project_id :=
4955 TmpDayTab(i).project_id;
4956 TmpDtlRec.resource_id :=
4957 TmpDayTab(i).resource_id;
4958
4959 TmpDtlRec.project_org_id := TmpDayTab(i).project_org_id;
4960 TmpDtlRec.item_uom := 'HOURS';
4961 TmpDtlRec.CAPACITY_QUANTITY := TmpDayTab(i).CAPACITY_QUANTITY;
4962 TmpDtlRec.OVERCOMMITMENT_QTY := TmpDayTab(i).OVERCOMMITMENT_QTY;
4963 TmpDtlRec.OVERPROVISIONAL_QTY := TmpDayTab(i).OVERPROVISIONAL_QTY;
4964 TmpDtlRec.OVER_PROV_CONF_QTY := TmpDayTab(i).OVER_PROV_CONF_QTY;
4965 TmpDtlRec.CONFIRMED_QTY := TmpDayTab(i).CONFIRMED_QTY;
4966 TmpDtlRec.PROVISIONAL_QTY := TmpDayTab(i).PROVISIONAL_QTY;
4967 TmpDtlRec.item_quantity := TmpDayTab(i).item_quantity;
4968 TmpDtlRec.pvdr_acct_curr_code := NULL;
4969 TmpDtlRec.pvdr_acct_amount := NULL;
4970 TmpDtlRec.rcvr_acct_curr_code := NULL;
4971 TmpDtlRec.rcvr_acct_amount := NULL;
4972 TmpDtlRec.proj_currency_code := NULL;
4973 TmpDtlRec.proj_amount := NULL;
4974 TmpDtlRec.denom_currency_code := NULL;
4975 TmpDtlRec.denom_amount := NULL;
4976 TmpDtlRec.tp_amount_type :=
4977 p_AsgnDtlRec.fcst_tp_amount_type;
4978 TmpDtlRec.billable_flag := lv_billable_flag;
4979 TmpDtlRec.forecast_summarized_code :=
4980 lv_new_fcast_sum_code ;
4981 TmpDtlRec.PJI_SUMMARIZED_FLAG := lv_new_util_sum_code;
4982 TmpDtlRec.util_summarized_code := lv_new_util_sum_code;
4983
4984 IF TmpDayTab(i).Error_flag = 'Y' THEN
4985
4986 TmpDtlRec.PJI_SUMMARIZED_FLAG := 'E';
4987 TmpDtlRec.util_summarized_code := 'E';
4988 TmpDtlRec.forecast_summarized_code := 'E';
4989
4990 END IF;
4991
4992 TmpDtlRec.work_type_id := p_AsgnDtlRec.work_type_id;
4993
4994 TmpDtlRec.resource_util_category_id :=
4995 l_resutilcategoryid;
4996 TmpDtlRec.org_util_category_id :=
4997 l_orgutilcategoryid;
4998 TmpDtlRec.resource_util_weighted :=
4999 TmpDayTab(i).item_quantity *
5000 l_resutilweighted/100;
5001 TmpDtlRec.org_util_weighted :=
5002 TmpDayTab(i).item_quantity *
5003 l_orgutilweighted/100;
5004 TmpDtlRec.Reduce_Capacity_Flag := l_ReduceCapacityFlag;
5005 TmpDtlRec.provisional_flag := lv_provisional_flag;
5006 TmpDtlRec.reversed_flag := 'N';
5007 TmpDtlRec.net_zero_flag := 'N';
5008 TmpDtlRec.line_num_reversed := 0;
5009
5010 IF TmpDayTab(i).action_flag = 'RU' THEN
5011
5012 TmpUpdTab(u_in) := TmpDtlRec;
5013 u_in := u_in + 1;
5014
5015 ELSE
5016
5017 TmpInsTab(i_in) := TmpDtlRec;
5018 i_in := i_in + 1;
5019
5020 END IF;
5021
5022
5023 /*
5024 Print_message('***********');
5025
5026 Print_message(
5027 'item_date:' || TmpDtlRec.item_date);
5028
5029 Print_message(
5030 'fct_item_id:' || TmpDtlRec.forecast_item_id ||
5031 ' amt_typ_id:' || TmpDtlRec.amount_type_id ||
5032 ' line_num:' || TmpDtlRec.line_num ||
5033 chr(10) || 'Res_typ_cd :' ||
5034 TmpDtlRec.resource_type_code ||
5035 ' per_bil_fl:' ||
5036 TmpDtlRec.person_billable_flag ||
5037 ' item_uom:' || TmpDtlRec.item_uom );
5038
5039 Print_message(
5040 ' item_qty:' || TmpDtlRec.item_quantity ||
5041 ' exp_org_id:' ||
5042 TmpDtlRec.expenditure_org_id ||
5043 ' prj_org_id:' ||
5044 TmpDtlRec.project_org_id ||
5045 ' tp_amt_typ:' || TmpDtlRec.tp_amount_type ||
5046 chr(10) || 'bill_flag:' || TmpDtlRec.billable_flag ||
5047 ' fcs_sum_cd:' ||
5048 TmpDtlRec.forecast_summarized_code ||
5049 ' utl_sum_cd:' ||
5050 TmpDtlRec.util_summarized_code );
5051
5052 Print_message(
5053 ' wrk_typ_id:' || TmpDtlRec.work_type_id ||
5054 ' res_utl_id:' ||
5055 TmpDtlRec.resource_util_category_id ||
5056 ' org_utl_id:' ||
5057 TmpDtlRec.org_util_category_id ||
5058 ' res_utl_wt:' ||
5059 TmpDtlRec.resource_util_weighted ||
5060 chr(10) || 'org_utl_wt:' ||
5061 TmpDtlRec.org_util_weighted ||
5062 ' prv_flag:' || TmpDtlRec.provisional_flag ||
5063 ' rev_flag:' || TmpDtlRec.reversed_flag ||
5064 ' net_zer_fl:' || TmpDtlRec.net_zero_flag ||
5065 ' ln_num_rev:' ||
5066 TmpDtlRec.line_num_reversed);
5067 */
5068
5069 END IF;
5070 END IF;
5071 END LOOP;
5072 end if;
5073
5074 x_FIDtlInsTab.Delete;
5075 x_FIDtlUpdTab.Delete;
5076
5077 x_FIDtlInsTab := TmpInsTab;
5078 x_FIDtlUpdTab := TmpUpdTab;
5079
5080
5081 Print_message('Leaving Build_FI_Dtl_Req');
5082
5083 PA_DEBUG.Reset_Err_Stack;
5084
5085 x_return_status := lv_return_status;
5086
5087 EXCEPTION
5088
5089 WHEN OTHERS THEN
5090 print_message('Failed in Build_FI_Dtl_Req api');
5091 print_message('SQLCODE'||sqlcode||sqlerrm);
5092
5093 x_msg_count := 1;
5094 x_msg_data := sqlerrm;
5095 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5096
5097 FND_MSG_PUB.add_exc_msg
5098 (p_pkg_name =>
5099 'PA_FORECASTITEM_PVT.Build_FI_Dtl_Req',
5100 p_procedure_name => PA_DEBUG.G_Err_Stack);
5101
5102 If x_msg_count = 1 THEN
5103 pa_interface_utils_pub.get_messages
5104 (p_encoded => FND_API.G_TRUE,
5105 p_msg_index => 1,
5106 p_msg_count => x_msg_count,
5107 p_msg_data => x_msg_data,
5108 p_data => l_data , -- 4537865
5109 p_msg_index_out => l_msg_index_out );
5110 x_msg_data := l_data ; -- 4537865
5111 End If;
5112 Print_message(x_msg_data);
5113
5114 RAISE;
5115
5116 END Build_FI_Dtl_Req;
5117
5118 /* ---------------------------------------------------------------------
5119 | Procedure : Generate_Assignment_FI
5120 | Purpose : To generate forecast items FOR assignment record
5121 | Parameters : p_AsgnDtlRec - Assignment Details FOR which
5122 | forecast item is to be generated
5123 | p_process_mode - Mode of Processing
5124 | a) GENERATE : New Generation
5125 | Also whenever schedule data changes
5126 | b) RECALCULATE : Whenever
5127 | i)expenditure OU Changes
5128 | ii)expenditure organization Changes
5129 | iii)expenditure type Changes
5130 | iv)expenditure type class Changes
5131 | v)Borrowed flag Changes
5132 | c) ERROR : Regeneration of Errored forecast items
5133 | by previous generation
5134 | p_start_date - Start DATE FOR Forecast Item Generation
5135 | p_end_date - END DATE FOR Forecast Item Generation
5136 | p_ErrHdrTab -
5137 | a)GENERATE/ : Dummy tab is passed
5138 | RECALCULATE Mode
5139 | b) ERROR Mode : Contains all errored forecast item
5140 | Header records
5141 | x_return_status -
5142 | x_msg_count -
5143 | x_msg_data -
5144 +----------------------------------------------------------------------*/
5145
5146 PROCEDURE Generate_Assignment_FI(
5147 p_AsgnDtlRec IN PA_FORECAST_GLOB.AsgnDtlRecord,
5148 p_process_mode IN VARCHAR2,
5149 p_start_date IN DATE,
5150 p_end_date IN DATE,
5151 p_ErrHdrTab IN PA_FORECAST_GLOB.FIHdrTabTyp,
5152 x_res_start_date OUT NOCOPY DATE, -- 4537865
5153 x_res_end_date OUT NOCOPY DATE, -- 4537865
5154 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
5155 x_msg_count OUT NOCOPY NUMBER, -- 4537865
5156 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
5157
5158
5159 l_msg_index_out NUMBER;
5160 l_data varchar2(2000); -- 4537865
5161 lv_req_exist_flag VARCHAR2(1) := 'N';
5162 lv_asgn_exist_flag VARCHAR2(1) := 'N';
5163 TmpDBFIDtlTab PA_FORECAST_GLOB.FIDtlTabTyp;
5164 TmpDBFIHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
5165 TmpFIDtlInsTab PA_FORECAST_GLOB.FIDtlTabTyp;
5166 TmpFIDtlUpdTab PA_FORECAST_GLOB.FIDtlTabTyp;
5167 TmpFIHdrInsTab PA_FORECAST_GLOB.FIHdrTabTyp;
5168 TmpFIHdrUpdTab PA_FORECAST_GLOB.FIHdrTabTyp;
5169 TmpScheduleTab PA_FORECAST_GLOB.SCHEDULETABTYP;
5170 TmpFIDayTab PA_FORECAST_GLOB.FIDayTabTyp;
5171 TmpDumTab PA_FORECAST_GLOB.FIHdrTabTyp;
5172
5173 -- Used to determine start_date AND end_date for
5174 -- Calculating resource unassigned time
5175
5176 lv_old_start_date DATE := NULL;
5177 lv_old_end_date DATE := NULL;
5178 lv_res_start_date DATE := NULL;
5179 lv_res_end_date DATE := NULL;
5180 lv_start_date DATE;
5181 lv_end_date DATE;
5182
5183 lv_err_msg VARCHAR2(30);
5184
5185 lv_return_status VARCHAR2(30);
5186
5187 lv_lock_type VARCHAR2(5) := 'RES';
5188 l_cannot_acquire_lock EXCEPTION;
5189 li_lock_status NUMBER;
5190
5191 cursor c_res_dates is
5192 select min(resource_effective_start_date),
5193 max(resource_effective_end_date)
5194 from pa_resources_denorm
5195 where resource_id = p_AsgnDtlRec.resource_id;
5196
5197 ld_res_asgn_start_date DATE;
5198 ld_res_asgn_end_date DATE;
5199 l_no_fis_to_create EXCEPTION;
5200 BEGIN
5201
5202 lv_return_status := FND_API.G_RET_STS_SUCCESS;
5203
5204 Print_message( 'Entering Generate_Assignment_FI');
5205
5206 TmpDBFIDtlTab.delete;
5207 TmpDBFIHdrTab.delete;
5208 TmpFIDtlInsTab.delete;
5209 TmpFIDtlUpdTab.delete;
5210 TmpFIHdrInsTab.delete;
5211 TmpFIHdrUpdTab.delete;
5212 TmpScheduleTab.delete;
5213 TmpFIDayTab.delete;
5214 TmpDumTab.delete;
5215
5216 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Generate_Assignment_FI');
5217
5218 IF p_AsgnDtlRec.resource_id is NOT NULL then
5219 open c_res_dates;
5220 fetch c_res_dates into ld_res_asgn_start_date, ld_res_asgn_end_date;
5221 print_message('ld_res_asgn_start_date: ' || ld_res_asgn_start_date);
5222 print_message('ld_res_asgn_end_date: ' || ld_res_asgn_end_date);
5223 if c_res_dates%NOTFOUND or ld_res_asgn_start_date is null then
5224 print_message('Invalid resource. No FIs to create.');
5225 close c_res_dates;
5226 raise l_no_fis_to_create;
5227 end if;
5228 close c_res_dates;
5229
5230 -- 2196924: Comment out this logic.
5231 -- Don't create FIs if resource is end dated.
5232 --if (ld_res_asgn_end_date < sysdate) then
5233 -- print_message('Resource is end dated. No FIs to create.');
5234 -- raise l_no_fis_to_create;
5235 --end if;
5236
5237 -- 2196924: Comment out this logic.
5238 --if (p_start_date > ld_res_asgn_end_date) then
5239 -- print_message('Assignment is outside of HR assignment');
5240 -- raise l_no_fis_to_create;
5241 --end if;
5242
5243 -- 2196924: Comment out this logic.
5244 --if (p_end_date < ld_res_asgn_start_date) then
5245 -- print_message('Assignment is outside of HR assignment');
5246 -- raise l_no_fis_to_create;
5247 --end if;
5248
5249 IF (PA_FORECAST_ITEMS_UTILS.Set_User_Lock(
5250 p_AsgnDtlRec.resource_id, 'RES') <> 0) THEN
5251 RAISE l_cannot_acquire_lock;
5252
5253 END IF;
5254 Print_message('Resource locked for processing :'||p_AsgnDtlRec.resource_id);
5255
5256 End if;
5257
5258 IF p_start_date IS NULL THEN
5259
5260 lv_start_date := p_AsgnDtlRec.start_date;
5261
5262 ELSE
5263
5264 lv_start_date := p_start_date;
5265
5266 END IF;
5267
5268 IF p_end_date IS NULL THEN
5269
5270 lv_end_date := p_AsgnDtlRec.end_date;
5271
5272 ELSE
5273
5274 lv_end_date := p_end_date;
5275
5276 END IF;
5277
5278 lv_old_start_date := lv_start_date;
5279 lv_old_end_date := lv_end_date;
5280
5281 Print_message(
5282 'Resource_id ='||p_asgndtlrec.resource_id||
5283 'Asgn_ID - ' || p_asgndtlrec.assignment_id ||
5284 '; Start_Date - ' || lv_start_date ||
5285 '; End_Date - ' || lv_end_date );
5286
5287
5288 IF (p_process_mode <> 'ERROR') THEN
5289
5290 Print_message(
5291 'Asg - Calling Chk_Assignment_FI_Exist');
5292
5293
5294 lv_asgn_exist_flag := Chk_Assignment_FI_Exist(
5295 p_AsgnDtlRec.assignment_id);
5296
5297 ELSE
5298
5299 lv_asgn_exist_flag := 'Y';
5300
5301 END IF;
5302
5303 IF lv_asgn_exist_flag = 'N' THEN
5304
5305 -- Check IF source requirement exists
5306
5307 Print_message(
5308 'Asg - Calling Chk_Requirement_FI_Exist');
5309
5310
5311 lv_req_exist_flag := Chk_Requirement_FI_Exist(
5312 p_AsgnDtlRec.source_assignment_id);
5313
5314 -- If exists reverse assignment
5315
5316 IF lv_req_exist_flag = 'Y' THEN
5317
5318 Print_message(
5319 'Calling Delete_FI');
5320
5321 Delete_FI(
5322 p_assignment_id=>p_AsgnDtlRec.source_assignment_id,
5323 x_return_status=>lv_return_status,
5324 x_msg_count=>x_msg_count,
5325 x_msg_data=>x_msg_data);
5326
5327 END IF;
5328
5329 ELSE
5330 -- Assignment exists so
5331
5332 IF p_process_mode = 'GENERATE' THEN
5333
5334 -- Reverse forecast items detail FOR this assignment
5335 -- which do not fall BETWEEN startdate AND END DATE
5336
5337 Print_message(
5338 'Asg - Calling Reverse_FI_Dtl');
5339
5340 Reverse_FI_Dtl(p_AsgnDtlRec.assignment_id,
5341 lv_start_date, lv_end_date,
5342 lv_return_status, x_msg_count, x_msg_data);
5343
5344 -- Reverse forecast items Header FOR this assignment
5345 -- which do not fall BETWEEN startdate AND END DATE
5346
5347 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5348
5349 Print_message( 'Asg - Calling Reverse_FI_Hdr');
5350
5351 Reverse_FI_Hdr(p_AsgnDtlRec.assignment_id,
5352 lv_start_date, lv_end_date,
5353 lv_old_start_date, lv_old_end_date,
5354 lv_return_status, x_msg_count, x_msg_data);
5355 END IF;
5356
5357 END IF;
5358
5359 END IF;
5360
5361 IF (lv_old_start_date IS NULL) OR
5362 (lv_start_date <= lv_old_start_date) THEN
5363
5364 x_res_start_date := lv_start_date;
5365
5366 ELSE
5367
5368 x_res_start_date := lv_old_start_date;
5369
5370 END if;
5371
5372 IF (lv_old_end_date IS NULL) OR
5373 (lv_end_date >= lv_old_end_date) THEN
5374
5375 x_res_end_date := lv_end_date;
5376
5377 ELSE
5378
5379 x_res_end_date := lv_old_end_date;
5380
5381 END IF;
5382
5383 TmpFIHdrInsTab.delete; -- Initialize
5384
5385 -- Get schedule data AND build day fI Records
5386
5387
5388 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5389
5390 Print_message(
5391 'Asg - Calling Get_Assignment_Schedule');
5392
5393 PA_FORECAST_ITEMS_UTILS.Get_assignment_Schedule(
5394 p_AsgnDtlRec.assignment_id,
5395 lv_start_date,
5396 lv_end_date,
5397 p_process_mode,
5398 Tmpscheduletab,
5399 lv_return_status,
5400 x_msg_count, x_msg_data);
5401
5402 IF TmpScheduleTab.Count = 0 THEN
5403
5404 lv_err_msg := 'No_Schedule_Records - Asg';
5405 RAISE NO_DATA_FOUND;
5406
5407 END IF;
5408
5409 END IF;
5410
5411
5412 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5413
5414 Print_message( 'Asg - Calling Initialize_Day_FI');
5415
5416 Initialize_Day_FI ( TmpScheduleTab,
5417 p_process_mode,
5418 lv_start_date,
5419 lv_end_date,
5420 TmpFIDayTab ,
5421 lv_return_status , x_msg_count , x_msg_data );
5422 END IF;
5423
5424 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5425
5426 Print_message('Asg - Calling Build_Day_FI');
5427
5428 Print_message('p_AsgnDtlRec: ' || p_AsgnDtlRec.resource_id || ' ' || p_AsgnDtlRec.assignment_id);
5429
5430 Build_Day_FI ( TmpScheduleTab , lv_start_date , lv_end_date ,
5431 TmpFIDayTab ,p_AsgnDtlRec.assignment_type,
5432 lv_return_status , x_msg_count , x_msg_data );
5433 Print_message('p_AsgnDtlRec: ' || p_AsgnDtlRec.resource_id || ' ' || p_AsgnDtlRec.assignment_id);
5434
5435
5436
5437 TmpFIHdrUpdTab.delete; -- Initialize
5438 TmpFIDtlInsTab.delete; -- Initialize
5439 TmpFIDtlUpdTab.delete; -- Initialize
5440 TmpDBFIHdrTab.delete; -- Initialize
5441 TmpDBFIDtlTab.delete; -- Initialize
5442
5443 END IF;
5444
5445 IF lv_asgn_exist_flag = 'Y' AND -- Added and condition for bug 4320465
5446 lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5447
5448 lv_start_date := TmpFIDayTab(TmpFIDayTab.FIRST).item_date;
5449 lv_end_date := TmpFIDayTab(TmpFIDayTab.LAST).item_date;
5450
5451 -- Get existing forecast items FOR this assignment
5452 -- which fall BETWEEN startdate AND END DATE
5453
5454 IF (p_process_mode <> 'ERROR') THEN
5455
5456 -- IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN -- Moved above for Bug 4320465
5457
5458 Print_message( 'Asg - Calling Fetch_FI_Hdr');
5459
5460 Fetch_FI_Hdr ( p_AsgnDtlRec.assignment_id,
5461 p_AsgnDtlRec.resource_id,
5462 lv_start_date, lv_end_date,
5463 TmpDBFIHdrTab,
5464 lv_return_status, x_msg_count, x_msg_data);
5465 --END IF; Bug 4320465
5466
5467 ELSE
5468
5469 TmpDBFIHdrTab := p_ErrHdrTab;
5470
5471 END IF;
5472
5473 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5474
5475 -- Get existing forecast items detail FOR this assignment
5476 -- which fall BETWEEN startdate AND END DATE
5477
5478 Print_message( 'Asg - Calling Fetch_FI_Dtl');
5479
5480 Fetch_FI_Dtl ( p_AsgnDtlRec.assignment_id,
5481 p_AsgnDtlRec.resource_id,
5482 lv_start_date, lv_end_date,
5483 TmpDBFIDtlTab,
5484 lv_return_status, x_msg_count, x_msg_data);
5485 END IF;
5486
5487 END IF;
5488
5489 -- Header Processing
5490 -- Inputs : TmpFIDayTab, TmpDBFIHdrTab, p_asgndltrec
5491 -- Get new values FOR expenditure_ou,
5492 -- expenditure_organization, expenditure_type,
5493 -- expenditure_type_class, borrowed flag
5494 -- IF item_date exists
5495 -- check above values with existing values
5496 -- IF differs
5497 -- update header FOR delete_flag
5498 -- Create new forecast_item_header
5499 -- Mark action_flag = 'DN';
5500 -- Save new forecast_item_id IN TmpFIDayTab
5501 -- ELSE
5502 -- Check FOR qty change
5503 -- IF differs
5504 -- update item_quantity IN header with
5505 -- new value
5506 -- Mark action_flag = 'RN';
5507 -- ELSE
5508 -- Mark action_flag = 'C';
5509 -- Meaning values FOR attributes associated
5510 -- with detail table have to be checked for
5511 -- change
5512 -- ELSE (item_date does not exist)
5513 -- Create new forecast_item
5514 -- Mark action_flag = 'N';
5515
5516 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5517
5518 Print_message('Calling Build_FI_Hdr_Asg');
5519
5520 Build_FI_Hdr_Asg(p_AsgnDtlRec, TmpDBFIHdrTab, TmpFIDayTab,
5521 TmpFIHdrInsTab, TmpFIHdrUpdTab,
5522 lv_return_status, x_msg_count, x_msg_data);
5523 END IF;
5524
5525 -- Detail Processing
5526 -- Inputs : TmpFIDayTab, TmpDBFIDtlTab, p_asgndltrec
5527 -- TmpFIDayTab.Action_flag is updated by header process.
5528 -- IF action_flag = 'C'
5529 -- check FOR change IN resource_type_code,
5530 -- person_billable_flag, include IN forecast option,
5531 -- provisional_flag, work_type_id
5532 -- If there is change mark action_flag = 'RN';
5533 -- IF action_flag = 'DN'
5534 --Header record has changed
5535 -- Reverse detail record
5536 -- Create new detail record with forecast_item_id
5537 -- (generated by header record, saved IN TmpFIDayTab)
5538 -- AND line_NUMBER = 1;
5539 -- IF action_flag = 'RN'
5540 -- Change IN detail record values
5541 -- Reverse detail record
5542 -- create new detail record with same forecast_item_id
5543 -- AND line_NUMBER = max(line_NUMBER) + 1;
5544 -- IF action_flag = 'N'
5545 -- Create new detail record with forecast_item_id
5546 -- (generated by header record, saved IN TmpFIDayTab)
5547 -- AND line_NUMBER = 1;
5548
5549 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5550
5551 Print_message('Calling Build_FI_Dtl_Asg');
5552
5553 Build_FI_Dtl_Asg(p_AsgnDtlRec, TmpDBFIDtlTab, TmpFIDayTab,
5554 TmpFIDtlInsTab, TmpFIDtlUpdTab,
5555 lv_return_status, x_msg_count, x_msg_data);
5556 END IF;
5557
5558
5559 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5560
5561 IF TmpFIHdrInsTab.COUNT > 0 THEN
5562
5563 Print_message( 'Calling PA_FORECAST_HDR_PKG.Insert_Rows');
5564
5565 PA_FORECAST_HDR_PKG.Insert_Rows(TmpFIHdrInsTab,
5566 lv_return_status,
5567 x_msg_count,
5568 x_msg_data);
5569 END IF;
5570
5571 END IF;
5572
5573 Print_message('lv_return_status: ' || lv_return_status);
5574 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5575 Print_message('TmpFIHdrUpdTab.COUNT: ' || TmpFIHdrUpdTab.COUNT);
5576
5577 IF TmpFIHdrUpdTab.COUNT > 0 THEN
5578
5579 Print_message( 'Calling PA_FORECAST_HDR_PKG.Update_Rows');
5580
5581 PA_FORECAST_HDR_PKG.Update_Rows(TmpFIHdrUpdTab,
5582 lv_return_status,
5583 x_msg_count,
5584 x_msg_data);
5585 END IF;
5586
5587 END IF;
5588
5589 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5590
5591 IF TmpFIDtlInsTab.COUNT > 0 THEN
5592
5593 Print_message( 'Calling PA_FORECAST_DTLS_PKG.Insert_Rows');
5594
5595 PA_FORECAST_DTLS_PKG.Insert_Rows(TmpFIDtlInsTab,
5596 lv_return_status,
5597 x_msg_count,
5598 x_msg_data);
5599 END IF;
5600
5601 END IF;
5602
5603 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5604
5605 IF TmpFIDtlUpdTab.COUNT > 0 THEN
5606
5607 Print_message( 'Calling PA_FORECAST_DTLS_PKG.Update_Rows');
5608
5609 PA_FORECAST_DTLS_PKG.Update_Rows(TmpFIDtlUpdTab,
5610 lv_return_status,
5611 x_msg_count,
5612 x_msg_data);
5613 END IF;
5614
5615 END IF;
5616
5617 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5618
5619 IF (p_process_mode = 'GENERATE') THEN
5620
5621 Print_message(
5622 'Calling PA_FORECAST_HDR_PKG.Update_Schedule_Rows');
5623
5624 PA_FORECAST_HDR_PKG.Update_Schedule_Rows(
5625 TmpScheduleTab,
5626 lv_return_status,
5627 x_msg_count,
5628 x_msg_data);
5629 END IF;
5630
5631 END IF;
5632
5633
5634 Print_message( 'Leaving Generate_Assignment_FI');
5635
5636 PA_DEBUG.Reset_Err_Stack;
5637
5638 /** Release the lock once process is completed **/
5639 li_lock_status := PA_FORECAST_ITEMS_UTILS.Release_User_lock(p_AsgnDtlRec.resource_id, 'RES');
5640 Print_message('Resource lock released');
5641
5642 x_return_status := lv_return_status;
5643
5644 return;
5645
5646 EXCEPTION
5647
5648 WHEN l_no_fis_to_create THEN
5649 -- There are no FIs to create.
5650 x_return_status := lv_return_status;
5651 WHEN l_cannot_acquire_lock THEN
5652
5653 Print_message(
5654 'Unable to set lock for ' || p_AsgnDtlRec.resource_id);
5655
5656 x_msg_count := 1;
5657 x_msg_data := 'Resource ID Lock Failure';
5658 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5659
5660 -- 4537865
5661 x_res_start_date := NULL ;
5662 x_res_end_date := NULL ;
5663
5664 FND_MSG_PUB.add_exc_msg
5665 (p_pkg_name =>
5666 'PA_FORECASTITEM_PVT.Generate_Assignment',
5667 p_procedure_name => PA_DEBUG.G_Err_Stack);
5668
5669 If x_msg_count = 1 THEN
5670 pa_interface_utils_pub.get_messages
5671 (p_encoded => FND_API.G_TRUE,
5672 p_msg_index => 1,
5673 p_msg_count => x_msg_count,
5674 p_msg_data => x_msg_data,
5675 p_data => l_data , -- 4537865
5676 p_msg_index_out => l_msg_index_out );
5677 x_msg_data := l_data ; -- 4537865
5678 End If;
5679 Print_message(x_msg_data);
5680 raise;
5681
5682 WHEN NO_DATA_FOUND THEN
5683
5684 IF lv_err_msg = 'No_Schedule_Records - Asg' THEN
5685
5686 x_msg_count := 1;
5687 x_msg_data := 'No Schedule Records for Asg ';
5688 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5689
5690 -- 4537865
5691 x_res_start_date := NULL ;
5692 x_res_end_date := NULL ;
5693
5694 FND_MSG_PUB.add_exc_msg
5695 (p_pkg_name =>
5696 'PA_FORECASTITEM_PVT.Generate_Assignment',
5697 p_procedure_name => PA_DEBUG.G_Err_Stack);
5698
5699 If x_msg_count = 1 THEN
5700 pa_interface_utils_pub.get_messages
5701 (p_encoded => FND_API.G_TRUE,
5702 p_msg_index => 1,
5703 p_msg_count => x_msg_count,
5704 p_msg_data => x_msg_data,
5705 p_data => l_data , -- 4537865
5706 p_msg_index_out => l_msg_index_out );
5707 x_msg_data := l_data ; -- 4537865
5708 End If;
5709 Print_message(x_msg_data);
5710
5711 RAISE;
5712
5713 ELSE
5714
5715 x_msg_count := 1;
5716 x_msg_data := sqlerrm;
5717 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5718
5719 -- 4537865
5720 x_res_start_date := NULL ;
5721 x_res_end_date := NULL ;
5722
5723 FND_MSG_PUB.add_exc_msg
5724 (p_pkg_name =>
5725 'PA_FORECASTITEM_PVT.Generate_Assignment_FI',
5726 p_procedure_name => PA_DEBUG.G_Err_Stack);
5727
5728 If x_msg_count = 1 THEN
5729 pa_interface_utils_pub.get_messages
5730 (p_encoded => FND_API.G_TRUE,
5731 p_msg_index => 1,
5732 p_msg_count => x_msg_count,
5733 p_msg_data => x_msg_data,
5734 p_data => l_data , -- 4537865
5735 p_msg_index_out => l_msg_index_out );
5736 x_msg_data := l_data ; -- 4537865
5737 End If;
5738 Print_message(x_msg_data);
5739
5740 RAISE;
5741
5742
5743 END IF;
5744 /** lock must be released once process completes or errors out **/
5745 li_lock_status := PA_FORECAST_ITEMS_UTILS.Release_User_lock(p_AsgnDtlRec.resource_id, 'RES');
5746 Print_message('Resource lock released ');
5747
5748 WHEN OTHERS THEN
5749 print_message('Failed in Generate_Assignemnt api');
5750 print_message('SQLCODE'||sqlcode||sqlerrm);
5751
5752 x_msg_count := 1;
5753 x_msg_data := sqlerrm;
5754 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5755
5756 -- 4537865
5757 x_res_start_date := NULL ;
5758 x_res_end_date := NULL ;
5759
5760 FND_MSG_PUB.add_exc_msg
5761 (p_pkg_name =>
5762 'PA_FORECASTITEM_PVT.Generate_Assignment_FI',
5763 p_procedure_name => PA_DEBUG.G_Err_Stack);
5764
5765 If x_msg_count = 1 THEN
5766 pa_interface_utils_pub.get_messages
5767 (p_encoded => FND_API.G_TRUE,
5768 p_msg_index => 1,
5769 p_msg_count => x_msg_count,
5770 p_msg_data => x_msg_data,
5771 p_data => l_data , -- 4537865
5772 p_msg_index_out => l_msg_index_out );
5773 x_msg_data := l_data ; -- 4537865
5774 End If;
5775 Print_message(x_msg_data);
5776
5777 /** lock must be released once process completes or errors out **/
5778 li_lock_status := PA_FORECAST_ITEMS_UTILS.Release_User_lock(p_AsgnDtlRec.resource_id, 'RES');
5779 Print_message('Resource lock released ');
5780
5781 RAISE;
5782
5783
5784 END Generate_Assignment_FI;
5785
5786 /* ---------------------------------------------------------------------
5787 | Function : Chk_Assignment_FI_Exist
5788 | Purpose : To check IF forecast item FOR assignment record exists
5789 | Parameters : p_assignment_id - Input Assignment ID
5790 | p_resource_id - Input Resource ID
5791 +----------------------------------------------------------------------*/
5792 Function Chk_Assignment_FI_Exist(
5793 p_assignment_id IN NUMBER)
5794
5795 RETURN VARCHAR2 IS
5796
5797 lv_exist_flag VARCHAR2(1) := 'N';
5798
5799 BEGIN
5800
5801 Print_message( 'Entering Chk_Assignment_FI_Exist');
5802
5803 BEGIN
5804 SELECT 'Y'
5805 INTO lv_exist_flag
5806 FROM dual
5807 WHERE exists (SELECT null
5808 FROM pa_forecast_items
5809 WHERE assignment_id = p_assignment_id
5810 AND delete_flag = 'N');
5811
5812 EXCEPTION
5813
5814 WHEN NO_DATA_FOUND THEN
5815 lv_exist_flag := 'N';
5816
5817 END;
5818
5819 RETURN(lv_exist_flag);
5820
5821 Print_message( 'Leaving Chk_Assignment_FI_Exist');
5822
5823 END Chk_Assignment_FI_Exist;
5824
5825 /* ---------------------------------------------------------------------
5826 | Procedure : Delete_FI
5827 | Purpose : To delete all the forecast items FOR the given assignment
5828 | Called when source requirement FI is to be deleted(reversed)
5829 | when requirement or assignment record is deleted
5830 | Parameters : p_assignment_id - Input Assignment ID
5831 | x_return_status -
5832 | x_msg_count -
5833 | x_msg_data -
5834 +----------------------------------------------------------------------*/
5835 PROCEDURE Delete_FI(
5836 p_assignment_id IN NUMBER,
5837 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
5838 x_msg_count OUT NOCOPY NUMBER, -- 4537865
5839 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
5840
5841 lv_return_status VARCHAR2(30);
5842 l_data VARCHAR2(2000); -- 4537865
5843 l_msg_index_out NUMBER;
5844
5845 BEGIN
5846
5847 lv_return_status := FND_API.G_RET_STS_SUCCESS;
5848
5849 Print_message( 'Entering Delete_FI');
5850
5851 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Delete_FI');
5852
5853 Delete_FI_Dtl( p_assignment_id=>p_assignment_id,
5854 x_return_status=>lv_return_status,
5855 x_msg_count=>x_msg_count,
5856 x_msg_data=> x_msg_data );
5857
5858 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
5859
5860 Delete_FI_Hdr( p_assignment_id=>p_assignment_id,
5861 x_return_status=>lv_return_status,
5862 x_msg_count=>x_msg_count,
5863 x_msg_data=> x_msg_data );
5864 END IF;
5865
5866 Print_message(
5867 'Leaving Delete_FI');
5868
5869 PA_DEBUG.Reset_Err_Stack;
5870
5871 x_return_status := lv_return_status;
5872
5873 EXCEPTION
5874
5875 WHEN OTHERS THEN
5876 print_message('Failed in Delete FI api');
5877 print_message('SQLCODE'||sqlcode||sqlerrm);
5878
5879 x_msg_count := 1;
5880 x_msg_data := sqlerrm;
5881 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5882
5883 FND_MSG_PUB.add_exc_msg
5884 (p_pkg_name =>
5885 'PA_FORECASTITEM_PVT.Delete_FI',
5886 p_procedure_name => PA_DEBUG.G_Err_Stack);
5887
5888 If x_msg_count = 1 THEN
5889 pa_interface_utils_pub.get_messages
5890 (p_encoded => FND_API.G_TRUE,
5891 p_msg_index => 1,
5892 p_msg_count => x_msg_count,
5893 p_msg_data => x_msg_data,
5894 p_data => l_data , -- 4537865
5895 p_msg_index_out => l_msg_index_out );
5896 x_msg_data := l_data ; -- 4537865
5897 End If;
5898 Print_message(x_msg_data);
5899
5900 RAISE;
5901
5902 END Delete_FI;
5903
5904 /* ---------------------------------------------------------------------
5905 | Procedure : Delete_FI_Hdr
5906 | Purpose : To reverse the existing forecast items (Requirement)
5907 | when a resource is identified FOR a requirement
5908 | Parameters : p_assignment_id - Input Assignment ID
5909 | x_return_status -
5910 | x_msg_count -
5911 | x_msg_data -
5912 +----------------------------------------------------------------------*/
5913 PROCEDURE Delete_FI_Hdr(
5914 p_assignment_id IN NUMBER,
5915 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
5916 x_msg_count OUT NOCOPY NUMBER, -- 4537865
5917 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
5918
5919 l_data varchar2(2000) ; -- 4537865
5920
5921 l_msg_index_out NUMBER;
5922 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
5923 forecast_item_type_tab PA_FORECAST_GLOB.VCTabTyp;
5924 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
5925 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
5926 expenditure_orgn_id_tab PA_FORECAST_GLOB.NumberTabTyp;
5927 project_organization_id_tab PA_FORECAST_GLOB.NumberTabTyp;
5928 project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
5929 project_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
5930 person_id_tab PA_FORECAST_GLOB.NumberTabTyp;
5931 resource_id_tab PA_FORECAST_GLOB.NumberTabTyp;
5932 borrowed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
5933 assignment_id_tab PA_FORECAST_GLOB.NumberTabTyp;
5934 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
5935 item_uom_tab PA_FORECAST_GLOB.VCTabTyp;
5936 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
5937 pvdr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
5938 pvdr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
5939 pvdr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
5940 rcvr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
5941 rcvr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
5942 rcvr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
5943 global_exp_period_end_date_tab PA_FORECAST_GLOB.DateTabTyp;
5944 expenditure_type_tab PA_FORECAST_GLOB.VCTabTyp;
5945 expenditure_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
5946 cost_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
5947 rev_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
5948 tp_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
5949 burden_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
5950 other_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
5951 delete_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
5952 error_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
5953 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
5954 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
5955 TP_AMOUNT_TYPE_tab PA_FORECAST_GLOB.VCTabTyp;
5956 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
5957 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
5958 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
5959 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
5960 asgmt_sys_status_code_tab PA_FORECAST_GLOB.VCTabTyp;
5961 capacity_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
5962 overcommitment_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
5963 availability_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
5964 overcommitment_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
5965 availability_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
5966
5967 TmpUpdTab PA_FORECAST_GLOB.FIHdrTabTyp;
5968
5969 lv_return_status VARCHAR2(30);
5970
5971 BEGIN
5972
5973 lv_return_status := FND_API.G_RET_STS_SUCCESS;
5974
5975 Print_message( 'Entering Delete_FI_Hdr');
5976
5977 TmpUpdTab.delete;
5978 forecast_item_id_tab.delete;
5979 forecast_item_type_tab.delete;
5980 project_org_id_tab.delete;
5981 expenditure_org_id_tab.delete;
5982 expenditure_orgn_id_tab.delete;
5983 project_organization_id_tab.delete;
5984 project_id_tab.delete;
5985 project_type_class_tab.delete;
5986 person_id_tab.delete;
5987 resource_id_tab.delete;
5988 borrowed_flag_tab.delete;
5989 assignment_id_tab.delete;
5990 item_date_tab.delete;
5991 item_uom_tab.delete;
5992 item_quantity_tab.delete;
5993 pvdr_period_set_name_tab.delete;
5994 pvdr_pa_period_name_tab.delete;
5995 pvdr_gl_period_name_tab.delete;
5996 rcvr_period_set_name_tab.delete;
5997 rcvr_pa_period_name_tab.delete;
5998 rcvr_gl_period_name_tab.delete;
5999 global_exp_period_end_date_tab.delete;
6000 expenditure_type_tab.delete;
6001 expenditure_type_class_tab.delete;
6002 cost_rejection_code_tab.delete;
6003 rev_rejection_code_tab.delete;
6004 tp_rejection_code_tab.delete;
6005 burden_rejection_code_tab.delete;
6006 other_rejection_code_tab.delete;
6007 delete_flag_tab.delete;
6008 error_flag_tab.delete;
6009 provisional_flag_tab.delete;
6010 JOB_ID_tab.delete;
6011 TP_AMOUNT_TYPE_tab.delete;
6012 OVERPROVISIONAL_QTY_tab.delete;
6013 OVER_PROV_CONF_QTY_tab.delete;
6014 CONFIRMED_QTY_tab.delete;
6015 PROVISIONAL_QTY_tab.delete;
6016 asgmt_sys_status_code_tab.delete;
6017 capacity_quantity_tab.delete;
6018 overcommitment_quantity_tab.delete;
6019 availability_quantity_tab.delete;
6020 overcommitment_flag_tab.delete;
6021 availability_flag_tab.delete;
6022
6023 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Delete_FI_Hdr');
6024
6025 SELECT forecast_item_id, forecast_item_type,
6026 project_org_id , expenditure_org_id,
6027 project_organization_id, expenditure_organization_id ,
6028 project_id, project_type_class, person_id ,
6029 resource_id, borrowed_flag, assignment_id,
6030 item_date, item_uom, item_quantity,
6031 pvdr_period_set_name, pvdr_pa_period_name,
6032 pvdr_gl_period_name, rcvr_period_set_name,
6033 rcvr_pa_period_name, rcvr_gl_period_name,
6034 global_exp_period_end_date, expenditure_type,
6035 expenditure_type_class, cost_rejection_code,
6036 rev_rejection_code, tp_rejection_code,
6037 burden_rejection_code, other_rejection_code,
6038 delete_flag, error_flag, provisional_flag,
6039 JOB_ID,
6040 TP_AMOUNT_TYPE,
6041 OVERPROVISIONAL_QTY,
6042 OVER_PROV_CONF_QTY,
6043 CONFIRMED_QTY,
6044 PROVISIONAL_QTY,
6045 asgmt_sys_status_code, capacity_quantity,
6046 overcommitment_quantity, availability_quantity,
6047 overcommitment_flag, availability_flag
6048 BULK COLLECT INTO forecast_item_id_tab, forecast_item_type_tab,
6049 project_org_id_tab, expenditure_org_id_tab,
6050 project_organization_id_tab, expenditure_orgn_id_tab,
6051 project_id_tab, project_type_class_tab, person_id_tab,
6052 resource_id_tab, borrowed_flag_tab, assignment_id_tab,
6053 item_date_tab, item_uom_tab, item_quantity_tab,
6054 pvdr_period_set_name_tab, pvdr_pa_period_name_tab,
6055 pvdr_gl_period_name_tab, rcvr_period_set_name_tab,
6056 rcvr_pa_period_name_tab, rcvr_gl_period_name_tab,
6057 global_exp_period_end_date_tab, expenditure_type_tab,
6058 expenditure_type_class_tab, cost_rejection_code_tab,
6059 rev_rejection_code_tab, tp_rejection_code_tab,
6060 burden_rejection_code_tab, other_rejection_code_tab,
6061 delete_flag_tab, error_flag_tab, provisional_flag_tab,
6062 JOB_ID_tab,
6063 TP_AMOUNT_TYPE_tab,
6064 OVERPROVISIONAL_QTY_tab,
6065 OVER_PROV_CONF_QTY_tab,
6066 CONFIRMED_QTY_tab,
6067 PROVISIONAL_QTY_tab,
6068 asgmt_sys_status_code_tab, capacity_quantity_tab,
6069 overcommitment_quantity_tab, availability_quantity_tab,
6070 overcommitment_flag_tab, availability_flag_tab
6071 FROM pa_forecast_items hdr
6072 WHERE hdr.assignment_id = p_assignment_id
6073 AND hdr.delete_flag = 'N'
6074 order by item_date, forecast_item_id ;
6075
6076 IF forecast_item_id_tab.count = 0 THEN
6077
6078 Print_message(
6079 'Leaving Delete_FI_Hdr');
6080
6081 x_return_status := lv_return_status;
6082
6083 RETURN;
6084
6085 END IF;
6086
6087 -- Move to one table FROM multiple tables
6088
6089 TmpUpdTab.Delete;
6090
6091 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
6092
6093 TmpUpdTab(j).forecast_item_id := forecast_item_id_tab(j);
6094 TmpUpdTab(j).forecast_item_type := forecast_item_type_tab(j);
6095 TmpUpdTab(j).project_org_id := project_org_id_tab(j);
6096 TmpUpdTab(j).expenditure_org_id := expenditure_org_id_tab(j);
6097 TmpUpdTab(j).project_organization_id :=
6098 project_organization_id_tab(j);
6099 TmpUpdTab(j).expenditure_organization_id :=
6100 expenditure_orgn_id_tab(j);
6101 TmpUpdTab(j).project_id := project_id_tab(j);
6102 TmpUpdTab(j).project_type_class := project_type_class_tab(j);
6103 TmpUpdTab(j).person_id := person_id_tab(j);
6104 TmpUpdTab(j).resource_id := resource_id_tab(j);
6105 TmpUpdTab(j).borrowed_flag := borrowed_flag_tab(j);
6106 TmpUpdTab(j).assignment_id := assignment_id_tab(j);
6107 TmpUpdTab(j).item_date := item_date_tab(j);
6108 TmpUpdTab(j).item_uom := item_uom_tab(j);
6109 TmpUpdTab(j).CAPACITY_QUANTITY := NULL;
6110 TmpUpdTab(j).OVERCOMMITMENT_QTY := NULL;
6111 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
6112 TmpUpdTab(j).OVERCOMMITMENT_QUANTITY := NULL;
6113 -- End fix for bug 2504222
6114 TmpUpdTab(j).OVERPROVISIONAL_QTY := NULL;
6115 TmpUpdTab(j).OVER_PROV_CONF_QTY := NULL;
6116 TmpUpdTab(j).CONFIRMED_QTY := NULL;
6117 TmpUpdTab(j).PROVISIONAL_QTY := NULL;
6118 TmpUpdTab(j).item_quantity := 0;
6119 TmpUpdTab(j).pvdr_period_set_name :=
6120 pvdr_period_set_name_tab(j);
6121 TmpUpdTab(j).pvdr_pa_period_name := pvdr_pa_period_name_tab(j);
6122 TmpUpdTab(j).pvdr_gl_period_name := pvdr_gl_period_name_tab(j);
6123 TmpUpdTab(j).rcvr_period_set_name :=
6124 rcvr_period_set_name_tab(j);
6125 TmpUpdTab(j).rcvr_pa_period_name := rcvr_pa_period_name_tab(j);
6126 TmpUpdTab(j).rcvr_gl_period_name := rcvr_gl_period_name_tab(j);
6127 TmpUpdTab(j).global_exp_period_end_date :=
6128 global_exp_period_end_date_tab(j);
6129 TmpUpdTab(j).expenditure_type := expenditure_type_tab(j);
6130 TmpUpdTab(j).expenditure_type_class :=
6131 expenditure_type_class_tab(j);
6132 TmpUpdTab(j).cost_rejection_code := cost_rejection_code_tab(j);
6133 TmpUpdTab(j).rev_rejection_code := rev_rejection_code_tab(j);
6134 TmpUpdTab(j).tp_rejection_code := tp_rejection_code_tab(j);
6135 TmpUpdTab(j).burden_rejection_code :=
6136 burden_rejection_code_tab(j);
6137 TmpUpdTab(j).other_rejection_code :=
6138 other_rejection_code_tab(j);
6139 TmpUpdTab(j).delete_flag := 'Y';
6140 TmpUpdTab(j).error_flag := error_flag_tab(j);
6141 TmpUpdTab(j).provisional_flag := provisional_flag_tab(j);
6142 TmpUpdTab(j).JOB_ID := JOB_ID_tab(j);
6143 TmpUpdTab(j).TP_AMOUNT_TYPE := TP_AMOUNT_TYPE_tab(j);
6144 TmpUpdTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
6145 TmpUpdTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
6146 TmpUpdTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
6147 TmpUpdTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
6148 TmpUpdTab(j).asgmt_sys_status_code := asgmt_sys_status_code_tab(j);
6149 TmpUpdTab(j).capacity_quantity := capacity_quantity_tab(j);
6150 TmpUpdTab(j).overcommitment_quantity := overcommitment_quantity_tab(j);
6151 TmpUpdTab(j).availability_quantity := availability_quantity_tab(j);
6152 TmpUpdTab(j).overcommitment_flag := overcommitment_flag_tab(j);
6153 TmpUpdTab(j).availability_flag := availability_flag_tab(j);
6154
6155 END LOOP;
6156
6157 IF TmpUpdTab.COUNT > 0 THEN
6158
6159 Print_message(
6160 'Calling PA_FORECAST_HDR_PKG.Update_Rows ');
6161
6162 PA_FORECAST_HDR_PKG.Update_Rows(TmpUpdTab,
6163 lv_return_status,
6164 x_msg_count,
6165 x_msg_data);
6166
6167 END IF;
6168
6169
6170 Print_message(
6171 'Leaving Delete_FI_Hdr');
6172
6173 PA_DEBUG.Reset_Err_Stack;
6174
6175 x_return_status := lv_return_status;
6176
6177 EXCEPTION
6178
6179 WHEN OTHERS THEN
6180 print_message('Failed in Delete_FI_Hdr api');
6181 print_message('SQLCODE'||sqlcode||sqlerrm);
6182
6183 x_msg_count := 1;
6184 x_msg_data := sqlerrm;
6185 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6186
6187 FND_MSG_PUB.add_exc_msg
6188 (p_pkg_name =>
6189 'PA_FORECASTITEM_PVT.Delete_FI_Hdr',
6190 p_procedure_name => PA_DEBUG.G_Err_Stack);
6191
6192 If x_msg_count = 1 THEN
6193 pa_interface_utils_pub.get_messages
6194 (p_encoded => FND_API.G_TRUE,
6195 p_msg_index => 1,
6196 p_msg_count => x_msg_count,
6197 p_msg_data => x_msg_data,
6198 p_data => l_data , -- 4537865
6199 p_msg_index_out => l_msg_index_out );
6200 x_msg_data := l_data ; -- 4537865
6201 End If;
6202 Print_message(x_msg_data);
6203
6204 RAISE;
6205
6206 END Delete_FI_Hdr;
6207
6208 /* ---------------------------------------------------------------------
6209 | Procedure : Delete_FI_Dtl
6210 | Purpose : To reverse the existing forecast items detail(Requirement)
6211 | when a resource is identified FOR a requirement
6212 | Parameters : p_assignment_id - Input Assignment ID
6213 | x_return_status -
6214 | x_msg_count -
6215 | x_msg_data -
6216 +----------------------------------------------------------------------*/
6217
6218 PROCEDURE Delete_FI_Dtl(
6219 p_assignment_id IN NUMBER,
6220 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
6221 x_msg_count OUT NOCOPY NUMBER, -- 4537865
6222 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
6223
6224 l_data varchar2(2000) ; -- 4537865
6225 l_msg_index_out NUMBER;
6226 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6227 amount_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6228 line_num_tab PA_FORECAST_GLOB.NumberTabTyp;
6229 resource_type_code_tab PA_FORECAST_GLOB.VCTabTyp;
6230 person_billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6231 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
6232 item_UOM_tab PA_FORECAST_GLOB.VCTabTyp;
6233 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
6234 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6235 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6236 PJI_SUMMARIZED_FLAG_tab PA_FORECAST_GLOB.VC1TabTyp;
6237 CAPACITY_QUANTITY_tab PA_FORECAST_GLOB.NumberTabTyp;
6238 OVERCOMMITMENT_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6239 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6240 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6241 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6242 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6243 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
6244 PROJECT_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
6245 RESOURCE_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
6246 EXP_ORGANIZATION_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
6247 pvdr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
6248 pvdr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
6249 rcvr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
6250 rcvr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
6251 proj_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
6252 proj_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
6253 denom_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
6254 denom_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
6255 tp_amount_type_tab PA_FORECAST_GLOB.VCTabTyp;
6256 billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6257 forecast_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
6258 util_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
6259 work_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6260 resource_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6261 org_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6262 resource_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
6263 org_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
6264 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6265 reversed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6266 net_zero_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6267 reduce_capacity_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6268 line_num_reversed_tab PA_FORECAST_GLOB.NumberTabTyp;
6269
6270 TmpRevTab PA_FORECAST_GLOB.FIDtlTabTyp;
6271 TmpUpdTab PA_FORECAST_GLOB.FIDtlTabTyp;
6272 l_rev_index NUMBER;
6273 lv_return_status VARCHAR2(30);
6274
6275 BEGIN
6276
6277 lv_return_status := FND_API.G_RET_STS_SUCCESS;
6278
6279 Print_message( 'Entering Delete_FI_Dtl');
6280
6281 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Delete_FI_Dtl');
6282
6283 TmpRevTab.Delete;
6284 TmpUpdTab.Delete;
6285 forecast_item_id_tab.delete;
6286 amount_type_id_tab.delete;
6287 line_num_tab.delete;
6288 resource_type_code_tab.delete;
6289 person_billable_flag_tab.delete;
6290 item_date_tab.delete;
6291 item_UOM_tab.delete;
6292 item_quantity_tab.delete;
6293 expenditure_org_id_tab.delete;
6294 project_org_id_tab.delete;
6295 PJI_SUMMARIZED_FLAG_tab.delete;
6296 CAPACITY_QUANTITY_tab.delete;
6297 OVERCOMMITMENT_QTY_tab.delete;
6298 OVERPROVISIONAL_QTY_tab.delete;
6299 OVER_PROV_CONF_QTY_tab.delete;
6300 CONFIRMED_QTY_tab.delete;
6301 PROVISIONAL_QTY_tab.delete;
6302 JOB_ID_tab.delete;
6303 PROJECT_ID_tab.delete;
6304 RESOURCE_ID_tab.delete;
6305 EXP_ORGANIZATION_ID_tab.delete;
6306 pvdr_acct_curr_code_tab.delete;
6307 pvdr_acct_amount_tab.delete;
6308 rcvr_acct_curr_code_tab.delete;
6309 rcvr_acct_amount_tab.delete;
6310 proj_currency_code_tab.delete;
6311 proj_amount_tab.delete;
6312 denom_currency_code_tab.delete;
6313 denom_amount_tab.delete;
6314 tp_amount_type_tab.delete;
6315 billable_flag_tab.delete;
6316 forecast_summarized_code_tab.delete;
6317 util_summarized_code_tab.delete;
6318 work_type_id_tab.delete;
6319 resource_util_category_id_tab.delete;
6320 org_util_category_id_tab.delete;
6321 resource_util_weighted_tab.delete;
6322 org_util_weighted_tab.delete;
6323 provisional_flag_tab.delete;
6324 reversed_flag_tab.delete;
6325 net_zero_flag_tab.delete;
6326 reduce_capacity_flag_tab.delete;
6327 line_num_reversed_tab.delete;
6328
6329 SELECT dtl.forecast_item_id, dtl.amount_type_id,
6330 dtl.line_num, dtl.resource_type_code,
6331 dtl.person_billable_flag, dtl.item_UOM, dtl.item_date,
6332 dtl.PJI_SUMMARIZED_FLAG,
6333 dtl.CAPACITY_QUANTITY,
6334 dtl.OVERCOMMITMENT_QTY,
6335 dtl.OVERPROVISIONAL_QTY,
6336 dtl.OVER_PROV_CONF_QTY,
6337 dtl.CONFIRMED_QTY,
6338 dtl.PROVISIONAL_QTY,
6339 dtl.JOB_ID,
6340 dtl.PROJECT_ID,
6341 dtl.RESOURCE_ID,
6342 dtl.EXPENDITURE_ORGANIZATION_ID,
6343 dtl.item_quantity, dtl.expenditure_org_id,
6344 dtl.project_org_id, dtl.pvdr_acct_curr_code,
6345 dtl.pvdr_acct_amount, dtl.rcvr_acct_curr_code,
6346 dtl.rcvr_acct_amount, dtl.proj_currency_code,
6347 dtl.proj_amount, dtl.denom_currency_code, dtl.denom_amount,
6348 dtl.tp_amount_type, dtl.billable_flag,
6349 dtl.forecast_summarized_code, dtl.util_summarized_code,
6350 dtl.work_type_id, dtl.resource_util_category_id,
6351 dtl.org_util_category_id, dtl.resource_util_weighted,
6352 dtl.org_util_weighted, dtl.provisional_flag,
6353 dtl.reversed_flag, dtl.net_zero_flag,
6354 dtl.reduce_capacity_flag, dtl.line_num_reversed
6355 BULK COLLECT INTO forecast_item_id_tab,amount_type_id_tab,
6356 line_num_tab, resource_type_code_tab,
6357 person_billable_flag_tab, item_UOM_tab, item_date_tab,
6358 PJI_SUMMARIZED_FLAG_tab,
6359 CAPACITY_QUANTITY_tab,
6360 OVERCOMMITMENT_QTY_tab,
6361 OVERPROVISIONAL_QTY_tab,
6362 OVER_PROV_CONF_QTY_tab,
6363 CONFIRMED_QTY_tab,
6364 PROVISIONAL_QTY_tab,
6365 JOB_ID_tab,
6366 PROJECT_ID_tab,
6367 RESOURCE_ID_tab,
6368 EXP_ORGANIZATION_ID_tab,
6369 item_quantity_tab, expenditure_org_id_tab,
6370 project_org_id_tab, pvdr_acct_curr_code_tab,
6371 pvdr_acct_amount_tab, rcvr_acct_curr_code_tab,
6372 rcvr_acct_amount_tab, proj_currency_code_tab,
6373 proj_amount_tab, denom_currency_code_tab, denom_amount_tab,
6374 tp_amount_type_tab, billable_flag_tab,
6375 forecast_summarized_code_tab, util_summarized_code_tab,
6376 work_type_id_tab, resource_util_category_id_tab,
6377 org_util_category_id_tab, resource_util_weighted_tab,
6378 org_util_weighted_tab, provisional_flag_tab,
6379 reversed_flag_tab, net_zero_flag_tab,
6380 reduce_capacity_flag_tab, line_num_reversed_tab
6381 FROM pa_forecast_item_details dtl, pa_forecast_items hdr
6382 WHERE hdr.assignment_id = p_assignment_id
6383 AND hdr.delete_flag = 'N'
6384 AND dtl.forecast_item_id = hdr.forecast_item_id
6385 AND dtl.line_num =
6386 (SELECT max(line_num)
6387 FROM pa_forecast_item_details dtl1
6388 WHERE dtl1.forecast_item_id = hdr.forecast_item_id AND trunc(dtl1.item_date) = trunc(hdr.item_date) ) -- 4918687 SQL ID 14905526
6389 AND trunc(dtl.item_date) = trunc(hdr.item_date) -- 4918687 SQL ID 14905526
6390 order by dtl.item_date, dtl.forecast_item_id ;
6391
6392 IF forecast_item_id_tab.count = 0 THEN
6393
6394 Print_message( 'Leaving Delete_FI_Dtl');
6395
6396 x_return_status := lv_return_status;
6397
6398 RETURN;
6399
6400 END IF;
6401
6402 TmpRevTab.Delete;
6403 TmpUpdTab.Delete;
6404
6405 -- Move to one table FROM multiple tables
6406
6407 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
6408
6409 TmpUpdTab(j).forecast_item_id := forecast_item_id_tab(j);
6410 TmpUpdTab(j).amount_type_id :=amount_type_id_tab(j);
6411 TmpUpdTab(j).line_num := line_num_tab(j);
6412 TmpUpdTab(j).resource_type_code := resource_type_code_tab(j);
6413 TmpUpdTab(j).person_billable_flag :=
6414 person_billable_flag_tab(j);
6415 TmpUpdTab(j).item_Uom := item_UOM_tab(j);
6416 TmpUpdTab(j).item_date := item_date_tab(j);
6417 TmpUpdTab(j).item_quantity := item_quantity_tab(j);
6418 TmpUpdTab(j).expenditure_org_id := expenditure_org_id_tab(j);
6419 TmpUpdTab(j).project_org_id := project_org_id_tab(j);
6420 TmpUpdTab(j).pvdr_acct_curr_code := pvdr_acct_curr_code_tab(j);
6421 TmpUpdTab(j).PJI_SUMMARIZED_FLAG := PJI_SUMMARIZED_FLAG_tab(j);
6422 TmpUpdTab(j).CAPACITY_QUANTITY := CAPACITY_QUANTITY_tab(j);
6423 TmpUpdTab(j).OVERCOMMITMENT_QTY := OVERCOMMITMENT_QTY_tab(j);
6424 TmpUpdTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
6425 TmpUpdTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
6426 TmpUpdTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
6427 TmpUpdTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
6428 TmpUpdTab(j).JOB_ID := JOB_ID_tab(j);
6429 TmpUpdTab(j).PROJECT_ID := PROJECT_ID_tab(j);
6430 TmpUpdTab(j).RESOURCE_ID := RESOURCE_ID_tab(j);
6431 TmpUpdTab(j).EXPENDITURE_ORGANIZATION_ID := EXP_ORGANIZATION_ID_tab(j);
6432 TmpUpdTab(j).pvdr_acct_amount := pvdr_acct_amount_tab(j);
6433 TmpUpdTab(j).rcvr_acct_curr_code :=
6434 rcvr_acct_curr_code_tab(j);
6435 TmpUpdTab(j).rcvr_acct_amount := rcvr_acct_amount_tab(j);
6436 TmpUpdTab(j).proj_currency_code := proj_currency_code_tab(j);
6437 TmpUpdTab(j).proj_amount := proj_amount_tab(j);
6438 TmpUpdTab(j).denom_currency_code := denom_currency_code_tab(j);
6439 TmpUpdTab(j).denom_amount := denom_amount_tab(j);
6440 TmpUpdTab(j).tp_amount_type := tp_amount_type_tab(j);
6441 TmpUpdTab(j).billable_flag := billable_flag_tab(j);
6442 TmpUpdTab(j).forecast_summarized_code :=
6443 forecast_summarized_code_tab(j);
6444 TmpUpdTab(j).util_summarized_code :=
6445 util_summarized_code_tab(j);
6446 TmpUpdTab(j).work_type_id := work_type_id_tab(j);
6447 TmpUpdTab(j).resource_util_category_id :=
6448 resource_util_category_id_tab(j);
6449 TmpUpdTab(j).org_util_category_id :=
6450 org_util_category_id_tab(j);
6451 TmpUpdTab(j).resource_util_weighted :=
6452 resource_util_weighted_tab(j);
6453 TmpUpdTab(j).org_util_weighted :=
6454 org_util_weighted_tab(j);
6455 TmpUpdTab(j).provisional_flag := provisional_flag_tab(j);
6456 TmpUpdTab(j).reversed_flag := 'Y';
6457 TmpUpdTab(j).net_zero_flag := net_zero_flag_tab(j);
6458 TmpUpdTab(j).reduce_capacity_flag :=
6459 reduce_capacity_flag_tab(j);
6460 TmpUpdTab(j).line_num_reversed := line_num_reversed_tab(j);
6461
6462 END LOOP;
6463
6464 l_rev_index := 1;
6465
6466 if (TmpUpdTab.count <> 0) then
6467 FOR j IN TmpUpdTab.FIRST..TmpUpdTab.LAST LOOP
6468 IF TmpUpdTab.exists(j) then
6469
6470 IF (NVL(TmpUpdTab(j).forecast_summarized_code,'Y') = 'Y'
6471 OR NVL(TmpUpdTab(j).PJI_SUMMARIZED_FLAG,'Y') = 'Y'
6472 OR NVL(TmpUpdTab(j).util_summarized_code,'Y') = 'Y' )
6473 AND (
6474 NVL(TmpUpdTab(j).CAPACITY_QUANTITY,0) > 0 OR
6475 NVL(TmpUpdTab(j).OVERCOMMITMENT_QTY,0) > 0 OR
6476 NVL(TmpUpdTab(j).OVERPROVISIONAL_QTY,0) > 0 OR
6477 NVL(TmpUpdTab(j).OVER_PROV_CONF_QTY,0) > 0 OR
6478 NVL(TmpUpdTab(j).CONFIRMED_QTY,0) > 0 OR
6479 NVL(TmpUpdTab(j).PROVISIONAL_QTY,0) > 0 OR
6480 TmpUpdTab(j).item_quantity > 0
6481 ) THEN
6482
6483 TmpRevTab(l_rev_index) := TmpUpdTab(j);
6484 IF (NVL(TmpUpdTab(j).CAPACITY_QUANTITY,0) = 0) THEN
6485 TmpRevTab(l_rev_index).CAPACITY_QUANTITY := NULL;
6486 ELSE
6487 TmpRevTab(l_rev_index).CAPACITY_QUANTITY :=
6488 NVL(TmpUpdTab(j).CAPACITY_QUANTITY,0) * -1;
6489 END IF;
6490 IF (NVL(TmpUpdTab(j).OVERCOMMITMENT_QTY,0) = 0) THEN
6491 TmpRevTab(l_rev_index).OVERCOMMITMENT_QTY := NULL;
6492 ELSE
6493 TmpRevTab(l_rev_index).OVERCOMMITMENT_QTY :=
6494 NVL(TmpUpdTab(j).OVERCOMMITMENT_QTY,0) * -1;
6495 END IF;
6496 IF (NVL(TmpUpdTab(j).OVERPROVISIONAL_QTY,0) = 0) THEN
6497 TmpRevTab(l_rev_index).OVERPROVISIONAL_QTY := NULL;
6498 ELSE
6499 TmpRevTab(l_rev_index).OVERPROVISIONAL_QTY :=
6500 NVL(TmpUpdTab(j).OVERPROVISIONAL_QTY,0) * -1;
6501 END IF;
6502 IF (NVL(TmpUpdTab(j).OVER_PROV_CONF_QTY,0) = 0) THEN
6503 TmpRevTab(l_rev_index).OVER_PROV_CONF_QTY := NULL;
6504 ELSE
6505 TmpRevTab(l_rev_index).OVER_PROV_CONF_QTY :=
6506 NVL(TmpUpdTab(j).OVER_PROV_CONF_QTY,0) * -1;
6507 END IF;
6508 IF (NVL(TmpUpdTab(j).CONFIRMED_QTY,0) = 0) THEN
6509 TmpRevTab(l_rev_index).CONFIRMED_QTY := NULL;
6510 ELSE
6511 TmpRevTab(l_rev_index).CONFIRMED_QTY :=
6512 NVL(TmpUpdTab(j).CONFIRMED_QTY,0) * -1;
6513 END IF;
6514 IF (NVL(TmpUpdTab(j).PROVISIONAL_QTY,0) = 0) THEN
6515 TmpRevTab(l_rev_index).PROVISIONAL_QTY := NULL;
6516 ELSE
6517 TmpRevTab(l_rev_index).PROVISIONAL_QTY :=
6518 NVL(TmpUpdTab(j).PROVISIONAL_QTY,0) * -1;
6519 END IF;
6520 TmpRevTab(l_rev_index).item_quantity :=
6521 TmpUpdTab(j).item_quantity * -1;
6522 TmpRevTab(l_rev_index).resource_util_weighted :=
6523 TmpUpdTab(j).resource_util_weighted * -1;
6524 TmpRevTab(l_rev_index).org_util_weighted :=
6525 TmpUpdTab(j).org_util_weighted * -1;
6526
6527 IF NVL(TmpUpdTab(j).forecast_summarized_code,'Y') = 'Y' THEN
6528
6529 TmpRevTab(l_rev_index).forecast_summarized_code := 'N';
6530
6531 ELSE
6532
6533 TmpRevTab(l_rev_index).forecast_summarized_code :=
6534 TmpUpdTab(j).forecast_summarized_code;
6535
6536 END IF;
6537
6538 IF NVL(TmpUpdTab(j).PJI_SUMMARIZED_FLAG,'Y') = 'Y' THEN
6539 TmpRevTab(l_rev_index).PJI_SUMMARIZED_FLAG := 'N';
6540 ELSE
6541 TmpRevTab(l_rev_index).PJI_SUMMARIZED_FLAG :=
6542 TmpUpdTab(j).PJI_SUMMARIZED_FLAG;
6543 END IF;
6544
6545 IF NVL(TmpUpdTab(j).util_summarized_code,'Y') = 'Y' THEN
6546
6547 TmpRevTab(l_rev_index).util_summarized_code := 'N';
6548
6549 ELSE
6550
6551 TmpRevTab(l_rev_index).util_summarized_code :=
6552 TmpUpdTab(j).util_summarized_code;
6553
6554 END IF;
6555
6556 TmpRevTab(l_rev_index).line_num_reversed :=
6557 TmpUpdTab(j).line_num; -- Bug 4244913
6558 TmpRevTab(l_rev_index).line_num :=
6559 TmpUpdTab(j).line_num + 1; -- Bug 4244913
6560 TmpRevTab(l_rev_index).net_zero_flag := 'Y';
6561 l_rev_index := l_rev_index + 1;
6562
6563 TmpUpdTab(j).net_zero_flag := 'Y';
6564 TmpUpdTab(j).reversed_flag := 'Y';
6565
6566 ELSE
6567
6568 TmpUpdTab(j).CAPACITY_QUANTITY := NULL;
6569 TmpUpdTab(j).OVERCOMMITMENT_QTY := NULL;
6570 TmpUpdTab(j).OVERPROVISIONAL_QTY := NULL;
6571 TmpUpdTab(j).OVER_PROV_CONF_QTY := NULL;
6572 TmpUpdTab(j).CONFIRMED_QTY := NULL;
6573 TmpUpdTab(j).PROVISIONAL_QTY := NULL;
6574 TmpUpdTab(j).item_quantity := 0;
6575 TmpUpdTab(j).org_util_weighted :=0;
6576 TmpUpdTab(j).resource_util_weighted :=0;
6577
6578 END IF;
6579 end if;
6580 END LOOP;
6581 end if;
6582
6583 IF TmpRevTab.COUNT > 0 THEN
6584
6585 Print_message(
6586 'Calling PA_FORECAST_DTLS_PKG.Insert_Rows ');
6587
6588 PA_FORECAST_DTLS_PKG.Insert_Rows(TmpRevTab,
6589 lv_return_status,
6590 x_msg_count,
6591 x_msg_data);
6592
6593 END IF;
6594
6595 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
6596
6597 IF TmpUpdTab.COUNT > 0 THEN
6598
6599 Print_message(
6600 'Calling PA_FORECAST_DTLS_PKG.Update_Rows ');
6601
6602 PA_FORECAST_DTLS_PKG.Update_Rows(TmpUpdTab,
6603 lv_return_status,
6604 x_msg_count,
6605 x_msg_data);
6606 END IF;
6607
6608 END IF;
6609
6610
6611 Print_message( 'Leaving Delete_FI_Dtl');
6612
6613 PA_DEBUG.Reset_Err_Stack;
6614
6615 x_return_status := lv_return_status;
6616
6617 EXCEPTION
6618
6619 WHEN OTHERS THEN
6620 print_message('Failed in Delete FI Dtl api');
6621 print_message('SQLCODE'||sqlcode||sqlerrm);
6622
6623 x_msg_count := 1;
6624 x_msg_data := sqlerrm;
6625 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6626
6627 FND_MSG_PUB.add_exc_msg
6628 (p_pkg_name =>
6629 'PA_FORECASTITEM_PVT.Delete_FI_Dtl',
6630 p_procedure_name => PA_DEBUG.G_Err_Stack);
6631
6632 If x_msg_count = 1 THEN
6633 pa_interface_utils_pub.get_messages
6634 (p_encoded => FND_API.G_TRUE,
6635 p_msg_index => 1,
6636 p_msg_count => x_msg_count,
6637 p_msg_data => x_msg_data,
6638 p_data => l_data , -- 4537865
6639 p_msg_index_out => l_msg_index_out );
6640 x_msg_data := l_data ; -- 4537865
6641 End If;
6642 Print_message(x_msg_data);
6643
6644 RAISE;
6645
6646 END Delete_FI_Dtl;
6647
6648 /* ---------------------------------------------------------------------
6649 | Procedure : Delete_FI
6650 | Purpose : To delete all the forecast items FOR the given resource
6651 | Parameters : p_resource_id
6652 | x_return_status -
6653 | x_msg_count -
6654 | x_msg_data -
6655 +----------------------------------------------------------------------*/
6656 PROCEDURE Delete_FI(
6657 p_resource_id IN NUMBER,
6658 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
6659 x_msg_count OUT NOCOPY NUMBER, -- 4537865
6660 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
6661
6662 lv_return_status VARCHAR2(30);
6663
6664 BEGIN
6665
6666 lv_return_status := FND_API.G_RET_STS_SUCCESS;
6667
6668 Print_message( 'Entering Delete_FI');
6669
6670 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Delete_FI');
6671
6672 Delete_FI_Dtl(
6673 p_resource_id => p_resource_id,
6674 x_return_status => lv_return_status,
6675 x_msg_count => x_msg_count,
6676 x_msg_data => x_msg_data);
6677
6678 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
6679
6680 Delete_FI_Hdr(
6681 p_resource_id => p_resource_id,
6682 x_return_status => lv_return_status,
6683 x_msg_count => x_msg_count,
6684 x_msg_data => x_msg_data);
6685
6686 END IF;
6687
6688 Print_message(
6689 'Leaving Delete_FI');
6690
6691 PA_DEBUG.Reset_Err_Stack;
6692
6693 x_return_status := lv_return_status;
6694
6695 EXCEPTION
6696
6697 WHEN OTHERS THEN
6698 print_message('Failed in Delete FI api');
6699 print_message('SQLCODE'||sqlcode||sqlerrm);
6700
6701 x_msg_count := 1;
6702 x_msg_data := sqlerrm;
6703 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6704
6705 FND_MSG_PUB.add_exc_msg
6706 (p_pkg_name =>
6707 'PA_FORECASTITEM_PVT.Delete_FI',
6708 p_procedure_name => PA_DEBUG.G_Err_Stack);
6709
6710 Print_message(x_msg_data);
6711
6712 --RAISE;
6713
6714 END Delete_FI;
6715
6716 /* ---------------------------------------------------------------------
6717 | Procedure : Delete_FI_Hdr
6718 | Purpose : To reverse the existing forecast items
6719 | Parameters : p_resource_id
6720 | x_return_status
6721 | x_msg_count
6722 | x_msg_data
6723 +----------------------------------------------------------------------*/
6724 PROCEDURE Delete_FI_Hdr(
6725 p_resource_id IN NUMBER,
6726 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
6727 x_msg_count OUT NOCOPY NUMBER, -- 4537865
6728 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
6729
6730
6731 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6732 forecast_item_type_tab PA_FORECAST_GLOB.VCTabTyp;
6733 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6734 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6735 expenditure_orgn_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6736 project_organization_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6737 project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6738 project_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
6739 person_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6740 resource_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6741 borrowed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6742 assignment_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6743 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
6744 item_uom_tab PA_FORECAST_GLOB.VCTabTyp;
6745 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
6746 pvdr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
6747 pvdr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
6748 pvdr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
6749 rcvr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
6750 rcvr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
6751 rcvr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
6752 global_exp_period_end_date_tab PA_FORECAST_GLOB.DateTabTyp;
6753 expenditure_type_tab PA_FORECAST_GLOB.VCTabTyp;
6754 expenditure_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
6755 cost_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
6756 rev_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
6757 tp_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
6758 burden_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
6759 other_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
6760 delete_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6761 error_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6762 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6763
6764 TmpUpdTab PA_FORECAST_GLOB.FIHdrTabTyp;
6765
6766 lv_return_status VARCHAR2(30);
6767
6768 BEGIN
6769
6770 lv_return_status := FND_API.G_RET_STS_SUCCESS;
6771
6772 Print_message( 'Entering Delete_FI_Hdr');
6773
6774 TmpUpdTab.delete;
6775 forecast_item_id_tab.delete;
6776 forecast_item_type_tab.delete;
6777 project_org_id_tab.delete;
6778 expenditure_org_id_tab.delete;
6779 expenditure_orgn_id_tab.delete;
6780 project_organization_id_tab.delete;
6781 project_id_tab.delete;
6782 project_type_class_tab.delete;
6783 person_id_tab.delete;
6784 resource_id_tab.delete;
6785 borrowed_flag_tab.delete;
6786 assignment_id_tab.delete;
6787 item_date_tab.delete;
6788 item_uom_tab.delete;
6789 item_quantity_tab.delete;
6790 pvdr_period_set_name_tab.delete;
6791 pvdr_pa_period_name_tab.delete;
6792 pvdr_gl_period_name_tab.delete;
6793 rcvr_period_set_name_tab.delete;
6794 rcvr_pa_period_name_tab.delete;
6795 rcvr_gl_period_name_tab.delete;
6796 global_exp_period_end_date_tab.delete;
6797 expenditure_type_tab.delete;
6798 expenditure_type_class_tab.delete;
6799 cost_rejection_code_tab.delete;
6800 rev_rejection_code_tab.delete;
6801 tp_rejection_code_tab.delete;
6802 burden_rejection_code_tab.delete;
6803 other_rejection_code_tab.delete;
6804 delete_flag_tab.delete;
6805 error_flag_tab.delete;
6806 provisional_flag_tab.delete;
6807
6808 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Delete_FI_Hdr');
6809
6810 SELECT forecast_item_id, forecast_item_type,
6811 project_org_id , expenditure_org_id,
6812 project_organization_id, expenditure_organization_id ,
6813 project_id, project_type_class, person_id ,
6814 resource_id, borrowed_flag, assignment_id,
6815 item_date, item_uom, item_quantity,
6816 pvdr_period_set_name, pvdr_pa_period_name,
6817 pvdr_gl_period_name, rcvr_period_set_name,
6818 rcvr_pa_period_name, rcvr_gl_period_name,
6819 global_exp_period_end_date, expenditure_type,
6820 expenditure_type_class, cost_rejection_code,
6821 rev_rejection_code, tp_rejection_code,
6822 burden_rejection_code, other_rejection_code,
6823 delete_flag, error_flag, provisional_flag
6824 BULK COLLECT INTO forecast_item_id_tab, forecast_item_type_tab,
6825 project_org_id_tab, expenditure_org_id_tab,
6826 project_organization_id_tab, expenditure_orgn_id_tab,
6827 project_id_tab, project_type_class_tab, person_id_tab,
6828 resource_id_tab, borrowed_flag_tab, assignment_id_tab,
6829 item_date_tab, item_uom_tab, item_quantity_tab,
6830 pvdr_period_set_name_tab, pvdr_pa_period_name_tab,
6831 pvdr_gl_period_name_tab, rcvr_period_set_name_tab,
6832 rcvr_pa_period_name_tab, rcvr_gl_period_name_tab,
6833 global_exp_period_end_date_tab, expenditure_type_tab,
6834 expenditure_type_class_tab, cost_rejection_code_tab,
6835 rev_rejection_code_tab, tp_rejection_code_tab,
6836 burden_rejection_code_tab, other_rejection_code_tab,
6837 delete_flag_tab, error_flag_tab, provisional_flag_tab
6838 FROM pa_forecast_items hdr
6839 WHERE hdr.resource_id = p_resource_id
6840 AND hdr.delete_flag = 'N'
6841 AND hdr.forecast_item_type = 'U'
6842 order by item_date, forecast_item_id ;
6843
6844 IF forecast_item_id_tab.count = 0 THEN
6845
6846 Print_message(
6847 'Leaving Delete_FI_Hdr');
6848
6849 x_return_status := lv_return_status;
6850
6851 RETURN;
6852
6853 END IF;
6854
6855 -- Move to one table FROM multiple tables
6856
6857 TmpUpdTab.Delete;
6858
6859 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
6860
6861 TmpUpdTab(j).forecast_item_id := forecast_item_id_tab(j);
6862 TmpUpdTab(j).forecast_item_type := forecast_item_type_tab(j);
6863 TmpUpdTab(j).project_org_id := project_org_id_tab(j);
6864 TmpUpdTab(j).expenditure_org_id := expenditure_org_id_tab(j);
6865 TmpUpdTab(j).project_organization_id :=
6866 project_organization_id_tab(j);
6867 TmpUpdTab(j).expenditure_organization_id :=
6868 expenditure_orgn_id_tab(j);
6869 TmpUpdTab(j).project_id := project_id_tab(j);
6870 TmpUpdTab(j).project_type_class := project_type_class_tab(j);
6871 TmpUpdTab(j).person_id := person_id_tab(j);
6872 TmpUpdTab(j).resource_id := resource_id_tab(j);
6873 TmpUpdTab(j).borrowed_flag := borrowed_flag_tab(j);
6874 TmpUpdTab(j).assignment_id := assignment_id_tab(j);
6875 TmpUpdTab(j).item_date := item_date_tab(j);
6876 TmpUpdTab(j).item_uom := item_uom_tab(j);
6877 TmpUpdTab(j).CAPACITY_QUANTITY := NULL;
6878 TmpUpdTab(j).OVERCOMMITMENT_QTY := NULL;
6879 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
6880 TmpUpdTab(j).OVERCOMMITMENT_QUANTITY := NULL;
6881 -- End fix for bug 2504222
6882 TmpUpdTab(j).OVERPROVISIONAL_QTY := NULL;
6883 TmpUpdTab(j).OVER_PROV_CONF_QTY := NULL;
6884 TmpUpdTab(j).CONFIRMED_QTY := NULL;
6885 TmpUpdTab(j).PROVISIONAL_QTY := NULL;
6886 TmpUpdTab(j).item_quantity := 0;
6887 TmpUpdTab(j).pvdr_period_set_name :=
6888 pvdr_period_set_name_tab(j);
6889 TmpUpdTab(j).pvdr_pa_period_name := pvdr_pa_period_name_tab(j);
6890 TmpUpdTab(j).pvdr_gl_period_name := pvdr_gl_period_name_tab(j);
6891 TmpUpdTab(j).rcvr_period_set_name :=
6892 rcvr_period_set_name_tab(j);
6893 TmpUpdTab(j).rcvr_pa_period_name := rcvr_pa_period_name_tab(j);
6894 TmpUpdTab(j).rcvr_gl_period_name := rcvr_gl_period_name_tab(j);
6895 TmpUpdTab(j).global_exp_period_end_date :=
6896 global_exp_period_end_date_tab(j);
6897 TmpUpdTab(j).expenditure_type := expenditure_type_tab(j);
6898 TmpUpdTab(j).expenditure_type_class :=
6899 expenditure_type_class_tab(j);
6900 TmpUpdTab(j).cost_rejection_code := cost_rejection_code_tab(j);
6901 TmpUpdTab(j).rev_rejection_code := rev_rejection_code_tab(j);
6902 TmpUpdTab(j).tp_rejection_code := tp_rejection_code_tab(j);
6903 TmpUpdTab(j).burden_rejection_code :=
6904 burden_rejection_code_tab(j);
6905 TmpUpdTab(j).other_rejection_code :=
6906 other_rejection_code_tab(j);
6907 TmpUpdTab(j).delete_flag := 'Y';
6908 TmpUpdTab(j).error_flag := error_flag_tab(j);
6909 TmpUpdTab(j).provisional_flag := provisional_flag_tab(j);
6910
6911 END LOOP;
6912
6913 IF TmpUpdTab.COUNT > 0 THEN
6914
6915 Print_message(
6916 'Calling PA_FORECAST_HDR_PKG.Update_Rows ');
6917
6918 PA_FORECAST_HDR_PKG.Update_Rows(TmpUpdTab,
6919 lv_return_status,
6920 x_msg_count,
6921 x_msg_data);
6922
6923 END IF;
6924
6925
6926 Print_message(
6927 'Leaving Delete_FI_Hdr');
6928
6929 PA_DEBUG.Reset_Err_Stack;
6930
6931 x_return_status := lv_return_status;
6932
6933 EXCEPTION
6934
6935 WHEN NO_DATA_FOUND THEN
6936
6937 x_return_status := lv_return_status;
6938
6939 NULL;
6940
6941 WHEN OTHERS THEN
6942 print_message('Failed in Delete_FI_Hdr api');
6943 print_message('SQLCODE'||sqlcode||sqlerrm);
6944
6945 x_msg_count := 1;
6946 x_msg_data := sqlerrm;
6947 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6948
6949 FND_MSG_PUB.add_exc_msg
6950 (p_pkg_name =>
6951 'PA_FORECASTITEM_PVT.Delete_FI_Hdr',
6952 p_procedure_name => PA_DEBUG.G_Err_Stack);
6953
6954 Print_message(x_msg_data);
6955
6956 --RAISE;
6957
6958 END Delete_FI_Hdr;
6959
6960
6961 /* ---------------------------------------------------------------------
6962 | Procedure : Delete_FI_Dtl
6963 | Purpose : To reverse the existing forecast items detail(Requirement)
6964 | when a resource is identified FOR a requirement
6965 | Parameters : p_assignment_id - Input Assignment ID
6966 | x_return_status -
6967 | x_msg_count -
6968 | x_msg_data -
6969 +----------------------------------------------------------------------*/
6970
6971 PROCEDURE Delete_FI_Dtl(
6972 p_resource_id IN NUMBER,
6973 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
6974 x_msg_count OUT NOCOPY NUMBER, -- 4537865
6975 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
6976
6977
6978 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6979 amount_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6980 line_num_tab PA_FORECAST_GLOB.NumberTabTyp;
6981 resource_type_code_tab PA_FORECAST_GLOB.VCTabTyp;
6982 person_billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
6983 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
6984 item_UOM_tab PA_FORECAST_GLOB.VCTabTyp;
6985 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
6986 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6987 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
6988 PJI_SUMMARIZED_FLAG_tab PA_FORECAST_GLOB.VC1TabTyp;
6989 CAPACITY_QUANTITY_tab PA_FORECAST_GLOB.NumberTabTyp;
6990 OVERCOMMITMENT_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6991 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6992 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6993 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6994 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
6995 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
6996 PROJECT_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
6997 RESOURCE_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
6998 EXP_ORGANIZATION_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
6999 pvdr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
7000 pvdr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
7001 rcvr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
7002 rcvr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
7003 proj_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
7004 proj_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
7005 denom_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
7006 denom_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
7007 tp_amount_type_tab PA_FORECAST_GLOB.VCTabTyp;
7008 billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
7009 forecast_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
7010 util_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
7011 work_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
7012 resource_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
7013 org_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
7014 resource_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
7015 org_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
7016 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
7017 reversed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
7018 net_zero_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
7019 reduce_capacity_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
7020 line_num_reversed_tab PA_FORECAST_GLOB.NumberTabTyp;
7021
7022 TmpRevTab PA_FORECAST_GLOB.FIDtlTabTyp;
7023 TmpUpdTab PA_FORECAST_GLOB.FIDtlTabTyp;
7024 l_rev_index NUMBER;
7025 lv_return_status VARCHAR2(30);
7026
7027 BEGIN
7028
7029 lv_return_status := FND_API.G_RET_STS_SUCCESS;
7030
7031 Print_message( 'Entering Delete_FI_Dtl');
7032
7033 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Delete_FI_Dtl');
7034
7035 TmpRevTab.Delete;
7036 TmpUpdTab.Delete;
7037 forecast_item_id_tab.delete;
7038 amount_type_id_tab.delete;
7039 line_num_tab.delete;
7040 resource_type_code_tab.delete;
7041 person_billable_flag_tab.delete;
7042 item_date_tab.delete;
7043 item_UOM_tab.delete;
7044 item_quantity_tab.delete;
7045 expenditure_org_id_tab.delete;
7046 project_org_id_tab.delete;
7047 PJI_SUMMARIZED_FLAG_tab.delete;
7048 CAPACITY_QUANTITY_tab.delete;
7049 OVERCOMMITMENT_QTY_tab.delete;
7050 OVERPROVISIONAL_QTY_tab.delete;
7051 OVER_PROV_CONF_QTY_tab.delete;
7052 CONFIRMED_QTY_tab.delete;
7053 PROVISIONAL_QTY_tab.delete;
7054 JOB_ID_tab.delete;
7055 PROJECT_ID_tab.delete;
7056 RESOURCE_ID_tab.delete;
7057 EXP_ORGANIZATION_ID_tab.delete;
7058 pvdr_acct_curr_code_tab.delete;
7059 pvdr_acct_amount_tab.delete;
7060 rcvr_acct_curr_code_tab.delete;
7061 rcvr_acct_amount_tab.delete;
7062 proj_currency_code_tab.delete;
7063 proj_amount_tab.delete;
7064 denom_currency_code_tab.delete;
7065 denom_amount_tab.delete;
7066 tp_amount_type_tab.delete;
7067 billable_flag_tab.delete;
7068 forecast_summarized_code_tab.delete;
7069 util_summarized_code_tab.delete;
7070 work_type_id_tab.delete;
7071 resource_util_category_id_tab.delete;
7072 org_util_category_id_tab.delete;
7073 resource_util_weighted_tab.delete;
7074 org_util_weighted_tab.delete;
7075 provisional_flag_tab.delete;
7076 reversed_flag_tab.delete;
7077 net_zero_flag_tab.delete;
7078 reduce_capacity_flag_tab.delete;
7079 line_num_reversed_tab.delete;
7080
7081 SELECT dtl.forecast_item_id, dtl.amount_type_id,
7082 dtl.line_num, dtl.resource_type_code,
7083 dtl.person_billable_flag, dtl.item_UOM, dtl.item_date,
7084 dtl.PJI_SUMMARIZED_FLAG,
7085 dtl.CAPACITY_QUANTITY,
7086 dtl.OVERCOMMITMENT_QTY,
7087 dtl.OVERPROVISIONAL_QTY,
7088 dtl.OVER_PROV_CONF_QTY,
7089 dtl.CONFIRMED_QTY,
7090 dtl.PROVISIONAL_QTY,
7091 dtl.JOB_ID,
7092 dtl.PROJECT_ID,
7093 dtl.RESOURCE_ID,
7094 dtl.EXPENDITURE_ORGANIZATION_ID,
7095 dtl.item_quantity, dtl.expenditure_org_id,
7096 dtl.project_org_id, dtl.pvdr_acct_curr_code,
7097 dtl.pvdr_acct_amount, dtl.rcvr_acct_curr_code,
7098 dtl.rcvr_acct_amount, dtl.proj_currency_code,
7099 dtl.proj_amount, dtl.denom_currency_code, dtl.denom_amount,
7100 dtl.tp_amount_type, dtl.billable_flag,
7101 dtl.forecast_summarized_code, dtl.util_summarized_code,
7102 dtl.work_type_id, dtl.resource_util_category_id,
7103 dtl.org_util_category_id, dtl.resource_util_weighted,
7104 dtl.org_util_weighted, dtl.provisional_flag,
7105 dtl.reversed_flag, dtl.net_zero_flag,
7106 dtl.reduce_capacity_flag, dtl.line_num_reversed
7107 BULK COLLECT INTO forecast_item_id_tab,amount_type_id_tab,
7108 line_num_tab, resource_type_code_tab,
7109 person_billable_flag_tab, item_UOM_tab, item_date_tab,
7110 PJI_SUMMARIZED_FLAG_tab,
7111 CAPACITY_QUANTITY_tab,
7112 OVERCOMMITMENT_QTY_tab,
7113 OVERPROVISIONAL_QTY_tab,
7114 OVER_PROV_CONF_QTY_tab,
7115 CONFIRMED_QTY_tab,
7116 PROVISIONAL_QTY_tab,
7117 JOB_ID_tab,
7118 PROJECT_ID_tab,
7119 RESOURCE_ID_tab,
7120 EXP_ORGANIZATION_ID_tab,
7121 item_quantity_tab, expenditure_org_id_tab,
7122 project_org_id_tab, pvdr_acct_curr_code_tab,
7123 pvdr_acct_amount_tab, rcvr_acct_curr_code_tab,
7124 rcvr_acct_amount_tab, proj_currency_code_tab,
7125 proj_amount_tab, denom_currency_code_tab, denom_amount_tab,
7126 tp_amount_type_tab, billable_flag_tab,
7127 forecast_summarized_code_tab, util_summarized_code_tab,
7128 work_type_id_tab, resource_util_category_id_tab,
7129 org_util_category_id_tab, resource_util_weighted_tab,
7130 org_util_weighted_tab, provisional_flag_tab,
7131 reversed_flag_tab, net_zero_flag_tab,
7132 reduce_capacity_flag_tab, line_num_reversed_tab
7133 FROM pa_forecast_item_details dtl, pa_forecast_items hdr
7134 WHERE hdr.resource_id = p_resource_id
7135 AND hdr.delete_flag = 'N'
7136 AND hdr.forecast_item_type = 'U'
7137 AND dtl.forecast_item_id = hdr.forecast_item_id
7138 AND dtl.line_num =
7139 (SELECT max(line_num)
7140 FROM pa_forecast_item_details dtl1
7141 WHERE dtl1.forecast_item_id = hdr.forecast_item_id AND trunc(dtl1.item_date) = trunc(hdr.item_date) ) -- 4918687 SQL ID 14905571
7142 AND trunc(dtl.item_date) = trunc(hdr.item_date) -- 4918687 SQL ID 14905571
7143 order by dtl.item_date, dtl.forecast_item_id ;
7144
7145 IF forecast_item_id_tab.count = 0 THEN
7146
7147 Print_message( 'Leaving Delete_FI_Dtl');
7148
7149 x_return_status := lv_return_status;
7150
7151 RETURN;
7152
7153 END IF;
7154
7155 TmpRevTab.Delete;
7156 TmpUpdTab.Delete;
7157
7158 -- Move to one table FROM multiple tables
7159
7160 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
7161
7162 TmpUpdTab(j).forecast_item_id := forecast_item_id_tab(j);
7163 TmpUpdTab(j).amount_type_id :=amount_type_id_tab(j);
7164 TmpUpdTab(j).line_num := line_num_tab(j);
7165 TmpUpdTab(j).resource_type_code := resource_type_code_tab(j);
7166 TmpUpdTab(j).person_billable_flag :=
7167 person_billable_flag_tab(j);
7168 TmpUpdTab(j).item_Uom := item_UOM_tab(j);
7169 TmpUpdTab(j).item_date := item_date_tab(j);
7170 TmpUpdTab(j).item_quantity := item_quantity_tab(j);
7171 TmpUpdTab(j).expenditure_org_id := expenditure_org_id_tab(j);
7172 TmpUpdTab(j).project_org_id := project_org_id_tab(j);
7173 TmpUpdTab(j).pvdr_acct_curr_code := pvdr_acct_curr_code_tab(j);
7174 TmpUpdTab(j).PJI_SUMMARIZED_FLAG := PJI_SUMMARIZED_FLAG_tab(j);
7175 TmpUpdTab(j).CAPACITY_QUANTITY := CAPACITY_QUANTITY_tab(j);
7176 TmpUpdTab(j).OVERCOMMITMENT_QTY := OVERCOMMITMENT_QTY_tab(j);
7177 TmpUpdTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
7178 TmpUpdTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
7179 TmpUpdTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
7180 TmpUpdTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
7181 TmpUpdTab(j).JOB_ID := JOB_ID_tab(j);
7182 TmpUpdTab(j).PROJECT_ID := PROJECT_ID_tab(j);
7183 TmpUpdTab(j).RESOURCE_ID := RESOURCE_ID_tab(j);
7184 TmpUpdTab(j).EXPENDITURE_ORGANIZATION_ID := EXP_ORGANIZATION_ID_tab(j);
7185 TmpUpdTab(j).pvdr_acct_amount := pvdr_acct_amount_tab(j);
7186 TmpUpdTab(j).rcvr_acct_curr_code :=
7187 rcvr_acct_curr_code_tab(j);
7188 TmpUpdTab(j).rcvr_acct_amount := rcvr_acct_amount_tab(j);
7189 TmpUpdTab(j).proj_currency_code := proj_currency_code_tab(j);
7190 TmpUpdTab(j).proj_amount := proj_amount_tab(j);
7191 TmpUpdTab(j).denom_currency_code := denom_currency_code_tab(j);
7192 TmpUpdTab(j).denom_amount := denom_amount_tab(j);
7193 TmpUpdTab(j).tp_amount_type := tp_amount_type_tab(j);
7194 TmpUpdTab(j).billable_flag := billable_flag_tab(j);
7195 TmpUpdTab(j).forecast_summarized_code :=
7196 forecast_summarized_code_tab(j);
7197 TmpUpdTab(j).util_summarized_code :=
7198 util_summarized_code_tab(j);
7199 TmpUpdTab(j).work_type_id := work_type_id_tab(j);
7200 TmpUpdTab(j).resource_util_category_id :=
7201 resource_util_category_id_tab(j);
7202 TmpUpdTab(j).org_util_category_id :=
7203 org_util_category_id_tab(j);
7204 TmpUpdTab(j).resource_util_weighted :=
7205 resource_util_weighted_tab(j);
7206 TmpUpdTab(j).org_util_weighted :=
7207 org_util_weighted_tab(j);
7208 TmpUpdTab(j).provisional_flag := provisional_flag_tab(j);
7209 TmpUpdTab(j).reversed_flag := 'Y';
7210 TmpUpdTab(j).net_zero_flag := net_zero_flag_tab(j);
7211 TmpUpdTab(j).reduce_capacity_flag :=
7212 reduce_capacity_flag_tab(j);
7213 TmpUpdTab(j).line_num_reversed := line_num_reversed_tab(j);
7214
7215 END LOOP;
7216
7217 l_rev_index := 1;
7218
7219 if (TmpUpdTab.count <> 0) then
7220 FOR j IN TmpUpdTab.FIRST..TmpUpdTab.LAST LOOP
7221 IF TmpUpdTab.exists(j) then
7222
7223 IF (NVL(TmpUpdTab(j).forecast_summarized_code,'Y') = 'Y'
7224 OR NVL(TmpUpdTab(j).PJI_SUMMARIZED_FLAG,'Y') = 'Y'
7225 OR NVL(TmpUpdTab(j).util_summarized_code,'Y') = 'Y')
7226 AND (
7227 NVL(TmpUpdTab(j).CAPACITY_QUANTITY,0) > 0 OR
7228 NVL(TmpUpdTab(j).OVERCOMMITMENT_QTY,0) > 0 OR
7229 NVL(TmpUpdTab(j).OVERPROVISIONAL_QTY,0) > 0 OR
7230 NVL(TmpUpdTab(j).OVER_PROV_CONF_QTY,0) > 0 OR
7231 NVL(TmpUpdTab(j).CONFIRMED_QTY,0) > 0 OR
7232 NVL(TmpUpdTab(j).PROVISIONAL_QTY,0) > 0 OR
7233 TmpUpdTab(j).item_quantity > 0
7234 ) THEN
7235
7236 TmpRevTab(l_rev_index) := TmpUpdTab(j);
7237 IF (NVL(TmpUpdTab(j).CAPACITY_QUANTITY,0) = 0) THEN
7238 TmpRevTab(l_rev_index).CAPACITY_QUANTITY := NULL;
7239 ELSE
7240 TmpRevTab(l_rev_index).CAPACITY_QUANTITY :=
7241 NVL(TmpUpdTab(j).CAPACITY_QUANTITY,0) * -1;
7242 END IF;
7243 IF (NVL(TmpUpdTab(j).OVERCOMMITMENT_QTY,0) = 0) THEN
7244 TmpRevTab(l_rev_index).OVERCOMMITMENT_QTY := NULL;
7245 ELSE
7246 TmpRevTab(l_rev_index).OVERCOMMITMENT_QTY :=
7247 NVL(TmpUpdTab(j).OVERCOMMITMENT_QTY,0) * -1;
7248 END IF;
7249 IF (NVL(TmpUpdTab(j).OVERPROVISIONAL_QTY,0) = 0) THEN
7250 TmpRevTab(l_rev_index).OVERPROVISIONAL_QTY := NULL;
7251 ELSE
7252 TmpRevTab(l_rev_index).OVERPROVISIONAL_QTY :=
7253 NVL(TmpUpdTab(j).OVERPROVISIONAL_QTY,0) * -1;
7254 END IF;
7255 IF (NVL(TmpUpdTab(j).OVER_PROV_CONF_QTY,0) = 0) THEN
7256 TmpRevTab(l_rev_index).OVER_PROV_CONF_QTY := NULL;
7257 ELSE
7258 TmpRevTab(l_rev_index).OVER_PROV_CONF_QTY :=
7259 NVL(TmpUpdTab(j).OVER_PROV_CONF_QTY,0) * -1;
7260 END IF;
7261 IF (NVL(TmpUpdTab(j).CONFIRMED_QTY,0) = 0) THEN
7262 TmpRevTab(l_rev_index).CONFIRMED_QTY := NULL;
7263 ELSE
7264 TmpRevTab(l_rev_index).CONFIRMED_QTY :=
7265 NVL(TmpUpdTab(j).CONFIRMED_QTY,0) * -1;
7266 END IF;
7267 IF (NVL(TmpUpdTab(j).PROVISIONAL_QTY,0) = 0) THEN
7268 TmpRevTab(l_rev_index).PROVISIONAL_QTY := NULL;
7269 ELSE
7270 TmpRevTab(l_rev_index).PROVISIONAL_QTY :=
7271 NVL(TmpUpdTab(j).PROVISIONAL_QTY,0) * -1;
7272 END IF;
7273 TmpRevTab(l_rev_index).item_quantity :=
7274 TmpUpdTab(j).item_quantity * -1;
7275 TmpRevTab(l_rev_index).resource_util_weighted :=
7276 TmpUpdTab(j).resource_util_weighted * -1;
7277 TmpRevTab(l_rev_index).org_util_weighted :=
7278 TmpUpdTab(j).org_util_weighted * -1;
7279
7280 IF NVL(TmpUpdTab(j).forecast_summarized_code,'Y') = 'Y' THEN
7281
7282 TmpRevTab(l_rev_index).forecast_summarized_code := 'N';
7283
7284 ELSE
7285
7286 TmpRevTab(l_rev_index).forecast_summarized_code :=
7287 TmpUpdTab(j).forecast_summarized_code;
7288
7289 END IF;
7290
7291 IF NVL(TmpUpdTab(j).PJI_SUMMARIZED_FLAG,'Y') = 'Y' THEN
7292 TmpRevTab(l_rev_index).PJI_SUMMARIZED_FLAG := 'N';
7293 ELSE
7294 TmpRevTab(l_rev_index).PJI_SUMMARIZED_FLAG :=
7295 TmpUpdTab(j).PJI_SUMMARIZED_FLAG;
7296 END IF;
7297
7298 IF NVL(TmpUpdTab(j).util_summarized_code,'Y') = 'Y' THEN
7299
7300 TmpRevTab(l_rev_index).util_summarized_code := 'N';
7301
7302 ELSE
7303
7304 TmpRevTab(l_rev_index).util_summarized_code :=
7305 TmpUpdTab(j).util_summarized_code;
7306
7307 END IF;
7308
7309 TmpRevTab(l_rev_index).line_num_reversed :=
7310 TmpUpdTab(j).line_num; -- Added for bug 4244913
7311 -- TmpRevTab(j).line_num; Commented for bug 4244913
7312 TmpRevTab(l_rev_index).line_num :=
7313 TmpUpdTab(j).line_num + 1; -- Added for bug 4244913
7314 -- TmpRevTab(j).line_num + 1; Commented for bug 4244913
7315 TmpRevTab(l_rev_index).net_zero_flag := 'Y';
7316 l_rev_index := l_rev_index + 1;
7317
7318 TmpUpdTab(j).net_zero_flag := 'Y';
7319 TmpUpdTab(j).reversed_flag := 'Y';
7320
7321 ELSE
7322
7323 TmpUpdTab(j).CAPACITY_QUANTITY := NULL;
7324 TmpUpdTab(j).OVERCOMMITMENT_QTY := NULL;
7325 TmpUpdTab(j).OVERPROVISIONAL_QTY := NULL;
7326 TmpUpdTab(j).OVER_PROV_CONF_QTY := NULL;
7327 TmpUpdTab(j).CONFIRMED_QTY := NULL;
7328 TmpUpdTab(j).PROVISIONAL_QTY := NULL;
7329 TmpUpdTab(j).item_quantity := 0;
7330 TmpUpdTab(j).org_util_weighted :=0;
7331 TmpUpdTab(j).resource_util_weighted :=0;
7332
7333 END IF;
7334 END IF;
7335 END LOOP;
7336 END IF;
7337
7338 IF TmpRevTab.COUNT > 0 THEN
7339
7340 Print_message(
7341 'Calling PA_FORECAST_DTLS_PKG.Insert_Rows ');
7342
7343 PA_FORECAST_DTLS_PKG.Insert_Rows(TmpRevTab,
7344 lv_return_status,
7345 x_msg_count,
7346 x_msg_data);
7347
7348 END IF;
7349
7350 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
7351
7352 IF TmpUpdTab.COUNT > 0 THEN
7353
7354 Print_message(
7355 'Calling PA_FORECAST_DTLS_PKG.Update_Rows ');
7356
7357 PA_FORECAST_DTLS_PKG.Update_Rows(TmpUpdTab,
7358 lv_return_status,
7359 x_msg_count,
7360 x_msg_data);
7361 END IF;
7362
7363 END IF;
7364
7365
7366 Print_message( 'Leaving Delete_FI_Dtl');
7367
7368 PA_DEBUG.Reset_Err_Stack;
7369
7370 x_return_status := lv_return_status;
7371
7372 EXCEPTION
7373
7374 WHEN NO_DATA_FOUND THEN
7375
7376 x_return_status := lv_return_status;
7377
7378 NULL;
7379
7380 WHEN OTHERS THEN
7381 print_message('Failed in Delete FI Dtl api');
7382 print_message('SQLCODE'||sqlcode||sqlerrm);
7383
7384 x_msg_count := 1;
7385 x_msg_data := sqlerrm;
7386 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7387
7388 FND_MSG_PUB.add_exc_msg
7389 (p_pkg_name =>
7390 'PA_FORECASTITEM_PVT.Delete_FI_Dtl',
7391 p_procedure_name => PA_DEBUG.G_Err_Stack);
7392
7393 Print_message(x_msg_data);
7394
7395 --RAISE;
7396
7397 END Delete_FI_Dtl;
7398
7399
7400 /* ---------------------------------------------------------------------
7401 | Procedure : Build_FI_Hdr_Asg
7402 | Purpose : To create new/modified forecast item (Assignment) record
7403 | FOR the item DATEs that are built IN the p_FIDayTab
7404 | Parameters : p_AsgnDtlRec - Assignment details
7405 | p_DBHdrTab - Holds forecast item records which are
7406 | already existing
7407 | p_FIDayTab - Holds all item_dates,item_quantity,
7408 | status_code FOR the current run.
7409 | i) action_flag component of this tab will be updated
7410 | to indicate the following
7411 | a) N : New record - item_date does not exist
7412 | b) DN : Delete AND create new -
7413 | item DATE exists but expenditure OU/
7414 | expenditure organization/expenditure type/
7415 | expenditure type class/ borrowed flag has
7416 | changed.
7417 | Existing record is reversed(deleted) AND new
7418 | record is created
7419 | c) RN : Reverse AND create new -
7420 | Quantity has changed.
7421 | IN header : quantity is updated.
7422 | IN detail :
7423 | IF summarized existing line should be reversed
7424 | AND new line created
7425 | IF not summarized existing line should be
7426 | updated to reflect new quantity
7427 | d) C : No change IN header
7428 | Check FOR any changes IN detail record for
7429 | person_billable_flag, provisional_flag,
7430 | work_type OR resource_type
7431 | ii) forecast_item_id component of this tab will be updated
7432 | to hold the forecast_item_id FOR new record. Same will
7433 | be used FOR detail record
7434 | iii) project_org_id,expenditure_org_id,work_type_id,
7435 | person_billable_flag, tp_amount_type : These values
7436 | are required FOR detail record processing. These are
7437 | also updated IN this tab.
7438 |
7439 | x_FIHdrInsTab - Will RETURN all forecast item records that
7440 | are new
7441 | x_FIHdrUpdTab - Will RETURN all forecast item records that
7442 | are modified
7443 | x_return_status -
7444 | x_msg_count -
7445 | x_msg_data -
7446 +----------------------------------------------------------------------*/
7447 PROCEDURE Build_FI_Hdr_Asg(
7448 p_AsgnDtlRec IN PA_FORECAST_GLOB.AsgnDtlRecord,
7449 p_DBHdrTab IN PA_FORECAST_GLOB.FIHdrTabTyp,
7450 p_FIDayTab IN OUT NOCOPY PA_FORECAST_GLOB.FIDayTabTyp, /* 2674619 - Nocopy change */
7451 x_FIHdrInsTab OUT NOCOPY PA_FORECAST_GLOB.FIHdrTabTyp, /* 2674619 - Nocopy change */
7452 x_FIHdrUpdTab OUT NOCOPY PA_FORECAST_GLOB.FIHdrTabTyp, /* 2674619 - Nocopy change */
7453 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
7454 x_msg_count OUT NOCOPY NUMBER, -- 4537865
7455 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
7456
7457 l_msg_index_out NUMBER;
7458 l_data varchar2(2000) ; -- 4537865
7459 lv_include_admin_proj_flag VARCHAR2(5);
7460 lv_util_cal_method VARCHAR2(30);
7461 lv_bill_unasg_proj_id NUMBER;
7462 lv_bill_unasg_exp_type_class VARCHAR2(30);
7463 lv_bill_unasg_exp_type VARCHAR2(30);
7464 lv_nbill_unasg_proj_id NUMBER;
7465 lv_nbill_unasg_exp_type_class VARCHAR2(30);
7466 lv_nbill_unasg_exp_type VARCHAR2(30);
7467 lv_default_tp_amount_type VARCHAR2(30);
7468
7469
7470 lv_forecast_item_type VARCHAR2(1);
7471 lv_project_id NUMBER;
7472 lv_person_id NUMBER;
7473 lv_project_org_id NUMBER;
7474 lv_project_orgn_id NUMBER;
7475 lv_project_type_class VARCHAR2(30);
7476 lv_project_status_code VARCHAR2(30);
7477 lv_pvdr_period_set_name VARCHAR2(30):= NULL;
7478 lv_rcvr_period_set_name VARCHAR2(30):= NULL;
7479 lv_pvdr_pa_period_name VARCHAR2(30):= NULL;
7480
7481 ld_resou_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
7482 ld_resou_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
7483 l_resou_tab PA_FORECAST_GLOB.NumberTabTyp;
7484 lv_res_index NUMBER;
7485 lv_resou NUMBER;
7486
7487 ld_pvdrpa_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
7488 ld_pvdrpa_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
7489 lv_pvdrpa_name_tab PA_FORECAST_GLOB.periodnametabtyp;
7490 lv_pvpa_index NUMBER ;
7491 lv_pvdrpa_name VARCHAR2(30);
7492
7493 ld_pvdrgl_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
7494 ld_pvdrgl_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
7495 lv_pvdrgl_name_tab PA_FORECAST_GLOB.periodnametabtyp;
7496 lv_pvgl_index NUMBER ;
7497 lv_pvdrgl_name VARCHAR2(30);
7498
7499 ld_rcvrpa_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
7500 ld_rcvrpa_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
7501 lv_rcvrpa_name_tab PA_FORECAST_GLOB.periodnametabtyp;
7502 lv_rcpa_index NUMBER ;
7503 lv_rcvrpa_name VARCHAR2(30);
7504
7505 ld_rcvrgl_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
7506 ld_rcvrgl_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
7507 lv_rcvrgl_name_tab PA_FORECAST_GLOB.periodnametabtyp;
7508 lv_rcgl_index NUMBER ;
7509 lv_rcvrgl_name VARCHAR2(30);
7510
7511 ld_orgn_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
7512 ld_orgn_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
7513 l_orgn_tab PA_FORECAST_GLOB.NumberTabTyp;
7514 l_jobid_tab PA_FORECAST_GLOB.NumberTabTyp;
7515 lv_orgn_index NUMBER ;
7516 lv_resorgn NUMBER;
7517
7518 lv_WeekDateRange_Tab PA_FORECAST_GLOB.WeekDatesRangeFcTabTyp;
7519 lv_wk_index NUMBER;
7520
7521 lv_borrowed_flag VARCHAR2(1) := 'N';
7522 lv_action_code VARCHAR2(30);
7523 lv_include_in_forecast VARCHAR2(1) := 'N';
7524 lv_person_bill_flag VARCHAR2(1);
7525 lv_forecast_item_id NUMBER;
7526 lv_work_type_id NUMBER;
7527 --lv_exp_type VARCHAR2(30);
7528 --lv_exp_type_class VARCHAR2(30);
7529 lv_error_flag VARCHAR2(1);
7530 lv_resource_id NUMBER;
7531 lv_rejection_code VARCHAR2(30);
7532 lv_prev_index NUMBER;
7533
7534 lv_ou_error VARCHAR2(1);
7535 lv_orgn_error VARCHAR2(1);
7536
7537 TmpDayTab PA_FORECAST_GLOB.FIDayTabTyp;
7538 TmpInsTab PA_FORECAST_GLOB.FIHdrTabTyp;
7539 i_in NUMBER := 1;
7540 TmpUpdTab PA_FORECAST_GLOB.FIHdrTabTyp;
7541 u_in NUMBER := 1;
7542 d_in NUMBER := 1;
7543 TmpHdrRec PA_FORECAST_GLOB.FIHdrRecord;
7544
7545 lv_err_msg VARCHAR2(30);
7546 lv_return_status VARCHAR2(30);
7547 lv_call_pos VARCHAR2(50);
7548 tmp_person_id NUMBER;
7549 tmp_status_code VARCHAR2(30);
7550 lv_start_date DATE;
7551 lv_end_date DATE;
7552
7553 BEGIN
7554
7555 lv_return_status := FND_API.G_RET_STS_SUCCESS;
7556
7557 Print_message('Entering Build_FI_Hdr_Asg: ' || p_AsgnDtlRec.resource_id || ' ' || p_AsgnDtlRec.assignment_id);
7558
7559 PA_DEBUG.Init_err_stack(
7560 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Asg');
7561
7562 TmpDayTab.Delete;
7563 TmpInsTab.Delete;
7564 TmpUpdTab.Delete;
7565 ld_resou_startdate_tab.Delete;
7566 ld_resou_enddate_tab.Delete;
7567 l_resou_tab.Delete;
7568 ld_pvdrpa_startdate_tab.Delete;
7569 ld_pvdrpa_enddate_tab.Delete;
7570 lv_pvdrpa_name_tab.Delete;
7571 ld_pvdrgl_startdate_tab.Delete;
7572 ld_pvdrgl_enddate_tab.Delete;
7573 lv_pvdrgl_name_tab.Delete;
7574 ld_rcvrpa_startdate_tab.Delete;
7575 ld_rcvrpa_enddate_tab.Delete;
7576 lv_rcvrpa_name_tab.Delete;
7577 ld_rcvrgl_startdate_tab.Delete;
7578 ld_rcvrgl_enddate_tab.Delete;
7579 lv_rcvrgl_name_tab.Delete;
7580 ld_orgn_startdate_tab.Delete;
7581 ld_orgn_enddate_tab.Delete;
7582 l_orgn_tab.Delete;
7583 l_jobid_tab.Delete;
7584 lv_WeekDateRange_Tab.Delete;
7585
7586 TmpDayTab := p_FIDayTab;
7587
7588
7589 Print_message( 'Asg - Get_resource_ou');
7590
7591 PA_FORECAST_ITEMS_UTILS.get_resource_ou(
7592 p_AsgnDtlRec.resource_id,
7593 p_AsgnDtlRec.start_date,
7594 p_AsgnDtlRec.end_date,
7595 ld_resou_startdate_tab,ld_resou_enddate_tab,
7596 l_resou_tab);
7597
7598 lv_res_index := l_resou_tab.FIRST;
7599
7600 IF l_resou_tab.count > 0 THEN
7601
7602 lv_resou := l_resou_tab(lv_res_index);
7603
7604 ELSE
7605
7606 lv_err_msg := 'ResOU_Not_Found';
7607 RAISE NO_DATA_FOUND;
7608
7609 END IF;
7610
7611
7612 Print_message( 'Asg - Get_person_id');
7613
7614 lv_person_id := PA_FORECAST_ITEMS_UTILS.get_person_id(
7615 p_AsgnDtlRec.resource_id);
7616
7617 Print_message('Asg - Get_res_org_and_job');
7618
7619 PA_FORECAST_ITEMS_UTILS.get_res_org_and_job(
7620 lv_person_id, p_AsgnDtlRec.start_date,
7621 p_AsgnDtlRec.end_date,
7622 ld_orgn_startdate_tab, ld_orgn_enddate_tab,
7623 l_orgn_tab, l_jobid_tab);
7624
7625 lv_orgn_index := l_orgn_tab.FIRST;
7626
7627 IF l_orgn_tab.count > 0 THEN
7628
7629 lv_resorgn := l_orgn_tab(lv_orgn_index);
7630
7631 ELSE
7632
7633 lv_err_msg := 'Resorgn_Not_Found';
7634 RAISE NO_DATA_FOUND;
7635
7636 END IF;
7637
7638 Print_message('Calling Get_Project_Dtls');
7639
7640 Get_Project_Dtls (p_AsgnDtlRec.project_id, lv_project_org_id,
7641 lv_project_orgn_id, lv_work_type_id,
7642 lv_project_type_class, lv_project_status_code,
7643 lv_return_status, x_msg_count, x_msg_data);
7644
7645 IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7646
7647 lv_err_msg := 'No_Project_Record - Asg';
7648 RAISE NO_DATA_FOUND;
7649
7650 END IF;
7651
7652 Print_message('Asg - Get_period_set_name (rcvr)');
7653 Print_message('lv_project_org_id: ' || lv_project_org_id);
7654 lv_rcvr_period_set_name :=
7655 PA_FORECAST_ITEMS_UTILS.get_period_set_name (
7656 lv_project_org_id);
7657
7658 if lv_rcvr_period_set_name = 'NO_DATA_FOUND' THEN
7659
7660 lv_rcvr_period_set_name := '-99';
7661 lv_rejection_code := 'RCVR_PRD_SET_NAME_NOT_FOUND';
7662 lv_error_flag := 'Y';
7663
7664 end if;
7665
7666
7667 Print_message(
7668 'Asg - Get_pa_period_name (rcvr)');
7669
7670 Print_message('lv_project_org_id: ' || lv_project_org_id);
7671 PA_FORECAST_ITEMS_UTILS.get_pa_period_name(
7672 lv_project_org_id,
7673 p_AsgnDtlRec.start_date,
7674 p_AsgnDtlRec.end_date,
7675 ld_rcvrpa_startdate_tab,
7676 ld_rcvrpa_enddate_tab,
7677 lv_rcvrpa_name_tab);
7678
7679 lv_rcpa_index := lv_rcvrpa_name_tab.FIRST;
7680
7681
7682 Print_message(
7683 'Asg - Get_gl_period_name (rcvr)');
7684
7685 Print_message('lv_project_org_id: ' || lv_project_org_id);
7686 PA_FORECAST_ITEMS_UTILS.get_gl_period_name(
7687 lv_project_org_id,
7688 p_AsgnDtlRec.start_date,
7689 p_AsgnDtlRec.end_date,
7690 ld_rcvrgl_startdate_tab,
7691 ld_rcvrgl_enddate_tab,
7692 lv_rcvrgl_name_tab);
7693
7694 lv_rcgl_index := lv_rcvrgl_name_tab.FIRST;
7695
7696 Print_message(
7697 'Asg - Get_week_dates_range_fc ');
7698
7699 PA_FORECAST_ITEMS_UTILS.get_Week_Dates_Range_Fc(
7700 p_AsgnDtlRec.start_date,
7701 p_AsgnDtlRec.end_date,
7702 lv_WeekDateRange_Tab,
7703 x_return_status,
7704 x_msg_count,
7705 x_msg_data);
7706
7707
7708 lv_wk_index := lv_WeekDateRange_Tab.FIRST;
7709
7710 lv_call_pos := 'Asg : bef_for';
7711
7712 if (TmpDaytab.count <> 0) then
7713 FOR i IN TmpDaytab.FIRST..TmpDaytab.LAST LOOP
7714 if TmpDaytab.exists(i) then
7715 lv_call_pos := 'Asg : chk per bill';
7716 lv_ou_error := 'N';
7717
7718 lv_action_code := 'STAFFED_ASGMT_PROJ_FORECASTING';
7719
7720 /* Bug No:1967832. Added conditions before calling check_prj_stus_action allowed */
7721 IF TmpDayTab(i).status_code=tmp_status_code
7722 AND i>TmpDaytab.FIRST THEN
7723
7724 lv_include_in_forecast := lv_include_in_forecast;
7725
7726 ELSE
7727
7728 lv_include_in_forecast :=
7729 pa_project_utils.check_prj_stus_action_allowed(
7730 TmpDayTab(i).status_code,
7731 lv_action_code);
7732
7733 tmp_status_code := TmpDayTab(i).status_code;
7734
7735 END IF;
7736
7737 TmpDayTab(i).include_in_forecast := lv_include_in_forecast;
7738
7739 /* Bug1967832 Remvoed the original call to check_person_billable function and added the conditions below.*/
7740
7741 IF TRUNC(TmpDayTab(i).item_date) BETWEEN TRUNC(lv_start_date) and TRUNC(nvl(lv_end_date,TmpDayTab(i).item_date))
7742 AND lv_person_id=tmp_person_id
7743 AND i>TmpDaytab.FIRST THEN
7744
7745 lv_person_bill_flag := lv_person_bill_flag;
7746
7747 ELSE
7748
7749 Check_Person_Billable(p_person_id => lv_person_id,
7750 p_item_date => TmpDayTab(i).item_date,
7751 x_start_date => lv_start_date,
7752 x_end_date => lv_end_date,
7753 x_billable_flag => lv_person_bill_flag,
7754 x_return_status => lv_return_status,
7755 x_msg_count => x_msg_count,
7756 x_msg_data => x_msg_data);
7757
7758 tmp_person_id := lv_person_id;
7759 END IF;
7760
7761
7762 lv_error_flag := 'N';
7763 lv_rejection_code := NULL;
7764 /*
7765 TmpDayTab(i).provisional_flag :=
7766 PA_ASSIGNMENT_UTILS.Is_Provisional_Status(
7767 TmpDayTab(i).status_code,
7768 p_AsgnDtlRec.assignment_type);
7769 */
7770 lv_error_flag := 'N';
7771
7772 lv_call_pos := 'Asg : resou ';
7773 IF (ld_resou_startdate_tab.count = 0) THEN
7774
7775 lv_err_msg := 'ResOU_Not_Found';
7776 RAISE NO_DATA_FOUND;
7777
7778
7779 ELSIF ((lv_pvdr_period_set_name IS NULL) OR
7780 (trunc(TmpDayTab(i).item_date) NOT BETWEEN
7781 trunc(ld_resou_startdate_tab(lv_res_index)) AND
7782 trunc(ld_resou_enddate_tab(lv_res_index)))) THEN
7783
7784 lv_prev_index := lv_res_index;
7785
7786 LOOP
7787
7788 IF lv_res_index > ld_resou_startdate_tab.COUNT THEN
7789
7790 -- lv_error_flag := 'Y';
7791 -- lv_rejection_code := 'Resource_ou_not_found';
7792 lv_err_msg := 'ResOU_Not_Found';
7793 RAISE NO_DATA_FOUND;
7794
7795
7796 END IF;
7797
7798
7799 EXIT WHEN lv_error_flag = 'Y' OR
7800 (trunc(TmpDayTab(i).item_date) >=
7801 trunc(ld_resou_startdate_tab(lv_res_index)) AND
7802 trunc(TmpDayTab(i).item_date) <=
7803 trunc(ld_resou_enddate_tab(lv_res_index)));
7804
7805 lv_res_index := lv_res_index + 1;
7806
7807 END LOOP;
7808
7809 IF lv_error_flag = 'Y' THEN
7810
7811 lv_res_index := lv_prev_index;
7812 lv_ou_error := 'Y';
7813 lv_resou := -99;
7814 lv_pvdr_period_set_name := '-99';
7815 lv_project_id := -99;
7816 lv_rcvr_period_set_name := '-99';
7817 lv_pvdrpa_name := '-99';
7818 lv_pvdrgl_name := '-99';
7819 lv_rcvrpa_name := '-99';
7820 lv_rcvrgl_name := '-99';
7821 --lv_exp_type := '-99';
7822 --lv_exp_type_class := '-99';
7823 /*
7824 lv_project_org_id := -99;
7825 lv_project_orgn_id := -99;
7826 lv_work_type_id := -99;
7827 lv_project_type_class := '-99';
7828 */
7829
7830
7831 ELSE
7832
7833 lv_resou := l_resou_tab(lv_res_index);
7834
7835 Print_message(
7836 'Asg - Get_period_set_name (pvdr) ');
7837
7838 lv_pvdr_period_set_name :=
7839 PA_FORECAST_ITEMS_UTILS.get_period_set_name(
7840 lv_resou);
7841
7842 if lv_pvdr_period_set_name = 'NO_DATA_FOUND' THEN
7843 lv_pvdr_period_set_name := '-99';
7844 lv_rejection_code := 'PVDR_PRD_SET_NAME_NOT_FOUND';
7845 lv_error_flag := 'Y';
7846
7847 end if;
7848
7849
7850 END IF;
7851
7852 IF lv_ou_error = 'N' then
7853
7854 Print_message(
7855 'Asg - Get_pa_period_name (pvdr)');
7856
7857 PA_FORECAST_ITEMS_UTILS.get_pa_period_name(
7858 lv_resou,
7859 p_AsgnDtlRec.start_date,
7860 p_AsgnDtlRec.end_date,
7861 ld_pvdrpa_startdate_tab,
7862 ld_pvdrpa_enddate_tab,
7863 lv_pvdrpa_name_tab);
7864
7865 lv_pvpa_index := lv_pvdrpa_name_tab.FIRST;
7866
7867 Print_message(
7868 'Asg - Get_gl_period_name (pvdr)');
7869
7870 PA_FORECAST_ITEMS_UTILS.get_gl_period_name(
7871 lv_resou,
7872 p_AsgnDtlRec.start_date,
7873 p_AsgnDtlRec.end_date,
7874 ld_pvdrgl_startdate_tab,
7875 ld_pvdrgl_enddate_tab,
7876 lv_pvdrgl_name_tab);
7877
7878 lv_pvgl_index := lv_pvdrgl_name_tab.FIRST;
7879
7880
7881 Print_message(
7882 'Asg - Get_forecastoptions');
7883
7884 -- dbms_output.put_line(l_resou_tab(lv_res_index));
7885 PA_FORECAST_ITEMS_UTILS.get_forecastoptions(
7886 lv_resou,
7887 -- lv_include_admin_proj_flag, Bug 4576715
7888 lv_util_cal_method,
7889 lv_bill_unasg_proj_id,
7890 lv_bill_unasg_exp_type_class,
7891 lv_bill_unasg_exp_type,
7892 lv_nbill_unasg_proj_id,
7893 lv_nbill_unasg_exp_type_class,
7894 lv_nbill_unasg_exp_type,
7895 lv_default_tp_amount_type,
7896 x_return_status, x_msg_count, x_msg_data);
7897
7898 IF lv_person_bill_flag = 'Y' THEN
7899
7900 lv_project_id := lv_bill_unasg_proj_id;
7901 -- lv_exp_type := lv_bill_unasg_exp_type;
7902 -- lv_exp_type_class := lv_bill_unasg_exp_type_class;
7903
7904 ELSE
7905
7906 lv_project_id := lv_nbill_unasg_proj_id;
7907 -- lv_exp_type := lv_nbill_unasg_exp_type;
7908 -- lv_exp_type_class :=
7909 -- lv_nbill_unasg_exp_type_class;
7910
7911 END IF;
7912
7913 END IF;
7914
7915 END IF;
7916
7917 lv_error_flag := 'N';
7918
7919 lv_call_pos := 'Asg : resorgn ';
7920 IF (ld_orgn_enddate_tab.count = 0) THEN
7921
7922 lv_error_flag := 'Y';
7923
7924 IF (lv_rejection_code IS NULL) THEN
7925
7926 lv_err_msg := 'Resorgn_Not_Found';
7927 RAISE NO_DATA_FOUND;
7928
7929 END IF;
7930
7931
7932 ELSIF (trunc(TmpDayTab(i).item_date) NOT BETWEEN
7933 trunc(ld_orgn_startdate_tab(lv_orgn_index)) AND
7934 trunc(ld_orgn_enddate_tab(lv_orgn_index))) THEN
7935
7936 lv_prev_index := lv_orgn_index;
7937
7938 LOOP
7939
7940 IF lv_orgn_index > ld_orgn_startdate_tab.COUNT THEN
7941
7942 lv_error_flag := 'Y';
7943
7944
7945 -- IF (lv_rejection_code IS NULL) THEN
7946
7947 -- lv_rejection_code := 'Exp orgn not found';
7948
7949 --END IF;
7950
7951 lv_err_msg := 'Resorgn_Not_Found';
7952 RAISE NO_DATA_FOUND;
7953
7954 END IF;
7955
7956 EXIT WHEN lv_error_flag = 'Y' OR
7957 trunc(TmpDayTab(i).item_date) >=
7958 trunc(ld_orgn_startdate_tab(lv_orgn_index)) AND
7959 trunc(TmpDayTab(i).item_date) <=
7960 trunc(ld_orgn_enddate_tab(lv_orgn_index));
7961 lv_orgn_index := lv_orgn_index + 1;
7962
7963 END LOOP;
7964
7965 END IF;
7966
7967 IF lv_error_flag = 'Y' THEN
7968
7969 lv_orgn_index := lv_prev_index;
7970 lv_resorgn := -99;
7971 lv_orgn_error := 'Y';
7972 ELSE
7973
7974 lv_resorgn := l_orgn_tab(lv_orgn_index);
7975 END IF;
7976
7977
7978 lv_call_pos := 'Asg : borr ';
7979 IF ((lv_project_org_id <>lv_resou ) OR
7980 (lv_project_orgn_id <> lv_resorgn)) THEN
7981
7982 lv_borrowed_flag := 'Y';
7983
7984 ELSE
7985
7986 lv_borrowed_flag := 'N';
7987
7988 END IF;
7989
7990
7991 IF d_in <= p_DbHdrTab.COUNT THEN
7992
7993 lv_call_pos := 'Asg : in if 1 ';
7994 IF trunc(TmpDayTab(i).item_date) <
7995 trunc(p_DbHdrTab(d_in).item_date) THEN
7996
7997 lv_call_pos := 'Asg : in if 2 ';
7998 IF (TmpDayTab(i).action_flag = 'D') OR
7999 (
8000 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) = 0 AND
8001 NVL(TmpDayTab(i).OVERCOMMITMENT_QTY,0) = 0 AND
8002 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
8003 NVL(TmpDayTab(i).OVERCOMMITMENT_QUANTITY,0) = 0 AND
8004 -- End fix for bug 2504222
8005 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) = 0 AND
8006 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) = 0 AND
8007 NVL(TmpDayTab(i).CONFIRMED_QTY,0) = 0 AND
8008 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) = 0 AND
8009 TmpDayTab(i).item_quantity = 0
8010 ) THEN
8011
8012 TmpDayTab(i).action_flag := 'I';
8013
8014 ELSE
8015
8016 TmpDayTab(i).action_flag := 'N';
8017
8018 END IF;
8019
8020 ELSIF trunc(TmpDayTab(i).item_date) =
8021 trunc(p_DbHdrTab(d_in).item_date) THEN
8022
8023 lv_call_pos := 'Asg : in else 2 ';
8024 IF (TmpDayTab(i).action_flag = 'D') OR
8025 (
8026 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) = 0 AND
8027 NVL(TmpDayTab(i).OVERCOMMITMENT_QTY,0) = 0 AND
8028 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
8029 NVL(TmpDayTab(i).OVERCOMMITMENT_QUANTITY,0) = 0 AND
8030 -- End fix for bug 2504222
8031 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) = 0 AND
8032 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) = 0 AND
8033 NVL(TmpDayTab(i).CONFIRMED_QTY,0) = 0 AND
8034 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) = 0 AND
8035 TmpDayTab(i).item_quantity = 0
8036 ) THEN
8037
8038 print_message('Asg : in if 3 ');
8039 lv_call_pos := 'Asg : in if 3 ';
8040 TmpDayTab(i).action_flag := 'D';
8041 TmpUpdTab(u_in) := p_DbHdrTab(d_in);
8042 TmpUpdTab(u_in).CAPACITY_QUANTITY := NULL;
8043 TmpUpdTab(u_in).OVERCOMMITMENT_QTY := NULL;
8044 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
8045 TmpUpdTab(u_in).OVERCOMMITMENT_QUANTITY := NULL;
8046 -- End fix for bug 2504222
8047 TmpUpdTab(u_in).OVERPROVISIONAL_QTY := NULL;
8048 TmpUpdTab(u_in).OVER_PROV_CONF_QTY := NULL;
8049 TmpUpdTab(u_in).CONFIRMED_QTY := NULL;
8050 TmpUpdTab(u_in).PROVISIONAL_QTY := NULL;
8051 TmpUpdTab(u_in).item_quantity := 0;
8052 TmpUpdTab(u_in).delete_flag := 'Y';
8053 TmpUpdTab(u_in).error_flag := 'N';
8054 TmpUpdTab(u_in).other_rejection_code := NULL;
8055 u_in := u_in + 1;
8056
8057 ELSIF p_DbHdrTab(d_in).error_flag = 'Y' THEN
8058 print_message('Asg : in else 3 ');
8059 lv_call_pos := 'Asg : in else 3 ';
8060 TmpDayTab(i).action_flag := 'E';
8061 TmpDayTab(i).forecast_item_id :=
8062 p_DbHdrTab(d_in).forecast_item_id;
8063
8064 ELSIF ( (lv_resou <>
8065 p_DbHdrTab(d_in).expenditure_org_id) OR
8066 (lv_resorgn <>
8067 p_DbHdrTab(d_in).expenditure_organization_id) OR
8068 (p_AsgnDtlRec.expenditure_type <>
8069 p_DbHdrTab(d_in).expenditure_type) OR
8070 (p_AsgnDtlRec.expenditure_type_class <>
8071 p_DbHdrTab(d_in).expenditure_type_class) OR
8072 (nvl(p_AsgnDtlRec.fcst_tp_amount_type,'Z') <>
8073 nvl(p_DbHdrTab(d_in).tp_amount_type,'Z')) OR
8074 (lv_borrowed_flag <> p_DbHdrTab(d_in).borrowed_flag) OR
8075 (NVL(TmpDayTab(i).asgmt_sys_status_code,'Z') <> NVL(p_DbHdrTab(d_in).asgmt_sys_status_code,'Z'))
8076 ) THEN
8077 print_message('Asg : in else 3a ');
8078
8079 lv_call_pos := 'Asg : in else 3a ';
8080 TmpDayTab(i).action_flag := 'DN';
8081 TmpUpdTab(u_in) := p_DbHdrTab(d_in);
8082 TmpUpdTab(u_in).CAPACITY_QUANTITY := NULL;
8083 TmpUpdTab(u_in).OVERCOMMITMENT_QTY := NULL;
8084 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
8085 TmpUpdTab(u_in).OVERCOMMITMENT_QUANTITY := NULL;
8086 -- End fix for bug 2504222
8087 TmpUpdTab(u_in).OVERPROVISIONAL_QTY := NULL;
8088 TmpUpdTab(u_in).OVER_PROV_CONF_QTY := NULL;
8089 TmpUpdTab(u_in).CONFIRMED_QTY := NULL;
8090 TmpUpdTab(u_in).PROVISIONAL_QTY := NULL;
8091 TmpUpdTab(u_in).item_quantity := 0;
8092 TmpUpdTab(u_in).delete_flag := 'Y';
8093 u_in := u_in + 1;
8094
8095 ELSIF (
8096 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) <> NVL(p_DbHdrTab(d_in).CAPACITY_QUANTITY,0) OR
8097 NVL(TmpDayTab(i).OVERCOMMITMENT_QUANTITY,0) <> NVL(p_DbHdrTab(d_in).OVERCOMMITMENT_QUANTITY,0) OR
8098 NVL(TmpDayTab(i).AVAILABILITY_QUANTITY,0) <> NVL(p_DbHdrTab(d_in).AVAILABILITY_QUANTITY,0) OR
8099 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) <> NVL(p_DbHdrTab(d_in).OVERPROVISIONAL_QTY,0) OR
8100 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) <> NVL(p_DbHdrTab(d_in).OVER_PROV_CONF_QTY,0) OR
8101 NVL(TmpDayTab(i).CONFIRMED_QTY,0) <> NVL(p_DbHdrTab(d_in).CONFIRMED_QTY,0) OR
8102 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) <> NVL(p_DbHdrTab(d_in).PROVISIONAL_QTY,0) OR
8103 TmpDayTab(i).item_quantity <>
8104 p_DbHdrTab(d_in).item_quantity
8105 ) THEN
8106
8107 print_message('Asg : in else 3b ');
8108 lv_call_pos := 'Asg : in else 3b ';
8109 TmpDayTab(i).action_flag := 'RN';
8110 TmpDayTab(i).expenditure_organization_id :=
8111 p_AsgnDtlRec.expenditure_organization_id;
8112 TmpDayTab(i).tp_amount_type :=
8113 p_AsgnDtlRec.fcst_tp_amount_type;
8114 TmpDayTab(i).project_id :=
8115 p_AsgnDtlRec.project_id;
8116 TmpDayTab(i).resource_id :=
8117 p_AsgnDtlRec.resource_id;
8118 TmpDayTab(i).expenditure_org_id :=
8119 l_resou_tab(lv_res_index);
8120 TmpDayTab(i).project_org_id := lv_project_org_id;
8121 --TmpDayTab(i).tp_amount_type :=
8122 -- lv_default_tp_amount_type;
8123 TmpDayTab(i).person_billable_flag :=
8124 lv_person_bill_flag;
8125 TmpUpdTab(u_in) := p_DbHdrTab(d_in);
8126 TmpUpdTab(u_in).CAPACITY_QUANTITY :=
8127 TmpDayTab(i).CAPACITY_QUANTITY;
8128 TmpUpdTab(u_in).OVERCOMMITMENT_QTY :=
8129 TmpDayTab(i).OVERCOMMITMENT_QTY;
8130 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
8131 TmpUpdTab(u_in).OVERCOMMITMENT_QUANTITY :=
8132 TmpDayTab(i).OVERCOMMITMENT_QUANTITY;
8133 -- End fix for bug 2504222
8134 TmpUpdTab(u_in).OVERPROVISIONAL_QTY :=
8135 TmpDayTab(i).OVERPROVISIONAL_QTY;
8136 TmpUpdTab(u_in).OVER_PROV_CONF_QTY :=
8137 TmpDayTab(i).OVER_PROV_CONF_QTY;
8138 TmpUpdTab(u_in).CONFIRMED_QTY :=
8139 TmpDayTab(i).CONFIRMED_QTY;
8140 TmpUpdTab(u_in).PROVISIONAL_QTY :=
8141 TmpDayTab(i).PROVISIONAL_QTY;
8142 TmpUpdTab(u_in).item_quantity :=
8143 TmpDayTab(i).item_quantity;
8144 u_in := u_in + 1;
8145
8146 ELSE
8147
8148 print_message('Asg : in else 3c ');
8149 lv_call_pos := 'Asg : in else 3c ';
8150 TmpDayTab(i).action_flag := 'C';
8151 TmpDayTab(i).expenditure_org_id :=
8152 l_resou_tab(lv_res_index);
8153 TmpDayTab(i).expenditure_organization_id :=
8154 p_AsgnDtlRec.expenditure_organization_id;
8155 TmpDayTab(i).tp_amount_type :=
8156 p_AsgnDtlRec.fcst_tp_amount_type;
8157 TmpDayTab(i).project_id :=
8158 p_AsgnDtlRec.project_id;
8159 TmpDayTab(i).resource_id :=
8160 p_AsgnDtlRec.resource_id;
8161 TmpDayTab(i).project_org_id := lv_project_org_id;
8162 -- TmpDayTab(i).tp_amount_type :=
8163 -- lv_default_tp_amount_type;
8164 TmpDayTab(i).person_billable_flag :=
8165 lv_person_bill_flag;
8166
8167 END IF;
8168
8169 d_in := d_in + 1;
8170
8171 END IF;
8172
8173 END IF;
8174
8175 lv_call_pos := 'Asg : data create ';
8176 IF (TmpDayTab(i).action_flag IN ('N', 'DN','E') AND
8177 (
8178 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) > 0 OR
8179 NVL(TmpDayTab(i).OVERCOMMITMENT_QTY,0) > 0 OR
8180 -- Start fix for bug 2504222 (changed for consistency, not vital for fix)
8181 NVL(TmpDayTab(i).OVERCOMMITMENT_QUANTITY,0) > 0 OR
8182 -- End fix for bug 2504222
8183 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) > 0 OR
8184 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) > 0 OR
8185 NVL(TmpDayTab(i).CONFIRMED_QTY,0) > 0 OR
8186 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) > 0 OR
8187 TmpDayTab(i).item_quantity > 0
8188 )
8189 ) THEN
8190
8191 lv_call_pos := 'Asg : in if data create ';
8192 IF TmpDayTab(i).action_flag <> 'E' THEN
8193
8194 lv_forecast_item_id :=
8195 PA_FORECAST_ITEMS_UTILS.get_next_forecast_item_id;
8196
8197 TmpDayTab(i).forecast_item_id := lv_forecast_item_id;
8198
8199 ELSE
8200
8201 lv_forecast_item_id := TmpDayTab(i).forecast_item_id;
8202
8203 END IF;
8204
8205 TmpHdrRec.forecast_item_id := lv_forecast_item_id;
8206 -- TmpDayTab(i).tp_amount_type := lv_default_tp_amount_type;
8207 TmpDayTab(i).person_billable_flag := lv_person_bill_flag;
8208 TmpDayTab(i).project_org_id := lv_project_org_id;
8209 TmpDayTab(i).expenditure_org_id := lv_resou;
8210 TmpDayTab(i).tp_amount_type := p_AsgnDtlRec.fcst_tp_amount_type;
8211 TmpDayTab(i).project_id := p_AsgnDtlRec.project_id;
8212 TmpDayTab(i).resource_id := p_AsgnDtlRec.resource_id;
8213 TmpDayTab(i).expenditure_organization_id := lv_resorgn;
8214
8215 TmpHdrRec.tp_amount_type := p_AsgnDtlRec.fcst_tp_amount_type;
8216 TmpHdrRec.forecast_item_type := 'A';
8217 TmpHdrRec.project_org_id := lv_project_org_id;
8218 TmpHdrRec.expenditure_org_id := lv_resou;
8219 TmpHdrRec.project_organization_id :=
8220 lv_project_orgn_id;
8221 TmpHdrRec.expenditure_organization_id := lv_resorgn;
8222 TmpHdrRec.project_id := p_AsgnDtlRec.project_id;
8223 TmpHdrRec.project_type_class := lv_project_type_class;
8224 TmpHdrRec.person_id := lv_person_id;
8225 TmpHdrRec.resource_id := p_AsgnDtlRec.resource_id;
8226 TmpHdrRec.borrowed_flag := lv_borrowed_flag;
8227 TmpHdrRec.assignment_id := p_AsgnDtlRec.assignment_id;
8228 TmpHdrRec.item_date := TmpDayTab(i).item_date;
8229 TmpHdrRec.item_UOM := 'HOURS';
8230 TmpHdrRec.item_quantity := TmpDayTab(i).item_quantity;
8231 TmpHdrRec.pvdr_period_set_name :=
8232 lv_pvdr_period_set_name;
8233 TmpHdrRec.asgmt_sys_status_code := TmpDayTab(i).asgmt_sys_status_code;
8234 TmpHdrRec.capacity_quantity := null;
8235 TmpHdrRec.OVERPROVISIONAL_QTY := NULL;
8236 TmpHdrRec.OVER_PROV_CONF_QTY := NULL;
8237 TmpHdrRec.CONFIRMED_QTY := NULL;
8238 TmpHdrRec.PROVISIONAL_QTY := NULL;
8239 TmpHdrRec.overcommitment_quantity := null;
8240 TmpHdrRec.availability_quantity := null;
8241 TmpHdrRec.overcommitment_flag := null;
8242 TmpHdrRec.availability_flag := null;
8243 lv_error_flag := 'N';
8244
8245 lv_call_pos := 'Asg : pvdrpa ';
8246 IF (ld_pvdrpa_startdate_tab.count = 0) THEN
8247
8248 lv_error_flag := 'Y';
8249
8250 IF (lv_rejection_code IS NULL) THEN
8251
8252 lv_rejection_code := 'PVDR_PA_PRD_NAME_NOT_FOUND';
8253
8254 END IF;
8255
8256 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
8257 trunc(ld_pvdrpa_startdate_tab(lv_pvpa_index)) AND
8258 trunc(ld_pvdrpa_enddate_tab(lv_pvpa_index))) THEN
8259
8260 lv_prev_index := lv_pvpa_index;
8261
8262 LOOP
8263
8264 IF lv_pvpa_index > ld_pvdrpa_startdate_tab.COUNT THEN
8265
8266 lv_error_flag := 'Y';
8267
8268 IF (lv_rejection_code IS NULL) THEN
8269
8270 lv_rejection_code :=
8271 'PVDR_PA_PRD_NAME_NOT_FOUND';
8272
8273 END IF;
8274
8275
8276 END IF;
8277
8278 EXIT WHEN lv_error_flag = 'Y' OR
8279 (trunc(TmpHdrRec.item_date) >=
8280 trunc(ld_pvdrpa_startdate_tab(lv_pvpa_index))AND
8281 trunc(TmpHdrRec.item_date) <=
8282 trunc(ld_pvdrpa_enddate_tab(lv_pvpa_index)));
8283
8284 lv_pvpa_index := lv_pvpa_index + 1;
8285
8286 END LOOP;
8287
8288 END IF;
8289
8290 IF lv_error_flag = 'Y' THEN
8291
8292 lv_pvpa_index := lv_prev_index;
8293 TmpHdrRec.pvdr_pa_period_name := '-99';
8294
8295 ELSE
8296
8297 TmpHdrRec.pvdr_pa_period_name :=
8298 lv_pvdrpa_name_tab(lv_pvpa_index);
8299
8300 END IF;
8301
8302 lv_error_flag := 'N';
8303
8304 lv_call_pos := 'Asg : pvdrgl ';
8305 IF (ld_pvdrgl_startdate_tab.count = 0) THEN
8306
8307 lv_error_flag := 'Y';
8308
8309 IF (lv_rejection_code IS NULL) THEN
8310
8311 lv_rejection_code := 'PVDR_GL_PRD_NAME_NOT_FOUND';
8312
8313 END IF;
8314
8315
8316 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
8317 trunc(ld_pvdrgl_startdate_tab(lv_pvgl_index)) AND
8318 trunc(ld_pvdrgl_enddate_tab(lv_pvgl_index))) THEN
8319
8320 lv_prev_index := lv_pvgl_index;
8321
8322 LOOP
8323
8324 IF lv_pvgl_index > ld_pvdrgl_startdate_tab.COUNT THEN
8325
8326 lv_error_flag := 'Y';
8327
8328
8329 IF (lv_rejection_code IS NULL) THEN
8330
8331 lv_rejection_code :=
8332 'PVDR_GL_PRD_NAME_NOT_FOUND';
8333
8334 END IF;
8335
8336
8337 END IF;
8338
8339 EXIT WHEN lv_error_flag = 'Y' OR
8340 (trunc(TmpHdrRec.item_date) >=
8341 trunc(ld_pvdrgl_startdate_tab(lv_pvgl_index)) AND
8342 trunc(TmpHdrRec.item_date) <=
8343 trunc(ld_pvdrgl_enddate_tab(lv_pvgl_index)));
8344
8345 lv_pvgl_index := lv_pvgl_index + 1;
8346
8347 END LOOP;
8348
8349 END IF;
8350
8351 IF lv_error_flag = 'Y' THEN
8352
8353 lv_pvgl_index := lv_prev_index;
8354 TmpHdrRec.pvdr_gl_period_name := '-99';
8355
8356 ELSE
8357
8358 TmpHdrRec.pvdr_gl_period_name :=
8359 lv_pvdrgl_name_tab(lv_pvgl_index);
8360
8361 END IF;
8362
8363 TmpHdrRec.rcvr_period_set_name :=
8364 lv_rcvr_period_set_name;
8365
8366 lv_error_flag := 'N';
8367
8368 lv_call_pos := 'Asg : rcvrpa ';
8369 IF (ld_rcvrpa_startdate_tab.count = 0) THEN
8370
8371 lv_error_flag := 'Y';
8372
8373 IF (lv_rejection_code IS NULL) THEN
8374
8375 lv_rejection_code := 'RCVR_PA_PRD_NAME_NOT_FOUND';
8376
8377 END IF;
8378
8379
8380 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
8381 trunc(ld_rcvrpa_startdate_tab(lv_rcpa_index)) AND
8382 trunc(ld_rcvrpa_enddate_tab(lv_rcpa_index))) THEN
8383
8384 lv_prev_index := lv_rcpa_index;
8385
8386 LOOP
8387
8388 IF lv_rcpa_index > ld_rcvrpa_startdate_tab.COUNT THEN
8389
8390 lv_error_flag := 'Y';
8391
8392 IF (lv_rejection_code IS NULL) THEN
8393
8394 lv_rejection_code :=
8395 'RCVR_PA_PRD_NAME_NOT_FOUND';
8396
8397 END IF;
8398
8399 END IF;
8400
8401 EXIT WHEN lv_error_flag = 'Y' OR
8402 ( trunc(TmpHdrRec.item_date) >=
8403 trunc(ld_rcvrpa_startdate_tab(lv_rcpa_index)) AND
8404 trunc(TmpHdrRec.item_date) <=
8405 trunc(ld_rcvrpa_enddate_tab(lv_rcpa_index)));
8406
8407 lv_rcpa_index := lv_rcpa_index + 1;
8408
8409 END LOOP;
8410
8411 END IF;
8412
8413 IF lv_error_flag = 'Y' THEN
8414
8415 lv_rcpa_index := lv_prev_index;
8416 TmpHdrRec.rcvr_pa_period_name := '-99';
8417
8418 ELSE
8419
8420 TmpHdrRec.rcvr_pa_period_name :=
8421 lv_rcvrpa_name_tab(lv_rcpa_index);
8422
8423 END IF;
8424
8425 lv_error_flag := 'N';
8426
8427 lv_call_pos := 'Asg : rcvrgl ';
8428 IF (ld_rcvrgl_startdate_tab.count = 0) THEN
8429
8430 lv_error_flag := 'Y';
8431
8432 IF (lv_rejection_code IS NULL) THEN
8433
8434 lv_rejection_code := 'RCVR_GL_PRD_NAME_NOT_FOUND';
8435
8436 END IF;
8437
8438 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
8439 trunc(ld_rcvrgl_startdate_tab(lv_rcgl_index)) AND
8440 trunc(ld_rcvrgl_enddate_tab(lv_rcgl_index))) THEN
8441
8442 lv_prev_index := lv_rcgl_index;
8443
8444 LOOP
8445
8446 IF lv_rcgl_index > ld_rcvrgl_startdate_tab.COUNT THEN
8447
8448 lv_error_flag := 'Y';
8449
8450 IF (lv_rejection_code IS NULL) THEN
8451
8452 lv_rejection_code :=
8453 'RCVR_GL_PRD_NAME_NOT_FOUND';
8454
8455 END IF;
8456
8457 END IF;
8458
8459 EXIT WHEN lv_error_flag = 'Y' OR
8460 (trunc(TmpHdrRec.item_date) >=
8461 trunc(ld_rcvrgl_startdate_tab(lv_rcgl_index)) AND
8462 trunc(TmpHdrRec.item_date) <=
8463 trunc(ld_rcvrgl_enddate_tab(lv_rcgl_index)));
8464
8465 lv_rcgl_index := lv_rcgl_index + 1;
8466
8467 END LOOP;
8468
8469 END IF;
8470
8471 IF lv_error_flag = 'Y' THEN
8472
8473 lv_rcgl_index := lv_prev_index;
8474 TmpHdrRec.rcvr_gl_period_name := '-99';
8475
8476 ELSE
8477
8478 TmpHdrRec.rcvr_gl_period_name :=
8479 lv_rcvrgl_name_tab(lv_rcgl_index);
8480
8481 END IF;
8482
8483 lv_error_flag := 'N';
8484
8485 lv_call_pos := 'Asg : wkdate ';
8486 IF (trunc(TmpHdrRec.item_date) NOT BETWEEN
8487 trunc(
8488 lv_WeekDateRange_Tab(lv_wk_index).week_start_date) AND
8489 trunc(
8490 lv_WeekDateRange_Tab(lv_wk_index).week_end_date))
8491 THEN
8492
8493 lv_prev_index := lv_wk_index;
8494
8495 LOOP
8496 IF lv_wk_index > lv_WeekDateRange_Tab.COUNT THEN
8497
8498 lv_error_flag := 'Y';
8499
8500 END IF;
8501
8502 EXIT WHEN lv_error_flag = 'Y' OR
8503 ((trunc(TmpHdrRec.item_date) >=
8504 trunc(
8505 lv_WeekDateRange_Tab(lv_wk_index).week_start_date))
8506 AND
8507 (trunc(TmpHdrRec.item_date) <=
8508 trunc(
8509 lv_WeekDateRange_Tab(lv_wk_index).week_end_date)));
8510
8511 lv_wk_index := lv_wk_index + 1;
8512
8513 END LOOP;
8514
8515 END IF;
8516
8517 TmpHdrRec.global_exp_period_end_date :=
8518 lv_WeekDateRange_Tab(lv_wk_index).week_end_date;
8519
8520 TmpHdrRec.expenditure_type :=
8521 p_AsgnDtlRec.expenditure_type;
8522 TmpHdrRec.expenditure_type_class :=
8523 p_AsgnDtlRec.expenditure_type_class;
8524 TmpHdrRec.cost_rejection_code := NULL;
8525 TmpHdrRec.rev_rejection_code := NULL;
8526 TmpHdrRec.Tp_rejection_code := NULL;
8527 TmpHdrRec.Burden_rejection_code := NULL;
8528 TmpHdrRec.Other_rejection_code := lv_rejection_code;
8529 TmpHdrRec.Delete_Flag := 'N';
8530 TmpHdrRec.Provisional_flag :=
8531 TmpDayTab(i).provisional_flag;
8532 TmpHdrRec.asgmt_sys_status_code :=
8533 TmpDayTab(i).asgmt_sys_status_code;
8534 -- 4583893 : Added lv_resorgn = -77 check
8535 IF (lv_rejection_code IS NOT NULL OR lv_resorgn = -77) THEN
8536
8537 TmpHdrRec.Error_Flag := 'Y';
8538 TmpDayTab(i).Error_Flag := 'Y';
8539
8540 ELSE
8541
8542 TmpHdrRec.Error_Flag := 'N';
8543
8544 END IF;
8545
8546 IF TmpDayTab(i).action_flag IN ('N','DN') THEN
8547
8548 TmpInsTab(i_in) := TmpHdrRec;
8549 i_in := i_in + 1;
8550
8551 ELSE
8552
8553 TmpDayTab(i).action_flag := 'RN';
8554 TmpUpdTab(u_in) := TmpHdrRec;
8555 u_in := u_in + 1;
8556
8557 END IF ;
8558
8559 /*
8560 Print_message('***********');
8561 Print_message(
8562 ' item_date :' || TmpHdrRec.item_date);
8563
8564 Print_message(
8565 'fct_item_id:' || TmpHdrRec.forecast_item_id ||
8566 ' fct_itm_typ:' || TmpHdrRec.forecast_item_type ||
8567 ' prj_org_id:' || TmpHdrRec.project_org_id ||
8568 ' exp_org_id:' || TmpHdrRec.expenditure_org_id||
8569 chr(10)|| 'exp_orgn_id:' ||
8570 TmpHdrRec.expenditure_organization_id ||
8571 ' prj_orgn_id:' ||
8572 TmpHdrRec.project_organization_id ||
8573 ' prj_id:' || TmpHdrRec.project_id);
8574
8575 Print_message(
8576 'prj_typ_cls:' || TmpHdrRec.project_type_class ||
8577 ' person_id:' || TmpHdrRec.person_id||
8578 ' res_id:' || TmpHdrRec.resource_id ||
8579 ' brw_flg:' || TmpHdrRec.borrowed_flag ||
8580 ' asgn_id:' || TmpHdrRec.assignment_id ||
8581 ' item_uom:' || TmpHdrRec.item_uom ||
8582 ' itm_qty:' || TmpHdrRec.item_quantity);
8583
8584 Print_message(
8585 'pvd_set_nme:' || TmpHdrRec.pvdr_period_set_name ||
8586 ' pvd_pa_name:' ||
8587 TmpHdrRec.pvdr_pa_period_name ||
8588 chr(10) || 'pvd_gl_name:' ||
8589 TmpHdrRec.pvdr_gl_period_name ||
8590 ' rcv_set_nme:' ||
8591 TmpHdrRec.rcvr_period_set_name ||
8592 chr(10) || 'rcv_pa_name:' ||
8593 TmpHdrRec.rcvr_pa_period_name ||
8594 ' rcv_gl_name:' ||
8595 TmpHdrRec.rcvr_gl_period_name ||
8596 chr(10) || 'glb_end_dt:' ||
8597 TmpHdrRec.global_exp_period_end_date);
8598
8599 Print_message(
8600 'exp_type:' || TmpHdrRec.expenditure_type ||
8601 ' exp_typ_cls:' ||
8602 TmpHdrRec.expenditure_type_class ||
8603 chr(10) || 'oth_rej_cde:' ||
8604 TmpHdrRec.other_rejection_code ||
8605 ' Del_flag:' || TmpHdrRec.delete_flag ||
8606 ' Err_flag:' || TmpHdrRec.error_flag ||
8607 ' Prv_flag:' || TmpHdrRec.provisional_flag);
8608 */
8609
8610 END IF;
8611 end if;
8612 END LOOP;
8613 end if;
8614
8615 x_FIHdrInsTab.Delete;
8616 x_FIHdrUpdTab.Delete;
8617
8618 x_FIHdrInsTab := TmpInsTab;
8619 x_FIHdrUpdTab := TmpUpdTab;
8620 p_FIDayTab := TmpDayTab;
8621
8622 x_return_status := FND_API.G_RET_STS_SUCCESS;
8623
8624 Print_message(
8625 'Leaving Build_FI_Hdr_Asg');
8626
8627 PA_DEBUG.Reset_Err_Stack;
8628
8629 x_return_status := lv_return_status;
8630
8631 EXCEPTION
8632
8633 WHEN NO_DATA_FOUND THEN
8634
8635 if lv_err_msg = 'ResOU_Not_Found' then
8636
8637 x_msg_count := 1;
8638 x_msg_data := 'ResOU not found';
8639 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8640
8641 FND_MSG_PUB.add_exc_msg
8642 (p_pkg_name =>
8643 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Asg',
8644 p_procedure_name => PA_DEBUG.G_Err_Stack);
8645
8646 If x_msg_count = 1 THEN
8647 pa_interface_utils_pub.get_messages
8648 (p_encoded => FND_API.G_TRUE,
8649 p_msg_index => 1,
8650 p_msg_count => x_msg_count,
8651 p_msg_data => x_msg_data,
8652 p_data => l_data , -- 4537865
8653 p_msg_index_out => l_msg_index_out );
8654 x_msg_data := l_data ; -- 4537865
8655 End If;
8656 Print_message(x_msg_data);
8657 Print_message(lv_call_pos);
8658
8659 RAISE;
8660
8661 elsif lv_err_msg = 'Resorgn_Not_Found' then
8662 x_msg_count := 1;
8663 x_msg_data := 'ResOrgn not found';
8664 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8665
8666 FND_MSG_PUB.add_exc_msg
8667 (p_pkg_name =>
8668 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Asg',
8669 p_procedure_name => PA_DEBUG.G_Err_Stack);
8670
8671 If x_msg_count = 1 THEN
8672 pa_interface_utils_pub.get_messages
8673 (p_encoded => FND_API.G_TRUE,
8674 p_msg_index => 1,
8675 p_msg_count => x_msg_count,
8676 p_msg_data => x_msg_data,
8677 p_data => l_data , -- 4537865
8678 p_msg_index_out => l_msg_index_out );
8679 x_msg_data := l_data ; -- 4537865
8680 End If;
8681 Print_message(x_msg_data);
8682 Print_message(lv_call_pos);
8683
8684 RAISE;
8685
8686 else
8687
8688 x_msg_count := 1;
8689 x_msg_data := sqlerrm ;
8690 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8691
8692 FND_MSG_PUB.add_exc_msg
8693 (p_pkg_name =>
8694 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Asg',
8695 p_procedure_name => PA_DEBUG.G_Err_Stack);
8696
8697 If x_msg_count = 1 THEN
8698 pa_interface_utils_pub.get_messages
8699 (p_encoded => FND_API.G_TRUE,
8700 p_msg_index => 1,
8701 p_msg_count => x_msg_count,
8702 p_msg_data => x_msg_data,
8703 p_data => l_data , -- 4537865
8704 p_msg_index_out => l_msg_index_out );
8705 x_msg_data := l_data ; -- 4537865
8706 End If;
8707 Print_message(x_msg_data);
8708 Print_message(lv_call_pos);
8709
8710 RAISE;
8711
8712 end if;
8713
8714
8715 WHEN OTHERS THEN
8716 print_message('Failed in Build_FI_Hdr_asg api');
8717 print_message('SQLCODE'||sqlcode||sqlerrm);
8718
8719 x_msg_count := 1;
8720 x_msg_data := sqlerrm;
8721 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8722
8723 FND_MSG_PUB.add_exc_msg
8724 (p_pkg_name =>
8725 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Asg',
8726 p_procedure_name => PA_DEBUG.G_Err_Stack);
8727
8728 If x_msg_count = 1 THEN
8729 pa_interface_utils_pub.get_messages
8730 (p_encoded => FND_API.G_TRUE,
8731 p_msg_index => 1,
8732 p_msg_count => x_msg_count,
8733 p_msg_data => x_msg_data,
8734 p_data => l_data , -- 4537865
8735 p_msg_index_out => l_msg_index_out );
8736 x_msg_data := l_data ; -- 4537865
8737 End If;
8738 Print_message(x_msg_data);
8739 Print_message(lv_call_pos);
8740
8741 RAISE;
8742
8743
8744 END Build_FI_Hdr_Asg;
8745
8746 /* ---------------------------------------------------------------------
8747 | Procedure : Build_FI_Dtl_Asg
8748 | Purpose : To create new/modified forecast item detail(Assignment)
8749 | record FOR the item DATEs that are built IN the p_FIDayTab
8750 | Parameters : p_AsgnDtlRec - Assignment details
8751 | p_DBDtlTab - Holds forecast item detail records which are
8752 | already existing
8753 | p_FIDayTab - Holds all item_dates,item_quantity,
8754 | status_code FOR the current run.
8755 | action_flag component of this tab already indicates
8756 | (By Header Processing) the following :
8757 | a) N : New record - item_date does not exist
8758 | b) DN : Delete AND create new -
8759 | item DATE exists but expenditure OU/
8760 | expenditure organization/expenditure type/
8761 | expenditure type class/ borrowed flag has
8762 | changed.
8763 | Existing record is reversed(deleted) AND new
8764 | record is created
8765 | c) RN : Reverse AND create new -
8766 | Quantity has changed.
8767 | IN header : quantity is updated.
8768 | IN detail :
8769 | IF summarized existing line should be reversed
8770 | AND new line created
8771 | IF not summarized existing line should be
8772 | updated to reflect new quantity
8773 | d) C : No change IN header
8774 | Check FOR any changes IN detail record for
8775 | person_billable_flag, provisional_flag,
8776 | work_type OR resource_type
8777 | x_FIDtlInsTab - Will RETURN all forecast item detail records
8778 | that are new
8779 | x_FIDtlUpdTab - Will RETURN all forecast item detail records
8780 | that are modified
8781 | x_return_status -
8782 | x_msg_count -
8783 | x_msg_data -
8784 +----------------------------------------------------------------------*/
8785 PROCEDURE Build_FI_Dtl_Asg(
8786 p_AsgnDtlRec IN PA_FORECAST_GLOB.AsgnDtlRecord,
8787 p_DBDtlTab IN PA_FORECAST_GLOB.FIDtlTabTyp,
8788 p_FIDayTab IN PA_FORECAST_GLOB.FIDayTabTyp,
8789 x_FIDtlInsTab OUT NOCOPY PA_FORECAST_GLOB.FIDtlTabTyp, /* 2674619 - Nocopy change */
8790 x_FIDtlUpdTab OUT NOCOPY PA_FORECAST_GLOB.FIDtlTabTyp, /* 2674619 - Nocopy change */
8791 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
8792 x_msg_count OUT NOCOPY NUMBER, -- 4537865
8793 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
8794
8795
8796
8797 l_msg_index_out NUMBER;
8798 l_data varchar2(2000); -- 4537865
8799 d_in NUMBER := 1; -- index FOR p_dbDtlTab;
8800 TmpDayTab PA_FORECAST_GLOB.FIDayTabTyp;
8801 TmpInsTab PA_FORECAST_GLOB.FIDtlTabTyp;
8802 i_in NUMBER := 1; -- index FOR TmpDayTab;
8803 TmpUpdTab PA_FORECAST_GLOB.FIDtlTabTyp;
8804 u_in NUMBER := 1; -- index FOR TmpDayTab;
8805 TmpDtlRec PA_FORECAST_GLOB.FIDtlRecord;
8806
8807 lv_billable_flag VARCHAR2(1);
8808 l_resutilweighted NUMBER;
8809 l_orgutilweighted NUMBER;
8810 l_resutilcategoryid NUMBER;
8811 l_orgutilcategoryid NUMBER;
8812 l_ReduceCapacityFlag VARCHAR2(1);
8813
8814 lv_inc_forecast_flag VARCHAR2(3) := 'N';
8815 lv_inc_util_flag VARCHAR2(3) := 'N';
8816 lv_provisional_flag VARCHAR2(3);
8817 lv_next_line_num NUMBER;
8818 lv_new_fcast_sum_code VARCHAR2(1);
8819 lv_new_util_sum_code VARCHAR2(1);
8820 lv_resource_type VARCHAR2(30);
8821 lv_amount_type_id NUMBER;
8822 lv_person_id NUMBER;
8823
8824 lv_return_status VARCHAR2(30);
8825 tmp_person_id NUMBER;
8826 lv_start_date DATE;
8827 lv_end_date DATE;
8828
8829 BEGIN
8830
8831 lv_return_status := FND_API.G_RET_STS_SUCCESS;
8832
8833 PA_DEBUG.Init_err_stack(
8834 'PA_FORECASTITEM_PVT.Build_FI_Dtl_Asg');
8835
8836 TmpDayTab.Delete;
8837 TmpInsTab.Delete;
8838 TmpUpdTab.Delete;
8839
8840
8841 Print_message('entering build_fi_dtl_asg');
8842
8843 TmpDayTab := p_FIDayTab;
8844
8845
8846 Print_message( 'Asg - Get_resource_type');
8847
8848 lv_resource_type := PA_FORECAST_ITEMS_UTILS.get_resource_type(
8849 p_AsgnDtlRec.resource_id);
8850
8851 lv_amount_type_id := get_AmountTypeID;
8852
8853 lv_person_id := PA_FORECAST_ITEMS_UTILS.get_person_id(
8854 p_AsgnDtlRec.resource_id);
8855
8856 Print_message('Asg - Get_work_type_details');
8857 PA_FORECAST_ITEMS_UTILS.get_work_type_details(
8858 p_AsgnDtlRec.work_type_id,
8859 lv_billable_flag,
8860 l_resutilweighted,
8861 l_orgutilweighted,
8862 l_resutilcategoryid,
8863 l_orgutilcategoryid,
8864 l_ReduceCapacityFlag);
8865
8866 if (TmpDayTab.count <> 0) then
8867 FOR i IN TmpDayTab.FIRST..TmpDayTab.LAST LOOP
8868 if TmpDayTab.exists(i) then
8869 lv_inc_forecast_flag := TmpDayTab(i).include_in_forecast;
8870
8871 IF lv_inc_forecast_flag IN ('NO', 'N') THEN
8872
8873 lv_new_fcast_sum_code := 'X';
8874
8875 ELSE
8876
8877 lv_new_fcast_sum_code := 'N';
8878
8879 END IF;
8880
8881 /* Bug No: 1967832 Removed originial call to the function is-include_utilisation and added the following conditions. */
8882
8883 IF TRUNC(TmpDayTab(i).item_date) BETWEEN TRUNC(lv_start_date) and TRUNC(nvl(lv_end_date,TmpDayTab(i).item_date))
8884 AND i>TmpDaytab.FIRST
8885 AND lv_person_id=tmp_person_id
8886
8887 THEN
8888 lv_inc_util_flag := lv_inc_util_flag;
8889 ELSE
8890
8891 Is_Include_Utilisation(p_person_id => lv_person_id,
8892 p_item_date => TmpDayTab(i).item_date,
8893 x_start_date => lv_start_date,
8894 x_end_date => lv_end_date,
8895 x_inc_util_flag => lv_inc_util_flag,
8896 x_return_status => lv_return_status,
8897 x_msg_count => x_msg_count,
8898 x_msg_data => x_msg_data);
8899
8900 tmp_person_id := lv_person_id;
8901
8902 END IF;
8903
8904
8905 IF lv_inc_util_flag IN ('NO', 'N') THEN
8906
8907 lv_new_util_sum_code := 'X';
8908
8909 ELSE
8910
8911 lv_new_util_sum_code := 'N';
8912
8913 END IF;
8914
8915 lv_provisional_flag := TmpDayTab(i).provisional_flag;
8916
8917 lv_next_line_num := 1;
8918
8919 IF d_in <= p_DBDtlTab.COUNT THEN
8920
8921 IF trunc(TmpDayTab(i).item_date) <
8922 trunc(p_DBDtlTab(d_in).item_date) THEN
8923
8924 -- New record
8925 lv_next_line_num := 1;
8926
8927 ELSIF trunc(TmpDayTab(i).item_date) =
8928 trunc(p_dbDtlTab(d_in).item_date) THEN
8929
8930 -- Record exists
8931
8932 IF TmpDayTab(i).action_flag = 'C' THEN
8933
8934 -- Check IF there are changes in
8935 -- person_billable, resource_type
8936 -- work_type_id
8937
8938 print_message('p_DBDtlTab(d_in).provisional_flag: ' || p_DBDtlTab(d_in).provisional_flag);
8939 print_message('lv_provisional_flag: ' || lv_provisional_flag);
8940
8941 IF (p_DBDtlTab(d_in).provisional_flag <>
8942 lv_provisional_flag) OR
8943 (NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y')
8944 IN ('N', 'Y')
8945 AND lv_new_fcast_sum_code = 'X') OR
8946 (p_DBDtlTab(d_in).forecast_summarized_code = 'X'
8947 AND lv_new_fcast_sum_code = 'N') OR
8948 (NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y')
8949 IN ('N', 'Y')
8950 AND lv_new_util_sum_code = 'X') OR
8951 (p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG = 'X'
8952 AND lv_new_util_sum_code = 'N') OR
8953
8954 (NVL(p_DBDtlTab(d_in).util_summarized_code,'Y')
8955 IN ('N', 'Y')
8956 AND lv_new_util_sum_code = 'X') OR
8957 (p_DBDtlTab(d_in).util_summarized_code = 'X'
8958 AND lv_new_util_sum_code = 'N') OR
8959 (p_DBDtlTab(d_in).work_type_id <>
8960 p_AsgnDtlRec.work_type_id) OR
8961 (p_DBDtlTab(d_in).person_billable_flag <>
8962 TmpDayTab(i).person_billable_flag) OR
8963 (p_DBDtlTab(d_in).resource_type_code <>
8964 lv_resource_type) THEN
8965
8966 TmpDayTab(i).action_flag := 'RN';
8967
8968 ELSE
8969
8970 TmpDayTab(i).action_flag := 'I';
8971
8972 END IF;
8973
8974 END IF;
8975
8976
8977 IF TmpDayTab(i).action_flag IN ('DN', 'D') THEN
8978
8979 -- Change IN header attribute values
8980 -- update existing line FOR flags
8981 -- Reverse detail line IF forecast/util
8982 --summarization done
8983 -- IF summ not done IN existing line;
8984 -- item_quantity to zero
8985 -- net_zero flag to Y
8986 -- forecast/util summ_flag = 'X'
8987 -- New line generation is done at the end
8988
8989 lv_next_line_num := 1;
8990
8991 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y')
8992 IN ('N', 'X', 'E')
8993 AND NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y')
8994 IN ('N', 'X', 'E')
8995 AND NVL(p_DBDtlTab(d_in).util_summarized_code,'Y')
8996 IN ('N', 'X', 'E') THEN
8997
8998 TmpUpdTab(u_in) := p_dbDtlTab(d_in);
8999 TmpUpdTab(u_in).forecast_summarized_code := 'X';
9000 TmpUpdTab(u_in).PJI_SUMMARIZED_FLAG := 'X';
9001 TmpUpdTab(u_in).util_summarized_code := 'X';
9002 TmpUpdTab(u_in).CAPACITY_QUANTITY := NULL;
9003 TmpUpdTab(u_in).OVERCOMMITMENT_QTY := NULL;
9004 TmpUpdTab(u_in).OVERPROVISIONAL_QTY := NULL;
9005 TmpUpdTab(u_in).OVER_PROV_CONF_QTY := NULL;
9006 TmpUpdTab(u_in).CONFIRMED_QTY := NULL;
9007 TmpUpdTab(u_in).PROVISIONAL_QTY := NULL;
9008 TmpUpdTab(u_in).item_quantity := 0;
9009 TmpUpdTab(u_in).org_util_weighted :=0;
9010 TmpUpdTab(u_in).resource_util_weighted :=0;
9011 TmpUpdTab(u_in).net_zero_flag := 'Y';
9012 u_in := u_in + 1;
9013
9014 ELSE
9015
9016 TmpUpdTab(u_in) := p_DBDtlTab(d_in);
9017 IF (
9018 nvl(p_DBDtlTab(d_in).CAPACITY_QUANTITY,0) > 0 OR
9019 nvl(p_DBDtlTab(d_in).OVERCOMMITMENT_QTY,0) > 0 OR
9020 nvl(p_DBDtlTab(d_in).OVERPROVISIONAL_QTY,0) > 0 OR
9021 nvl(p_DBDtlTab(d_in).OVER_PROV_CONF_QTY,0) > 0 OR
9022 nvl(p_DBDtlTab(d_in).CONFIRMED_QTY,0) > 0 OR
9023 nvl(p_DBDtlTab(d_in).PROVISIONAL_QTY,0) > 0 OR
9024 nvl(p_DBDtlTab(d_in).item_quantity,0) > 0
9025 ) THEN
9026
9027 -- Generate reverse line
9028 TmpInsTab(i_in) := p_DBDtlTab(d_in);
9029 TmpInsTab(i_in).line_num :=
9030 p_DBDtlTab(d_in).line_num + 1;
9031 IF (NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) = 0) THEN
9032 TmpInsTab(i_in).CAPACITY_QUANTITY := NULL;
9033 ELSE
9034 TmpInsTab(i_in).CAPACITY_QUANTITY := NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) * -1;
9035 END IF;
9036 IF (NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) = 0) THEN
9037 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NULL;
9038 ELSE
9039 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) * -1;
9040 END IF;
9041 IF (NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) = 0) THEN
9042 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NULL;
9043 ELSE
9044 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) * -1;
9045 END IF;
9046 IF (NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) = 0) THEN
9047 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NULL;
9048 ELSE
9049 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) * -1;
9050 END IF;
9051 IF (NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) = 0) THEN
9052 TmpInsTab(i_in).CONFIRMED_QTY := NULL;
9053 ELSE
9054 TmpInsTab(i_in).CONFIRMED_QTY := NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) * -1;
9055 END IF;
9056 IF (NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) = 0) THEN
9057 TmpInsTab(i_in).PROVISIONAL_QTY := NULL;
9058 ELSE
9059 TmpInsTab(i_in).PROVISIONAL_QTY := NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) * -1;
9060 END IF;
9061 TmpInsTab(i_in).item_quantity :=
9062 TmpInsTab(i_in).item_quantity * -1;
9063 TmpInsTab(i_in).resource_util_weighted :=
9064 TmpInsTab(i_in).resource_util_weighted * -1;
9065 TmpInsTab(i_in).org_util_weighted :=
9066 TmpInsTab(i_in).org_util_weighted * -1;
9067 TmpInsTab(i_in).reversed_flag := 'N';
9068 TmpInsTab(i_in).line_num_reversed :=
9069 p_DBDtlTab(d_in).line_num;
9070 TmpInsTab(i_in).net_zero_flag := 'Y';
9071
9072 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y') =
9073 'Y' THEN
9074
9075 TmpInsTab(i_in).forecast_summarized_code :=
9076 'N';
9077
9078 ELSE
9079
9080 TmpInsTab(i_in).forecast_summarized_code :=
9081 p_DBDtlTab(d_in).forecast_summarized_code;
9082
9083 END IF;
9084
9085 IF NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y') = 'Y' THEN
9086 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG := 'N';
9087 ELSE
9088 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG :=
9089 p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG;
9090 END IF;
9091
9092 IF NVL(p_DBDtlTab(d_in).util_summarized_code,'Y') = 'Y'
9093 THEN
9094
9095 TmpInsTab(i_in).util_summarized_code := 'N';
9096
9097 ELSE
9098
9099 TmpInsTab(i_in).util_summarized_code :=
9100 p_DBDtlTab(d_in).util_summarized_code;
9101
9102 END IF;
9103
9104 i_in := i_in + 1;
9105
9106
9107 -- update line
9108 TmpUpdTab(u_in).reversed_flag := 'Y';
9109
9110 END IF;
9111
9112 TmpUpdTab(u_in).net_zero_flag := 'Y';
9113 u_in := u_in + 1;
9114
9115 END IF;
9116
9117 ELSIF TmpDayTab(i).action_flag = 'RN' THEN
9118
9119 -- No change IN header
9120 -- There is change IN item_quantity/provisional_flag/
9121 -- include IN forecast/work_type_id
9122 -- If summarization is not done
9123 -- same line to be updated with new values
9124 -- generated. Save forecast_item_id
9125
9126 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y')
9127 IN ('N', 'X', 'E')
9128 AND NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y')
9129 IN ('N', 'X', 'E')
9130 AND NVL(p_DBDtlTab(d_in).util_summarized_code,'Y')
9131 IN ('N', 'X', 'E') THEN
9132
9133 TmpDayTab(i).action_flag := 'RU';
9134 TmpDayTab(i).forecast_item_id :=
9135 p_dbDtlTab(d_in).forecast_item_id;
9136 lv_next_line_num := p_DBDtlTab(d_in).line_num;
9137
9138 ELSE
9139
9140 TmpDayTab(i).forecast_item_id :=
9141 p_dbDtlTab(d_in).forecast_item_id;
9142
9143 TmpUpdTab(u_in) := p_DBDtlTab(d_in);
9144
9145 lv_next_line_num :=
9146 p_DBDtlTab(d_in).line_num + 1;
9147
9148 IF (
9149 nvl(p_DBDtlTab(d_in).CAPACITY_QUANTITY,0) > 0 OR
9150 nvl(p_DBDtlTab(d_in).OVERCOMMITMENT_QTY,0) > 0 OR
9151 nvl(p_DBDtlTab(d_in).OVERPROVISIONAL_QTY,0) > 0 OR
9152 nvl(p_DBDtlTab(d_in).OVER_PROV_CONF_QTY,0) > 0 OR
9153 nvl(p_DBDtlTab(d_in).CONFIRMED_QTY,0) > 0 OR
9154 nvl(p_DBDtlTab(d_in).PROVISIONAL_QTY,0) > 0 OR
9155 nvl(p_dbdtltab(d_in).item_quantity,0) > 0
9156 ) THEN
9157
9158 -- Generate Reverse Line
9159 TmpInsTab(i_in) := p_DBDtlTab(d_in);
9160 TmpInsTab(i_in).line_num := lv_next_line_num;
9161 lv_next_line_num := lv_next_line_num + 1;
9162 IF (NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) = 0) THEN
9163 TmpInsTab(i_in).CAPACITY_QUANTITY := NULL;
9164 ELSE
9165 TmpInsTab(i_in).CAPACITY_QUANTITY := NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) * -1;
9166 END IF;
9167 IF (NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) = 0) THEN
9168 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NULL;
9169 ELSE
9170 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) * -1;
9171 END IF;
9172 IF (NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) = 0) THEN
9173 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NULL;
9174 ELSE
9175 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) * -1;
9176 END IF;
9177 IF (NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) = 0) THEN
9178 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NULL;
9179 ELSE
9180 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) * -1;
9181 END IF;
9182 IF (NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) = 0) THEN
9183 TmpInsTab(i_in).CONFIRMED_QTY := NULL;
9184 ELSE
9185 TmpInsTab(i_in).CONFIRMED_QTY := NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) * -1;
9186 END IF;
9187 IF (NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) = 0) THEN
9188 TmpInsTab(i_in).PROVISIONAL_QTY := NULL;
9189 ELSE
9190 TmpInsTab(i_in).PROVISIONAL_QTY := NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) * -1;
9191 END IF;
9192 TmpInsTab(i_in).item_quantity :=
9193 p_DBDtlTab(d_in).item_quantity * -1;
9194 TmpInsTab(i_in).resource_util_weighted :=
9195 p_DBDtlTab(d_in).resource_util_weighted * -1;
9196 TmpInsTab(i_in).org_util_weighted :=
9197 p_DBDtlTab(d_in).org_util_weighted * -1;
9198 TmpInsTab(i_in).reversed_flag := 'N';
9199 TmpInsTab(i_in).line_num_reversed :=
9200 p_DBDtlTab(d_in).line_num;
9201 TmpInsTab(i_in).net_zero_flag := 'Y';
9202
9203 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y') =
9204 'Y' THEN
9205
9206 TmpInsTab(i_in).forecast_summarized_code :=
9207 'N';
9208
9209 ELSE
9210
9211 TmpInsTab(i_in).forecast_summarized_code :=
9212 p_DBDtlTab(d_in).forecast_summarized_code;
9213
9214 END IF;
9215
9216 IF NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y') = 'Y' THEN
9217 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG := 'N';
9218 ELSE
9219 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG :=
9220 p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG;
9221 END IF;
9222
9223 IF NVL(p_DBDtlTab(d_in).util_summarized_code,'Y') = 'Y'
9224 THEN
9225
9226 TmpInsTab(i_in).util_summarized_code := 'N';
9227
9228 ELSE
9229
9230 TmpInsTab(i_in).util_summarized_code :=
9231 p_DBDtlTab(d_in).util_summarized_code;
9232
9233 END IF;
9234
9235 i_in := i_in + 1;
9236
9237
9238 -- update Line
9239 TmpUpdTab(u_in).reversed_flag := 'Y';
9240 END IF;
9241
9242 TmpUpdTab(u_in).net_zero_flag := 'Y';
9243 u_in := u_in + 1;
9244
9245 END IF;
9246
9247 END IF;
9248
9249 d_in := d_in + 1;
9250
9251 END IF;
9252
9253 END IF;
9254
9255 -- N New record/new line
9256 -- DN Existing record has header changes
9257 -- New record/new line
9258 -- RN Existing record detail changes
9259 -- The values are already summarized
9260 -- Create new line
9261 -- RU Existing record has detail changes
9262 -- The values are not summarized
9263 -- update existing line with new values
9264 -- All attribute values are.FIRST generated IN Tmp_rec
9265 -- IF action_flag is N,DN,RN copied to TmpInsTab
9266 -- ELSE copied to TmpUpdTab
9267
9268 IF (TmpDayTab(i).action_flag IN ('N', 'DN', 'RN','RU')) AND
9269 (
9270 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) > 0 OR
9271 NVL(TmpDayTab(i).OVERCOMMITMENT_QTY,0) > 0 OR
9272 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) > 0 OR
9273 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) > 0 OR
9274 NVL(TmpDayTab(i).CONFIRMED_QTY,0) > 0 OR
9275 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) > 0 OR
9276 TmpDayTab(i).item_quantity > 0
9277 ) THEN
9278
9279 -- create new line
9280 TmpDtlRec.forecast_item_id := TmpDayTab(i).forecast_item_id;
9281 TmpDtlRec.amount_type_id := lv_amount_type_id;
9282 TmpDtlRec.line_num := lv_next_line_num;
9283 TmpDtlRec.resource_type_code := lv_resource_type;
9284 TmpDtlRec.person_billable_flag :=
9285 TmpDayTab(i).person_billable_flag;
9286 TmpDtlRec.item_date := TmpDayTab(i).item_date;
9287 TmpDtlRec.expenditure_org_id :=
9288 TmpDayTab(i).expenditure_org_id;
9289 TmpDtlRec.project_org_id := TmpDayTab(i).project_org_id;
9290
9291 TmpDtlRec.project_id := TmpDayTab(i).project_id;
9292 TmpDtlRec.resource_id := TmpDayTab(i).resource_id;
9293 TmpDtlRec.EXPENDITURE_ORGANIZATION_ID := TmpDayTab(i).EXPENDITURE_ORGANIZATION_ID;
9294
9295 TmpDtlRec.item_uom := 'HOURS';
9296 TmpDtlRec.CAPACITY_QUANTITY := TmpDayTab(i).CAPACITY_QUANTITY;
9297 TmpDtlRec.OVERCOMMITMENT_QTY := TmpDayTab(i).OVERCOMMITMENT_QTY;
9298 TmpDtlRec.OVERPROVISIONAL_QTY := TmpDayTab(i).OVERPROVISIONAL_QTY;
9299 TmpDtlRec.OVER_PROV_CONF_QTY := TmpDayTab(i).OVER_PROV_CONF_QTY;
9300 TmpDtlRec.CONFIRMED_QTY := TmpDayTab(i).CONFIRMED_QTY;
9301 TmpDtlRec.PROVISIONAL_QTY := TmpDayTab(i).PROVISIONAL_QTY;
9302 TmpDtlRec.item_quantity := TmpDayTab(i).item_quantity;
9303 TmpDtlRec.pvdr_acct_curr_code := NULL;
9304 TmpDtlRec.pvdr_acct_amount := NULL;
9305 TmpDtlRec.rcvr_acct_curr_code := NULL;
9306 TmpDtlRec.rcvr_acct_amount := NULL;
9307 TmpDtlRec.proj_currency_code := NULL;
9308 TmpDtlRec.proj_amount := NULL;
9309 TmpDtlRec.denom_currency_code := NULL;
9310 TmpDtlRec.denom_amount := NULL;
9311 TmpDtlRec.tp_amount_type :=
9312 p_AsgnDtlRec.fcst_tp_amount_type;
9313 TmpDtlRec.billable_flag := lv_billable_flag;
9314 TmpDtlRec.forecast_summarized_code :=
9315 lv_new_fcast_sum_code ;
9316 TmpDtlRec.PJI_SUMMARIZED_FLAG := lv_new_util_sum_code;
9317 TmpDtlRec.util_summarized_code :=
9318 lv_new_util_sum_code ;
9319
9320 IF TmpDayTab(i).Error_flag = 'Y' THEN
9321
9322 TmpDtlRec.PJI_SUMMARIZED_FLAG := 'E';
9323 TmpDtlRec.util_summarized_code := 'E';
9324 TmpDtlRec.forecast_summarized_code := 'E';
9325
9326 END IF;
9327
9328 TmpDtlRec.work_type_id := p_AsgnDtlRec.work_type_id;
9329 TmpDtlRec.resource_util_category_id :=
9330 l_resutilcategoryid;
9331 TmpDtlRec.org_util_category_id :=
9332 l_orgutilcategoryid;
9333 TmpDtlRec.resource_util_weighted :=
9334 TmpDayTab(i).item_quantity *
9335 l_resutilweighted/100;
9336 TmpDtlRec.org_util_weighted :=
9337 TmpDayTab(i).item_quantity *
9338 l_orgutilweighted/100;
9339 TmpDtlRec.Reduce_Capacity_Flag := l_ReduceCapacityFlag;
9340 TmpDtlRec.provisional_flag := TmpDayTab(i).provisional_flag;
9341 TmpDtlRec.reversed_flag := 'N';
9342 TmpDtlRec.net_zero_flag := 'N';
9343 TmpDtlRec.line_num_reversed := 0;
9344
9345 IF TmpDayTab(i).action_flag = 'RU' THEN
9346
9347 TmpUpdTab(u_in) := TmpDtlRec;
9348 u_in := u_in + 1;
9349
9350 ELSE
9351
9352 TmpInsTab(i_in) := TmpDtlRec;
9353 i_in := i_in + 1;
9354
9355 END IF;
9356
9357 /*
9358 Print_message('***********');
9359
9360 Print_message(
9361 'item_date:' || TmpDtlRec.item_date);
9362
9363 Print_message(
9364 'fct_item_id:' || TmpDtlRec.forecast_item_id ||
9365 ' amt_typ_id:' || TmpDtlRec.amount_type_id ||
9366 ' line_num:' || TmpDtlRec.line_num ||
9367 chr(10) || 'Res_typ_cd :' ||
9368 TmpDtlRec.resource_type_code ||
9369 ' per_bil_fl:' ||
9370 TmpDtlRec.person_billable_flag ||
9371 ' item_uom:' || TmpDtlRec.item_uom );
9372
9373 Print_message(
9374 ' item_qty:' || TmpDtlRec.item_quantity ||
9375 ' exp_org_id:' ||
9376 TmpDtlRec.expenditure_org_id ||
9377 ' prj_org_id:' ||
9378 TmpDtlRec.project_org_id ||
9379 ' tp_amt_typ:' || TmpDtlRec.tp_amount_type ||
9380 chr(10) || 'bill_flag:' || TmpDtlRec.billable_flag ||
9381 ' fcs_sum_cd:' ||
9382 TmpDtlRec.forecast_summarized_code ||
9383 ' utl_sum_cd:' ||
9384 TmpDtlRec.util_summarized_code );
9385
9386 Print_message(
9387 ' wrk_typ_id:' || TmpDtlRec.work_type_id ||
9388 ' res_utl_id:' ||
9389 TmpDtlRec.resource_util_category_id ||
9390 ' org_utl_id:' ||
9391 TmpDtlRec.org_util_category_id ||
9392 ' res_utl_wt:' ||
9393 TmpDtlRec.resource_util_weighted ||
9394 chr(10) || 'org_utl_wt:' ||
9395 TmpDtlRec.org_util_weighted ||
9396 ' prv_flag:' || TmpDtlRec.provisional_flag ||
9397 ' rev_flag:' || TmpDtlRec.reversed_flag ||
9398 ' net_zer_fl:' || TmpDtlRec.net_zero_flag ||
9399 ' ln_num_rev:' ||
9400 TmpDtlRec.line_num_reversed);
9401 */
9402
9403 END IF;
9404 end if;
9405 END LOOP;
9406 end if;
9407
9408
9409 x_FIDtlInsTab.Delete;
9410 x_FIDtlUpdTab.Delete;
9411
9412 x_FIDtlInsTab := TmpInsTab;
9413 x_FIDtlUpdTab := TmpUpdTab;
9414
9415
9416 Print_message('Leaving build_fi_dtl_asg');
9417
9418 PA_DEBUG.Reset_Err_Stack;
9419
9420 x_return_status := lv_return_status;
9421
9422 EXCEPTION
9423
9424 WHEN OTHERS THEN
9425 print_message('Failed in Build_fi_dtl_asg api');
9426 print_message('SQLCODE'||sqlcode||sqlerrm);
9427
9428 x_msg_count := 1;
9429 x_msg_data := sqlerrm;
9430 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9431
9432 FND_MSG_PUB.add_exc_msg
9433 (p_pkg_name =>
9434 'PA_FORECASTITEM_PVT.Build_FI_Dtl_Asg',
9435 p_procedure_name => PA_DEBUG.G_Err_Stack);
9436
9437 If x_msg_count = 1 THEN
9438 pa_interface_utils_pub.get_messages
9439 (p_encoded => FND_API.G_TRUE,
9440 p_msg_index => 1,
9441 p_msg_count => x_msg_count,
9442 p_msg_data => x_msg_data,
9443 p_data => l_data, -- 4537865
9444 p_msg_index_out => l_msg_index_out );
9445 x_msg_data := l_data ; -- 4537865
9446 End If;
9447 Print_message(x_msg_data);
9448
9449 RAISE;
9450
9451 END Build_FI_Dtl_Asg;
9452 /** This Api refreshes the assignment plsql schedule table after deleting the records
9453 ** so that it donot cause no data found error
9454 */
9455 PROCEDURE refresh_assgn_schedule_tab(p_TmpScheduleTab IN PA_FORECAST_GLOB.ScheduleTabTyp
9456 ,x_TmpScheduleTab OUT NOCOPY PA_FORECAST_GLOB.ScheduleTabTyp) /* 2674619 - Nocopy change */
9457 IS
9458
9459 l_msg_index_out NUMBER;
9460 l_counter INTEGER :=0;
9461 l_dummy_TmpScheduleTab PA_FORECAST_GLOB.ScheduleTabTyp;
9462
9463 BEGIN
9464 -- Bug 2137333: Added empty table check.
9465 IF p_TmpScheduleTab.COUNT > 0 THEN
9466 l_counter := 1;
9467
9468 FOR i IN p_TmpScheduleTab.FIRST..p_TmpScheduleTab.LAST LOOP
9469
9470 IF p_TmpScheduleTab.EXISTS(i) then
9471 l_dummy_TmpScheduleTab(l_counter) := p_TmpScheduleTab(i);
9472 l_counter := l_counter + 1;
9473 END IF;
9474
9475 END LOOP;
9476 x_TmpScheduleTab.delete();
9477 x_TmpScheduleTab := l_dummy_TmpScheduleTab;
9478
9479 END IF;
9480
9481 Return;
9482
9483
9484 END refresh_assgn_schedule_tab;
9485
9486 /** This Api refreshes the plsql schedule table after deleting the records
9487 ** so that it donot cause no data found error
9488 */
9489 PROCEDURE refresh_schedule_tab(p_TmpScheduleTab IN PA_SCHEDULE_GLOB.ScheduleTabTyp
9490 ,x_TmpScheduleTab OUT NOCOPY PA_SCHEDULE_GLOB.ScheduleTabTyp) /* 2674619 - Nocopy change */
9491 IS
9492
9493 l_msg_index_out NUMBER;
9494 l_counter INTEGER :=0;
9495 l_dummy_TmpScheduleTab PA_SCHEDULE_GLOB.ScheduleTabTyp;
9496
9497 BEGIN
9498 IF p_TmpScheduleTab.COUNT > 0 then
9499
9500 l_counter := 1;
9501
9502 FOR i IN p_TmpScheduleTab.FIRST..p_TmpScheduleTab.LAST LOOP
9503
9504 IF p_TmpScheduleTab.EXISTS(i) then
9505 l_dummy_TmpScheduleTab(l_counter) := p_TmpScheduleTab(i);
9506 l_counter := l_counter + 1;
9507 END IF;
9508
9509 END LOOP;
9510 x_TmpScheduleTab.delete();
9511 x_TmpScheduleTab := l_dummy_TmpScheduleTab;
9512
9513 END IF;
9514
9515 Return;
9516
9517
9518 END refresh_schedule_tab;
9519
9520
9521 /* ---------------------------------------------------------------------
9522 | Procedure : Regenerate_Res_Unassigned_FI
9523 | Purpose : To generate forecast items FOR resource unassigned time
9524 | Parameters : p_resource_id - Input Resource ID
9525 | p_start_date - Start DATE FOR Forecast Item Generation
9526 | p_end_date - END DATE FOR Forecast Item Generation
9527 | p_process_mode - Mode of Processing.
9528 | a) GENERATE : New Generation
9529 | Also when schedule data changes FOR
9530 | any assignment
9531 | b) RECALCULATE : Whenever
9532 | i)expenditure OU Changes
9533 | ii)expenditure organization Changes
9534 | iii)expenditure type Changes
9535 | iv)expenditure type class Changes
9536 | v)Borrowed flag Changes
9537 | c) ERROR : Regeneration of Errored forecast items
9538 | by previous run
9539 | p_ErrHdrTab -
9540 | a)GENERATE/ : Dummy tab is passed
9541 | RECALCULATE Mode
9542 | b) ERROR Mode : Contains all errored forecast item
9543 | Header records
9544 | p_date_validation - This was introduced for data fix
9545 | scripts. If 'N', then we do not use the avail
9546 | duration profile to trunc the date.
9547 | x_return_status -
9548 | x_msg_count -
9549 | x_msg_data -
9550 +----------------------------------------------------------------------*/
9551
9552 PROCEDURE Regenerate_Res_Unassigned_FI(
9553 p_resource_id IN NUMBER,
9554 p_start_date IN OUT NOCOPY DATE, -- 4537865
9555 p_end_date IN OUT NOCOPY DATE, -- 4537865
9556 p_process_mode IN VARCHAR2,
9557 p_ErrHdrTab IN PA_FORECAST_GLOB.FIHdrTabTyp,
9558 p_date_validation IN VARCHAR2 := 'Y',
9559 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
9560 x_msg_count OUT NOCOPY NUMBER, -- 4537865
9561 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
9562
9563 l_msg_index_out NUMBER;
9564 l_data varchar2(2000) ; -- 4537865
9565 TmpScheduleTab PA_SCHEDULE_GLOB.ScheduleTabTyp;
9566 TmpResScheduleTab PA_FORECAST_GLOB.ScheduleTabTyp;
9567 TmpAsgnScheduleTab PA_FORECAST_GLOB.ScheduleTabTyp;
9568 TmpResFIDayTab PA_FORECAST_GLOB.FIDayTabTyp;
9569 TmpAsgnFIDayTab PA_FORECAST_GLOB.FIDayTabTyp;
9570 TmpAvlFIDayTab PA_FORECAST_GLOB.FIDayTabTyp;
9571 TmpDbFIDtlTab PA_FORECAST_GLOB.FIDtlTabTyp;
9572 TmpDbFIHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
9573 TmpFIDtlInsTab PA_FORECAST_GLOB.FIDtlTabTyp;
9574 TmpFIDtlUpdTab PA_FORECAST_GLOB.FIDtlTabTyp;
9575 TmpFIHdrInsTab PA_FORECAST_GLOB.FIHdrTabTyp;
9576 TmpFIHdrUpdTab PA_FORECAST_GLOB.FIHdrTabTyp;
9577
9578 li_no_of_days NUMBER;
9579 lv_asgn_type VARCHAR2(30) := 'UN-ASSGN';
9580 lb_found BOOLEAN := FALSE;
9581 li_rows NUMBER;
9582 li_lock_id NUMBER;
9583 li_lock_status NUMBER;
9584 lv_lock_type VARCHAR2(5) := 'RES';
9585 li_asgn_qty NUMBER;
9586 li_conf_asgn_qty NUMBER;
9587 li_prov_asgn_qty NUMBER;
9588
9589 l_Cannot_Acquire_Lock EXCEPTION;
9590 lv_err_msg VARCHAR2(30);
9591 ld_start_date DATE;
9592 ld_end_date DATE;
9593
9594 lv_return_status VARCHAR2(30);
9595
9596 g_TimelineProfileSetup PA_TIMELINE_GLOB.TimelineProfileSetup;
9597 AVAILABILITY_DURATION NUMBER;
9598
9599 cursor c_res_dates is
9600 select min(resource_effective_start_date),
9601 max(resource_effective_end_date)
9602 from pa_resources_denorm
9603 where resource_id = p_resource_id;
9604
9605 ld_res_start_date DATE;
9606 ld_res_end_date DATE;
9607 l_no_fis_to_create EXCEPTION;
9608
9609 BEGIN
9610
9611 lv_return_status := FND_API.G_RET_STS_SUCCESS;
9612
9613 IF (PA_INSTALL.is_prm_licensed = 'Y' OR
9614 PA_INSTALL.is_utilization_implemented = 'Y') THEN
9615
9616 PA_DEBUG.Init_err_stack(
9617 'PA_FORECASTITEM_PVT.Regenerate_Res_Unassigned_FI');
9618
9619 /* 2196924: Don't need this logic, because fis should be created wven when resource
9620 records are missing.
9621 open c_res_dates;
9622 fetch c_res_dates into ld_res_start_date, ld_res_end_date;
9623 print_message('ld_res_start_date: ' || ld_res_start_date);
9624 print_message('ld_res_end_date: ' || ld_res_end_date);
9625 if c_res_dates%NOTFOUND or ld_res_start_date is null then
9626 print_message('Invalid resource. No FIs to create.');
9627 close c_res_dates;
9628 raise l_no_fis_to_create;
9629 end if;
9630 close c_res_dates;
9631 */
9632
9633 -- 2196924: Comment out this logic
9634 -- Don't create FIs if resource is end dated.
9635 --if (ld_res_end_date < sysdate) then
9636 -- print_message('Resource is end dated. No FIs to create.');
9637 -- raise l_no_fis_to_create;
9638 --end if;
9639
9640 g_TimelineProfileSetup := PA_TIMELINE_UTIL.get_timeline_profile_setup;
9641 AVAILABILITY_DURATION := NVL(g_TimelineProfileSetup.availability_duration,0);
9642 p_start_date := NVL(p_start_date, ADD_MONTHS(sysdate, -12));
9643 p_end_date := NVL(p_end_date, ADD_MONTHS(sysdate, availability_duration * (12)));
9644 print_message('p_start_date: ' || p_start_date);
9645 print_message('p_end_date: ' || p_end_date);
9646
9647 if (p_date_validation='Y' AND
9648 p_start_date < ADD_MONTHS(sysdate, -12)) then
9649 p_start_date := ADD_MONTHS(sysdate, -12);
9650 end if;
9651
9652 if (p_date_validation='Y' AND
9653 p_end_date > ADD_MONTHS(sysdate, availability_duration * (12)))
9654 then
9655 p_end_date := ADD_MONTHS(sysdate, availability_duration * (12));
9656 end if;
9657
9658 print_message('p_start_date: ' || p_start_date);
9659 print_message('p_end_date: ' || p_end_date);
9660
9661 if (p_start_date > p_end_date or availability_duration = 0) then
9662 print_message('l_no_fis_to_create');
9663 raise l_no_fis_to_create;
9664 end if;
9665
9666 print_message('p_start_date: ' || p_start_date);
9667 print_message('p_end_date: ' || p_end_date);
9668
9669 TmpScheduleTab.delete;
9670 TmpResScheduleTab.delete;
9671 TmpAsgnScheduleTab.delete;
9672 TmpResFIDayTab.delete;
9673 TmpAsgnFIDayTab.delete;
9674 TmpAvlFIDayTab.delete;
9675 TmpDbFIDtlTab.delete;
9676 TmpDbFIHdrTab.delete;
9677 TmpFIDtlInsTab.delete;
9678 TmpFIDtlUpdTab.delete;
9679 TmpFIHdrInsTab.delete;
9680 TmpFIHdrUpdTab.delete;
9681
9682 Print_message(
9683 'Entering Regenerate_Res_Unassigned_FI');
9684
9685 IF (PA_FORECAST_ITEMS_UTILS.Set_User_Lock(
9686 p_resource_id, 'RES') <> 0) THEN
9687 RAISE l_cannot_acquire_lock;
9688
9689 END IF;
9690
9691 Print_message( 'Calling Get_resource_schedule');
9692
9693
9694 print_message('p_start_date: ' || p_start_date);
9695 print_message('p_end_date: ' || p_end_date);
9696
9697 PA_SCHEDULE_PVT.get_resource_schedule (
9698 p_source_id => p_resource_id,
9699 p_source_type => 'PA_RESOURCE_ID',
9700 p_start_date => p_start_date,
9701 p_end_date => p_end_date,
9702 x_Sch_Record_Tab => TmpScheduleTab,
9703 x_return_status => lv_return_status,
9704 x_msg_count => x_msg_count,
9705 x_msg_data => x_msg_data);
9706
9707
9708 print_message('p_start_date: ' || p_start_date);
9709 print_message('p_end_date: ' || p_end_date);
9710
9711 IF TmpScheduleTab.Count = 0 THEN
9712
9713 lv_err_msg := 'No_Schedule_Records - Res';
9714 RAISE NO_DATA_FOUND;
9715
9716 END IF;
9717
9718 /* 2196924: Commenting out because dates are handled above.
9719 IF p_start_date IS NULL THEN
9720
9721 p_start_date := TmpScheduleTab( TmpScheduleTab.FIRST).start_date;
9722
9723 END IF;
9724
9725
9726 IF p_start_date < ADD_MONTHS(sysdate,
9727 availability_duration * (-12)) THEN
9728 ld_start_date := ADD_MONTHS(sysdate,
9729 availability_duration * (-12));
9730
9731 ELSE
9732
9733 ld_start_date := p_start_date;
9734
9735 END IF;
9736
9737 */
9738 ld_start_date := p_start_date;
9739 ld_end_date := p_end_date;
9740
9741 print_message('1 p_start_date: ' || p_start_date);
9742 print_message('1 p_end_date: ' || p_end_date);
9743
9744 /*** Bug fix : 1993843 the following lines are commented and new if condition added
9745 ** avoid creating too many unavailable records.
9746 --IF p_start_date >= sysdate THEN
9747 -- ld_end_date := ADD_MONTHS(p_start_date,
9748 -- availability_duration * 12);
9749 --ELSE
9750 -- ld_end_date := ADD_MONTHS(sysdate, availability_duration * 12);
9751 --END IF;
9752 ***/
9753
9754 /*
9755 IF p_end_date >= ADD_MONTHS(sysdate,availability_duration * (12)) THEN
9756 ld_end_date := ADD_MONTHS(sysdate,availability_duration * 12);
9757 ELSE
9758 ld_end_date := nvl(p_end_date,ADD_MONTHS(sysdate, availability_duration * 12));
9759 END IF;
9760 -- end of bug fix : 1993843
9761 */
9762
9763 IF TmpScheduleTab(TmpScheduleTab.FIRST).start_date < ld_start_date
9764 THEN
9765 p_start_date := ld_start_date;
9766
9767 lb_found := FALSE;
9768
9769 FOR i IN TmpScheduleTab.FIRST..TmpScheduleTab.LAST LOOP
9770
9771 IF TmpScheduleTab.exists(i) then
9772 IF TmpScheduleTab(i).end_date >= p_start_date THEN
9773
9774 lb_found := TRUE;
9775 li_rows :=i - 1;
9776
9777 END IF;
9778
9779 EXIT WHEN lb_found;
9780 end if;
9781 END LOOP;
9782
9783 IF lb_found THEN
9784
9785 -- delete the no needed schedules
9786
9787 FOR i IN 1..li_rows LOOP
9788
9789 TmpScheduleTab.delete(i);
9790
9791 END LOOP;
9792
9793 TmpScheduleTab(TmpScheduleTab.FIRST).start_date :=
9794 p_start_date;
9795 END IF;
9796
9797 END IF;
9798
9799 IF TmpScheduleTab(TmpScheduleTab.LAST).end_date <= ld_end_date
9800 THEN
9801
9802 --p_end_date := TmpScheduleTab( TmpScheduleTab.LAST).end_date;
9803 /** bug fix :1993478,1993843 if the schedule date is less than FI generation
9804 * start and end date then assign the FI generation end date */
9805 IF ( TmpScheduleTab(TmpScheduleTab.LAST).end_date < ld_start_date ) then
9806 p_end_date := ld_end_date;
9807 print_message('2 p_start_date: ' || p_start_date);
9808 print_message('2 p_end_date: ' || p_end_date);
9809
9810 Else
9811 p_end_date := TmpScheduleTab( TmpScheduleTab.LAST).end_date;
9812 print_message('3 p_start_date: ' || p_start_date);
9813 print_message('3 p_end_date: ' || p_end_date);
9814
9815 End if;
9816 /*** end of bug fix **/
9817
9818
9819 ELSE
9820
9821 p_end_date := ld_end_date;
9822 print_message('4 p_start_date: ' || p_start_date);
9823 print_message('4 p_end_date: ' || p_end_date);
9824
9825
9826 lb_found := FALSE;
9827
9828 FOR i IN TmpScheduleTab.FIRST..TmpScheduleTab.LAST LOOP
9829
9830 If TmpScheduleTab.exists(i) then
9831 IF TmpScheduleTab(i).end_date >= p_end_date THEN
9832
9833 lb_found := TRUE;
9834 li_rows :=i;
9835
9836 END IF;
9837
9838 EXIT WHEN lb_found;
9839 end if;
9840 END LOOP;
9841
9842 IF lb_found THEN
9843
9844 -- delete the no needed schedules
9845
9846 IF li_rows <> TmpScheduleTab.LAST THEN
9847
9848
9849 FOR i IN li_rows+1..TmpScheduleTab.LAST LOOP
9850
9851 TmpScheduleTab.delete(i);
9852
9853 END LOOP;
9854
9855 END IF;
9856
9857 TmpScheduleTab(TmpScheduleTab.LAST).end_date :=
9858 p_end_date;
9859 END IF;
9860
9861 END IF;
9862 /** Added for bug fix : 1993478 if the FI generation dates not falls with in
9863 * schedule range dates then we need not generate FI for those records
9864 * so delete the records from schedule tab
9865 **/
9866
9867 IF TmpScheduleTab.COUNT > 0 then
9868
9869 --print_message('before refresh3 :'||TmpScheduleTab.first||'-'||
9870 -- TmpScheduleTab.last||'-'||TmpScheduleTab.count);
9871
9872 lb_found := FALSE;
9873
9874 FOR i IN TmpScheduleTab.FIRST..TmpScheduleTab.LAST LOOP
9875 IF TmpScheduleTab.EXISTS(i) then
9876 --print_message('p_start_date='||p_start_date||'TmpScheduleTab(i).Start_date='||
9877 --TmpScheduleTab(i).Start_date||'TmpScheduleTab(i).end_date='||
9878 --TmpScheduleTab(i).end_date);
9879
9880 If (trunc(p_start_date) NOT BETWEEN trunc(TmpScheduleTab(i).Start_date)
9881 and trunc(TmpScheduleTab(i).End_date)) AND
9882 (trunc(p_end_date) NOT BETWEEN trunc(TmpScheduleTab(i).Start_date)
9883 and trunc(TmpScheduleTab(i).End_date)) then
9884
9885 IF trunc(TmpScheduleTab(i).End_date) < trunc(p_start_date) and
9886 trunc(TmpScheduleTab(i).End_date) < trunc(p_end_date) then
9887 print_message('deleteing the sch records');
9888 TmpScheduleTab.delete(i);
9889 lb_found := TRUE;
9890
9891 End if;
9892 End if;
9893 END IF;
9894
9895 END LOOP;
9896
9897 End if;
9898 --print_message('before refresh3 :'||TmpScheduleTab.first||'-'||
9899 --TmpScheduleTab.last||'-'||TmpScheduleTab.count);
9900
9901 IF lb_found THEN
9902 /** referesh the plsql table after deleteing records **/
9903
9904 refresh_schedule_tab(TmpScheduleTab,TmpScheduleTab);
9905
9906 --print_message('after refresh3 :'||TmpScheduleTab.first||'-'||
9907 --TmpScheduleTab.last||'-'||TmpScheduleTab.count);
9908 END IF;
9909
9910 If TmpScheduleTab.count = 0 then
9911 /** if the schedule tab is zero then release the lock and return **/
9912 li_lock_status := PA_FORECAST_ITEMS_UTILS.Release_User_lock(p_resource_id, 'RES');
9913 Print_message('Resource lock released ');
9914 Return;
9915 End if;
9916
9917 -- Move TmpScheduleTab to TmpResScheduleTab
9918 -- as TmpScheduleTab datatype is PA_SCHEDULE_GLOB.scheduletabtyp
9919 -- Uniform datatype is required FOR subsequent procedure calls
9920
9921
9922 FOR i IN TmpScheduleTab.FIRST..TmpScheduleTab.LAST LOOP
9923
9924 if TmpScheduleTab.exists(i) then
9925 TmpResScheduleTab(i).status_code :=
9926 TmpScheduleTab(i).assignment_status_code;
9927 TmpResScheduleTab(i).start_date :=
9928 TmpScheduleTab(i).start_date;
9929 TmpResScheduleTab(i).end_date :=
9930 TmpScheduleTab(i).end_date;
9931 TmpResScheduleTab(i).monday_hours :=
9932 TmpScheduleTab(i).monday_hours;
9933 TmpResScheduleTab(i).tuesday_hours :=
9934 TmpScheduleTab(i).tuesday_hours;
9935 TmpResScheduleTab(i).wednesday_hours :=
9936 TmpScheduleTab(i).wednesday_hours;
9937 TmpResScheduleTab(i).thursday_hours :=
9938 TmpScheduleTab(i).thursday_hours;
9939 TmpResScheduleTab(i).friday_hours :=
9940 TmpScheduleTab(i).friday_hours;
9941 TmpResScheduleTab(i).saturday_hours :=
9942 TmpScheduleTab(i).saturday_hours;
9943 TmpResScheduleTab(i).sunday_hours :=
9944 TmpScheduleTab(i).sunday_hours;
9945 TmpResScheduleTab(i).forecast_txn_version_number := 0;
9946 TmpResScheduleTab(i).forecast_txn_generated_flag := NULL;
9947 TmpResScheduleTab(i).schedule_id :=
9948 TmpScheduleTab(i).schedule_id;
9949 TmpResScheduleTab(i).system_status_code := NULL;
9950 end if;
9951 END LOOP;
9952
9953 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
9954
9955 Print_message( 'Res Avl - Calling Initialize_Day_FI');
9956
9957 Initialize_Day_FI ( TmpResScheduleTab,
9958 p_process_mode,
9959 p_start_date,
9960 p_end_date,
9961 TmpResFIDayTab ,
9962 lv_return_status , x_msg_count , x_msg_data);
9963 print_message('5 p_start_date: ' || p_start_date);
9964 print_message('5 p_end_date: ' || p_end_date);
9965
9966 END IF;
9967
9968 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
9969
9970 -- Build Day FI
9971
9972 Print_message( 'Res Avl - Calling Build_Day_FI');
9973
9974 Build_Day_FI ( TmpResScheduleTab , p_start_date, p_end_date,
9975 TmpResFIDayTab, lv_asgn_type, lv_return_status, x_msg_count, x_msg_data );
9976 print_message('6 p_start_date: ' || p_start_date);
9977 print_message('6 p_end_date: ' || p_end_date);
9978 END IF;
9979
9980 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
9981
9982 Print_message( 'Calling Get_Resource_Asgn_Schedule');
9983
9984 PA_FORECAST_ITEMS_UTILS.Get_Resource_Asgn_Schedules (
9985 p_resource_id,
9986 p_start_date,
9987 p_end_date ,
9988 TmpAsgnScheduleTab,
9989 lv_return_status ,
9990 x_msg_count,
9991 x_msg_data);
9992 print_message('7 p_start_date: ' || p_start_date);
9993 print_message('7 p_end_date: ' || p_end_date);
9994 END IF;
9995
9996 /** Bug : 1993136 **/
9997
9998 IF TmpAsgnScheduleTab.Count > 0 THEN
9999 lb_found := False;
10000
10001 FOR i IN TmpAsgnScheduleTab.first..TmpAsgnScheduleTab.last LOOP
10002 if TmpAsgnScheduleTab.exists(i) then
10003 print_message('TmpAsgnScheduleTab(i).start_date='||
10004 TmpAsgnScheduleTab(i).start_date||
10005 'TmpAsgnScheduleTab(i).end_date ='||
10006 TmpAsgnScheduleTab(i).end_date);
10007
10008 IF TmpAsgnScheduleTab(i).start_date < p_start_date THEN
10009 TmpAsgnScheduleTab(i).start_date := p_start_date;
10010 END IF;
10011
10012 -- Adjust the end date in Asgmt Scheudule
10013 IF TRUNC(TmpAsgnScheduleTab(i).start_date) > TRUNC(p_end_date) AND
10014 TRUNC(TmpAsgnScheduleTab(i).end_date) > TRUNC(p_end_date) THEN
10015
10016 print_message('deleteing TmpAsgnScheduleTab.delete');
10017 TmpAsgnScheduleTab.delete(i);
10018 lb_found := True;
10019
10020 ELSIF TRUNC(TmpAsgnScheduleTab(I).end_date) > TRUNC(p_end_date) THEN
10021 TmpAsgnScheduleTab(i).end_date := p_end_date;
10022 END IF;
10023 end if;
10024 END LOOP;
10025
10026 IF lb_found Then
10027 refresh_assgn_schedule_tab(TmpAsgnScheduleTab,TmpAsgnScheduleTab);
10028 End if;
10029 END IF;
10030
10031 /** end of bug fix 1993136 **/
10032
10033
10034 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10035
10036 IF TmpAsgnScheduleTab.Count > 0 THEN
10037
10038 Print_message(
10039 'Res Asg - Calling Initialize_Day_FI');
10040
10041 Initialize_Day_FI ( TmpAsgnScheduleTab,
10042 p_process_mode,
10043 p_start_date,
10044 p_end_date,
10045 TmpAsgnFIDayTab ,
10046 lv_return_status , x_msg_count ,
10047 x_msg_data);
10048 END IF;
10049
10050 END IF;
10051
10052 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10053
10054 Print_message( 'Res Asg - Calling Build_Day_FI');
10055
10056 IF TmpAsgnScheduleTab.Count > 0 THEN
10057
10058 Build_Day_FI ( TmpAsgnScheduleTab ,
10059 p_start_date,
10060 p_end_date,
10061 TmpAsgnFIDayTab, lv_asgn_type,
10062 lv_return_status,
10063 x_msg_count,
10064 x_msg_data );
10065 END IF;
10066
10067 END IF;
10068 -- Calculate resource availability hours i.e unassigned hours
10069
10070 -- dbms_output.put_line ('Res : ' ||
10071 -- TmpResFIDayTab(TmpResFIDayTab.FIRST).item_date);
10072 -- dbms_output.put_line ('Res : ' ||
10073 -- TmpResFIDayTab(TmpResFIDayTab.LAST).item_date);
10074 -- dbms_output.put_line ('Asgn : ' ||
10075 -- TmpResFIDayTab(TmpAsgnFIDayTab.FIRST).item_date);
10076 -- dbms_output.put_line ('Asgn : ' ||
10077 -- TmpResFIDayTab(TmpAsgnFIDayTab.LAST).item_date);
10078
10079 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10080
10081 li_no_of_days := trunc(p_end_date) - trunc(p_start_date) +1;
10082
10083 if (TmpResFIDayTab.count <> 0) then
10084 FOR i IN TmpResFIDayTab.FIRST ..TmpResFIDayTab.LAST LOOP
10085 if TmpResFIDayTab.exists(i) then
10086
10087
10088 TmpAvlFIDayTab(i).item_date := TmpResFIDayTab(i).item_date;
10089 TmpAvlFIDayTab(i).action_flag := 'N';
10090
10091 IF (i > TmpAsgnFIDayTab.COUNT) THEN
10092
10093 li_asgn_qty := 0;
10094 li_conf_asgn_qty := 0;
10095 li_prov_asgn_qty := 0;
10096 ELSE
10097
10098 li_asgn_qty := TmpAsgnFIDayTab(i).item_quantity;
10099 li_conf_asgn_qty := NVL(TmpAsgnFIDayTab(i).asgmt_confirmed_quantity,0);
10100 li_prov_asgn_qty := NVL(TmpAsgnFIDayTab(i).asgmt_provisional_quantity,0);
10101 END IF;
10102
10103 TmpAvlFIDayTab(i).item_quantity :=
10104 NVL(TmpResFIDayTab(i).item_quantity,0) - li_asgn_qty;
10105
10106 IF TmpAvlFIDayTab(i).item_quantity < 0 THEN
10107
10108 TmpAvlFIDayTab(i).item_quantity := 0;
10109
10110 END IF;
10111
10112 TmpAvlFIDayTab(i).capacity_quantity := NVL(TmpResFIDayTab(i).item_quantity,0);
10113
10114 if (NVL(li_prov_asgn_qty,0) = 0) THEN
10115 TmpAvlFIDayTab(i).provisional_qty := NULL;
10116 else
10117 TmpAvlFIDayTab(i).provisional_qty := li_prov_asgn_qty;
10118 end if;
10119
10120 if (NVL(li_conf_asgn_qty,0) = 0) THEN
10121 TmpAvlFIDayTab(i).confirmed_qty := NULL;
10122 else
10123 TmpAvlFIDayTab(i).confirmed_qty := li_conf_asgn_qty;
10124 end if;
10125
10126 if (NVL(li_conf_asgn_qty,0) > NVL(TmpResFIDayTab(i).item_quantity,0)) then
10127 TmpAvlFIDayTab(i).overcommitment_quantity := NVL(li_conf_asgn_qty,0) -
10128 NVL(TmpResFIDayTab(i).item_quantity,0);
10129 TmpAvlFIDayTab(i).availability_quantity := 0;
10130 TmpAvlFIDayTab(i).overcommitment_flag := 'Y';
10131 TmpAvlFIDayTab(i).availability_flag := 'N';
10132 elsif (NVL(li_conf_asgn_qty,0) < NVL(TmpResFIDayTab(i).item_quantity,0)) then
10133 TmpAvlFIDayTab(i).availability_quantity := NVL(TmpResFIDayTab(i).item_quantity,0) -
10134 NVL(li_conf_asgn_qty,0);
10135 TmpAvlFIDayTab(i).overcommitment_quantity := 0;
10136 TmpAvlFIDayTab(i).overcommitment_flag := 'N';
10137 TmpAvlFIDayTab(i).availability_flag := 'Y';
10138 else
10139 TmpAvlFIDayTab(i).availability_quantity := 0;
10140 TmpAvlFIDayTab(i).overcommitment_quantity := 0;
10141 TmpAvlFIDayTab(i).overcommitment_flag := 'N';
10142 TmpAvlFIDayTab(i).availability_flag := 'N';
10143 end if;
10144
10145 if (NVL(TmpAvlFIDayTab(i).overcommitment_quantity,0) = 0) then
10146 TmpAvlFIDayTab(i).overcommitment_qty := null;
10147 else
10148 TmpAvlFIDayTab(i).overcommitment_qty := TmpAvlFIDayTab(i).overcommitment_quantity;
10149 end if;
10150
10151 if (NVL(li_prov_asgn_qty,0) >
10152 nvl(TmpAvlFIDayTab(i).capacity_quantity,0)) THEN
10153 TmpAvlFIDayTab(i).OVERPROVISIONAL_QTY :=
10154 NVL(li_prov_asgn_qty,0) -
10155 NVL(TmpAvlFIDayTab(i).capacity_quantity,0);
10156 else
10157 TmpAvlFIDayTab(i).OVERPROVISIONAL_QTY := NULL;
10158 end if;
10159
10160 if (NVL(li_prov_asgn_qty,0) + NVL(li_conf_asgn_qty,0) >
10161 nvl(TmpAvlFIDayTab(i).capacity_quantity,0)) THEN
10162 TmpAvlFIDayTab(i).OVER_PROV_CONF_QTY :=
10163 NVL(li_prov_asgn_qty,0) + NVL(li_conf_asgn_qty,0) -
10164 NVL(TmpAvlFIDayTab(i).capacity_quantity,0);
10165 else
10166 TmpAvlFIDayTab(i).OVER_PROV_CONF_QTY := NULL;
10167 end if;
10168
10169 end if;
10170 END LOOP;
10171 end if;
10172
10173 -- Get existing forecast items detail FOR this resource
10174 -- which fall BETWEEN startdate AND END DATE
10175
10176 TmpFIHdrInsTab.delete; -- Initialize
10177 TmpFIHdrUpdTab.delete; -- Initialize
10178 TmpFIDtlInsTab.delete; -- Initialize
10179 TmpFIDtlUpdTab.delete; -- Initialize
10180 TmpDBFIHdrTab.delete; -- Initialize
10181 TmpDBFIDtlTab.delete; -- Initialize
10182
10183
10184 IF p_process_mode <> 'ERROR' THEN
10185
10186 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10187
10188 Print_message( 'Calling Fetch_FI_Hdr_Res');
10189
10190 Fetch_FI_Hdr_Res (p_resource_id,
10191 p_start_date, p_end_date,
10192 TmpDBFIHdrTab,
10193 lv_return_status, x_msg_count, x_msg_data);
10194 END IF;
10195
10196 ELSE
10197 print_message('JM:1000');
10198 TmpDBFIHdrTab := p_ErrHdrTab;
10199
10200 END IF;
10201
10202 END IF;
10203
10204 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10205
10206 Print_message( 'Calling Fetch_FI_Dtl_Res');
10207
10208 /** Bug fix : 1913377 call changed to positional notation
10209 Fetch_FI_Dtl_Res (p_resource_id,
10210 p_start_date,
10211 p_end_date, TmpDbFIDtlTab,
10212 lv_return_status, x_msg_count, x_msg_data);
10213 ***/
10214
10215 Fetch_FI_Dtl_Res(
10216 p_resource_id => p_resource_id
10217 ,p_start_date => p_start_date
10218 ,p_end_date => p_end_date
10219 ,x_dbFIDtlTab => TmpDbFIDtlTab
10220 ,x_return_status => lv_return_status
10221 ,x_msg_count => x_msg_count
10222 ,x_msg_data => x_msg_data );
10223
10224
10225 END IF;
10226
10227 -- Header Processing
10228 -- Inputs : TmpFIDayTab, TmpDBFIHdrTab, p_resource_id
10229 -- Get new values FOR expenditure_ou,
10230 -- expenditure_organization, expenditure_type,
10231 -- expenditure_type_class, borrowed flag
10232 -- IF item_date exists
10233 -- check above values with existing values
10234 -- IF differs
10235 -- update header FOR delete_flag
10236 -- Create new forecast_item_header
10237 -- Mark action_flag = 'DN';
10238 -- Save new forecast_item_id IN TmpFIDayTab
10239 -- ELSE
10240 -- Check FOR qty change
10241 -- IF differs
10242 -- update item_quantity IN header with
10243 -- new value
10244 -- Mark action_flag = 'RN';
10245 -- ELSE
10246 -- Mark action_flag = 'C';
10247 -- Meaning values FOR attributes associated
10248 -- with detail table have to be checked for
10249 -- change
10250 -- ELSE (item_date does not exist)
10251 -- Create new forecast_item
10252 -- Mark action_flag = 'N';
10253
10254 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10255
10256 Print_message( 'Calling Build_FI_Hdr_Res');
10257
10258 Build_FI_Hdr_Res(p_resource_id, p_start_date, p_end_date,
10259 TmpAvlFIDayTab,TmpDBFIHdrTab,
10260 TmpFIHdrInsTab, TmpFIHdrUpdTab,
10261 lv_return_status, x_msg_count, x_msg_data);
10262
10263 END IF;
10264
10265 -- Detail Processing
10266 -- Inputs : TmpFIDayTab, TmpDBFIDtlTab, p_resource_id
10267 -- TmpFIDayTab.Action_flag is updated by header process.
10268 -- IF action_flag = 'C'
10269 -- check FOR change IN resource_type_code,
10270 -- person_billable_flag, include IN forecast option,
10271 -- provisional_flag, work_type_id
10272 -- If there is change mark action_flag = 'RN';
10273 -- IF action_flag = 'DN'
10274 --Header record has changed
10275 -- Reverse detail record
10276 -- Create new detail record with forecast_item_id
10277 -- (generated by header record, saved IN TmpFIDayTab)
10278 -- AND line_NUMBER = 1;
10279 -- IF action_flag = 'RN'
10280 -- Change IN detail record values
10281 -- Reverse detail record
10282 -- create new detail record with same forecast_item_id
10283 -- AND line_NUMBER = max(line_NUMBER) + 1;
10284 -- IF action_flag = 'N'
10285 -- Create new detail record with forecast_item_id
10286 -- (generated by header record, saved IN TmpFIDayTab)
10287 -- AND line_NUMBER = 1;
10288 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10289
10290 Print_message( 'Calling Build_FI_Dtl_Res');
10291
10292 Build_FI_Dtl_Res(p_resource_id, TmpDBFIDtlTab, TmpAvlFIDayTab,
10293 TmpFIDtlInsTab, TmpFIDtlUpdTab,
10294 lv_return_status, x_msg_count, x_msg_data);
10295
10296 END IF;
10297
10298 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10299
10300 IF TmpFIHdrInsTab.COUNT > 0 THEN
10301
10302 Print_message( 'Calling PA_FORECAST_HDR_PKG.Insert_Rows');
10303
10304 PA_FORECAST_HDR_PKG.Insert_Rows(TmpFIHdrInsTab,
10305 lv_return_status,
10306 x_msg_count,
10307 x_msg_data);
10308 END IF;
10309
10310 END IF;
10311
10312 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10313
10314 IF TmpFIHdrUpdTab.COUNT > 0 THEN
10315
10316 Print_message( 'Calling PA_FORECAST_HDR_PKG.Update_Rows');
10317
10318 PA_FORECAST_HDR_PKG.Update_Rows(TmpFIHdrUpdTab, lv_return_status,
10319 x_msg_count, x_msg_data);
10320 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
10321
10322 END IF;
10323
10324 END IF;
10325
10326 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
10327 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10328
10329 IF TmpFIDtlInsTab.COUNT > 0 THEN
10330
10331 Print_message( 'Calling PA_FORECAST_DTLS_PKG.Insert_Rows');
10332
10333 PA_FORECAST_DTLS_PKG.Insert_Rows(TmpFIDtlInsTab, lv_return_status,
10334 x_msg_count,
10335 x_msg_data);
10336 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
10337
10338 END IF;
10339
10340 END IF;
10341
10342 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
10343 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10344
10345 IF TmpFIDtlUpdTab.COUNT > 0 THEN
10346
10347 Print_message( 'Calling PA_FORECAST_DTLS_PKG.Update_Rows');
10348
10349 PA_FORECAST_DTLS_PKG.Update_Rows(TmpFIDtlUpdTab,
10350 lv_return_status,
10351 x_msg_count,
10352 x_msg_data);
10353 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
10354 END IF;
10355
10356 END IF;
10357
10358 ----------------------------------------------------------------------------
10359 ----------------BEGIN AVAILABILITY SUMMARY TABLE POPULATION-----------------
10360
10361 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
10362
10363 Print_message( 'Calling PA_RESOURCE_PVT.update_res_availability');
10364
10365 PA_RESOURCE_PVT.update_res_availability (
10366 p_resource_id => p_resource_id,
10367 p_start_date => p_start_date,
10368 p_end_date => p_end_date,
10369 x_return_status => lv_return_status,
10370 x_msg_data => x_msg_data,
10371 x_msg_count => x_msg_count);
10372
10373 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
10374
10375 END IF;
10376
10377 ------------------END AVAILABILITY SUMMARY TABLE POPULATION-----------------
10378 ----------------------------------------------------------------------------
10379
10380 /** once the process is completed release the lock **/
10381 li_lock_status := PA_FORECAST_ITEMS_UTILS.Release_User_lock(p_resource_id, 'RES');
10382 Print_message('Resource lock released ');
10383
10384 END IF;
10385
10386 Print_message('Leaving Regenerate_Res_Unassigned_FI');
10387
10388 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
10389 PA_DEBUG.Reset_Err_Stack;
10390
10391 PRINT_MESSAGE(x_return_status || ' ' || lv_return_status);
10392 x_return_status := lv_return_status;
10393
10394 EXCEPTION
10395 WHEN l_no_fis_to_create THEN
10396 -- There are no FIs to create.
10397 PA_DEBUG.Reset_Err_Stack;
10398 x_return_status := lv_return_status;
10399 -- release the lock
10400 li_lock_status := PA_FORECAST_ITEMS_UTILS.Release_User_lock(p_resource_id, 'RES');
10401 Print_message('Resource lock released ');
10402
10403 WHEN NO_DATA_FOUND THEN
10404
10405 IF lv_err_msg = 'No_Schedule_Records - Res' THEN
10406
10407 Print_message(
10408 'NO schedule records');
10409
10410 x_msg_count := 1;
10411 x_msg_data := 'No Schedule Records for Res ';
10412 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10413
10414 -- 4537865
10415 p_start_date := NULL ;
10416 p_end_date := NULL ;
10417
10418 FND_MSG_PUB.add_exc_msg
10419 (p_pkg_name =>
10420 'PA_FORECASTITEM_PVT.Regenerate_Res_Unassigned_FI',
10421 p_procedure_name => PA_DEBUG.G_Err_Stack);
10422
10423 If x_msg_count = 1 THEN
10424 pa_interface_utils_pub.get_messages
10425 (p_encoded => FND_API.G_TRUE,
10426 p_msg_index => 1,
10427 p_msg_count => x_msg_count,
10428 p_msg_data => x_msg_data,
10429 p_data => l_data , -- 4537865
10430 p_msg_index_out => l_msg_index_out );
10431 x_msg_data := l_data ; -- 4537865
10432 End If;
10433 Print_message(x_msg_data);
10434
10435 RAISE;
10436
10437 ELSE
10438
10439 x_msg_count := 1;
10440 x_msg_data := sqlerrm;
10441 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10442
10443 -- 4537865
10444 p_start_date := NULL ;
10445 p_end_date := NULL ;
10446
10447 FND_MSG_PUB.add_exc_msg
10448 (p_pkg_name =>
10449 'PA_FORECASTITEM_PVT.Regenerate_Res_Unassigned_FI',
10450 p_procedure_name => PA_DEBUG.G_Err_Stack);
10451
10452 If x_msg_count = 1 THEN
10453 pa_interface_utils_pub.get_messages
10454 (p_encoded => FND_API.G_TRUE,
10455 p_msg_index => 1,
10456 p_msg_count => x_msg_count,
10457 p_msg_data => x_msg_data,
10458 p_data => l_data , -- 4537865
10459 p_msg_index_out => l_msg_index_out );
10460 x_msg_data := l_data ; -- 4537865
10461 End If;
10462 Print_message(x_msg_data);
10463
10464 RAISE;
10465
10466 END IF;
10467 /** lock should be released if the process fails **/
10468 li_lock_status := PA_FORECAST_ITEMS_UTILS.Release_User_lock(p_resource_id, 'RES');
10469 Print_message('Resouce lock released ');
10470
10471 WHEN l_cannot_acquire_lock THEN
10472
10473 Print_message(
10474 'Unable to set lock for ' || to_char(p_resource_id));
10475
10476 x_msg_count := 1;
10477 x_msg_data := 'Resource ID Lock Failure';
10478 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10479
10480 -- 4537865
10481 p_start_date := NULL ;
10482 p_end_date := NULL ;
10483
10484 FND_MSG_PUB.add_exc_msg
10485 (p_pkg_name =>
10486 'PA_FORECASTITEM_PVT.Regenerate_Res_Unassigned_FI',
10487 p_procedure_name => PA_DEBUG.G_Err_Stack);
10488
10489 If x_msg_count = 1 THEN
10490 pa_interface_utils_pub.get_messages
10491 (p_encoded => FND_API.G_TRUE,
10492 p_msg_index => 1,
10493 p_msg_count => x_msg_count,
10494 p_msg_data => x_msg_data,
10495 p_data => l_data, -- 4537865
10496 p_msg_index_out => l_msg_index_out );
10497 x_msg_data := l_data ; -- 4537865
10498 End If;
10499 Print_message(x_msg_data);
10500
10501 RAISE;
10502
10503
10504 WHEN OTHERS THEN
10505
10506 x_msg_count := 1;
10507 x_msg_data := sqlerrm;
10508 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10509 /** release the lock if the process fails **/
10510 li_lock_status := PA_FORECAST_ITEMS_UTILS.Release_User_lock(p_resource_id, 'RES');
10511 Print_message('Resource lock released ');
10512
10513 -- 4537865
10514 p_start_date := NULL ;
10515 p_end_date := NULL ;
10516
10517 If x_msg_count = 1 THEN
10518 pa_interface_utils_pub.get_messages
10519 (p_encoded => FND_API.G_TRUE,
10520 p_msg_index => 1,
10521 p_msg_count => x_msg_count,
10522 p_msg_data => x_msg_data,
10523 p_data => l_data, -- 4537865
10524 p_msg_index_out => l_msg_index_out );
10525 x_msg_data := l_data ; -- 4537865
10526 End If;
10527 FND_MSG_PUB.add_exc_msg
10528 (p_pkg_name =>
10529 'PA_FORECASTITEM_PVT.Regenerate_Res_Unassigned_FI',
10530 p_procedure_name => PA_DEBUG.G_Err_Stack);
10531
10532 RAISE;
10533
10534
10535 END Regenerate_Res_Unassigned_FI;
10536
10537 /* ---------------------------------------------------------------------
10538 | Procedure : Fetch_FI_Hdr_Res
10539 | Purpose : To get existing forecast items (Resource Unassigned time)
10540 | FOR the given resource ID which fall BETWEEN
10541 | startdate AND END DATE
10542 | Parameters : p_resource_id - Input Resource ID
10543 | p_start_date - Current Start DATE FOR forecast item
10544 | p_end_date - Current END DATE FOR forecast item
10545 | x_dbFIHdrTab - Holds the data retrieved FROM the database
10546 | x_return_status -
10547 | x_msg_count -
10548 | x_msg_data -
10549 +----------------------------------------------------------------------*/
10550
10551 PROCEDURE Fetch_FI_Hdr_Res(
10552 p_resource_id IN NUMBER,
10553 p_start_date IN DATE,
10554 p_end_date IN DATE,
10555 x_dbFIHdrTab OUT NOCOPY PA_FORECAST_GLOB.FIHdrTabTyp, /* 2674619 - Nocopy change */
10556 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
10557 x_msg_count OUT NOCOPY NUMBER, -- 4537865
10558 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
10559
10560
10561 l_msg_index_out NUMBER;
10562 l_data varchar2(2000); -- 4537865
10563 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10564 forecast_item_type_tab PA_FORECAST_GLOB.VCTabTyp;
10565 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10566 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10567 expenditure_orgn_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10568 project_organization_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10569 project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10570 project_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
10571 person_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10572 resource_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10573 borrowed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10574 assignment_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10575 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
10576 item_uom_tab PA_FORECAST_GLOB.VCTabTyp;
10577 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
10578 pvdr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
10579 pvdr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
10580 pvdr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
10581 rcvr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
10582 rcvr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
10583 rcvr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
10584 global_exp_period_end_date_tab PA_FORECAST_GLOB.DateTabTyp;
10585 expenditure_type_tab PA_FORECAST_GLOB.VCTabTyp;
10586 expenditure_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
10587 cost_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
10588 rev_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
10589 tp_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
10590 burden_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
10591 other_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
10592 delete_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10593 error_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10594 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10595 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
10596 TP_AMOUNT_TYPE_tab PA_FORECAST_GLOB.VCTabTyp;
10597 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
10598 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
10599 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
10600 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
10601 asgmt_sys_status_code_tab PA_FORECAST_GLOB.VCTabTyp;
10602 capacity_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
10603 overcommitment_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
10604 availability_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
10605 overcommitment_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10606 availability_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10607
10608 TmpHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
10609
10610 lv_return_status VARCHAR2(30);
10611
10612 BEGIN
10613
10614 lv_return_status := FND_API.G_RET_STS_SUCCESS;
10615
10616 Print_message('Entering Fetch_FI_Hdr_Res');
10617
10618 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Fetch_FI_Hdr_Res');
10619
10620 TmpHdrTab.delete;
10621 forecast_item_id_tab.delete;
10622 forecast_item_type_tab.delete;
10623 project_org_id_tab.delete;
10624 expenditure_org_id_tab.delete;
10625 expenditure_orgn_id_tab.delete;
10626 project_organization_id_tab.delete;
10627 project_id_tab.delete;
10628 project_type_class_tab.delete;
10629 person_id_tab.delete;
10630 resource_id_tab.delete;
10631 borrowed_flag_tab.delete;
10632 assignment_id_tab.delete;
10633 item_date_tab.delete;
10634 item_uom_tab.delete;
10635 item_quantity_tab.delete;
10636 pvdr_period_set_name_tab.delete;
10637 pvdr_pa_period_name_tab.delete;
10638 pvdr_gl_period_name_tab.delete;
10639 rcvr_period_set_name_tab.delete;
10640 rcvr_pa_period_name_tab.delete;
10641 rcvr_gl_period_name_tab.delete;
10642 global_exp_period_end_date_tab.delete;
10643 expenditure_type_tab.delete;
10644 expenditure_type_class_tab.delete;
10645 cost_rejection_code_tab.delete;
10646 rev_rejection_code_tab.delete;
10647 tp_rejection_code_tab.delete;
10648 burden_rejection_code_tab.delete;
10649 other_rejection_code_tab.delete;
10650 delete_flag_tab.delete;
10651 error_flag_tab.delete;
10652 provisional_flag_tab.delete;
10653 JOB_ID_tab.delete;
10654 TP_AMOUNT_TYPE_tab.delete;
10655 OVERPROVISIONAL_QTY_tab.delete;
10656 OVER_PROV_CONF_QTY_tab.delete;
10657 CONFIRMED_QTY_tab.delete;
10658 PROVISIONAL_QTY_tab.delete;
10659 asgmt_sys_status_code_tab.delete;
10660 capacity_quantity_tab.delete;
10661 overcommitment_quantity_tab.delete;
10662 availability_quantity_tab.delete;
10663 overcommitment_flag_tab.delete;
10664 availability_flag_tab.delete;
10665
10666 SELECT forecast_item_id, forecast_item_type,
10667 project_org_id , expenditure_org_id,
10668 project_organization_id, expenditure_organization_id ,
10669 project_id, project_type_class, person_id ,
10670 resource_id, borrowed_flag, assignment_id,
10671 item_date, item_uom, item_quantity,
10672 pvdr_period_set_name, pvdr_pa_period_name,
10673 pvdr_gl_period_name, rcvr_period_set_name,
10674 rcvr_pa_period_name, rcvr_gl_period_name,
10675 global_exp_period_end_date, expenditure_type,
10676 expenditure_type_class, cost_rejection_code,
10677 rev_rejection_code, tp_rejection_code,
10678 burden_rejection_code, other_rejection_code,
10679 delete_flag, error_flag, provisional_flag,
10680 JOB_ID,
10681 TP_AMOUNT_TYPE,
10682 OVERPROVISIONAL_QTY,
10683 OVER_PROV_CONF_QTY,
10684 CONFIRMED_QTY,
10685 PROVISIONAL_QTY,
10686 asgmt_sys_status_code, capacity_quantity,
10687 overcommitment_quantity, availability_quantity,
10688 overcommitment_flag, availability_flag
10689 BULK COLLECT INTO forecast_item_id_tab, forecast_item_type_tab,
10690 project_org_id_tab, expenditure_org_id_tab,
10691 project_organization_id_tab, expenditure_orgn_id_tab,
10692 project_id_tab, project_type_class_tab, person_id_tab,
10693 resource_id_tab, borrowed_flag_tab, assignment_id_tab,
10694 item_date_tab, item_uom_tab, item_quantity_tab,
10695 pvdr_period_set_name_tab, pvdr_pa_period_name_tab,
10696 pvdr_gl_period_name_tab, rcvr_period_set_name_tab,
10697 rcvr_pa_period_name_tab, rcvr_gl_period_name_tab,
10698 global_exp_period_end_date_tab, expenditure_type_tab,
10699 expenditure_type_class_tab, cost_rejection_code_tab,
10700 rev_rejection_code_tab, tp_rejection_code_tab,
10701 burden_rejection_code_tab, other_rejection_code_tab,
10702 delete_flag_tab, error_flag_tab, provisional_flag_tab,
10703 JOB_ID_tab,
10704 TP_AMOUNT_TYPE_tab,
10705 OVERPROVISIONAL_QTY_tab,
10706 OVER_PROV_CONF_QTY_tab,
10707 CONFIRMED_QTY_tab,
10708 PROVISIONAL_QTY_tab,
10709 asgmt_sys_status_code_tab, capacity_quantity_tab,
10710 overcommitment_quantity_tab, availability_quantity_tab,
10711 overcommitment_flag_tab, availability_flag_tab
10712 FROM pa_forecast_items
10713 WHERE resource_id = p_resource_id
10714 AND forecast_item_type = 'U'
10715 AND delete_flag = 'N'
10716 /* Commented for bug3998166
10717 AND trunc(item_date) BETWEEN trunc(p_start_date) AND
10718 trunc(p_end_date) */
10719 AND item_date BETWEEN trunc(p_start_date) AND
10720 (trunc(p_end_date)+ 0.99999)
10721 order by item_date, forecast_item_id ;
10722
10723
10724 IF forecast_item_id_tab.COUNT = 0 THEN
10725
10726 Print_message('Leaving Fetch_FI_Hdr_Res');
10727
10728 x_return_status := lv_return_status;
10729
10730 RETURN;
10731
10732 END IF;
10733
10734 -- Move to one table FROM multiple tables
10735
10736 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
10737
10738 TmpHdrTab(j).forecast_item_id := forecast_item_id_tab(j);
10739 TmpHdrTab(j).forecast_item_type := forecast_item_type_tab(j);
10740 TmpHdrTab(j).project_org_id := project_org_id_tab(j);
10741 TmpHdrTab(j).expenditure_org_id := expenditure_org_id_tab(j);
10742 TmpHdrTab(j).project_organization_id :=
10743 project_organization_id_tab(j);
10744 TmpHdrTab(j).expenditure_organization_id :=
10745 expenditure_orgn_id_tab(j);
10746 TmpHdrTab(j).project_id := project_id_tab(j);
10747 TmpHdrTab(j).project_type_class := project_type_class_tab(j);
10748 TmpHdrTab(j).person_id := person_id_tab(j);
10749 TmpHdrTab(j).resource_id := resource_id_tab(j);
10750 TmpHdrTab(j).borrowed_flag := borrowed_flag_tab(j);
10751 TmpHdrTab(j).assignment_id := assignment_id_tab(j);
10752 TmpHdrTab(j).item_date := item_date_tab(j);
10753 TmpHdrTab(j).item_uom := item_uom_tab(j);
10754 TmpHdrTab(j).item_quantity := item_quantity_tab(j);
10755 TmpHdrTab(j).pvdr_period_set_name :=
10756 pvdr_period_set_name_tab(j);
10757 TmpHdrTab(j).pvdr_pa_period_name := pvdr_pa_period_name_tab(j);
10758 TmpHdrTab(j).pvdr_gl_period_name := pvdr_gl_period_name_tab(j);
10759 TmpHdrTab(j).rcvr_period_set_name :=
10760 rcvr_period_set_name_tab(j);
10761 TmpHdrTab(j).rcvr_pa_period_name := rcvr_pa_period_name_tab(j);
10762 TmpHdrTab(j).rcvr_gl_period_name := rcvr_gl_period_name_tab(j);
10763 TmpHdrTab(j).global_exp_period_end_date :=
10764 global_exp_period_end_date_tab(j);
10765 TmpHdrTab(j).expenditure_type := expenditure_type_tab(j);
10766 TmpHdrTab(j).expenditure_type_class :=
10767 expenditure_type_class_tab(j);
10768 TmpHdrTab(j).cost_rejection_code := cost_rejection_code_tab(j);
10769 TmpHdrTab(j).rev_rejection_code := rev_rejection_code_tab(j);
10770 TmpHdrTab(j).tp_rejection_code := tp_rejection_code_tab(j);
10771 TmpHdrTab(j).burden_rejection_code :=
10772 burden_rejection_code_tab(j);
10773 TmpHdrTab(j).other_rejection_code :=
10774 other_rejection_code_tab(j);
10775 TmpHdrTab(j).delete_flag := delete_flag_tab(j);
10776 TmpHdrTab(j).error_flag := error_flag_tab(j);
10777 TmpHdrTab(j).provisional_flag := provisional_flag_tab(j);
10778 TmpHdrTab(j).JOB_ID := JOB_ID_tab(j);
10779 TmpHdrTab(j).TP_AMOUNT_TYPE := TP_AMOUNT_TYPE_tab(j);
10780 TmpHdrTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
10781 TmpHdrTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
10782 TmpHdrTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
10783 TmpHdrTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
10784 TmpHdrTab(j).asgmt_sys_status_code := asgmt_sys_status_code_tab(j);
10785 TmpHdrTab(j).capacity_quantity := capacity_quantity_tab(j);
10786 TmpHdrTab(j).overcommitment_quantity := overcommitment_quantity_tab(j);
10787 TmpHdrTab(j).availability_quantity := availability_quantity_tab(j);
10788 TmpHdrTab(j).overcommitment_flag := overcommitment_flag_tab(j);
10789 TmpHdrTab(j).availability_flag := availability_flag_tab(j);
10790
10791 END LOOP;
10792
10793 x_dbFIHdrTab := TmpHdrTab;
10794
10795
10796 Print_message('Leaving Fetch_FI_Hdr_Res');
10797
10798 PA_DEBUG.Reset_Err_Stack;
10799
10800 x_return_status := lv_return_status;
10801
10802
10803 EXCEPTION
10804
10805 WHEN OTHERS THEN
10806 print_message('Failed in Fetch_FI_Hdr_Res api');
10807 print_message('SQLCODE'||sqlcode||sqlerrm);
10808
10809 x_msg_count := 1;
10810 x_msg_data := sqlerrm;
10811 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10812
10813 FND_MSG_PUB.add_exc_msg
10814 (p_pkg_name =>
10815 'PA_FORECASTITEM_PVT.Fetch_FI_Hdr_Res',
10816 p_procedure_name => PA_DEBUG.G_Err_Stack);
10817
10818 If x_msg_count = 1 THEN
10819 pa_interface_utils_pub.get_messages
10820 (p_encoded => FND_API.G_TRUE,
10821 p_msg_index => 1,
10822 p_msg_count => x_msg_count,
10823 p_msg_data => x_msg_data,
10824 p_data => l_data , -- 4537865
10825 p_msg_index_out => l_msg_index_out );
10826 x_msg_data := l_data ; -- 4537865
10827 End If;
10828 Print_message(x_msg_data);
10829
10830 RAISE;
10831
10832
10833 END Fetch_FI_Hdr_Res;
10834
10835
10836 /* ---------------------------------------------------------------------
10837 | Procedure : Fetch_FI_Dtl_Res
10838 | Purpose : To get existing forecast item details
10839 | (Resource Unassigned time)FOR the given resource ID
10840 | which fall BETWEEN startdate AND END DATE
10841 | Parameters : p_resource_id - Input Resource ID
10842 | p_start_date - Current Start DATE FOR forecast item
10843 | p_end_date - Current END DATE FOR forecast item
10844 | x_dbFIHdrTab - Holds the data retrieved FROM the database
10845 | x_return_status -
10846 | x_msg_count -
10847 | x_msg_data -
10848 +----------------------------------------------------------------------*/
10849 PROCEDURE Fetch_FI_Dtl_Res(
10850 p_resource_id IN NUMBER,
10851 p_start_date IN DATE,
10852 p_end_date IN DATE,
10853 x_dbFIDtlTab OUT NOCOPY PA_FORECAST_GLOB.FIDtlTabTyp, /* 2674619 - Nocopy change */
10854 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
10855 x_msg_count OUT NOCOPY NUMBER, -- 4537865
10856 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
10857
10858
10859
10860 l_msg_index_out NUMBER;
10861 l_data varchar2(2000); -- 4537865
10862
10863 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10864 amount_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10865 line_num_tab PA_FORECAST_GLOB.NumberTabTyp;
10866 resource_type_code_tab PA_FORECAST_GLOB.VCTabTyp;
10867 person_billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10868 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
10869 item_UOM_tab PA_FORECAST_GLOB.VCTabTyp;
10870 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
10871 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10872 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10873 PJI_SUMMARIZED_FLAG_tab PA_FORECAST_GLOB.VC1TabTyp;
10874 CAPACITY_QUANTITY_tab PA_FORECAST_GLOB.NumberTabTyp;
10875 OVERCOMMITMENT_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
10876 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
10877 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
10878 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
10879 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
10880 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
10881 PROJECT_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
10882 RESOURCE_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
10883 EXP_ORGANIZATION_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
10884 pvdr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
10885 pvdr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
10886 rcvr_acct_curr_code_tab PA_FORECAST_GLOB.VC15TabTyp;
10887 rcvr_acct_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
10888 proj_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
10889 proj_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
10890 denom_currency_code_tab PA_FORECAST_GLOB.VC15TabTyp;
10891 denom_amount_tab PA_FORECAST_GLOB.NumberTabTyp;
10892 tp_amount_type_tab PA_FORECAST_GLOB.VCTabTyp;
10893 billable_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10894 forecast_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
10895 util_summarized_code_tab PA_FORECAST_GLOB.VCTabTyp;
10896 work_type_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10897 resource_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10898 org_util_category_id_tab PA_FORECAST_GLOB.NumberTabTyp;
10899 resource_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
10900 org_util_weighted_tab PA_FORECAST_GLOB.NumberTabTyp;
10901 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10902 reversed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10903 net_zero_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10904 reduce_capacity_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
10905 line_num_reversed_tab PA_FORECAST_GLOB.NumberTabTyp;
10906
10907 TmpDtlTab PA_FORECAST_GLOB.FIDtlTabTyp;
10908
10909 lv_return_status VARCHAR2(30);
10910 g_process_mode VARCHAR2(30);
10911 BEGIN
10912
10913 lv_return_status := FND_API.G_RET_STS_SUCCESS;
10914
10915 Print_message('Entering Fetch_FI_Dtl_Res');
10916
10917 PA_DEBUG.Init_err_stack(
10918 'PA_FORECASTITEM_PVT.Fetch_FI_Dtl_Res');
10919
10920 TmpDtlTab.delete;
10921 forecast_item_id_tab.delete;
10922 amount_type_id_tab.delete;
10923 line_num_tab.delete;
10924 resource_type_code_tab.delete;
10925 person_billable_flag_tab.delete;
10926 item_date_tab.delete;
10927 item_UOM_tab.delete;
10928 item_quantity_tab.delete;
10929 expenditure_org_id_tab.delete;
10930 project_org_id_tab.delete;
10931 PJI_SUMMARIZED_FLAG_tab.delete;
10932 CAPACITY_QUANTITY_tab.delete;
10933 OVERCOMMITMENT_QTY_tab.delete;
10934 OVERPROVISIONAL_QTY_tab.delete;
10935 OVER_PROV_CONF_QTY_tab.delete;
10936 CONFIRMED_QTY_tab.delete;
10937 PROVISIONAL_QTY_tab.delete;
10938 JOB_ID_tab.delete;
10939 PROJECT_ID_tab.delete;
10940 RESOURCE_ID_tab.delete;
10941 EXP_ORGANIZATION_ID_tab.delete;
10942 pvdr_acct_curr_code_tab.delete;
10943 pvdr_acct_amount_tab.delete;
10944 rcvr_acct_curr_code_tab.delete;
10945 rcvr_acct_amount_tab.delete;
10946 proj_currency_code_tab.delete;
10947 proj_amount_tab.delete;
10948 denom_currency_code_tab.delete;
10949 denom_amount_tab.delete;
10950 tp_amount_type_tab.delete;
10951 billable_flag_tab.delete;
10952 forecast_summarized_code_tab.delete;
10953 util_summarized_code_tab.delete;
10954 work_type_id_tab.delete;
10955 resource_util_category_id_tab.delete;
10956 org_util_category_id_tab.delete;
10957 resource_util_weighted_tab.delete;
10958 org_util_weighted_tab.delete;
10959 provisional_flag_tab.delete;
10960 reversed_flag_tab.delete;
10961 net_zero_flag_tab.delete;
10962 reduce_capacity_flag_tab.delete;
10963 line_num_reversed_tab.delete;
10964
10965 SELECT dtl.forecast_item_id, dtl.amount_type_id,
10966 dtl.line_num, dtl.resource_type_code,
10967 dtl.person_billable_flag, dtl.item_UOM,
10968 dtl.item_date, dtl.item_quantity,
10969 dtl.PJI_SUMMARIZED_FLAG,
10970 dtl.CAPACITY_QUANTITY,
10971 dtl.OVERCOMMITMENT_QTY,
10972 dtl.OVERPROVISIONAL_QTY,
10973 dtl.OVER_PROV_CONF_QTY,
10974 dtl.CONFIRMED_QTY,
10975 dtl.PROVISIONAL_QTY,
10976 dtl.JOB_ID,
10977 dtl.PROJECT_ID,
10978 dtl.RESOURCE_ID,
10979 dtl.EXPENDITURE_ORGANIZATION_ID,
10980 dtl.expenditure_org_id, dtl.project_org_id,
10981 dtl.pvdr_acct_curr_code, dtl.pvdr_acct_amount,
10982 dtl.rcvr_acct_curr_code, dtl.rcvr_acct_amount,
10983 dtl.proj_currency_code, dtl.proj_amount,
10984 dtl.denom_currency_code, dtl.denom_amount,
10985 dtl.tp_amount_type, dtl.billable_flag,
10986 dtl.forecast_summarized_code, dtl.util_summarized_code,
10987 dtl.work_type_id, dtl.resource_util_category_id,
10988 dtl.org_util_category_id, dtl.resource_util_weighted,
10989 dtl.org_util_weighted, dtl.provisional_flag,
10990 dtl.reversed_flag, dtl.net_zero_flag,
10991 dtl.reduce_capacity_flag, dtl.line_num_reversed
10992 BULK COLLECT INTO forecast_item_id_tab,amount_type_id_tab,
10993 line_num_tab, resource_type_code_tab,
10994 person_billable_flag_tab, item_UOM_tab,
10995 item_date_tab, item_quantity_tab,
10996 PJI_SUMMARIZED_FLAG_tab,
10997 CAPACITY_QUANTITY_tab,
10998 OVERCOMMITMENT_QTY_tab,
10999 OVERPROVISIONAL_QTY_tab,
11000 OVER_PROV_CONF_QTY_tab,
11001 CONFIRMED_QTY_tab,
11002 PROVISIONAL_QTY_tab,
11003 JOB_ID_tab,
11004 PROJECT_ID_tab,
11005 RESOURCE_ID_tab,
11006 EXP_ORGANIZATION_ID_tab,
11007 expenditure_org_id_tab, project_org_id_tab,
11008 pvdr_acct_curr_code_tab, pvdr_acct_amount_tab,
11009 rcvr_acct_curr_code_tab, rcvr_acct_amount_tab,
11010 proj_currency_code_tab, proj_amount_tab,
11011 denom_currency_code_tab, denom_amount_tab,
11012 tp_amount_type_tab, billable_flag_tab,
11013 forecast_summarized_code_tab, util_summarized_code_tab,
11014 work_type_id_tab, resource_util_category_id_tab,
11015 org_util_category_id_tab, resource_util_weighted_tab,
11016 org_util_weighted_tab, provisional_flag_tab,
11017 reversed_flag_tab, net_zero_flag_tab,
11018 reduce_capacity_flag_tab, line_num_reversed_tab
11019 FROM pa_forecast_item_details dtl, pa_forecast_items hdr
11020 WHERE hdr.resource_id = p_resource_id
11021 AND hdr.delete_flag = 'N'
11022 AND hdr.forecast_item_type = 'U'
11023 /***Addeded the following condition to fix the bug : 1913377
11024 * when this api called in process ERROR mode it should pick
11025 * only the header records which are marked as error it should not
11026 * pick all the records
11027 **/
11028 AND ( nvl(g_process_mode,'GENERATE') <> 'ERROR'
11029 OR
11030 (hdr.error_flag = 'Y' AND nvl(g_process_mode,'GENERATE') = 'ERROR')
11031 )
11032 /** end of bug fix ***/
11033 AND hdr.item_date BETWEEN trunc(p_start_date) AND
11034 trunc(p_end_date) -- bug 9032134
11035 AND dtl.forecast_item_id = hdr.forecast_item_id
11036 AND dtl.line_num = (
11037 SELECT max(line_num)
11038 FROM pa_forecast_item_details dtl1
11039 WHERE dtl1.forecast_item_id = hdr.forecast_item_id)
11040 order by hdr.resource_id,dtl.item_date, dtl.forecast_item_id ;
11041
11042 IF forecast_item_id_tab.COUNT = 0 THEN
11043
11044 Print_message('Leaving Fetch_FI_Dtl_Res');
11045
11046 x_return_status := lv_return_status;
11047
11048 RETURN;
11049
11050 END IF;
11051
11052 -- Move to one table FROM multiple tables
11053
11054 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
11055
11056 TmpDtlTab(j).forecast_item_id := forecast_item_id_tab(j);
11057 TmpDtlTab(j).amount_type_id :=amount_type_id_tab(j);
11058 TmpDtlTab(j).line_num := line_num_tab(j);
11059 TmpDtlTab(j).resource_type_code := resource_type_code_tab(j);
11060 TmpDtlTab(j).person_billable_flag :=
11061 person_billable_flag_tab(j);
11062 TmpDtlTab(j).item_Uom := item_UOM_tab(j);
11063 TmpDtlTab(j).item_date := item_date_tab(j);
11064 TmpDtlTab(j).item_quantity := item_quantity_tab(j);
11065 TmpDtlTab(j).expenditure_org_id := expenditure_org_id_tab(j);
11066 TmpDtlTab(j).project_org_id := project_org_id_tab(j);
11067 TmpDtlTab(j).pvdr_acct_curr_code :=
11068 pvdr_acct_curr_code_tab(j);
11069 TmpDtlTab(j).PJI_SUMMARIZED_FLAG := PJI_SUMMARIZED_FLAG_tab(j);
11070 TmpDtlTab(j).CAPACITY_QUANTITY := CAPACITY_QUANTITY_tab(j);
11071 TmpDtlTab(j).OVERCOMMITMENT_QTY := OVERCOMMITMENT_QTY_tab(j);
11072 TmpDtlTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
11073 TmpDtlTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
11074 TmpDtlTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
11075 TmpDtlTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
11076 TmpDtlTab(j).JOB_ID := JOB_ID_tab(j);
11077 TmpDtlTab(j).PROJECT_ID := PROJECT_ID_tab(j);
11078 TmpDtlTab(j).RESOURCE_ID := RESOURCE_ID_tab(j);
11079 TmpDtlTab(j).EXPENDITURE_ORGANIZATION_ID := EXP_ORGANIZATION_ID_tab(j);
11080 TmpDtlTab(j).pvdr_acct_amount := pvdr_acct_amount_tab(j);
11081 TmpDtlTab(j).rcvr_acct_curr_code :=
11082 rcvr_acct_curr_code_tab(j);
11083 TmpDtlTab(j).rcvr_acct_amount := rcvr_acct_amount_tab(j);
11084 TmpDtlTab(j).proj_currency_code := proj_currency_code_tab(j);
11085 TmpDtlTab(j).proj_amount := proj_amount_tab(j);
11086 TmpDtlTab(j).denom_currency_code := denom_currency_code_tab(j);
11087 TmpDtlTab(j).denom_amount := denom_amount_tab(j);
11088 TmpDtlTab(j).tp_amount_type := tp_amount_type_tab(j);
11089 TmpDtlTab(j).billable_flag := billable_flag_tab(j);
11090 TmpDtlTab(j).forecast_summarized_code :=
11091 forecast_summarized_code_tab(j);
11092 TmpDtlTab(j).util_summarized_code :=
11093 util_summarized_code_tab(j);
11094 TmpDtlTab(j).work_type_id := work_type_id_tab(j);
11095 TmpDtlTab(j).resource_util_category_id :=
11096 resource_util_category_id_tab(j);
11097 TmpDtlTab(j).org_util_category_id :=
11098 org_util_category_id_tab(j);
11099 TmpDtlTab(j).resource_util_weighted :=
11100 resource_util_weighted_tab(j);
11101 TmpDtlTab(j).org_util_weighted :=
11102 org_util_weighted_tab(j);
11103 TmpDtlTab(j).provisional_flag := provisional_flag_tab(j);
11104 TmpDtlTab(j).reversed_flag := reversed_flag_tab(j);
11105 TmpDtlTab(j).net_zero_flag := net_zero_flag_tab(j);
11106 TmpDtlTab(j).reduce_capacity_flag :=
11107 reduce_capacity_flag_tab(j);
11108 TmpDtlTab(j).line_num_reversed := line_num_reversed_tab(j);
11109
11110 END LOOP;
11111
11112 x_dbFIDtlTab := TmpDtlTab;
11113
11114 Print_message('Leaving Fetch_FI_Dtl_Res');
11115
11116 PA_DEBUG.Reset_Err_Stack;
11117
11118 x_return_status := lv_return_status;
11119
11120 EXCEPTION
11121
11122 WHEN OTHERS THEN
11123 print_message('Failed in Fetch_FI_Dtl_Res api');
11124 print_message('SQLCODE'||sqlcode||sqlerrm);
11125
11126 x_msg_count := 1;
11127 x_msg_data := sqlerrm;
11128 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11129
11130 FND_MSG_PUB.add_exc_msg
11131 (p_pkg_name =>
11132 'PA_FORECASTITEM_PVT.Fetch_FI_Dtl_Res',
11133 p_procedure_name => PA_DEBUG.G_Err_Stack);
11134
11135 If x_msg_count = 1 THEN
11136 pa_interface_utils_pub.get_messages
11137 (p_encoded => FND_API.G_TRUE,
11138 p_msg_index => 1,
11139 p_msg_count => x_msg_count,
11140 p_msg_data => x_msg_data,
11141 p_data => l_data, -- 4537865
11142 p_msg_index_out => l_msg_index_out );
11143 x_msg_data := l_data ; -- 4537865
11144 End If;
11145 Print_message(x_msg_data);
11146
11147 RAISE;
11148
11149
11150 END Fetch_FI_Dtl_Res;
11151
11152 /* ---------------------------------------------------------------------
11153 | Procedure : Build_FI_Hdr_Res
11154 | Purpose : To create new/modified forecast item
11155 | (Resource Unassigned Time) record
11156 | FOR the item DATEs that are built IN the p_FIDayTab
11157 | Parameters : p_resource_id - Input Resource ID
11158 | p_start_date - Current Start DATE FOR forecast item
11159 | p_end_date - Current END DATE FOR forecast item
11160 | p_FIDayTab - Holds all item_dates,item_quantity,
11161 | status_code FOR the current run.
11162 | i) action_flag component of this tab will be updated
11163 | to indicate the following
11164 | a) N : New record - item_date does not exist
11165 | b) DN : Delete AND create new -
11166 | item DATE exists but expenditure OU/
11167 | expenditure organization/expenditure type/
11168 | expenditure type class/ borrowed flag has
11169 | changed.
11170 | Existing record is reversed(deleted) AND new
11171 | record is created
11172 | c) RN : Reverse AND create new -
11173 | Quantity has changed.
11174 | IN header : quantity is updated.
11175 | IN detail :
11176 | IF summarized existing line should be reversed
11177 | AND new line created
11178 | IF not summarized existing line should be
11179 | updated to reflect new quantity
11180 | d) C : No change IN header
11181 | Check FOR any changes IN detail record for
11182 | person_billable_flag, provisional_flag,
11183 | work_type OR resource_type
11184 | ii) forecast_item_id component of this tab will be updated
11185 | to hold the forecast_item_id FOR new record. Same will
11186 | be used FOR detail record
11187 | iii) project_org_id,expenditure_org_id,work_type_id,
11188 | person_billable_flag, tp_amount_type : These values
11189 | are required FOR detail record processing. These are
11190 | also updated IN this tab.
11191 | p_DBHdrTab - Holds forecast item records which are
11192 | already existing
11193 |
11194 | x_FIHdrInsTab - Will RETURN all forecast item records that
11195 | are new
11196 | x_FIHdrUpdTab - Will RETURN all forecast item records that
11197 | are modified
11198 | x_return_status -
11199 | x_msg_count -
11200 | x_msg_data -
11201 +----------------------------------------------------------------------*/
11202 PROCEDURE Build_FI_Hdr_Res(
11203 p_resource_id IN NUMBER,
11204 p_start_date IN DATE,
11205 p_end_date IN DATE,
11206 p_FIDayTab IN OUT NOCOPY PA_FORECAST_GLOB.FIDayTabTyp, /* 2674619 - Nocopy change */
11207 p_DBHdrTab IN PA_FORECAST_GLOB.FIHDRTabTyp,
11208 x_FIHdrInsTab OUT NOCOPY PA_FORECAST_GLOB.FIHdrTabTyp, /* 2674619 - Nocopy change */
11209 x_FIHdrUpdTab OUT NOCOPY PA_FORECAST_GLOB.FIHdrTabTyp, /* 2674619 - Nocopy change */
11210 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
11211 x_msg_count OUT NOCOPY NUMBER, -- 4537865
11212 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
11213
11214 l_data varchar2(2000); -- 4537865
11215 l_msg_index_out NUMBER;
11216 lv_include_admin_proj_flag VARCHAR2(5);
11217 lv_util_cal_method VARCHAR2(30);
11218 lv_bill_unasg_proj_id NUMBER;
11219 lv_bill_unasg_exp_type_class VARCHAR2(30);
11220 lv_bill_unasg_exp_type VARCHAR2(30);
11221 lv_nbill_unasg_proj_id NUMBER;
11222 lv_nbill_unasg_exp_type_class VARCHAR2(30);
11223 lv_nbill_unasg_exp_type VARCHAR2(30);
11224 lv_default_tp_amount_type VARCHAR2(30);
11225
11226 lv_forecast_item_type VARCHAR2(1);
11227 lv_project_id NUMBER;
11228 lv_person_id NUMBER;
11229 lv_project_org_id NUMBER;
11230 lv_project_orgn_id NUMBER;
11231 lv_project_type_class VARCHAR2(30);
11232 lv_project_status_code VARCHAR2(30);
11233 lv_pvdr_period_set_name VARCHAR2(30):= NULL;
11234 lv_rcvr_period_set_name VARCHAR2(30):= NULL;
11235 lv_pvdr_pa_period_name VARCHAR2(30):= NULL;
11236
11237 ld_resou_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
11238 ld_resou_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
11239 l_resou_tab PA_FORECAST_GLOB.NumberTabTyp;
11240 lv_res_index NUMBER ;
11241 lv_resou NUMBER;
11242
11243 ld_pvdrpa_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
11244 ld_pvdrpa_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
11245 lv_pvdrpa_name_tab PA_FORECAST_GLOB.periodnametabtyp;
11246 lv_pvpa_index NUMBER ;
11247 lv_pvdrpa_name VARCHAR2(30);
11248
11249 ld_pvdrgl_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
11250 ld_pvdrgl_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
11251 lv_pvdrgl_name_tab PA_FORECAST_GLOB.periodnametabtyp;
11252 lv_pvgl_index NUMBER ;
11253 lv_pvdrgl_name VARCHAR2(30);
11254
11255 ld_rcvrpa_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
11256 ld_rcvrpa_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
11257 lv_rcvrpa_name_tab PA_FORECAST_GLOB.periodnametabtyp;
11258 lv_rcpa_index NUMBER ;
11259 lv_rcvrpa_name VARCHAR2(30);
11260
11261 ld_rcvrgl_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
11262 ld_rcvrgl_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
11263 lv_rcvrgl_name_tab PA_FORECAST_GLOB.periodnametabtyp;
11264 lv_rcgl_index NUMBER ;
11265 lv_rcvrgl_name VARCHAR2(30);
11266
11267 ld_orgn_startdate_tab PA_FORECAST_GLOB.DateTabTyp;
11268 ld_orgn_enddate_tab PA_FORECAST_GLOB.DateTabTyp;
11269 l_orgn_tab PA_FORECAST_GLOB.NumberTabTyp;
11270 l_jobid_tab PA_FORECAST_GLOB.NumberTabTyp;
11271 lv_orgn_index NUMBER ;
11272 lv_resorgn NUMBER;
11273 lv_jobid NUMBER;
11274
11275 lv_WeekDateRange_Tab PA_FORECAST_GLOB.WeekDatesRangeFcTabTyp;
11276 lv_wk_index NUMBER;
11277
11278 lv_borrowed_flag VARCHAR2(1) := 'N';
11279 lv_action_code VARCHAR2(30);
11280 lv_include_in_forecast VARCHAR2(1) := 'N';
11281 lv_person_bill_flag VARCHAR2(1);
11282 lv_forecast_item_id NUMBER;
11283 lv_work_type_id NUMBER;
11284 lv_exp_type VARCHAR2(30);
11285 lv_exp_type_class VARCHAR2(30);
11286 lv_error_flag VARCHAR2(3);
11287 lv_rejection_code VARCHAR2(30);
11288 lv_prev_index NUMBER;
11289
11290 lv_ou_error VARCHAR2(1);
11291 lv_orgn_error VARCHAR2(1);
11292
11293 TmpDayTab PA_FORECAST_GLOB.FIDayTabTyp;
11294 TmpInsTab PA_FORECAST_GLOB.FIHdrTabTyp;
11295 i_in NUMBER := 1;
11296 TmpUpdTab PA_FORECAST_GLOB.FIHdrTabTyp;
11297 u_in NUMBER := 1;
11298 d_in NUMBER := 1;
11299 TmpHdrRec PA_FORECAST_GLOB.FIHdrRecord;
11300
11301 lv_err_msg VARCHAR2(30);
11302
11303 lv_return_status VARCHAR2(30);
11304 lv_call_pos VARCHAR2(50);
11305 tmp_person_id NUMBER;
11306 tmp_status_code VARCHAR2(30);
11307 lv_start_date DATE;
11308 lv_end_date DATE;
11309
11310
11311 BEGIN
11312
11313 lv_return_status := FND_API.G_RET_STS_SUCCESS;
11314
11315 Print_message('Entering Build_FI_Hdr_Res');
11316
11317 PA_DEBUG.Init_err_stack(
11318 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Res');
11319
11320
11321
11322 TmpDayTab.Delete;
11323 TmpInsTab.Delete;
11324 TmpUpdTab.Delete;
11325
11326 ld_resou_startdate_tab.delete;
11327 ld_resou_enddate_tab.delete;
11328 l_resou_tab.delete;
11329 ld_pvdrpa_startdate_tab.delete;
11330 ld_pvdrpa_enddate_tab.delete;
11331 lv_pvdrpa_name_tab.delete;
11332 ld_pvdrgl_startdate_tab.delete;
11333 ld_pvdrgl_enddate_tab.delete;
11334 lv_pvdrgl_name_tab.delete;
11335 ld_rcvrpa_startdate_tab.delete;
11336 ld_rcvrpa_enddate_tab.delete;
11337 lv_rcvrpa_name_tab.delete;
11338 ld_rcvrgl_startdate_tab.delete;
11339 ld_rcvrgl_enddate_tab.delete;
11340 lv_rcvrgl_name_tab.delete;
11341 ld_orgn_startdate_tab.delete;
11342 ld_orgn_enddate_tab.delete;
11343 l_orgn_tab.delete;
11344 l_jobid_tab.delete;
11345 lv_WeekDateRange_Tab.delete;
11346
11347 TmpDayTab := p_FIDayTab;
11348
11349 Print_message(
11350 'Res - Get_resource_ou ');
11351
11352 PA_FORECAST_ITEMS_UTILS.get_resource_ou(
11353 p_resource_id,p_start_date, p_end_date,
11354 ld_resou_startdate_tab,ld_resou_enddate_tab,
11355 l_resou_tab);
11356
11357 lv_res_index := l_resou_tab.FIRST;
11358
11359 IF l_resou_tab.count > 0 THEN
11360
11361 lv_resou := l_resou_tab(lv_res_index);
11362
11363 ELSE
11364
11365 lv_err_msg := 'ResOU_Not_Found';
11366 RAISE NO_DATA_FOUND;
11367
11368 END IF;
11369
11370
11371 Print_message( 'Res - Get_Person_id ');
11372
11373 lv_person_id :=
11374 PA_FORECAST_ITEMS_UTILS.get_person_id(p_resource_id);
11375
11376
11377 Print_message(
11378 'Res - Get_res_org_and_job ');
11379
11380 PA_FORECAST_ITEMS_UTILS.get_res_org_and_job(
11381 lv_person_id, p_start_date, p_end_date,
11382 ld_orgn_startdate_tab, ld_orgn_enddate_tab,
11383 l_orgn_tab, l_jobid_tab);
11384
11385 lv_orgn_index := l_orgn_tab.FIRST;
11386
11387 IF l_orgn_tab.count > 0 THEN
11388
11389 lv_resorgn := l_orgn_tab(lv_orgn_index);
11390 lv_jobid := l_jobid_tab(lv_orgn_index);
11391 ELSE
11392
11393 lv_err_msg := 'Resorgn_Not_Found';
11394 RAISE NO_DATA_FOUND;
11395
11396 END IF;
11397
11398 Print_message(
11399 'Res - Get_week_dates_range_fc ');
11400
11401 PA_FORECAST_ITEMS_UTILS.get_Week_Dates_Range_Fc(
11402 p_start_date,
11403 p_end_date,
11404 lv_WeekDateRange_Tab,
11405 lv_return_status,
11406 x_msg_count,
11407 x_msg_data);
11408 lv_wk_index := lv_WeekDateRange_Tab.FIRST;
11409
11410 lv_call_pos := 'Res : bef_for';
11411
11412 if (TmpDaytab.count <> 0) then
11413 FOR i IN TmpDaytab.FIRST..TmpDaytab.LAST LOOP
11414 if TmpDaytab.exists(i) then
11415
11416 lv_rejection_code := NULL;
11417
11418 lv_call_pos := 'Res : chk per bill';
11419
11420 /* Bug1967832 Remvoed the original call to check_person_billable function and added the conditions below.*/
11421
11422 IF TRUNC(TmpDayTab(i).item_date) BETWEEN TRUNC(lv_start_date) and TRUNC(nvl(lv_end_date,TmpDayTab(i).item_date))
11423 AND i>TmpDaytab.FIRST
11424 AND lv_person_id=tmp_person_id
11425
11426 THEN
11427 lv_person_bill_flag := lv_person_bill_flag;
11428 ELSE
11429
11430
11431 Check_Person_Billable(p_person_id => lv_person_id,
11432 p_item_date => TmpDayTab(i).item_date,
11433 x_start_date => lv_start_date,
11434 x_end_date => lv_end_date,
11435 x_billable_flag => lv_person_bill_flag,
11436 x_return_status => lv_return_status,
11437 x_msg_count => x_msg_count,
11438 x_msg_data => x_msg_data);
11439 tmp_person_id := lv_person_id;
11440
11441 END IF;
11442
11443 lv_ou_error := 'N';
11444
11445 lv_error_flag := 'N';
11446
11447 lv_call_pos := 'Res : resou ';
11448 IF (ld_resou_startdate_tab.count = 0) THEN
11449
11450 -- lv_error_flag := 'Y';
11451 -- lv_rejection_code := 'Resource_ou_not_found';
11452
11453 lv_err_msg := 'ResOU_Not_Found';
11454 RAISE NO_DATA_FOUND;
11455
11456 ELSIF ((lv_pvdr_period_set_name IS NULL) OR
11457 (trunc(TmpDayTab(i).item_date) NOT BETWEEN
11458 trunc(ld_resou_startdate_tab(lv_res_index)) AND
11459 trunc(ld_resou_enddate_tab(lv_res_index)))) THEN
11460
11461 lv_prev_index := lv_res_index;
11462
11463 LOOP
11464
11465 IF lv_res_index > ld_resou_startdate_tab.COUNT THEN
11466
11467 -- lv_error_flag := 'Y';
11468 -- lv_rejection_code := 'Resource_ou_not_found';
11469
11470 lv_err_msg := 'ResOU_Not_Found';
11471 RAISE NO_DATA_FOUND;
11472
11473 END IF;
11474
11475
11476 EXIT WHEN lv_error_flag = 'Y' OR
11477 trunc(TmpDayTab(i).item_date) >=
11478 trunc(ld_resou_startdate_tab(lv_res_index)) AND
11479 trunc(TmpDayTab(i).item_date) <=
11480 trunc(ld_resou_enddate_tab(lv_res_index));
11481
11482 lv_res_index := lv_res_index + 1;
11483
11484 END LOOP;
11485
11486 IF lv_error_flag = 'Y' THEN
11487
11488 lv_res_index := lv_prev_index;
11489 lv_ou_error := 'Y';
11490 lv_resou := -99;
11491 lv_pvdr_period_set_name := '-99';
11492 lv_project_id := -99;
11493 lv_project_org_id := -99;
11494 lv_project_orgn_id := -99;
11495 lv_work_type_id := -99;
11496 lv_project_type_class := '-99';
11497 lv_rcvr_period_set_name := '-99';
11498 lv_pvdrpa_name := '-99';
11499 lv_pvdrgl_name := '-99';
11500 lv_rcvrpa_name := '-99';
11501 lv_rcvrgl_name := '-99';
11502 lv_exp_type := '-99';
11503 lv_exp_type_class := '-99';
11504
11505
11506 ELSE
11507
11508 lv_resou := l_resou_tab(lv_res_index);
11509
11510 Print_message(
11511 'Res - Get_period_set_name (pvdr) ');
11512
11513 lv_pvdr_period_set_name :=
11514 PA_FORECAST_ITEMS_UTILS.get_period_set_name(
11515 lv_resou);
11516
11517 if lv_pvdr_period_set_name = 'NO_DATA_FOUND' THEN
11518
11519 lv_pvdr_period_set_name := '-99';
11520 lv_rejection_code := 'PVDR_PRD_SET_NAME_NOT_FOUND';
11521 lv_error_flag := 'Y';
11522
11523 end if;
11524
11525
11526 END IF;
11527
11528
11529 IF lv_ou_error = 'N' THEN
11530
11531 Print_message(
11532 'Res - Get_pa_period_name (pvdr) ');
11533
11534 PA_FORECAST_ITEMS_UTILS.get_pa_period_name(
11535 lv_resou,p_start_date,
11536 p_end_date,
11537 ld_pvdrpa_startdate_tab,
11538 ld_pvdrpa_enddate_tab,
11539 lv_pvdrpa_name_tab);
11540
11541 lv_pvpa_index := lv_pvdrpa_name_tab.FIRST;
11542
11543 IF lv_pvdrpa_name_tab.count > 0 THEN
11544
11545 lv_pvdrpa_name := lv_pvdrpa_name_tab(lv_pvpa_index);
11546
11547 END IF;
11548
11549
11550 Print_message(
11551 'Res - Get_gl_period_name (pvdr) ');
11552
11553 PA_FORECAST_ITEMS_UTILS.get_gl_period_name(
11554 lv_resou,p_start_date,
11555 p_end_date,
11556 ld_pvdrgl_startdate_tab,
11557 ld_pvdrgl_enddate_tab,
11558 lv_pvdrgl_name_tab);
11559
11560 lv_pvgl_index := lv_pvdrgl_name_tab.FIRST;
11561
11562 IF lv_pvdrgl_name_tab.count > 0 THEN
11563
11564 lv_pvdrgl_name := lv_pvdrgl_name_tab(lv_pvgl_index);
11565
11566 END IF;
11567
11568
11569 Print_message(
11570 'Res - Get_forecastoptions ');
11571
11572 PA_FORECAST_ITEMS_UTILS.get_forecastoptions(
11573 lv_resou,
11574 -- lv_include_admin_proj_flag, Bug 4576715
11575 lv_util_cal_method,
11576 lv_bill_unasg_proj_id,
11577 lv_bill_unasg_exp_type_class,
11578 lv_bill_unasg_exp_type,
11579 lv_nbill_unasg_proj_id,
11580 lv_nbill_unasg_exp_type_class,
11581 lv_nbill_unasg_exp_type,
11582 lv_default_tp_amount_type,
11583 lv_return_status, x_msg_count, x_msg_data);
11584
11585 /* Added the code for bug 3011242*/
11586 IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11587 x_return_status := lv_return_status;
11588 return;
11589 END IF;
11590 /* Code addition for the bug 3011242 ends*/
11591 /*
11592 Print_message('foptions ::' ||
11593 'org:' || l_resou_tab(lv_res_index) ||
11594 ' adm:'|| lv_include_admin_proj_flag ||
11595 ' utl:'|| lv_util_cal_method ||
11596 ' b_prjid:'|| lv_bill_unasg_proj_id);
11597
11598 Print_message('foptions ::' ||
11599 ' b_exp_cls:'|| lv_bill_unasg_exp_type_class ||
11600 ' b_exp_typ:'|| lv_bill_unasg_exp_type ||
11601 ' nb_prjid:'|| lv_nbill_unasg_proj_id);
11602
11603 Print_message('foptions ::' ||
11604 ' nb_exp_cls:'|| lv_nbill_unasg_exp_type_class ||
11605 ' nb_exp_typ:'|| lv_nbill_unasg_exp_type ||
11606 ' tp_amt_typ:'|| lv_default_tp_amount_type);
11607 */
11608 print_message('After Get_forecastoptions');
11609
11610 IF lv_person_bill_flag = 'Y' Then
11611 print_message('Inside IF lv_person_bill_flag = Y');
11612
11613 lv_project_id := lv_bill_unasg_proj_id;
11614 lv_exp_type := lv_bill_unasg_exp_type;
11615 lv_exp_type_class := lv_bill_unasg_exp_type_class;
11616
11617 ELSE
11618
11619 print_message('Inside ELSE lv_person_bill_flag = Y');
11620 lv_project_id := lv_nbill_unasg_proj_id;
11621 lv_exp_type := lv_nbill_unasg_exp_type;
11622 lv_exp_type_class := lv_nbill_unasg_exp_type_class;
11623
11624 END IF;
11625
11626 lv_call_pos := 'Res : proj ';
11627
11628 Print_message(
11629 'Res - Calling get_project_dtls ');
11630
11631 Get_Project_Dtls (lv_project_id, lv_project_org_id,
11632 lv_project_orgn_id, lv_work_type_id,
11633 lv_project_type_class,lv_project_status_code,
11634 lv_return_status, x_msg_count, x_msg_data);
11635
11636 IF lv_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11637 lv_err_msg := 'No_Project_Record - Res';
11638 RAISE NO_DATA_FOUND;
11639
11640 END IF;
11641
11642 Print_message(
11643 'Res - Get_Period_set_name (rcvr) ');
11644
11645 Print_message('lv_project_org_id: ' || lv_project_org_id);
11646 lv_rcvr_period_set_name :=
11647 PA_FORECAST_ITEMS_UTILS.get_period_set_name (
11648 lv_project_org_id);
11649
11650 if lv_rcvr_period_set_name = 'NO_DATA_FOUND' THEN
11651
11652 lv_rcvr_period_set_name := '-99';
11653 lv_rejection_code := 'RCVR_PRD_SET_NAME_NOT_FOUND';
11654 lv_error_flag := 'Y';
11655
11656 end if;
11657
11658 Print_message(
11659 'Res - Get_PA_Period_name (rcvr) ');
11660
11661 Print_message('lv_project_org_id: ' || lv_project_org_id);
11662 PA_FORECAST_ITEMS_UTILS.get_pa_period_name(
11663 lv_project_org_id,
11664 p_start_date,
11665 p_end_date,
11666 ld_rcvrpa_startdate_tab,
11667 ld_rcvrpa_enddate_tab,
11668 lv_rcvrpa_name_tab);
11669
11670 lv_rcpa_index := lv_rcvrpa_name_tab.FIRST;
11671
11672 IF lv_rcvrpa_name_tab.count > 0 THEN
11673
11674 lv_rcvrpa_name := lv_rcvrpa_name_tab(lv_rcpa_index);
11675
11676 END IF;
11677
11678
11679 Print_message(
11680 'Res - Get_gl_Period_name (rcvr) ');
11681
11682 Print_message('lv_project_org_id: ' || lv_project_org_id);
11683 PA_FORECAST_ITEMS_UTILS.get_gl_period_name(
11684 lv_project_org_id,
11685 p_start_date,
11686 p_end_date,
11687 ld_rcvrgl_startdate_tab,
11688 ld_rcvrgl_enddate_tab,
11689 lv_rcvrgl_name_tab);
11690
11691 lv_rcgl_index := lv_rcvrgl_name_tab.FIRST;
11692
11693 IF lv_rcvrgl_name_tab.count > 0 THEN
11694
11695 lv_rcvrgl_name := lv_rcvrgl_name_tab(lv_rcgl_index);
11696
11697 END IF;
11698
11699
11700 END IF;
11701
11702 END IF;
11703
11704 lv_error_flag := 'N';
11705
11706 lv_call_pos := 'Res : resorgn ';
11707
11708 IF (ld_orgn_enddate_tab.count = 0) THEN
11709 print_message('if ld_orgn_enddate_tab.count = 0');
11710 lv_error_flag := 'Y';
11711
11712 -- IF (lv_rejection_code IS NULL) THEN
11713
11714 -- lv_rejection_code := 'Exp orgn not found';
11715
11716 -- END IF;
11717
11718
11719 lv_err_msg := 'Resorgn_Not_Found';
11720 RAISE NO_DATA_FOUND;
11721
11722
11723 ELSIF (trunc(TmpDayTab(i).item_date) NOT BETWEEN
11724 trunc(ld_orgn_startdate_tab(lv_orgn_index)) AND
11725 trunc(ld_orgn_enddate_tab(lv_orgn_index))) THEN
11726
11727
11728 print_message('else trunc(TmpDayTab(i)...: ' || TmpDayTab(i).item_date);
11729 print_message('ld_orgn_startdate_tab(lv_orgn_index): ' || ld_orgn_startdate_tab(lv_orgn_index));
11730 print_message('ld_orgn_enddate_tab(lv_orgn_index): ' || ld_orgn_enddate_tab(lv_orgn_index));
11731 print_message('lv_prev_index: ' || lv_prev_index);
11732 print_message('lv_orgn_index: ' || lv_orgn_index);
11733 print_message('ld_orgn_startdate_tab.FIRST: ' || ld_orgn_startdate_tab.FIRST);
11734 print_message('ld_orgn_startdate_tab.LAST: ' || ld_orgn_startdate_tab.LAST);
11735 print_message('ld_orgn_startdate_tab.COUNT: ' || ld_orgn_startdate_tab.COUNT);
11736 print_message('lv_error_flag: ' || lv_error_flag);
11737
11738 lv_prev_index := lv_orgn_index;
11739
11740 LOOP
11741
11742 IF lv_orgn_index > ld_orgn_startdate_tab.COUNT THEN
11743
11744 lv_error_flag := 'Y';
11745
11746 -- IF (lv_rejection_code IS NULL) THEN
11747
11748 -- lv_rejection_code := 'Exp orgn not found';
11749
11750 -- END IF;
11751
11752 lv_err_msg := 'Resorgn_Not_Found';
11753 RAISE NO_DATA_FOUND;
11754
11755 END IF;
11756
11757 print_message('TmpDayTab(i).item_date: ' || TmpDayTab(i).item_date);
11758 print_message('ld_orgn_startdate_tab(lv_orgn_index): ' || ld_orgn_startdate_tab(lv_orgn_index));
11759 print_message('ld_orgn_enddate_tab(lv_orgn_index): ' || ld_orgn_enddate_tab(lv_orgn_index));
11760 EXIT WHEN lv_error_flag = 'Y' OR
11761 (trunc(TmpDayTab(i).item_date) >=
11762 trunc(ld_orgn_startdate_tab(lv_orgn_index)) AND
11763 trunc(TmpDayTab(i).item_date) <=
11764 trunc(ld_orgn_enddate_tab(lv_orgn_index)));
11765
11766 lv_orgn_index := lv_orgn_index + 1;
11767
11768 END LOOP;
11769
11770 END IF;
11771
11772
11773 IF lv_error_flag = 'Y' THEN
11774
11775 print_message('IF lv_error_flag = Y');
11776 lv_orgn_index := lv_prev_index;
11777 lv_resorgn := -99;
11778 lv_jobid := -99;
11779 lv_orgn_error := 'Y';
11780
11781 ELSE
11782 print_message('else IF lv_error_flag = Y');
11783 lv_resorgn := l_orgn_tab(lv_orgn_index);
11784 lv_jobid := l_jobid_tab(lv_orgn_index);
11785
11786 END IF;
11787
11788
11789 lv_call_pos := 'Res : Borr ';
11790 IF ((lv_project_org_id <>lv_resou ) OR
11791 (lv_project_orgn_id <> lv_resorgn)) THEN
11792
11793 lv_borrowed_flag := 'Y';
11794
11795 ELSE
11796
11797 lv_borrowed_flag := 'N';
11798
11799 END IF;
11800
11801 lv_action_code := 'STAFFED_ASGMT_PROJ_FORECASTING';
11802
11803 /* Bug No:1967832. Added conditions before calling check_prj_stus_action_allowed.*/
11804
11805 --Added nvl in IF condition for bug 4380573.
11806 IF nvl(TmpDayTab(i).status_code, 'NULL') = tmp_status_code
11807 AND i>TmpDayTab.FIRST THEN
11808 lv_include_in_forecast := lv_include_in_forecast;
11809 ELSE
11810 lv_include_in_forecast :=
11811 pa_project_utils.check_prj_stus_action_allowed(
11812 TmpDayTab(i).status_code,
11813 lv_action_code);
11814
11815 /* Commented this for bug 4380573
11816 tmp_status_code := TmpDayTab(i).status_code; */
11817
11818 --Added nvl for bug 4380573
11819 tmp_status_code := nvl(TmpDayTab(i).status_code, 'NULL');
11820
11821 END IF;
11822
11823 TmpDayTab(i).include_in_forecast := lv_include_in_forecast;
11824
11825 --print_message('JM: 100');
11826 IF d_in <= p_DbHdrTab.COUNT THEN
11827
11828 --print_message('JM: 101');
11829 lv_call_pos := 'Res : in if 1 ';
11830
11831 IF trunc(TmpDayTab(i).item_date) <
11832 trunc(p_DbHdrTab(d_in).item_date) THEN
11833
11834 --print_message('JM: 102');
11835 lv_call_pos := 'Res : in if 2 ';
11836
11837
11838 -- Data Model Merge: Only leave out if all quantity columns are 0.
11839 --IF (TmpDayTab(i).item_quantity = 0 ) THEN
11840 IF (NVL(TmpDayTab(i).item_quantity,0) = 0 AND
11841 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) = 0 AND
11842 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) = 0 AND
11843 NVL(TmpDayTab(i).CONFIRMED_QTY,0) = 0 AND
11844 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) = 0 AND
11845 NVL(TmpDayTab(i).capacity_quantity,0) = 0 AND
11846 NVL(TmpDayTab(i).availability_quantity,0) = 0 AND
11847 NVL(TmpDayTab(i).overcommitment_quantity,0) = 0) THEN
11848
11849 --print_message('JM: 103');
11850 TmpDayTab(i).action_flag := 'I';
11851
11852 ELSE
11853
11854 --print_message('JM: 104');
11855 TmpDayTab(i).action_flag := 'N';
11856
11857 END IF;
11858
11859 print_message('JM: 105');
11860 ELSIF trunc(TmpDayTab(i).item_date) =
11861 trunc(p_DbHdrTab(d_in).item_date) THEN
11862
11863 --print_message('JM: 106');
11864 --print_message('TmpDayTab(i).item_date: ' || TmpDayTab(i).item_date);
11865 print_message('NVL(TmpDayTab(i).capacity_quantity,-99): ' || NVL(TmpDayTab(i).capacity_quantity,-99));
11866 print_message('NVL(p_DbHdrTab(d_in).capacity_quantity,-99): ' || NVL(p_DbHdrTab(d_in).capacity_quantity,-99));
11867 print_message('NVL(TmpDayTab(i).availability_quantity,-99): ' || NVL(TmpDayTab(i).availability_quantity,-99));
11868 print_message('NVL(p_DbHdrTab(d_in).availability_quantity,-99): ' || NVL(p_DbHdrTab(d_in).availability_quantity,-99));
11869 print_message('NVL(TmpDayTab(i).overcommitment_quantity,-99): ' || NVL(TmpDayTab(i).overcommitment_quantity,-99));
11870 print_message('NVL(p_DbHdrTab(d_in).overcommitment_quantity,-99): ' || NVL(p_DbHdrTab(d_in).overcommitment_quantity,-99));
11871
11872 lv_call_pos := 'Res : in else 2 ';
11873 print_message('nvl(lv_default_tp_amount_type,Z): ' || nvl(lv_default_tp_amount_type,'Z'));
11874 print_message('nvl(p_DbHdrTab(d_in).tp_amount_type,Z): ' || nvl(p_DbHdrTab(d_in).tp_amount_type,'Z'));
11875
11876 -- Data Model Merge: Only delete if all quantity columns are 0.
11877 IF (NVL(TmpDayTab(i).item_quantity,0) = 0 AND
11878 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) = 0 AND
11879 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) = 0 AND
11880 NVL(TmpDayTab(i).CONFIRMED_QTY,0) = 0 AND
11881 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) = 0 AND
11882 NVL(TmpDayTab(i).capacity_quantity,0) = 0 AND
11883 NVL(TmpDayTab(i).availability_quantity,0) = 0 AND
11884 NVL(TmpDayTab(i).overcommitment_quantity,0) = 0) THEN
11885
11886 --print_message('JM: 107');
11887 lv_call_pos := 'Res : in if 3 ';
11888 TmpDayTab(i).action_flag := 'D';
11889 TmpUpdTab(u_in) := p_DbHdrTab(d_in);
11890 TmpUpdTab(u_in).CAPACITY_QUANTITY := NULL;
11891 TmpUpdTab(u_in).OVERCOMMITMENT_QTY := NULL;
11892 -- Start fix for bug 2504222 (need to null out all columns related to quantity)
11893 TmpUpdTab(u_in).OVERCOMMITMENT_QUANTITY := NULL;
11894 TmpUpdTab(u_in).OVERCOMMITMENT_FLAG := NULL;
11895 TmpUpdTab(u_in).AVAILABILITY_FLAG := NULL;
11896 TmpUpdTab(u_in).AVAILABILITY_QUANTITY := NULL;
11897 -- End fix for bug 2504222
11898 TmpUpdTab(u_in).OVERPROVISIONAL_QTY := NULL;
11899 TmpUpdTab(u_in).OVER_PROV_CONF_QTY := NULL;
11900 TmpUpdTab(u_in).CONFIRMED_QTY := NULL;
11901 TmpUpdTab(u_in).PROVISIONAL_QTY := NULL;
11902 TmpUpdTab(u_in).item_quantity := 0;
11903 TmpUpdTab(u_in).delete_flag := 'Y';
11904 TmpUpdTab(u_in).error_flag := 'N';
11905 TmpUpdTab(u_in).other_rejection_code := NULL;
11906 u_in := u_in + 1;
11907
11908 --print_message('JM: 108');
11909 ELSIF p_DbHdrTab(d_in).error_flag = 'Y' THEN
11910
11911 --print_message('JM: 109');
11912 lv_call_pos := 'Res : in else 3 ';
11913 TmpDayTab(i).action_flag := 'E';
11914 TmpDayTab(i).forecast_item_id :=
11915 p_DbHdrTab(d_in).forecast_item_id;
11916
11917 ELSIF ( (NVL(lv_resou,0) <>
11918 NVL(p_DbHdrTab(d_in).expenditure_org_id,0)) OR
11919 (NVL(lv_resorgn,0) <>
11920 NVL(p_DbHdrTab(d_in).expenditure_organization_id,0)) OR
11921 (NVL(lv_jobid,0) <>
11922 NVL(p_DbHdrTab(d_in).job_id,0)) OR
11923 (lv_exp_type <>
11924 p_DbHdrTab(d_in).expenditure_type) OR
11925 (lv_exp_type_class <>
11926 p_DbHdrTab(d_in).expenditure_type_class) OR
11927 (nvl(lv_default_tp_amount_type,'Z') <>
11928 nvl(p_DbHdrTab(d_in).tp_amount_type,'Z')) OR
11929 (lv_borrowed_flag <> p_DbHdrTab(d_in).borrowed_flag)
11930
11931 ) THEN
11932
11933 print_message('JM: 110');
11934 lv_call_pos := 'Res : in else 3a ';
11935 TmpDayTab(i).action_flag := 'DN';
11936 TmpUpdTab(u_in) := p_DbHdrTab(d_in);
11937 TmpUpdTab(u_in).CAPACITY_QUANTITY := NULL;
11938 TmpUpdTab(u_in).OVERCOMMITMENT_QTY := NULL;
11939 -- Start fix for bug 2504222 (need to null out all columns related to quantity)
11940 TmpUpdTab(u_in).OVERCOMMITMENT_QUANTITY := NULL;
11941 TmpUpdTab(u_in).AVAILABILITY_QUANTITY := NULL;
11942 TmpUpdTab(u_in).AVAILABILITY_FLAG := NULL;
11943 TmpUpdTab(u_in).OVERCOMMITMENT_FLAG := NULL;
11944 -- End fix for bug 2504222
11945 TmpUpdTab(u_in).OVERPROVISIONAL_QTY := NULL;
11946 TmpUpdTab(u_in).OVER_PROV_CONF_QTY := NULL;
11947 TmpUpdTab(u_in).CONFIRMED_QTY := NULL;
11948 TmpUpdTab(u_in).PROVISIONAL_QTY := NULL;
11949 TmpUpdTab(u_in).item_quantity := 0;
11950 TmpUpdTab(u_in).delete_flag := 'Y';
11951 u_in := u_in + 1;
11952
11953 ELSIF (
11954 NVL(TmpDayTab(i).CAPACITY_QUANTITY,0) <> NVL(p_DbHdrTab(d_in).CAPACITY_QUANTITY,0) OR
11955 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) <> NVL(p_DbHdrTab(d_in).OVERPROVISIONAL_QTY,0) OR
11956 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) <> NVL(p_DbHdrTab(d_in).OVER_PROV_CONF_QTY,0) OR
11957 NVL(TmpDayTab(i).CONFIRMED_QTY,0) <> NVL(p_DbHdrTab(d_in).CONFIRMED_QTY,0) OR
11958 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) <> NVL(p_DbHdrTab(d_in).PROVISIONAL_QTY,0) OR
11959 NVL(TmpDayTab(i).OVERCOMMITMENT_QUANTITY,0) <> NVL(p_DbHdrTab(d_in).OVERCOMMITMENT_QUANTITY,0) OR
11960 NVL(TmpDayTab(i).AVAILABILITY_QUANTITY,0) <> NVL(p_DbHdrTab(d_in).AVAILABILITY_QUANTITY,0) OR
11961 TmpDayTab(i).item_quantity <>
11962 p_DbHdrTab(d_in).item_quantity
11963 ) THEN
11964
11965 --print_message('JM: 111');
11966 lv_call_pos := 'Res : in else 3b ';
11967 TmpDayTab(i).action_flag := 'RN';
11968 TmpDayTab(i).expenditure_org_id :=
11969 lv_resou;
11970 TmpDayTab(i).project_org_id := lv_project_org_id;
11971 TmpDayTab(i).work_type_id := lv_work_type_id;
11972 TmpDayTab(i).tp_amount_type :=
11973 lv_default_tp_amount_type;
11974 TmpDayTab(i).person_billable_flag :=
11975 lv_person_bill_flag;
11976 TmpDayTab(i).job_id := lv_jobid;
11977 TmpDayTab(i).project_id := lv_project_id;
11978 TmpDayTab(i).resource_id := p_resource_id;
11979 TmpDayTab(i).expenditure_organization_id := lv_resorgn;
11980
11981 TmpUpdTab(u_in) := p_DbHdrTab(d_in);
11982 TmpUpdTab(u_in).CAPACITY_QUANTITY :=
11983 TmpDayTab(i).CAPACITY_QUANTITY;
11984 TmpUpdTab(u_in).OVERCOMMITMENT_QTY :=
11985 TmpDayTab(i).OVERCOMMITMENT_QTY;
11986 -- Start fix for bug 2504222 (important part of bug fix, values were not
11987 -- set properly previously
11988 TmpUpdTab(u_in).OVERCOMMITMENT_QUANTITY :=
11989 TmpDayTab(i).OVERCOMMITMENT_QUANTITY;
11990 TmpUpdTab(u_in).AVAILABILITY_QUANTITY :=
11991 TmpDayTab(i).AVAILABILITY_QUANTITY;
11992 TmpUpdTab(u_in).AVAILABILITY_FLAG :=
11993 TmpDayTab(i).AVAILABILITY_FLAG;
11994 TmpUpdTab(u_in).OVERCOMMITMENT_FLAG :=
11995 TmpDayTab(i).OVERCOMMITMENT_FLAG;
11996 -- End fix for bug 2504222
11997 TmpUpdTab(u_in).OVERPROVISIONAL_QTY :=
11998 TmpDayTab(i).OVERPROVISIONAL_QTY;
11999 TmpUpdTab(u_in).OVER_PROV_CONF_QTY :=
12000 TmpDayTab(i).OVER_PROV_CONF_QTY;
12001 TmpUpdTab(u_in).CONFIRMED_QTY :=
12002 TmpDayTab(i).CONFIRMED_QTY;
12003 TmpUpdTab(u_in).PROVISIONAL_QTY :=
12004 TmpDayTab(i).PROVISIONAL_QTY;
12005 TmpUpdTab(u_in).item_quantity :=
12006 TmpDayTab(i).item_quantity;
12007 u_in := u_in + 1;
12008
12009 ELSE
12010
12011 --print_message('JM: 112');
12012 lv_call_pos := 'Res : in else 3c ';
12013 TmpDayTab(i).action_flag := 'C';
12014 TmpDayTab(i).expenditure_org_id :=
12015 lv_resou;
12016 TmpDayTab(i).project_org_id := lv_project_org_id;
12017 TmpDayTab(i).work_type_id := lv_work_type_id;
12018 TmpDayTab(i).tp_amount_type :=
12019 lv_default_tp_amount_type;
12020 TmpDayTab(i).person_billable_flag :=
12021 lv_person_bill_flag;
12022 TmpDayTab(i).job_id := lv_jobid;
12023 TmpDayTab(i).project_id := lv_project_id;
12024 TmpDayTab(i).resource_id := p_resource_id;
12025 TmpDayTab(i).expenditure_organization_id := lv_resorgn;
12026 END IF;
12027
12028 d_in := d_in + 1;
12029
12030 END IF;
12031
12032 END IF;
12033
12034 --print_message('JM: 113');
12035 lv_call_pos := 'Res : data create ';
12036
12037 -- Data Model Merge: Only leave out if all quantity columns are 0.
12038 IF (TmpDayTab(i).action_flag IN ('N', 'DN','E') AND
12039 (NVL(TmpDayTab(i).item_quantity,0) > 0 OR
12040 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) > 0 OR
12041 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) > 0 OR
12042 NVL(TmpDayTab(i).CONFIRMED_QTY,0) > 0 OR
12043 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) > 0 OR
12044 NVL(TmpDayTab(i).capacity_quantity,0) > 0 OR
12045 NVL(TmpDayTab(i).availability_quantity,0) > 0 OR
12046 NVL(TmpDayTab(i).overcommitment_quantity,0) > 0)) THEN
12047
12048 --print_message('JM: 114');
12049 lv_call_pos := 'Res : in if data create ';
12050
12051 --print_message('JM: 115');
12052 IF TmpDayTab(i).action_flag <> 'E' THEN
12053
12054 lv_forecast_item_id :=
12055 PA_FORECAST_ITEMS_UTILS.get_next_forecast_item_id;
12056
12057 TmpDayTab(i).forecast_item_id := lv_forecast_item_id;
12058
12059 ELSE
12060
12061 --print_message('JM: 116');
12062 lv_forecast_item_id := TmpDayTab(i).forecast_item_id;
12063
12064 END IF;
12065
12066 --print_message('JM: 117');
12067 TmpHdrRec.forecast_item_id := lv_forecast_item_id;
12068 TmpDayTab(i).work_type_id := lv_work_type_id;
12069 TmpDayTab(i).tp_amount_type := lv_default_tp_amount_type;
12070 TmpDayTab(i).person_billable_flag := lv_person_bill_flag;
12071 TmpDayTab(i).project_org_id := lv_project_org_id;
12072 TmpDayTab(i).expenditure_org_id := lv_resou;
12073 TmpDayTab(i).job_id := lv_jobid;
12074 TmpDayTab(i).project_id := lv_project_id;
12075 TmpDayTab(i).resource_id := p_resource_id;
12076 TmpDayTab(i).expenditure_organization_id := lv_resorgn;
12077 TmpHdrRec.forecast_item_id := lv_forecast_item_id;
12078 TmpHdrRec.forecast_item_type := 'U';
12079 TmpHdrRec.project_org_id := lv_project_org_id;
12080 TmpHdrRec.expenditure_org_id := lv_resou;
12081 TmpHdrRec.project_organization_id :=
12082 lv_project_orgn_id;
12083 TmpHdrRec.expenditure_organization_id := lv_resorgn;
12084 TmpHdrRec.project_id := lv_project_id;
12085 TmpHdrRec.project_type_class := lv_project_type_class;
12086 TmpHdrRec.person_id := lv_person_id;
12087 TmpHdrRec.resource_id := p_resource_id;
12088 TmpHdrRec.borrowed_flag := lv_borrowed_flag;
12089 TmpHdrRec.assignment_id := NULL;
12090 TmpHdrRec.item_date := TmpDayTab(i).item_date;
12091 TmpHdrRec.item_UOM := 'HOURS';
12092 TmpHdrRec.item_quantity := TmpDayTab(i).item_quantity;
12093 TmpHdrRec.pvdr_period_set_name :=
12094 lv_pvdr_period_set_name;
12095 TmpHdrRec.JOB_ID := lv_jobid;
12096 TmpHdrRec.TP_AMOUNT_TYPE := lv_default_tp_amount_type;
12097 TmpHdrRec.asgmt_sys_status_code := NULL;
12098 TmpHdrRec.capacity_quantity := TmpDayTab(i).capacity_quantity;
12099 TmpHdrRec.OVERPROVISIONAL_QTY := TmpDayTab(i).OVERPROVISIONAL_QTY;
12100 TmpHdrRec.OVER_PROV_CONF_QTY := TmpDayTab(i).OVER_PROV_CONF_QTY;
12101 TmpHdrRec.CONFIRMED_QTY := TmpDayTab(i).CONFIRMED_QTY;
12102 TmpHdrRec.PROVISIONAL_QTY := TmpDayTab(i).PROVISIONAL_QTY;
12103 TmpHdrRec.overcommitment_quantity := TmpDayTab(i).overcommitment_quantity;
12104 TmpHdrRec.availability_quantity := TmpDayTab(i).availability_quantity;
12105 TmpHdrRec.overcommitment_flag := TmpDayTab(i).overcommitment_flag;
12106 TmpHdrRec.availability_flag := TmpDayTab(i).availability_flag;
12107 lv_error_flag := 'N';
12108
12109 lv_call_pos := 'Res : pvdrpa ';
12110 IF (ld_pvdrpa_startdate_tab.count = 0) THEN
12111
12112 print_message('JM: 118');
12113 lv_error_flag := 'Y';
12114
12115 IF (lv_rejection_code IS NULL) THEN
12116
12117 lv_rejection_code := 'PVDR_PA_PRD_NAME_NOT_FOUND';
12118
12119 END IF;
12120
12121
12122 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
12123 trunc(ld_pvdrpa_startdate_tab(lv_pvpa_index)) AND
12124 trunc(ld_pvdrpa_enddate_tab(lv_pvpa_index))) THEN
12125
12126 --print_message('JM: 119');
12127 lv_prev_index := lv_pvpa_index;
12128
12129 LOOP
12130
12131 IF lv_pvpa_index > ld_pvdrpa_startdate_tab.COUNT THEN
12132
12133 --print_message('JM: 120');
12134 lv_error_flag := 'Y';
12135
12136
12137 IF (lv_rejection_code IS NULL) THEN
12138
12139 print_message('JM: 121');
12140 lv_rejection_code :=
12141 'PVDR_PA_PRD_NAME_NOT_FOUND';
12142
12143 END IF;
12144
12145 END IF;
12146
12147 EXIT WHEN lv_error_flag = 'Y' OR
12148 (trunc(TmpHdrRec.item_date) >=
12149 trunc(ld_pvdrpa_startdate_tab(lv_pvpa_index)) AND
12150 trunc(TmpHdrRec.item_date) <=
12151 trunc(ld_pvdrpa_enddate_tab(lv_pvpa_index)));
12152
12153 lv_pvpa_index := lv_pvpa_index + 1;
12154
12155 END LOOP;
12156
12157 END IF;
12158
12159 IF lv_error_flag = 'Y' THEN
12160
12161 --print_message('JM: 122');
12162 lv_pvpa_index := lv_prev_index;
12163 TmpHdrRec.pvdr_pa_period_name := '-99';
12164
12165 ELSE
12166
12167 print_message('JM: 123');
12168 TmpHdrRec.pvdr_pa_period_name :=
12169 lv_pvdrpa_name_tab(lv_pvpa_index);
12170
12171 END IF;
12172
12173 lv_error_flag := 'N';
12174
12175 lv_call_pos := 'Res : pvdrgl ';
12176 IF (ld_pvdrgl_startdate_tab.count = 0) THEN
12177
12178 print_message('JM: 124');
12179 lv_error_flag := 'Y';
12180
12181 IF (lv_rejection_code IS NULL) THEN
12182
12183 print_message('JM: 125');
12184 lv_rejection_code := 'PVDR_GL_PRD_NAME_NOT_FOUND';
12185
12186 END IF;
12187
12188
12189 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
12190 trunc(ld_pvdrgl_startdate_tab(lv_pvgl_index)) AND
12191 trunc(ld_pvdrgl_enddate_tab(lv_pvgl_index))) THEN
12192
12193 --print_message('JM: 126');
12194 lv_prev_index := lv_pvgl_index;
12195
12196 LOOP
12197
12198 IF lv_pvgl_index > ld_pvdrgl_startdate_tab.COUNT THEN
12199
12200 print_message('JM: 127');
12201 lv_error_flag := 'Y';
12202
12203 IF (lv_rejection_code IS NULL) THEN
12204
12205 print_message('JM: 128');
12206 lv_rejection_code :=
12207 'PVDR_GL_PRD_NAME_NOT_FOUND';
12208
12209 END IF;
12210
12211 END IF;
12212
12213 EXIT WHEN lv_error_flag = 'Y' OR
12214 ( trunc(TmpHdrRec.item_date) >=
12215 trunc(ld_pvdrgl_startdate_tab(lv_pvgl_index)) AND
12216 trunc(TmpHdrRec.item_date) <=
12217 trunc( ld_pvdrgl_enddate_tab(lv_pvgl_index)));
12218
12219 lv_pvgl_index := lv_pvgl_index + 1;
12220
12221 END LOOP;
12222
12223 END IF;
12224
12225 IF lv_error_flag = 'Y' THEN
12226
12227 print_message('JM: 129');
12228 lv_pvgl_index := lv_prev_index;
12229 TmpHdrRec.pvdr_gl_period_name := '-99';
12230
12231 ELSE
12232
12233 print_message('JM: 130');
12234 TmpHdrRec.pvdr_gl_period_name :=
12235 lv_pvdrgl_name_tab(lv_pvgl_index);
12236
12237 END IF;
12238
12239 TmpHdrRec.rcvr_period_set_name :=
12240 lv_rcvr_period_set_name;
12241
12242 lv_error_flag := 'N';
12243
12244 lv_call_pos := 'Res : rcvrpa ';
12245 IF (ld_rcvrpa_startdate_tab.count = 0) THEN
12246
12247 print_message('JM: 131');
12248 lv_error_flag := 'Y';
12249
12250 IF (lv_rejection_code IS NULL) THEN
12251
12252 print_message('JM: 132');
12253 lv_rejection_code := 'RCVR_PA_PRD_NAME_NOT_FOUND';
12254
12255 END IF;
12256
12257 print_message('JM: 133');
12258 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
12259 trunc(ld_rcvrpa_startdate_tab(lv_rcpa_index)) AND
12260 trunc(ld_rcvrpa_enddate_tab(lv_rcpa_index))) THEN
12261
12262 lv_prev_index := lv_rcpa_index;
12263
12264 print_message('JM: 134');
12265 LOOP
12266
12267 IF lv_rcpa_index > ld_rcvrpa_startdate_tab.COUNT THEN
12268
12269 lv_error_flag := 'Y';
12270 print_message('lv_rcpa_index > ld_rcvrpa_startdate_tab.COUNT');
12271 print_message(lv_rejection_code);
12272 IF (lv_rejection_code IS NULL) THEN
12273 print_message('RCVR_PA_PRD_NAME_NOT_FOUND');
12274 lv_rejection_code :=
12275 'RCVR_PA_PRD_NAME_NOT_FOUND';
12276
12277 END IF;
12278
12279 END IF;
12280
12281 EXIT WHEN lv_error_flag = 'Y' OR
12282 ( trunc(TmpHdrRec.item_date) >=
12283 trunc(ld_rcvrpa_startdate_tab(lv_rcpa_index)) AND
12284 trunc(TmpHdrRec.item_date) <=
12285 trunc(ld_rcvrpa_enddate_tab(lv_rcpa_index)));
12286
12287 lv_rcpa_index := lv_rcpa_index + 1;
12288
12289 END LOOP;
12290
12291 END IF;
12292
12293 IF lv_error_flag = 'Y' THEN
12294
12295 lv_rcpa_index := lv_prev_index;
12296 TmpHdrRec.rcvr_pa_period_name := '-99';
12297
12298 ELSE
12299
12300 TmpHdrRec.rcvr_pa_period_name :=
12301 lv_rcvrpa_name_tab(lv_rcpa_index);
12302
12303 END IF;
12304
12305 lv_error_flag := 'N';
12306
12307 lv_call_pos := 'Res : rcvrgl ';
12308 IF (ld_rcvrgl_startdate_tab.count = 0) THEN
12309
12310 lv_error_flag := 'Y';
12311
12312 IF (lv_rejection_code IS NULL) THEN
12313
12314 lv_rejection_code := 'RCVR_GL_PRD_NAME_NOT_FOUND';
12315
12316 END IF;
12317
12318 ELSIF (trunc(TmpHdrRec.item_date) NOT BETWEEN
12319 trunc(ld_rcvrgl_startdate_tab(lv_rcgl_index)) AND
12320 trunc(ld_rcvrgl_enddate_tab(lv_rcgl_index))) THEN
12321
12322 lv_prev_index := lv_rcgl_index;
12323
12324 LOOP
12325
12326 IF lv_rcgl_index > ld_rcvrgl_startdate_tab.COUNT THEN
12327
12328 lv_error_flag := 'Y';
12329
12330 IF (lv_rejection_code IS NULL) THEN
12331
12332 lv_rejection_code :=
12333 'RCVR_GL_PRD_NAME_NOT_FOUND';
12334
12335 END IF;
12336
12337 END IF;
12338
12339 EXIT WHEN lv_error_flag = 'Y' OR
12340 (trunc(TmpHdrRec.item_date) >=
12341 trunc(ld_rcvrgl_startdate_tab(lv_rcgl_index)) AND
12342 trunc(TmpHdrRec.item_date) <=
12343 trunc(ld_rcvrgl_enddate_tab(lv_rcgl_index)));
12344
12345 lv_rcgl_index := lv_rcgl_index + 1;
12346
12347 END LOOP;
12348
12349 END IF;
12350
12351 IF lv_error_flag = 'Y' THEN
12352
12353 lv_rcgl_index := lv_prev_index;
12354 TmpHdrRec.rcvr_gl_period_name := '-99';
12355
12356 ELSE
12357
12358 TmpHdrRec.rcvr_gl_period_name :=
12359 lv_rcvrgl_name_tab(lv_rcgl_index);
12360
12361 END IF;
12362
12363 lv_error_flag := 'N';
12364
12365 lv_call_pos := 'Res : wkdtrang ';
12366 IF (trunc(TmpHdrRec.item_date) NOT BETWEEN
12367 trunc(
12368 lv_WeekDateRange_Tab(lv_wk_index).week_start_date) AND
12369 trunc(
12370 lv_WeekDateRange_Tab(lv_wk_index).week_end_date))
12371 THEN
12372
12373 lv_prev_index := lv_wk_index;
12374
12375 LOOP
12376 IF lv_wk_index > lv_WeekDateRange_Tab.COUNT THEN
12377
12378 lv_error_flag := 'Y';
12379
12380 END IF;
12381
12382 EXIT WHEN lv_error_flag = 'Y' OR
12383 ((trunc(TmpHdrRec.item_date) >=
12384 trunc(
12385 lv_WeekDateRange_Tab(lv_wk_index).week_start_date))
12386 AND
12387 (trunc(TmpHdrRec.item_date) <=
12388 trunc(
12389 lv_WeekDateRange_Tab(lv_wk_index).week_end_date)));
12390
12391 lv_wk_index := lv_wk_index + 1;
12392
12393 END LOOP;
12394
12395 END IF;
12396
12397 TmpHdrRec.global_exp_period_end_date :=
12398 lv_WeekDateRange_Tab(lv_wk_index).week_end_date;
12399
12400 TmpHdrRec.expenditure_type := lv_exp_type;
12401 TmpHdrRec.expenditure_type_class := lv_exp_type_class;
12402 TmpHdrRec.provisional_flag := 'N';
12403 TmpHdrRec.cost_rejection_code := NULL;
12404 TmpHdrRec.rev_rejection_code := NULL;
12405 TmpHdrRec.Tp_rejection_code := NULL;
12406 TmpHdrRec.Burden_rejection_code := NULL;
12407 TmpHdrRec.capacity_quantity := TmpDayTab(i).capacity_quantity;
12408 TmpHdrRec.OVERPROVISIONAL_QTY := TmpDayTab(i).OVERPROVISIONAL_QTY;
12409 TmpHdrRec.OVER_PROV_CONF_QTY := TmpDayTab(i).OVER_PROV_CONF_QTY;
12410 TmpHdrRec.CONFIRMED_QTY := TmpDayTab(i).CONFIRMED_QTY;
12411 TmpHdrRec.PROVISIONAL_QTY := TmpDayTab(i).PROVISIONAL_QTY;
12412 TmpHdrRec.overcommitment_quantity := TmpDayTab(i).overcommitment_quantity ;
12413 TmpHdrRec.availability_quantity := TmpDayTab(i).availability_quantity;
12414 TmpHdrRec.overcommitment_flag := TmpDayTab(i).overcommitment_flag;
12415 TmpHdrRec.availability_flag := TmpDayTab(i).availability_flag;
12416
12417 TmpHdrRec.Other_rejection_code := lv_rejection_code;
12418 TmpHdrRec.Delete_Flag := 'N';
12419 -- 4583893 : Added lv_resorgn = -77 check
12420 IF (lv_rejection_code IS NOT NULL OR lv_resorgn = -77) THEN
12421
12422 TmpHdrRec.Error_Flag := 'Y';
12423 TmpDayTab(i).Error_Flag := 'Y';
12424
12425 ELSE
12426
12427 TmpHdrRec.Error_Flag := 'N';
12428
12429 END IF;
12430
12431 IF TmpDayTab(i).action_flag IN ('N','DN') THEN
12432
12433 TmpInsTab(i_in) := TmpHdrRec;
12434 i_in := i_in + 1;
12435
12436 ELSE
12437
12438 TmpDayTab(i).action_flag := 'RN';
12439 TmpUpdTab(u_in) := TmpHdrRec;
12440 u_in := u_in + 1;
12441
12442 END IF ;
12443
12444
12445 /*
12446 Print_message('***********');
12447 Print_message(
12448 ' item_date :' || TmpHdrRec.item_date);
12449
12450 Print_message(
12451 'fct_item_id:' || TmpHdrRec.forecast_item_id ||
12452 ' fct_itm_typ:' || TmpHdrRec.forecast_item_type ||
12453 ' prj_org_id:' || TmpHdrRec.project_org_id ||
12454 ' exp_org_id:' || TmpHdrRec.expenditure_org_id||
12455 chr(10)|| 'exp_orgn_id:' ||
12456 TmpHdrRec.expenditure_organization_id ||
12457 ' prj_orgn_id:' ||
12458 TmpHdrRec.project_organization_id ||
12459 ' prj_id:' || TmpHdrRec.project_id);
12460
12461 Print_message(
12462 'prj_typ_cls:' || TmpHdrRec.project_type_class ||
12463 ' person_id:' || TmpHdrRec.person_id||
12464 ' res_id:' || TmpHdrRec.resource_id ||
12465 ' brw_flg:' || TmpHdrRec.borrowed_flag ||
12466 ' asgn_id:' || TmpHdrRec.assignment_id ||
12467 ' item_uom:' || TmpHdrRec.item_uom ||
12468 ' itm_qty:' || TmpHdrRec.item_quantity);
12469
12470 Print_message(
12471 'pvd_set_nme:' || TmpHdrRec.pvdr_period_set_name ||
12472 ' pvd_pa_name:' ||
12473 TmpHdrRec.pvdr_pa_period_name ||
12474 chr(10) || 'pvd_gl_name:' ||
12475 TmpHdrRec.pvdr_gl_period_name ||
12476 ' rcv_set_nme:' ||
12477 TmpHdrRec.rcvr_period_set_name ||
12478 chr(10) || 'rcv_pa_name:' ||
12479 TmpHdrRec.rcvr_pa_period_name ||
12480 ' rcv_gl_name:' ||
12481 TmpHdrRec.rcvr_gl_period_name ||
12482 chr(10) || 'glb_end_dt:' ||
12483 TmpHdrRec.global_exp_period_end_date);
12484
12485 Print_message(
12486 'exp_type:' || TmpHdrRec.expenditure_type ||
12487 ' exp_typ_cls:' ||
12488 TmpHdrRec.expenditure_type_class ||
12489 chr(10) || 'oth_rej_cde:' ||
12490 TmpHdrRec.other_rejection_code ||
12491 ' Del_flag:' || TmpHdrRec.delete_flag ||
12492 ' Err_flag:' || TmpHdrRec.error_flag ||
12493 ' Prv_flag:' || TmpHdrRec.provisional_flag);
12494 */
12495
12496 END IF;
12497 end if;
12498 END LOOP;
12499 end if;
12500
12501
12502 p_FIDayTab := TmpDayTab;
12503 x_FIHdrInsTab := TmpInsTab;
12504 x_FIHdrUpdTab := TmpUpdTab;
12505
12506 Print_message('Leaving Build_FI_Hdr_Res');
12507
12508 PA_DEBUG.Reset_Err_Stack;
12509
12510 x_return_status := lv_return_status;
12511
12512 EXCEPTION
12513
12514 WHEN NO_DATA_FOUND THEN
12515
12516 if lv_err_msg = 'ResOU_Not_Found' then
12517
12518 x_msg_count := 1;
12519 x_msg_data := 'ResOU not found';
12520 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12521
12522 FND_MSG_PUB.add_exc_msg
12523 (p_pkg_name =>
12524 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Res',
12525 p_procedure_name => PA_DEBUG.G_Err_Stack);
12526
12527 If x_msg_count = 1 THEN
12528 pa_interface_utils_pub.get_messages
12529 (p_encoded => FND_API.G_TRUE,
12530 p_msg_index => 1,
12531 p_msg_count => x_msg_count,
12532 p_msg_data => x_msg_data,
12533 p_data => l_data , -- 4537865
12534 p_msg_index_out => l_msg_index_out );
12535 x_msg_data := l_data ; -- 4537865
12536 End If;
12537 Print_message(x_msg_data);
12538 Print_message(lv_call_pos);
12539
12540 RAISE;
12541
12542 elsif lv_err_msg = 'Resorgn_Not_Found' then
12543 x_msg_count := 1;
12544 x_msg_data := 'ResOrgn not found';
12545 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12546
12547 FND_MSG_PUB.add_exc_msg
12548 (p_pkg_name =>
12549 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Res',
12550 p_procedure_name => PA_DEBUG.G_Err_Stack);
12551
12552 If x_msg_count = 1 THEN
12553 pa_interface_utils_pub.get_messages
12554 (p_encoded => FND_API.G_TRUE,
12555 p_msg_index => 1,
12556 p_msg_count => x_msg_count,
12557 p_msg_data => x_msg_data,
12558 p_data => l_data, -- 4537865
12559 p_msg_index_out => l_msg_index_out );
12560 x_msg_data := l_data ; -- 4537865
12561 End If;
12562 Print_message(x_msg_data);
12563 Print_message(lv_call_pos);
12564
12565 RAISE;
12566
12567 else
12568
12569 x_msg_count := 1;
12570 x_msg_data := sqlerrm ;
12571 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12572
12573 FND_MSG_PUB.add_exc_msg
12574 (p_pkg_name =>
12575 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Res',
12576 p_procedure_name => PA_DEBUG.G_Err_Stack);
12577
12578 If x_msg_count = 1 THEN
12579 pa_interface_utils_pub.get_messages
12580 (p_encoded => FND_API.G_TRUE,
12581 p_msg_index => 1,
12582 p_msg_count => x_msg_count,
12583 p_msg_data => x_msg_data,
12584 p_data => l_data, -- 4537865
12585 p_msg_index_out => l_msg_index_out );
12586 x_msg_data := l_data ; -- 4537865
12587 End If;
12588 Print_message(x_msg_data);
12589 Print_message(lv_call_pos);
12590
12591 RAISE;
12592
12593 end if;
12594
12595 WHEN OTHERS THEN
12596 print_message('Failed in Build_FI_Hdr_Res api');
12597 print_message('SQLCODE'||sqlcode||sqlerrm);
12598
12599 x_msg_count := 1;
12600 x_msg_data := sqlerrm;
12601 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12602
12603 FND_MSG_PUB.add_exc_msg
12604 (p_pkg_name =>
12605 'PA_FORECASTITEM_PVT.Build_FI_Hdr_Res',
12606 p_procedure_name => PA_DEBUG.G_Err_Stack);
12607
12608 If x_msg_count = 1 THEN
12609 pa_interface_utils_pub.get_messages
12610 (p_encoded => FND_API.G_TRUE,
12611 p_msg_index => 1,
12612 p_msg_count => x_msg_count,
12613 p_msg_data => x_msg_data,
12614 p_data => l_data, -- 4537865
12615 p_msg_index_out => l_msg_index_out );
12616 x_msg_data := l_data ; -- 4537865
12617 End If;
12618 Print_message(x_msg_data);
12619
12620 RAISE;
12621
12622 END Build_FI_Hdr_Res;
12623
12624
12625 /* ---------------------------------------------------------------------
12626 | Procedure : Build_FI_Dtl_Res
12627 | Purpose : To create new/modified forecast item details
12628 | (Resource Unassigned Time) record
12629 | FOR the item DATEs that are built IN the p_FIDayTab
12630 | Parameters : p_resource_id - Input Resource ID
12631 | p_start_date - Current Start DATE FOR forecast item
12632 | p_end_date - Current END DATE FOR forecast item
12633 | p_DBDtlTab - Holds forecast item detail records which are
12634 | already existing
12635 | p_FIDayTab - Holds all item_dates,item_quantity,
12636 | status_code FOR the current run.
12637 | action_flag component of this tab already indicates
12638 | (By Header Processing) the following :
12639 | a) N : New record - item_date does not exist
12640 | b) DN : Delete AND create new -
12641 | item DATE exists but expenditure OU/
12642 | expenditure organization/expenditure type/
12643 | expenditure type class/ borrowed flag has
12644 | changed.
12645 | Existing record is reversed(deleted) AND new
12646 | record is created
12647 | c) RN : Reverse AND create new -
12648 | Quantity has changed.
12649 | IN header : quantity is updated.
12650 | IN detail :
12651 | IF summarized existing line should be reversed
12652 | AND new line created
12653 | IF not summarized existing line should be
12654 | updated to reflect new quantity
12655 | d) C : No change IN header
12656 | Check FOR any changes IN detail record for
12657 | person_billable_flag, provisional_flag,
12658 | work_type OR resource_type
12659 | x_FIDtlInsTab - Will RETURN all forecast item detail records
12660 | that are new
12661 | x_FIDtlUpdTab - Will RETURN all forecast item detail records
12662 | that are modified
12663 | x_return_status -
12664 | x_msg_count -
12665 | x_msg_data -
12666 +----------------------------------------------------------------------*/
12667 PROCEDURE Build_FI_Dtl_Res(
12668 p_resource_id IN NUMBER,
12669 p_DBDtlTab IN PA_FORECAST_GLOB.FIDtlTabTyp,
12670 p_FIDayTab IN PA_FORECAST_GLOB.FIDayTabTyp,
12671 x_FIDtlInsTab OUT NOCOPY PA_FORECAST_GLOB.FIDtlTabTyp, /* 2674619 - Nocopy change */
12672 x_FIDtlUpdTab OUT NOCOPY PA_FORECAST_GLOB.FIDtlTabTyp, /* 2674619 - Nocopy change */
12673 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
12674 x_msg_count OUT NOCOPY NUMBER, -- 4537865
12675 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
12676
12677
12678 l_msg_index_out NUMBER;
12679 l_data varchar2(2000); -- 4537865
12680 d_in NUMBER := 1; -- index FOR p_dbDtlTab;
12681 TmpDayTab PA_FORECAST_GLOB.FIDayTabTyp;
12682 TmpInsTab PA_FORECAST_GLOB.FIDtlTabTyp;
12683 i_in NUMBER := 1; -- index FOR TmpDayTab;
12684 TmpUpdTab PA_FORECAST_GLOB.FIDtlTabTyp;
12685 u_in NUMBER := 1; -- index FOR TmpDayTab;
12686 TmpDtlRec PA_FORECAST_GLOB.FIDtlRecord;
12687
12688 lv_billable_flag VARCHAR2(3);
12689 l_resutilweighted NUMBER;
12690 l_orgutilweighted NUMBER;
12691 l_resutilcategoryid NUMBER;
12692 l_orgutilcategoryid NUMBER;
12693 l_ReduceCapacityFlag VARCHAR2(1);
12694
12695 lv_inc_forecast_flag VARCHAR2(3) := 'N';
12696 lv_inc_util_flag VARCHAR2(3) := 'N';
12697 lv_provisional_flag VARCHAR2(3);
12698 lv_next_line_num NUMBER;
12699 lv_new_fcast_sum_code VARCHAR2(1);
12700 lv_new_util_sum_code VARCHAR2(1);
12701 lv_resource_type VARCHAR2(30);
12702 lv_amount_type_id NUMBER;
12703 lv_person_id NUMBER;
12704
12705 lv_return_status VARCHAR2(30);
12706 tmp_person_id VARCHAR2(30);
12707 lv_start_date DATE;
12708 lv_end_date DATE;
12709 l_worktype_cache NUMBER; -- Added for bug 5552078
12710
12711 BEGIN
12712 lv_return_status := FND_API.G_RET_STS_SUCCESS;
12713
12714 Print_message('Entering Build_FI_Dtl_Res');
12715
12716 PA_DEBUG.Init_err_stack(
12717 'PA_FORECASTITEM_PVT.Build_FI_Dtl_Res');
12718
12719 TmpDayTab.Delete;
12720 TmpInsTab.Delete;
12721 TmpUpdTab.Delete;
12722 l_worktype_cache := -1; -- Added for Bug 5552078
12723
12724 TmpDayTab := p_FIDayTab;
12725
12726
12727 Print_message(
12728 'Res - Get_resource_type');
12729
12730 lv_resource_type := PA_FORECAST_ITEMS_UTILS.get_resource_type(
12731 p_resource_id);
12732
12733 lv_amount_type_id := get_AmountTypeID;
12734
12735 lv_person_id := PA_FORECAST_ITEMS_UTILS.get_person_id(
12736 p_resource_id);
12737
12738
12739 if (TmpDayTab.count <> 0) then
12740 FOR i IN TmpDayTab.FIRST..TmpDayTab.LAST LOOP
12741 if TmpDayTab.exists(i) then
12742 lv_inc_forecast_flag := TmpDayTab(i).include_in_forecast;
12743
12744 IF lv_inc_forecast_flag IN ('NO', 'N') THEN
12745
12746 lv_new_fcast_sum_code := 'X';
12747
12748 ELSE
12749
12750 lv_new_fcast_sum_code := 'N';
12751
12752 END IF;
12753
12754
12755 /*
12756 lv_new_fcast_sum_code := 'N';
12757 */
12758
12759 /* Bug No: 1967832 Removed original call to the function is_include_utilisation and added the followign conditions. */
12760
12761
12762 IF TRUNC(TmpDayTab(i).item_date) BETWEEN TRUNC(lv_start_date) and TRUNC(nvl(lv_end_date,TmpDayTab(i).item_date))
12763 AND i>TmpDaytab.FIRST
12764 AND lv_person_id=tmp_person_id THEN
12765
12766 lv_inc_util_flag := lv_inc_util_flag;
12767 ELSE
12768
12769 Is_Include_Utilisation(p_person_id => lv_person_id,
12770 p_item_date => TmpDayTab(i).item_date,
12771 x_start_date => lv_start_date,
12772 x_end_date => lv_end_date,
12773 x_inc_util_flag => lv_inc_util_flag,
12774 x_return_status => lv_return_status,
12775 x_msg_count => x_msg_count,
12776 x_msg_data => x_msg_data);
12777 tmp_person_id := lv_person_id;
12778
12779 END IF;
12780
12781 IF lv_inc_util_flag IN ('NO', 'N') THEN
12782
12783 lv_new_util_sum_code := 'X';
12784
12785 ELSE
12786
12787 lv_new_util_sum_code := 'N';
12788
12789 END IF;
12790
12791 lv_provisional_flag := NULL;
12792
12793
12794 -- Print_message(
12795 -- 'Res - Get_work_type_details ');
12796
12797 -- Added IF condition for Bug 5552078
12798 -- If the work_type_id is same as the previous loop iteration then no need to fetch it from the database. NVL check added since work_type_id may be passed as null
12799 -- IF (nvl(TmpDayTab(i).work_type_id, -99) <> nvl(l_worktype_cache, -99)) THEN
12800 IF (nvl(TmpDayTab(i).work_type_id, -199) <> nvl(l_worktype_cache, -199)) THEN --Bug 6202828 Changed the nvl value from -99 to -199
12801 Print_message('PA_FORECASTITEM_PVT.Build_FI_Dtl_Res : TmpDayTab(i).work_type_id not same as the previous value, get from the database');
12802 PA_FORECAST_ITEMS_UTILS.get_work_type_details(
12803 TmpDayTab(i).work_type_id,
12804 lv_billable_flag,
12805 l_resutilweighted,
12806 l_orgutilweighted,
12807 l_resutilcategoryid,
12808 l_orgutilcategoryid,
12809 l_ReduceCapacityFlag);
12810 END IF;
12811 l_worktype_cache := TmpDayTab(i).work_type_id;
12812 -- End of changes for Bug 5552078
12813
12814 lv_next_line_num := 1;
12815
12816
12817 IF d_in <= p_DBDtlTab.COUNT THEN
12818
12819
12820 IF trunc(TmpDayTab(i).item_date) <
12821 trunc(p_DBDtlTab(d_in).item_date) THEN
12822
12823 -- New record
12824 lv_next_line_num := 1;
12825
12826 ELSIF trunc(TmpDayTab(i).item_date) =
12827 trunc(p_dbDtlTab(d_in).item_date) THEN
12828 -- Record exists
12829
12830 IF TmpDayTab(i).action_flag = 'C' THEN
12831
12832 -- Check IF there are changes in
12833 -- person_billable, resource_type
12834 -- work_type_id
12835 IF ((NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y')
12836 IN ('N', 'Y')
12837 AND lv_new_fcast_sum_code = 'X') OR
12838 (p_DBDtlTab(d_in).forecast_summarized_code = 'X'
12839 AND lv_new_fcast_sum_code = 'N') OR
12840 (NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y')
12841 IN ('N', 'Y')
12842 AND lv_new_util_sum_code = 'X') OR
12843 (p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG = 'X'
12844 AND lv_new_util_sum_code = 'N') OR
12845
12846 (NVL(p_DBDtlTab(d_in).util_summarized_code,'Y')
12847 IN ('N', 'Y')
12848 AND lv_new_util_sum_code = 'X') OR
12849 (p_DBDtlTab(d_in).util_summarized_code = 'X'
12850 AND lv_new_util_sum_code = 'N') OR
12851 (NVL(p_DBDtlTab(d_in).work_type_id,-99) <>
12852 NVL(TmpDayTab(i).work_type_id,-99)) OR
12853 (nvl(p_DBDtlTab(d_in).JOB_ID,-99) <>
12854 NVL(TmpDayTab(i).JOB_ID,-99)) OR
12855 (NVL(p_DBDtlTab(d_in).person_billable_flag,'Z') <>
12856 NVL(TmpDayTab(i).person_billable_flag,'Z')) OR
12857 (NVL(p_DBDtlTab(d_in).resource_type_code,'Z') <>
12858 NVL(lv_resource_type,'Z'))) THEN
12859
12860 TmpDayTab(i).action_flag := 'RN';
12861
12862 ELSE
12863
12864 TmpDayTab(i).action_flag := 'I';
12865
12866 END IF;
12867
12868 END IF;
12869
12870
12871 IF TmpDayTab(i).action_flag in ('DN', 'D') THEN
12872
12873 -- Change IN header attribute values
12874 -- update existing line FOR flags
12875 -- Reverse detail line IF forecast/util
12876 --summarization done
12877 -- IF summ not done IN existing line;
12878 -- item_quantity to zero
12879 -- net_zero flag to Y
12880 -- forecast/util summ_flag = 'X'
12881 -- New line generation is done at the end
12882
12883 lv_next_line_num := 1;
12884
12885 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y')
12886 IN ('N', 'X', 'E')
12887 AND NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y')
12888 IN ('N', 'X', 'E')
12889 AND NVl(p_DBDtlTab(d_in).util_summarized_code,'Y')
12890 IN ('N', 'X', 'E') THEN
12891
12892 TmpUpdTab(u_in) := p_dbDtlTab(d_in);
12893 TmpUpdTab(u_in).forecast_summarized_code := 'X';
12894 TmpUpdTab(u_in).PJI_SUMMARIZED_FLAG := 'X';
12895 TmpUpdTab(u_in).util_summarized_code := 'X';
12896 TmpUpdTab(u_in).CAPACITY_QUANTITY := NULL;
12897 TmpUpdTab(u_in).OVERCOMMITMENT_QTY := NULL;
12898 TmpUpdTab(u_in).OVERPROVISIONAL_QTY := NULL;
12899 TmpUpdTab(u_in).OVER_PROV_CONF_QTY := NULL;
12900 TmpUpdTab(u_in).CONFIRMED_QTY := NULL;
12901 TmpUpdTab(u_in).PROVISIONAL_QTY := NULL;
12902 TmpUpdTab(u_in).item_quantity := 0;
12903 TmpUpdTab(u_in).org_util_weighted :=0;
12904 TmpUpdTab(u_in).resource_util_weighted :=0;
12905 TmpUpdTab(u_in).net_zero_flag := 'Y';
12906 u_in := u_in + 1;
12907
12908 ELSE
12909
12910 TmpUpdTab(u_in) := p_DBDtlTab(d_in);
12911
12912 IF (
12913 p_DBDtlTab(d_in).CAPACITY_QUANTITY > 0 OR
12914 p_DBDtlTab(d_in).OVERCOMMITMENT_QTY > 0 OR
12915 p_DBDtlTab(d_in).OVERPROVISIONAL_QTY > 0 OR
12916 p_DBDtlTab(d_in).OVER_PROV_CONF_QTY > 0 OR
12917 p_DBDtlTab(d_in).CONFIRMED_QTY > 0 OR
12918 p_DBDtlTab(d_in).PROVISIONAL_QTY > 0 OR
12919 p_DBDtlTab(d_in).item_quantity > 0
12920 ) THEN
12921
12922 -- Generate reverse line
12923 TmpInsTab(i_in) := p_DBDtlTab(d_in);
12924 TmpInsTab(i_in).line_num :=
12925 p_DBDtlTab(d_in).line_num + 1;
12926 IF (NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) = 0) THEN
12927 TmpInsTab(i_in).CAPACITY_QUANTITY := NULL;
12928 ELSE
12929 TmpInsTab(i_in).CAPACITY_QUANTITY := NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) * -1;
12930 END IF;
12931 IF (NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) = 0) THEN
12932 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NULL;
12933 ELSE
12934 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) * -1;
12935 END IF;
12936 IF (NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) = 0) THEN
12937 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NULL;
12938 ELSE
12939 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) * -1;
12940 END IF;
12941 IF (NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) = 0) THEN
12942 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NULL;
12943 ELSE
12944 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) * -1;
12945 END IF;
12946 IF (NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) = 0) THEN
12947 TmpInsTab(i_in).CONFIRMED_QTY := NULL;
12948 ELSE
12949 TmpInsTab(i_in).CONFIRMED_QTY := NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) * -1;
12950 END IF;
12951 IF (NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) = 0) THEN
12952 TmpInsTab(i_in).PROVISIONAL_QTY := NULL;
12953 ELSE
12954 TmpInsTab(i_in).PROVISIONAL_QTY := NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) * -1;
12955 END IF;
12956 TmpInsTab(i_in).item_quantity :=
12957 TmpInsTab(i_in).item_quantity * -1;
12958 TmpInsTab(i_in).resource_util_weighted :=
12959 TmpInsTab(i_in).resource_util_weighted * -1;
12960 TmpInsTab(i_in).org_util_weighted :=
12961 TmpInsTab(i_in).org_util_weighted * -1;
12962 TmpInsTab(i_in).reversed_flag := 'N';
12963 TmpInsTab(i_in).line_num_reversed :=
12964 p_DBDtlTab(d_in).line_num;
12965 TmpInsTab(i_in).net_zero_flag := 'Y';
12966
12967 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y') =
12968 'Y' THEN
12969
12970 TmpInsTab(i_in).forecast_summarized_code :=
12971 'N';
12972
12973 ELSE
12974
12975 TmpInsTab(i_in).forecast_summarized_code :=
12976 p_DBDtlTab(d_in).forecast_summarized_code;
12977
12978 END IF;
12979
12980 IF NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y') = 'Y' THEN
12981 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG := 'N';
12982 ELSE
12983 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG :=
12984 p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG;
12985 END IF;
12986
12987 IF NVL(p_DBDtlTab(d_in).util_summarized_code,'Y') = 'Y'
12988 THEN
12989
12990 TmpInsTab(i_in).util_summarized_code := 'N';
12991
12992 ELSE
12993
12994 TmpInsTab(i_in).util_summarized_code :=
12995 p_DBDtlTab(d_in).util_summarized_code;
12996
12997 END IF;
12998
12999 i_in := i_in + 1;
13000
13001 -- update line
13002 TmpUpdTab(u_in).reversed_flag := 'Y';
13003
13004 END IF;
13005
13006 TmpUpdTab(u_in).net_zero_flag := 'Y';
13007 u_in := u_in + 1;
13008
13009 END IF;
13010
13011 ELSIF TmpDayTab(i).action_flag = 'RN' THEN
13012
13013 -- No change IN header
13014 -- There is change IN item_quantity/provisional_flag/
13015 -- include IN forecast/work_type_id
13016 -- If summarization is not done
13017 -- same line to be updated with new values
13018 -- generated. Save forecast_item_id
13019
13020 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y')
13021 IN ('N', 'X', 'E')
13022 AND NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y')
13023 IN ('N', 'X', 'E')
13024 AND NVL(p_DBDtlTab(d_in).util_summarized_code,'Y')
13025 IN ('N', 'X', 'E') THEN
13026
13027 TmpDayTab(i).action_flag := 'RU';
13028 TmpDayTab(i).forecast_item_id :=
13029 p_dbDtlTab(d_in).forecast_item_id;
13030 lv_next_line_num := p_DBDtlTab(d_in).line_num;
13031
13032 ELSE
13033
13034 TmpDayTab(i).forecast_item_id :=
13035 p_dbDtlTab(d_in).forecast_item_id;
13036
13037 TmpUpdTab(u_in) := p_DBDtlTab(d_in);
13038
13039 lv_next_line_num :=
13040 p_DBDtlTab(d_in).line_num + 1;
13041
13042 IF (
13043 nvl(p_DBDtlTab(d_in).CAPACITY_QUANTITY,0) > 0 OR
13044 nvl(p_DBDtlTab(d_in).OVERCOMMITMENT_QTY,0) > 0 OR
13045 nvl(p_DBDtlTab(d_in).OVERPROVISIONAL_QTY,0) > 0 OR
13046 nvl(p_DBDtlTab(d_in).OVER_PROV_CONF_QTY,0) > 0 OR
13047 nvl(p_DBDtlTab(d_in).CONFIRMED_QTY,0) > 0 OR
13048 nvl(p_DBDtlTab(d_in).PROVISIONAL_QTY,0) > 0 OR
13049 nvl(p_dbdtltab(d_in).item_quantity,0) > 0
13050 )THEN
13051
13052 -- Generate Reverse Line
13053 TmpInsTab(i_in) := p_DBDtlTab(d_in);
13054 TmpInsTab(i_in).line_num := lv_next_line_num;
13055 lv_next_line_num := lv_next_line_num + 1;
13056 IF (NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) = 0) THEN
13057 TmpInsTab(i_in).CAPACITY_QUANTITY := NULL;
13058 ELSE
13059 TmpInsTab(i_in).CAPACITY_QUANTITY := NVL(TmpInsTab(i_in).CAPACITY_QUANTITY,0) * -1;
13060 END IF;
13061 IF (NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) = 0) THEN
13062 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NULL;
13063 ELSE
13064 TmpInsTab(i_in).OVERCOMMITMENT_QTY := NVL(TmpInsTab(i_in).OVERCOMMITMENT_QTY,0) * -1;
13065 END IF;
13066 IF (NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) = 0) THEN
13067 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NULL;
13068 ELSE
13069 TmpInsTab(i_in).OVERPROVISIONAL_QTY := NVL(TmpInsTab(i_in).OVERPROVISIONAL_QTY,0) * -1;
13070 END IF;
13071 IF (NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) = 0) THEN
13072 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NULL;
13073 ELSE
13074 TmpInsTab(i_in).OVER_PROV_CONF_QTY := NVL(TmpInsTab(i_in).OVER_PROV_CONF_QTY,0) * -1;
13075 END IF;
13076 IF (NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) = 0) THEN
13077 TmpInsTab(i_in).CONFIRMED_QTY := NULL;
13078 ELSE
13079 TmpInsTab(i_in).CONFIRMED_QTY := NVL(TmpInsTab(i_in).CONFIRMED_QTY,0) * -1;
13080 END IF;
13081 IF (NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) = 0) THEN
13082 TmpInsTab(i_in).PROVISIONAL_QTY := NULL;
13083 ELSE
13084 TmpInsTab(i_in).PROVISIONAL_QTY := NVL(TmpInsTab(i_in).PROVISIONAL_QTY,0) * -1;
13085 END IF;
13086 TmpInsTab(i_in).item_quantity :=
13087 p_DBDtlTab(d_in).item_quantity * -1;
13088 TmpInsTab(i_in).resource_util_weighted :=
13089 p_DBDtlTab(d_in).resource_util_weighted * -1;
13090 TmpInsTab(i_in).org_util_weighted :=
13091 p_DBDtlTab(d_in).org_util_weighted * -1;
13092 TmpInsTab(i_in).reversed_flag := 'N';
13093 TmpInsTab(i_in).line_num_reversed :=
13094 p_DBDtlTab(d_in).line_num;
13095 TmpInsTab(i_in).net_zero_flag := 'Y';
13096
13097 IF NVL(p_DBDtlTab(d_in).forecast_summarized_code,'Y') =
13098 'Y' THEN
13099
13100 TmpInsTab(i_in).forecast_summarized_code :=
13101 'N';
13102 ELSE
13103
13104 TmpInsTab(i_in).forecast_summarized_code :=
13105 p_DBDtlTab(d_in).forecast_summarized_code;
13106
13107 END IF;
13108
13109 IF NVL(p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG,'Y') = 'Y' THEN
13110 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG := 'N';
13111 ELSE
13112 TmpInsTab(i_in).PJI_SUMMARIZED_FLAG :=
13113 p_DBDtlTab(d_in).PJI_SUMMARIZED_FLAG;
13114 END IF;
13115
13116 IF NVL(p_DBDtlTab(d_in).util_summarized_code,'Y') = 'Y'
13117 THEN
13118
13119 TmpInsTab(i_in).util_summarized_code := 'N';
13120
13121 ELSE
13122
13123 TmpInsTab(i_in).util_summarized_code :=
13124 p_DBDtlTab(d_in).util_summarized_code;
13125
13126 END IF;
13127
13128 i_in := i_in + 1;
13129
13130 -- update Line
13131 TmpUpdTab(u_in).reversed_flag := 'Y';
13132
13133 END IF;
13134
13135 TmpUpdTab(u_in).net_zero_flag := 'Y';
13136 u_in := u_in + 1;
13137
13138 END IF;
13139
13140 END IF;
13141
13142 d_in := d_in + 1;
13143
13144 END IF;
13145
13146 END IF;
13147
13148 -- N New record/new line
13149 -- DN Existing record has header changes
13150 -- New record/new line
13151 -- RN Existing record detail changes
13152 -- The values are already summarized
13153 -- Create new line
13154 -- RU Existing record has detail changes
13155 -- The values are not summarized
13156 -- update existing line with new values
13157 -- All attribute values are.FIRST generated IN Tmp_rec
13158 -- IF action_flag is N,DN,RN copied to TmpInsTab
13159 -- ELSE copied to TmpUpdTab
13160
13161 -- Start bug fix 2148257
13162 -- Remove item_quantity check because of new capacity records.
13163 -- IF (TmpDayTab(i).action_flag IN ('N', 'DN', 'RN','RU') AND
13164 -- TmpDayTab(i).item_quantity > 0 ) THEN
13165 IF (TmpDayTab(i).action_flag IN ('N', 'DN', 'RN','RU') AND
13166 (NVL(TmpDayTab(i).item_quantity,0) > 0 OR
13167 NVL(TmpDayTab(i).OVERPROVISIONAL_QTY,0) > 0 OR
13168 NVL(TmpDayTab(i).OVER_PROV_CONF_QTY,0) > 0 OR
13169 NVL(TmpDayTab(i).CONFIRMED_QTY,0) > 0 OR
13170 NVL(TmpDayTab(i).PROVISIONAL_QTY,0) > 0 OR
13171 NVL(TmpDayTab(i).capacity_quantity,0) > 0 OR
13172 NVL(TmpDayTab(i).availability_quantity,0) > 0 OR
13173 NVL(TmpDayTab(i).overcommitment_quantity,0) > 0)) THEN
13174 -- End bug fix 2148257
13175
13176 -- create new line
13177 TmpDtlRec.forecast_item_id := TmpDayTab(i).forecast_item_id;
13178 TmpDtlRec.amount_type_id := lv_amount_type_id;
13179 TmpDtlRec.line_num := lv_next_line_num;
13180 TmpDtlRec.resource_type_code := lv_resource_type;
13181 TmpDtlRec.person_billable_flag :=
13182 TmpDayTab(i).person_billable_flag;
13183 TmpDtlRec.item_date := TmpDayTab(i).item_date;
13184 TmpDtlRec.expenditure_org_id :=
13185 TmpDayTab(i).expenditure_org_id;
13186 TmpDtlRec.job_id :=
13187 TmpDayTab(i).job_id;
13188 TmpDtlRec.project_id :=
13189 TmpDayTab(i).project_id;
13190 TmpDtlRec.resource_id :=
13191 TmpDayTab(i).resource_id;
13192 TmpDtlRec.expenditure_organization_id :=
13193 TmpDayTab(i).expenditure_organization_id;
13194 TmpDtlRec.project_org_id := TmpDayTab(i).project_org_id;
13195 TmpDtlRec.item_uom := 'HOURS';
13196 TmpDtlRec.CAPACITY_QUANTITY := TmpDayTab(i).CAPACITY_QUANTITY;
13197 TmpDtlRec.OVERCOMMITMENT_QTY := TmpDayTab(i).OVERCOMMITMENT_QTY;
13198 TmpDtlRec.OVERPROVISIONAL_QTY := TmpDayTab(i).OVERPROVISIONAL_QTY;
13199 TmpDtlRec.OVER_PROV_CONF_QTY := TmpDayTab(i).OVER_PROV_CONF_QTY;
13200 TmpDtlRec.CONFIRMED_QTY := TmpDayTab(i).CONFIRMED_QTY;
13201 TmpDtlRec.PROVISIONAL_QTY := TmpDayTab(i).PROVISIONAL_QTY;
13202 TmpDtlRec.item_quantity := TmpDayTab(i).item_quantity;
13203 TmpDtlRec.pvdr_acct_curr_code := NULL;
13204 TmpDtlRec.pvdr_acct_amount := NULL;
13205 TmpDtlRec.rcvr_acct_curr_code := NULL;
13206 TmpDtlRec.rcvr_acct_amount := NULL;
13207 TmpDtlRec.proj_currency_code := NULL;
13208 TmpDtlRec.proj_amount := NULL;
13209 TmpDtlRec.denom_currency_code := NULL;
13210 TmpDtlRec.denom_amount := NULL;
13211 TmpDtlRec.tp_amount_type := TmpDayTab(i).tp_amount_type;
13212 TmpDtlRec.billable_flag := lv_billable_flag;
13213 TmpDtlRec.forecast_summarized_code :=
13214 lv_new_fcast_sum_code ;
13215 TmpDtlRec.PJI_SUMMARIZED_FLAG := lv_new_util_sum_code;
13216 TmpDtlRec.util_summarized_code :=
13217 lv_new_util_sum_code ;
13218
13219 IF TmpDayTab(i).Error_flag = 'Y' THEN
13220
13221 TmpDtlRec.PJI_SUMMARIZED_FLAG := 'E';
13222 TmpDtlRec.util_summarized_code := 'E';
13223 TmpDtlRec.forecast_summarized_code := 'E';
13224
13225 END IF;
13226
13227 TmpDtlRec.work_type_id := TmpDayTab(i).work_type_id;
13228 TmpDtlRec.resource_util_category_id :=
13229 l_resutilcategoryid;
13230 TmpDtlRec.org_util_category_id :=
13231 l_orgutilcategoryid;
13232 TmpDtlRec.resource_util_weighted :=
13233 TmpDayTab(i).item_quantity *
13234 l_resutilweighted/100;
13235 TmpDtlRec.org_util_weighted :=
13236 TmpDayTab(i).item_quantity *
13237 l_orgutilweighted/100;
13238 TmpDtlRec.Reduce_Capacity_Flag := l_ReduceCapacityFlag;
13239 TmpDtlRec.provisional_flag := 'N';
13240 TmpDtlRec.reversed_flag := 'N';
13241 TmpDtlRec.net_zero_flag := 'N';
13242 TmpDtlRec.line_num_reversed := 0;
13243
13244 IF TmpDayTab(i).action_flag = 'RU' THEN
13245
13246 TmpUpdTab(u_in) := TmpDtlRec;
13247 u_in := u_in + 1;
13248
13249 ELSE
13250
13251 TmpInsTab(i_in) := TmpDtlRec;
13252 i_in := i_in + 1;
13253
13254 END IF;
13255
13256 /*
13257 Print_message('***********');
13258
13259 Print_message(
13260 'item_date:' || TmpDtlRec.item_date);
13261
13262 Print_message(
13263 'fct_item_id:' || TmpDtlRec.forecast_item_id ||
13264 ' amt_typ_id:' || TmpDtlRec.amount_type_id ||
13265 ' line_num:' || TmpDtlRec.line_num ||
13266 chr(10) || 'Res_typ_cd :' ||
13267 TmpDtlRec.resource_type_code ||
13268 ' per_bil_fl:' ||
13269 TmpDtlRec.person_billable_flag ||
13270 ' item_uom:' || TmpDtlRec.item_uom );
13271
13272 Print_message(
13273 ' item_qty:' || TmpDtlRec.item_quantity ||
13274 ' exp_org_id:' ||
13275 TmpDtlRec.expenditure_org_id ||
13276 ' prj_org_id:' ||
13277 TmpDtlRec.project_org_id ||
13278 ' tp_amt_typ:' || TmpDtlRec.tp_amount_type ||
13279 chr(10) || 'bill_flag:' || TmpDtlRec.billable_flag ||
13280 ' fcs_sum_cd:' ||
13281 TmpDtlRec.forecast_summarized_code ||
13282 ' utl_sum_cd:' ||
13283 TmpDtlRec.util_summarized_code );
13284
13285 Print_message(
13286 ' wrk_typ_id:' || TmpDtlRec.work_type_id ||
13287 ' res_utl_id:' ||
13288 TmpDtlRec.resource_util_category_id ||
13289 ' org_utl_id:' ||
13290 TmpDtlRec.org_util_category_id ||
13291 ' res_utl_wt:' ||
13292 TmpDtlRec.resource_util_weighted ||
13293 chr(10) || 'org_utl_wt:' ||
13294 TmpDtlRec.org_util_weighted ||
13295 ' prv_flag:' || TmpDtlRec.provisional_flag ||
13296 ' rev_flag:' || TmpDtlRec.reversed_flag ||
13297 ' net_zer_fl:' || TmpDtlRec.net_zero_flag ||
13298 ' ln_num_rev:' ||
13299 TmpDtlRec.line_num_reversed);
13300 */
13301
13302 END IF;
13303 end if;
13304 END LOOP;
13305 end if;
13306
13307
13308 x_FIDtlInsTab := TmpInsTab;
13309 x_FIDtlUpdTab := TmpUpdTab;
13310
13311 Print_message('Leaving Build_FI_Dtl_Res');
13312
13313 x_return_status := FND_API.G_RET_STS_SUCCESS;
13314
13315 PA_DEBUG.Reset_Err_Stack;
13316
13317 x_return_status := lv_return_status;
13318
13319 EXCEPTION
13320
13321 WHEN OTHERS THEN
13322 Print_message('Failed in Build_FI_Dtl_Res api');
13323 Print_message('SQLERR '||sqlcode||sqlerrm);
13324
13325 x_msg_count := 1;
13326 x_msg_data := sqlerrm;
13327 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13328
13329 FND_MSG_PUB.add_exc_msg
13330 (p_pkg_name =>
13331 'PA_FORECASTITEM_PVT.Build_FI_Dtl_Res',
13332 p_procedure_name => PA_DEBUG.G_Err_Stack);
13333
13334 If x_msg_count = 1 THEN
13335 pa_interface_utils_pub.get_messages
13336 (p_encoded => FND_API.G_TRUE,
13337 p_msg_index => 1,
13338 p_msg_count => x_msg_count,
13339 p_msg_data => x_msg_data,
13340 p_data => l_data, -- 4537865
13341 p_msg_index_out => l_msg_index_out );
13342 x_msg_data := l_data ; -- 4537865
13343 End If;
13344 Print_message(x_msg_data);
13345
13346
13347 RAISE;
13348
13349
13350 END Build_FI_Dtl_Res;
13351
13352 /* ---------------------------------------------------------------------
13353 | Procedure : Resource_Unasg_Error_Process
13354 | Purpose : To process errored out records (by previous run)of
13355 | resource unassigned time
13356 | Parameters : p_ErrHdrTab - Table of Resource forecast items which
13357 | have errored out IN previous runs.
13358 | It has the format of pa_forecast_item
13359 | table
13360 | p_process_mode - Mode of Processing.
13361 | a) ERROR : Regeneration of Errored forecast items
13362 | by previous runs
13363 | x_return_status -
13364 | x_msg_count -
13365 | x_msg_data -
13366 +----------------------------------------------------------------------*/
13367 PROCEDURE Resource_Unasg_Error_Process(
13368 p_ErrHdrTab IN PA_FORECAST_GLOB.FIHdrTabTyp,
13369 p_process_mode IN VARCHAR2,
13370 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
13371 x_msg_count OUT NOCOPY NUMBER, -- 4537865
13372 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
13373
13374 l_msg_index_out NUMBER;
13375 l_data varchar2(2000); -- 4537865
13376 lv_prev_resource_id NUMBER;
13377 lv_next_date DATE;
13378 lv_start_date DATE;
13379 lv_end_date DATE;
13380 TmpHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
13381 lv_ind NUMBER;
13382
13383 lv_return_status VARCHAR2(30);
13384
13385 BEGIN
13386
13387 lv_return_status := FND_API.G_RET_STS_SUCCESS;
13388
13389 Print_message(
13390 'Entering Resource_Unasg_Error_Process');
13391
13392 PA_DEBUG.Init_err_stack(
13393 'PA_FORECASTITEM_PVT.Resource_Unasg_Error_Process');
13394
13395 lv_prev_resource_id := p_ErrHdrTab(p_ErrHdrTab.FIRST).resource_id;
13396 lv_next_date := p_ErrHdrTab(p_ErrHdrTab.FIRST).item_date ;
13397 lv_start_date := p_ErrHdrTab(p_ErrHdrTab.FIRST).item_date ;
13398 lv_ind := 1;
13399
13400 TmpHdrTab.Delete;
13401
13402 if (p_ErrHdrTab.count <> 0) then
13403 FOR i IN p_ErrHdrTab.FIRST..p_ErrHdrTab.LAST LOOP
13404 if p_ErrHdrTab.exists(i) then
13405
13406 IF ((lv_prev_resource_id <> p_ErrHdrTab(i).resource_id) OR
13407 (trunc(p_ErrHdrTab(i).item_date) <>
13408 trunc(lv_next_date) )) THEN
13409
13410 lv_end_date := lv_next_date - 1;
13411
13412 Print_message(
13413 'Calling Regenerate_Res_Unassigned_FI');
13414
13415 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
13416
13417 Regenerate_Res_Unassigned_FI(
13418 p_resource_id => lv_prev_resource_id,
13419 p_start_date => lv_start_date,
13420 p_end_date => lv_end_date,
13421 p_process_mode => p_process_mode,
13422 p_ErrHdrTab => TmpHdrTab,
13423 x_return_status => lv_return_status,
13424 x_msg_count => x_msg_count,
13425 x_msg_data => x_msg_data );
13426 END IF;
13427
13428 lv_prev_resource_id := p_ErrHdrTab(i).resource_id;
13429 lv_start_date := p_ErrHdrTab(i).item_date;
13430 lv_next_date := p_ErrHdrTab(i).item_date;
13431 TmpHdrTab.delete;
13432 lv_ind := 1;
13433
13434 END IF;
13435
13436 TmpHdrTab(lv_ind) := p_ErrHdrTab(i);
13437 lv_ind := lv_ind + 1;
13438 lv_next_date := lv_next_date + 1;
13439 end if;
13440 END LOOP;
13441 end if;
13442
13443 -- Do FOR.LAST record.LAST set of records
13444 lv_end_date := p_ErrHdrTab(p_ErrHdrTab.LAST).item_date;
13445
13446 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
13447
13448 Print_message( 'Calling Regenerate_Res_Unassigned_FI 2 ');
13449
13450 Regenerate_Res_Unassigned_FI(
13451 p_resource_id => lv_prev_resource_id,
13452 p_start_date => lv_start_date,
13453 p_end_date => lv_end_date,
13454 p_process_mode => p_process_mode,
13455 p_ErrHdrTab => TmpHdrTab,
13456 x_return_status => lv_return_status,
13457 x_msg_count => x_msg_count,
13458 x_msg_data => x_msg_data );
13459 END IF;
13460
13461
13462 Print_message(
13463 'Leaving Resource_Unasg_Error_Process');
13464
13465 PA_DEBUG.Reset_Err_Stack;
13466
13467 x_return_status := lv_return_status;
13468
13469 EXCEPTION
13470
13471 WHEN OTHERS THEN
13472 Print_message('Failed in Resource_Unasg_Error_Process api');
13473 Print_message('SQLERR '||sqlcode||sqlerrm);
13474
13475 x_msg_count := 1;
13476 x_msg_data := sqlerrm;
13477 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13478
13479 FND_MSG_PUB.add_exc_msg
13480 (p_pkg_name =>
13481 'PA_FORECASTITEM_PVT.Resource_Unasg_Error_Process',
13482 p_procedure_name => PA_DEBUG.G_Err_Stack);
13483
13484 If x_msg_count = 1 THEN
13485 pa_interface_utils_pub.get_messages
13486 (p_encoded => FND_API.G_TRUE,
13487 p_msg_index => 1,
13488 p_msg_count => x_msg_count,
13489 p_msg_data => x_msg_data,
13490 p_data => l_data, -- 4537865
13491 p_msg_index_out => l_msg_index_out );
13492 x_msg_data := l_data ; -- 4537865
13493 End If;
13494 Print_message(x_msg_data);
13495
13496
13497 RAISE;
13498
13499 END Resource_Unasg_Error_Process;
13500
13501 /* ---------------------------------------------------------------------
13502 | Procedure : FI_Error_Process
13503 | Purpose : To process errored out records (by previous run)of
13504 | Requirement/Assignment Forecast Item
13505 | Parameters : p_AsgnDtlRec - Details of the assignment FOR which
13506 | forecast item is to be re-generated
13507 | a) ERROR : Regeneration of Errored forecast items
13508 | by previous runs
13509 | x_return_status -
13510 | x_msg_count -
13511 | x_msg_data -
13512 +----------------------------------------------------------------------*/
13513
13514 PROCEDURE FI_Error_Process(
13515 p_AsgnDtlRec IN PA_FORECAST_GLOB.AsgnDtlRecord,
13516 p_Process_Mode IN VARCHAR2,
13517 p_start_date IN DATE,
13518 p_end_date IN DATE,
13519 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
13520 x_msg_count OUT NOCOPY NUMBER, -- 4537865
13521 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
13522
13523 l_data varchar2(2000); -- 4537865
13524 l_msg_index_out NUMBER;
13525 TmpErrHdrTab PA_FORECAST_GLOB.FIHdrTabtyp;
13526
13527 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
13528 forecast_item_type_tab PA_FORECAST_GLOB.VCTabTyp;
13529 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
13530 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
13531 expenditure_orgn_id_tab PA_FORECAST_GLOB.NumberTabTyp;
13532 project_organization_id_tab PA_FORECAST_GLOB.NumberTabTyp;
13533 project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
13534 project_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
13535 person_id_tab PA_FORECAST_GLOB.NumberTabTyp;
13536 resource_id_tab PA_FORECAST_GLOB.NumberTabTyp;
13537 borrowed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
13538 assignment_id_tab PA_FORECAST_GLOB.NumberTabTyp;
13539 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
13540 item_uom_tab PA_FORECAST_GLOB.VCTabTyp;
13541 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
13542 pvdr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
13543 pvdr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
13544 pvdr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
13545 rcvr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
13546 rcvr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
13547 rcvr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
13548 global_exp_period_end_date_tab PA_FORECAST_GLOB.DateTabTyp;
13549 expenditure_type_tab PA_FORECAST_GLOB.VCTabTyp;
13550 expenditure_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
13551 cost_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
13552 rev_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
13553 tp_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
13554 burden_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
13555 other_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
13556 delete_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
13557 error_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
13558 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
13559 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
13560 TP_AMOUNT_TYPE_tab PA_FORECAST_GLOB.VCTabTyp;
13561 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
13562 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
13563 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
13564 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
13565 asgmt_sys_status_code_tab PA_FORECAST_GLOB.VCTabTyp;
13566 capacity_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
13567 overcommitment_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
13568 availability_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
13569 overcommitment_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
13570 availability_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
13571
13572 lv_prev_asgn_id NUMBER;
13573 lv_next_date DATE;
13574 lv_start_date DATE;
13575 lv_end_date DATE;
13576 TmpHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
13577 lv_ind NUMBER;
13578
13579 lv_dmy_start_date DATE;
13580 lv_dmy_end_date DATE;
13581
13582 lv_return_status VARCHAR2(30);
13583
13584 BEGIN
13585
13586 lv_return_status := FND_API.G_RET_STS_SUCCESS;
13587
13588 Print_message ( 'Entering FI_Error_Process');
13589
13590 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.FI_Error_Process');
13591
13592 forecast_item_id_tab.delete;
13593 forecast_item_type_tab.delete;
13594 project_org_id_tab.delete;
13595 expenditure_org_id_tab.delete;
13596 expenditure_orgn_id_tab.delete;
13597 project_organization_id_tab.delete;
13598 project_id_tab.delete;
13599 project_type_class_tab.delete;
13600 person_id_tab.delete;
13601 resource_id_tab.delete;
13602 borrowed_flag_tab.delete;
13603 assignment_id_tab.delete;
13604 item_date_tab.delete;
13605 item_uom_tab.delete;
13606 item_quantity_tab.delete;
13607 pvdr_period_set_name_tab.delete;
13608 pvdr_pa_period_name_tab.delete;
13609 pvdr_gl_period_name_tab.delete;
13610 rcvr_period_set_name_tab.delete;
13611 rcvr_pa_period_name_tab.delete;
13612 rcvr_gl_period_name_tab.delete;
13613 global_exp_period_end_date_tab.delete;
13614 expenditure_type_tab.delete;
13615 expenditure_type_class_tab.delete;
13616 cost_rejection_code_tab.delete;
13617 rev_rejection_code_tab.delete;
13618 tp_rejection_code_tab.delete;
13619 burden_rejection_code_tab.delete;
13620 other_rejection_code_tab.delete;
13621 delete_flag_tab.delete;
13622 error_flag_tab.delete;
13623 provisional_flag_tab.delete;
13624 JOB_ID_tab.delete;
13625 TP_AMOUNT_TYPE_tab.delete;
13626 OVERPROVISIONAL_QTY_tab.delete;
13627 OVER_PROV_CONF_QTY_tab.delete;
13628 CONFIRMED_QTY_tab.delete;
13629 PROVISIONAL_QTY_tab.delete;
13630 asgmt_sys_status_code_tab.delete;
13631 capacity_quantity_tab.delete;
13632 overcommitment_quantity_tab.delete;
13633 availability_quantity_tab.delete;
13634 overcommitment_flag_tab.delete;
13635 availability_flag_tab.delete;
13636
13637 SELECT forecast_item_id, forecast_item_type,
13638 project_org_id , expenditure_org_id,
13639 project_organization_id, expenditure_organization_id ,
13640 project_id, project_type_class, person_id ,
13641 resource_id, borrowed_flag, assignment_id,
13642 item_date, item_uom, item_quantity,
13643 pvdr_period_set_name, pvdr_pa_period_name,
13644 pvdr_gl_period_name, rcvr_period_set_name,
13645 rcvr_pa_period_name, rcvr_gl_period_name,
13646 global_exp_period_end_date, expenditure_type,
13647 expenditure_type_class, cost_rejection_code,
13648 rev_rejection_code, tp_rejection_code,
13649 burden_rejection_code, other_rejection_code,
13650 delete_flag, error_flag, provisional_flag,
13651 JOB_ID,
13652 TP_AMOUNT_TYPE,
13653 OVERPROVISIONAL_QTY,
13654 OVER_PROV_CONF_QTY,
13655 CONFIRMED_QTY,
13656 PROVISIONAL_QTY,
13657 asgmt_sys_status_code, capacity_quantity,
13658 overcommitment_quantity, availability_quantity,
13659 overcommitment_flag, availability_flag
13660 BULK COLLECT INTO forecast_item_id_tab, forecast_item_type_tab,
13661 project_org_id_tab, expenditure_org_id_tab,
13662 project_organization_id_tab, expenditure_orgn_id_tab,
13663 project_id_tab, project_type_class_tab, person_id_tab,
13664 resource_id_tab, borrowed_flag_tab, assignment_id_tab,
13665 item_date_tab, item_uom_tab, item_quantity_tab,
13666 pvdr_period_set_name_tab, pvdr_pa_period_name_tab,
13667 pvdr_gl_period_name_tab, rcvr_period_set_name_tab,
13668 rcvr_pa_period_name_tab, rcvr_gl_period_name_tab,
13669 global_exp_period_end_date_tab, expenditure_type_tab,
13670 expenditure_type_class_tab, cost_rejection_code_tab,
13671 rev_rejection_code_tab, tp_rejection_code_tab,
13672 burden_rejection_code_tab, other_rejection_code_tab,
13673 delete_flag_tab, error_flag_tab, provisional_flag_tab,
13674 JOB_ID_tab,
13675 TP_AMOUNT_TYPE_tab,
13676 OVERPROVISIONAL_QTY_tab,
13677 OVER_PROV_CONF_QTY_tab,
13678 CONFIRMED_QTY_tab,
13679 PROVISIONAL_QTY_tab,
13680 asgmt_sys_status_code_tab, capacity_quantity_tab,
13681 overcommitment_quantity_tab, availability_quantity_tab,
13682 overcommitment_flag_tab, availability_flag_tab
13683 FROM pa_forecast_items
13684 WHERE assignment_id = p_AsgnDtlRec.assignment_id
13685 AND delete_flag = 'N'
13686 AND error_flag = 'Y'
13687 /* Modified for bug 3998166
13688 AND trunc(item_date) BETWEEN trunc(p_start_date) AND
13689 trunc(p_end_date) */
13690 AND item_date BETWEEN trunc(p_start_date) AND
13691 (trunc(p_end_date)+ 0.99999)
13692 order by item_date, forecast_item_id ;
13693
13694
13695 IF forecast_item_id_tab.COUNT = 0 THEN
13696
13697 Print_message ( 'Leaving FI_Error_Process');
13698 x_return_status := lv_return_status;
13699
13700 RETURN;
13701
13702 END IF;
13703
13704 -- Move to one table FROM multiple tables
13705
13706 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST LOOP
13707
13708
13709 TmpErrHdrTab(j).forecast_item_id := forecast_item_id_tab(j);
13710 TmpErrHdrTab(j).forecast_item_type :=
13711 forecast_item_type_tab(j);
13712 TmpErrHdrTab(j).project_org_id := project_org_id_tab(j);
13713 TmpErrHdrTab(j).expenditure_org_id :=
13714 expenditure_org_id_tab(j);
13715 TmpErrHdrTab(j).project_organization_id :=
13716 project_organization_id_tab(j);
13717 TmpErrHdrTab(j).expenditure_organization_id :=
13718 expenditure_orgn_id_tab(j);
13719 TmpErrHdrTab(j).project_id := project_id_tab(j);
13720 TmpErrHdrTab(j).project_type_class :=
13721 project_type_class_tab(j);
13722 TmpErrHdrTab(j).person_id := person_id_tab(j);
13723 TmpErrHdrTab(j).resource_id := resource_id_tab(j);
13724 TmpErrHdrTab(j).borrowed_flag := borrowed_flag_tab(j);
13725 TmpErrHdrTab(j).assignment_id := assignment_id_tab(j);
13726 TmpErrHdrTab(j).item_date := item_date_tab(j);
13727 TmpErrHdrTab(j).item_uom := item_uom_tab(j);
13728 TmpErrHdrTab(j).item_quantity := item_quantity_tab(j);
13729 TmpErrHdrTab(j).pvdr_period_set_name :=
13730 pvdr_period_set_name_tab(j);
13731 TmpErrHdrTab(j).pvdr_pa_period_name :=
13732 pvdr_pa_period_name_tab(j);
13733 TmpErrHdrTab(j).pvdr_gl_period_name :=
13734 pvdr_gl_period_name_tab(j);
13735 TmpErrHdrTab(j).rcvr_period_set_name :=
13736 rcvr_period_set_name_tab(j);
13737 TmpErrHdrTab(j).rcvr_pa_period_name :=
13738 rcvr_pa_period_name_tab(j);
13739 TmpErrHdrTab(j).rcvr_gl_period_name :=
13740 rcvr_gl_period_name_tab(j);
13741 TmpErrHdrTab(j).global_exp_period_end_date :=
13742 global_exp_period_end_date_tab(j);
13743 TmpErrHdrTab(j).expenditure_type := expenditure_type_tab(j);
13744 TmpErrHdrTab(j).expenditure_type_class :=
13745 expenditure_type_class_tab(j);
13746 TmpErrHdrTab(j).cost_rejection_code :=
13747 cost_rejection_code_tab(j);
13748 TmpErrHdrTab(j).rev_rejection_code :=
13749 rev_rejection_code_tab(j);
13750 TmpErrHdrTab(j).tp_rejection_code := tp_rejection_code_tab(j);
13751 TmpErrHdrTab(j).burden_rejection_code :=
13752 burden_rejection_code_tab(j);
13753 TmpErrHdrTab(j).other_rejection_code :=
13754 other_rejection_code_tab(j);
13755 TmpErrHdrTab(j).delete_flag := delete_flag_tab(j);
13756 TmpErrHdrTab(j).error_flag := error_flag_tab(j);
13757 TmpErrHdrTab(j).provisional_flag := provisional_flag_tab(j);
13758 TmpErrHdrTab(j).JOB_ID := JOB_ID_tab(j);
13759 TmpErrHdrTab(j).TP_AMOUNT_TYPE := TP_AMOUNT_TYPE_tab(j);
13760 TmpErrHdrTab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
13761 TmpErrHdrTab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
13762 TmpErrHdrTab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
13763 TmpErrHdrTab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
13764 TmpErrHdrTab(j).asgmt_sys_status_code := asgmt_sys_status_code_tab(j);
13765 TmpErrHdrTab(j).capacity_quantity := capacity_quantity_tab(j);
13766 TmpErrHdrTab(j).overcommitment_quantity := overcommitment_quantity_tab(j);
13767 TmpErrHdrTab(j).availability_quantity := availability_quantity_tab(j);
13768 TmpErrHdrTab(j).overcommitment_flag := overcommitment_flag_tab(j);
13769 TmpErrHdrTab(j).availability_flag := availability_flag_tab(j);
13770
13771 END LOOP;
13772
13773 lv_next_date := TmpErrHdrTab(TmpErrHdrTab.FIRST).item_date ;
13774 lv_start_date := TmpErrHdrTab(TmpErrHdrTab.FIRST).item_date ;
13775 lv_ind := 1;
13776
13777 if (TmpErrHdrTab.count <> 0) then
13778 FOR i IN TmpErrHdrTab.FIRST..TmpErrHdrTab.LAST LOOP
13779 if TmpErrHdrTab.exists(i) then
13780
13781 IF ( trunc(TmpErrHdrTab(i).item_date) <>
13782 trunc(lv_next_date) ) THEN
13783
13784 lv_end_date := lv_next_date - 1;
13785
13786 IF p_AsgnDtlRec.assignment_type = 'OPEN_ASGMT' THEN
13787
13788
13789 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
13790
13791 Print_message ( 'Calling Generate_Requirement_FI ');
13792
13793 Generate_Requirement_FI(
13794 p_AsgnDtlRec => p_AsgnDtlRec,
13795 p_start_date => lv_start_date,
13796 p_end_date => lv_end_date,
13797 p_process_mode => p_process_mode,
13798 p_ErrHdrTab => TmpHdrTab,
13799 x_return_status => lv_return_status,
13800 x_msg_count => x_msg_count,
13801 x_msg_data => x_msg_data );
13802 END IF;
13803
13804 ELSE
13805
13806 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
13807
13808 Print_message ( 'Calling Generate_Assignment_FI ');
13809
13810 Generate_Assignment_FI(
13811 p_AsgnDtlRec => p_AsgnDtlRec,
13812 p_start_date => lv_start_date,
13813 p_end_date => lv_end_date,
13814 p_process_mode => p_process_mode,
13815 p_ErrHdrTab => TmpHdrTab,
13816 x_res_start_date => lv_dmy_start_date,
13817 x_res_end_date => lv_dmy_end_date,
13818 x_return_status => lv_return_status,
13819 x_msg_count => x_msg_count,
13820 x_msg_data => x_msg_data );
13821 END IF;
13822
13823 END IF;
13824
13825 lv_start_date := TmpErrHdrTab(i).item_date;
13826 lv_next_date := TmpErrHdrTab(i).item_date;
13827 TmpHdrTab.delete;
13828 lv_ind := 1;
13829
13830 END IF;
13831
13832 TmpHdrTab(lv_ind) := TmpErrHdrTab(i);
13833 lv_ind := lv_ind + 1;
13834 lv_next_date := lv_next_date + 1;
13835 end if;
13836 END LOOP;
13837 end if;
13838
13839 -- Do FOR.LAST record.LAST set of records
13840 lv_end_date := TmpErrHdrTab(TmpErrHdrTab.LAST).item_date;
13841
13842 IF p_AsgnDtlRec.assignment_type = 'OPEN_ASGMT' THEN
13843
13844 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
13845
13846 Print_message ( 'Calling Generate_Requirement_FI ');
13847
13848 Generate_Requirement_FI(
13849 p_AsgnDtlRec => p_AsgnDtlRec,
13850 p_start_date => lv_start_date,
13851 p_end_date => lv_end_date,
13852 p_process_mode => p_process_mode,
13853 p_ErrHdrTab => TmpHdrTab,
13854 x_return_status => lv_return_status,
13855 x_msg_count => x_msg_count,
13856 x_msg_data => x_msg_data );
13857 END IF;
13858
13859 ELSE
13860
13861 IF lv_return_status = FND_API.G_RET_STS_SUCCESS THEN
13862
13863 Print_message ( 'Calling Generate_Assignment_FI ');
13864
13865 Generate_Assignment_FI(
13866 p_AsgnDtlRec =>p_AsgnDtlRec,
13867 p_start_date => lv_start_date,
13868 p_end_date => lv_end_date,
13869 p_process_mode => p_process_mode,
13870 p_ErrHdrTab => TmpHdrTab,
13871 x_res_start_date => lv_dmy_start_date,
13872 x_res_end_date => lv_dmy_end_date,
13873 x_return_status => lv_return_status,
13874 x_msg_count => x_msg_count,
13875 x_msg_data => x_msg_data );
13876 END IF;
13877
13878 END IF;
13879
13880
13881 Print_message (
13882 'Leaving FI_Error_Process');
13883
13884 PA_DEBUG.Reset_Err_Stack;
13885
13886 x_return_status := lv_return_status;
13887
13888 EXCEPTION
13889
13890 WHEN OTHERS THEN
13891 print_message('Failed in FI_Error_Process api');
13892 print_message('SQLCODE'||sqlcode||sqlerrm);
13893 x_msg_count := 1;
13894 x_msg_data := sqlerrm;
13895 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13896
13897 FND_MSG_PUB.add_exc_msg
13898 (p_pkg_name =>
13899 'PA_FORECASTITEM_PVT.FI_Error_Process',
13900 p_procedure_name => PA_DEBUG.G_Err_Stack);
13901
13902 If x_msg_count = 1 THEN
13903 pa_interface_utils_pub.get_messages
13904 (p_encoded => FND_API.G_TRUE,
13905 p_msg_index => 1,
13906 p_msg_count => x_msg_count,
13907 p_msg_data => x_msg_data,
13908 p_data => l_data, -- 4537865
13909 p_msg_index_out => l_msg_index_out );
13910 x_msg_data := l_data ;
13911 End If;
13912 Print_message(x_msg_data);
13913
13914 RAISE;
13915
13916
13917 END FI_Error_Process;
13918
13919
13920 /* ---------------------------------------------------------------------
13921 | Procedure : Regenrate_Asgn_Req
13922 | Purpose : It will generate the forecast item for those records
13923 | which has got error out in the first generation and
13924 | will generate for those items also which has process
13925 | mode as 'ERROR'
13926 | Parameters Type Required Description
13927 | p_orgz_id NUMBER YES Orgn id
13928 | p_start_date DATE YES Start date
13929 | p_end_date DATE YES End date
13930 | p_process_mode VARCHAR2 YES Process mode i.e.
13931 | 'ERROR'
13932 +----------------------------------------------------------------------*/
13933 PROCEDURE Regenrate_Asgn_Req(
13934 p_orgz_id IN NUMBER,
13935 p_start_date IN DATE,
13936 p_end_date IN DATE,
13937 p_process_mode IN VARCHAR2,
13938 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
13939 x_msg_count OUT NOCOPY NUMBER, -- 4537865
13940 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
13941
13942 -- This cursor will store all the record according to
13943 -- the process mode i.e. ERROR or RECALCULATE
13944
13945 /* Bug 4918687 SQL ID 14905697 CURSOR asgmt_dtls IS
13946 SELECT proj_asgn.assignment_id,'ERROR'l_process_mode,
13947 proj_asgn.start_date,proj_asgn.end_date
13948 FROM pa_project_assignments proj_asgn
13949 WHERE proj_asgn.expenditure_organization_id = p_orgz_id
13950 AND proj_asgn.template_flag = 'N'
13951 AND p_start_date IS NOT NULL
13952 AND p_end_date IS NOT NULL
13953 AND EXISTS ( SELECT null
13954 FROM pa_forecast_items frcst_itms
13955 WHERE proj_asgn.assignment_id =
13956 frcst_itms.assignment_id
13957 AND frcst_itms.delete_flag = 'N'
13958 AND frcst_itms.error_flag =
13959 DECODE(p_process_mode,'ERROR','Y',
13960 frcst_itms.error_flag)
13961 AND trunc(frcst_itms.item_date) BETWEEN
13962 trunc(p_start_date) AND
13963 trunc(p_end_date))
13964
13965 UNION
13966 SELECT proj_asgn.assignment_id,'ERROR'l_process_mode,
13967 proj_asgn.start_date,proj_asgn.end_date
13968 FROM pa_project_assignments proj_asgn
13969 WHERE proj_asgn.expenditure_organization_id = p_orgz_id
13970 AND proj_asgn.template_flag = 'N'
13971 AND p_start_date IS NOT NULL
13972 AND p_end_date IS NULL
13973 AND EXISTS ( SELECT null
13974 FROM pa_forecast_items frcst_itms
13975 WHERE proj_asgn.assignment_id =
13976 frcst_itms.assignment_id
13977 AND frcst_itms.delete_flag = 'N'
13978 AND frcst_itms.error_flag =
13979 DECODE (p_process_mode,'ERROR','Y',
13980 frcst_itms.error_flag)
13981 AND trunc(frcst_itms.item_date) >=
13982 trunc(p_start_date) )
13983 UNION
13984 SELECT proj_asgn.assignment_id,'ERROR'l_process_mode,
13985 proj_asgn.start_date,proj_asgn.end_date
13986 FROM pa_project_assignments proj_asgn
13987 WHERE proj_asgn.expenditure_organization_id = p_orgz_id
13988 AND proj_asgn.template_flag = 'N'
13989 AND p_start_date IS NULL
13990 AND p_end_date IS NOT NULL
13991 AND EXISTS ( SELECT null
13992 FROM pa_forecast_items frcst_itms
13993 WHERE proj_asgn.assignment_id =
13994 frcst_itms.assignment_id
13995 AND frcst_itms.delete_flag = 'N'
13996 AND frcst_itms.error_flag =
13997 DECODE (p_process_mode,'ERROR','Y',
13998 frcst_itms.error_flag)
13999 AND trunc(frcst_itms.item_date) <=
14000 trunc(p_end_date))
14001 UNION
14002 SELECT proj_asgn.assignment_id,'ERROR'l_process_mode,
14003 proj_asgn.start_date,proj_asgn.end_date
14004 FROM pa_project_assignments proj_asgn
14005 WHERE proj_asgn.expenditure_organization_id = p_orgz_id
14006 AND proj_asgn.template_flag = 'N'
14007 AND p_start_date IS NULL
14008 AND p_end_date IS NULL
14009 AND EXISTS ( SELECT null
14010 FROM pa_forecast_items frcst_itms
14011 WHERE proj_asgn.assignment_id =
14012 frcst_itms.assignment_id
14013 AND frcst_itms.delete_flag = 'N'
14014 AND frcst_itms.error_flag =
14015 DECODE(p_process_mode,'ERROR','Y',
14016 frcst_itms.error_flag))
14017 UNION
14018 SELECT proj_asgn.assignment_id,'GENERATE'l_process_mode,
14019 proj_asgn.start_date,proj_asgn.end_date
14020 FROM pa_project_assignments proj_asgn
14021 WHERE proj_asgn.expenditure_organization_id = p_orgz_id
14022 AND proj_asgn.template_flag = 'N'
14023 AND EXISTS ( SELECT NULL
14024 FROM pa_schedules psch
14025 WHERE proj_asgn.assignment_id =
14026 psch.assignment_id
14027 AND psch.forecast_txn_generated_flag = 'N');
14028 */
14029
14030 /* Commented as part of bug#10071003
14031 CURSOR asgmt_dtls IS
14032 SELECT proj_asgn.assignment_id,'ERROR'l_process_mode,
14033 proj_asgn.start_date,proj_asgn.end_date
14034 FROM pa_project_assignments proj_asgn
14035 WHERE proj_asgn.expenditure_organization_id = p_orgz_id
14036 AND proj_asgn.template_flag = 'N'
14037 AND ( EXISTS ( SELECT null
14038 FROM pa_forecast_items frcst_itms
14039 WHERE proj_asgn.assignment_id = frcst_itms.assignment_id
14040 AND frcst_itms.delete_flag = 'N'
14041 AND frcst_itms.error_flag = DECODE(p_process_mode,'ERROR','Y',frcst_itms.error_flag)
14042 AND ( (p_start_date IS NOT NULL AND p_end_date IS NOT NULL AND trunc(frcst_itms.item_date) BETWEEN
14043 trunc(p_start_date) AND trunc(p_end_date))
14044 OR ( p_start_date IS NOT NULL AND p_end_date IS NULL AND trunc(frcst_itms.item_date) >= trunc(p_start_date))
14045 OR ( p_start_date IS NULL AND p_end_date IS NOT NULL AND trunc(frcst_itms.item_date) <= trunc(p_end_date))
14046 OR ( p_start_date IS NULL AND p_end_date IS NULL ) )
14047 )
14048 OR EXISTS ( SELECT NULL
14049 FROM pa_schedules psch
14050 WHERE proj_asgn.assignment_id = psch.assignment_id
14051 AND psch.forecast_txn_generated_flag = 'N')
14052 ); */
14053 -- Bug# 10071003 - Added - Start
14054 CURSOR asgmt_dtls IS
14055 -- Query assignment_type = 'OPEN_ASSIGNMENT' based on pa_project_assignments.expenditure_organization_id
14056 SELECT proj_asgn.assignment_id,'ERROR'l_process_mode,
14057 proj_asgn.start_date,proj_asgn.end_date
14058 FROM pa_project_assignments proj_asgn
14059 WHERE proj_asgn.expenditure_organization_id = p_orgz_id
14060 AND proj_asgn.template_flag = 'N'
14061 AND proj_asgn.assignment_type = 'OPEN_ASSIGNMENT'
14062 AND ( EXISTS ( SELECT null
14063 FROM pa_forecast_items frcst_itms
14064 WHERE proj_asgn.assignment_id = frcst_itms.assignment_id
14065 AND frcst_itms.delete_flag = 'N'
14066 AND frcst_itms.error_flag = DECODE(p_process_mode,'ERROR','Y',frcst_itms.error_flag)
14067 AND trunc(frcst_itms.item_date)
14068 BETWEEN trunc(NVL(p_start_date,trunc(frcst_itms.item_date)))
14069 AND trunc(NVL(p_end_date,trunc(frcst_itms.item_date)))
14070 )
14071 OR EXISTS ( SELECT NULL
14072 FROM pa_schedules psch
14073 WHERE proj_asgn.assignment_id = psch.assignment_id
14074 AND psch.forecast_txn_generated_flag = 'N')
14075 )
14076 UNION
14077 -- Query assignment_type in ('STAFFED_ASSIGNMENT','STAFFED_ADMIN_ASSIGNMENT') based on pa_resources_denorm.resource_organization_id
14078 SELECT proj_asgn.assignment_id,'ERROR'l_process_mode,
14079 proj_asgn.start_date,proj_asgn.end_date
14080 FROM pa_project_assignments proj_asgn,
14081 pa_resources_denorm prd
14082 WHERE proj_asgn.template_flag = 'N'
14083 AND proj_asgn.assignment_type IN ('STAFFED_ASSIGNMENT','STAFFED_ADMIN_ASSIGNMENT')
14084 AND proj_asgn.resource_id = prd.resource_id
14085 AND prd.resource_organization_id = p_orgz_id
14086 AND proj_asgn.start_date BETWEEN prd.resource_effective_start_date
14087 and prd.resource_effective_end_date
14088 AND prd.schedulable_flag = 'Y'
14089 AND ( EXISTS ( SELECT null
14090 FROM pa_forecast_items frcst_itms
14091 WHERE proj_asgn.assignment_id = frcst_itms.assignment_id
14092 AND frcst_itms.delete_flag = 'N'
14093 AND frcst_itms.error_flag = DECODE(p_process_mode,'ERROR','Y',frcst_itms.error_flag)
14094 AND trunc(frcst_itms.item_date)
14095 BETWEEN trunc(NVL(p_start_date,trunc(frcst_itms.item_date)))
14096 AND trunc(NVL(p_end_date,trunc(frcst_itms.item_date)))
14097 )
14098 OR EXISTS ( SELECT NULL
14099 FROM pa_schedules psch
14100 WHERE proj_asgn.assignment_id = psch.assignment_id
14101 AND psch.forecast_txn_generated_flag = 'N')
14102 );
14103 -- Bug# 10071003 - Added - End
14104
14105 l_StartDateTab PA_FORECAST_GLOB.DateTabTyp;
14106 l_EndDateTab PA_FORECAST_GLOB.DateTabTyp;
14107 l_AssignmentIdTab PA_FORECAST_GLOB.NumberTabTyp;
14108 l_processModeTab PA_FORECAST_GLOB.VCTabTyp;
14109 l_x_return_status VARCHAR2(50);
14110 l_x_msg_count NUMBER;
14111 l_x_msg_data VARCHAR2(50);
14112 l_cannot_acquire_lock EXCEPTION;
14113 lv_lock_type VARCHAR2(5);
14114
14115 lv_return_status VARCHAR2(30);
14116 l_msg_index_out NUMBER;
14117 l_lock_status NUMBER;
14118 l_data varchar2(2000); -- 4537865
14119 BEGIN
14120 -- l_process_mode := p_process_mode;
14121
14122 lv_return_status := FND_API.G_RET_STS_SUCCESS;
14123
14124 Print_message('Entering Regenrate_Asgn_Req');
14125
14126 PA_DEBUG.Init_err_stack(
14127 'PA_FORECASTITEM_PVT.Regenrate_Asgn_Req');
14128
14129 OPEN asgmt_dtls;
14130
14131 LOOP
14132
14133 -- fetching the all the records and storing them
14134 -- corresponding to their tab type
14135
14136 FETCH asgmt_dtls
14137 BULK COLLECT INTO l_AssignmentIdTab,
14138 l_processModeTab,
14139 l_StartDateTab,
14140 l_EndDateTab LIMIT 200;
14141
14142 IF l_AssignmentIdTab.COUNT =0 THEN
14143
14144 EXIT;
14145
14146 END IF;
14147
14148 FOR i IN l_AssignmentIdTab.FIRST..l_AssignmentIdTab.LAST LOOP
14149
14150 IF (p_start_date IS NOT NULL) THEN
14151
14152 IF ( l_StartDateTab(i) > p_start_date ) THEN
14153
14154 l_StartDateTab(i) := p_start_date;
14155
14156 END IF;
14157
14158 END IF;
14159
14160 IF (p_end_date IS NOT NULL ) THEN
14161
14162 IF ( l_EndDateTab(i) > p_end_date ) THEN
14163
14164 l_EndDateTab(i) := p_end_date;
14165
14166 END IF;
14167
14168 END IF;
14169
14170 BEGIN
14171
14172 -- Locking the processed assignment id so that it
14173 -- should be in sink if the same time same assignment id
14174 -- is going to be used for processing
14175 lv_lock_type := 'ASGMT';
14176
14177 IF (PA_FORECAST_ITEMS_UTILS.Set_User_Lock
14178 (l_AssignmentIdTab(i), 'ASG') <> 0) THEN
14179
14180 RAISE l_cannot_acquire_lock;
14181
14182 END IF;
14183
14184 -- Call the Forecast Generation API.
14185
14186 Print_message(
14187 'Calling forecast item Regenrate_Asgn_Req');
14188
14189 PA_FORECASTITEM_PVT.Create_Forecast_Item(
14190 p_assignment_id => l_AssignmentIdTab(i),
14191 p_start_date => l_StartDateTab(i) ,
14192 p_end_date => l_EndDateTab(i) ,
14193 p_process_mode => l_processModeTab(i) ,
14194 x_return_status => l_x_return_status,
14195 x_msg_count => l_x_msg_count,
14196 x_msg_data => l_x_msg_data );
14197
14198 l_lock_status := PA_FORECAST_ITEMS_UTILS.Release_User_Lock
14199 (l_AssignmentIdTab(i), 'ASG');
14200 -- This commit is safe: called from a report.
14201 commit;
14202
14203 EXCEPTION
14204
14205 WHEN l_cannot_acquire_lock THEN
14206
14207 Print_message(
14208 'Unable to set lock for ' ||
14209 to_char(l_AssignmentIdTab(i)));
14210 x_msg_count := 1;
14211 x_msg_data := 'Assignment ID Lock Failure';
14212 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14213
14214 FND_MSG_PUB.add_exc_msg
14215 (p_pkg_name =>
14216 'PA_FORECASTITEM_PVT.Regenrate_Asgn_Req',
14217 p_procedure_name => PA_DEBUG.G_Err_Stack);
14218
14219 If x_msg_count = 1 THEN
14220 pa_interface_utils_pub.get_messages
14221 (p_encoded => FND_API.G_TRUE,
14222 p_msg_index => 1,
14223 p_msg_count => x_msg_count,
14224 p_msg_data => x_msg_data,
14225 p_data => l_data, -- 4537865
14226 p_msg_index_out => l_msg_index_out );
14227 x_msg_data := l_data ; -- 4537865
14228 End If;
14229 Print_message(x_msg_data);
14230
14231 RAISE;
14232
14233
14234 END;
14235
14236 END LOOP;
14237
14238 l_AssignmentIdTab.delete;
14239 l_StartDateTab.delete;
14240 l_EndDateTab.delete;
14241
14242 END LOOP;
14243
14244 CLOSE asgmt_dtls;
14245
14246 Print_message('Leaving Regenrate_Asgn_Req');
14247
14248 PA_DEBUG.Reset_Err_Stack;
14249
14250 EXCEPTION
14251
14252 WHEN OTHERS THEN
14253 print_message('Failed in Regenrate_Asgn_Req api');
14254 print_message('SQLCODE'||sqlcode||sqlerrm);
14255
14256 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14257 x_msg_count := 1;
14258 x_msg_data := SQLERRM;
14259
14260 FND_MSG_PUB.add_exc_msg
14261 (p_pkg_name => 'PA_FORECASTITEM_PVT.Regenrate_Asgn_Req',
14262 p_procedure_name => PA_DEBUG.G_Err_Stack);
14263
14264 If x_msg_count = 1 THEN
14265 pa_interface_utils_pub.get_messages
14266 (p_encoded => FND_API.G_TRUE,
14267 p_msg_index => 1,
14268 p_msg_count => x_msg_count,
14269 p_msg_data => x_msg_data,
14270 p_data => l_data, -- 4537865
14271 p_msg_index_out => l_msg_index_out );
14272 x_msg_data := l_data ; -- 4537865
14273 End If;
14274 Print_message(x_msg_data);
14275
14276 RAISE;
14277
14278 END Regenrate_Asgn_Req;
14279
14280
14281
14282 /* ---------------------------------------------------------------------
14283 | Procedure : Regenrate_Unassigned
14284 | Purpose : It will calculate the resource unassigned time
14285 | for the passed org id and got error out in previous
14286 | generation
14287 | Input parameters
14288 | Parameters Type Required Description
14289 | p_orgz_id NUMBER YES Orgn id
14290 | p_start_date DATE YES Start date
14291 | p_end_date DATE YES End date
14292 | p_process_mode VARCHAR2 YES Process mode i.e. 'RECALCULATE'
14293 | OR 'ERROR'
14294 | Out parameters
14295 +----------------------------------------------------------------------*/
14296
14297 PROCEDURE Regenrate_Unassigned(
14298 p_orgz_id IN NUMBER,
14299 p_start_date IN DATE,
14300 p_end_date IN DATE,
14301 p_process_mode IN VARCHAR2,
14302 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
14303 x_msg_count OUT NOCOPY NUMBER, -- 4537865
14304 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
14305
14306 -- select all errored out resource record for the input
14307 -- organization
14308
14309 l_msg_index_out NUMBER;
14310 l_data varchar2(2000); -- 4537865
14311 CURSOR unasgn_tim IS
14312 SELECT forecast_item_id, forecast_item_type,
14313 project_org_id , expenditure_org_id,
14314 project_organization_id, expenditure_organization_id ,
14315 project_id, project_type_class, person_id ,
14316 resource_id, borrowed_flag, assignment_id,
14317 item_date, item_uom, item_quantity,
14318 pvdr_period_set_name, pvdr_pa_period_name,
14319 pvdr_gl_period_name, rcvr_period_set_name,
14320 rcvr_pa_period_name, rcvr_gl_period_name,
14321 global_exp_period_end_date, expenditure_type,
14322 expenditure_type_class, cost_rejection_code,
14323 rev_rejection_code, tp_rejection_code,
14324 burden_rejection_code, other_rejection_code,
14325 delete_flag, error_flag, provisional_flag,
14326 JOB_ID,
14327 TP_AMOUNT_TYPE,
14328 OVERPROVISIONAL_QTY,
14329 OVER_PROV_CONF_QTY,
14330 CONFIRMED_QTY,
14331 PROVISIONAL_QTY,
14332 asgmt_sys_status_code, capacity_quantity,
14333 overcommitment_quantity, availability_quantity,
14334 overcommitment_flag, availability_flag
14335 FROM pa_forecast_items frcst_itms
14336 WHERE frcst_itms.expenditure_organization_id = p_orgz_id
14337 AND frcst_itms.error_flag = 'Y'
14338 AND frcst_itms.forecast_item_type = 'U'
14339 AND frcst_itms.delete_flag = 'N'
14340 AND ( trunc(frcst_itms.item_date) BETWEEN
14341 trunc(p_start_date) AND trunc(p_end_date))
14342 AND p_start_date IS NOT NULL
14343 AND p_end_date IS NOT NULL
14344 UNION
14345 SELECT forecast_item_id, forecast_item_type,
14346 project_org_id , expenditure_org_id,
14347 project_organization_id, expenditure_organization_id ,
14348 project_id, project_type_class, person_id ,
14349 resource_id, borrowed_flag, assignment_id,
14350 item_date, item_uom, item_quantity,
14351 pvdr_period_set_name, pvdr_pa_period_name,
14352 pvdr_gl_period_name, rcvr_period_set_name,
14353 rcvr_pa_period_name, rcvr_gl_period_name,
14354 global_exp_period_end_date, expenditure_type,
14355 expenditure_type_class, cost_rejection_code,
14356 rev_rejection_code, tp_rejection_code,
14357 burden_rejection_code, other_rejection_code,
14358 delete_flag, error_flag, provisional_flag,
14359 JOB_ID,
14360 TP_AMOUNT_TYPE,
14361 OVERPROVISIONAL_QTY,
14362 OVER_PROV_CONF_QTY,
14363 CONFIRMED_QTY,
14364 PROVISIONAL_QTY,
14365 asgmt_sys_status_code, capacity_quantity,
14366 overcommitment_quantity, availability_quantity,
14367 overcommitment_flag, availability_flag
14368 FROM pa_forecast_items frcst_itms
14369 WHERE frcst_itms.expenditure_organization_id = p_orgz_id
14370 AND frcst_itms.error_flag = 'Y'
14371 AND frcst_itms.forecast_item_type = 'U'
14372 AND frcst_itms.delete_flag = 'N'
14373 AND p_start_date IS NOT NULL
14374 AND p_end_date IS NULL
14375 AND trunc(frcst_itms.item_date) >= trunc(p_start_date)
14376 UNION
14377 SELECT forecast_item_id, forecast_item_type,
14378 project_org_id , expenditure_org_id,
14379 project_organization_id, expenditure_organization_id ,
14380 project_id, project_type_class, person_id ,
14381 resource_id, borrowed_flag, assignment_id,
14382 item_date, item_uom, item_quantity,
14383 pvdr_period_set_name, pvdr_pa_period_name,
14384 pvdr_gl_period_name, rcvr_period_set_name,
14385 rcvr_pa_period_name, rcvr_gl_period_name,
14386 global_exp_period_end_date, expenditure_type,
14387 expenditure_type_class, cost_rejection_code,
14388 rev_rejection_code, tp_rejection_code,
14389 burden_rejection_code, other_rejection_code,
14390 delete_flag, error_flag, provisional_flag,
14391 JOB_ID,
14392 TP_AMOUNT_TYPE,
14393 OVERPROVISIONAL_QTY,
14394 OVER_PROV_CONF_QTY,
14395 CONFIRMED_QTY,
14396 PROVISIONAL_QTY,
14397 asgmt_sys_status_code, capacity_quantity,
14398 overcommitment_quantity, availability_quantity,
14399 overcommitment_flag, availability_flag
14400 FROM pa_forecast_items frcst_itms
14401 WHERE frcst_itms.expenditure_organization_id = p_orgz_id
14402 AND frcst_itms.error_flag = 'Y'
14403 AND frcst_itms.forecast_item_type = 'U'
14404 AND frcst_itms.delete_flag = 'N'
14405 AND p_start_date IS NULL
14406 AND p_end_date IS NOT NULL
14407 AND trunc(frcst_itms.item_date) <= trunc(p_end_date)
14408 UNION
14409 SELECT forecast_item_id, forecast_item_type,
14410 project_org_id , expenditure_org_id,
14411 project_organization_id, expenditure_organization_id ,
14412 project_id, project_type_class, person_id ,
14413 resource_id, borrowed_flag, assignment_id,
14414 item_date, item_uom, item_quantity,
14415 pvdr_period_set_name, pvdr_pa_period_name,
14416 pvdr_gl_period_name, rcvr_period_set_name,
14417 rcvr_pa_period_name, rcvr_gl_period_name,
14418 global_exp_period_end_date, expenditure_type,
14419 expenditure_type_class, cost_rejection_code,
14420 rev_rejection_code, tp_rejection_code,
14421 burden_rejection_code, other_rejection_code,
14422 delete_flag, error_flag, provisional_flag,
14423 JOB_ID,
14424 TP_AMOUNT_TYPE,
14425 OVERPROVISIONAL_QTY,
14426 OVER_PROV_CONF_QTY,
14427 CONFIRMED_QTY,
14428 PROVISIONAL_QTY,
14429 asgmt_sys_status_code, capacity_quantity,
14430 overcommitment_quantity, availability_quantity,
14431 overcommitment_flag, availability_flag
14432 FROM pa_forecast_items frcst_itms
14433 WHERE frcst_itms.expenditure_organization_id = p_orgz_id
14434 AND frcst_itms.error_flag = 'Y'
14435 AND frcst_itms.forecast_item_type = 'U'
14436 AND frcst_itms.delete_flag = 'N'
14437 AND p_start_date IS NULL
14438 AND p_end_date IS NULL
14439 order by resource_id, item_date, forecast_item_id ;
14440
14441
14442 forecast_item_id_tab PA_FORECAST_GLOB.NumberTabTyp;
14443 forecast_item_type_tab PA_FORECAST_GLOB.VCTabTyp;
14444 project_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
14445 expenditure_org_id_tab PA_FORECAST_GLOB.NumberTabTyp;
14446 expenditure_orgn_id_tab PA_FORECAST_GLOB.NumberTabTyp;
14447 project_organization_id_tab PA_FORECAST_GLOB.NumberTabTyp;
14448 project_id_tab PA_FORECAST_GLOB.NumberTabTyp;
14449 project_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
14450 person_id_tab PA_FORECAST_GLOB.NumberTabTyp;
14451 resource_id_tab PA_FORECAST_GLOB.NumberTabTyp;
14452 borrowed_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
14453 assignment_id_tab PA_FORECAST_GLOB.NumberTabTyp;
14454 item_date_tab PA_FORECAST_GLOB.DateTabTyp;
14455 item_uom_tab PA_FORECAST_GLOB.VCTabTyp;
14456 item_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
14457 pvdr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
14458 pvdr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
14459 pvdr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
14460 rcvr_period_set_name_tab PA_FORECAST_GLOB.VCTabTyp;
14461 rcvr_pa_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
14462 rcvr_gl_period_name_tab PA_FORECAST_GLOB.VCTabTyp;
14463 global_exp_period_end_date_tab PA_FORECAST_GLOB.DateTabTyp;
14464 expenditure_type_tab PA_FORECAST_GLOB.VCTabTyp;
14465 expenditure_type_class_tab PA_FORECAST_GLOB.VCTabTyp;
14466 cost_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
14467 rev_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
14468 tp_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
14469 burden_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
14470 other_rejection_code_tab PA_FORECAST_GLOB.VCTabTyp;
14471 delete_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
14472 error_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
14473 provisional_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
14474 JOB_ID_tab PA_FORECAST_GLOB.NumberTabTyp;
14475 TP_AMOUNT_TYPE_tab PA_FORECAST_GLOB.VCTabTyp;
14476 OVERPROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
14477 OVER_PROV_CONF_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
14478 CONFIRMED_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
14479 PROVISIONAL_QTY_tab PA_FORECAST_GLOB.NumberTabTyp;
14480 asgmt_sys_status_code_tab PA_FORECAST_GLOB.VCTabTyp;
14481 capacity_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
14482 overcommitment_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
14483 availability_quantity_tab PA_FORECAST_GLOB.NumberTabTyp;
14484 overcommitment_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
14485 availability_flag_tab PA_FORECAST_GLOB.VC1TabTyp;
14486
14487 l_forecast_item_hdr_tab PA_FORECAST_GLOB.FIHdrTabTyp;
14488 l_x_return_status VARCHAR2(50);
14489 l_x_msg_count NUMBER;
14490 l_x_msg_data VARCHAR2(50);
14491 l_process_mode VARCHAR2(50);
14492
14493 lv_return_status VARCHAR2(30);
14494
14495 BEGIN
14496
14497 lv_return_status := FND_API.G_RET_STS_SUCCESS;
14498
14499 -- l_process_mode := p_process_mode;
14500
14501 PA_DEBUG.Init_err_stack( 'PA_FORECASTITEM_PVT.Regenrate_Unassigned');
14502
14503 l_process_mode := 'ERROR';
14504
14505 Print_message( 'Entering Regenrate_Unassigned');
14506
14507 OPEN unasgn_tim;
14508
14509 LOOP
14510
14511 Print_message( 'in loop Regenrate_Unassigned');
14512
14513 FETCH unasgn_tim
14514 BULK COLLECT INTO
14515 forecast_item_id_tab, forecast_item_type_tab,
14516 project_org_id_tab, expenditure_org_id_tab,
14517 project_organization_id_tab, expenditure_orgn_id_tab,
14518 project_id_tab, project_type_class_tab, person_id_tab,
14519 resource_id_tab, borrowed_flag_tab, assignment_id_tab,
14520 item_date_tab, item_uom_tab, item_quantity_tab,
14521 pvdr_period_set_name_tab, pvdr_pa_period_name_tab,
14522 pvdr_gl_period_name_tab, rcvr_period_set_name_tab,
14523 rcvr_pa_period_name_tab, rcvr_gl_period_name_tab,
14524 global_exp_period_end_date_tab, expenditure_type_tab,
14525 expenditure_type_class_tab, cost_rejection_code_tab,
14526 rev_rejection_code_tab, tp_rejection_code_tab,
14527 burden_rejection_code_tab, other_rejection_code_tab,
14528 delete_flag_tab, error_flag_tab, provisional_flag_tab,
14529 JOB_ID_tab,
14530 TP_AMOUNT_TYPE_tab,
14531 OVERPROVISIONAL_QTY_tab,
14532 OVER_PROV_CONF_QTY_tab,
14533 CONFIRMED_QTY_tab,
14534 PROVISIONAL_QTY_tab,
14535 asgmt_sys_status_code_tab, capacity_quantity_tab,
14536 overcommitment_quantity_tab, availability_quantity_tab,
14537 overcommitment_flag_tab, availability_flag_tab
14538 LIMIT 200;
14539
14540 IF forecast_item_id_tab.COUNT =0 THEN
14541
14542 EXIT;
14543
14544 END IF;
14545
14546 FOR j IN forecast_item_id_tab.FIRST..forecast_item_id_tab.LAST
14547 LOOP
14548
14549 l_forecast_item_hdr_tab(j).forecast_item_id :=
14550 forecast_item_id_tab(j);
14551 l_forecast_item_hdr_tab(j).forecast_item_type :=
14552 forecast_item_type_tab(j);
14553 l_forecast_item_hdr_tab(j).project_org_id :=
14554 project_org_id_tab(j);
14555 l_forecast_item_hdr_tab(j).expenditure_org_id :=
14556 expenditure_org_id_tab(j);
14557 l_forecast_item_hdr_tab(j).project_organization_id :=
14558 project_organization_id_tab(j);
14559 l_forecast_item_hdr_tab(j).expenditure_organization_id :=
14560 expenditure_orgn_id_tab(j);
14561 l_forecast_item_hdr_tab(j).project_id :=
14562 project_id_tab(j);
14563 l_forecast_item_hdr_tab(j).project_type_class :=
14564 project_type_class_tab(j);
14565 l_forecast_item_hdr_tab(j).person_id :=
14566 person_id_tab(j);
14567 l_forecast_item_hdr_tab(j).resource_id :=
14568 resource_id_tab(j);
14569 l_forecast_item_hdr_tab(j).borrowed_flag :=
14570 borrowed_flag_tab(j);
14571 l_forecast_item_hdr_tab(j).assignment_id :=
14572 assignment_id_tab(j);
14573 l_forecast_item_hdr_tab(j).item_date :=
14574 item_date_tab(j);
14575 l_forecast_item_hdr_tab(j).item_uom :=
14576 item_uom_tab(j);
14577 l_forecast_item_hdr_tab(j).item_quantity :=
14578 item_quantity_tab(j);
14579 l_forecast_item_hdr_tab(j).pvdr_period_set_name :=
14580 pvdr_period_set_name_tab(j);
14581 l_forecast_item_hdr_tab(j).pvdr_pa_period_name :=
14582 pvdr_pa_period_name_tab(j);
14583 l_forecast_item_hdr_tab(j).pvdr_gl_period_name :=
14584 pvdr_gl_period_name_tab(j);
14585 l_forecast_item_hdr_tab(j).rcvr_period_set_name :=
14586 rcvr_period_set_name_tab(j);
14587 l_forecast_item_hdr_tab(j).rcvr_pa_period_name :=
14588 rcvr_pa_period_name_tab(j);
14589 l_forecast_item_hdr_tab(j).rcvr_gl_period_name :=
14590 rcvr_gl_period_name_tab(j);
14591 l_forecast_item_hdr_tab(j).global_exp_period_end_date :=
14592 global_exp_period_end_date_tab(j);
14593 l_forecast_item_hdr_tab(j).expenditure_type :=
14594 expenditure_type_tab(j);
14595 l_forecast_item_hdr_tab(j).expenditure_type_class :=
14596 expenditure_type_class_tab(j);
14597 l_forecast_item_hdr_tab(j).cost_rejection_code :=
14598 cost_rejection_code_tab(j);
14599 l_forecast_item_hdr_tab(j).rev_rejection_code :=
14600 rev_rejection_code_tab(j);
14601 l_forecast_item_hdr_tab(j).burden_rejection_code :=
14602 burden_rejection_code_tab(j);
14603 l_forecast_item_hdr_tab(j).tp_rejection_code :=
14604 tp_rejection_code_tab(j);
14605 l_forecast_item_hdr_tab(j).other_rejection_code :=
14606 other_rejection_code_tab(j);
14607 l_forecast_item_hdr_tab(j).delete_flag :=
14608 delete_flag_tab(j);
14609 l_forecast_item_hdr_tab(j).error_flag :=
14610 error_flag_tab(j);
14611 l_forecast_item_hdr_tab(j).provisional_flag :=
14612 provisional_flag_tab(j);
14613 l_forecast_item_hdr_tab(j).JOB_ID := JOB_ID_tab(j);
14614 l_forecast_item_hdr_tab(j).TP_AMOUNT_TYPE := TP_AMOUNT_TYPE_tab(j);
14615 l_forecast_item_hdr_tab(j).OVERPROVISIONAL_QTY := OVERPROVISIONAL_QTY_tab(j);
14616 l_forecast_item_hdr_tab(j).OVER_PROV_CONF_QTY := OVER_PROV_CONF_QTY_tab(j);
14617 l_forecast_item_hdr_tab(j).CONFIRMED_QTY := CONFIRMED_QTY_tab(j);
14618 l_forecast_item_hdr_tab(j).PROVISIONAL_QTY := PROVISIONAL_QTY_tab(j);
14619 l_forecast_item_hdr_tab(j).asgmt_sys_status_code := asgmt_sys_status_code_tab(j);
14620 l_forecast_item_hdr_tab(j).capacity_quantity := capacity_quantity_tab(j);
14621 l_forecast_item_hdr_tab(j).overcommitment_quantity := overcommitment_quantity_tab(j);
14622 l_forecast_item_hdr_tab(j).availability_quantity := availability_quantity_tab(j);
14623 l_forecast_item_hdr_tab(j).overcommitment_flag := overcommitment_flag_tab(j);
14624 l_forecast_item_hdr_tab(j).availability_flag := availability_flag_tab(j);
14625
14626 END LOOP;
14627
14628 BEGIN
14629 -- Call the Forecast Generation API.
14630 Print_message(
14631 'calling create forecast_item from unasg');
14632
14633 PA_FORECASTITEM_PVT.create_forecast_item(
14634 p_ErrHdrTab => l_forecast_item_hdr_tab,
14635 p_process_mode => l_process_mode,
14636 x_return_status => l_x_return_status,
14637 x_msg_count => l_x_msg_count,
14638 x_msg_data => l_x_msg_data );
14639
14640
14641 END;
14642
14643 l_forecast_item_hdr_tab.delete;
14644 forecast_item_id_tab.delete;
14645 forecast_item_type_tab.delete;
14646 project_org_id_tab.delete;
14647 expenditure_org_id_tab.delete;
14648 project_organization_id_tab.delete;
14649 expenditure_orgn_id_tab.delete;
14650 project_id_tab.delete;
14651 project_type_class_tab.delete;
14652 person_id_tab.delete;
14653 resource_id_tab.delete;
14654 borrowed_flag_tab.delete;
14655 assignment_id_tab.delete;
14656 item_date_tab.delete;
14657 item_uom_tab.delete;
14658 item_quantity_tab.delete;
14659 pvdr_period_set_name_tab.delete;
14660 pvdr_pa_period_name_tab.delete;
14661 pvdr_gl_period_name_tab.delete;
14662 rcvr_period_set_name_tab.delete;
14663 rcvr_pa_period_name_tab.delete;
14664 rcvr_gl_period_name_tab.delete;
14665 global_exp_period_end_date_tab.delete;
14666 expenditure_type_tab.delete;
14667 expenditure_type_class_tab.delete;
14668 cost_rejection_code_tab.delete;
14669 rev_rejection_code_tab.delete;
14670 tp_rejection_code_tab.delete;
14671 burden_rejection_code_tab.delete;
14672 other_rejection_code_tab.delete;
14673 delete_flag_tab.delete;
14674 error_flag_tab.delete;
14675 provisional_flag_tab.delete;
14676 JOB_ID_tab.delete;
14677 TP_AMOUNT_TYPE_tab.delete;
14678 OVERPROVISIONAL_QTY_tab.delete;
14679 OVER_PROV_CONF_QTY_tab.delete;
14680 CONFIRMED_QTY_tab.delete;
14681 PROVISIONAL_QTY_tab.delete;
14682 asgmt_sys_status_code_tab.delete;
14683 capacity_quantity_tab.delete;
14684 overcommitment_quantity_tab.delete;
14685 availability_quantity_tab.delete;
14686 overcommitment_flag_tab.delete;
14687 availability_flag_tab.delete;
14688
14689 END LOOP;
14690
14691 Print_message(
14692 'Leaving Regenrate_Unassigned');
14693
14694 CLOSE unasgn_tim;
14695
14696 PA_DEBUG.Reset_Err_Stack;
14697
14698 x_return_status := lv_return_status;
14699
14700 EXCEPTION
14701
14702 WHEN OTHERS THEN
14703 print_message('Failed in Regenerate_unassigned api');
14704 print_message('SQLCODE'||sqlcode||sqlerrm);
14705
14706 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14707 x_msg_count := 1;
14708 x_msg_data := SQLERRM;
14709
14710 FND_MSG_PUB.add_exc_msg
14711 (p_pkg_name =>
14712 'PA_FORECASTITEM_PVT.Regenrate_Unassigned',
14713 p_procedure_name => PA_DEBUG.G_Err_Stack);
14714
14715 If x_msg_count = 1 THEN
14716 pa_interface_utils_pub.get_messages
14717 (p_encoded => FND_API.G_TRUE,
14718 p_msg_index => 1,
14719 p_msg_count => x_msg_count,
14720 p_msg_data => x_msg_data,
14721 p_data => l_data, -- 4537865
14722 p_msg_index_out => l_msg_index_out );
14723 x_msg_data := l_data ; -- 4537865
14724 End If;
14725 Print_message(x_msg_data);
14726
14727 RAISE;
14728
14729 END Regenrate_Unassigned;
14730
14731 /***This Api is called from Process forecast exceptions concurrent process
14732 * for the given organization , start date and end date it picks up
14733 * all the errored forecast records and process
14734 **/
14735 PROCEDURE regenrate_orgz_forecast(
14736 p_orgz_id IN NUMBER,
14737 p_start_date IN DATE,
14738 p_end_date IN DATE,
14739 p_process_mode IN VARCHAR2,
14740 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
14741 x_msg_count OUT NOCOPY NUMBER, -- 4537865
14742 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
14743
14744 l_msg_index_out NUMBER;
14745 l_data varchar2(2000); -- 4537865
14746 l_orgz_id NUMBER;
14747 l_start_date DATE;
14748 l_end_date DATE;
14749 l_process_mode VARCHAR2(15);
14750 l_x_return_status VARCHAR2(50);
14751 l_x_msg_count NUMBER;
14752 l_x_msg_data VARCHAR(50);
14753 l_debug_mode VARCHAR2(100);
14754
14755 g_process_mode VARCHAR2(30);
14756 BEGIN
14757
14758 fnd_profile.get('PA_DEBUG_MODE',l_debug_mode);
14759 l_debug_mode := NVL(l_debug_mode, 'N');
14760
14761 PA_DEBUG.SET_PROCESS( x_process => 'PLSQL'
14762 ,x_write_file => 'LOG'
14763 ,x_debug_mode => l_debug_mode
14764 );
14765
14766
14767 l_x_return_status := FND_API.G_RET_STS_SUCCESS;
14768 l_orgz_id := p_orgz_id;
14769 l_start_date := p_start_date;
14770 l_end_date := p_end_date;
14771 l_process_mode := p_process_mode;
14772
14773 /** Added global variable g_process_mode to access it in Fetch_FI_Dtl_Res api **/
14774 g_process_mode := p_process_mode;
14775
14776 Print_message( 'Entering regenrate_orgz_forecast');
14777
14778 PA_DEBUG.Init_err_stack(
14779 'PA_FORECASTITEM_PVT.Regenrate_orgz_forecast');
14780
14781 Regenrate_Asgn_Req(p_orgz_id => l_orgz_id,
14782 p_start_date => l_start_date,
14783 p_end_date => l_end_date,
14784 p_process_mode => l_process_mode,
14785 x_return_status => l_x_return_status,
14786 x_msg_count => l_x_msg_count,
14787 x_msg_data => l_x_msg_data) ;
14788
14789 Print_message( 'calling Regenrate_Unassigned');
14790
14791 Regenrate_Unassigned(p_orgz_id => l_orgz_id,
14792 p_start_date => l_start_date,
14793 p_end_date => l_end_date,
14794 p_process_mode => l_process_mode,
14795 x_return_status => l_x_return_status,
14796 x_msg_count => l_x_msg_count,
14797 x_msg_data => l_x_msg_data) ;
14798
14799 Print_message( 'Leaving regenrate_orgz_forecast');
14800
14801 /** Reset the global param to null **/
14802 g_process_mode := Null;
14803
14804 PA_DEBUG.Reset_Err_Stack;
14805
14806 EXCEPTION
14807
14808 WHEN OTHERS THEN
14809 g_process_mode := null;
14810 print_message('Failed in Regenrate_orgz_forecast api');
14811 print_message('SQLCODE'||sqlcode||sqlerrm);
14812
14813 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14814 x_msg_count := 1;
14815 x_msg_data := SQLERRM;
14816
14817 FND_MSG_PUB.add_exc_msg
14818 (p_pkg_name =>
14819 'PA_FORECASTITEM_PVT.regenrate_orgz_forecast',
14820 p_procedure_name => PA_DEBUG.G_Err_Stack);
14821
14822 If x_msg_count = 1 THEN
14823 pa_interface_utils_pub.get_messages
14824 (p_encoded => FND_API.G_TRUE,
14825 p_msg_index => 1,
14826 p_msg_count => x_msg_count,
14827 p_msg_data => x_msg_data,
14828 p_data => l_data, -- 4537865
14829 p_msg_index_out => l_msg_index_out );
14830 x_msg_data := l_data ; -- 4537865
14831 End If;
14832 Print_message(x_msg_data);
14833
14834 RAISE;
14835
14836
14837 END regenrate_orgz_forecast;
14838
14839 /* ---------------------------------------------------------------------
14840 | Function : Is_Include_Forecast
14841 | Purpose : To check IF Project is to be included for forecast item
14842 | Summarization
14843 | Parameters : p_project_id - Input Project ID
14844 +----------------------------------------------------------------------*/
14845
14846 FUNCTION Is_include_Forecast (p_project_status_code IN VARCHAR2,
14847 p_action_code IN VARCHAR2)
14848 RETURN VARCHAR2 IS
14849
14850 lv_include_flag VARCHAR2(1);
14851
14852 BEGIN
14853 lv_include_flag := pa_project_utils.check_prj_stus_action_allowed(
14854 p_project_status_code,
14855 p_action_code);
14856
14857 RETURN (lv_include_flag);
14858
14859 END Is_Include_Forecast;
14860
14861 /* ---------------------------------------------------------------------
14862 | Function : Get_AmountTypeID
14863 | Purpose : To get amount type id for a given
14864 | Parameters : p_project_id - Input Project ID
14865 +----------------------------------------------------------------------*/
14866
14867 FUNCTION Get_AmountTypeID
14868 RETURN NUMBER IS
14869
14870 BEGIN
14871
14872 RETURN (41);
14873
14874 END Get_AmountTypeID;
14875
14876 /* Bug No: 1967832 changed check_person_billable and is_include_utilisation
14877 into procedures. */
14878
14879 /* ---------------------------------------------------------------------
14880 | Procedure : Check_Person_Billable
14881 | Purpose : To check whether a person is billable or not
14882 | Parameters : p_person_id - Input Person ID
14883 | p_item_date - Input item date
14884 | x_Start_Date - Output Start Date
14885 | x_End_Date - Output End Date
14886 | x_billable_flag - Output of whether the person is billable
14887 |
14888 +----------------------------------------------------------------------*/
14889 Procedure Check_Person_Billable(p_person_id IN NUMBER,
14890 p_item_date IN DATE,
14891 x_Start_Date OUT NOCOPY DATE, -- 4537865
14892 x_End_Date OUT NOCOPY Date, -- 4537865
14893 x_billable_flag OUT NOCOPY VARCHAR2, -- 4537865
14894 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
14895 x_msg_count OUT NOCOPY NUMBER, -- 4537865
14896 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
14897
14898 L_MSG_INDEX_OUT NUMBER;
14899 l_data varchar2(2000);
14900 l_StartDateTab PA_FORECAST_GLOB.DateTabTyp;
14901 l_EndDateTab PA_FORECAST_GLOB.DateTabTyp;
14902 l_BillableFlagTab PA_FORECAST_GLOB.VC1TabTyp;
14903 l_found_flag VARCHAR2(1) := 'N';
14904 l_close_start_date DATE;
14905 l_close_end_date DATE;
14906
14907 BEGIN
14908
14909 -- 2196924: Added logic so it wouldn't raise NO_DATA_FOUND
14910 -- Changed procedure completely. Please use source area to see old version.
14911 BEGIN
14912
14913 SELECT billable_flag,
14914 rou.resource_effective_start_date,
14915 NVL(rou.resource_effective_end_date,p_item_date)
14916 BULK COLLECT INTO
14917 l_BillableFlagTab,l_StartDateTab,l_EndDateTab
14918 FROM pa_resources_denorm rou
14919 WHERE rou.person_id= p_person_id
14920 ORDER BY rou.resource_effective_start_date;
14921
14922 EXCEPTION
14923 WHEN NO_DATA_FOUND THEN
14924 PA_FORECASTITEM_PVT.print_message('NO_DATA_FOUND ok, exception not raised');
14925 END;
14926
14927 if (l_StartDateTab.count = 0) then
14928 x_Start_Date := TO_DATE('01/01/1950','MM/DD/YYYY');
14929 x_End_Date := TO_DATE('12/31/4000','MM/DD/YYYY');
14930 x_billable_flag := 'N';
14931 l_found_flag := 'Y';
14932 elsif (p_item_date < l_StartDateTab(l_StartDateTab.first)) then
14933 x_Start_Date := TO_DATE('01/01/1950','MM/DD/YYYY');
14934 x_End_Date := l_StartDateTab(l_StartDateTab.first)-1;
14935 x_billable_flag := 'N';
14936 l_found_flag := 'Y';
14937 elsif (p_item_date > l_EndDateTab(l_EndDateTab.last)) then
14938 x_Start_Date := l_EndDateTab(l_EndDateTab.last)+1;
14939 x_End_Date := TO_DATE('12/31/4000','MM/DD/YYYY');
14940 x_billable_flag := 'N';
14941 l_found_flag := 'Y';
14942 else
14943 <<l_date_loop>>
14944 for i IN l_StartDateTab.first .. l_StartDateTab.last LOOP
14945 if (p_item_date >= l_StartDateTab(i) AND
14946 p_item_date <= l_EndDateTab(i)) THEN
14947 l_found_flag := 'Y';
14948 x_Start_Date := l_StartDateTab(i);
14949 x_End_Date := l_EndDateTab(i);
14950 x_billable_flag := l_BillableFlagTab(i);
14951 l_found_flag := 'Y';
14952 exit l_date_loop;
14953 end if;
14954
14955 if (l_EndDateTab(i) < p_item_date) then
14956 l_close_start_date := l_EndDateTab(i) + 1;
14957 -- We can rely that there is an i+1 record because
14958 -- p_item_date must be between the min and max to go into
14959 -- this loop.
14960 l_close_end_date := l_StartDateTab(i+1) - 1;
14961 end if;
14962
14963 end loop;
14964 end if;
14965
14966 if (l_found_flag = 'N') then
14967 x_Start_Date := l_close_start_date;
14968 x_End_Date := l_close_end_date;
14969 x_billable_flag := 'N';
14970 end if;
14971
14972 x_return_status :=FND_API.G_RET_STS_SUCCESS;
14973
14974 EXCEPTION
14975
14976 WHEN OTHERS THEN
14977 x_msg_count := 1;
14978 x_msg_data := sqlerrm;
14979
14980 -- 4537865
14981 x_start_date := NULL ;
14982 x_End_date := NULL ;
14983 x_billable_flag := NULL ;
14984
14985 FND_MSG_PUB.add_exc_msg
14986 (p_pkg_name => 'PA_FORECASTITEM_PVT.Check_Person_Billable',
14987 p_procedure_name => PA_DEBUG.G_Err_Stack);
14988 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14989
14990 If x_msg_count = 1 THEN
14991 pa_interface_utils_pub.get_messages
14992 (p_encoded => FND_API.G_TRUE,
14993 p_msg_index => 1,
14994 p_msg_count => x_msg_count,
14995 p_msg_data => x_msg_data,
14996 p_data => l_data, -- 4537865
14997 p_msg_index_out => l_msg_index_out );
14998 x_msg_data := l_data ; -- 4537865
14999 End If;
15000 PA_FORECAST_ITEMS_UTILS.log_message(x_msg_data);
15001 raise;
15002 END Check_Person_Billable;
15003
15004 /* ---------------------------------------------------------------------
15005 | PROCEDURE : Is_Include_Utilisation
15006 | Purpose : To check IF Project/person is to be included for
15007 | util item Summarization
15008 | Parameters : p_person_id - Input person ID
15009 | p_item_date - date
15010 | x_Start_Date - Output Start Date
15011 | x_End_Date - Output End Date
15012 | x_inc_util_flag - Flag for whether include for util or not
15013 |
15014 +----------------------------------------------------------------------*/
15015
15016 Procedure Is_Include_Utilisation (p_person_id IN NUMBER,
15017 p_item_date IN DATE,
15018 x_Start_Date OUT NOCOPY DATE, -- 4537865
15019 x_End_Date OUT NOCOPY DATE, -- 4537865
15020 x_inc_util_flag OUT NOCOPY VARCHAR2, -- 4537865
15021 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
15022 x_msg_count OUT NOCOPY NUMBER, -- 4537865
15023 x_msg_data OUT NOCOPY VARCHAR2) IS -- 4537865
15024
15025 l_data varchar2(2000); -- 4537865
15026 lv_util_flag VARCHAR2(1);
15027 lv_start_date DATE;
15028 lv_end_date DATE;
15029 l_msg_index_out NUMBER;
15030
15031 l_StartDateTab PA_FORECAST_GLOB.DateTabTyp;
15032 l_EndDateTab PA_FORECAST_GLOB.DateTabTyp;
15033 l_UtilFlagTab PA_FORECAST_GLOB.VC1TabTyp;
15034 l_found_flag VARCHAR2(1) := 'N';
15035 l_close_start_date DATE;
15036 l_close_end_date DATE;
15037
15038 BEGIN
15039 -- 2196924: Added logic so it wouldn't raise NO_DATA_FOUND
15040 -- Changed procedure completely. Please use source area to see old version
15041
15042 BEGIN
15043
15044 SELECT utilization_flag,
15045 rou.resource_effective_start_date,
15046 NVL(rou.resource_effective_end_date,p_item_date)
15047 BULK COLLECT INTO
15048 l_UtilFlagTab,l_StartDateTab,l_EndDateTab
15049 FROM pa_resources_denorm rou
15050 WHERE rou.person_id= p_person_id
15051 ORDER BY rou.resource_effective_start_date;
15052
15053 EXCEPTION
15054 WHEN NO_DATA_FOUND THEN
15055 PA_FORECASTITEM_PVT.print_message('NO_DATA_FOUND ok, exception not raised');
15056 END;
15057
15058 if (l_StartDateTab.count = 0) then
15059 x_Start_Date := TO_DATE('01/01/1950','MM/DD/YYYY');
15060 x_End_Date := TO_DATE('12/31/4000','MM/DD/YYYY');
15061 x_inc_util_flag := 'N';
15062 l_found_flag := 'Y';
15063 elsif (p_item_date < l_StartDateTab(l_StartDateTab.first)) then
15064 x_Start_Date := TO_DATE('01/01/1950','MM/DD/YYYY');
15065 x_End_Date := l_StartDateTab(l_StartDateTab.first)-1;
15066 x_inc_util_flag := 'N';
15067 l_found_flag := 'Y';
15068 elsif (p_item_date > l_EndDateTab(l_EndDateTab.last)) then
15069 x_Start_Date := l_EndDateTab(l_EndDateTab.last)+1;
15070 x_End_Date := TO_DATE('12/31/4000','MM/DD/YYYY');
15071 x_inc_util_flag := 'N';
15072 l_found_flag := 'Y';
15073 else
15074 <<l_date_loop>>
15075 for i IN l_StartDateTab.first .. l_StartDateTab.last LOOP
15076 if (p_item_date >= l_StartDateTab(i) AND
15077 p_item_date <= l_EndDateTab(i)) THEN
15078 l_found_flag := 'Y';
15079 x_Start_Date := l_StartDateTab(i);
15080 x_End_Date := l_EndDateTab(i);
15081 x_inc_util_flag := l_UtilFlagTab(i);
15082 l_found_flag := 'Y';
15083 exit l_date_loop;
15084 end if;
15085
15086 if (l_EndDateTab(i) < p_item_date) then
15087 l_close_start_date := l_EndDateTab(i) + 1;
15088 -- We can rely that there is an i+1 record because
15089 -- p_item_date must be between the min and max to go into
15090 -- this loop.
15091 l_close_end_date := l_StartDateTab(i+1) - 1;
15092 end if;
15093
15094 end loop;
15095 end if;
15096
15097 if (l_found_flag = 'N') then
15098 x_Start_Date := l_close_start_date;
15099 x_End_Date := l_close_end_date;
15100 x_inc_util_flag := 'N';
15101 end if;
15102
15103 x_return_status :=FND_API.G_RET_STS_SUCCESS;
15104
15105 EXCEPTION
15106
15107 WHEN OTHERS THEN
15108 x_msg_count := 1;
15109 x_msg_data := sqlerrm;
15110 FND_MSG_PUB.add_exc_msg
15111 (p_pkg_name => 'PA_FORECASTITEM_PVT.Is_Include_Utilisation',
15112 p_procedure_name => PA_DEBUG.G_Err_Stack);
15113 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15114
15115 -- 4537865
15116 x_start_date := NULL ;
15117 x_end_date := NULL ;
15118 x_inc_util_flag := NULL ;
15119
15120 If x_msg_count = 1 THEN
15121 pa_interface_utils_pub.get_messages
15122 (p_encoded => FND_API.G_TRUE,
15123 p_msg_index => 1,
15124 p_msg_count => x_msg_count,
15125 p_msg_data => x_msg_data,
15126 p_data => l_data , -- 4537865
15127 p_msg_index_out => l_msg_index_out );
15128 x_msg_data := l_data ; -- 4537865
15129 End If;
15130 PA_FORECAST_ITEMS_UTILS.log_message(x_msg_data);
15131 raise;
15132
15133
15134 END Is_Include_Utilisation;
15135
15136
15137 PROCEDURE copy_requirement_fi (
15138 p_requirement_id_tbl IN PA_ASSIGNMENTS_PUB.assignment_id_tbl_type,
15139 p_requirement_source_id IN NUMBER,
15140 x_return_status OUT NOCOPY VARCHAR2, -- 4537865
15141 x_msg_count OUT NOCOPY NUMBER, -- 4537865
15142 x_msg_data OUT NOCOPY VARCHAR2) -- 4537865
15143 IS
15144
15145 l_msg_index_out NUMBER;
15146 l_data varchar2(2000); -- 4537865
15147 li_new_forecast_item_id NUMBER;
15148 ld_start_date DATE;
15149 ld_end_date DATE;
15150 li_source_hdr_first_index NUMBER;
15151 li_source_hdr_last_index NUMBER;
15152 li_source_dtl_first_index NUMBER;
15153 li_source_dtl_last_index NUMBER;
15154 li_counter_source_hdr NUMBER;
15155 li_counter_source_dtl NUMBER;
15156 li_hdr_ins_count NUMBER := 1;
15157 li_dtl_ins_count NUMBER := 1;
15158
15159 lt_SourceFIHdrTab PA_FORECAST_GLOB.FIHdrTabTyp;
15160 lt_SourceFIDtlTab PA_FORECAST_GLOB.FIDtlTabTyp;
15161
15162 lt_FIHdrInsTab PA_FORECAST_GLOB.FIHdrTabTyp;
15163 lt_FIDtlInsTab PA_FORECAST_GLOB.FIDtlTabTyp;
15164
15165 BEGIN
15166 print_message('Entering copy_requirement_fi');
15167
15168 -- 4537865
15169 -- Initialize x_return_status to Success
15170 x_return_status := FND_API.G_RET_STS_SUCCESS ;
15171
15172 if (p_requirement_id_tbl.count = 0) then
15173 Print_message('Leaving copy_requirement_fi');
15174 RETURN;
15175 end if;
15176
15177 select start_date, end_date
15178 into ld_start_date, ld_end_date
15179 from pa_project_assignments
15180 where assignment_id = p_requirement_source_id;
15181
15182 print_message('Start calling fetch_fi_hdr');
15183 Fetch_FI_Hdr(
15184 p_assignment_id => p_requirement_source_id,
15185 p_resource_id => null,
15186 p_start_date => ld_start_date,
15187 p_end_date => ld_end_date,
15188 x_dbFIHdrTab => lt_SourceFIHdrTab,
15189 x_return_status => x_return_status,
15190 x_msg_count => x_msg_count,
15191 x_msg_data => x_msg_data);
15192 print_message('End calling fetch_fi_hdr');
15193
15194 if (lt_SourceFIHdrTab.count = 0) then
15195 Print_message('Leaving copy_requirement_fi');
15196 RETURN;
15197 end if;
15198
15199 print_message('Start calling fetch_fi_dtl');
15200 Fetch_FI_Dtl(
15201 p_assignment_id => p_requirement_source_id,
15202 p_resource_id => null,
15203 p_start_date => ld_start_date,
15204 p_end_date => ld_end_date,
15205 x_dbFIDtlTab => lt_SourceFIDtlTab,
15206 x_return_status => x_return_status,
15207 x_msg_count => x_msg_count,
15208 x_msg_data => x_msg_data);
15209 print_message('End calling fetch_fi_dtl');
15210
15211 if (lt_SourceFIDtlTab.count = 0) then
15212 Print_message('Leaving copy_requirement_fi');
15213 RETURN;
15214 end if;
15215
15216 li_source_hdr_first_index := NVL(lt_SourceFIHdrTab.first,0);
15217 li_source_hdr_last_index := NVL(lt_SourceFIHdrTab.last,-1);
15218 li_source_dtl_first_index := NVL(lt_SourceFIDtlTab.first, 0);
15219 li_source_dtl_last_index := NVL(lt_SourceFIDtlTab.last, -1);
15220
15221 print_message('Start requirement tbl loop');
15222 FOR l_counter IN p_requirement_id_tbl.FIRST .. p_requirement_id_tbl.LAST LOOP
15223 li_counter_source_hdr := li_source_hdr_first_index;
15224 li_counter_source_dtl := li_source_dtl_first_index;
15225
15226 print_message('Start source hdr record loop');
15227 FOR li_counter_source_hdr IN li_source_hdr_first_index .. li_source_hdr_last_index LOOP
15228
15229 lt_FIHdrInsTab(li_hdr_ins_count) := lt_SourceFIHdrTab(li_counter_source_hdr);
15230
15231 select pa_forecast_items_s.NEXTVAL
15232 into li_new_forecast_item_id
15233 from dual;
15234
15235 lt_FIHdrInsTab(li_hdr_ins_count).forecast_item_id := li_new_forecast_item_id;
15236 lt_FIHdrInsTab(li_hdr_ins_count).assignment_id := p_requirement_id_tbl(l_counter).assignment_id;
15237
15238 if (li_counter_source_dtl <= li_source_dtl_last_index AND
15239 lt_SourceFIHdrTab(li_counter_source_hdr).forecast_item_id =
15240 lt_SourceFIDtlTab(li_counter_source_dtl).forecast_item_id) then
15241
15242 lt_FIDtlInsTab(li_dtl_ins_count) := lt_SourceFIDtlTab(li_counter_source_dtl);
15243 lt_FIDtlInsTab(li_dtl_ins_count).forecast_item_id := li_new_forecast_item_id;
15244 lt_FIDtlInsTab(li_dtl_ins_count).line_num := 1;
15245 lt_FIDtlInsTab(li_dtl_ins_count).reversed_flag := 'N';
15246 lt_FIDtlInsTab(li_dtl_ins_count).net_zero_flag := 'N';
15247 lt_FIDtlInsTab(li_dtl_ins_count).line_num_reversed := 0;
15248
15249 if (NVL(lt_SourceFIDtlTab(li_counter_source_dtl).forecast_summarized_code,'Y') = 'Y') then
15250 lt_FIDtlInsTab(li_dtl_ins_count).forecast_summarized_code := 'Y';
15251 else
15252 lt_FIDtlInsTab(li_dtl_ins_count).forecast_summarized_code :=
15253 lt_SourceFIDtlTab(li_counter_source_dtl).forecast_summarized_code;
15254 end if;
15255
15256
15257 if (NVL(lt_SourceFIDtlTab(li_counter_source_dtl).PJI_SUMMARIZED_FLAG,'Y') = 'Y') then
15258 lt_FIDtlInsTab(li_dtl_ins_count).PJI_SUMMARIZED_FLAG := 'Y';
15259 else
15260 lt_FIDtlInsTab(li_dtl_ins_count).PJI_SUMMARIZED_FLAG :=
15261 lt_SourceFIDtlTab(li_counter_source_dtl).PJI_SUMMARIZED_FLAG;
15262 end if;
15263
15264 if (NVL(lt_SourceFIDtlTab(li_counter_source_dtl).util_summarized_code,'Y') = 'Y') then
15265 lt_FIDtlInsTab(li_dtl_ins_count).util_summarized_code := 'Y';
15266 else
15267 lt_FIDtlInsTab(li_dtl_ins_count).util_summarized_code :=
15268 lt_SourceFIDtlTab(li_counter_source_dtl).util_summarized_code;
15269 end if;
15270 li_dtl_ins_count := li_dtl_ins_count + 1;
15271 li_counter_source_dtl := li_counter_source_dtl + 1;
15272 end if;
15273 li_hdr_ins_count := li_hdr_ins_count + 1;
15274 END LOOP;
15275 print_message('End source hdr record loop');
15276
15277 END LOOP;
15278 print_message('End requirement tbl loop');
15279
15280 if (nvl(lt_FIHdrInsTab.count,0) <> 0) then
15281 print_message('Start calling PA_FORECAST_HDR_PKG.Insert_Rows');
15282 PA_FORECAST_HDR_PKG.Insert_Rows(
15283 lt_FIHdrInsTab,
15284 x_return_status,
15285 x_msg_count,
15286 x_msg_data);
15287 print_message('End calling PA_FORECAST_HDR_PKG.Insert_Rows');
15288 end if;
15289
15290 if (nvl(lt_FIDtlInsTab.count,0) <> 0) then
15291 print_message('Start calling PA_FORECAST_DTLS_PKG.Insert_Rows');
15292 PA_FORECAST_DTLS_PKG.Insert_Rows(
15293 lt_FIDtlInsTab,
15294 x_return_status,
15295 x_msg_count,
15296 x_msg_data);
15297 print_message('End calling PA_FORECAST_DTLS_PKG.Insert_Rows');
15298 end if;
15299
15300 EXCEPTION
15301 WHEN OTHERS THEN
15302 x_msg_count := 1;
15303 x_msg_data := sqlerrm;
15304 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
15305 FND_MSG_PUB.add_exc_msg(p_pkg_name => 'PA_FORECASTITEM_PVT',
15306 p_procedure_name => 'Copy_Requirement_FI');
15307 If x_msg_count = 1 THEN
15308 pa_interface_utils_pub.get_messages
15309 (p_encoded => FND_API.G_TRUE,
15310 p_msg_index => 1,
15311 p_msg_count => x_msg_count,
15312 p_msg_data => x_msg_data,
15313 p_data => l_data, -- 4537865
15314 p_msg_index_out => l_msg_index_out );
15315 x_msg_data := l_data ; -- 4537865
15316 End If;
15317 RAISE;
15318 END copy_requirement_fi;
15319
15320 BEGIN
15321 null;
15322 -- Back end code run in self-service cannot use globals.
15323 --g_TimelineProfileSetup := PA_TIMELINE_UTIL.get_timeline_profile_setup;
15324 --AVAILABILITY_DURATION := g_TimelineProfileSetup.availability_duration;
15325 --g_process_mode VARCHAR2(30);
15326
15327 END;