DBA Data[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;