DBA Data[Home] [Help]

PACKAGE BODY: APPS.IGC_CC_BUDGETARY_CTRL_PKG

Source


1 PACKAGE BODY IGC_CC_BUDGETARY_CTRL_PKG AS
2 /*$Header: IGCCBCLB.pls 120.37 2011/09/13 09:18:40 schakkin ship $*/
3 
4   G_PKG_NAME CONSTANT VARCHAR2(30):= 'IGC_CC_BUDGETARY_CTRL_PKG';
5 
6   -- The flag determines whether to print debug information or not.
7   g_debug_flag        VARCHAR2(1) := 'N' ;
8 
9   g_line_num          NUMBER := 0;
10 
11   g_debug_msg         VARCHAR2(10000) := NULL;
12 
13 --  g_debug_mode VARCHAR2(1) := NVL(FND_PROFILE.VALUE('IGC_DEBUG_ENABLED'),'N');
14   g_debug_mode        VARCHAR2(1) := NVL(FND_PROFILE.VALUE('AFLOG_ENABLED'),'N');
15 
16 --
17 
18 --Variables for ATG Central logging
19   g_debug_level       NUMBER  :=  FND_LOG.G_CURRENT_RUNTIME_LEVEL;
20   g_state_level       NUMBER  :=  FND_LOG.LEVEL_STATEMENT;
21   g_proc_level        NUMBER  :=  FND_LOG.LEVEL_PROCEDURE;
22   g_event_level       NUMBER  :=  FND_LOG.LEVEL_EVENT;
23   g_excep_level       NUMBER  :=  FND_LOG.LEVEL_EXCEPTION;
24   g_error_level       NUMBER  :=  FND_LOG.LEVEL_ERROR;
25   g_unexp_level       NUMBER  :=  FND_LOG.LEVEL_UNEXPECTED;
26   g_path              VARCHAR2(255) := 'IGC.PLSQL.IGCCBCLB.IGC_CC_BUDGETARY_CTRL_PKG.';
27 
28 -- Generic Procedure for putting out debug information
29 --
30 PROCEDURE Output_Debug (
31    p_path             IN VARCHAR2,
32    p_debug_msg        IN VARCHAR2
33 );
34 
35 
36 PROCEDURE Account_Line_Wrapper
37 (
38   p_api_version                   IN  NUMBER,
39   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE,
40   p_commit                        IN  VARCHAR2 := FND_API.G_FALSE,
41   p_validation_level              IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
42   x_return_status                 OUT NOCOPY      VARCHAR2,
43   x_msg_count                     OUT NOCOPY      NUMBER,
44   x_msg_data                      OUT NOCOPY      VARCHAR2,
45   x_rowid                      IN OUT NOCOPY      VARCHAR2,
46   p_action_flag                IN                 VARCHAR2,
47   p_cc_acct_lines_rec          IN OUT NOCOPY      igc_cc_acct_lines%ROWTYPE,
48   p_update_flag                IN OUT NOCOPY      VARCHAR2
49 );
50 
51 PROCEDURE Det_Pf_Wrapper
52 (
53   p_api_version                   IN  NUMBER,
54   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE,
55   p_commit                        IN  VARCHAR2 := FND_API.G_FALSE,
56   p_validation_level              IN  NUMBER   := FND_API.G_VALID_LEVEL_FULL,
57   x_return_status                 OUT NOCOPY      VARCHAR2,
58   x_msg_count                     OUT NOCOPY      NUMBER,
59   x_msg_data                      OUT NOCOPY      VARCHAR2,
60   x_rowid                      IN OUT NOCOPY      VARCHAR2,
61   p_action_flag                   IN              VARCHAR2,
62   p_cc_pmt_fcst_rec               IN              igc_cc_det_pf%ROWTYPE,
63   p_update_flag                IN OUT NOCOPY      VARCHAR2
64 );
65 
66 PROCEDURE Header_Wrapper
67 (
68   p_api_version                   IN       NUMBER,
69   p_init_msg_list                 IN       VARCHAR2 := FND_API.G_FALSE,
70   p_commit                        IN       VARCHAR2 := FND_API.G_FALSE,
71   p_validation_level              IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
72   x_return_status                 OUT NOCOPY      VARCHAR2,
73   x_msg_count                     OUT NOCOPY      NUMBER,
74   x_msg_data                      OUT NOCOPY      VARCHAR2,
75   x_rowid                      IN OUT NOCOPY      VARCHAR2,
76   p_action_flag                   IN       VARCHAR2,
77   p_cc_header_rec                 IN       igc_cc_headers%ROWTYPE,
78   p_update_flag                IN OUT NOCOPY      VARCHAR2
79 );
80 
81 
82 PROCEDURE Output_Debug (
83    p_path           IN VARCHAR2,
84    p_debug_msg      IN VARCHAR2
85 ) IS
86 
87 -- --------------------------------------------------------------------
88 -- Local Variables :
89 -- --------------------------------------------------------------------
90    /*l_prod           VARCHAR2(3)           := 'IGC';
91    l_sub_comp         VARCHAR2(7)           := 'CC_BUD';
92    l_profile_name     VARCHAR2(255)         := 'IGC_DEBUG_LOG_DIRECTORY';
93    l_Return_Status    VARCHAR2(1);*/
94    l_api_name         CONSTANT VARCHAR2(30) := 'Output_Debug';
95 
96 BEGIN
97 
98    /*IGC_MSGS_PKG.Put_Debug_Msg (p_debug_message    => p_debug_msg,
99                                p_profile_log_name => l_profile_name,
100                                p_prod             => l_prod,
101                                p_sub_comp         => l_sub_comp,
102                                p_filename_val     => NULL,
103                                x_Return_Status    => l_Return_Status
104                               );
105 
106    IF (l_Return_Status <> FND_API.G_RET_STS_SUCCESS) THEN
107       raise FND_API.G_EXC_ERROR;
108    END IF;*/
109    IF(g_state_level >= g_debug_level) THEN
110         FND_LOG.STRING(g_state_level, p_path, p_debug_msg);
111    END IF;
112 
113    RETURN;
114 
115 -- --------------------------------------------------------------------
116 -- Exception handler section for the Output_Debug procedure.
117 -- --------------------------------------------------------------------
118 EXCEPTION
119 
120    /*WHEN FND_API.G_EXC_ERROR THEN
121        RETURN;*/
122 
123    WHEN OTHERS THEN
124        IF (FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)) THEN
125           FND_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, l_api_name);
126        END IF;
127        NULL;
128        RETURN;
129 
130 END Output_Debug;
131 
132 
133 
134 PROCEDURE Account_Line_Wrapper
135 (
136   p_api_version                   IN              NUMBER,
137   p_init_msg_list                 IN              VARCHAR2 := FND_API.G_FALSE,
138   p_commit                        IN              VARCHAR2 := FND_API.G_FALSE,
139   p_validation_level              IN              NUMBER   := FND_API.G_VALID_LEVEL_FULL,
140   x_return_status                 OUT NOCOPY      VARCHAR2,
141   x_msg_count                     OUT NOCOPY      NUMBER,
142   x_msg_data                      OUT NOCOPY      VARCHAR2,
143   x_rowid                      IN OUT NOCOPY      VARCHAR2,
144   p_action_flag                IN                 VARCHAR2,
145   p_cc_acct_lines_rec          IN OUT NOCOPY      igc_cc_acct_lines%ROWTYPE,
146   p_update_flag                IN OUT NOCOPY      VARCHAR2
147 ) IS
148 
149    l_api_name        CONSTANT VARCHAR2(30)   := 'Account_Line_Wrapper';
150    l_full_path         VARCHAR2(255);
151 
152 BEGIN
153 
154    l_full_path := g_path || 'Account_Line_Wrapper';
155 
156    x_return_status := FND_API.G_RET_STS_SUCCESS;
157 
158 -- ---------------------------------------------------------------------------------
159 -- Make sure that the action requested to be performed is to UPDATE a row.
160 -- ---------------------------------------------------------------------------------
161    IF (p_action_flag = 'U') THEN
162 
163       IGC_CC_ACCT_LINES_PKG.Update_Row (
164          p_api_version,
165          p_init_msg_list,
166          p_commit,
167          p_validation_level,
168          x_return_status,
169          X_msg_count,
170          X_msg_data,
171          x_rowid,
172          p_cc_acct_lines_rec.CC_acct_line_id,
173          p_cc_acct_lines_rec.CC_header_id,
174          p_cc_acct_lines_rec.Parent_Header_Id,
175          p_cc_acct_lines_rec.Parent_Acct_Line_Id,
176          p_cc_acct_lines_rec.CC_Charge_Code_Combination_Id,
177          p_cc_acct_lines_rec.CC_Acct_Line_Num,
178          p_cc_acct_lines_rec.CC_Budget_Code_Combination_Id,
179          p_cc_acct_lines_rec.CC_Acct_Entered_Amt,
180          p_cc_acct_lines_rec.CC_Acct_Func_Amt,
181          p_cc_acct_lines_rec.CC_Acct_Desc,
182          p_cc_acct_lines_rec.CC_Acct_Billed_Amt,
183          p_cc_acct_lines_rec.CC_Acct_Unbilled_Amt,
184          p_cc_acct_lines_rec.CC_Acct_Taxable_Flag,
185          p_cc_acct_lines_rec.Tax_Id,
186          p_cc_acct_lines_rec.cc_acct_encmbrnc_amt,
187          p_cc_acct_lines_rec.cc_acct_encmbrnc_date,
188          p_cc_acct_lines_rec.CC_Acct_Encmbrnc_Status,
189          p_cc_acct_lines_rec.Project_Id,
190          p_cc_acct_lines_rec.Task_Id,
191          p_cc_acct_lines_rec.Expenditure_Type,
192          p_cc_acct_lines_rec.Expenditure_Org_Id,
193          p_cc_acct_lines_rec.Expenditure_Item_Date,
194          p_cc_acct_lines_rec.Last_Update_Date,
195          p_cc_acct_lines_rec.Last_Updated_By,
196          p_cc_acct_lines_rec.Last_Update_Login,
197          p_cc_acct_lines_rec.Creation_Date,
198          p_cc_acct_lines_rec.Created_By,
199          p_cc_acct_lines_rec.Attribute1,
200          p_cc_acct_lines_rec.Attribute2,
201          p_cc_acct_lines_rec.Attribute3,
202          p_cc_acct_lines_rec.Attribute4,
203          p_cc_acct_lines_rec.Attribute5,
204          p_cc_acct_lines_rec.Attribute6,
205          p_cc_acct_lines_rec.Attribute7,
206          p_cc_acct_lines_rec.Attribute8,
207          p_cc_acct_lines_rec.Attribute9,
208          p_cc_acct_lines_rec.Attribute10,
209          p_cc_acct_lines_rec.Attribute11,
210          p_cc_acct_lines_rec.Attribute12,
211          p_cc_acct_lines_rec.Attribute13,
212          p_cc_acct_lines_rec.Attribute14,
213          p_cc_acct_lines_rec.Attribute15,
214          p_cc_acct_lines_rec.Context,
215          p_cc_acct_lines_rec.cc_func_withheld_amt,
216          p_cc_acct_lines_rec.cc_ent_withheld_amt,
217          p_update_flag,
218          p_cc_acct_lines_rec.Tax_Classif_Code
219         );
220 
221    ELSE
222 
223 -- ------------------------------------------------------------------------------------
224 -- Handle exception where the action flag is NOT Valid.  Return Status of Failure
225 -- ------------------------------------------------------------------------------------
226       x_return_status := FND_API.G_RET_STS_ERROR;
227 
228    END IF;
229 
230    RETURN;
231 
232 EXCEPTION
233 
234   WHEN OTHERS THEN
235 
236     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
237     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
238        FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
239                                  l_api_name);
240     END if;
241 
242     FND_MSG_PUB.Count_And_Get ( p_count => X_msg_count,
243                                 p_data  => X_msg_data );
244 
245     IF ( g_unexp_level >= g_debug_level ) THEN
246        FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
247        FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
248        FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
249        FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
250     END IF;
251     RETURN;
252 
253 END Account_Line_Wrapper;
254 
255 
256 PROCEDURE Det_Pf_Wrapper
257 (
258   p_api_version                   IN              NUMBER,
259   p_init_msg_list                 IN              VARCHAR2 := FND_API.G_FALSE,
260   p_commit                        IN              VARCHAR2 := FND_API.G_FALSE,
261   p_validation_level              IN              NUMBER   := FND_API.G_VALID_LEVEL_FULL,
262   x_return_status                 OUT NOCOPY      VARCHAR2,
263   x_msg_count                     OUT NOCOPY      NUMBER,
264   x_msg_data                      OUT NOCOPY      VARCHAR2,
265   x_rowid                         IN OUT NOCOPY   VARCHAR2,
266   p_action_flag                   IN              VARCHAR2,
267   p_cc_pmt_fcst_rec               IN              igc_cc_det_pf%ROWTYPE,
268   p_update_flag                IN OUT NOCOPY      VARCHAR2
269 ) IS
270 
271    l_api_name        CONSTANT VARCHAR2(30)   := 'Det_Pf_Wrapper';
272    l_full_path         VARCHAR2(255);
273 
274 BEGIN
275 
276    l_full_path := g_path || 'Det_Pf_Wrapper';
277 
278    x_return_status := FND_API.G_RET_STS_SUCCESS;
279 
280 -- ---------------------------------------------------------------------------------
281 -- Make sure that the action requested to be performed is to UPDATE a row.
282 -- ---------------------------------------------------------------------------------
283    IF (p_action_flag = 'U') THEN
284 
285       IGC_CC_DET_PF_PKG.Update_Row (
286             p_api_version,
287             p_init_msg_list,
288             p_commit,
289             p_validation_level,
290             x_return_status,
291             x_msg_count,
292             x_msg_data,
293             x_rowid,
294             p_cc_pmt_fcst_rec.CC_det_pf_line_id,
295             p_cc_pmt_fcst_rec.CC_Det_PF_Line_Num,
296             p_cc_pmt_fcst_rec.CC_Acct_Line_Id,
297             p_cc_pmt_fcst_rec.Parent_Acct_Line_Id,
298             p_cc_pmt_fcst_rec.Parent_Det_PF_Line_Id,
299             p_cc_pmt_fcst_rec.CC_Det_PF_Entered_Amt,
300             p_cc_pmt_fcst_rec.CC_Det_PF_Func_Amt,
301             p_cc_pmt_fcst_rec.CC_Det_PF_Date,
302             p_cc_pmt_fcst_rec.CC_Det_PF_Billed_Amt,
303             p_cc_pmt_fcst_rec.CC_Det_PF_Unbilled_Amt,
304             p_cc_pmt_fcst_rec.CC_Det_PF_Encmbrnc_Amt,
305             p_cc_pmt_fcst_rec.CC_Det_PF_Encmbrnc_Date,
306             p_cc_pmt_fcst_rec.CC_Det_PF_Encmbrnc_Status,
307             p_cc_pmt_fcst_rec.Last_Update_Date,
308             p_cc_pmt_fcst_rec.Last_Updated_By,
309             p_cc_pmt_fcst_rec.Last_Update_Login,
310             p_cc_pmt_fcst_rec.Creation_Date,
311             p_cc_pmt_fcst_rec.Created_By,
312             p_cc_pmt_fcst_rec.Attribute1,
313             p_cc_pmt_fcst_rec.Attribute2,
314             p_cc_pmt_fcst_rec.Attribute3,
315             p_cc_pmt_fcst_rec.Attribute4,
316             p_cc_pmt_fcst_rec.Attribute5,
317             p_cc_pmt_fcst_rec.Attribute6,
318             p_cc_pmt_fcst_rec.Attribute7,
319             p_cc_pmt_fcst_rec.Attribute8,
320             p_cc_pmt_fcst_rec.Attribute9,
321             p_cc_pmt_fcst_rec.Attribute10,
322             p_cc_pmt_fcst_rec.Attribute11,
323             p_cc_pmt_fcst_rec.Attribute12,
324             p_cc_pmt_fcst_rec.Attribute13,
325             p_cc_pmt_fcst_rec.Attribute14,
326             p_cc_pmt_fcst_rec.Attribute15,
327             p_cc_pmt_fcst_rec.Context,
328             p_update_flag
329            );
330 
331    ELSE
332 
333 -- ------------------------------------------------------------------------------------
334 -- Handle exception where the action flag is NOT Valid.  Return Status of Failure
335 -- ------------------------------------------------------------------------------------
336       x_return_status := FND_API.G_RET_STS_ERROR;
337 
338    END IF;
339 
340    RETURN;
341 
342 EXCEPTION
343 
344   WHEN OTHERS THEN
345 
346     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
347     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
348        FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
349                                  l_api_name);
350     END if;
351 
352     FND_MSG_PUB.Count_And_Get ( p_count => X_msg_count,
353                                 p_data  => X_msg_data );
354 
355     IF ( g_unexp_level >= g_debug_level ) THEN
356        FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
357        FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
358        FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
359        FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
360     END IF;
361     RETURN;
362 
363 END Det_Pf_Wrapper;
364 
365 PROCEDURE Header_Wrapper
366 (
367   p_api_version                   IN       NUMBER,
368   p_init_msg_list                 IN       VARCHAR2 := FND_API.G_FALSE,
369   p_commit                        IN       VARCHAR2 := FND_API.G_FALSE,
370   p_validation_level              IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
371   x_return_status                 OUT NOCOPY      VARCHAR2,
372   x_msg_count                     OUT NOCOPY      NUMBER,
373   x_msg_data                      OUT NOCOPY      VARCHAR2,
374   x_rowid                      IN OUT NOCOPY      VARCHAR2,
375   p_action_flag                   IN       VARCHAR2,
376   p_cc_header_rec                 IN       igc_cc_headers%ROWTYPE,
377   p_update_flag                IN OUT NOCOPY      VARCHAR2
378 ) IS
379 
380    l_api_name        CONSTANT VARCHAR2(30)   := 'Header_Wrapper';
381    l_full_path         VARCHAR2(255);
382 
383 BEGIN
384 
385    l_full_path := g_path || 'Header_Wrapper';
386 
387    x_return_status := FND_API.G_RET_STS_SUCCESS;
388 
389 -- ---------------------------------------------------------------------------------
390 -- Make sure that the action requested to be performed is to UPDATE a row.
391 -- ---------------------------------------------------------------------------------
392    IF (p_action_flag = 'U') THEN
393 
394       IGC_CC_HEADERS_PKG.Update_Row (
395             p_api_version,
396             p_init_msg_list,
397             p_commit,
398             p_validation_level,
399             x_return_status,
400             x_msg_count,
401             x_msg_data,
402             x_rowid,
403             p_cc_header_rec.CC_Header_Id,
404             p_cc_header_rec.Org_id,
405             p_cc_header_rec.CC_Type,
406             p_cc_header_rec.CC_Num,
407             p_cc_header_rec.CC_Version_num,
408             p_cc_header_rec.Parent_Header_Id,
409             p_cc_header_rec.CC_State,
410             p_cc_header_rec.CC_ctrl_status,
411             p_cc_header_rec.CC_Encmbrnc_Status,
412             p_cc_header_rec.CC_Apprvl_Status,
413             p_cc_header_rec.Vendor_Id,
414             p_cc_header_rec.Vendor_Site_Id,
415             p_cc_header_rec.Vendor_Contact_Id,
416             p_cc_header_rec.Term_Id,
417             p_cc_header_rec.Location_Id,
418             p_cc_header_rec.Set_Of_Books_Id,
419             p_cc_header_rec.CC_Acct_Date,
420             p_cc_header_rec.CC_Desc,
421             p_cc_header_rec.CC_Start_Date,
422             p_cc_header_rec.CC_End_Date,
423             p_cc_header_rec.CC_Owner_User_Id,
424             p_cc_header_rec.CC_Preparer_User_Id,
425             p_cc_header_rec.Currency_Code,
426             p_cc_header_rec.Conversion_Type,
427             p_cc_header_rec.Conversion_Date,
428             p_cc_header_rec.Conversion_Rate,
429             p_cc_header_rec.Last_Update_Date,
430             p_cc_header_rec.Last_Updated_By,
431             p_cc_header_rec.Last_Update_Login,
432             p_cc_header_rec.Created_By,
433             p_cc_header_rec.Creation_Date,
434             p_cc_header_rec.CC_Current_User_Id,
435             p_cc_header_rec.Wf_Item_Type,
436             p_cc_header_rec.Wf_Item_Key,
437             p_cc_header_rec.Attribute1,
438             p_cc_header_rec.Attribute2,
439             p_cc_header_rec.Attribute3,
440             p_cc_header_rec.Attribute4,
441             p_cc_header_rec.Attribute5,
442             p_cc_header_rec.Attribute6,
443             p_cc_header_rec.Attribute7,
444             p_cc_header_rec.Attribute8,
445             p_cc_header_rec.Attribute9,
446             p_cc_header_rec.Attribute10,
447             p_cc_header_rec.Attribute11,
448             p_cc_header_rec.Attribute12,
449             p_cc_header_rec.Attribute13,
450             p_cc_header_rec.Attribute14,
451             p_cc_header_rec.Attribute15,
452             p_cc_header_rec.Context,
453             p_cc_header_rec.Cc_Guarantee_Flag,
454             p_update_flag
455            );
456 
457    ELSE
458 
459 -- ------------------------------------------------------------------------------------
460 -- Handle exception where the action flag is NOT Valid.  Return Status of Failure
461 -- ------------------------------------------------------------------------------------
462       x_return_status := FND_API.G_RET_STS_ERROR;
463 
464    END IF;
465 
466    RETURN;
467 
468 EXCEPTION
469 
470   WHEN OTHERS THEN
471 
472     X_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
473     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
474        FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
475                                  l_api_name);
476     END if;
477 
478     FND_MSG_PUB.Count_And_Get ( p_count => X_msg_count,
479                                 p_data  => X_msg_data );
480 
481     IF ( g_unexp_level >= g_debug_level ) THEN
482        FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
483        FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
484        FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
485        FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
486     END IF;
487     RETURN;
488 
489 END Header_Wrapper;
490 
491 
492 PROCEDURE Execute_Rel_Budgetary_Ctrl
493 (
494   p_api_version                   IN       NUMBER,
495   p_init_msg_list                 IN       VARCHAR2 := FND_API.G_FALSE,
496   p_commit                        IN       VARCHAR2 := FND_API.G_FALSE,
497   p_validation_level              IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
498   x_return_status                 OUT NOCOPY      VARCHAR2,
499   x_msg_count                     OUT NOCOPY      NUMBER,
500   x_msg_data                      OUT NOCOPY      VARCHAR2,
501   p_cc_header_id                  IN       NUMBER,
502   p_accounting_date               IN       DATE,
503   p_cbc_on        IN      BOOLEAN,
504   p_currency_code                 IN       VARCHAR2
505 )
506 IS
507   l_api_name                      CONSTANT VARCHAR2(30)   := 'Execute_Rel_Budgetary_Ctrl';
508   l_api_version                   CONSTANT NUMBER         :=  1.0;
509 
510   l_cc_headers_rec                igc_cc_headers%ROWTYPE;
511   l_cc_acct_lines_rec             igc_cc_acct_lines_v%ROWTYPE;
512   l_cc_pmt_fcst_rec               igc_cc_det_pf_v%ROWTYPE;
513 
514   l_transaction_date              DATE;
515 
516   l_cc_acct_comp_func_amt         igc_cc_acct_lines_v.cc_acct_comp_func_amt%TYPE;
517   l_cc_acct_enc_amt         igc_cc_acct_lines_v.cc_acct_encmbrnc_amt%TYPE;
518 
519   l_cc_det_pf_comp_func_amt       igc_cc_det_pf_v.cc_det_pf_comp_func_amt%TYPE;
520   l_cc_det_pf_enc_amt             igc_cc_det_pf_v.cc_det_pf_encmbrnc_amt%TYPE;
521 
522   l_billed_amt                    NUMBER;
523   l_func_billed_amt               NUMBER;
524   l_encumbrance_status            VARCHAR2(1);
525   l_error_message                 VARCHAR2(2000);
526 
527 -- -------------------------------------------------------------------------
528 -- Variables to be used in calls to the table wrapper procedures.
529 -- -------------------------------------------------------------------------
530         l_validation_level              NUMBER;
531         l_return_status                 VARCHAR2(1);
532         l_msg_count                     NUMBER;
533         l_msg_data                      VARCHAR2(2000);
534         l_row_id                        VARCHAR2(18);
535         l_update_flag                   VARCHAR2(1);
536         l_update_login                  igc_cc_acct_lines.last_update_login%TYPE;
537         l_update_by                     igc_cc_acct_lines.last_updated_by%TYPE;
538 
539 -- -------------------------------------------------------------------------
540 -- Record definitions to be used for CURSORS getting single record for
541 -- the table wrappers.  These record definitions are NOT the same as the
542 -- ones above when getting data from the views.
543 -- -------------------------------------------------------------------------
544         l_det_pf_rec                    igc_cc_det_pf%ROWTYPE;
545         l_acct_line_rec                 igc_cc_acct_lines%ROWTYPE;
546 
547   /* Contract Commitment account lines  */
548 
549 -- Bug 2885953 - amended cursor below for performance enhancements
550 --    CURSOR c_account_lines(t_cc_header_id NUMBER) IS
551 --    SELECT *
552 --        FROM  igc_cc_acct_lines_v ccac
553 --        WHERE ccac.cc_header_id = t_cc_header_id;
554   CURSOR c_account_lines(t_cc_header_id NUMBER) IS
555   SELECT ccac.ROWID,
556                ccac.cc_header_id,
557                NULL org_id,
558                NULL cc_type,
559                NULL cc_type_code,
560                NULL cc_num,
561                ccac.cc_acct_line_id,
562                ccac.cc_acct_line_num,
563                ccac.cc_acct_desc,
564                ccac.parent_header_id,
565                ccac.parent_acct_line_id,
566                NULL parent_cc_acct_line_num,
567                NULL cc_budget_acct_desc,
568                ccac.cc_budget_code_combination_id,
569                NULL cc_charge_acct_desc,
570                ccac.cc_charge_code_combination_id,
571                ccac.cc_acct_entered_amt,
572                ccac.cc_acct_func_amt,
573                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_billed_amt,
574                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_func_billed_amt,
575                ccac.cc_acct_encmbrnc_amt,
576                (IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0)) - NVL(ccac.cc_acct_encmbrnc_amt,0)) cc_acct_unencmrd_amt,
577                ccac.cc_acct_unbilled_amt,
578                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0))
579                cc_acct_comp_func_amt,
580                NULL project_number,
581                ccac.project_id,
582                NULL task_number,
583                ccac.task_id,
584                ccac.expenditure_type,
585                NULL expenditure_org_name,
586                ccac.expenditure_org_id,
587                ccac.expenditure_item_date,
588                ccac.cc_acct_taxable_flag,
589                NULL tax_name,
590                ccac.tax_id,
591                ccac.cc_acct_encmbrnc_status,
592                ccac.cc_acct_encmbrnc_date,
593                ccac.context,
594                ccac.attribute1,
595                ccac.attribute2,
596                ccac.attribute3,
597                ccac.attribute4,
598                ccac.attribute5,
599                ccac.attribute6,
600                ccac.attribute7,
601                ccac.attribute8,
602                ccac.attribute9,
603                ccac.attribute10,
604                ccac.attribute11,
605                ccac.attribute12,
606                ccac.attribute13,
607                ccac.attribute14,
608                ccac.attribute15,
609                ccac.created_by,
610                ccac.creation_date,
611                ccac.last_updated_by,
612                ccac.last_update_date,
613                ccac.last_update_login,
614                ccac.cc_func_withheld_amt,
615                ccac.cc_ent_withheld_amt,
616                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_func_withheld_amt,0)) cc_comp_func_whld_amt,
617                ccac.Tax_Classif_Code
618         FROM  igc_cc_acct_lines ccac
619         WHERE ccac.cc_header_id = t_cc_header_id;
620 
621   /* Contract  Detail Payment Forecast lines  */
622 
623   CURSOR c_payment_forecast(t_cc_acct_line_id NUMBER) IS
624         -- Performance Tuning, Replaced view igc_cc_det_pf_v with
625         -- igc_cc_det_pf
626   -- SELECT *
627         -- FROM  igc_cc_det_pf_v
628         -- WHERE cc_acct_line_id = t_cc_acct_line_id;
629         SELECT ccdpf.ROWID,
630                ccdpf.cc_det_pf_line_id,
631                ccdpf.cc_det_pf_line_num,
632                NULL  cc_acct_line_num,
633                ccdpf.cc_acct_line_id,
634                NULL  parent_det_pf_line_num,
635                ccdpf.parent_det_pf_line_id,
636                ccdpf.parent_acct_line_id,
637                ccdpf.cc_det_pf_entered_amt,
638                ccdpf.cc_det_pf_func_amt,
639                ccdpf.cc_det_pf_date,
640                IGC_CC_COMP_AMT_PKG.COMPUTE_PF_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_billed_amt,
641                IGC_CC_COMP_AMT_PKG.COMPUTE_PF_FUNC_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_func_billed_amt,
642                ccdpf.cc_det_pf_unbilled_amt,
643                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(p_cc_header_id,NVL(ccdpf.cc_det_pf_entered_amt,0)) cc_det_pf_comp_func_amt,
644                ccdpf.cc_det_pf_encmbrnc_amt,
645                ( IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT ( p_cc_header_id, NVL(ccdpf.cc_det_pf_entered_amt,0) ) - NVL(ccdpf.cc_det_pf_encmbrnc_amt,0) ) cc_det_pf_unencmbrd_amt ,
646                ccdpf.cc_det_pf_encmbrnc_date,
647                ccdpf.cc_det_pf_encmbrnc_status,
648                ccdpf.context,
649                ccdpf.attribute1,
650                ccdpf.attribute2,
651                ccdpf.attribute3,
652                ccdpf.attribute4,
653                ccdpf.attribute5,
654                ccdpf.attribute6,
655                ccdpf.attribute7,
656                ccdpf.attribute8,
657                ccdpf.attribute9,
658                ccdpf.attribute10,
659                ccdpf.attribute11,
660                ccdpf.attribute12,
661                ccdpf.attribute13,
662                ccdpf.attribute14,
663                ccdpf.attribute15,
664                ccdpf.last_update_date,
665                ccdpf.last_updated_by,
666                ccdpf.last_update_login,
667                ccdpf.creation_date,
668                ccdpf.created_by
669         FROM igc_cc_det_pf ccdpf
670         WHERE ccdpf.cc_acct_line_id = t_cc_acct_line_id;
671 
672 -- -------------------------------------------------------------------------
673 -- Cursors used for obtaining a single line to be passed into the wrapper
674 -- functions for updating, inserting, deleting records from tables.
675 -- -------------------------------------------------------------------------
676         CURSOR c_cc_acct_line IS
677           SELECT *
678             FROM igc_cc_acct_lines
679            WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
680 
681         CURSOR c_det_pf_line IS
682           SELECT *
683             FROM igc_cc_det_pf
684            WHERE cc_det_pf_line_id = l_cc_pmt_fcst_rec.cc_det_pf_line_id;
685 
686    l_full_path         VARCHAR2(255);
687 
688 BEGIN
689 
690         l_full_path := g_path || 'Execute_Rel_Budgetary_Ctrl';
691 
692   SAVEPOINT Execute_Rel_Budgetary_Ctrl;
693 
694   IF FND_API.to_Boolean(p_init_msg_list)
695   THEN
696     FND_MSG_PUB.initialize;
697   END IF;
698 
699   IF NOT FND_API.Compatible_API_Call(l_api_version,
700              p_api_version,
701              l_api_name,
702              G_PKG_NAME)
703   THEN
704     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
705   END IF;
706 
707   x_return_status    := FND_API.G_RET_STS_SUCCESS;
708         l_validation_level := p_validation_level;
709         l_update_login     := FND_GLOBAL.LOGIN_ID;
710         l_update_by        := FND_GLOBAL.USER_ID;
711 
712   SELECT *
713   INTO l_cc_headers_rec
714   FROM igc_cc_headers
715   WHERE cc_header_id = p_cc_header_id;
716 
717   IF ( (l_cc_headers_rec.cc_state = 'PR') OR (l_cc_headers_rec.cc_state = 'CL') )
718   THEN
719     l_encumbrance_status := 'P';
720   END IF;
721 
722   IF ( (l_cc_headers_rec.cc_state = 'CM') OR (l_cc_headers_rec.cc_state = 'CT') )
723   THEN
724     l_encumbrance_status := 'C';
725   END IF;
726 
727 
728   OPEN c_account_lines(p_cc_header_id);
729 
730   LOOP
731 
732     FETCH c_account_lines INTO l_cc_acct_lines_rec;
733 
734     EXIT WHEN c_account_lines%NOTFOUND;
735 
736 -- ----------------------------------------------------------------------------------
737 -- Obtain the actual account line record based upon the data that was just retrieved
738 -- from the view.
739 -- ----------------------------------------------------------------------------------
740                 OPEN c_cc_acct_line;
741                 FETCH c_cc_acct_line
742                  INTO l_acct_line_rec;
743 
744                 IF (c_cc_acct_line%NOTFOUND) THEN
745                    EXIT;
746                 END IF;
747 
748                 CLOSE c_cc_acct_line;
749 
750 /*    IF (p_cbc_on = TRUE)
751     THEN*/ --Bug 5464993. Update amounts even when cbc is disabled
752 
753     IF (l_cc_headers_rec.cc_state = 'CL') THEN
754       -- Added for Bug 3219208
755       -- Entered Amt should be set to 0 when the CC is being
756       -- cancelled.
757       l_acct_line_rec.cc_acct_entered_amt     := 0;
758       l_acct_line_rec.cc_acct_func_amt        := 0;
759       l_cc_acct_comp_func_amt := 0;
760 
761         -- l_cc_acct_comp_func_amt := l_cc_acct_lines_rec.cc_acct_comp_func_amt;
762       l_cc_acct_enc_amt  := 0;
763       IF (p_cbc_on = TRUE)
764       THEN
765                         l_acct_line_rec.cc_acct_encmbrnc_amt    := 0;
766                           l_acct_line_rec.cc_acct_encmbrnc_status := 'N';
767                           l_acct_line_rec.cc_acct_encmbrnc_date   := p_accounting_date;
768       END IF;
769                   l_acct_line_rec.last_update_date        := SYSDATE;
770                   l_acct_line_rec.last_update_login       := l_update_login;
771                         l_acct_line_rec.last_updated_by         := l_update_by;
772 
773     ELSIF (l_cc_headers_rec.cc_state = 'PR') THEN
774 
775       IF (p_cbc_on = TRUE)
776       THEN
777         l_cc_acct_comp_func_amt := l_cc_acct_lines_rec.cc_acct_comp_func_amt;
778         l_cc_acct_enc_amt  := l_cc_acct_lines_rec.cc_acct_comp_func_amt;
779                           l_acct_line_rec.cc_acct_encmbrnc_amt    := l_cc_acct_comp_func_amt;
780                           l_acct_line_rec.cc_acct_encmbrnc_status := l_encumbrance_status;
781                           l_acct_line_rec.cc_acct_encmbrnc_date   := p_accounting_date;
782                           l_acct_line_rec.last_update_date        := SYSDATE;
783                           l_acct_line_rec.last_update_login       := l_update_login;
784                           l_acct_line_rec.last_updated_by         := l_update_by;
785       END IF;
786 
787     ELSIF (l_cc_headers_rec.cc_state = 'CM') THEN
788 
789       IF (p_cbc_on = TRUE)
790       THEN
791         l_cc_acct_comp_func_amt := l_cc_acct_lines_rec.cc_acct_comp_func_amt;
792         l_cc_acct_enc_amt       := l_cc_acct_lines_rec.cc_acct_comp_func_amt;
793                           l_acct_line_rec.cc_acct_encmbrnc_amt    := l_cc_acct_comp_func_amt;
794                           l_acct_line_rec.cc_acct_encmbrnc_status := l_encumbrance_status;
795                           l_acct_line_rec.cc_acct_encmbrnc_date   := p_accounting_date;
796                           l_acct_line_rec.last_update_date        := SYSDATE;
797                           l_acct_line_rec.last_update_login       := l_update_login;
798                           l_acct_line_rec.last_updated_by         := l_update_by;
799       END IF;
800 
801     ELSIF (l_cc_headers_rec.cc_state = 'CT') THEN
802 
803             l_billed_amt      := 0;
804             l_func_billed_amt := 0;
805                                 -- Performance Tuning, Replaced view
806                                 -- igc_cc_acct_lines_v with
807                                 -- igc_cc_acct_lines and replaced the line
808                                 -- below.
809         -- SELECT cc_acct_billed_amt , cc_acct_func_billed_amt
810                         SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_billed_amt,
811                                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_func_billed_amt
812         INTO   l_billed_amt,l_func_billed_amt
813         FROM   igc_cc_acct_lines ccal
814         WHERE  ccal.cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
815 
816       IF (p_currency_code <> l_cc_headers_rec.currency_code) THEN
817 
818                             l_CC_Acct_Comp_Func_Amt := l_func_billed_amt;
819                                 l_CC_Acct_Enc_Amt       := l_func_billed_amt;
820 
821                                 l_acct_line_rec.cc_acct_entered_amt     := l_billed_amt;
822                                 l_acct_line_rec.cc_acct_func_amt        := l_func_billed_amt;
823         IF (p_cbc_on = TRUE)
824         THEN
825                                         l_acct_line_rec.cc_acct_encmbrnc_amt    := l_func_billed_amt;
826                                         l_acct_line_rec.cc_acct_encmbrnc_status := 'N';
827                                         l_acct_line_rec.cc_acct_encmbrnc_date   := p_accounting_date;
828         END IF;
829                                 l_acct_line_rec.last_update_date        := SYSDATE;
830                                 l_acct_line_rec.last_update_login       := l_update_login;
831                                 l_acct_line_rec.last_updated_by         := l_update_by;
832 
833                                 -- 2043221, Bidisha , 19 Oct 2001
834                                 -- Withheld amount should be set to 0 if the CC
835                                 -- is completed.
836                                 l_acct_line_rec.cc_func_withheld_amt    := 0;
837                                 l_acct_line_rec.cc_ent_withheld_amt     := 0;
838 
839       ELSE
840 
841                           l_CC_Acct_Comp_Func_Amt := l_billed_amt;
842                                 l_CC_Acct_Enc_Amt       := l_billed_amt;
843 
844                                 l_acct_line_rec.cc_acct_entered_amt     := l_billed_amt;
845                                 l_acct_line_rec.cc_acct_func_amt        := l_billed_amt;
846         IF (p_cbc_on = TRUE)
847         THEN
848                                         l_acct_line_rec.cc_acct_encmbrnc_amt    := l_billed_amt;
849                                         l_acct_line_rec.cc_acct_encmbrnc_status := 'N';
850                                         l_acct_line_rec.cc_acct_encmbrnc_date   := p_accounting_date;
851         END IF;
852                                 l_acct_line_rec.last_update_date        := SYSDATE;
853                                 l_acct_line_rec.last_update_login       := l_update_login;
854                                 l_acct_line_rec.last_updated_by         := l_update_by;
855 
856                                 -- 2043221, Bidisha , 19 Oct 2001
857                                 -- Withheld amount should be set to 0 if the CC
858                                 -- is completed.
859                                 l_acct_line_rec.cc_func_withheld_amt    := 0;
860                                 l_acct_line_rec.cc_ent_withheld_amt     := 0;
861       END IF;
862 
863     ELSE
864 
865 -- --------------------------------------------------------------------------------------
866 -- Unknown CC State in the Header record so abort the process for the Account Lines.
867 -- --------------------------------------------------------------------------------------
868                            fnd_message.set_name('IGC', 'IGC_INVALID_CC_HEADER_STATE');
869                            fnd_message.set_token('HEADER_STATE', l_cc_headers_rec.cc_state);
870                            fnd_message.set_token('CC_NUM_VAL', l_cc_headers_rec.cc_num);
871                            IF(g_error_level >= g_debug_level) THEN
872                               FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
873                            END IF;
874                            fnd_msg_pub.add;
875                            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
876 
877     END IF;
878 
879                 SELECT rowid
880                 INTO l_row_id
881                 FROM igc_cc_acct_lines
882                 WHERE cc_acct_line_id = l_acct_line_rec.cc_acct_line_id;
883 
884                 Account_Line_Wrapper (p_api_version       => l_api_version,
885                                               p_init_msg_list     => FND_API.G_FALSE,
886                                               p_commit            => FND_API.G_FALSE,
887                                               p_validation_level  => l_validation_level,
888                                               x_return_status     => l_return_status,
889                                               x_msg_count         => l_msg_count,
890                                               x_msg_data          => l_msg_data,
891                                               x_rowid             => l_row_id,
892                                               p_action_flag       => 'U',
893                                               p_cc_acct_lines_rec => l_acct_line_rec,
894                                               p_update_flag       => l_update_flag
895                                              );
896 
897                   IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
898                         x_msg_data  := l_msg_data;
899                         x_msg_count := l_msg_count;
900                         RAISE FND_API.G_EXC_ERROR;
901                   END IF;
902 --    END IF;
903 
904 
905     OPEN c_payment_forecast(l_cc_acct_lines_rec.cc_acct_line_id);
906 
907     LOOP
908 
909       FETCH c_payment_forecast INTO l_cc_pmt_fcst_rec;
910 
911       EXIT WHEN c_payment_forecast%NOTFOUND;
912 
913 -- ----------------------------------------------------------------------------------
914 -- Obtain the actual Det PF line record based upon the data that was just retrieved
915 -- from the view.
916 -- ----------------------------------------------------------------------------------
917                         OPEN c_det_pf_line;
918                         FETCH c_det_pf_line
919                         INTO l_det_pf_rec;
920 
921                         IF (c_det_pf_line%NOTFOUND) THEN
922                            EXIT;
923                         END IF;
924 
925                         CLOSE c_det_pf_line;
926 
927       IF (l_cc_headers_rec.cc_state = 'CL') THEN
928 
929         -- Added for Bug 3219208
930         -- Entered Amt should be set to 0 when the CC is being
931         -- cancelled.
932         l_det_pf_rec.cc_det_pf_entered_amt     := 0;
933         l_det_pf_rec.cc_det_pf_func_amt        := 0;
934         l_cc_det_pf_comp_func_amt := 0;
935 
936         l_cc_det_pf_enc_amt := 0;
937         -- l_cc_det_pf_comp_func_amt := l_cc_pmt_fcst_rec.cc_det_pf_comp_func_amt;
938 
939         l_transaction_date := NULL;
940 
941                     IF (p_accounting_date IS NOT NULL) THEN
942 
943           IF (l_cc_pmt_fcst_rec.cc_det_pf_date < p_accounting_date)
944           THEN
945             l_transaction_date      :=  p_accounting_date;
946           ELSE
947             l_transaction_date      :=  l_cc_pmt_fcst_rec.cc_det_pf_date;
948           END IF;
949         END IF;
950 
951                     IF (p_accounting_date IS NULL) THEN
952 
953           IF (l_cc_pmt_fcst_rec.cc_det_pf_date < sysdate)
954           THEN
955             l_transaction_date      :=  sysdate;
956           ELSE
957             l_transaction_date      :=  l_cc_pmt_fcst_rec.cc_det_pf_date;
958 
959           END IF;
960         END IF;
961 
962                                 l_det_pf_rec.cc_det_pf_encmbrnc_amt    := 0;
963                                 l_det_pf_rec.cc_det_pf_encmbrnc_status := 'N';
964                                 l_det_pf_rec.cc_det_pf_date            := l_transaction_date;
965                                 l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_transaction_date;
966                                 l_det_pf_rec.last_update_date          := SYSDATE;
967                                 l_det_pf_rec.last_update_login         := l_update_login;
968                                 l_det_pf_rec.last_updated_by           := l_update_by;
969 
970       ELSIF (l_cc_headers_rec.cc_state = 'PR') THEN
971 
972         l_cc_det_pf_enc_amt  := l_cc_pmt_fcst_rec.cc_det_pf_comp_func_amt;
973         l_cc_det_pf_comp_func_amt := l_cc_pmt_fcst_rec.cc_det_pf_comp_func_amt;
974                         l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_cc_det_pf_comp_func_amt;
975                         l_det_pf_rec.cc_det_pf_encmbrnc_status := l_encumbrance_status;
976                         l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_pmt_fcst_rec.cc_det_pf_date;
977                         l_det_pf_rec.last_update_date          := SYSDATE;
978                         l_det_pf_rec.last_update_login         := l_update_login;
979                         l_det_pf_rec.last_updated_by           := l_update_by;
980 
981       ELSIF (l_cc_headers_rec.cc_state = 'CM') THEN
982 
983         l_cc_det_pf_enc_amt       := l_cc_pmt_fcst_rec.cc_det_pf_comp_func_amt;
984         l_cc_det_pf_comp_func_amt := l_cc_pmt_fcst_rec.cc_det_pf_comp_func_amt;
985                         l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_cc_det_pf_comp_func_amt;
986                         l_det_pf_rec.cc_det_pf_encmbrnc_status := l_encumbrance_status;
987                         l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_pmt_fcst_rec.cc_det_pf_date;
988                         l_det_pf_rec.last_update_date          := SYSDATE;
989                         l_det_pf_rec.last_update_login         := l_update_login;
990                         l_det_pf_rec.last_updated_by           := l_update_by;
991 
992       ELSIF (l_cc_headers_rec.cc_state = 'CT') THEN
993 
994                                 l_billed_amt      := 0;
995                                 l_func_billed_amt := 0;
996 
997                                 -- Performance Tuning, Replaced view
998                                 -- igc_cc_det_pf_v with
999                                 -- igc_cc_det_pf and replaced the line
1000                                 -- below.
1001         -- SELECT cc_det_pf_billed_amt ,cc_det_pf_func_billed_amt
1002                                 SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_PF_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_billed_amt,
1003                                        IGC_CC_COMP_AMT_PKG.COMPUTE_PF_FUNC_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_func_billed_amt
1004         INTO l_billed_amt, l_func_billed_amt
1005         FROM igc_cc_det_pf ccdpf
1006         WHERE ccdpf.cc_det_pf_line_id = l_cc_pmt_fcst_rec.cc_det_pf_line_id;
1007 
1008         l_transaction_date := NULL;
1009 
1010                     IF (p_accounting_date IS NOT NULL)
1011         THEN
1012           IF (l_cc_pmt_fcst_rec.cc_det_pf_date < p_accounting_date)
1013           THEN
1014             l_transaction_date      :=  p_accounting_date;
1015           ELSE
1016             l_transaction_date      :=  l_cc_pmt_fcst_rec.cc_det_pf_date;
1017           END IF;
1018         END IF;
1019 
1020                     IF (p_accounting_date IS NULL)
1021         THEN
1022           IF (l_cc_pmt_fcst_rec.cc_det_pf_date < sysdate)
1023           THEN
1024             l_transaction_date      :=  sysdate;
1025           ELSE
1026             l_transaction_date      :=  l_cc_pmt_fcst_rec.cc_det_pf_date;
1027 
1028           END IF;
1029         END IF;
1030 
1031         IF (p_currency_code <> l_cc_headers_rec.currency_code)
1032         THEN
1033                                         l_cc_det_pf_comp_func_amt := l_func_billed_amt;
1034                                         l_cc_det_pf_enc_amt       := l_func_billed_amt;
1035 
1036                                         l_det_pf_rec.cc_det_pf_entered_amt     := l_billed_amt;
1037                                         l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_func_billed_amt;
1038                                         l_det_pf_rec.cc_det_pf_func_amt        := l_func_billed_amt;
1039                                         l_det_pf_rec.cc_det_pf_encmbrnc_status := 'N';
1040                                         l_det_pf_rec.cc_det_pf_date            := l_transaction_date;
1041                                         l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_transaction_date;
1042                                         l_det_pf_rec.last_update_date          := SYSDATE;
1043                                         l_det_pf_rec.last_update_login         := l_update_login;
1044                                         l_det_pf_rec.last_updated_by           := l_update_by;
1045 
1046                                         -- 2043221, Bidisha , 19 Oct 2001
1047                                         -- Withheld amount should be set to 0 if the CC
1048                                         -- is completed.
1049                                         l_acct_line_rec.cc_func_withheld_amt    := 0;
1050                                         l_acct_line_rec.cc_ent_withheld_amt     := 0;
1051         ELSE
1052 
1053                                         l_cc_det_pf_comp_func_amt := l_billed_amt;
1054                                         l_cc_det_pf_enc_amt       := l_billed_amt;
1055 
1056                                         l_det_pf_rec.cc_det_pf_entered_amt     := l_billed_amt;
1057                                         l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_billed_amt;
1058                                         l_det_pf_rec.cc_det_pf_func_amt        := l_billed_amt;
1059                                         l_det_pf_rec.cc_det_pf_encmbrnc_status := 'N';
1060                                         l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_transaction_date;
1061                                         l_det_pf_rec.last_update_date          := SYSDATE;
1062                                         l_det_pf_rec.last_update_login         := l_update_login;
1063                                         l_det_pf_rec.last_updated_by           := l_update_by;
1064 
1065                                         -- 2043221, Bidisha , 19 Oct 2001
1066                                         -- Withheld amount should be set to 0 if the CC
1067                                         -- is completed.
1068                                         l_acct_line_rec.cc_func_withheld_amt    := 0;
1069                                         l_acct_line_rec.cc_ent_withheld_amt     := 0;
1070         END IF;
1071 
1072                         ELSE
1073 
1074 -- -----------------------------------------------------------------------------
1075 -- Unknown CC State in the Header record for the Det PF update.  Exit Process.
1076 -- -----------------------------------------------------------------------------
1077                            fnd_message.set_name('IGC', 'IGC_INVALID_CC_HEADER_STATE');
1078                            fnd_message.set_token('HEADER_STATE', l_cc_headers_rec.cc_state);
1079                            fnd_message.set_token('CC_NUM_VAL', l_cc_headers_rec.cc_num);
1080                            IF(g_error_level >= g_debug_level) THEN
1081                               FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
1082                            END IF;
1083                            fnd_msg_pub.add;
1084                            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1085 
1086       END IF;
1087 
1088                         SELECT rowid
1089                           INTO l_row_id
1090                           FROM igc_cc_det_pf
1091                          WHERE cc_det_pf_line_id = l_det_pf_rec.cc_det_pf_line_id;
1092 
1093                         Det_Pf_Wrapper (p_api_version      => l_api_version,
1094                                         p_init_msg_list    => FND_API.G_FALSE,
1095                                         p_commit           => FND_API.G_FALSE,
1096                                         p_validation_level => l_validation_level,
1097                                         x_return_status    => l_return_status,
1098                                         x_msg_count        => l_msg_count,
1099                                         x_msg_data         => l_msg_data,
1100                                         x_rowid            => l_row_id,
1101                                         p_action_flag      => 'U',
1102                                         p_cc_pmt_fcst_rec  => l_det_pf_rec,
1103                                         p_update_flag      => l_update_flag
1104                                        );
1105 
1106                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1107                            x_msg_data  := l_msg_data;
1108                            x_msg_count := l_msg_count;
1109                            RAISE FND_API.G_EXC_ERROR;
1110                         END IF;
1111 
1112     END LOOP;
1113 
1114     CLOSE c_payment_forecast;
1115                 IF (c_det_pf_line%ISOPEN) THEN
1116                    CLOSE c_det_pf_line;
1117                 END IF;
1118 
1119   END LOOP;
1120 
1121   CLOSE c_account_lines;
1122         IF (c_cc_acct_line%ISOPEN) THEN
1123            CLOSE c_cc_acct_line;
1124         END IF;
1125 
1126   IF ((l_cc_headers_rec.cc_state = 'CT') OR
1127             (l_cc_headers_rec.cc_state = 'CL')) THEN
1128 
1129            l_cc_headers_rec.cc_encmbrnc_status := 'N';
1130            l_cc_headers_rec.last_update_date   := SYSDATE;
1131            l_cc_headers_rec.last_update_login  := l_update_login;
1132            l_cc_headers_rec.last_updated_by    := l_update_by;
1133 
1134   ELSIF ((l_cc_headers_rec.cc_state = 'PR') OR
1135                (l_cc_headers_rec.cc_state = 'CM')) THEN
1136 
1137            l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status;
1138            l_cc_headers_rec.last_update_date   := SYSDATE;
1139            l_cc_headers_rec.last_update_login  := l_update_login;
1140            l_cc_headers_rec.last_updated_by    := l_update_by;
1141 
1142         ELSE
1143 
1144 -- -----------------------------------------------------------------------------
1145 -- Unknown CC State in the Header record for the Header update.  Exit Process.
1146 -- -----------------------------------------------------------------------------
1147            fnd_message.set_name('IGC', 'IGC_INVALID_CC_HEADER_STATE');
1148            fnd_message.set_token('HEADER_STATE', l_cc_headers_rec.cc_state);
1149            fnd_message.set_token('CC_NUM_VAL', l_cc_headers_rec.cc_num);
1150            IF(g_error_level >= g_debug_level) THEN
1151               FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
1152            END IF;
1153            fnd_msg_pub.add;
1154            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1155 
1156   END IF;
1157 
1158         SELECT rowid
1159           INTO l_row_id
1160           FROM igc_cc_headers
1161          WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
1162 
1163         l_cc_headers_rec.cc_acct_date := p_accounting_date;
1164 
1165         Header_Wrapper (p_api_version      => l_api_version,
1166                         p_init_msg_list    => FND_API.G_FALSE,
1167                         p_commit           => FND_API.G_FALSE,
1168                         p_validation_level => l_validation_level,
1169                         x_return_status    => l_return_status,
1170                         x_msg_count        => l_msg_count,
1171                         x_msg_data         => l_msg_data,
1172                         x_rowid            => l_row_id,
1173                         p_action_flag      => 'U',
1174                         p_cc_header_rec    => l_cc_headers_rec,
1175                         p_update_flag      => l_update_flag
1176                        );
1177 
1178         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1179            x_msg_data  := l_msg_data;
1180            x_msg_count := l_msg_count;
1181            RAISE FND_API.G_EXC_ERROR;
1182         END IF;
1183 
1184   IF FND_API.To_Boolean(p_commit)
1185   THEN
1186     COMMIT WORK;
1187   END IF;
1188 
1189 -- -----------------------------------------------------------------------------------
1190 -- Make sure that all cursors used in procedure are closed upon exit.
1191 -- -----------------------------------------------------------------------------------
1192         IF (c_account_lines%ISOPEN) THEN
1193            CLOSE c_account_lines;
1194         END IF;
1195         IF (c_cc_acct_line%ISOPEN) THEN
1196            CLOSE c_cc_acct_line;
1197         END IF;
1198         IF (c_payment_forecast%ISOPEN) THEN
1199            CLOSE c_payment_forecast;
1200         END IF;
1201         IF (c_det_pf_line%ISOPEN) THEN
1202            CLOSE c_det_pf_line;
1203         END IF;
1204 
1205         RETURN;
1206 
1207 EXCEPTION
1208 
1209         WHEN FND_API.G_EXC_ERROR
1210         THEN
1211                 ROLLBACK TO Execute_Rel_Budgetary_Ctrl;
1212                 x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
1213 
1214                 IF (c_account_lines%ISOPEN) THEN
1215                    CLOSE c_account_lines;
1216                 END IF;
1217                 IF (c_cc_acct_line%ISOPEN) THEN
1218                    CLOSE c_cc_acct_line;
1219                 END IF;
1220                 IF (c_payment_forecast%ISOPEN) THEN
1221                    CLOSE c_payment_forecast;
1222                 END IF;
1223                 IF (c_det_pf_line%ISOPEN) THEN
1224                    CLOSE c_det_pf_line;
1225                 END IF;
1226 
1227                 FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
1228                                             p_data  => x_msg_data );
1229                 IF (g_excep_level >=  g_debug_level ) THEN
1230                     FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_ERROR Exception Raised');
1231                 END IF;
1232 
1233      WHEN FND_API.G_EXC_UNEXPECTED_ERROR
1234      THEN
1235     ROLLBACK TO Execute_Rel_Budgetary_Ctrl;
1236     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
1237 
1238                 IF (c_account_lines%ISOPEN) THEN
1239                    CLOSE c_account_lines;
1240                 END IF;
1241                 IF (c_cc_acct_line%ISOPEN) THEN
1242                    CLOSE c_cc_acct_line;
1243                 END IF;
1244                 IF (c_payment_forecast%ISOPEN) THEN
1245                    CLOSE c_payment_forecast;
1246                 END IF;
1247                 IF (c_det_pf_line%ISOPEN) THEN
1248                    CLOSE c_det_pf_line;
1249                 END IF;
1250           FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
1251                                     p_data  => x_msg_data );
1252                 IF (g_excep_level >=  g_debug_level ) THEN
1253                     FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR Exception Raised');
1254                 END IF;
1255 
1256   WHEN OTHERS
1257   THEN
1258     ROLLBACK TO Execute_Rel_Budgetary_Ctrl;
1259     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
1260 
1261                 IF (c_account_lines%ISOPEN) THEN
1262                    CLOSE c_account_lines;
1263                 END IF;
1264                 IF (c_cc_acct_line%ISOPEN) THEN
1265                    CLOSE c_cc_acct_line;
1266                 END IF;
1267                 IF (c_payment_forecast%ISOPEN) THEN
1268                    CLOSE c_payment_forecast;
1269                 END IF;
1270                 IF (c_det_pf_line%ISOPEN) THEN
1271                    CLOSE c_det_pf_line;
1272                 END IF;
1273 
1274     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1275     THEN
1276       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
1277                                                   l_api_name);
1278     END IF;
1279 
1280     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
1281                                             p_data  => x_msg_data );
1282                 IF ( g_unexp_level >= g_debug_level ) THEN
1283                    FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
1284                    FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
1285                    FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
1286                    FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
1287                 END IF;
1288 
1289 END Execute_Rel_Budgetary_Ctrl;
1290 
1291 PROCEDURE Insert_Interface_Row(
1292    p_cc_interface_rec    IN     igc_cc_interface%ROWTYPE,
1293    x_msg_count           OUT NOCOPY    NUMBER,
1294    x_msg_data            OUT NOCOPY    VARCHAR2,
1295    x_return_status       OUT NOCOPY    VARCHAR2
1296 ) IS
1297 
1298   l_api_name      CONSTANT VARCHAR2(30)   := 'Insert_Interface_Row';
1299         l_full_path         VARCHAR2(255);
1300 
1301 BEGIN
1302 
1303         l_full_path := g_path || 'Insert_Interface_Row';
1304 
1305         x_return_status    := FND_API.G_RET_STS_SUCCESS;
1306 
1307   INSERT
1308           INTO igc_cc_interface (
1309     batch_line_num,
1310     cc_header_id,
1311     cc_version_num,
1312     cc_acct_line_id,
1313     cc_det_pf_line_id,
1314     set_of_books_id,
1315     code_combination_id,
1316     cc_transaction_date,
1317     transaction_description,
1318     encumbrance_type_id,
1319     currency_code,
1320     cc_func_dr_amt,
1321     cc_func_cr_amt,
1322     je_source_name,
1323     je_category_name,
1324     actual_flag,
1325     budget_dest_flag,
1326     last_update_date,
1327     last_updated_by,
1328     last_update_login,
1329     creation_date,
1330     created_by,
1331     period_set_name,
1332     period_name,
1333     cbc_result_code,
1334     status_code,
1335     budget_version_id,
1336     budget_amt,
1337     commitment_encmbrnc_amt,
1338     obligation_encmbrnc_amt,
1339     funds_available_amt,
1340     document_type,
1341     reference_1,
1342     reference_2,
1343     reference_3,
1344     reference_4,
1345     reference_5,
1346     reference_6,
1347     reference_7,
1348     reference_8,
1349     reference_9,
1350     reference_10,
1351     cc_encmbrnc_date,
1352     project_line --Bug 6341012 Added this column
1353          )
1354   VALUES
1355          (p_cc_interface_rec.batch_line_num,
1356     p_cc_interface_rec.cc_header_id,
1357     p_cc_interface_rec.cc_version_num,
1358     p_cc_interface_rec.cc_acct_line_id,
1359     p_cc_interface_rec.cc_det_pf_line_id,
1360     p_cc_interface_rec.set_of_books_id,
1361     p_cc_interface_rec.code_combination_id,
1362     p_cc_interface_rec.cc_transaction_date,
1363     p_cc_interface_rec.transaction_description,
1364     p_cc_interface_rec.encumbrance_type_id,
1365     p_cc_interface_rec.currency_code,
1366     p_cc_interface_rec.cc_func_dr_amt,
1367     p_cc_interface_rec.cc_func_cr_amt,
1368     p_cc_interface_rec.je_source_name,
1369     p_cc_interface_rec.je_category_name,
1370     p_cc_interface_rec.actual_flag,
1371     p_cc_interface_rec.budget_dest_flag,
1372     p_cc_interface_rec.last_update_date,
1373     p_cc_interface_rec.last_updated_by,
1374     p_cc_interface_rec.last_update_login,
1375     p_cc_interface_rec.creation_date,
1376     p_cc_interface_rec.created_by,
1377     p_cc_interface_rec.period_set_name,
1378     p_cc_interface_rec.period_name,
1379     p_cc_interface_rec.cbc_result_code,
1380     p_cc_interface_rec.status_code,
1381     p_cc_interface_rec.budget_version_id,
1382     p_cc_interface_rec.budget_amt,
1383     p_cc_interface_rec.commitment_encmbrnc_amt,
1384     p_cc_interface_rec.obligation_encmbrnc_amt,
1385     p_cc_interface_rec.funds_available_amt,
1386     p_cc_interface_rec.document_type,
1387     p_cc_interface_rec.reference_1,
1388     p_cc_interface_rec.reference_2,
1389     p_cc_interface_rec.reference_3,
1390     p_cc_interface_rec.reference_4,
1391     p_cc_interface_rec.reference_5,
1392     p_cc_interface_rec.reference_6,
1393     p_cc_interface_rec.reference_7,
1394     p_cc_interface_rec.reference_8,
1395     p_cc_interface_rec.reference_9,
1396     p_cc_interface_rec.reference_10,
1397     p_cc_interface_rec.cc_encmbrnc_date,
1398     p_cc_interface_rec.project_line  --Bug 6341012 Added this column
1399                );
1400 
1401         RETURN;
1402 
1403 EXCEPTION
1404 
1405         WHEN OTHERS
1406         THEN
1407             x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
1408 
1409             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1410             THEN
1411                FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
1412                                          l_api_name);
1413             END IF;
1414 
1415             FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
1416                                         p_data  => x_msg_data );
1417             IF ( g_unexp_level >= g_debug_level ) THEN
1418                FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
1419                FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
1420                FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
1421                FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
1422             END IF;
1423 
1424 END Insert_Interface_Row;
1425 
1426 
1427 PROCEDURE Process_Interface_Row(
1428    p_currency_code             IN VARCHAR2,
1429    p_cc_headers_rec            IN igc_cc_headers%ROWTYPE,
1430    p_cc_acct_lines_rec         IN igc_cc_acct_lines_v%ROWTYPE,
1431    p_cc_pmt_fcst_rec           IN igc_cc_det_pf_v%ROWTYPE,
1432    p_mode                      IN VARCHAR2,
1433    p_type                      IN VARCHAR2,
1434    p_accounting_date           IN DATE,
1435    x_msg_count                OUT NOCOPY NUMBER,
1436    x_msg_data                 OUT NOCOPY VARCHAR2,
1437    x_return_status            OUT NOCOPY VARCHAR2
1438 ) IS
1439 
1440   l_cc_interface_rec igc_cc_interface%ROWTYPE;
1441   l_enc_amt          NUMBER;
1442   l_func_amt         NUMBER;
1443   l_billed_amt       NUMBER;
1444   l_func_billed_amt  NUMBER;
1445   l_unbilled_amt     NUMBER;
1446         l_return_status    VARCHAR2(1);
1447   l_api_name         CONSTANT VARCHAR2(30)   := 'Process_Interface_Row';
1448 
1449 
1450   l_enc_tax_amt          NUMBER;
1451   l_func_tax_amt         NUMBER;
1452   l_unbilled_tax_amt     NUMBER;
1453         l_msg_count            NUMBER;
1454         l_msg_data             VARCHAR2(2000);
1455         l_full_path            VARCHAR2(255);
1456   /* Added by 6341012 for SLA Uptake */
1457   l_sob_name VARCHAR2(30);
1458   P_Error_Code       VARCHAR2(32); /*Bug 6472296 EB Tax uptake - CC*/
1459   l_taxable_flag     VARCHAR2(2);  /*Bug 6472296 EB Tax uptake - CC*/
1460 BEGIN
1461 
1462         l_full_path := g_path || 'Process_Interface_Row';
1463 
1464         x_return_status    := FND_API.G_RET_STS_SUCCESS;
1465 
1466        -- Bug 1914745, clean up any old records before, more than 2 days old
1467        -- processing new ones.
1468        -- DELETE FROM igc_cc_interface
1469        --WHERE  to_date(creation_date,'DD/MM/YYYY') <= to_date((sysdate - interval '2' day), 'DD/MM/YYYY');
1470 
1471         -- Bug 2872060 delete statement above causing compilation probs in oracle8i
1472         DELETE FROM igc_cc_interface
1473         WHERE  to_date(creation_date,'DD/MM/YYYY') <= to_date(sysdate ,'DD/MM/YYYY') - 2;
1474 
1475   l_cc_interface_rec.cbc_result_code          := NULL;
1476   l_cc_interface_rec.status_code              := NULL;
1477   l_cc_interface_rec.budget_version_id        := NULL;
1478   l_cc_interface_rec.budget_amt               := NULL;
1479   l_cc_interface_rec.commitment_encmbrnc_amt  := NULL;
1480   l_cc_interface_rec.obligation_encmbrnc_amt  := NULL;
1481   l_cc_interface_rec.funds_available_amt      := NULL;
1482   l_cc_interface_rec.reference_1              := NULL;
1483   l_cc_interface_rec.reference_2              := NULL;
1484   l_cc_interface_rec.reference_3              := NULL;
1485   l_cc_interface_rec.reference_4              := NULL;
1486   l_cc_interface_rec.reference_5              := NULL;
1487   l_cc_interface_rec.reference_6              := NULL;
1488 -- ssmales 22/01/02 bug 2124137 - assign value 'EC' to reference_7
1489 --  l_cc_interface_rec.reference_7              := NULL;
1490         l_cc_interface_rec.reference_7              := 'EC';
1491   l_cc_interface_rec.reference_8              := NULL;
1492   l_cc_interface_rec.reference_9              := NULL;
1493   l_cc_interface_rec.reference_10             := NULL;
1494   l_cc_interface_rec.encumbrance_type_id      :=  Null; --added by 6341012
1495   l_cc_interface_rec.cc_encmbrnc_date         := NULL;
1496   l_cc_interface_rec.document_type            := 'CC';
1497 
1498   l_cc_interface_rec.cc_header_id             :=  p_cc_headers_rec.cc_header_id;
1499   l_cc_interface_rec.cc_version_num           :=  p_cc_headers_rec.cc_version_num;
1500   l_cc_interface_rec.set_of_books_id          :=  p_cc_headers_rec.set_of_books_id;
1501   l_cc_interface_rec.code_combination_id      :=  p_cc_acct_lines_rec.cc_budget_code_combination_id;
1502   l_cc_interface_rec.currency_code            :=  p_currency_code;
1503 --  l_cc_interface_rec.je_source_name           := 'Contract Commitment';  Bug 6341012 commented this line
1504   l_cc_interface_rec.actual_flag              :=  'E';
1505   l_cc_interface_rec.last_update_date         :=  sysdate;
1506   l_cc_interface_rec.last_updated_by          :=  -1;
1507   l_cc_interface_rec.last_update_login        :=  -1;
1508   l_cc_interface_rec.creation_date            :=  sysdate;
1509   l_cc_interface_rec.created_by               :=  -1;
1510   l_cc_interface_rec.transaction_description  :=  LTRIM(RTRIM(p_cc_headers_rec.cc_num))
1511                     || ' ' || rtrim(ltrim(p_cc_acct_lines_rec.cc_acct_desc));
1512 
1513 --     Bug 6341012 Added following 2 lines
1514   l_cc_interface_rec.Event_Id  :=  Null;
1515   l_cc_interface_rec.Project_line  := 'N';
1516 
1517 
1518   IF (p_type = 'A')
1519   THEN
1520     l_cc_interface_rec.cc_acct_line_id          :=  p_cc_acct_lines_rec.cc_acct_line_id;
1521     l_cc_interface_rec.cc_det_pf_line_id        :=  NULL;
1522     l_cc_interface_rec.cc_transaction_date      :=  p_accounting_date;
1523     l_cc_interface_rec.budget_dest_flag         :=  'C';
1524     l_enc_amt                                   :=  NVL(p_cc_acct_lines_rec.cc_acct_encmbrnc_amt,0);
1525     l_func_amt                                  :=  NVL(p_cc_acct_lines_rec.cc_acct_comp_func_amt,0);
1526     l_cc_interface_rec.reference_1              :=  p_cc_headers_rec.cc_header_id;
1527     l_cc_interface_rec.reference_2              :=  p_cc_acct_lines_rec.cc_acct_line_id;
1528     l_cc_interface_rec.reference_3              :=  p_cc_headers_rec.cc_version_num;
1529     l_cc_interface_rec.reference_4        :=  p_cc_headers_rec.cc_num;  /* Please check this  by 6341012 */
1530 
1531     IF (p_cc_headers_rec.cc_state = 'CT')
1532     THEN
1533                   l_billed_amt       := 0;
1534                   l_func_billed_amt  := 0;
1535                   l_func_amt         := 0;
1536 
1537                         -- Performance Tuning, Replaced view
1538                         -- igc_cc_acct_lines_v with
1539                         -- igc_cc_acct_lines and replaced the line
1540                         -- below.
1541       -- SELECT cc_acct_billed_amt , cc_acct_func_billed_amt, cc_acct_func_amt
1542 -- Modifications for bug# 12834070 begin
1543 /*                    SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_billed_amt,
1544                                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_func_billed_amt,
1545                                 cc_acct_func_amt
1546       INTO   l_billed_amt, l_func_billed_amt, l_func_amt
1547       FROM   igc_cc_acct_lines ccal
1548       WHERE  ccal.cc_acct_line_id = p_cc_acct_lines_rec.cc_acct_line_id;
1549 
1550         l_unbilled_amt       :=  l_func_amt - l_func_billed_amt;
1551 */
1552 
1553 
1554 
1555 SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_billed_amt,
1556            CC_ACCT_ENCMBRNC_AMT,
1557             cc_acct_func_amt
1558 INTO   l_billed_amt, l_func_billed_amt, l_func_amt
1559 FROM   igc_cc_acct_lines ccal
1560 WHERE  ccal.cc_acct_line_id = p_cc_acct_lines_rec.cc_acct_line_id;
1561  l_unbilled_amt       := l_func_billed_amt- l_func_amt ;
1562 
1563 IF (g_debug_mode = 'Y') THEN
1564 	g_debug_msg := 'Value of  l_billed_amt '|| l_billed_amt ;
1565 	Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
1566 	g_debug_msg := 'Value of  l_func_billed_amt '|| l_func_billed_amt ;
1567 	Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
1568 	g_debug_msg := 'Value of  l_func_amt '|| l_func_amt ;
1569 	Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
1570 	g_debug_msg := 'Value of  l_unbilled_amt '|| l_unbilled_amt ;
1571 	Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
1572 END IF;
1573 
1574 -- Modifications for bug# 12834070 end
1575 
1576     END IF;
1577 
1578   END IF;
1579 
1580   IF (p_type = 'P')
1581   THEN
1582     l_cc_interface_rec.cc_acct_line_id          :=  p_cc_acct_lines_rec.cc_acct_line_id;  --Bug 5464993
1583 --    l_cc_interface_rec.cc_acct_line_id          :=  NULL;
1584     l_cc_interface_rec.cc_det_pf_line_id        :=  p_cc_pmt_fcst_rec.cc_det_pf_line_id;
1585     l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
1586     l_cc_interface_rec.budget_dest_flag         :=  'S';
1587     l_enc_amt                                   :=  NVL(p_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_amt,0);
1588     l_func_amt                                  :=  NVL(p_cc_pmt_fcst_rec.cc_det_pf_comp_func_amt,0);
1589     l_cc_interface_rec.reference_1              :=  p_cc_headers_rec.cc_header_id;
1590     l_cc_interface_rec.reference_2              :=  p_cc_acct_lines_rec.cc_acct_line_id;
1591     l_cc_interface_rec.reference_3              :=  p_cc_headers_rec.cc_version_num;
1592 
1593 --    Bug 6341012  made reference_4 to be assigned from p_cc_headers_rec.cc_num rather than from p_cc_pmt_fcst.cc_det_pf_line_id
1594     l_cc_interface_rec.reference_4        :=  p_cc_headers_rec.cc_num;
1595 
1596 
1597     IF (p_cc_headers_rec.cc_state = 'CT')
1598     THEN
1599       l_billed_amt      := 0;
1600                         l_func_billed_amt := 0;
1601                         l_func_amt        := 0;
1602 
1603                         -- Performance Tuning, Replaced view
1604                         -- igc_cc_acct_lines_v with
1605                         -- igc_cc_acct_lines and replaced the line
1606                         -- below.
1607       -- SELECT cc_det_pf_billed_amt, cc_det_pf_func_billed_amt , cc_det_pf_func_amt
1608 -- Modifications for bug# 12834070 begin
1609 /*                    SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_PF_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_billed_amt,
1610                                IGC_CC_COMP_AMT_PKG.COMPUTE_PF_FUNC_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_func_billed_amt,
1611                               ccdpf.cc_det_pf_func_amt
1612         INTO l_billed_amt, l_func_billed_amt, l_func_amt
1613       FROM igc_cc_det_pf ccdpf
1614       WHERE ccdpf.cc_det_pf_line_id = p_cc_pmt_fcst_rec.cc_det_pf_line_id;
1615 
1616         l_unbilled_amt       :=   l_func_amt - l_func_billed_amt;
1617 */
1618 
1619 
1620                     SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_PF_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_billed_amt,
1621                               ccdpf.CC_DET_PF_ENCMBRNC_AMT cc_det_pf_func_billed_amt,
1622                               ccdpf.cc_det_pf_func_amt
1623         INTO l_billed_amt, l_func_billed_amt, l_func_amt
1624       FROM igc_cc_det_pf ccdpf
1625       WHERE ccdpf.cc_det_pf_line_id = p_cc_pmt_fcst_rec.cc_det_pf_line_id;
1626 
1627 l_unbilled_amt       := l_func_billed_amt- l_func_amt ;
1628 
1629 IF (g_debug_mode = 'Y') THEN
1630 	g_debug_msg := 'Value of  l_billed_amt '|| l_billed_amt ;
1631 	Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
1632 	g_debug_msg := 'Value of  l_func_billed_amt '|| l_func_billed_amt ;
1633 	Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
1634 	g_debug_msg := 'Value of  l_func_amt '|| l_func_amt ;
1635 	Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
1636 	g_debug_msg := 'Value of  l_unbilled_amt '|| l_unbilled_amt ;
1637 	Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
1638 END IF;
1639 
1640 -- Modifications for bug# 12834070 end
1641 
1642     END IF;
1643   END IF;
1644 
1645         /*EB Tax uptake - Bug No : 6472296*/
1646   -- Bug 2409502, On the 3 amounts, calculate the non recoverable tax
1647         -- Calculate on the l_enc_amt
1648 /*  igc_cc_budgetary_ctrl_pkg.calculate_nonrec_tax
1649     (p_api_version       => 1.0,
1650     p_init_msg_list     => FND_API.G_FALSE,
1651     p_commit            => FND_API.G_FALSE,
1652     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
1653     x_return_status     => l_return_status,
1654     x_msg_count         => l_msg_count,
1655     x_msg_data          => l_msg_data,
1656     p_tax_id            => p_cc_acct_lines_rec.tax_id,
1657     p_amount            => l_enc_amt,
1658     p_tax_amount        => l_enc_tax_amt);
1659 */
1660   l_taxable_flag := nvl(p_cc_acct_lines_rec.cc_acct_taxable_flag,'N');
1661   /* Bug 6719456 Added one more condition here. Call Tax calculation api only when l_enc_amt <> 0 */
1662   l_enc_tax_amt := 0;
1663   IF (l_taxable_flag = 'Y' AND l_enc_amt <> 0) THEN
1664     IGC_ETAX_UTIL_PKG.Calculate_Tax
1665       (P_CC_Header_Rec  =>p_cc_headers_rec,
1666       P_Calling_Mode    =>null,
1667       P_Amount    =>l_enc_amt,
1668       P_Line_Id   =>l_cc_interface_rec.cc_acct_line_id,
1669       P_Tax_Amount    =>l_enc_tax_amt,
1670       P_Return_Status   =>l_return_status,
1671       P_Error_Code            =>P_Error_Code);
1672     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
1673     THEN
1674         RAISE FND_API.G_EXC_ERROR;
1675     END IF;
1676   END IF;
1677         l_enc_amt := l_enc_amt + Nvl(l_enc_tax_amt,0);
1678 
1679         -- Calculate on the l_func_amt
1680         /*igc_cc_budgetary_ctrl_pkg.calculate_nonrec_tax
1681     (p_api_version       => 1.0,
1682     p_init_msg_list     => FND_API.G_FALSE,
1683     p_commit            => FND_API.G_FALSE,
1684     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
1685     x_return_status     => l_return_status,
1686     x_msg_count         => l_msg_count,
1687     x_msg_data          => l_msg_data,
1688     p_tax_id            => p_cc_acct_lines_rec.tax_id,
1689     p_amount            => l_func_amt,
1690     p_tax_amount        => l_func_tax_amt);
1691   */
1692   /* Bug 6719456 Added one more condition here. Call Tax calculation api only when l_func_amt <> 0 */
1693   l_func_tax_amt := 0;
1694   IF (l_taxable_flag = 'Y' AND l_func_amt <> 0) THEN
1695     IGC_ETAX_UTIL_PKG.Calculate_Tax
1696       (P_CC_Header_Rec  =>p_cc_headers_rec,
1697       P_Calling_Mode    =>null,
1698       P_Amount    =>l_func_amt,
1699       P_Line_Id   =>l_cc_interface_rec.cc_acct_line_id,
1700       P_Tax_Amount    =>l_func_tax_amt,
1701       P_Return_Status   =>l_return_status,
1702       P_Error_Code            =>P_Error_Code);
1703     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
1704     THEN
1705         RAISE FND_API.G_EXC_ERROR;
1706     END IF;
1707   END IF;
1708         l_func_amt := l_func_amt + Nvl(l_func_tax_amt,0);
1709 
1710         -- Calculate on the l_unbilled_amt
1711         /*igc_cc_budgetary_ctrl_pkg.calculate_nonrec_tax
1712     (p_api_version       => 1.0,
1713     p_init_msg_list     => FND_API.G_FALSE,
1714     p_commit            => FND_API.G_FALSE,
1715     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
1716     x_return_status     => l_return_status,
1717     x_msg_count         => l_msg_count,
1718     x_msg_data          => l_msg_data,
1719     p_tax_id            => p_cc_acct_lines_rec.tax_id,
1720     p_amount            => l_unbilled_amt,
1721     p_tax_amount        => l_unbilled_tax_amt);
1722   */
1723   /* Bug 6719456 Added one more condition here. Call Tax calculation api only when l_unbilled_amt <> 0 */
1724   l_unbilled_tax_amt := 0;
1725   IF (l_taxable_flag = 'Y' AND l_unbilled_amt <> 0) THEN
1726     IGC_ETAX_UTIL_PKG.Calculate_Tax
1727       (P_CC_Header_Rec  =>p_cc_headers_rec,
1728       P_Calling_Mode    =>null,
1729       P_Amount    =>l_unbilled_amt,
1730       P_Line_Id   =>l_cc_interface_rec.cc_acct_line_id,
1731       P_Tax_Amount    =>l_unbilled_tax_amt,
1732       P_Return_Status   =>l_return_status,
1733       P_Error_Code            =>P_Error_Code);
1734     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
1735     THEN
1736         RAISE FND_API.G_EXC_ERROR;
1737     END IF;
1738   END IF;
1739   /*EB Tax uptake - Bug No : 6472296 END*/
1740         l_unbilled_amt := l_unbilled_amt + Nvl(l_unbilled_tax_amt,0);
1741 
1742 
1743         -- End Bug 2409502, 20 Aug 2002
1744 
1745   IF (p_mode = 'R') OR (p_mode = 'C')
1746   THEN
1747 
1748     /* Confirmed state */
1749     IF (p_cc_headers_rec.cc_state = 'CM')
1750     THEN
1751             /* Transition to Confirmed state  */
1752       IF   ( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'T')
1753       THEN
1754         /* Provisional CC has been encumbered */
1755 
1756         IF (NVL(l_enc_amt,0) >= 0)  AND
1757                                    /* Begin fix for bug 1757526 */
1758                                    ( ((p_cc_acct_lines_rec.cc_acct_encmbrnc_date IS NOT NULL) AND p_type = 'A') OR
1759                                       ((p_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_date IS NOT NULL) AND p_type = 'P')
1760                                     )
1761                                    /* End fix for bug 1757526 */
1762 
1763         THEN
1764 
1765                             /* Reverse COMMITMENT Encumbrance against CBC */
1766 
1767           g_line_num := g_line_num + 1;
1768 
1769           l_cc_interface_rec.batch_line_num           :=  g_line_num;
1770           l_cc_interface_rec.cc_func_dr_amt           :=  NULL;
1771           l_cc_interface_rec.cc_func_cr_amt           :=  l_enc_amt;
1772           --l_cc_interface_rec.je_category_name         := 'Provisional';  Bug 6341012  commented this line
1773 
1774           Insert_Interface_Row(l_cc_interface_rec,
1775                                                              x_msg_count,
1776                                                              x_msg_data,
1777                                                              l_return_status);
1778 
1779                                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1780                                            RAISE FND_API.G_EXC_ERROR;
1781                                         END IF;
1782 
1783         END IF;
1784 
1785         /* Create ACTUAL Encumbrance against CBC */
1786 
1787               g_line_num := g_line_num + 1;
1788 
1789         l_cc_interface_rec.batch_line_num           :=  g_line_num;
1790         l_cc_interface_rec.cc_func_cr_amt           :=  NULL;
1791         l_cc_interface_rec.cc_func_dr_amt           :=  l_func_amt;
1792         --l_cc_interface_rec.je_category_name         := 'Confirmed';   Bug Number 6341012 commented this line
1793 
1794         Insert_Interface_Row(l_cc_interface_rec,
1795                                                      x_msg_count,
1796                                                      x_msg_data,
1797                                                      l_return_status);
1798 
1799                          IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1800                              RAISE FND_API.G_EXC_ERROR;
1801                          END IF;
1802 
1803       ELSE
1804         /*Increase Adjustment */
1805 
1806         IF
1807              (( NVL(p_cc_headers_rec.cc_encmbrnc_status, 'N')  = 'N') AND
1808                               ( NVL(l_enc_amt,0) <= NVL(l_func_amt,0) )
1809                       )
1810               THEN
1811                 g_line_num := g_line_num + 1;
1812 
1813           l_cc_interface_rec.batch_line_num           :=  g_line_num;
1814           l_cc_interface_rec.cc_func_cr_amt           :=  NULL;
1815           l_cc_interface_rec.cc_func_dr_amt           := abs(l_func_amt - l_enc_amt);
1816           --l_cc_interface_rec.je_category_name         := 'Confirmed'; Bug Number 6341012 commented this line
1817 
1818           Insert_Interface_Row(l_cc_interface_rec,
1819                                                              x_msg_count,
1820                                                              x_msg_data,
1821                                                              l_return_status);
1822                             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1823                                RAISE FND_API.G_EXC_ERROR;
1824                             END IF;
1825         ELSIF
1826              (( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'N') AND
1827                               ( NVL(l_enc_amt,0) >= NVL(l_func_amt,0) )
1828                       )
1829               THEN
1830                             /* Decrease Adjustment */
1831 
1832                 g_line_num := g_line_num + 1;
1833 
1834           l_cc_interface_rec.batch_line_num           :=  g_line_num;
1835 /* Commented By 6341012 to test confirm state with decrease/increase amount
1836           l_cc_interface_rec.cc_func_dr_amt           :=  NULL;
1837           l_cc_interface_rec.cc_func_cr_amt           := abs(l_func_amt - l_enc_amt);
1838 */
1839           l_cc_interface_rec.cc_func_dr_amt           := l_func_amt - l_enc_amt;
1840           l_cc_interface_rec.cc_func_cr_amt           := NULL;
1841           --l_cc_interface_rec.je_category_name         := 'Confirmed'; Bug Number 6341012 commented this line
1842 
1843           Insert_Interface_Row(l_cc_interface_rec,
1844                                                              x_msg_count,
1845                                                              x_msg_data,
1846                                                              l_return_status);
1847 
1848                             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1849                                RAISE FND_API.G_EXC_ERROR;
1850                             END IF;
1851         END IF;
1852       END IF;
1853     END IF; /* Confirmed State */
1854 
1855     /* Funds reservation in Provisional state */
1856     IF (p_cc_headers_rec.cc_state = 'PR')
1857     THEN
1858       IF
1859               ( ( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'N') AND
1860                         ( NVL(l_enc_amt,0) <= NVL(l_func_amt,0) )
1861                  )
1862             THEN
1863                           /* Increase Adjustment*/
1864 
1865               g_line_num := g_line_num + 1;
1866 
1867         l_cc_interface_rec.batch_line_num           :=  g_line_num;
1868         l_cc_interface_rec.cc_func_cr_amt           :=  NULL;
1869         l_cc_interface_rec.cc_func_dr_amt           :=  abs(l_func_amt - l_enc_amt);
1870         --l_cc_interface_rec.je_category_name         :=  'Provisional'; Bug Number 6341012 commented this line
1871 
1872         Insert_Interface_Row(l_cc_interface_rec,
1873                                                      x_msg_count,
1874                                                      x_msg_data,
1875                                                      l_return_status);
1876 
1877                                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1878                                    RAISE FND_API.G_EXC_ERROR;
1879                                 END IF;
1880 
1881             ELSIF
1882               ( ( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'N') AND
1883                         ( NVL(l_enc_amt,0) >= NVL(l_func_amt,0) )
1884                  )
1885       THEN
1886                           /* Decrease Adjustment */
1887               g_line_num := g_line_num + 1;
1888 
1889         l_cc_interface_rec.batch_line_num           :=  g_line_num;
1890         l_cc_interface_rec.cc_func_dr_amt           :=  NULL;
1891         l_cc_interface_rec.cc_func_cr_amt           :=  abs(l_func_amt - l_enc_amt);
1892         --l_cc_interface_rec.je_category_name         :=  'Provisional'; Bug Number 6341012 commented this line
1893 
1894         Insert_Interface_Row(l_cc_interface_rec,
1895                                                      x_msg_count,
1896                                                      x_msg_data,
1897                                                      l_return_status);
1898 
1899                                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1900                                    RAISE FND_API.G_EXC_ERROR;
1901                                 END IF;
1902 
1903       END IF;
1904     END IF; /* Provisional state */
1905 
1906     /* Un-reserving Funds in Cancelled state */
1907 
1908     IF ( ( p_cc_headers_rec.cc_state = 'CL') AND
1909                ( NVL(l_enc_amt,0) >= 0)
1910        )
1911     THEN
1912             /* Decrease Adjustment */
1913       g_line_num := g_line_num + 1;
1914 
1915       l_cc_interface_rec.batch_line_num           :=  g_line_num;
1916       l_cc_interface_rec.cc_func_cr_amt           :=  NULL;
1917       l_cc_interface_rec.cc_func_dr_amt           :=  -1 * l_enc_amt;
1918       --l_cc_interface_rec.je_category_name         :=  'Provisional'; Bug Number 6341012 commented this line
1919 
1920       IF (p_type = 'A')
1921       THEN
1922                     l_cc_interface_rec.cc_transaction_date      :=  p_accounting_date;
1923       END IF;
1924 
1925       IF (p_type = 'P')
1926       THEN
1927 
1928                     IF (p_accounting_date IS NOT NULL)
1929         THEN
1930           IF (p_cc_pmt_fcst_rec.cc_det_pf_date < p_accounting_date)
1931           THEN
1932             l_cc_interface_rec.cc_transaction_date      :=  p_accounting_date;
1933           ELSE
1934             l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
1935           END IF;
1936         END IF;
1937 
1938                     IF (p_accounting_date IS NULL)
1939         THEN
1940           IF (p_cc_pmt_fcst_rec.cc_det_pf_date < sysdate)
1941           THEN
1942             l_cc_interface_rec.cc_transaction_date      :=  sysdate;
1943           ELSE
1944             l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
1945 
1946           END IF;
1947         END IF;
1948 
1949       END IF;
1950 
1951       Insert_Interface_Row(l_cc_interface_rec,
1952                                              x_msg_count,
1953                                              x_msg_data,
1954                                              l_return_status);
1955 
1956                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1957                            RAISE FND_API.G_EXC_ERROR;
1958                         END IF;
1959 
1960     END IF; /*Cancel State */
1961 
1962     /* Liquidating Funds in Complete state */
1963 -- Modified the If condition for bug# 12834070
1964     IF ( (p_cc_headers_rec.cc_state = 'CT') AND
1965   --        ( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'C') AND
1966 --               ( nvl(l_enc_amt,0) >= 0)
1967                  (nvl(l_unbilled_amt,0)>0 )
1968        )
1969     THEN
1970 
1971       g_line_num := g_line_num + 1;
1972 
1973       l_cc_interface_rec.batch_line_num           :=  g_line_num;
1974 -- Modifications for bug# 12834070 begin
1975 	--     l_cc_interface_rec.cc_func_dr_amt           :=  NULL;
1976      --    l_cc_interface_rec.cc_func_cr_amt           :=  l_unbilled_amt;
1977            l_cc_interface_rec.cc_func_dr_amt           := -1* l_unbilled_amt;
1978            l_cc_interface_rec.cc_func_cr_amt           :=  null;
1979 -- Modifications for bug# 12834070 end
1980       --l_cc_interface_rec.je_category_name         :=  'Confirmed'; Bug Number 6341012 commented this line
1981 
1982       IF (p_type = 'A')
1983       THEN
1984                           l_cc_interface_rec.cc_transaction_date      :=  p_accounting_date;
1985       END IF;
1986 
1987       IF (p_type = 'P')
1988       THEN
1989 
1990                     IF (p_accounting_date IS NOT NULL)
1991         THEN
1992           IF (p_cc_pmt_fcst_rec.cc_det_pf_date < p_accounting_date)
1993           THEN
1994             l_cc_interface_rec.cc_transaction_date      :=  p_accounting_date;
1995           ELSE
1996             l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
1997           END IF;
1998         END IF;
1999 
2000                     IF (p_accounting_date IS NULL)
2001         THEN
2002           IF (p_cc_pmt_fcst_rec.cc_det_pf_date < sysdate)
2003           THEN
2004             l_cc_interface_rec.cc_transaction_date      :=  sysdate;
2005           ELSE
2006             l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
2007 
2008           END IF;
2009         END IF;
2010 
2011       END IF;
2012 
2013       Insert_Interface_Row(l_cc_interface_rec,
2014                                              x_msg_count,
2015                                              x_msg_data,
2016                                              l_return_status);
2017 
2018                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2019                            RAISE FND_API.G_EXC_ERROR;
2020                         END IF;
2021 
2022     END IF; /* Completion of CC */
2023 
2024   END IF; /* p_mode = 'R' */
2025 
2026         RETURN;
2027 
2028 EXCEPTION
2029 
2030         WHEN FND_API.G_EXC_ERROR
2031         THEN
2032             x_return_status  := FND_API.G_RET_STS_ERROR;
2033 
2034             FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
2035                                         p_data  => x_msg_data );
2036 
2037             RETURN;
2038             IF (g_excep_level >=  g_debug_level ) THEN
2039                FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_ERROR Exception Raised');
2040             END IF;
2041 
2042         WHEN OTHERS
2043         THEN
2044             x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
2045 
2046             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2047             THEN
2048                FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2049                                          l_api_name);
2050             END IF;
2051 
2052             FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
2053                                         p_data  => x_msg_data );
2054 
2055             IF ( g_unexp_level >= g_debug_level ) THEN
2056                FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
2057                FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
2058                FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
2059                FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
2060             END IF;
2061             RETURN;
2062 
2063 END Process_Interface_Row;
2064 
2065 PROCEDURE Execute_Budgetary_Ctrl
2066 (
2067   p_api_version                   IN       NUMBER,
2068   p_init_msg_list                 IN       VARCHAR2 := FND_API.G_FALSE,
2069   p_commit                        IN       VARCHAR2 := FND_API.G_FALSE,
2070   p_validation_level              IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2071   x_return_status                 OUT NOCOPY      VARCHAR2,
2072   x_bc_status                     OUT NOCOPY      VARCHAR2 ,
2073   x_msg_count                     OUT NOCOPY      NUMBER,
2074   x_msg_data                      OUT NOCOPY      VARCHAR2,
2075   p_cc_header_id                  IN       NUMBER,
2076   p_accounting_date               IN       DATE,
2077   p_mode                          IN       VARCHAR2,
2078   p_notes                         IN       VARCHAR2
2079 )
2080 IS
2081   l_api_name                      CONSTANT VARCHAR2(30)   := 'Execute_Budgetary_Ctrl';
2082   l_api_version                   CONSTANT NUMBER         :=  1.0;
2083 
2084   l_enable_budg_control_flag      gl_sets_of_books.enable_budgetary_control_flag%TYPE;
2085   l_cc_bc_enable_flag             igc_cc_bc_enable.cc_bc_enable_flag%TYPE;
2086   l_req_encumbrance_flag        financials_system_params_all.req_encumbrance_flag%TYPE;
2087   l_purch_encumbrance_flag      financials_system_params_all.purch_encumbrance_flag%TYPE;
2088 --  l_cc_prov_enc_enable_flag       igc_cc_encmbrnc_ctrls.cc_prov_encmbrnc_enable_flag%TYPE;
2089 --  l_cc_conf_enc_enable_flag       igc_cc_encmbrnc_ctrls.cc_conf_encmbrnc_enable_flag%TYPE;
2090 
2091   l_cc_header_id          igc_cc_headers.cc_header_id%TYPE;
2092   l_cc_acct_line_id       igc_cc_acct_lines_v.cc_acct_line_id%TYPE;
2093   l_cc_det_pf_line_id       igc_cc_det_pf_v.cc_det_pf_line_id%TYPE;
2094   l_budget_dest_flag        igc_cc_interface.budget_dest_flag%TYPE;
2095   l_cc_transaction_date   igc_cc_interface.cc_transaction_date%TYPE;
2096 
2097   l_cc_acct_comp_func_amt     igc_cc_acct_lines_v.cc_acct_comp_func_amt%TYPE;
2098   l_cc_acct_enc_amt         igc_cc_acct_lines_v.cc_acct_encmbrnc_amt%TYPE;
2099 
2100   l_cc_det_pf_comp_func_amt   igc_cc_det_pf_v.cc_det_pf_comp_func_amt%TYPE;
2101   l_cc_det_pf_enc_amt         igc_cc_det_pf_v.cc_det_pf_encmbrnc_amt%TYPE;
2102 
2103   l_flag        BOOLEAN := FALSE;
2104   l_cbc_on      BOOLEAN := FALSE;
2105 
2106   l_rowid                         VARCHAR2(18);
2107 
2108   l_batch_result_code           VARCHAR2(3);
2109   l_encumbrance_on                VARCHAR2(1);
2110   l_encumbrance_status            VARCHAR2(1);
2111   l_bc_return_status              VARCHAR2(2);
2112   l_bc_success                    BOOLEAN;
2113 
2114   l_billed_amt                    NUMBER;
2115   l_func_billed_amt               NUMBER;
2116   l_interface_row_count       NUMBER;
2117   l_org_id                    NUMBER;
2118   l_sob_id                  NUMBER;
2119   l_cc_state                  VARCHAR2(2);
2120 
2121   l_cc_headers_rec                igc_cc_headers%ROWTYPE;
2122   l_cc_acct_lines_rec             igc_cc_acct_lines_v%ROWTYPE;
2123   l_cc_pmt_fcst_rec               igc_cc_det_pf_v%ROWTYPE;
2124   l_cc_interface_rec              igc_cc_interface%ROWTYPE;
2125 
2126   l_debug                   VARCHAR2(1);
2127 
2128   l_currency_code               gl_sets_of_books.currency_code%TYPE;
2129   l_error_message                 VARCHAR2(2000);
2130 
2131   l_cc_apprvl_status_old          igc_cc_headers.cc_apprvl_status%TYPE;
2132   l_encumbrance_status_old        VARCHAR2(1);
2133     -- bug 2689651, start 1
2134     l_pa_mode                       VARCHAR2(1);
2135     l_unencumbered_amount           NUMBER;
2136     l_project_id                    NUMBER;
2137     -- bug 2689651,  end 1
2138 
2139 -- -------------------------------------------------------------------------
2140 -- Variables to be used in calls to the table wrapper procedures.
2141 -- -------------------------------------------------------------------------
2142     l_validation_level              NUMBER;
2143     l_return_status                 VARCHAR2(1);
2144     l_msg_count                     NUMBER;
2145     l_msg_data                      VARCHAR2(2000);
2146     l_row_id                        VARCHAR2(18);
2147     l_update_flag                   VARCHAR2(1);
2148     l_update_login                  igc_cc_acct_lines.last_update_login%TYPE;
2149     l_update_by                     igc_cc_acct_lines.last_updated_by%TYPE;
2150 
2151 -- -------------------------------------------------------------------------
2152 -- Record definitions to be used for CURSORS getting single record for
2153 -- the table wrappers.  These record definitions are NOT the same as the
2154 -- ones above when getting data from the views.
2155 -- -------------------------------------------------------------------------
2156     l_det_pf_rec                    igc_cc_det_pf%ROWTYPE;
2157     l_acct_line_rec                 igc_cc_acct_lines%ROWTYPE;
2158 
2159     e_cc_invalid_set_up             EXCEPTION;
2160   e_no_budgetary_control          EXCEPTION;
2161   e_cc_not_found                  EXCEPTION;
2162   e_invalid_mode                  EXCEPTION;
2163   e_bc_execution                  EXCEPTION;
2164   e_update                        EXCEPTION;
2165   e_delete                        EXCEPTION;
2166   e_sbc_data                      EXCEPTION;
2167   e_sbc_data1                     EXCEPTION;
2168   e_cbc_data                      EXCEPTION;
2169   e_cbc_data1                     EXCEPTION;
2170   e_process_row                   EXCEPTION;
2171   e_update_cc_tables              EXCEPTION;
2172   e_others                      EXCEPTION;
2173   e_check_budg_ctrl             EXCEPTION;
2174 
2175   /*Budgetary Control Interface   */
2176   CURSOR c_cc_interface(t_cc_header_id NUMBER) IS
2177   SELECT distinct cc_header_id, cc_acct_line_id, cc_det_pf_line_id, budget_dest_flag, cc_transaction_date
2178   FROM igc_cc_interface
2179   WHERE cc_header_id =  t_cc_header_id AND
2180         actual_flag = 'E';
2181 
2182         /* Current year payment forecast lines only */
2183 
2184   /* Contract Commitment detail payment forecast  */
2185   CURSOR c_payment_forecast(t_cc_acct_line_id NUMBER) IS
2186         -- Performance Tuning, Replaced view igc_cc_det_pf_v with
2187         -- igc_cc_det_pf
2188   -- SELECT *
2189   -- FROM igc_cc_det_pf_v
2190   -- WHERE cc_acct_line_id =  t_cc_acct_line_id;
2191 
2192         SELECT ccdpf.ROWID,
2193                ccdpf.cc_det_pf_line_id,
2194                ccdpf.cc_det_pf_line_num,
2195                NULL  cc_acct_line_num,
2196                ccdpf.cc_acct_line_id,
2197                NULL  parent_det_pf_line_num,
2198                ccdpf.parent_det_pf_line_id,
2199                ccdpf.parent_acct_line_id,
2200                ccdpf.cc_det_pf_entered_amt,
2201                ccdpf.cc_det_pf_func_amt,
2202                ccdpf.cc_det_pf_date,
2203                IGC_CC_COMP_AMT_PKG.COMPUTE_PF_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_billed_amt,
2204                IGC_CC_COMP_AMT_PKG.COMPUTE_PF_FUNC_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_func_billed_amt,
2205                ccdpf.cc_det_pf_unbilled_amt,
2206                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(p_cc_header_id,NVL(ccdpf.cc_det_pf_entered_amt,0)) cc_det_pf_comp_func_amt,
2207                ccdpf.cc_det_pf_encmbrnc_amt,
2208                ( IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT ( p_cc_header_id, NVL(ccdpf.cc_det_pf_entered_amt,0) ) -
2209                NVL(ccdpf.cc_det_pf_encmbrnc_amt,0) ) cc_det_pf_unencmbrd_amt ,
2210                ccdpf.cc_det_pf_encmbrnc_date,
2211                ccdpf.cc_det_pf_encmbrnc_status,
2212                ccdpf.context,
2213                ccdpf.attribute1,
2214                ccdpf.attribute2,
2215                ccdpf.attribute3,
2216                ccdpf.attribute4,
2217                ccdpf.attribute5,
2218                ccdpf.attribute6,
2219                ccdpf.attribute7,
2220                ccdpf.attribute8,
2221                ccdpf.attribute9,
2222                ccdpf.attribute10,
2223                ccdpf.attribute11,
2224                ccdpf.attribute12,
2225                ccdpf.attribute13,
2226                ccdpf.attribute14,
2227                ccdpf.attribute15,
2228                ccdpf.last_update_date,
2229                ccdpf.last_updated_by,
2230                ccdpf.last_update_login,
2231                ccdpf.creation_date,
2232                ccdpf.created_by
2233         FROM igc_cc_det_pf ccdpf
2234         WHERE ccdpf.cc_acct_line_id =  t_cc_acct_line_id;
2235 
2236                /* Current year payment forecast lines only */
2237 
2238   /* Contract Commitment account lines  */
2239 
2240 -- Bug 2885953 - cursor below amended for performance enhancements
2241 --    CURSOR c_account_lines(t_cc_header_id NUMBER) IS
2242 --    SELECT *
2243 --        FROM  igc_cc_acct_lines_v ccac
2244 --        WHERE ccac.cc_header_id = t_cc_header_id;
2245   CURSOR c_account_lines(t_cc_header_id NUMBER) IS
2246   SELECT ccac.ROWID,
2247                ccac.cc_header_id,
2248                NULL org_id,
2249                NULL cc_type,
2250                NULL cc_type_code,
2251                NULL cc_num,
2252                ccac.cc_acct_line_id,
2253                ccac.cc_acct_line_num,
2254                ccac.cc_acct_desc,
2255                ccac.parent_header_id,
2256                ccac.parent_acct_line_id,
2257                NULL parent_cc_acct_line_num,
2258                NULL cc_budget_acct_desc,
2259                ccac.cc_budget_code_combination_id,
2260                NULL cc_charge_acct_desc,
2261                ccac.cc_charge_code_combination_id,
2262                ccac.cc_acct_entered_amt,
2263                ccac.cc_acct_func_amt,
2264                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_billed_amt,
2265                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_func_billed_amt,
2266                ccac.cc_acct_encmbrnc_amt,
2267                (IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0)) - NVL(ccac.cc_acct_encmbrnc_amt,0)) cc_acct_unencmrd_amt,
2268                ccac.cc_acct_unbilled_amt,
2269                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0))
2270                cc_acct_comp_func_amt,
2271                NULL project_number,
2272                ccac.project_id,
2273                NULL task_number,
2274                ccac.task_id,
2275                ccac.expenditure_type,
2276                NULL expenditure_org_name,
2277                ccac.expenditure_org_id,
2278                ccac.expenditure_item_date,
2279                ccac.cc_acct_taxable_flag,
2280                NULL tax_name,
2281                ccac.tax_id,
2282                ccac.cc_acct_encmbrnc_status,
2283                ccac.cc_acct_encmbrnc_date,
2284                ccac.context,
2285                ccac.attribute1,
2286                ccac.attribute2,
2287                ccac.attribute3,
2288                ccac.attribute4,
2289                ccac.attribute5,
2290                ccac.attribute6,
2291                ccac.attribute7,
2292                ccac.attribute8,
2293                ccac.attribute9,
2294                ccac.attribute10,
2295                ccac.attribute11,
2296                ccac.attribute12,
2297                ccac.attribute13,
2298                ccac.attribute14,
2299                ccac.attribute15,
2300                ccac.created_by,
2301                ccac.creation_date,
2302                ccac.last_updated_by,
2303                ccac.last_update_date,
2304                ccac.last_update_login,
2305                ccac.cc_func_withheld_amt,
2306                ccac.cc_ent_withheld_amt,
2307                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_func_withheld_amt,0)) cc_comp_func_whld_amt,
2308                ccac.Tax_Classif_Code
2309         FROM  igc_cc_acct_lines ccac
2310         WHERE ccac.cc_header_id = t_cc_header_id;
2311 
2312 -- -------------------------------------------------------------------------
2313 -- Cursors used for obtaining a single line to be passed into the wrapper
2314 -- functions for updating, inserting, deleting records from tables.
2315 -- -------------------------------------------------------------------------
2316         CURSOR c_cc_acct_line IS
2317           SELECT *
2318             FROM igc_cc_acct_lines
2319            WHERE cc_acct_line_id = l_cc_acct_line_id;
2320 
2321         CURSOR c_det_pf_line IS
2322           SELECT *
2323             FROM igc_cc_det_pf
2324            WHERE cc_det_pf_line_id = l_cc_det_pf_line_id;
2325 
2326         CURSOR c_cc_acct_line_rec_input IS
2327           SELECT *
2328             FROM igc_cc_acct_lines
2329            WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
2330 
2331         CURSOR c_det_pf_line_rec_input IS
2332           SELECT *
2333             FROM igc_cc_det_pf
2334            WHERE cc_det_pf_line_id = l_cc_pmt_fcst_rec.cc_det_pf_line_id;
2335 
2336    -- bug 2689651,  start 2
2337    CURSOR c_unencumbered_amount(cp_cc_header_id   igc_cc_headers.cc_header_id%TYPE)
2338    IS
2339    SELECT SUM(( IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(cp_cc_header_id, NVL(cc_det_pf_entered_amt,0) ) -
2340                NVL(cc_det_pf_encmbrnc_amt,0) )) cc_det_pf_unencmbrd_amt
2341    FROM igc_cc_det_pf
2342    WHERE cc_acct_line_id IN (SELECT cc_acct_line_id
2343                              FROM igc_cc_acct_lines
2344                              WHERE cc_header_id = cp_cc_header_id);
2345    -- bug 2689651,  end 2
2346 
2347    l_full_path         VARCHAR2(255);
2348 BEGIN
2349     l_full_path := g_path || 'Execute_Budgetary_Ctrl';
2350 
2351   SAVEPOINT Execute_Budgetary_Ctrl1;
2352 
2353   IF FND_API.to_Boolean(p_init_msg_list)
2354   THEN
2355     FND_MSG_PUB.initialize;
2356   END IF;
2357 
2358   IF NOT FND_API.Compatible_API_Call(l_api_version,
2359              p_api_version,
2360              l_api_name,
2361              G_PKG_NAME)
2362   THEN
2363     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2364   END IF;
2365 
2366   x_return_status           := FND_API.G_RET_STS_SUCCESS;
2367   x_bc_status               := FND_API.G_TRUE;
2368   g_line_num                := 0;
2369 --        l_debug                   := FND_PROFILE.VALUE('IGC_DEBUG_ENABLED');
2370 --        IF (l_debug = 'Y') THEN
2371     IF (g_debug_mode = 'Y') THEN
2372            l_debug := FND_API.G_TRUE;
2373     ELSE
2374            l_debug := FND_API.G_FALSE;
2375     END IF;
2376 --        IGC_MSGS_PKG.g_debug_mode := FND_API.TO_BOOLEAN(l_debug);
2377     l_validation_level        := p_validation_level;
2378     l_update_login            := FND_GLOBAL.LOGIN_ID;
2379     l_update_by               := FND_GLOBAL.USER_ID;
2380 
2381   IF ( (p_mode <> 'C') AND (p_mode <> 'R') )
2382   THEN
2383     fnd_message.set_name('IGC', 'IGC_CC_INVALID_MODE');
2384     fnd_message.set_token('MODE', p_mode,TRUE);
2385         IF(g_error_level >= g_debug_level) THEN
2386                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
2387         END IF;
2388     fnd_msg_pub.add;
2389       RAISE E_INVALID_MODE;
2390   END IF;
2391 
2392     BEGIN
2393     SELECT *
2394     INTO l_cc_headers_rec
2395     FROM igc_cc_headers
2396     WHERE cc_header_id = p_cc_header_id;
2397 
2398     l_cc_apprvl_status_old   := l_cc_headers_rec.cc_apprvl_status;
2399                 l_encumbrance_status_old := l_cc_headers_rec.cc_encmbrnc_status;
2400   EXCEPTION
2401     WHEN OTHERS
2402     THEN
2403       fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
2404       fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
2405                     IF(g_error_level >= g_debug_level) THEN
2406                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
2407                     END IF;
2408       fnd_msg_pub.add;
2409       RAISE E_CC_NOT_FOUND;
2410 
2411   END;
2412 
2413   IF (l_cc_apprvl_status_old <> 'IP')
2414   THEN
2415            l_cc_headers_rec.cc_apprvl_status   := 'IP';
2416            l_cc_headers_rec.last_update_date   := SYSDATE;
2417            l_cc_headers_rec.last_update_login  := l_update_login;
2418            l_cc_headers_rec.last_updated_by    := l_update_by;
2419 
2420            SELECT rowid
2421            INTO l_row_id
2422            FROM igc_cc_headers
2423            WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
2424 
2425            Header_Wrapper (p_api_version      => l_api_version,
2426                            p_init_msg_list    => FND_API.G_FALSE,
2427                            p_commit           => FND_API.G_FALSE,
2428                            p_validation_level => l_validation_level,
2429                            x_return_status    => l_return_status,
2430                            x_msg_count        => l_msg_count,
2431                            x_msg_data         => l_msg_data,
2432                            x_rowid            => l_row_id,
2433                            p_action_flag      => 'U',
2434                            p_cc_header_rec    => l_cc_headers_rec,
2435                            p_update_flag      => l_update_flag
2436                           );
2437 
2438            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2439               x_msg_data  := l_msg_data;
2440               x_msg_count := l_msg_count;
2441               IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2442               THEN
2443                  FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2444                                            l_api_name);
2445               END IF;
2446               RAISE E_UPDATE;
2447            END IF;
2448 
2449   END IF;
2450 
2451   IF (l_cc_headers_rec.cc_type <> 'R')
2452   THEN
2453     BEGIN
2454       DELETE igc_cc_interface
2455       WHERE cc_header_id = p_cc_header_id AND
2456             actual_flag = 'E';
2457     EXCEPTION
2458       WHEN OTHERS THEN
2459                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2460                   FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2461                                             l_api_name);
2462                END IF;
2463                IF ( g_unexp_level >= g_debug_level ) THEN
2464                   FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
2465                   FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
2466                   FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
2467                   FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
2468                END IF;
2469                RAISE E_DELETE;
2470     END;
2471   END IF;
2472 
2473   IF FND_API.To_Boolean(p_commit) THEN
2474        COMMIT WORK;
2475     END IF;
2476 
2477   SAVEPOINT Execute_Budgetary_Ctrl2;
2478 
2479   l_org_id   := l_cc_headers_rec.org_id;
2480   l_sob_id   := l_cc_headers_rec.set_of_books_id;
2481   l_cc_State := l_cc_headers_rec.cc_state;
2482 
2483   Check_Budgetary_Ctrl_On(1.0,
2484                             FND_API.G_FALSE,
2485                             FND_API.G_VALID_LEVEL_FULL,
2486                             x_return_status,
2487                             x_msg_count,
2488                             x_msg_data,
2489                             l_org_id,
2490                             l_sob_id,
2491                             l_cc_state,
2492                             l_encumbrance_on
2493                             );
2494 
2495   IF (x_return_status = FND_API.G_RET_STS_SUCCESS)
2496   THEN
2497     IF (l_encumbrance_on = FND_API.G_FALSE)
2498     THEN
2499       x_return_status := FND_API.G_RET_STS_SUCCESS;
2500       x_bc_status     := FND_API.G_TRUE;
2501       RETURN;
2502     END IF;
2503   ELSE
2504         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2505         THEN
2506            FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2507                                      l_api_name);
2508         END IF;
2509     RAISE E_CHECK_BUDG_CTRL;
2510   END IF;
2511 
2512     BEGIN
2513     SELECT  enable_budgetary_control_flag,currency_code
2514     INTO    l_enable_budg_control_flag, l_currency_code
2515     FROM    gl_sets_of_books
2516     WHERE   set_of_books_id = l_cc_headers_rec.set_of_books_id;
2517   EXCEPTION
2518     WHEN NO_DATA_FOUND
2519     THEN
2520       fnd_message.set_name('IGC', 'IGC_CC_INVALID_GL_DATA');
2521                     IF(g_error_level >= g_debug_level) THEN
2522                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
2523                     END IF;
2524       fnd_msg_pub.add;
2525       RAISE E_CC_INVALID_SET_UP;
2526   END;
2527 
2528   /* Check whether CBC is turned on */
2529   BEGIN
2530     l_cbc_on := FALSE;
2531     l_cc_bc_enable_flag := 'N';
2532 
2533     SELECT  cc_bc_enable_flag
2534     INTO    l_cc_bc_enable_flag
2535     FROM    igc_cc_bc_enable
2536     WHERE   set_of_books_id = l_cc_headers_rec.set_of_books_id;
2537   EXCEPTION
2538     WHEN NO_DATA_FOUND
2539     THEN
2540       l_cc_bc_enable_flag := 'N';
2541   END;
2542 
2543   IF (NVL(l_cc_bc_enable_flag,'N') = 'Y')
2544   THEN
2545     l_cbc_on := TRUE;
2546   END IF;
2547 
2548   /* Begin fix for bug 1509057 */
2549   IF (l_cc_headers_rec.cc_state = 'PR')
2550   THEN
2551     l_encumbrance_status := 'P';
2552   END IF;
2553 
2554   IF (l_cc_headers_rec.cc_state = 'CL')
2555   THEN
2556     l_encumbrance_status := 'N';
2557   END IF;
2558 
2559   IF (l_cc_headers_rec.cc_state = 'CM')
2560   THEN
2561     l_encumbrance_status := 'C';
2562   END IF;
2563 
2564         IF (l_cc_headers_rec.cc_state = 'CT')
2565   THEN
2566     l_encumbrance_status := 'N';
2567   END IF;
2568 
2569   /* End fix for bug 1509057 */
2570   IF (l_cc_headers_rec.cc_type = 'R')
2571   THEN
2572     Execute_Rel_Budgetary_Ctrl(1.0,
2573                                    FND_API.G_FALSE,
2574                                    FND_API.G_FALSE,
2575                                    FND_API.G_VALID_LEVEL_FULL,
2576                                    x_return_status,
2577                                    x_msg_count,
2578                                    x_msg_data,
2579                                    p_cc_header_id,
2580                                    p_accounting_date,
2581                                    l_cbc_on,
2582                                    l_currency_code
2583                                    );
2584 
2585     IF (x_return_status = FND_API.G_RET_STS_SUCCESS)
2586     THEN
2587       x_bc_status     := FND_API.G_TRUE;
2588     ELSE
2589       x_bc_status     := FND_API.G_FALSE;
2590     END IF;
2591 
2592     IF (l_cc_apprvl_status_old <> 'IP')
2593     THEN
2594       /* begin fix for bug 1567120 */
2595             BEGIN
2596         SELECT *
2597         INTO l_cc_headers_rec
2598         FROM igc_cc_headers
2599                     WHERE cc_header_id = p_cc_header_id;
2600           EXCEPTION
2601             WHEN OTHERS THEN
2602           fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
2603           fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
2604                     IF(g_error_level >= g_debug_level) THEN
2605                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
2606                     END IF;
2607           fnd_msg_pub.add;
2608           RAISE E_CC_NOT_FOUND;
2609       END;
2610 
2611       /* end fix for bug 1567120 */
2612             l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
2613             l_cc_headers_rec.last_update_date   := SYSDATE;
2614             l_cc_headers_rec.last_update_login  := l_update_login;
2615             l_cc_headers_rec.last_updated_by    := l_update_by;
2616 
2617             SELECT rowid
2618             INTO l_row_id
2619             FROM igc_cc_headers
2620             WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
2621 
2622             Header_Wrapper (p_api_version      => l_api_version,
2623                             p_init_msg_list    => FND_API.G_FALSE,
2624                             p_commit           => FND_API.G_FALSE,
2625                             p_validation_level => l_validation_level,
2626                             x_return_status    => l_return_status,
2627                             x_msg_count        => l_msg_count,
2628                             x_msg_data         => l_msg_data,
2629                             x_rowid            => l_row_id,
2630                             p_action_flag      => 'U',
2631                             p_cc_header_rec    => l_cc_headers_rec,
2632                             p_update_flag      => l_update_flag
2633                             );
2634 
2635             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2636                 x_msg_data  := l_msg_data;
2637                 x_msg_count := l_msg_count;
2638                       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2639                       THEN
2640                          FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2641                                                    l_api_name);
2642                       END IF;
2643                       RAISE E_UPDATE;
2644                    END IF;
2645 
2646                    IF FND_API.To_Boolean(p_commit)
2647                    THEN
2648                       COMMIT WORK;
2649                    END IF;
2650 
2651     END IF;
2652     RETURN;
2653   END IF;
2654 
2655   SAVEPOINT Execute_Budgetary_Ctrl3;
2656   /* Process Interface Rows */
2657   OPEN c_account_lines(p_cc_header_id);
2658   LOOP
2659     FETCH c_account_lines INTO l_cc_acct_lines_rec;
2660     EXIT WHEN c_account_lines%NOTFOUND;
2661       IF ( (l_cbc_on = TRUE)  AND (l_enable_budg_control_flag = 'Y') )
2662     THEN
2663       IF ( ( (NVL(l_cc_acct_lines_rec.cc_acct_encmbrnc_status,'N') <> 'P') AND
2664              (l_cc_headers_rec.cc_state = 'PR')
2665             )
2666             OR
2667             ( ( (NVL(l_cc_acct_lines_rec.cc_acct_encmbrnc_status,'N') <> 'C') OR
2668                 (NVL(l_cc_acct_lines_rec.cc_acct_encmbrnc_status,'N')  = 'T') OR
2669                 (NVL(l_cc_acct_lines_rec.cc_acct_encmbrnc_status,'N')  = 'N')
2670                                  )
2671                                  AND
2672               (l_cc_headers_rec.cc_state = 'CM')
2673              )
2674             OR
2675              ( (l_cc_headers_rec.cc_state = 'CL') AND
2676                                  /* Fix for bug 1722709 */
2677                                  (l_cc_acct_lines_rec.cc_acct_encmbrnc_date IS NOT NULL)
2678                                )
2679             OR
2680              (l_cc_headers_rec.cc_state = 'CT')
2681           )
2682       THEN
2683         BEGIN
2684               Process_Interface_Row(
2685                                           l_currency_code,
2686                                           l_cc_headers_rec,
2687                                           l_cc_acct_lines_rec,
2688                                           l_cc_pmt_fcst_rec,
2689                                           p_mode,
2690                                           'A',
2691                                           p_accounting_date,
2692                                           x_msg_count,
2693                                           x_msg_data,
2694                                           l_return_status);
2695                      IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2696                          IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2697                          THEN
2698                              FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2699                                                        l_api_name);
2700                          END IF;
2701                          RAISE E_PROCESS_ROW;
2702                      END IF;
2703         END;
2704       END IF;
2705     END IF;
2706 
2707     OPEN c_payment_forecast(l_cc_acct_lines_rec.cc_acct_line_id);
2708     LOOP
2709       FETCH c_payment_forecast INTO l_cc_pmt_fcst_rec;
2710       EXIT WHEN c_payment_forecast%NOTFOUND;
2711       IF (l_enable_budg_control_flag = 'Y')
2712       THEN
2713         IF ( ( (NVL(l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status,'N') <> 'P') AND
2714                      (l_cc_headers_rec.cc_state = 'PR')
2715                                       )
2716               OR
2717                     ( ( (NVL(l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status,'N') <> 'C') OR
2718                         (NVL(l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status,'N')  = 'T') OR
2719                         (NVL(l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status,'N')  = 'N')
2720                                          ) AND
2721                        (l_cc_headers_rec.cc_state = 'CM')
2722                     )
2723               OR
2724                           (l_cc_headers_rec.cc_state = 'CT')
2725                     OR
2726                           ( (l_cc_headers_rec.cc_state = 'CL') AND
2727                                         /* Fix for bug 1722709 */
2728                                         (l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_date IS NOT NULL)
2729                                       )
2730                         )
2731         THEN
2732           BEGIN
2733                    Process_Interface_Row(
2734                                                l_currency_code,
2735                                                l_cc_headers_rec,
2736                                                l_cc_acct_lines_rec,
2737                                                l_cc_pmt_fcst_rec,
2738                                                p_mode,
2739                                                'P',
2740                                                p_accounting_date,
2741                                                x_msg_count,
2742                                                x_msg_data,
2743                                                l_return_status);
2744 
2745                            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2746                               IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2747                               THEN
2748                                  FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2749                                                            l_api_name);
2750                               END IF;
2751                               RAISE E_PROCESS_ROW;
2752                            END IF;
2753           END;
2754         END IF;
2755           END IF;
2756     END LOOP;
2757     CLOSE c_payment_forecast;
2758   END LOOP;
2759   CLOSE c_account_lines;
2760 
2761 -- COMMIT is suppose to be done here.....  IF NOT then Bug 1543646 will happen.
2762     COMMIT WORK;
2763 
2764   l_interface_row_count := 0;
2765 
2766   select count(*)
2767   INTO l_interface_row_count
2768   FROM igc_cc_interface
2769   WHERE cc_header_id = p_cc_header_id;
2770 
2771   SAVEPOINT Execute_Budgetary_Ctrl4;
2772   /* Execute budgetary control */
2773 
2774     BEGIN
2775         IF (l_interface_row_count <> 0)
2776     THEN
2777       l_batch_result_code := NULL;
2778 
2779             -- bug 2689651, start 3
2780             OPEN c_unencumbered_amount(l_cc_headers_rec.cc_header_id);
2781             FETCH c_unencumbered_amount INTO l_unencumbered_amount;
2782             IF c_unencumbered_amount%NOTFOUND THEN
2783                l_unencumbered_amount := -1;
2784             END IF;
2785             CLOSE c_unencumbered_amount;
2786             -- set the pa mode based on whether a payment shift has happened
2787             -- if yes mode is F else default p_mode
2788             l_pa_mode := p_mode;
2789             IF (p_mode <> 'C' AND l_unencumbered_amount = 0) THEN
2790                l_pa_mode := 'F';
2791             ELSE
2792                l_pa_mode := p_mode;
2793             END IF;
2794             -- bug 2689651,  end 3
2795 
2796             -- The call to IGCFCK updated to IGCPAFCK for bug 1844214.
2797             -- Bidisha S , 21 June 2001
2798             -- bug 2689651, change p_mode to l_pa_mode
2799 --      l_bc_success := IGC_CBC_FUNDS_CHECKER.IGCFCK( p_sobid      =>  l_cc_headers_rec.set_of_books_id,
2800       l_bc_success := IGC_CBC_PA_BC_PKG.IGCPAFCK( p_sobid             =>  l_cc_headers_rec.set_of_books_id,
2801                                               p_header_id         =>  l_cc_headers_rec.cc_header_id,
2802                                                         p_mode              => l_pa_mode,
2803                                                         p_actual_flag       =>  'E',
2804                                         p_ret_status        =>  l_bc_return_status,
2805                                         p_batch_result_code => l_batch_result_code,
2806                                         p_doc_type          =>  'CC',
2807                                         p_debug             =>   l_debug,
2808                                           p_conc_proc         =>   FND_API.G_FALSE);
2809              IF l_bc_success = TRUE  --No fatal errors
2810               AND substr(l_bc_return_status,1,1) IN ('N','S','A') --CBC successfull
2811                     AND substr(l_bc_return_status,2,1) IN ('N','S','A') --SBC successfull
2812                         AND l_interface_row_count <> 0 -- remained from the previous version ????
2813              THEN
2814                  x_bc_status     := FND_API.G_TRUE;
2815              ELSE
2816                  x_bc_status     := FND_API.G_FALSE;
2817              END IF;
2818 
2819         ELSE
2820       x_return_status := FND_API.G_RET_STS_SUCCESS;
2821       x_bc_status     := FND_API.G_TRUE;
2822         END IF;
2823 
2824   /*EXCEPTION
2825     WHEN OTHERS
2826     THEN
2827       RAISE E_OTHERS;*/
2828     END;
2829 
2830 --        IF (IGC_MSGS_PKG.g_debug_mode) THEN
2831     IF (g_debug_mode = 'Y') THEN
2832 --           g_debug_msg := ' Finished call to IGCFCK ';
2833            g_debug_msg := ' Finished call to IGCPAFCK ';
2834            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2835     END IF;
2836 
2837   /* Budgetary Control Successfully executed */
2838   /* Update CC Tables with feedback from igc_cc_interface */
2839 
2840   /* If mode = Reservation then update CC Tables encumbrance status, encumbered_amount */
2841 
2842   BEGIN
2843 
2844   IF ( (p_mode = 'R') AND (x_bc_status = FND_API.G_TRUE) AND (l_interface_row_count <> 0) )
2845   THEN
2846 
2847     OPEN c_cc_interface(p_cc_header_id);
2848 
2849     LOOP
2850       FETCH c_cc_interface
2851                          INTO l_cc_header_id,
2852                               l_cc_acct_line_id,
2853                               l_cc_det_pf_line_id,
2854             l_budget_dest_flag,
2855                               l_cc_transaction_date;
2856 
2857 --                        IF (IGC_MSGS_PKG.g_debug_mode) THEN
2858                         IF (g_debug_mode = 'Y') THEN
2859                            g_debug_msg := ' Fetching Interface records ';
2860                            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2861                         END IF;
2862 
2863       EXIT WHEN c_cc_interface%NOTFOUND;
2864 
2865 --                        IF (IGC_MSGS_PKG.g_debug_mode) THEN
2866                         IF (g_debug_mode = 'Y') THEN
2867                            g_debug_msg := ' Check acct line id 1.......';
2868                            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2869                         END IF;
2870 
2871       /* Update CC Tables with the feedback */
2872 /*      IF ((l_cc_acct_line_id IS NOT NULL) AND
2873             (l_budget_dest_flag = 'C'))
2874       THEN */--Bug 5464993. Update amounts even when cbc is disabled
2875 
2876                                 -- Performance Tuning, Replaced view
2877                                 -- igc_cc_acct_lines_v with
2878                                 -- igc_cc_acct_lines and replaced the line
2879                                 -- below.
2880         -- SELECT cc_acct_comp_func_amt
2881                         SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccal.cc_header_id, NVL(ccal.cc_acct_entered_amt,0)) cc_acct_comp_func_amt
2882       INTO  l_cc_acct_comp_func_amt
2883       FROM igc_cc_acct_lines ccal
2884       WHERE ccal.cc_acct_line_id = l_cc_acct_line_id;
2885 
2886 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
2887                         IF (g_debug_mode = 'Y') THEN
2888                               g_debug_msg := ' Getting CC_ACCT_COMP_FUNC_AMT';
2889                               Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2890                         END IF;
2891 
2892 -- ----------------------------------------------------------------------------------
2893 -- Obtain the actual account line record based upon the data that was just retrieved
2894 -- from the view.
2895 -- ----------------------------------------------------------------------------------
2896                         OPEN c_cc_acct_line;
2897                         FETCH c_cc_acct_line
2898                         INTO l_acct_line_rec;
2899 
2900                         IF (c_cc_acct_line%NOTFOUND) THEN
2901                               EXIT;
2902                         END IF;
2903 
2904                         CLOSE c_cc_acct_line;
2905 
2906       IF (l_cc_headers_rec.cc_state = 'CL') THEN
2907 
2908         l_cc_acct_enc_amt  := 0;
2909 
2910                                         -- Added for Bug 3219208
2911                                         -- Entered Amt should be set to 0 when the CC is being
2912                                         -- cancelled.
2913         l_acct_line_rec.cc_acct_entered_amt     := 0;
2914                   l_acct_line_rec.cc_acct_func_amt        := 0;
2915 
2916                 IF l_budget_dest_flag = 'C' THEN
2917                                         l_acct_line_rec.cc_acct_encmbrnc_amt    := 0;
2918                                         l_acct_line_rec.cc_acct_encmbrnc_status := 'N';
2919                                         l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2920         END IF;
2921                                 l_acct_line_rec.last_update_date        := SYSDATE;
2922                                 l_acct_line_rec.last_update_login       := l_update_login;
2923                                 l_acct_line_rec.last_updated_by         := l_update_by;
2924 
2925       ELSIF (l_cc_headers_rec.cc_state = 'PR') THEN
2926 
2927                 IF l_budget_dest_flag = 'C' THEN
2928           l_cc_acct_enc_amt  := l_cc_acct_comp_func_amt;
2929                                   l_acct_line_rec.cc_acct_encmbrnc_amt    := l_cc_acct_comp_func_amt;
2930                                   l_acct_line_rec.cc_acct_encmbrnc_status := l_encumbrance_status;
2931                                   l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2932                                   l_acct_line_rec.last_update_date        := SYSDATE;
2933                             l_acct_line_rec.last_update_login       := l_update_login;
2934                                   l_acct_line_rec.last_updated_by         := l_update_by;
2935         END IF;
2936 
2937       ELSIF (l_cc_headers_rec.cc_state = 'CM') THEN
2938 
2939                 IF l_budget_dest_flag = 'C' THEN
2940           l_cc_acct_enc_amt  := l_cc_acct_comp_func_amt;
2941                                         l_acct_line_rec.cc_acct_encmbrnc_amt    := l_cc_acct_comp_func_amt;
2942                                         l_acct_line_rec.cc_acct_encmbrnc_status := l_encumbrance_status;
2943                                         l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2944                                   l_acct_line_rec.last_update_date        := SYSDATE;
2945                                   l_acct_line_rec.last_update_login       := l_update_login;
2946                                   l_acct_line_rec.last_updated_by         := l_update_by;
2947         END IF;
2948 
2949       ELSIF (l_cc_headers_rec.cc_state = 'CT') THEN
2950 
2951               l_billed_amt      := 0;
2952               l_func_billed_amt := 0;
2953 
2954                                 -- Performance Tuning, Replaced view
2955                                 -- igc_cc_acct_lines_v with
2956                                 -- igc_cc_acct_lines and replaced the line
2957                                 -- below.
2958         -- SELECT cc_acct_billed_amt ,cc_acct_func_billed_amt
2959                               SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_billed_amt,
2960                                    IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_func_billed_amt
2961         INTO   l_billed_amt, l_func_billed_amt
2962         FROM   igc_cc_acct_lines ccal
2963         WHERE  ccal.cc_acct_line_id = l_cc_acct_line_id;
2964 
2965         IF (l_currency_code <> l_cc_headers_rec.currency_code)
2966         THEN
2967                                   l_cc_acct_comp_func_Amt := l_func_billed_amt;
2968                                   l_cc_acct_enc_Amt       := l_func_billed_amt;
2969                                         l_acct_line_rec.cc_acct_entered_amt     := l_billed_amt;
2970                                         l_acct_line_rec.cc_acct_func_amt        := l_func_billed_amt;
2971                   IF l_budget_dest_flag = 'C' THEN
2972                                                 l_acct_line_rec.cc_acct_encmbrnc_amt    := l_func_billed_amt;
2973                                                 l_acct_line_rec.cc_acct_encmbrnc_status := 'N';
2974                                           l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2975           END IF;
2976                                         l_acct_line_rec.last_update_date        := SYSDATE;
2977                                         l_acct_line_rec.last_update_login       := l_update_login;
2978                                         l_acct_line_rec.last_updated_by         := l_update_by;
2979 
2980                                                 -- 2043221, Bidisha , 19 Oct 2001
2981                                                 -- Withheld amount should be set to 0 if the CC
2982                                                 -- is completed.
2983                                         l_acct_line_rec.cc_func_withheld_amt    := 0;
2984                                         l_acct_line_rec.cc_ent_withheld_amt     := 0;
2985         ELSE
2986                                   l_cc_acct_comp_func_Amt := l_func_billed_amt;
2987                                   l_cc_acct_enc_Amt       := l_func_billed_amt;
2988                                         l_acct_line_rec.cc_acct_entered_amt     := l_func_billed_amt;
2989                                         l_acct_line_rec.cc_acct_func_amt        := l_func_billed_amt;
2990 
2991                   IF l_budget_dest_flag = 'C' THEN
2992                                                 l_acct_line_rec.cc_acct_encmbrnc_amt    := l_func_billed_amt;
2993                                           l_acct_line_rec.cc_acct_encmbrnc_status := 'N';
2994                                           l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2995           END IF;
2996                                         l_acct_line_rec.last_update_date        := SYSDATE;
2997                                         l_acct_line_rec.last_update_login       := l_update_login;
2998                                         l_acct_line_rec.last_updated_by         := l_update_by;
2999 
3000                                                 -- 2043221, Bidisha , 19 Oct 2001
3001                                                 -- Withheld amount should be set to 0 if the CC
3002                                                 -- is completed.
3003                                         l_acct_line_rec.cc_func_withheld_amt    := 0;
3004                                         l_acct_line_rec.cc_ent_withheld_amt     := 0;
3005         END IF;
3006 
3007                         ELSE
3008 
3009 -- -----------------------------------------------------------------------------
3010 -- Unknown CC State in the Header record for the Acct Line update.  Exit Process.
3011 -- -----------------------------------------------------------------------------
3012 --                                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3013                                 IF (g_debug_mode = 'Y') THEN
3014                                       g_debug_msg := ' Bad CC State for Update';
3015                                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3016                                 END IF;
3017                                 RAISE E_UPDATE_CC_TABLES;
3018 
3019       END IF;
3020 
3021                          SELECT rowid
3022                          INTO l_row_id
3023                          FROM igc_cc_acct_lines
3024                          WHERE cc_acct_line_id = l_acct_line_rec.cc_acct_line_id;
3025 
3026 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3027                          IF (g_debug_mode = 'Y') THEN
3028                                g_debug_msg := ' Updating Acct Line ';
3029                                Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3030                          END IF;
3031 
3032                          Account_Line_Wrapper (p_api_version       => l_api_version,
3033                                                p_init_msg_list     => FND_API.G_FALSE,
3034                                                p_commit            => FND_API.G_FALSE,
3035                                                p_validation_level  => l_validation_level,
3036                                                x_return_status     => l_return_status,
3037                                                x_msg_count         => l_msg_count,
3038                                                x_msg_data          => l_msg_data,
3039                                                x_rowid             => l_row_id,
3040                                                p_action_flag       => 'U',
3041                                                p_cc_acct_lines_rec => l_acct_line_rec,
3042                                                p_update_flag       => l_update_flag
3043                                               );
3044 
3045                          IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3046                                x_msg_data  := l_msg_data;
3047                                x_msg_count := l_msg_count;
3048 --                                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3049                                IF (g_debug_mode = 'Y') THEN
3050                                    g_debug_msg := ' FAILED Updated Acct Line ..... 1 ';
3051                                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3052                                END IF;
3053                                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3054                                THEN
3055                                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3056                                                                l_api_name);
3057                                END IF;
3058                                RAISE E_UPDATE_CC_TABLES;
3059                           END IF;
3060 
3061 --      END IF;
3062 
3063 --                        IF (IGC_MSGS_PKG.g_debug_mode) THEN
3064                         IF (g_debug_mode = 'Y') THEN
3065                            g_debug_msg := ' Check det pf line id 1.......';
3066                            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3067                         END IF;
3068 
3069       IF ((l_cc_det_pf_line_id IS NOT NULL) AND
3070             (l_budget_dest_flag = 'S'))
3071       THEN
3072                                 -- Performance Tuning, Replaced view
3073                                 -- igc_cc_det_pf_v with
3074                                 -- igc_cc_det_pf and replaced the line
3075                                 -- below.
3076         -- SELECT cc_det_pf_comp_func_amt
3077                                 SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(p_cc_header_id,NVL(ccdpf.cc_det_pf_entered_amt,0)) cc_det_pf_comp_func_amt
3078         INTO l_cc_det_pf_comp_func_amt
3079         FROM igc_cc_det_pf ccdpf
3080         WHERE ccdpf.cc_det_pf_line_id = l_cc_det_pf_line_id;
3081 
3082 -- ----------------------------------------------------------------------------------
3083 -- Obtain the actual Det PF line record based upon the data that was just retrieved
3084 -- from the view.
3085 -- ----------------------------------------------------------------------------------
3086                                 OPEN c_det_pf_line;
3087                                 FETCH c_det_pf_line
3088                                  INTO l_det_pf_rec;
3089 
3090                                 IF (c_det_pf_line%NOTFOUND) THEN
3091                                    EXIT;
3092                                 END IF;
3093 
3094                                 CLOSE c_det_pf_line;
3095 
3096 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3097                                 IF (g_debug_mode = 'Y') THEN
3098                                    g_debug_msg := ' Getting Det PF Line Info ';
3099                                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3100                                 END IF;
3101 
3102         IF (l_cc_headers_rec.cc_state = 'CL') THEN
3103 
3104                                         -- Added for Bug 3219208
3105                                         -- Entered Amt should be set to 0 when the CC is being
3106                                         -- cancelled.
3107           l_det_pf_rec.cc_det_pf_entered_amt     := 0;
3108           l_det_pf_rec.cc_det_pf_func_amt     := 0;
3109           l_cc_det_pf_enc_amt := 0;
3110                             l_det_pf_rec.cc_det_pf_encmbrnc_amt    := 0;
3111                             l_det_pf_rec.cc_det_pf_encmbrnc_status := 'N';
3112                             l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3113                             l_det_pf_rec.cc_det_pf_date            := l_cc_transaction_date;
3114                             l_det_pf_rec.last_update_date          := SYSDATE;
3115                             l_det_pf_rec.last_update_login         := l_update_login;
3116                             l_det_pf_rec.last_updated_by           := l_update_by;
3117 
3118         ELSIF (l_cc_headers_rec.cc_state = 'PR') THEN
3119 
3120           l_cc_det_pf_enc_amt := l_cc_det_pf_comp_func_amt;
3121                             l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_cc_det_pf_comp_func_amt;
3122                             l_det_pf_rec.cc_det_pf_encmbrnc_status := l_encumbrance_status;
3123                             l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3124                             l_det_pf_rec.last_update_date          := SYSDATE;
3125                             l_det_pf_rec.last_update_login         := l_update_login;
3126                             l_det_pf_rec.last_updated_by           := l_update_by;
3127 
3128         ELSIF (l_cc_headers_rec.cc_state = 'CM') THEN
3129 
3130           l_cc_det_pf_enc_amt := l_cc_det_pf_comp_func_amt;
3131                             l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_cc_det_pf_comp_func_amt;
3132                                         l_det_pf_rec.cc_det_pf_encmbrnc_status := l_encumbrance_status;
3133                                         l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3134                                         l_det_pf_rec.last_update_date          := SYSDATE;
3135                                         l_det_pf_rec.last_update_login         := l_update_login;
3136                                         l_det_pf_rec.last_updated_by           := l_update_by;
3137 
3138         ELSIF (l_cc_headers_rec.cc_state = 'CT') THEN
3139 
3140           l_billed_amt      := 0;
3141                                         l_func_billed_amt := 0;
3142 
3143                                         -- Performance Tuning, Replaced view
3144                                         -- igc_cc_det_pf_v with
3145                                         -- igc_cc_det_pf and replaced the line
3146                                         -- below.
3147           -- SELECT cc_det_pf_billed_amt , cc_det_pf_func_billed_amt
3148                             SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_PF_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_billed_amt,
3149                                    IGC_CC_COMP_AMT_PKG.COMPUTE_PF_FUNC_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_func_billed_amt
3150           INTO l_billed_amt, l_func_billed_amt
3151           FROM igc_cc_det_pf ccdpf
3152           WHERE ccdpf.cc_det_pf_line_id = l_cc_det_pf_line_id;
3153 
3154           IF (l_currency_code <> l_cc_headers_rec.currency_code) THEN
3155 
3156                                                 l_cc_det_pf_comp_func_amt := l_func_billed_amt;
3157                                                 l_cc_det_pf_enc_amt       := l_func_billed_amt;
3158 
3159                                                 l_det_pf_rec.cc_det_pf_entered_amt     := l_billed_amt;
3160                                                 l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_func_billed_amt;
3161                                                 l_det_pf_rec.cc_det_pf_func_amt        := l_func_billed_amt;
3162                                                 l_det_pf_rec.cc_det_pf_encmbrnc_status := 'N';
3163                                                 l_det_pf_rec.cc_det_pf_date            := l_cc_transaction_date;
3164                                                 l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3165                                                 l_det_pf_rec.last_update_date          := SYSDATE;
3166                                                 l_det_pf_rec.last_update_login         := l_update_login;
3167                                                 l_det_pf_rec.last_updated_by           := l_update_by;
3168 
3169                                                 -- 2043221, Bidisha , 19 Oct 2001
3170                                                 -- Withheld amount should be set to 0 if the CC
3171                                                 -- is completed.
3172                                                 l_acct_line_rec.cc_func_withheld_amt    := 0;
3173                                                 l_acct_line_rec.cc_ent_withheld_amt     := 0;
3174           ELSE
3175 
3176                                                 l_cc_det_pf_comp_func_amt := l_func_billed_amt;
3177                                                 l_cc_det_pf_enc_amt       := l_func_billed_amt;
3178 
3179                                                 l_det_pf_rec.cc_det_pf_entered_amt     := l_func_billed_amt;
3180                                                 l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_func_billed_amt;
3181                                                 l_det_pf_rec.cc_det_pf_func_amt        := l_func_billed_amt;
3182                                                 l_det_pf_rec.cc_det_pf_encmbrnc_status := 'N';
3183                                                 l_det_pf_rec.cc_det_pf_date            := l_cc_transaction_date;
3184                                                 l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3185                                                 l_det_pf_rec.last_update_date          := SYSDATE;
3186                                                 l_det_pf_rec.last_update_login         := l_update_login;
3187                                                 l_det_pf_rec.last_updated_by           := l_update_by;
3188 
3189                                                 -- 2043221, Bidisha , 19 Oct 2001
3190                                                 -- Withheld amount should be set to 0 if the CC
3191                                                 -- is completed.
3192                                                 l_acct_line_rec.cc_func_withheld_amt    := 0;
3193                                                 l_acct_line_rec.cc_ent_withheld_amt     := 0;
3194           END IF;
3195 
3196                                 ELSE
3197 
3198 -- -----------------------------------------------------------------------------
3199 -- Unknown CC State in the Header record for the Det PF update.  Exit Process.
3200 -- -----------------------------------------------------------------------------
3201 --                                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3202                                    IF (g_debug_mode = 'Y') THEN
3203                                       g_debug_msg := ' Bad CC State ...... 2';
3204                                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3205                                    END IF;
3206 
3207                                    RAISE E_UPDATE_CC_TABLES;
3208 
3209         END IF;
3210 
3211                                 SELECT rowid
3212                                   INTO l_row_id
3213                                   FROM igc_cc_det_pf
3214                                  WHERE cc_det_pf_line_id = l_det_pf_rec.cc_det_pf_line_id;
3215 
3216 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3217                                 IF (g_debug_mode = 'Y') THEN
3218                                    g_debug_msg := ' Updating DET PF Line';
3219                                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3220                                 END IF;
3221 
3222                                 Det_Pf_Wrapper (p_api_version      => l_api_version,
3223                                                 p_init_msg_list    => FND_API.G_FALSE,
3224                                                 p_commit           => FND_API.G_FALSE,
3225                                                 p_validation_level => l_validation_level,
3226                                                 x_return_status    => l_return_status,
3227                                                 x_msg_count        => l_msg_count,
3228                                                 x_msg_data         => l_msg_data,
3229                                                 x_rowid            => l_row_id,
3230                                                 p_action_flag      => 'U',
3231                                                 p_cc_pmt_fcst_rec  => l_det_pf_rec,
3232                                                 p_update_flag      => l_update_flag
3233                                                );
3234 
3235                                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3236                                    x_msg_data  := l_msg_data;
3237                                    x_msg_count := l_msg_count;
3238 
3239 --                                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3240                                    IF (g_debug_mode = 'Y') THEN
3241                                       g_debug_msg := ' FAILURE updating DET PF line ...... 1 ';
3242                                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3243                                    END IF;
3244 
3245                                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3246                                    THEN
3247                                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3248                                                                 l_api_name);
3249                                    END IF;
3250                                    RAISE E_UPDATE_CC_TABLES;
3251                                 END IF;
3252 
3253       END IF;
3254 
3255     END LOOP;
3256 
3257 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3258                 IF (g_debug_mode = 'Y') THEN
3259                    g_debug_msg := ' End LOOP ...... 1 ';
3260                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3261                 END IF;
3262 
3263     CLOSE c_cc_interface;
3264 
3265                 IF (c_det_pf_line%ISOPEN) THEN
3266                     CLOSE c_det_pf_line;
3267                 END IF;
3268                 IF (c_cc_acct_line%ISOPEN) THEN
3269                    CLOSE c_cc_acct_line;
3270                 END IF;
3271 
3272 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3273                 IF (g_debug_mode = 'Y') THEN
3274                    g_debug_msg := ' Done Updating for Phase 1 Acct Lines and PF Lines.....';
3275                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3276                 END IF;
3277 
3278     IF ((l_cc_headers_rec.cc_state = 'CT') OR
3279                     (l_cc_headers_rec.cc_state = 'CL')) THEN
3280 
3281                    l_cc_headers_rec.cc_encmbrnc_status := 'N';
3282                    l_cc_headers_rec.last_update_date   := SYSDATE;
3283                    l_cc_headers_rec.last_update_login  := l_update_login;
3284                    l_cc_headers_rec.last_updated_by    := l_update_by;
3285 
3286     ELSIF ((l_cc_headers_rec.cc_state = 'PR') OR
3287                        (l_cc_headers_rec.cc_state = 'CM')) THEN
3288 
3289                    l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status;
3290                    l_cc_headers_rec.last_update_date   := SYSDATE;
3291                    l_cc_headers_rec.last_update_login  := l_update_login;
3292                    l_cc_headers_rec.last_updated_by    := l_update_by;
3293 
3294                 ELSE
3295 
3296 -- -----------------------------------------------------------------------------
3297 -- Unknown CC State in the Header record for the Det PF update.  Exit Process.
3298 -- -----------------------------------------------------------------------------
3299 --                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3300                    IF (g_debug_mode = 'Y') THEN
3301                       g_debug_msg := ' Bad CCC State....... 3 ';
3302                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3303                    END IF;
3304 
3305                    RAISE E_UPDATE_CC_TABLES;
3306 
3307     END IF;
3308 
3309                 SELECT rowid
3310                   INTO l_row_id
3311                   FROM igc_cc_headers
3312                  WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3313 
3314 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3315                 IF (g_debug_mode = 'Y') THEN
3316                    g_debug_msg := ' Updating Header Record....... 1';
3317                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3318                 END IF;
3319 
3320                 l_cc_headers_rec.cc_acct_date := p_accounting_date;
3321 
3322                 Header_Wrapper (p_api_version      => l_api_version,
3323                                 p_init_msg_list    => FND_API.G_FALSE,
3324                                 p_commit           => FND_API.G_FALSE,
3325                                 p_validation_level => l_validation_level,
3326                                 x_return_status    => l_return_status,
3327                                 x_msg_count        => l_msg_count,
3328                                 x_msg_data         => l_msg_data,
3329                                 x_rowid            => l_row_id,
3330                                 p_action_flag      => 'U',
3331                                 p_cc_header_rec    => l_cc_headers_rec,
3332                                 p_update_flag      => l_update_flag
3333                                );
3334 
3335                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3336                    x_msg_data  := l_msg_data;
3337                    x_msg_count := l_msg_count;
3338                    l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status_old;
3339 
3340 --                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3341                    IF (g_debug_mode = 'Y') THEN
3342                       g_debug_msg := ' Failure UPDATING Header record..... 1';
3343                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3344                    END IF;
3345                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3346                    THEN
3347                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3348                                                 l_api_name);
3349                    END IF;
3350                    RAISE E_UPDATE_CC_TABLES;
3351                 END IF;
3352 
3353 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3354                 IF (g_debug_mode = 'Y') THEN
3355                    g_debug_msg := ' Inserting Actions Record.....';
3356                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3357                 END IF;
3358 
3359     IGC_CC_ACTIONS_PKG.Insert_Row
3360                     (1.0,
3361            FND_API.G_FALSE,
3362            FND_API.G_FALSE,
3363            FND_API.G_VALID_LEVEL_FULL,
3364            l_return_status,
3365            l_msg_count,
3366            l_msg_data,
3367            l_rowid,
3368            p_cc_header_id,
3369            l_cc_headers_rec.cc_version_num,
3370            'EC',
3371                      l_cc_headers_rec.cc_state,
3372            l_cc_headers_rec.cc_ctrl_status,
3373            l_cc_headers_rec.cc_apprvl_status,
3374            p_notes,
3375            sysdate,
3376            fnd_global.user_id,
3377            fnd_global.login_id,
3378            sysdate,
3379            fnd_global.user_id
3380           );
3381 
3382                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3383                    x_msg_data  := l_msg_data;
3384                    x_msg_count := l_msg_count;
3385 
3386 --                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3387                    IF (g_debug_mode = 'Y') THEN
3388                       g_debug_msg := ' Falure Inserting Actions Row..... 1 ';
3389                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3390                    END IF;
3391 
3392                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3393                    THEN
3394                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3395                                                 l_api_name);
3396                    END IF;
3397                    RAISE E_UPDATE_CC_TABLES;
3398                 END IF;
3399 
3400   END IF; /* Update CC Tables */
3401 
3402   EXCEPTION
3403     WHEN OTHERS
3404     THEN
3405                         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3406                         THEN
3407                            FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3408                                                      l_api_name);
3409                         END IF;
3410                         IF ( g_unexp_level >= g_debug_level ) THEN
3411                            FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
3412                            FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
3413                            FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
3414                            FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
3415                         END IF;
3416 
3417       RAISE E_UPDATE_CC_TABLES;
3418   END;
3419 
3420 --        IF (IGC_MSGS_PKG.g_debug_mode) THEN
3421         IF (g_debug_mode = 'Y') THEN
3422            g_debug_msg := ' Beginning Phase 2....... Updates';
3423            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3424         END IF;
3425 
3426   IF ( (l_interface_row_count = 0) AND (p_mode = 'R') )
3427   THEN
3428 
3429     OPEN c_account_lines(p_cc_header_id);
3430 
3431     LOOP
3432       FETCH c_account_lines INTO l_cc_acct_lines_rec;
3433 
3434       EXIT WHEN c_account_lines%NOTFOUND;
3435 
3436 -- ----------------------------------------------------------------------------------
3437 -- Obtain the actual account line record based upon the data that was just retrieved
3438 -- from the view.
3439 -- ----------------------------------------------------------------------------------
3440                         OPEN c_cc_acct_line_rec_input;
3441                         FETCH c_cc_acct_line_rec_input
3442                          INTO l_acct_line_rec;
3443 
3444                         IF (c_cc_acct_line_rec_input%NOTFOUND) THEN
3445                            EXIT;
3446                         END IF;
3447 
3448 --                        IF (IGC_MSGS_PKG.g_debug_mode) THEN
3449                         IF (g_debug_mode = 'Y') THEN
3450                            g_debug_msg := ' Retrieving Account Line info 2......';
3451                            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3452                         END IF;
3453 
3454                         CLOSE c_cc_acct_line_rec_input;
3455 
3456                         IF ((l_cc_acct_lines_rec.cc_acct_encmbrnc_amt =
3457                              l_cc_acct_lines_rec.cc_acct_comp_func_amt) AND
3458                             (l_cc_acct_lines_rec.cc_acct_encmbrnc_status = 'N')) THEN
3459 
3460                            l_acct_line_rec.cc_acct_encmbrnc_status := l_encumbrance_status;
3461                            l_acct_line_rec.last_update_date        := SYSDATE;
3462                            l_acct_line_rec.last_update_login       := l_update_login;
3463                            l_acct_line_rec.last_updated_by         := l_update_by;
3464 
3465                            SELECT rowid
3466                              INTO l_row_id
3467                              FROM igc_cc_acct_lines
3468                             WHERE cc_acct_line_id = l_acct_line_rec.cc_acct_line_id;
3469 
3470 --                           IF (IGC_MSGS_PKG.g_debug_mode) THEN
3471                            IF (g_debug_mode = 'Y') THEN
3472                               g_debug_msg := ' Updating Acct Line........ 2';
3473                               Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3474                            END IF;
3475 
3476                            Account_Line_Wrapper (p_api_version       => l_api_version,
3477                                                  p_init_msg_list     => FND_API.G_FALSE,
3478                                                  p_commit            => FND_API.G_FALSE,
3479                                                  p_validation_level  => l_validation_level,
3480                                                  x_return_status     => l_return_status,
3481                                                  x_msg_count         => l_msg_count,
3482                                                  x_msg_data          => l_msg_data,
3483                                                  x_rowid             => l_row_id,
3484                                                  p_action_flag       => 'U',
3485                                                  p_cc_acct_lines_rec => l_acct_line_rec,
3486                                                  p_update_flag       => l_update_flag
3487                                                 );
3488 
3489                            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3490                               x_msg_data  := l_msg_data;
3491                               x_msg_count := l_msg_count;
3492 
3493 --                              IF (IGC_MSGS_PKG.g_debug_mode) THEN
3494                               IF (g_debug_mode = 'Y') THEN
3495                                  g_debug_msg := ' FAILED update accout line ........ 2';
3496                                  Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3497                               END IF;
3498 
3499                               IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3500                               THEN
3501                                  FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3502                                                            l_api_name);
3503                               END IF;
3504                               RAISE E_UPDATE_CC_TABLES;
3505                            END IF;
3506 
3507                         END IF;
3508 
3509       OPEN c_payment_forecast(l_cc_acct_lines_rec.cc_acct_line_id);
3510 
3511       LOOP
3512         FETCH c_payment_forecast INTO l_cc_pmt_fcst_rec;
3513 
3514         EXIT WHEN c_payment_forecast%NOTFOUND;
3515 
3516 -- ----------------------------------------------------------------------------------
3517 -- Obtain the actual Det PF line record based upon the data that was just retrieved
3518 -- from the view.
3519 -- ----------------------------------------------------------------------------------
3520                                 OPEN c_det_pf_line_rec_input;
3521                                 FETCH c_det_pf_line_rec_input
3522                                  INTO l_det_pf_rec;
3523 
3524                                 IF (c_det_pf_line_rec_input%NOTFOUND) THEN
3525                                    EXIT;
3526                                 END IF;
3527 
3528                                 CLOSE c_det_pf_line_rec_input;
3529 
3530 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3531                                 IF (g_debug_mode = 'Y') THEN
3532                                    g_debug_msg := ' Getting the DET PF Line INFO ...... 2 ';
3533                                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3534                                 END IF;
3535 
3536                                 IF ((l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_amt =
3537                                      l_cc_pmt_fcst_rec.cc_det_pf_comp_func_amt) AND
3538                                     (l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status = 'N')) THEN
3539 
3540                                    l_det_pf_rec.cc_det_pf_encmbrnc_status := l_encumbrance_status;
3541                                    l_det_pf_rec.last_update_date          := SYSDATE;
3542                                    l_det_pf_rec.last_update_login         := l_update_login;
3543                                    l_det_pf_rec.last_updated_by           := l_update_by;
3544 
3545                                    SELECT rowid
3546                                      INTO l_row_id
3547                                      FROM igc_cc_det_pf
3548                                     WHERE cc_det_pf_line_id = l_det_pf_rec.cc_det_pf_line_id;
3549 
3550                                    Det_Pf_Wrapper (p_api_version      => l_api_version,
3551                                                    p_init_msg_list    => FND_API.G_FALSE,
3552                                                    p_commit           => FND_API.G_FALSE,
3553                                                    p_validation_level => l_validation_level,
3554                                                    x_return_status    => l_return_status,
3555                                                    x_msg_count        => l_msg_count,
3556                                                    x_msg_data         => l_msg_data,
3557                                                    x_rowid            => l_row_id,
3558                                                    p_action_flag      => 'U',
3559                                                    p_cc_pmt_fcst_rec  => l_det_pf_rec,
3560                                                    p_update_flag      => l_update_flag
3561                                                   );
3562 
3563                                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3564                                       x_msg_data  := l_msg_data;
3565                                       x_msg_count := l_msg_count;
3566 
3567 --                                      IF (IGC_MSGS_PKG.g_debug_mode) THEN
3568                                       IF (g_debug_mode = 'Y') THEN
3569                                          g_debug_msg := ' FAILED Updating DET PF Line INFO ...... 2 ';
3570                                          Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3571                                       END IF;
3572 
3573                                       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3574                                       THEN
3575                                          FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3576                                                                    l_api_name);
3577                                       END IF;
3578                                       RAISE E_UPDATE_CC_TABLES;
3579                                    END IF;
3580 
3581                                 END IF;
3582 
3583       END LOOP;
3584 
3585       CLOSE c_payment_forecast;
3586                         IF (c_det_pf_line_rec_input%ISOPEN) THEN
3587                            CLOSE c_det_pf_line_rec_input;
3588                         END IF;
3589 
3590     END LOOP;
3591 
3592     CLOSE c_account_lines;
3593                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3594                    CLOSE c_cc_acct_line_rec_input;
3595                 END IF;
3596                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3597                    CLOSE c_det_pf_line_rec_input;
3598                 END IF;
3599 
3600                 l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status;
3601                 l_cc_headers_rec.last_update_date   := SYSDATE;
3602                 l_cc_headers_rec.last_update_login  := l_update_login;
3603                 l_cc_headers_rec.last_updated_by    := l_update_by;
3604 
3605                 SELECT rowid
3606                   INTO l_row_id
3607                   FROM igc_cc_headers
3608                  WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3609 
3610 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3611                 IF (g_debug_mode = 'Y') THEN
3612                    g_debug_msg := ' Updating Header Line INFO ...... 3 ';
3613                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3614                 END IF;
3615 
3616                 Header_Wrapper (p_api_version      => l_api_version,
3617                                 p_init_msg_list    => FND_API.G_FALSE,
3618                                 p_commit           => FND_API.G_FALSE,
3619                                 p_validation_level => l_validation_level,
3620                                 x_return_status    => l_return_status,
3621                                 x_msg_count        => l_msg_count,
3622                                 x_msg_data         => l_msg_data,
3623                                 x_rowid            => l_row_id,
3624                                 p_action_flag      => 'U',
3625                                 p_cc_header_rec    => l_cc_headers_rec,
3626                                 p_update_flag      => l_update_flag
3627                                );
3628 
3629                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3630                    x_msg_data  := l_msg_data;
3631                    x_msg_count := l_msg_count;
3632 
3633 --                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3634                    IF (g_debug_mode = 'Y') THEN
3635                       g_debug_msg := ' FAILED Updated Header Line INFO ...... 3 ';
3636                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3637                    END IF;
3638 
3639                    l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status_old;
3640                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3641                    THEN
3642                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3643                                                 l_api_name);
3644                    END IF;
3645                    RAISE E_UPDATE_CC_TABLES;
3646                 END IF;
3647 
3648   END IF;
3649 
3650   IF (l_cc_apprvl_status_old <> 'IP')
3651   THEN
3652 
3653            l_cc_headers_rec.cc_apprvl_status    := l_cc_apprvl_status_old;
3654            l_cc_headers_rec.last_update_date    := SYSDATE;
3655            l_cc_headers_rec.last_update_login   := l_update_login;
3656            l_cc_headers_rec.last_updated_by     := l_update_by;
3657 
3658            SELECT rowid
3659            INTO l_row_id
3660            FROM igc_cc_headers
3661            WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3662 
3663            Header_Wrapper (p_api_version      => l_api_version,
3664                            p_init_msg_list    => FND_API.G_FALSE,
3665                            p_commit           => FND_API.G_FALSE,
3666                            p_validation_level => l_validation_level,
3667                            x_return_status    => l_return_status,
3668                            x_msg_count        => l_msg_count,
3669                            x_msg_data         => l_msg_data,
3670                            x_rowid            => l_row_id,
3671                            p_action_flag      => 'U',
3672                            p_cc_header_rec    => l_cc_headers_rec,
3673                            p_update_flag      => l_update_flag
3674                           );
3675 
3676            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3677               x_msg_data  := l_msg_data;
3678               x_msg_count := l_msg_count;
3679 --              IF (IGC_MSGS_PKG.g_debug_mode) THEN
3680               IF (g_debug_mode = 'Y') THEN
3681                  g_debug_msg := ' FAILED Update Header Line Info ...... 4 ';
3682                  Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3683               END IF;
3684 
3685               l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status_old;
3686               IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3687               THEN
3688                  FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3689                                            l_api_name);
3690               END IF;
3691               RAISE E_UPDATE_CC_TABLES;
3692            END IF;
3693 
3694   END IF;
3695 
3696   IF ( (l_batch_result_code IS NOT NULL) AND (l_interface_row_count <> 0) )
3697   THEN
3698     IF (l_batch_result_code = 'HXX')
3699     THEN
3700       fnd_message.set_name('IGC', 'IGC_CC_CBC_RESULT_CODE_INVALID');
3701                     IF(g_state_level >= g_debug_level) THEN
3702                        FND_LOG.MESSAGE(g_state_level, l_full_path, FALSE);
3703                     END IF;
3704       fnd_msg_pub.add;
3705     ELSE
3706       fnd_message.set_name('IGC', 'IGC_CC_CBC_RESULT_CODE_'||l_batch_result_code);
3707                     IF(g_state_level >= g_debug_level) THEN
3708                        FND_LOG.MESSAGE(g_state_level, l_full_path, FALSE);
3709                     END IF;
3710       fnd_msg_pub.add;
3711     END IF;
3712 
3713   END IF;
3714 
3715   IF FND_API.To_Boolean(p_commit)
3716   THEN
3717            COMMIT WORK;
3718   END IF;
3719 
3720         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3721                                     p_data  => x_msg_data );
3722 
3723         RETURN;
3724 
3725 EXCEPTION
3726 
3727   WHEN FND_API.G_EXC_UNEXPECTED_ERROR OR E_CC_NOT_FOUND OR  E_INVALID_MODE OR E_UPDATE OR E_DELETE
3728   THEN
3729     ROLLBACK TO Execute_Budgetary_Ctrl1;
3730     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3731     x_bc_status      := FND_API.G_FALSE;
3732                 IF (c_payment_forecast%ISOPEN) THEN
3733                    CLOSE c_payment_forecast;
3734                 END IF;
3735                 IF (c_account_lines%ISOPEN) THEN
3736                    CLOSE c_account_lines;
3737                 END IF;
3738                 IF (c_cc_acct_line%ISOPEN) THEN
3739                    CLOSE c_cc_acct_line;
3740                 END IF;
3741                 IF (c_det_pf_line%ISOPEN) THEN
3742                    CLOSE c_det_pf_line;
3743                 END IF;
3744                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3745                    CLOSE c_cc_acct_line_rec_input;
3746                 END IF;
3747                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3748                    CLOSE c_det_pf_line_rec_input;
3749                 END IF;
3750 
3751     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3752                                             p_data  => x_msg_data );
3753                 IF (g_excep_level >=  g_debug_level ) THEN
3754                      FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR OR E_CC_NOT_FOUND OR  E_INVALID_MODE OR E_UPDATE OR E_DELETE Exception Raised');
3755                 END IF;
3756 
3757   WHEN  E_PROCESS_ROW
3758   THEN
3759     ROLLBACK TO Execute_Budgetary_Ctrl3;
3760     IF (l_cc_apprvl_status_old <> 'IP')
3761     THEN
3762 
3763                    l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
3764                    l_cc_headers_rec.last_update_date   := SYSDATE;
3765                    l_cc_headers_rec.last_update_login  := l_update_login;
3766                    l_cc_headers_rec.last_updated_by    := l_update_by;
3767 
3768                    SELECT rowid
3769                      INTO l_row_id
3770                      FROM igc_cc_headers
3771                     WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3772 
3773                    Header_Wrapper (p_api_version      => l_api_version,
3774                                    p_init_msg_list    => FND_API.G_FALSE,
3775                                    p_commit           => FND_API.G_TRUE,
3776                                    p_validation_level => l_validation_level,
3777                                    x_return_status    => l_return_status,
3778                                    x_msg_count        => l_msg_count,
3779                                    x_msg_data         => l_msg_data,
3780                                    x_rowid            => l_row_id,
3781                                    p_action_flag      => 'U',
3782                                    p_cc_header_rec    => l_cc_headers_rec,
3783                                    p_update_flag      => l_update_flag
3784                                   );
3785 
3786                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3787                       x_msg_data  := l_msg_data;
3788                       x_msg_count := l_msg_count;
3789                    END IF;
3790 
3791     END IF;
3792 
3793     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3794     x_bc_status      := FND_API.G_FALSE;
3795                 IF (c_payment_forecast%ISOPEN) THEN
3796                    CLOSE c_payment_forecast;
3797                 END IF;
3798                 IF (c_account_lines%ISOPEN) THEN
3799                    CLOSE c_account_lines;
3800                 END IF;
3801                 IF (c_cc_acct_line%ISOPEN) THEN
3802                    CLOSE c_cc_acct_line;
3803                 END IF;
3804                 IF (c_det_pf_line%ISOPEN) THEN
3805                    CLOSE c_det_pf_line;
3806                 END IF;
3807                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3808                    CLOSE c_cc_acct_line_rec_input;
3809                 END IF;
3810                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3811                    CLOSE c_det_pf_line_rec_input;
3812                 END IF;
3813 
3814     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3815                                             p_data  => x_msg_data );
3816                 IF (g_excep_level >=  g_debug_level ) THEN
3817                     FND_LOG.STRING (g_excep_level,l_full_path,'E_PROCESS_ROW Exception Raised');
3818                 END IF;
3819 
3820   WHEN  E_CC_INVALID_SET_UP OR E_NO_BUDGETARY_CONTROL
3821        OR E_SBC_DATA OR E_SBC_DATA1 OR E_CBC_DATA OR E_CBC_DATA1 OR E_CHECK_BUDG_CTRL
3822   THEN
3823     ROLLBACK TO Execute_Budgetary_Ctrl2;
3824 
3825     IF (l_cc_apprvl_status_old <> 'IP')
3826     THEN
3827 
3828                    l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
3829                    l_cc_headers_rec.last_update_date   := SYSDATE;
3830                    l_cc_headers_rec.last_update_login  := l_update_login;
3831                    l_cc_headers_rec.last_updated_by    := l_update_by;
3832 
3833                    SELECT rowid
3834                      INTO l_row_id
3835                      FROM igc_cc_headers
3836                     WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3837 
3838                    Header_Wrapper (p_api_version      => l_api_version,
3839                                    p_init_msg_list    => FND_API.G_FALSE,
3840                                    p_commit           => FND_API.G_TRUE,
3841                                    p_validation_level => l_validation_level,
3842                                    x_return_status    => l_return_status,
3843                                    x_msg_count        => l_msg_count,
3844                                    x_msg_data         => l_msg_data,
3845                                    x_rowid            => l_row_id,
3846                                    p_action_flag      => 'U',
3847                                    p_cc_header_rec    => l_cc_headers_rec,
3848                                    p_update_flag      => l_update_flag
3849                                   );
3850 
3851                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3852                       x_msg_data  := l_msg_data;
3853                       x_msg_count := l_msg_count;
3854                    END IF;
3855 
3856     END IF;
3857 
3858     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3859     x_bc_status      := FND_API.G_FALSE;
3860                 IF (c_payment_forecast%ISOPEN) THEN
3861                    CLOSE c_payment_forecast;
3862                 END IF;
3863                 IF (c_account_lines%ISOPEN) THEN
3864                    CLOSE c_account_lines;
3865                 END IF;
3866                 IF (c_cc_acct_line%ISOPEN) THEN
3867                    CLOSE c_cc_acct_line;
3868                 END IF;
3869                 IF (c_det_pf_line%ISOPEN) THEN
3870                    CLOSE c_det_pf_line;
3871                 END IF;
3872                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3873                    CLOSE c_cc_acct_line_rec_input;
3874                 END IF;
3875                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3876                    CLOSE c_det_pf_line_rec_input;
3877                 END IF;
3878 
3879     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3880                                       p_data  => x_msg_data );
3881                 IF (g_excep_level >=  g_debug_level ) THEN
3882                     FND_LOG.STRING (g_excep_level,l_full_path,
3883                'E_CC_INVALID_SET_UP OR E_NO_BUDGETARY_CONTROLOR E_SBC_DATA OR E_SBC_DATA1 OR E_CBC_DATA OR E_CBC_DATA1 OR E_CHECK_BUDG_CTRL');
3884                 END IF;
3885 
3886   WHEN E_BC_EXECUTION /*OR E_UPDATE_CC_TABLES */
3887   THEN
3888     --ROLLBACK TO Execute_Budgetary_Ctrl4;
3889     select count(*)
3890     INTO x_msg_count
3891     FROM igc_cc_interface
3892     WHERE cc_header_id = p_cc_header_id;
3893 
3894     IF (l_cc_apprvl_status_old <> 'IP')
3895     THEN
3896 
3897                    l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
3898                    l_cc_headers_rec.last_update_date   := SYSDATE;
3899                    l_cc_headers_rec.last_update_login  := l_update_login;
3900                    l_cc_headers_rec.last_updated_by    := l_update_by;
3901 
3902                    SELECT rowid
3903                      INTO l_row_id
3904                      FROM igc_cc_headers
3905                     WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3906 
3907                    Header_Wrapper (p_api_version      => l_api_version,
3908                                    p_init_msg_list    => FND_API.G_FALSE,
3909                                    p_commit           => FND_API.G_TRUE,
3910                                    p_validation_level => l_validation_level,
3911                                    x_return_status    => l_return_status,
3912                                    x_msg_count        => l_msg_count,
3913                                    x_msg_data         => l_msg_data,
3914                                    x_rowid            => l_row_id,
3915                                    p_action_flag      => 'U',
3916                                    p_cc_header_rec    => l_cc_headers_rec,
3917                                    p_update_flag      => l_update_flag
3918                                   );
3919 
3920                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3921                       x_msg_data  := l_msg_data;
3922                       x_msg_count := l_msg_count;
3923                    END IF;
3924 
3925     END IF;
3926 
3927     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3928     x_bc_status      := FND_API.G_FALSE;
3929                 IF (c_payment_forecast%ISOPEN) THEN
3930                    CLOSE c_payment_forecast;
3931                 END IF;
3932                 IF (c_account_lines%ISOPEN) THEN
3933                    CLOSE c_account_lines;
3934                 END IF;
3935                 IF (c_cc_acct_line%ISOPEN) THEN
3936                    CLOSE c_cc_acct_line;
3937                 END IF;
3938                 IF (c_det_pf_line%ISOPEN) THEN
3939                    CLOSE c_det_pf_line;
3940                 END IF;
3941                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3942                    CLOSE c_cc_acct_line_rec_input;
3943                 END IF;
3944                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3945                    CLOSE c_det_pf_line_rec_input;
3946                 END IF;
3947 
3948     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3949                                       p_data  => x_msg_data );
3950                 IF (g_excep_level >=  g_debug_level ) THEN
3951                    FND_LOG.STRING (g_excep_level,l_full_path,'E_BC_EXECUTION Exception Raised');
3952                 END IF;
3953 
3954         WHEN OTHERS
3955   THEN
3956     ROLLBACK;
3957 
3958     IF (l_cc_apprvl_status_old <> 'IP')
3959     THEN
3960 
3961                    l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
3962                    l_cc_headers_rec.last_update_date   := SYSDATE;
3963                    l_cc_headers_rec.last_update_login  := l_update_login;
3964                    l_cc_headers_rec.last_updated_by    := l_update_by;
3965 
3966                    SELECT rowid
3967                      INTO l_row_id
3968                      FROM igc_cc_headers
3969                     WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3970 
3971                    Header_Wrapper (p_api_version      => l_api_version,
3972                                    p_init_msg_list    => FND_API.G_FALSE,
3973                                    p_commit           => FND_API.G_TRUE,
3974                                    p_validation_level => l_validation_level,
3975                                    x_return_status    => l_return_status,
3976                                    x_msg_count        => l_msg_count,
3977                                    x_msg_data         => l_msg_data,
3978                                    x_rowid            => l_row_id,
3979                                    p_action_flag      => 'U',
3980                                    p_cc_header_rec    => l_cc_headers_rec,
3981                                    p_update_flag      => l_update_flag
3982                                   );
3983 
3984                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3985                       x_msg_data  := l_msg_data;
3986                       x_msg_count := l_msg_count;
3987                    END IF;
3988 
3989     END IF;
3990 
3991     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3992     x_bc_status      := FND_API.G_FALSE;
3993                 IF (c_payment_forecast%ISOPEN) THEN
3994                    CLOSE c_payment_forecast;
3995                 END IF;
3996                 IF (c_account_lines%ISOPEN) THEN
3997                    CLOSE c_account_lines;
3998                 END IF;
3999                 IF (c_cc_acct_line%ISOPEN) THEN
4000                    CLOSE c_cc_acct_line;
4001                 END IF;
4002                 IF (c_det_pf_line%ISOPEN) THEN
4003                    CLOSE c_det_pf_line;
4004                 END IF;
4005                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
4006                    CLOSE c_cc_acct_line_rec_input;
4007                 END IF;
4008                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
4009                    CLOSE c_det_pf_line_rec_input;
4010                 END IF;
4011 
4012     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4013     THEN
4014       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
4015                                                   l_api_name);
4016     END IF;
4017 
4018     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4019                                             p_data  => x_msg_data );
4020                 IF ( g_unexp_level >= g_debug_level ) THEN
4021                    FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
4022                    FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
4023                    FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
4024                    FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
4025                 END IF;
4026 
4027 END Execute_Budgetary_Ctrl;
4028 
4029 
4030 PROCEDURE Check_Budgetary_Ctrl_On
4031 (
4032   p_api_version                         IN       NUMBER,
4033   p_init_msg_list                       IN       VARCHAR2 := FND_API.G_FALSE,
4034   p_validation_level                    IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
4035   x_return_status                       OUT NOCOPY      VARCHAR2,
4036   x_msg_count                           OUT NOCOPY      NUMBER,
4037   x_msg_data                            OUT NOCOPY      VARCHAR2,
4038   p_org_id                              IN       NUMBER,
4039   p_sob_id                              IN       NUMBER,
4040   p_cc_state                            IN       VARCHAR2,
4041   x_encumbrance_on                      OUT NOCOPY      VARCHAR2
4042 )
4043 IS
4044   l_api_name                      CONSTANT VARCHAR2(30)   := 'Check_Budgetary_Ctrl_On';
4045   l_api_version                   CONSTANT NUMBER         :=  1.0;
4046 
4047   l_enable_budg_control_flag      gl_sets_of_books.enable_budgetary_control_flag%TYPE;
4048   l_cc_bc_enable_flag             igc_cc_bc_enable.cc_bc_enable_flag%TYPE;
4049   l_req_encumbrance_flag        financials_system_params_all.req_encumbrance_flag%TYPE;
4050   l_purch_encumbrance_flag      financials_system_params_all.purch_encumbrance_flag%TYPE;
4051 --  l_cc_prov_enc_enable_flag       igc_cc_encmbrnc_ctrls.cc_prov_encmbrnc_enable_flag%TYPE;
4052 --  l_cc_conf_enc_enable_flag       igc_cc_encmbrnc_ctrls.cc_conf_encmbrnc_enable_flag%TYPE;
4053 
4054   l_error_message                 VARCHAR2(2000);
4055 
4056   e_cc_not_found                  EXCEPTION;
4057   e_cc_invalid_set_up             EXCEPTION;
4058   e_gl_data                   EXCEPTION;
4059   e_null_parameter                EXCEPTION;
4060 
4061         l_full_path                     VARCHAR2(255);
4062 BEGIN
4063 
4064    l_full_path := g_path || 'Check_Budgetary_Ctrl_On';
4065 
4066   x_encumbrance_on           := FND_API.G_TRUE;
4067   x_return_status            := FND_API.G_RET_STS_SUCCESS;
4068   l_enable_budg_control_flag := 'N';
4069 
4070   IF FND_API.to_Boolean(p_init_msg_list)
4071   THEN
4072     FND_MSG_PUB.initialize;
4073   END IF;
4074 
4075   IF NOT FND_API.Compatible_API_Call(l_api_version,
4076              p_api_version,
4077              l_api_name,
4078              G_PKG_NAME)
4079   THEN
4080     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4081   END IF;
4082 
4083   IF (p_org_id IS NULL)
4084   THEN
4085     fnd_message.set_name('IGC', 'IGC_CC_NO_ORG_ID');
4086                 IF(g_error_level >= g_debug_level) THEN
4087                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4088                 END IF;
4089     fnd_msg_pub.add;
4090     RAISE E_NULL_PARAMETER;
4091   END IF;
4092 
4093   IF (p_sob_id IS NULL)
4094   THEN
4095     fnd_message.set_name('IGC', 'IGC_CC_NO_SOB_ID');
4096                 IF(g_error_level >= g_debug_level) THEN
4097                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4098                 END IF;
4099     fnd_msg_pub.add;
4100     RAISE E_NULL_PARAMETER;
4101   END IF;
4102 
4103   IF (p_cc_state IS NULL)
4104   THEN
4105     fnd_message.set_name('IGC', 'IGC_CC_NO_CC_STATE');
4106                 IF(g_error_level >= g_debug_level) THEN
4107                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4108                 END IF;
4109     fnd_msg_pub.add;
4110     RAISE E_NULL_PARAMETER;
4111   END IF;
4112 
4113   /* Check whether SBC is turned on */
4114 
4115   BEGIN
4116 
4117     SELECT  NVL(enable_budgetary_control_flag,'N')
4118     INTO    l_enable_budg_control_flag
4119     FROM    gl_sets_of_books
4120     WHERE   set_of_books_id = p_sob_id;
4121 
4122   EXCEPTION
4123 
4124     WHEN NO_DATA_FOUND
4125     THEN
4126       fnd_message.set_name('IGC', 'IGC_CC_INVALID_GL_DATA');
4127       IF(g_error_level >= g_debug_level) THEN
4128         FND_LOG.MESSAGE(g_error_level, l_full_path || 'Msg4', FALSE);
4129       END IF;
4130       fnd_msg_pub.add;
4131       RAISE E_CC_INVALID_SET_UP;
4132   END;
4133 
4134 
4135   IF ( NVL(l_enable_budg_control_flag,'N') = 'Y')
4136   THEN
4137     BEGIN
4138       SELECT  req_encumbrance_flag, purch_encumbrance_flag
4139       INTO      l_req_encumbrance_flag, l_purch_encumbrance_flag
4140       FROM    financials_system_params_all
4141       WHERE   set_of_books_id = p_sob_id AND
4142           org_id = p_org_id;
4143     EXCEPTION
4144       WHEN NO_DATA_FOUND
4145       THEN
4146         x_encumbrance_on            := FND_API.G_FALSE;
4147     END;
4148 
4149     /* Check whether CBC is turned on */
4150 
4151       BEGIN
4152         SELECT  cc_bc_enable_flag
4153         INTO    l_cc_bc_enable_flag
4154         FROM    igc_cc_bc_enable
4155         WHERE   set_of_books_id = p_sob_id;
4156       EXCEPTION
4157         WHEN NO_DATA_FOUND
4158         THEN
4159           l_cc_bc_enable_flag := 'N';
4160       END;
4161 
4162       IF ( (p_cc_state = 'PR') OR (p_cc_state = 'CL') )
4163       THEN
4164         IF (NVL(l_req_encumbrance_flag,'N') = 'Y')
4165         THEN
4166           x_encumbrance_on := FND_API.G_TRUE;
4167         ELSE
4168           x_encumbrance_on := FND_API.G_FALSE;
4169         END IF;
4170       END IF;
4171 
4172       IF ( (p_cc_state = 'CM') OR (p_cc_state = 'CT') )
4173       THEN
4174         IF (NVL(l_purch_encumbrance_flag,'N') = 'Y')
4175         THEN
4176           x_encumbrance_on := FND_API.G_TRUE;
4177         ELSE
4178           x_encumbrance_on := FND_API.G_FALSE;
4179         END IF;
4180       END IF;
4181     ELSE
4182       x_encumbrance_on := FND_API.G_FALSE;
4183     END IF;
4184 
4185 EXCEPTION
4186 
4187   WHEN E_CC_NOT_FOUND OR E_CC_INVALID_SET_UP OR E_GL_DATA OR E_NULL_PARAMETER
4188   THEN
4189     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4190     x_encumbrance_on := FND_API.G_FALSE;
4191     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4192                                             p_data  => x_msg_data );
4193         IF (g_excep_level >=  g_debug_level ) THEN
4194            FND_LOG.STRING (g_excep_level,l_full_path,'E_CC_NOT_FOUND OR E_CC_INVALID_SET_UP OR E_GL_DATA OR E_NULL_PARAMETER Exception Raised');
4195         END IF;
4196 
4197   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
4198   THEN
4199     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4200     x_encumbrance_on := FND_API.G_FALSE;
4201 
4202     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4203                                       p_data  => x_msg_data );
4204         IF (g_excep_level >=  g_debug_level ) THEN
4205            FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR Exception Raised');
4206         END IF;
4207 
4208   WHEN OTHERS
4209   THEN
4210     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4211     x_encumbrance_on := FND_API.G_FALSE;
4212 
4213     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4214     THEN
4215       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
4216                                                   l_api_name);
4217     END IF;
4218 
4219     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4220                                             p_data  => x_msg_data );
4221         IF ( g_unexp_level >= g_debug_level ) THEN
4222            FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
4223            FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
4224            FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
4225            FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
4226         END IF;
4227 
4228 END Check_Budgetary_Ctrl_On;
4229 
4230 
4231 PROCEDURE Set_Encumbrance_Status
4232 (
4233   p_api_version                         IN       NUMBER,
4234   p_init_msg_list                       IN       VARCHAR2 := FND_API.G_FALSE,
4235   p_commit                              IN       VARCHAR2 := FND_API.G_FALSE,
4236   p_validation_level                    IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
4237   x_return_status                       OUT NOCOPY      VARCHAR2,
4238   x_msg_count                           OUT NOCOPY      NUMBER,
4239   x_msg_data                            OUT NOCOPY      VARCHAR2,
4240   p_cc_header_id                        IN       NUMBER,
4241   p_encumbrance_status_code             IN       VARCHAR2
4242 )
4243 IS
4244   l_api_name                      CONSTANT VARCHAR2(30)   := 'Set_Encumbrance_Status';
4245   l_api_version                   CONSTANT NUMBER         :=  1.0;
4246 
4247   l_cc_headers_rec                igc_cc_headers%ROWTYPE;
4248   l_cc_acct_lines_rec             igc_cc_acct_lines_v%ROWTYPE;
4249   l_cc_pmt_fcst_rec               igc_cc_det_pf_v%ROWTYPE;
4250 
4251   l_error_message                 VARCHAR2(2000);
4252 
4253 -- -------------------------------------------------------------------------
4254 -- Variables to be used in calls to the table wrapper procedures.
4255 -- -------------------------------------------------------------------------
4256         l_validation_level              NUMBER;
4257         l_return_status                 VARCHAR2(1);
4258         l_msg_count                     NUMBER;
4259         l_msg_data                      VARCHAR2(2000);
4260         l_row_id                        VARCHAR2(18);
4261         l_update_flag                   VARCHAR2(1);
4262         l_update_login                  igc_cc_acct_lines.last_update_login%TYPE;
4263         l_update_by                     igc_cc_acct_lines.last_updated_by%TYPE;
4264 
4265 -- -------------------------------------------------------------------------
4266 -- Record definitions to be used for CURSORS getting single record for
4267 -- the table wrappers.  These record definitions are NOT the same as the
4268 -- ones above when getting data from the views.
4269 -- -------------------------------------------------------------------------
4270         l_det_pf_rec                    igc_cc_det_pf%ROWTYPE;
4271         l_header_rec                    igc_cc_headers%ROWTYPE;
4272         l_acct_line_rec                 igc_cc_acct_lines%ROWTYPE;
4273 
4274   e_cc_not_found                  EXCEPTION;
4275   e_invalid_status_code           EXCEPTION;
4276 
4277   /* Contract Commitment detail payment forecast  */
4278   CURSOR c_payment_forecast(t_cc_acct_line_id NUMBER) IS
4279 
4280         -- Performance Tuning, Replaced view igc_cc_det_pf_v with
4281         -- igc_cc_det_pf and replaced the line below.
4282   -- SELECT *
4283   -- FROM igc_cc_det_pf_v
4284   -- WHERE cc_acct_line_id =  t_cc_acct_line_id;
4285 
4286         SELECT ccdpf.ROWID,
4287                ccdpf.cc_det_pf_line_id,
4288                ccdpf.cc_det_pf_line_num,
4289                NULL  cc_acct_line_num,
4290                ccdpf.cc_acct_line_id,
4291                NULL  parent_det_pf_line_num,
4292                ccdpf.parent_det_pf_line_id,
4293                ccdpf.parent_acct_line_id,
4294                ccdpf.cc_det_pf_entered_amt,
4295                ccdpf.cc_det_pf_func_amt,
4296                ccdpf.cc_det_pf_date,
4297                IGC_CC_COMP_AMT_PKG.COMPUTE_PF_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_billed_amt,
4298                IGC_CC_COMP_AMT_PKG.COMPUTE_PF_FUNC_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_func_billed_amt,
4299                ccdpf.cc_det_pf_unbilled_amt,
4300                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(p_cc_header_id,NVL(ccdpf.cc_det_pf_entered_amt,0)) cc_det_pf_comp_func_amt,
4301                ccdpf.cc_det_pf_encmbrnc_amt,
4302                ( IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT ( p_cc_header_id, NVL(ccdpf.cc_det_pf_entered_amt,0) ) -
4303                NVL(ccdpf.cc_det_pf_encmbrnc_amt,0) ) cc_det_pf_unencmbrd_amt ,
4304                ccdpf.cc_det_pf_encmbrnc_date,
4305                ccdpf.cc_det_pf_encmbrnc_status,
4306                ccdpf.context,
4307                ccdpf.attribute1,
4308                ccdpf.attribute2,
4309                ccdpf.attribute3,
4310                ccdpf.attribute4,
4311                ccdpf.attribute5,
4312                ccdpf.attribute6,
4313                ccdpf.attribute7,
4314                ccdpf.attribute8,
4315                ccdpf.attribute9,
4316                ccdpf.attribute10,
4317                ccdpf.attribute11,
4318                ccdpf.attribute12,
4319                ccdpf.attribute13,
4320                ccdpf.attribute14,
4321                ccdpf.attribute15,
4322                ccdpf.last_update_date,
4323                ccdpf.last_updated_by,
4324                ccdpf.last_update_login,
4325                ccdpf.creation_date,
4326                ccdpf.created_by
4327         FROM igc_cc_det_pf ccdpf
4328   WHERE ccdpf.cc_acct_line_id =  t_cc_acct_line_id;
4329 
4330   /* Contract Commitment account lines  */
4331 
4332 -- Bug 2885953 - cursor below amended for performance enhancements
4333 --    CURSOR c_account_lines(t_cc_header_id NUMBER) IS
4334 --    SELECT *
4335 --        FROM  igc_cc_acct_lines_v ccac
4336 --        WHERE ccac.cc_header_id = t_cc_header_id;
4337   CURSOR c_account_lines(t_cc_header_id NUMBER) IS
4338   SELECT ccac.ROWID,
4339                ccac.cc_header_id,
4340                NULL org_id,
4341                NULL cc_type,
4342                NULL cc_type_code,
4343                NULL cc_num,
4344                ccac.cc_acct_line_id,
4345                ccac.cc_acct_line_num,
4346                ccac.cc_acct_desc,
4347                ccac.parent_header_id,
4348                ccac.parent_acct_line_id,
4349                NULL parent_cc_acct_line_num,
4350                NULL cc_budget_acct_desc,
4351                ccac.cc_budget_code_combination_id,
4352                NULL cc_charge_acct_desc,
4353                ccac.cc_charge_code_combination_id,
4354                ccac.cc_acct_entered_amt,
4355                ccac.cc_acct_func_amt,
4356                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_billed_amt,
4357                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_func_billed_amt,
4358                ccac.cc_acct_encmbrnc_amt,
4359                (IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0)) - NVL(ccac.cc_acct_encmbrnc_amt,0)) cc_acct_unencmrd_amt,
4360                ccac.cc_acct_unbilled_amt,
4361                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0))
4362                cc_acct_comp_func_amt,
4363                NULL project_number,
4364                ccac.project_id,
4365                NULL task_number,
4366                ccac.task_id,
4367                ccac.expenditure_type,
4368                NULL expenditure_org_name,
4369                ccac.expenditure_org_id,
4370                ccac.expenditure_item_date,
4371                ccac.cc_acct_taxable_flag,
4372                NULL tax_name,
4373                ccac.tax_id,
4374                ccac.cc_acct_encmbrnc_status,
4375                ccac.cc_acct_encmbrnc_date,
4376                ccac.context,
4377                ccac.attribute1,
4378                ccac.attribute2,
4379                ccac.attribute3,
4380                ccac.attribute4,
4381                ccac.attribute5,
4382                ccac.attribute6,
4383                ccac.attribute7,
4384                ccac.attribute8,
4385                ccac.attribute9,
4386                ccac.attribute10,
4387                ccac.attribute11,
4388                ccac.attribute12,
4389                ccac.attribute13,
4390                ccac.attribute14,
4391                ccac.attribute15,
4392                ccac.created_by,
4393                ccac.creation_date,
4394                ccac.last_updated_by,
4395                ccac.last_update_date,
4396                ccac.last_update_login,
4397                ccac.cc_func_withheld_amt,
4398                ccac.cc_ent_withheld_amt,
4399                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_func_withheld_amt,0)) cc_comp_func_whld_amt,
4400                ccac.Tax_Classif_Code
4401         FROM  igc_cc_acct_lines ccac
4402         WHERE ccac.cc_header_id = t_cc_header_id;
4403 
4404 -- -------------------------------------------------------------------------
4405 -- Cursors used for obtaining a single line to be passed into the wrapper
4406 -- functions for updating, inserting, deleting records from tables.
4407 -- -------------------------------------------------------------------------
4408         CURSOR c_cc_acct_line IS
4409           SELECT *
4410             FROM igc_cc_acct_lines
4411            WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
4412 
4413         CURSOR c_det_pf_line IS
4414           SELECT *
4415             FROM igc_cc_det_pf
4416            WHERE cc_det_pf_line_id = l_cc_pmt_fcst_rec.cc_det_pf_line_id;
4417 
4418    l_full_path         VARCHAR2(255);
4419 
4420 BEGIN
4421 
4422     l_full_path := g_path || 'Set_Encumbrance_Status';
4423 
4424   SAVEPOINT Set_Encumbrance_Status;
4425 
4426   IF FND_API.to_Boolean(p_init_msg_list)
4427   THEN
4428     FND_MSG_PUB.initialize;
4429   END IF;
4430 
4431   IF NOT FND_API.Compatible_API_Call(l_api_version,
4432              p_api_version,
4433              l_api_name,
4434              G_PKG_NAME)
4435   THEN
4436     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4437   END IF;
4438 
4439   x_return_status    := FND_API.G_RET_STS_SUCCESS;
4440         l_validation_level := p_validation_level;
4441         l_update_login     := FND_GLOBAL.LOGIN_ID;
4442         l_update_by        := FND_GLOBAL.USER_ID;
4443 
4444   IF ( (NVL(p_encumbrance_status_code,'X') <> 'P') AND
4445        (NVL(p_encumbrance_status_code,'X') <> 'T') )
4446   THEN
4447     fnd_message.set_name('IGC', 'IGC_CC_INVALID_STATUS_CODE');
4448     fnd_message.set_token('CODE', p_encumbrance_status_code,TRUE);
4449                 IF(g_error_level >= g_debug_level) THEN
4450                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4451                 END IF;
4452     fnd_msg_pub.add;
4453     RAISE E_INVALID_STATUS_CODE;
4454 
4455   END IF;
4456 
4457         BEGIN
4458 
4459     SELECT *
4460     INTO l_cc_headers_rec
4461     FROM igc_cc_headers
4462     WHERE cc_header_id = p_cc_header_id;
4463 
4464   EXCEPTION
4465 
4466     WHEN no_data_found
4467     THEN
4468       fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
4469       fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
4470                     IF(g_excep_level >= g_debug_level) THEN
4471                        FND_LOG.MESSAGE(g_excep_level, l_full_path, FALSE);
4472                     END IF;
4473       fnd_msg_pub.add;
4474       RAISE E_CC_NOT_FOUND;
4475 
4476   END;
4477 
4478   OPEN c_account_lines(p_cc_header_id);
4479 
4480   LOOP
4481     FETCH c_account_lines INTO l_cc_acct_lines_rec;
4482 
4483     EXIT WHEN c_account_lines%NOTFOUND;
4484 
4485 -- ----------------------------------------------------------------------------------
4486 -- Obtain the actual account line record based upon the data that was just retrieved
4487 -- from the view.
4488 -- ----------------------------------------------------------------------------------
4489                 OPEN c_cc_acct_line;
4490                 FETCH c_cc_acct_line
4491                  INTO l_acct_line_rec;
4492 
4493                 IF (c_cc_acct_line%NOTFOUND) THEN
4494                    EXIT;
4495                 END IF;
4496 
4497                 CLOSE c_cc_acct_line;
4498 
4499                 l_acct_line_rec.cc_acct_encmbrnc_status := p_encumbrance_status_code;
4500                 l_acct_line_rec.last_update_date        := SYSDATE;
4501                 l_acct_line_rec.last_update_login       := l_update_login;
4502                 l_acct_line_rec.last_updated_by         := l_update_by;
4503 
4504                 SELECT rowid
4505                   INTO l_row_id
4506                   FROM igc_cc_acct_lines
4507                  WHERE cc_acct_line_id = l_acct_line_rec.cc_acct_line_id;
4508 
4509                 Account_Line_Wrapper (p_api_version       => l_api_version,
4510                                       p_init_msg_list     => FND_API.G_FALSE,
4511                                       p_commit            => FND_API.G_FALSE,
4512                                       p_validation_level  => l_validation_level,
4513                                       x_return_status     => l_return_status,
4514                                       x_msg_count         => l_msg_count,
4515                                       x_msg_data          => l_msg_data,
4516                                       x_rowid             => l_row_id,
4517                                       p_action_flag       => 'U',
4518                                       p_cc_acct_lines_rec => l_acct_line_rec,
4519                                       p_update_flag       => l_update_flag
4520                                      );
4521 
4522                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4523                    x_msg_data  := l_msg_data;
4524                    x_msg_count := l_msg_count;
4525                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4526                 END IF;
4527 
4528     OPEN c_payment_forecast(l_cc_acct_lines_rec.cc_acct_line_id);
4529 
4530     LOOP
4531       FETCH c_payment_forecast INTO l_cc_pmt_fcst_rec;
4532 
4533       EXIT WHEN c_payment_forecast%NOTFOUND;
4534 
4535 -- ----------------------------------------------------------------------------------
4536 -- Obtain the actual Det PF line record based upon the data that was just retrieved
4537 -- from the view.
4538 -- ----------------------------------------------------------------------------------
4539                         OPEN c_det_pf_line;
4540                         FETCH c_det_pf_line
4541                          INTO l_det_pf_rec;
4542 
4543                         IF (c_det_pf_line%NOTFOUND) THEN
4544                            EXIT;
4545                         END IF;
4546 
4547                         CLOSE c_det_pf_line;
4548 
4549                         l_det_pf_rec.cc_det_pf_encmbrnc_status := p_encumbrance_status_code;
4550                         l_det_pf_rec.last_update_date          := SYSDATE;
4551                         l_det_pf_rec.last_update_login         := l_update_login;
4552                         l_det_pf_rec.last_updated_by           := l_update_by;
4553 
4554                         SELECT rowid
4555                           INTO l_row_id
4556                           FROM igc_cc_det_pf
4557                          WHERE cc_det_pf_line_id = l_det_pf_rec.cc_det_pf_line_id;
4558 
4559                         Det_Pf_Wrapper (p_api_version      => l_api_version,
4560                                         p_init_msg_list    => FND_API.G_FALSE,
4561                                         p_commit           => FND_API.G_FALSE,
4562                                         p_validation_level => l_validation_level,
4563                                         x_return_status    => l_return_status,
4564                                         x_msg_count        => l_msg_count,
4565                                         x_msg_data         => l_msg_data,
4566                                         x_rowid            => l_row_id,
4567                                         p_action_flag      => 'U',
4568                                         p_cc_pmt_fcst_rec  => l_det_pf_rec,
4569                                         p_update_flag      => l_update_flag
4570                                        );
4571 
4572                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4573                            x_msg_data  := l_msg_data;
4574                            x_msg_count := l_msg_count;
4575                            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4576                         END IF;
4577 
4578     END LOOP;
4579 
4580     CLOSE c_payment_forecast;
4581                 IF (c_det_pf_line%ISOPEN) THEN
4582                    CLOSE c_det_pf_line;
4583                 END IF;
4584 
4585   END LOOP;
4586 
4587   CLOSE c_account_lines;
4588         IF (c_cc_acct_line%ISOPEN) THEN
4589            CLOSE c_cc_acct_line;
4590         END IF;
4591 
4592         l_cc_headers_rec.cc_encmbrnc_status := p_encumbrance_status_code;
4593         l_cc_headers_rec.last_update_date   := SYSDATE;
4594         l_cc_headers_rec.last_update_login  := l_update_login;
4595         l_cc_headers_rec.last_updated_by    := l_update_by;
4596 
4597         SELECT rowid
4598           INTO l_row_id
4599           FROM igc_cc_headers
4600          WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
4601 
4602         Header_Wrapper (p_api_version      => l_api_version,
4603                         p_init_msg_list    => FND_API.G_FALSE,
4604                         p_commit           => FND_API.G_FALSE,
4605                         p_validation_level => l_validation_level,
4606                         x_return_status    => l_return_status,
4607                         x_msg_count        => l_msg_count,
4608                         x_msg_data         => l_msg_data,
4609                         x_rowid            => l_row_id,
4610                         p_action_flag      => 'U',
4611                         p_cc_header_rec    => l_cc_headers_rec,
4612                         p_update_flag      => l_update_flag
4613                        );
4614 
4615         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4616            x_msg_data  := l_msg_data;
4617            x_msg_count := l_msg_count;
4618            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4619         END IF;
4620 
4621   IF FND_API.To_Boolean(p_commit)
4622   THEN
4623            COMMIT WORK;
4624   END IF;
4625 
4626         RETURN;
4627 
4628 EXCEPTION
4629 
4630   WHEN E_CC_NOT_FOUND OR E_INVALID_STATUS_CODE
4631   THEN
4632     ROLLBACK TO Set_Encumbrance_Status;
4633     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4634                 IF (c_payment_forecast%ISOPEN) THEN
4635                    CLOSE c_payment_forecast;
4636                 END IF;
4637                 IF (c_det_pf_line%ISOPEN) THEN
4638                    CLOSE c_det_pf_line;
4639                 END IF;
4640                 IF (c_account_lines%ISOPEN) THEN
4641                    CLOSE c_account_lines;
4642                 END IF;
4643                 IF (c_cc_acct_line%ISOPEN) THEN
4644                    CLOSE c_cc_acct_line;
4645                 END IF;
4646     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4647                                             p_data  => x_msg_data );
4648         IF (g_excep_level >=  g_debug_level ) THEN
4649            FND_LOG.STRING (g_excep_level,l_full_path,'E_CC_NOT_FOUND OR E_INVALID_STATUS_CODE  Exception Raised');
4650         END IF;
4651 
4652   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
4653   THEN
4654     ROLLBACK TO Set_Encumbrance_Status;
4655     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4656                 IF (c_payment_forecast%ISOPEN) THEN
4657                    CLOSE c_payment_forecast;
4658                 END IF;
4659                 IF (c_det_pf_line%ISOPEN) THEN
4660                    CLOSE c_det_pf_line;
4661                 END IF;
4662                 IF (c_account_lines%ISOPEN) THEN
4663                    CLOSE c_account_lines;
4664                 END IF;
4665                 IF (c_cc_acct_line%ISOPEN) THEN
4666                    CLOSE c_cc_acct_line;
4667                 END IF;
4668     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4669                                       p_data  => x_msg_data );
4670         IF (g_excep_level >=  g_debug_level ) THEN
4671            FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR  Exception Raised');
4672         END IF;
4673 
4674   WHEN OTHERS
4675   THEN
4676     ROLLBACK TO Set_Encumbrance_Status;
4677     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4678                 IF (c_payment_forecast%ISOPEN) THEN
4679                    CLOSE c_payment_forecast;
4680                 END IF;
4681                 IF (c_det_pf_line%ISOPEN) THEN
4682                    CLOSE c_det_pf_line;
4683                 END IF;
4684                 IF (c_account_lines%ISOPEN) THEN
4685                    CLOSE c_account_lines;
4686                 END IF;
4687                 IF (c_cc_acct_line%ISOPEN) THEN
4688                    CLOSE c_cc_acct_line;
4689                 END IF;
4690 
4691     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4692     THEN
4693       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
4694                                                   l_api_name);
4695     END IF;
4696 
4697     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4698                                             p_data  => x_msg_data );
4699                 IF ( g_unexp_level >= g_debug_level ) THEN
4700                    FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
4701                    FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
4702                    FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
4703                    FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
4704                 END IF;
4705 
4706 END Set_Encumbrance_Status;
4707 
4708 
4709 PROCEDURE   Validate_CC
4710 (
4711   p_api_version                 IN             NUMBER,
4712   p_init_msg_list               IN             VARCHAR2   := FND_API.G_FALSE,
4713   p_validation_level            IN             NUMBER     := FND_API.G_VALID_LEVEL_FULL,
4714   x_return_status               OUT NOCOPY     VARCHAR2,
4715   x_msg_count                   OUT NOCOPY     NUMBER,
4716   x_msg_data                    OUT NOCOPY     VARCHAR2,
4717   p_cc_header_id                IN             NUMBER,
4718   x_valid_cc                    OUT NOCOPY     VARCHAR2,
4719   p_mode              IN             VARCHAR2,
4720   p_field_from              IN             VARCHAR2,
4721   p_encumbrance_flag        IN             VARCHAR2,
4722   p_sob_id                      IN             NUMBER,
4723   p_org_id              IN             NUMBER,
4724   p_start_date              IN             DATE,
4725   p_end_date              IN             DATE,
4726   p_cc_type_code            IN             VARCHAR2,
4727   p_parent_cc_header_id       IN             NUMBER,
4728   p_cc_det_pf_date            IN             DATE,
4729   p_acct_date             IN             DATE,
4730   p_prev_acct_date            IN             DATE,
4731   p_cc_state              IN             VARCHAR2
4732 )
4733 IS
4734   l_api_name              CONSTANT VARCHAR2(30)     := 'Validate_CC';
4735   l_api_version           CONSTANT NUMBER           :=  1.0;
4736   l_cc_headers_rec        igc_cc_headers%ROWTYPE;
4737   l_cc_acct_lines_rec     igc_cc_acct_lines_v%ROWTYPE;
4738   l_cc_det_pf_lines_rec igc_cc_det_pf_v%ROWTYPE;
4739   l_cc_pmt_fcst_rec       igc_cc_det_pf_v%ROWTYPE;
4740   l_cc_acct_cnt         NUMBER := 0;
4741   l_total_pf_entered_amt  NUMBER := 0;
4742   l_cc_det_pf_cnt       NUMBER := 0;
4743   l_min_pf_date       DATE;
4744   l_max_pf_date       DATE;
4745   l_error_message         VARCHAR2(2000);
4746   e_cc_invalid_set_up     EXCEPTION;
4747   e_cc_not_found          EXCEPTION;
4748   e_no_det_pf           EXCEPTION;
4749   e_amt_mismatch          EXCEPTION;
4750 
4751   l_sbc_enable_flag   gl_sets_of_books.enable_budgetary_control_flag%TYPE := 'N';
4752   l_cbc_enable_flag igc_cc_bc_enable.cc_bc_enable_flag%TYPE     := 'N';
4753 --  l_cc_prov_encmbrnc_flag igc_cc_encmbrnc_ctrls.cc_prov_encmbrnc_enable_flag%TYPE := 'N';
4754 --  l_cc_conf_encmbrnc_flag igc_cc_encmbrnc_ctrls.cc_conf_encmbrnc_enable_flag%TYPE := 'N';
4755   l_cc_prov_encmbrnc_flag VARCHAR2(1);
4756   l_cc_conf_encmbrnc_flag VARCHAR2(1);
4757   l_orig_fiscal_year      gl_periods.period_year%TYPE;
4758   l_new_fiscal_year gl_periods.period_year%TYPE;
4759 
4760   l_COUNT     NUMBER;
4761   l_min_rel_start_date  DATE;
4762   l_cover_start_date  DATE;
4763 
4764   l_cover_end_date  DATE;
4765   l_max_rel_end_date  DATE;
4766 
4767         -- Bug 1830385, Bidisha S, 2 Jul 2001
4768         l_gl_application_id    fnd_application.application_id%TYPE := NULL;
4769 
4770 
4771   --  Contract Commitment account lines
4772 
4773 -- Bug 2885953 - cursor below amended for performance enhancements
4774 --    CURSOR c_account_lines(t_cc_header_id NUMBER) IS
4775 --    SELECT *
4776 --          FROM  igc_cc_acct_lines_v ccac
4777 --          WHERE ccac.cc_header_id = t_cc_header_id;
4778   CURSOR c_account_lines(t_cc_header_id NUMBER) IS
4779   SELECT ccac.ROWID,
4780                ccac.cc_header_id,
4781                NULL org_id,
4782                NULL cc_type,
4783                NULL cc_type_code,
4784                NULL cc_num,
4785                ccac.cc_acct_line_id,
4786                ccac.cc_acct_line_num,
4787                ccac.cc_acct_desc,
4788                ccac.parent_header_id,
4789                ccac.parent_acct_line_id,
4790                NULL parent_cc_acct_line_num,
4791                NULL cc_budget_acct_desc,
4792                ccac.cc_budget_code_combination_id,
4793                NULL cc_charge_acct_desc,
4794                ccac.cc_charge_code_combination_id,
4795                ccac.cc_acct_entered_amt,
4796                ccac.cc_acct_func_amt,
4797                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_billed_amt,
4798                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_func_billed_amt,
4799                ccac.cc_acct_encmbrnc_amt,
4800                (IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0)) - NVL(ccac.cc_acct_encmbrnc_amt,0)) cc_acct_unencmrd_amt,
4801                ccac.cc_acct_unbilled_amt,
4802                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0))
4803                cc_acct_comp_func_amt,
4804                NULL project_number,
4805                ccac.project_id,
4806                NULL task_number,
4807                ccac.task_id,
4808                ccac.expenditure_type,
4809                NULL expenditure_org_name,
4810                ccac.expenditure_org_id,
4811                ccac.expenditure_item_date,
4812                ccac.cc_acct_taxable_flag,
4813                NULL tax_name,
4814                ccac.tax_id,
4815                ccac.cc_acct_encmbrnc_status,
4816                ccac.cc_acct_encmbrnc_date,
4817                ccac.context,
4818                ccac.attribute1,
4819                ccac.attribute2,
4820                ccac.attribute3,
4821                ccac.attribute4,
4822                ccac.attribute5,
4823                ccac.attribute6,
4824                ccac.attribute7,
4825                ccac.attribute8,
4826                ccac.attribute9,
4827                ccac.attribute10,
4828                ccac.attribute11,
4829                ccac.attribute12,
4830                ccac.attribute13,
4831                ccac.attribute14,
4832                ccac.attribute15,
4833                ccac.created_by,
4834                ccac.creation_date,
4835                ccac.last_updated_by,
4836                ccac.last_update_date,
4837                ccac.last_update_login,
4838                ccac.cc_func_withheld_amt,
4839                ccac.cc_ent_withheld_amt,
4840                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_func_withheld_amt,0)) cc_comp_func_whld_amt,
4841                ccac.Tax_Classif_Code
4842         FROM  igc_cc_acct_lines ccac
4843         WHERE ccac.cc_header_id = t_cc_header_id;
4844 
4845   CURSOR c_det_pf_lines(t_cc_acct_line_id NUMBER) IS
4846         -- Performance Tuning, Replaced view
4847         -- igc_cc_det_pf_v with
4848         -- igc_cc_det_pf and replaced the line
4849         -- below.
4850   -- SELECT *
4851   -- FROM igc_cc_det_pf_v ccdpf
4852   -- WHERE ccdpf.cc_acct_line_id = t_cc_acct_line_id;
4853 
4854         SELECT ccdpf.ROWID,
4855                ccdpf.cc_det_pf_line_id,
4856                ccdpf.cc_det_pf_line_num,
4857                NULL  cc_acct_line_num,
4858                ccdpf.cc_acct_line_id,
4859                NULL  parent_det_pf_line_num,
4860                ccdpf.parent_det_pf_line_id,
4861                ccdpf.parent_acct_line_id,
4862                ccdpf.cc_det_pf_entered_amt,
4863                ccdpf.cc_det_pf_func_amt,
4864                ccdpf.cc_det_pf_date,
4865                IGC_CC_COMP_AMT_PKG.COMPUTE_PF_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_billed_amt,
4866                IGC_CC_COMP_AMT_PKG.COMPUTE_PF_FUNC_BILLED_AMT(ccdpf.cc_det_pf_line_id, ccdpf.cc_det_pf_line_num, ccdpf.cc_acct_line_id) cc_det_pf_func_billed_amt,
4867                ccdpf.cc_det_pf_unbilled_amt,
4868                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(p_cc_header_id,NVL(ccdpf.cc_det_pf_entered_amt,0)) cc_det_pf_comp_func_amt,
4869                ccdpf.cc_det_pf_encmbrnc_amt,
4870                ( IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT ( p_cc_header_id, NVL(ccdpf.cc_det_pf_entered_amt,0) ) -
4871                NVL(ccdpf.cc_det_pf_encmbrnc_amt,0) ) cc_det_pf_unencmbrd_amt ,
4872                ccdpf.cc_det_pf_encmbrnc_date,
4873                ccdpf.cc_det_pf_encmbrnc_status,
4874                ccdpf.context,
4875                ccdpf.attribute1,
4876                ccdpf.attribute2,
4877                ccdpf.attribute3,
4878                ccdpf.attribute4,
4879                ccdpf.attribute5,
4880                ccdpf.attribute6,
4881                ccdpf.attribute7,
4882                ccdpf.attribute8,
4883                ccdpf.attribute9,
4884                ccdpf.attribute10,
4885                ccdpf.attribute11,
4886                ccdpf.attribute12,
4887                ccdpf.attribute13,
4888                ccdpf.attribute14,
4889                ccdpf.attribute15,
4890                ccdpf.last_update_date,
4891                ccdpf.last_updated_by,
4892                ccdpf.last_update_login,
4893                ccdpf.creation_date,
4894                ccdpf.created_by
4895         FROM igc_cc_det_pf ccdpf
4896   WHERE ccdpf.cc_acct_line_id = t_cc_acct_line_id;
4897 
4898         -- Bug 1830385, Bidisha S, 2 Jul 2001
4899         CURSOR c_gl_app_id IS
4900         SELECT application_id
4901         FROM   fnd_application
4902         WHERE  application_short_name = 'SQLGL';
4903 
4904         l_full_path         VARCHAR2(255);
4905 
4906 
4907   BEGIN
4908 
4909     l_full_path := g_path || 'Validate_CC';
4910 
4911     IF FND_API.to_Boolean(p_init_msg_list) THEN
4912       FND_MSG_PUB.initialize;
4913     END IF;
4914 
4915     IF NOT FND_API.Compatible_API_Call(l_api_version,p_api_version, l_api_name, G_PKG_NAME) THEN
4916       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4917     END IF;
4918 
4919     x_return_status := FND_API.G_RET_STS_SUCCESS;
4920     x_valid_cc      := FND_API.G_TRUE;
4921 
4922                 -- Get the application id that will be used throughout the process.
4923                 -- Bug 1830385, Bidisha S, 2 Jul 2001
4924                 OPEN   c_gl_app_id;
4925                 FETCH  c_gl_app_id INTO l_gl_application_id;
4926                 CLOSE  c_gl_app_id;
4927 
4928   -- If encumbrance is enabled , the following validations helps in determining the  individual
4929   -- options like standard budgetary control , commitment budgetary control, provisional contract
4930   -- encumbrance set-up, confirmed contract encumbrance setups or enabled or not.
4931   -- If encumbrance is not enabled then the individual setups are defaulted to 'N'.
4932 
4933     IF p_encumbrance_flag = FND_API.G_TRUE THEN
4934 
4935       -- Standard Budgetary Control enabled or not
4936 
4937       BEGIN
4938       SELECT  NVL(enable_budgetary_control_flag,'N')
4939         INTO    l_sbc_enable_flag
4940         FROM    gl_sets_of_books
4941         WHERE   set_of_books_id = p_sob_id;
4942         EXCEPTION
4943                 WHEN NO_DATA_FOUND THEN
4944                                              x_valid_cc      := FND_API.G_FALSE;
4945                                              x_return_status := FND_API.G_RET_STS_ERROR;
4946                fnd_message.set_name('IGC', 'IGC_CC_INVALID_GL_DATA');
4947                                   IF(g_error_level >= g_debug_level) THEN
4948                                      FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4949                               END IF;
4950                            fnd_msg_pub.add;
4951                            RAISE E_CC_INVALID_SET_UP;
4952       END;
4953 
4954       --  Commitment Budgetary Control enabled or not
4955 
4956       IF ( NVL(l_sbc_enable_flag,'N') = 'Y')
4957       THEN
4958         BEGIN
4959           SELECT  cc_bc_enable_flag
4960           INTO     l_cbc_enable_flag
4961           FROM    igc_cc_bc_enable
4962           WHERE   set_of_books_id = p_sob_id;
4963           EXCEPTION
4964                   WHEN NO_DATA_FOUND THEN
4965                 l_cbc_enable_flag := 'N';
4966         END;
4967 
4968 
4969         -- Provisional Contract and Confirmed Contract can encumber or not.
4970 
4971                                 IF l_cbc_enable_flag = 'Y'
4972                                 THEN
4973 /*Bug No : 6341012. SLA Uptake. IGC_CC_ENCMBRNC_CTRLS_V no more exists*/
4974           l_cc_prov_encmbrnc_flag := 'Y';
4975           l_cc_conf_encmbrnc_flag := 'Y';
4976 
4977 /*            BEGIN
4978           SELECT cc_prov_encmbrnc_enable_flag,
4979                        cc_conf_encmbrnc_enable_flag
4980           INTO  l_cc_prov_encmbrnc_flag,
4981                         l_cc_conf_encmbrnc_flag
4982           FROM     igc_cc_encmbrnc_ctrls_v
4983           WHERE    org_id = p_org_id;
4984           EXCEPTION
4985                   WHEN NO_DATA_FOUND THEN
4986                   l_cc_prov_encmbrnc_flag := NULL;
4987                         l_cc_conf_encmbrnc_flag := NULL;
4988                                     END;
4989    */                           ELSE
4990             l_cc_prov_encmbrnc_flag := NULL;
4991                   l_cc_conf_encmbrnc_flag := NULL;
4992 
4993         END IF;
4994       END IF;  -- Commitment Budgetary Control enabled or not check ends here.
4995 
4996     END IF; -- Individual options setup based on encumbrance allowed or not check ends here.
4997 
4998         l_cc_prov_encmbrnc_flag := Nvl(l_cc_prov_encmbrnc_flag,'N');
4999         l_cc_conf_encmbrnc_flag := Nvl(l_cc_conf_encmbrnc_flag,'N');
5000 
5001   -- Date Validation begins here.
5002 
5003 
5004   IF p_mode = 'E'  AND p_field_from IS NOT NULL THEN          -- Entry Mode
5005 
5006          -- When Mode of call to the procedure is 'Entry' the following  validations should be performed.
5007 
5008   -- Start Date Validations begins here.
5009 
5010     IF ( p_start_date IS NOT NULL) AND p_field_from = 'START_DATE' THEN
5011 
5012       IF (p_end_date IS NOT NULL) THEN
5013                       IF p_end_date < p_start_date THEN
5014                                         x_valid_cc      := FND_API.G_FALSE;
5015                                         x_return_status := FND_API.G_RET_STS_ERROR;
5016                         fnd_message.set_name('IGC', 'IGC_CC_EFFECTIVE_START_DATE');
5017                   fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE (P_START_DATE),FALSE);
5018                             IF(g_state_level >= g_debug_level) THEN
5019                               FND_LOG.MESSAGE(g_state_level, l_full_path, FALSE);
5020                             END IF;
5021             fnd_msg_pub.add;
5022         END IF;
5023       END IF;
5024 
5025       -- Encumbrance turned on or not check begins here.
5026 
5027       IF (p_encumbrance_flag = FND_API.G_FALSE) THEN
5028 
5029       -- Encumbrance is turned OFF.
5030       -- If encumbrance is off
5031       -- then start date is validated only against
5032       -- commitment budget and not against standard budget.
5033 
5034         BEGIN
5035                           SELECT count(*)
5036                           INTO l_COUNT
5037                           FROM gl_sets_of_books sob, gl_periods gp, igc_cc_periods cp
5038               WHERE sob.set_of_books_id = p_sob_id
5039           AND   sob.period_set_name = gp.period_set_name
5040           AND   cp.org_id = p_org_id
5041           AND  gp.period_set_name = cp.period_set_name
5042           AND  cp.period_name = gp.period_name
5043               AND  cp.cc_period_status IN ('O','F')
5044           AND  (p_start_date BETWEEN gp.start_date AND gp.end_date);
5045           EXCEPTION
5046                                            WHEN OTHERS THEN
5047                  l_COUNT := 0;
5048         END;
5049 
5050                           IF (NVL(l_COUNT,0) = 0) THEN
5051                                      x_valid_cc      := FND_API.G_FALSE;
5052                                      x_return_status := FND_API.G_RET_STS_ERROR;
5053                  fnd_message.set_name('IGC', 'IGC_CC_EFF_CCPER_START_DATE');
5054                  fnd_message.set_token('STARTDATE', FND_DATE.DATE_TO_CHARDATE (P_START_DATE),FALSE);
5055                                      IF(g_state_level >= g_debug_level) THEN
5056                                         FND_LOG.MESSAGE(g_state_level, l_full_path, FALSE);
5057                                      END IF;
5058                      fnd_msg_pub.add;
5059           END IF;
5060 
5061       ELSIF p_encumbrance_flag = FND_API.G_TRUE  AND
5062                  ( l_sbc_enable_flag = 'Y' )  AND
5063               ( l_cbc_enable_flag IN ('Y','N') AND
5064                   (l_cc_prov_encmbrnc_flag IN ('Y','N') AND l_cc_conf_encmbrnc_flag = 'Y')
5065                     )
5066       THEN
5067 
5068       -- Encumbrance turned ON.
5069       -- Standard budgetary control is on
5070       -- Commitment budgetary control is on or off.
5071       -- Provisional contract can encumber or not.
5072       -- Confirmed contract must encumber.
5073 
5074         BEGIN
5075                           SELECT  count(*)
5076                           INTO  l_COUNT
5077                           FROM  gl_sets_of_books sob,
5078                                                 gl_period_statuses gl,
5079                                                 igc_cc_periods cp
5080               WHERE   sob.set_of_books_id = p_sob_id
5081           AND   gl.set_of_books_id = sob.set_of_books_id
5082                             AND     gl.application_id = 101
5083           AND     cp.org_id = p_org_id
5084           AND   cp.period_set_name = sob.period_set_name
5085           AND   cp.period_name = gl.period_name
5086             AND     cp.cc_period_status IN ('O','F')
5087           AND     gl.closing_status IN ('O','F')
5088             AND     (p_start_date BETWEEN gl.start_date AND gl.end_date);
5089                         EXCEPTION
5090                                WHEN OTHERS THEN
5091                  l_COUNT := 0;
5092                                      IF ( g_unexp_level >= g_debug_level ) THEN
5093                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5094                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5095                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5096                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5097                                      END IF;
5098         END;
5099 
5100                          IF (NVL(l_COUNT,0) = 0) THEN
5101                                         x_valid_cc      := FND_API.G_FALSE;
5102                                         x_return_status := FND_API.G_RET_STS_ERROR;
5103              fnd_message.set_name('IGC', 'IGC_CC_EFF_CCGLPER_START_DATE');
5104              fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE(p_start_date),FALSE);
5105                                IF(g_error_level >= g_debug_level) THEN
5106                                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5107                                END IF;
5108                  fnd_msg_pub.add;
5109                         END IF;
5110 
5111       END IF; -- Encumbrance turned on or not condition ends here.
5112 
5113 
5114         IF (p_cc_type_code = 'C') AND (p_cc_header_id IS NOT NULL)
5115       THEN
5116         l_min_rel_start_date := NULL;
5117         BEGIN
5118               SELECT MIN(cch.cc_start_date)
5119               INTO  l_min_rel_start_date
5120               FROM igc_cc_headers  cch
5121               WHERE cch.parent_header_id = p_cc_header_id;
5122           EXCEPTION
5123              WHEN NO_DATA_FOUND THEN
5124                  l_min_rel_start_date := NULL;
5125         END ;
5126 
5127         IF (p_start_date > NVL(l_min_rel_start_date,p_start_date) )
5128         THEN
5129                                 x_valid_cc      := FND_API.G_FALSE;
5130                                 x_return_status := FND_API.G_RET_STS_ERROR;
5131                 fnd_message.set_name('IGC', 'IGC_CC_EFF_COVER_START_DATE');
5132                     fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE(P_START_DATE),FALSE);
5133                                 IF(g_error_level >= g_debug_level) THEN
5134                                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5135                                 END IF;
5136                 fnd_msg_pub.add;
5137         END IF;
5138         END IF; -- Commitment Type is Cover
5139 
5140 
5141       IF (p_cc_type_code = 'R') THEN
5142         l_cover_start_date := NULL;
5143         BEGIN
5144               SELECT cch.cc_start_date
5145               INTO  l_cover_start_date
5146               FROM igc_cc_headers  cch
5147               WHERE cch.cc_header_id = p_parent_cc_header_id;
5148           EXCEPTION
5149              WHEN NO_DATA_FOUND THEN
5150                  l_cover_start_date := NULL;
5151         END ;
5152 
5153         IF (p_start_date <  NVL(l_cover_start_date,p_start_date) )
5154         THEN
5155                                 x_valid_cc      := FND_API.G_FALSE;
5156                                 x_return_status := FND_API.G_RET_STS_ERROR;
5157                 fnd_message.set_name('IGC', 'IGC_CC_EFF_REL_START_DATE');
5158                 fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE (P_START_DATE),FALSE);
5159                                 IF(g_error_level >= g_debug_level) THEN
5160                                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5161                                 END IF;
5162                 fnd_msg_pub.add;
5163         END IF;
5164         END IF;  -- Commitment Type is Release.
5165 
5166     ELSIF ( p_start_date IS  NULL) THEN
5167                     x_valid_cc      := FND_API.G_FALSE;
5168                     x_return_status := FND_API.G_RET_STS_ERROR;
5169       fnd_message.set_name('IGC', 'IGC_CC_NO_START_DATE');
5170                     IF(g_error_level >= g_debug_level) THEN
5171                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5172                     END IF;
5173       fnd_msg_pub.add;
5174 
5175     END IF; -- Start Date is Not Null. Start Date Validations ends here.
5176 
5177     -- End Date Validations begins here.
5178 
5179     IF (p_end_date IS NOT NULL)  AND p_field_from = 'END_DATE' THEN
5180 
5181                   IF p_end_date < p_start_date THEN
5182                             x_valid_cc      := FND_API.G_FALSE;
5183                             x_return_status := FND_API.G_RET_STS_ERROR;
5184                         fnd_message.set_name('IGC', 'IGC_CC_EFFECTIVE_END_DATE');
5185               fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE (P_START_DATE),FALSE);
5186                         fnd_message.set_token('ENDDATE',FND_DATE.DATE_TO_CHARDATE (P_END_DATE),FALSE);
5187                             IF(g_error_level >= g_debug_level) THEN
5188                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5189                             END IF;
5190                 fnd_msg_pub.add;
5191                   END IF;
5192 
5193       IF (p_cc_type_code = 'C') AND  (p_cc_header_id IS NOT NULL)
5194       THEN
5195         l_max_rel_end_date := NULL;
5196         BEGIN
5197               SELECT MAX(cch.cc_end_date)
5198               INTO  l_max_rel_end_date
5199               FROM igc_cc_headers  cch
5200               WHERE cch.parent_header_id = p_cc_header_id;
5201           EXCEPTION
5202              WHEN NO_DATA_FOUND THEN
5203                  l_max_rel_end_date := NULL;
5204         END ;
5205 
5206         IF (p_end_date < NVL(l_max_rel_end_date,p_end_date) )
5207         THEN
5208                                     x_valid_cc      := FND_API.G_FALSE;
5209                                     x_return_status := FND_API.G_RET_STS_ERROR;
5210                   fnd_message.set_name('IGC', 'IGC_CC_EFF_COVER_END_DATE');
5211                                     IF(g_error_level >= g_debug_level) THEN
5212                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5213                                     END IF;
5214                       fnd_msg_pub.add;
5215         END IF;
5216       END IF;  -- Commitment Type is Cover
5217 
5218       IF (p_cc_type_code = 'R') THEN
5219         l_cover_end_date := NULL;
5220         BEGIN
5221           SELECT cch.cc_end_date
5222             INTO  l_cover_end_date
5223               FROM igc_cc_headers  cch
5224               WHERE cch.cc_header_id = p_parent_cc_header_id;
5225           EXCEPTION
5226              WHEN NO_DATA_FOUND THEN
5227                  l_cover_end_date := NULL;
5228         END ;
5229 
5230         IF (p_end_date > NVL(l_cover_end_date,p_end_date) )
5231         THEN
5232                                     x_valid_cc      := FND_API.G_FALSE;
5233                                     x_return_status := FND_API.G_RET_STS_ERROR;
5234                   fnd_message.set_name('IGC', 'IGC_CC_EFF_REL_END_DATE');
5235                                     IF(g_error_level >= g_debug_level) THEN
5236                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5237                                     END IF;
5238                     fnd_msg_pub.add;
5239         END IF;
5240       END IF; -- Commitment Type is Release
5241 
5242                 END IF; -- End Date is NOT NULL. End Date Validations ends here.
5243 
5244 
5245     -- Payment Forecast Date Validations begins here.
5246     IF ( p_cc_det_pf_date IS NOT NULL) AND p_field_from = 'DET_PF_DATE'  THEN
5247 
5248       -- Basic Validations
5249 
5250       IF (p_cc_det_pf_date < p_start_date) THEN
5251                             x_valid_cc      := FND_API.G_FALSE;
5252                             x_return_status := FND_API.G_RET_STS_ERROR;
5253                         fnd_message.set_name('IGC', 'IGC_CC_DET_PF_START_DATE');
5254                 fnd_message.set_token('PFDATE',FND_DATE.DATE_TO_CHARDATE(p_cc_det_pf_date),FALSE);
5255                             IF(g_error_level >= g_debug_level) THEN
5256                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5257                             END IF;
5258             fnd_msg_pub.add;
5259                   END IF;
5260       IF ( (p_cc_det_pf_date > p_end_date) AND
5261                            (p_end_date IS NOT NULL)
5262                          ) THEN
5263                             x_valid_cc      := FND_API.G_FALSE;
5264                             x_return_status := FND_API.G_RET_STS_ERROR;
5265                         fnd_message.set_name('IGC', 'IGC_CC_DET_PF_END_DATE');
5266             fnd_message.set_token('PFDATE',FND_DATE.DATE_TO_CHARDATE(p_cc_det_pf_date),FALSE);
5267                             IF(g_error_level >= g_debug_level) THEN
5268                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5269                             END IF;
5270                     fnd_msg_pub.add;
5271       END IF;
5272 
5273       -- Budgetary Control  turned on.
5274 
5275       IF p_encumbrance_flag = FND_API.G_TRUE THEN
5276         BEGIN
5277                                         -- Performance Tuning, replaced
5278                                         -- view gl_period_statuses_v with
5279                                         -- gl_period_statuses
5280                     SELECT  count(*)
5281                         INTO  l_COUNT
5282           FROM  gl_sets_of_books sob,
5283                                     gl_period_statuses gl,
5284                                     igc_cc_periods cp
5285             WHERE   sob.set_of_books_id = p_sob_id
5286           AND   gl.set_of_books_id = sob.set_of_books_id
5287                             AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5288           AND     cp.org_id = p_org_id
5289           AND   cp.period_set_name = sob.period_set_name
5290           AND   cp.period_name = gl.period_name
5291             AND     cp.cc_period_status IN ('O','F')
5292           AND     gl.closing_status IN ('O','F')
5293                         AND     (p_cc_det_pf_date BETWEEN gl.start_date AND gl.end_date);
5294                       EXCEPTION
5295                        WHEN OTHERS THEN
5296             l_COUNT := 0;
5297                                 IF ( g_unexp_level >= g_debug_level ) THEN
5298                                     FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5299                                     FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5300                                     FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5301                                     FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5302                                 END IF;
5303         END;
5304         IF NVL(l_COUNT,0) = 0  THEN
5305                                 x_valid_cc      := FND_API.G_FALSE;
5306                                 x_return_status := FND_API.G_RET_STS_ERROR;
5307               fnd_message.set_name('IGC', 'IGC_CC_DET_PF_DATE');
5308                                 IF(g_error_level >= g_debug_level) THEN
5309                                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5310                                 END IF;
5311                       fnd_msg_pub.add;
5312         END IF;
5313       END IF; -- Budgetary Control turned on.
5314     END IF; -- Payment Forecast Date is NOT NULL. Payment Forecast Date Validations ends here.
5315 
5316     -- Encumbrance Accounting Date Validations begins here.
5317 
5318     IF  p_field_from = 'ENCUMBRANCE' THEN
5319                         IF NVL(l_cbc_enable_flag,'N') = 'Y' THEN
5320 
5321                          -- Bug # 1678518.
5322 
5323                              IF  (p_cc_state = 'PR'  OR p_cc_state = 'CM') THEN
5324         IF ( ( p_acct_date < NVL(p_start_date,p_acct_date) )  OR
5325                    ( p_acct_date > NVL(p_end_date,p_acct_date)   )
5326                            )
5327                  OR ( p_acct_date IS NULL)
5328                  OR (p_acct_date < p_prev_acct_date AND
5329                p_prev_acct_date IS NOT NULL)
5330         THEN
5331                                     x_valid_cc      := FND_API.G_FALSE;
5332                                     x_return_status := FND_API.G_RET_STS_ERROR;
5333                   fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE');
5334                   fnd_message.set_token('ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_ACCT_DATE),FALSE);
5335                   fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE(P_START_DATE),FALSE);
5336                               fnd_message.set_token('ENDDATE',FND_DATE.DATE_TO_CHARDATE(P_END_DATE),FALSE);
5337                                     IF(g_error_level >= g_debug_level) THEN
5338                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5339                                     END IF;
5340                       fnd_msg_pub.add;
5341         END IF;
5342 
5343                          -- Bug # 1678518.
5344 
5345            ELSIF (p_cc_state = 'CL'  OR p_cc_state = 'CT') THEN
5346         IF ( p_acct_date IS NULL)
5347                  OR ( (p_acct_date  NOT BETWEEN p_prev_acct_date AND SYSDATE) AND
5348                  p_prev_acct_date IS NOT NULL AND
5349                                    p_prev_acct_date < SYSDATE)
5350         THEN
5351                                         x_valid_cc      := FND_API.G_FALSE;
5352                                         x_return_status := FND_API.G_RET_STS_ERROR;
5353                       fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_CL_CT');
5354                       fnd_message.set_token('ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_ACCT_DATE),FALSE);
5355                       fnd_message.set_token('PREV_ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_PREV_ACCT_DATE),FALSE);
5356                                         IF(g_error_level >= g_debug_level) THEN
5357                                            FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5358                                         END IF;
5359                           fnd_msg_pub.add;
5360               END IF;
5361             END IF;
5362       END IF;
5363 
5364       -- Encumbrance turned ON.
5365 
5366       IF p_encumbrance_flag = FND_API.G_TRUE  AND
5367            (l_sbc_enable_flag = 'Y' )  AND
5368              ( l_cbc_enable_flag IN ('Y','N') AND
5369                       (l_cc_prov_encmbrnc_flag IN ('Y','N') AND (l_cc_conf_encmbrnc_flag = 'Y'))
5370          )
5371           THEN
5372 
5373         -- Encumbrance turned ON.
5374         -- Standard budgetary control is on
5375         -- Commitment budgetary control is on or off.
5376         -- Provisional contract can encumber or not.
5377         -- Confirmed contract must encumber.
5378         IF (p_cc_state = 'PR'  OR p_cc_state = 'CL') AND
5379                  (l_cc_prov_encmbrnc_flag ='Y' AND l_cc_conf_encmbrnc_flag = 'Y')
5380         THEN
5381           BEGIN
5382                                                 -- Performance Tuning, replaced
5383                                                 -- view gl_period_statuses_v with
5384                                                 -- gl_period_statuses
5385                               SELECT  count(*)
5386                             INTO  l_COUNT
5387                 FROM  gl_sets_of_books sob,
5388                         gl_period_statuses gl,
5389                         igc_cc_periods cp
5390                 WHERE   sob.set_of_books_id = p_sob_id
5391             AND   gl.set_of_books_id = sob.set_of_books_id
5392                                 AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5393             AND     cp.org_id = p_org_id
5394             AND   cp.period_set_name = sob.period_set_name
5395             AND   cp.period_name = gl.period_name
5396               AND     cp.cc_period_status IN ('O','F')
5397             AND     gl.closing_status IN ('O','F')
5398                           AND     (p_acct_date BETWEEN gl.start_date AND gl.end_date);
5399                           EXCEPTION
5400                              WHEN OTHERS THEN
5401                l_COUNT := 0;
5402                                      IF ( g_unexp_level >= g_debug_level ) THEN
5403                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5404                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5405                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5406                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5407                                      END IF;
5408 
5409                       END;
5410           IF NVL(l_COUNT,0) = 0  THEN
5411                                 x_valid_cc      := FND_API.G_FALSE;
5412                                 x_return_status := FND_API.G_RET_STS_ERROR;
5413             fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_OF');
5414                                 IF(g_error_level >= g_debug_level) THEN
5415                                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5416                                 END IF;
5417                       fnd_msg_pub.add;
5418           END IF;
5419 
5420           -- Bug # 1619201.
5421           -- If Previously been encumbered.
5422           -- Fiscal Year Mismatch Valdn begins here.
5423           IF p_prev_acct_date IS NOT NULL
5424           THEN
5425             -- Original Fiscal Year
5426             BEGIN
5427                                                         -- Performance Tuning, Replaced
5428                                                         -- the following query with the
5429                                                         -- one below as we are only
5430                                                         -- interested in the fiscal years.
5431               -- SELECT   DISTINCT cp.period_year
5432               -- INTO   l_orig_fiscal_year
5433               -- FROM   gl_sets_of_books sob,
5434               --  gl_period_statuses_v gl,
5435               --  igc_cc_periods_v cp
5436               -- WHERE  sob.set_of_books_id = p_sob_id
5437               -- AND     gl.set_of_books_id = sob.set_of_books_id
5438                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5439               -- AND     cp.org_id = p_org_id
5440               -- AND     cp.period_set_name= sob.period_set_name
5441               -- AND     cp.period_name = gl.period_name
5442               -- AND  (p_prev_acct_date BETWEEN cp.start_date AND cp.end_date
5443                     --  );
5444                                                         SELECT  distinct gl.period_year
5445                                   INTO    l_orig_fiscal_year
5446                                                         FROM  gl_sets_of_books sob,
5447                                                                 gl_periods gl
5448                                                         WHERE   sob.set_of_books_id = p_sob_id
5449                                                         AND     gl.period_set_name= sob.period_set_name
5450                                                         AND     gl.period_type = sob.accounted_period_type
5451                                                         AND    (p_prev_acct_date between gl.start_date and gl.end_date);
5452             END;
5453             -- New Fiscal Year if any.
5454             BEGIN
5455                                                         -- Performance Tuning, Replaced
5456                                                         -- the following query with the
5457                                                         -- one below as we are only
5458                                                         -- interested in the fiscal years.
5459               -- SELECT   DISTINCT cp.period_year
5460               -- INTO   l_new_fiscal_year
5461               -- FROM   gl_sets_of_books sob,
5462               --  gl_period_statuses_v gl,
5463               --  igc_cc_periods_v cp
5464               -- WHERE  sob.set_of_books_id = p_sob_id
5465               -- AND     gl.set_of_books_id = sob.set_of_books_id
5466                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5467               -- AND     cp.org_id = p_org_id
5468               -- AND     cp.period_set_name= sob.period_set_name
5469               -- AND     cp.period_name = gl.period_name
5470               -- AND  (p_acct_date BETWEEN cp.start_date AND cp.end_date
5471               --         );
5472                                                         SELECT  distinct gl.period_year
5473                                   INTO    l_new_fiscal_year
5474                                                         FROM  gl_sets_of_books sob,
5475                                                                 gl_periods gl
5476                                                         WHERE   sob.set_of_books_id = p_sob_id
5477                                                         AND     gl.period_set_name= sob.period_set_name
5478                                                         AND     gl.period_type = sob.accounted_period_type
5479                                                         AND    (p_acct_date between gl.start_date and gl.end_date);
5480             END;
5481             IF l_orig_fiscal_year <> l_new_fiscal_year
5482             THEN
5483                                     x_valid_cc      := FND_API.G_FALSE;
5484                                     x_return_status := FND_API.G_RET_STS_ERROR;
5485               fnd_message.set_name('IGC', 'IGC_CC_ACCT_FISCAL_YRS_NE');
5486               fnd_message.set_TOKEN('PREVACTDATE',FND_DATE.DATE_TO_CHARDATE (p_prev_acct_date),FALSE);
5487                                     IF(g_error_level >= g_debug_level) THEN
5488                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5489                                     END IF;
5490               fnd_msg_pub.add;
5491             END IF; -- Fiscal Year Mismatch valdn ends here.
5492           END IF; -- If Previously been encumbered. Bug # 1619201.
5493 
5494         ELSIF (p_cc_state = 'CM' OR p_cc_state = 'CT')
5495         THEN
5496           BEGIN
5497                                                 -- Performance Tuning, replaced
5498                                                 -- view gl_period_statuses_v with
5499                                                 -- gl_period_statuses
5500                             SELECT  count(*)
5501                           INTO  l_COUNT
5502             FROM  gl_sets_of_books sob,
5503                         gl_period_statuses gl,
5504                         igc_cc_periods cp
5505               WHERE   sob.set_of_books_id = p_sob_id
5506             AND   gl.set_of_books_id = sob.set_of_books_id
5507                                 AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5508             AND     cp.org_id = p_org_id
5509             AND   cp.period_set_name = sob.period_set_name
5510             AND   cp.period_name = gl.period_name
5511               AND     cp.cc_period_status = 'O'
5512             AND     gl.closing_status = 'O'
5513                           AND     (p_acct_date BETWEEN gl.start_date AND gl.end_date);
5514                           EXCEPTION
5515                              WHEN OTHERS THEN
5516                  l_COUNT := 0;
5517                                      IF ( g_unexp_level >= g_debug_level ) THEN
5518                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5519                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5520                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5521                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5522                                      END IF;
5523                       END;
5524           IF NVL(l_COUNT,0) = 0  THEN
5525                                     x_valid_cc      := FND_API.G_FALSE;
5526                                     x_return_status := FND_API.G_RET_STS_ERROR;
5527                 fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_O');
5528                                     IF(g_error_level >= g_debug_level) THEN
5529                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5530                                     END IF;
5531                         fnd_msg_pub.add;
5532           END IF;
5533         END IF;
5534       END IF; -- Encumbrance turned on.
5535     END IF;  -- Encumbrance Account Date Validations ends here.
5536 
5537     -- Approval Accounting Date Validations begins here.
5538 
5539     IF p_field_from = 'APPROVAL' THEN
5540       IF NVL(l_cbc_enable_flag,'N') = 'Y' THEN
5541 
5542                          -- Bug # 1678518.
5543 
5544            IF (p_cc_state = 'PR'  OR p_cc_state = 'CM') THEN
5545         IF ( ( p_acct_date < NVL(p_start_date,p_acct_date) ) OR
5546                    ( p_acct_date > NVL(p_end_date,p_acct_date) )
5547                  )
5548                OR ( p_acct_date IS NULL)
5549                OR (p_acct_date < p_prev_acct_date AND
5550                p_prev_acct_date IS NOT NULL)
5551         THEN
5552                                 x_valid_cc      := FND_API.G_FALSE;
5553                                 x_return_status := FND_API.G_RET_STS_ERROR;
5554               fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE');
5555               fnd_message.set_token('ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_ACCT_DATE),FALSE);
5556               fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE(P_START_DATE),FALSE);
5557               fnd_message.set_token('ENDDATE',FND_DATE.DATE_TO_CHARDATE(P_END_DATE),FALSE);
5558                                 IF(g_error_level >= g_debug_level) THEN
5559                                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5560                                 END IF;
5561               fnd_msg_pub.add;
5562                       END IF;
5563 
5564                          -- Bug # 1678518.
5565 
5566            ELSIF (p_cc_state = 'CL'  OR p_cc_state = 'CT') THEN
5567         IF ( p_acct_date IS NULL)
5568                  OR ( (p_acct_date  NOT BETWEEN p_prev_acct_date AND SYSDATE) AND
5569                  p_prev_acct_date IS NOT NULL AND
5570                                          p_prev_acct_date < SYSDATE)
5571         THEN
5572                                  x_valid_cc      := FND_API.G_FALSE;
5573                                  x_return_status := FND_API.G_RET_STS_ERROR;
5574                fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_CL_CT');
5575                fnd_message.set_token('ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_ACCT_DATE),FALSE);
5576                fnd_message.set_token('PREV_ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_PREV_ACCT_DATE),FALSE);
5577                                  IF(g_error_level >= g_debug_level) THEN
5578                                     FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5579                                  END IF;
5580                      fnd_msg_pub.add;
5581               END IF;
5582             END IF;
5583       END IF;
5584 
5585       -- Encumbrance turned ON.
5586 
5587       IF p_encumbrance_flag = FND_API.G_TRUE  AND
5588                 (l_sbc_enable_flag = 'Y' )  AND
5589                 ( l_cbc_enable_flag IN ('Y','N') AND
5590                (l_cc_prov_encmbrnc_flag IN ('Y','N') AND (l_cc_conf_encmbrnc_flag = 'Y'))
5591         )
5592             THEN
5593 
5594         -- Encumbrance turned ON.
5595         -- Standard budgetary control is on
5596         -- Commitment budgetary control is on or off.
5597         -- Provisional contract can encumber or not.
5598         -- Confirmed contract must encumber.
5599         IF (p_cc_state = 'PR'  OR p_cc_state = 'CL') AND
5600                  (l_cc_prov_encmbrnc_flag ='Y' AND l_cc_conf_encmbrnc_flag = 'Y')
5601         THEN
5602           BEGIN
5603                                                 -- Performance Tuning, replaced
5604                                                 -- view gl_period_statuses_v with
5605                                                 -- gl_period_statuses
5606                             SELECT  count(*)
5607                           INTO  l_COUNT
5608             FROM  gl_sets_of_books sob,
5609                         gl_period_statuses gl,
5610                         igc_cc_periods cp
5611               WHERE   sob.set_of_books_id = p_sob_id
5612             AND   gl.set_of_books_id = sob.set_of_books_id
5613                                 AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5614             AND      cp.org_id = p_org_id
5615             AND   cp.period_set_name = sob.period_set_name
5616             AND   cp.period_name = gl.period_name
5617               AND      cp.cc_period_status IN ('O','F')
5618             AND      gl.closing_status IN ('O','F')
5619                           AND      (p_acct_date BETWEEN gl.start_date AND gl.end_date);
5620                           EXCEPTION
5621                              WHEN OTHERS THEN
5622                  l_COUNT := 0;
5623                                      IF ( g_unexp_level >= g_debug_level ) THEN
5624                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5625                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5626                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5627                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5628                                      END IF;
5629                       END;
5630           IF NVL(l_COUNT,0) = 0  THEN
5631                                     x_valid_cc      := FND_API.G_FALSE;
5632                                     x_return_status := FND_API.G_RET_STS_ERROR;
5633                 fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_OF');
5634                                     IF(g_error_level >= g_debug_level) THEN
5635                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5636                                     END IF;
5637                         fnd_msg_pub.add;
5638           END IF;
5639 
5640           -- Bug # 1619201.
5641           -- If Previously been encumbered.
5642           -- Fiscal Year Mismatch Valdn begins here.
5643           IF p_prev_acct_date IS NOT NULL
5644           THEN
5645             -- Original Fiscal Year
5646             BEGIN
5647                                                         -- Performance Tuning, Replaced
5648                                                         -- the following query with the
5649                                                         -- one below as we are only
5650                                                         -- interested in the fiscal years.
5651               -- SELECT   DISTINCT cp.period_year
5652               -- INTO   l_orig_fiscal_year
5653               -- FROM   gl_sets_of_books sob,
5654               --  gl_period_statuses_v gl,
5655               --  igc_cc_periods_v cp
5656               -- WHERE  sob.set_of_books_id = p_sob_id
5657               -- AND     gl.set_of_books_id = sob.set_of_books_id
5658                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5659               -- AND     cp.org_id = p_org_id
5660               -- AND     cp.period_set_name= sob.period_set_name
5661               -- AND     cp.period_name = gl.period_name
5662               -- AND  (p_prev_acct_date BETWEEN cp.start_date AND cp.end_date
5663                     --  );
5664                                     SELECT  distinct gl.period_year
5665               INTO    l_orig_fiscal_year
5666                                     FROM  gl_sets_of_books sob,
5667                                             gl_periods gl
5668                                     WHERE   sob.set_of_books_id = p_sob_id
5669                                     AND     gl.period_set_name= sob.period_set_name
5670                                     AND     gl.period_type = sob.accounted_period_type
5671                                     AND     (p_prev_acct_date between gl.start_date and gl.end_date);
5672             END;
5673             -- New Fiscal Year if any.
5674             BEGIN
5675                                                         -- Performance Tuning, Replaced
5676                                                         -- the following query with the
5677                                                         -- one below as we are only
5678                                                         -- interested in the fiscal years.
5679               -- SELECT   DISTINCT cp.period_year
5680               -- INTO   l_new_fiscal_year
5681               -- FROM   gl_sets_of_books sob,
5682               --  gl_period_statuses_v gl,
5683               --  igc_cc_periods_v cp
5684               -- WHERE  sob.set_of_books_id = p_sob_id
5685               -- AND     gl.set_of_books_id = sob.set_of_books_id
5686                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5687               -- AND     cp.org_id = p_org_id
5688               -- AND     cp.period_set_name= sob.period_set_name
5689               -- AND     cp.period_name = gl.period_name
5690               -- AND  (p_acct_date BETWEEN cp.start_date AND cp.end_date
5691               --         );
5692                                     SELECT  distinct gl.period_year
5693               INTO    l_new_fiscal_year
5694                                     FROM  gl_sets_of_books sob,
5695                                             gl_periods gl
5696                                     WHERE   sob.set_of_books_id = p_sob_id
5697                                     AND     gl.period_set_name= sob.period_set_name
5698                                     AND     gl.period_type = sob.accounted_period_type
5699                                     AND    (p_acct_date between gl.start_date and gl.end_date);
5700             END;
5701             IF l_orig_fiscal_year <> l_new_fiscal_year
5702             THEN
5703                                     x_valid_cc      := FND_API.G_FALSE;
5704                                     x_return_status := FND_API.G_RET_STS_ERROR;
5705               fnd_message.set_name('IGC', 'IGC_CC_ACCT_FISCAL_YRS_NE');
5706               fnd_message.set_TOKEN('PREVACTDATE',FND_DATE.DATE_TO_CHARDATE (p_prev_acct_date),FALSE);
5707                                     IF(g_error_level >= g_debug_level) THEN
5708                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5709                                     END IF;
5710               fnd_msg_pub.add;
5711             END IF; -- Fiscal Year Mismatch valdn ends here.
5712           END IF; -- If Previously been encumbered. Bug # 1619201.
5713 
5714         ELSIF (p_cc_state = 'CM' OR p_cc_state = 'CT')
5715         THEN
5716           BEGIN
5717                                                 -- Performance Tuning, replaced
5718                                                 -- view gl_period_statuses_v with
5719                                                 -- gl_period_statuses
5720                             SELECT  count(*)
5721                           INTO  l_COUNT
5722             FROM  gl_sets_of_books sob,
5723                       gl_period_statuses gl,
5724                             igc_cc_periods cp
5725               WHERE   sob.set_of_books_id = p_sob_id
5726             AND   gl.set_of_books_id = sob.set_of_books_id
5727                                 AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5728             AND     cp.org_id = p_org_id
5729             AND   cp.period_set_name = sob.period_set_name
5730             AND   cp.period_name = gl.period_name
5731               AND      cp.cc_period_status = 'O'
5732             AND      gl.closing_status = 'O'
5733                           AND      (p_acct_date BETWEEN gl.start_date AND gl.end_date);
5734                           EXCEPTION
5735                              WHEN OTHERS THEN
5736                l_COUNT := 0;
5737                                      IF ( g_unexp_level >= g_debug_level ) THEN
5738                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5739                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5740                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5741                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5742                                      END IF;
5743                       END;
5744           IF NVL(l_COUNT,0) = 0  THEN
5745                                     x_valid_cc      := FND_API.G_FALSE;
5746                                     x_return_status := FND_API.G_RET_STS_ERROR;
5747                 fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_O');
5748                                     IF(g_error_level >= g_debug_level) THEN
5749                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5750                                     END IF;
5751                         fnd_msg_pub.add;
5752           END IF;
5753         END IF;
5754       END IF; -- Encumbrance turned on.
5755     END IF;  -- Approval Accounting Date Validations ends here.
5756 
5757   ELSIF p_mode = 'T'  THEN
5758 
5759   -- When Mode of call to the procedure is 'T' stands for 'Transition' the following validations should be
5760   -- performed.
5761     BEGIN
5762       SELECT *
5763       INTO l_cc_headers_rec
5764       FROM igc_cc_headers
5765       WHERE cc_header_id = p_cc_header_id;
5766       EXCEPTION
5767                        WHEN no_data_found THEN
5768                                 x_valid_cc      := FND_API.G_FALSE;
5769                                 x_return_status := FND_API.G_RET_STS_ERROR;
5770                 fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
5771                 fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
5772                                 IF(g_error_level >= g_debug_level) THEN
5773                                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5774                                 END IF;
5775                 l_error_message := fnd_message.get;
5776                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name, l_error_message);
5777                 RAISE E_CC_NOT_FOUND;
5778 
5779     END;
5780 
5781 
5782     -- Check only for Contract that are transition to confirmed and
5783           -- has an approval status of incomplete and
5784                 -- has an encumbrance status as 'T'.
5785 
5786     IF ((l_cc_headers_rec.cc_state = 'CM') AND
5787                    (l_cc_headers_rec.cc_apprvl_status = 'IN') AND
5788                    (l_cc_headers_rec.cc_encmbrnc_status = 'T')) OR
5789                 -- Bug 2656232, following 2 lines added.
5790                    (l_cc_headers_rec.cc_state = 'PR' AND
5791                     l_cc_headers_rec.cc_apprvl_status = 'IN')
5792                 THEN
5793 
5794         l_cc_acct_cnt   := 0;
5795 
5796         OPEN c_account_lines(p_cc_header_id);
5797         LOOP
5798       l_total_pf_entered_amt := 0;
5799 
5800       FETCH c_account_lines INTO l_cc_acct_lines_rec;
5801 
5802       EXIT WHEN c_account_lines%NOTFOUND;
5803       l_cc_acct_cnt   := l_cc_acct_cnt + 1;
5804 
5805       l_cc_det_pf_cnt   := 0;
5806 
5807       BEGIN
5808                                 -- Performance Tuning, Replaced view
5809                                 -- igc_cc_det_pf_v with
5810                                 -- igc_cc_det_pf
5811         SELECT count(*)
5812         INTO l_cc_det_pf_cnt
5813         FROM igc_cc_det_pf
5814         WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
5815         EXCEPTION
5816            WHEN NO_DATA_FOUND THEN
5817                l_cc_det_pf_cnt := 0;
5818       END;
5819       IF (NVL(l_cc_det_pf_cnt ,0) = 0)
5820                         AND l_cc_acct_lines_rec.cc_ent_withheld_amt <> l_cc_acct_lines_rec.cc_acct_entered_amt
5821                         -- And clause added for 2043221, Bidisha S , 12 Oct 2001
5822                         -- Perform this validation only if the withheld amount is not equal to
5823                         -- the amount in the account line
5824                         THEN
5825                              x_valid_cc      := FND_API.G_FALSE;
5826                              x_return_status := FND_API.G_RET_STS_ERROR;
5827              fnd_message.set_name('IGC', 'IGC_CC_NO_PF');
5828              fnd_message.set_token('ACCT_NUM', to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
5829                              IF(g_error_level >= g_debug_level) THEN
5830                                 FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5831                              END IF;
5832              fnd_msg_pub.add;
5833       ELSIF (NVL(l_cc_det_pf_cnt,0) > 0) THEN
5834 
5835         OPEN c_det_pf_lines(l_cc_acct_lines_rec.cc_acct_line_id);
5836         LOOP
5837 
5838           FETCH c_det_pf_lines INTO l_cc_det_pf_lines_rec;
5839 
5840           EXIT WHEN c_det_pf_lines%NOTFOUND;
5841           l_cc_det_pf_cnt   := l_cc_det_pf_cnt + 1;
5842 
5843           -- PF Date vs Accounting Date Validation.
5844 
5845           IF (l_cc_det_pf_lines_rec.cc_det_pf_date < p_acct_date) THEN
5846                                 x_valid_cc      := FND_API.G_FALSE;
5847                                 x_return_status := FND_API.G_RET_STS_ERROR;
5848                         fnd_message.set_name('IGC', 'IGC_CC_DET_PF_ACCT_DATE');
5849                 fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
5850                 fnd_message.set_TOKEN('ACCTDATE',FND_DATE.DATE_TO_CHARDATE (p_acct_date),FALSE);
5851                                 IF(g_error_level >= g_debug_level) THEN
5852                                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5853                                 END IF;
5854             fnd_msg_pub.add;
5855           END IF;
5856 
5857 
5858         END LOOP; -- Payment Forecast Loop end here.
5859 
5860         CLOSE c_det_pf_lines;
5861 
5862       END IF;
5863 
5864        END LOOP;
5865 
5866        CLOSE c_account_lines;
5867 
5868        IF (l_cc_acct_cnt = 0)  THEN
5869                         x_valid_cc      := FND_API.G_FALSE;
5870                         x_return_status := FND_API.G_RET_STS_ERROR;
5871       fnd_message.set_name('IGC', 'IGC_CC_NO_ACCT_LINES');
5872       fnd_message.set_token('CC_NUM', l_cc_headers_rec.cc_num,TRUE);
5873                     IF(g_error_level >= g_debug_level) THEN
5874                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5875                     END IF;
5876       fnd_msg_pub.add;
5877         END IF;
5878     END IF;
5879 
5880 
5881   ELSIF p_mode = 'V'  THEN
5882 
5883   -- When Mode of call to the procedure is 'V' stands for 'Validate' the following validations should be
5884   -- performed.
5885     BEGIN
5886       SELECT *
5887       INTO l_cc_headers_rec
5888       FROM igc_cc_headers
5889       WHERE cc_header_id = p_cc_header_id;
5890       EXCEPTION
5891                        WHEN no_data_found THEN
5892                                      x_valid_cc      := FND_API.G_FALSE;
5893                                      x_return_status := FND_API.G_RET_STS_ERROR;
5894                      fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
5895                      fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
5896                                      IF(g_error_level >= g_debug_level) THEN
5897                                          FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5898                                      END IF;
5899                      l_error_message := fnd_message.get;
5900                      FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name, l_error_message);
5901                      RAISE E_CC_NOT_FOUND;
5902 
5903     END;
5904 
5905 
5906     -- Check only for provisional and confirmed states
5907 
5908     IF (l_cc_headers_rec.cc_state = 'PR') OR (l_cc_headers_rec.cc_state = 'CM')  THEN
5909 
5910         l_cc_acct_cnt   := 0;
5911 
5912         OPEN c_account_lines(p_cc_header_id);
5913         LOOP
5914       l_total_pf_entered_amt := 0;
5915 
5916       FETCH c_account_lines INTO l_cc_acct_lines_rec;
5917 
5918       EXIT WHEN c_account_lines%NOTFOUND;
5919       l_cc_acct_cnt   := l_cc_acct_cnt + 1;
5920 
5921       l_cc_det_pf_cnt   := 0;
5922 
5923       BEGIN
5924                                 -- Performance Tuning, Replaced view
5925                                 -- igc_cc_det_pf_v with
5926                                 -- igc_cc_det_pf and replaced the line
5927                                 -- below.
5928         SELECT count(*)
5929         INTO l_cc_det_pf_cnt
5930         FROM igc_cc_det_pf
5931         WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
5932         EXCEPTION
5933            WHEN NO_DATA_FOUND THEN
5934                l_cc_det_pf_cnt := 0;
5935       END;
5936       IF (NVL(l_cc_det_pf_cnt ,0) = 0)
5937                         AND l_cc_acct_lines_rec.cc_ent_withheld_amt <> l_cc_acct_lines_rec.cc_acct_entered_amt
5938                         -- And clause added for 2043221, Bidisha S , 12 Oct 2001
5939                         -- Perfom this validation only if the withheld amount is not equal to
5940                         -- the amount in the account line
5941                         THEN
5942                               x_valid_cc      := FND_API.G_FALSE;
5943                               x_return_status := FND_API.G_RET_STS_ERROR;
5944               fnd_message.set_name('IGC', 'IGC_CC_NO_PF');
5945               fnd_message.set_token('ACCT_NUM', to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
5946                               IF(g_error_level >= g_debug_level) THEN
5947                                  FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5948                               END IF;
5949               fnd_msg_pub.add;
5950       ELSIF (NVL(l_cc_det_pf_cnt,0) > 0) THEN
5951 
5952         OPEN c_det_pf_lines(l_cc_acct_lines_rec.cc_acct_line_id);
5953         LOOP
5954 
5955           FETCH c_det_pf_lines INTO l_cc_det_pf_lines_rec;
5956 
5957           EXIT WHEN c_det_pf_lines%NOTFOUND;
5958           l_cc_det_pf_cnt   := l_cc_det_pf_cnt + 1;
5959 
5960           -- PF Date vs Start Date Validation.
5961 
5962           IF (l_cc_det_pf_lines_rec.cc_det_pf_date < p_start_date) THEN
5963                                 x_valid_cc      := FND_API.G_FALSE;
5964                                 x_return_status := FND_API.G_RET_STS_ERROR;
5965                         fnd_message.set_name('IGC', 'IGC_CC_DET_PF_START_DATE');
5966                 fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
5967                                 IF (g_error_level >= g_debug_level) THEN
5968                                     FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5969                                 END IF;
5970             fnd_msg_pub.add;
5971           END IF;
5972 
5973           -- PF Date vs End Date Validation.
5974 
5975           IF ( (l_cc_det_pf_lines_rec.cc_det_pf_date > p_end_date) AND
5976                                (p_end_date IS NOT NULL)
5977                            ) THEN
5978                                   x_valid_cc      := FND_API.G_FALSE;
5979                                   x_return_status := FND_API.G_RET_STS_ERROR;
5980                             fnd_message.set_name('IGC', 'IGC_CC_DET_PF_END_DATE');
5981               fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
5982                                   IF(g_error_level >= g_debug_level) THEN
5983                                      FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5984                                   END IF;
5985               fnd_msg_pub.add;
5986           END IF;
5987 
5988                     -- bug 5667529
5989                     -- changes done by kasbalas
5990           -- the validation for the pf date to be in a open period
5991           -- is done here instead of in the if loop below.
5992           -- this is beign done here since the check needs to be
5993           -- maintained even of the DBc is disabled or the
5994           -- computed fucntional amount and encumberence amount
5995           -- match or mismatch
5996 		IF ( NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) <>
5997 		            NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) ) THEN  -- Added for Bug 9366764
5998 
5999           BEGIN
6000                              -- Performance Tuning, replaced
6001                              -- view gl_period_statuses_v with
6002                              -- gl_period_statuses
6003                     SELECT  count(*)
6004                           INTO  l_COUNT
6005                           FROM  gl_sets_of_books sob,
6006                     gl_period_statuses gl,
6007                   igc_cc_periods cp
6008                  WHERE  sob.set_of_books_id = p_sob_id
6009                AND  gl.set_of_books_id = sob.set_of_books_id
6010                            AND  gl.application_id  = l_gl_application_id   -- Bug 1830385
6011                AND  cp.org_id = p_org_id
6012                  AND  cp.period_set_name = sob.period_set_name
6013                AND  cp.period_name = gl.period_name
6014                  AND  cp.cc_period_status IN ('O','F')
6015                  AND  gl.closing_status IN ('O','F')
6016                  AND  (l_cc_det_pf_lines_rec.cc_det_pf_date
6017                  BETWEEN gl.start_date AND gl.end_date
6018                  );
6019                     EXCEPTION
6020                        WHEN OTHERS THEN
6021                l_COUNT := 0;
6022                            IF ( g_unexp_level >= g_debug_level ) THEN
6023                                FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
6024                                FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
6025                                FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
6026                                FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
6027                             END IF;
6028           END;
6029           IF NVL(l_COUNT,0) = 0  THEN
6030                         x_valid_cc      := FND_API.G_FALSE;
6031                         x_return_status := FND_API.G_RET_STS_ERROR;
6032               fnd_message.set_name('IGC', 'IGC_CC_DET_PF_DATE');
6033                         IF(g_error_level >= g_debug_level) THEN
6034                            FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6035                         END IF;
6036                     fnd_msg_pub.add;
6037           END IF;
6038 		  END IF; -- ending the If Condition added for bug 9366764
6039           -- Encumbrance turned ON.
6040           -- Bug 1623034. Commitment Type should not be a RELEASE.
6041 
6042           IF p_encumbrance_flag = FND_API.G_TRUE  AND
6043                  (  (l_sbc_enable_flag = 'Y' )  AND
6044                       ( ( l_cbc_enable_flag IN ('Y','N') AND
6045                             (l_cc_prov_encmbrnc_flag IN ('Y','N') AND
6046                      (l_cc_conf_encmbrnc_flag = 'Y')
6047               )
6048                   )
6049                       )
6050                    ) AND
6051              l_cc_headers_rec.cc_type <> 'R'
6052           THEN
6053 
6054             -- Encumbrance turned ON.
6055             -- Standard budgetary control is on
6056             -- Commitment budgetary control is on or off.
6057             -- Provisional contract can encumber or not.
6058             -- Confirmed contract must encumber.
6059 
6060             IF ( NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) <>
6061                NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) )
6062             THEN
6063                 -- Bug 5667529
6064                 -- changes done by kasbalas
6065                 -- removed teh pf validation code to be outside
6066                 -- this if loop since the check needs to be
6067                     -- maintained even of the DBc is disabled or the
6068                   -- computed fucntional amount and encumberence
6069               -- amount match or mismatch
6070               NULL;
6071 
6072             -- PF Functional and Encumbered Amt Different ends here.
6073 
6074             ELSIF (NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) =
6075                 NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) )
6076             THEN
6077             -- PF Functional and Encumbered Amt  are same starts here.
6078               IF ( ( ( l_cc_prov_encmbrnc_flag  = 'Y'  AND
6079                                (l_cc_conf_encmbrnc_flag = 'Y')
6080                 ) OR
6081                            ( (l_cc_prov_encmbrnc_flag = 'N') AND
6082                              (l_cc_conf_encmbrnc_flag = 'Y') AND
6083                              (l_cc_headers_rec.cc_state = 'CM')
6084                 )
6085                        ) AND
6086                            (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_status <> 'T')
6087                  )
6088               THEN
6089                    IF TRUNC(l_cc_det_pf_lines_rec.cc_det_pf_date ) <>
6090                 TRUNC(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date)
6091                    THEN
6092                                              x_valid_cc      := FND_API.G_FALSE;
6093                                              x_return_status := FND_API.G_RET_STS_ERROR;
6094                      fnd_message.set_name('IGC','IGC_CC_DET_PF_DATE_NO_UPDATE');
6095                      fnd_message.set_TOKEN('ENCMBRNCDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date),FALSE);
6096                                              IF(g_error_level >= g_debug_level) THEN
6097                                                 FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6098                                              END IF;
6099                              fnd_msg_pub.add;
6100                    END IF;
6101               END IF;
6102             END IF ; -- PF Functional and Encumbered Amt  are same.
6103 
6104             -- Encumbrance Amount is greater than zero.
6105             IF NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) >  0
6106             THEN
6107                  -- Original Fiscal Year
6108                BEGIN
6109                                                         -- Performance Tuning, Replaced
6110                                                         -- the following query with the
6111                                                         -- one below as we are only
6112                                                         -- interested in the fiscal years.
6113               -- SELECT   DISTINCT cp.period_year
6114               -- INTO   l_orig_fiscal_year
6115               -- FROM   gl_sets_of_books sob,
6116               --  gl_period_statuses_v gl,
6117               --  igc_cc_periods_v cp
6118               -- WHERE  sob.set_of_books_id = p_sob_id
6119               -- AND     gl.set_of_books_id = sob.set_of_books_id
6120                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
6121               -- AND     cp.org_id = p_org_id
6122               -- AND     cp.period_set_name= sob.period_set_name
6123               -- AND     cp.period_name = gl.period_name
6124               -- AND  (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date
6125               -- BETWEEN cp.start_date AND cp.end_date
6126                     -- );
6127                                     SELECT  distinct gl.period_year
6128               INTO    l_orig_fiscal_year
6129                                     FROM  gl_sets_of_books sob,
6130                                             gl_periods gl
6131                                     WHERE   sob.set_of_books_id = p_sob_id
6132                                     AND     gl.period_set_name= sob.period_set_name
6133                                     AND     gl.period_type = sob.accounted_period_type
6134                                     AND    (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date between gl.start_date and gl.end_date);
6135                  END;
6136               -- New Fiscal Year if any.
6137                BEGIN
6138                                                         -- Performance Tuning, Replaced
6139                                                         -- the following query with the
6140                                                         -- one below as we are only
6141                                                         -- interested in the fiscal years.
6142               -- SELECT   DISTINCT cp.period_year
6143               -- INTO   l_new_fiscal_year
6144               -- FROM   gl_sets_of_books sob,
6145               --  gl_period_statuses_v gl,
6146               --  igc_cc_periods_v cp
6147               -- WHERE  sob.set_of_books_id = p_sob_id
6148               -- AND     gl.set_of_books_id = sob.set_of_books_id
6149                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
6150               -- AND     cp.org_id = p_org_id
6151               -- AND     cp.period_set_name= sob.period_set_name
6152               -- AND     cp.period_name = gl.period_name
6153               -- AND  ( l_cc_det_pf_lines_rec.cc_det_pf_date
6154               --    BETWEEN cp.start_date AND cp.end_date
6155                     -- );
6156                                     SELECT  distinct gl.period_year
6157               INTO    l_new_fiscal_year
6158                                     FROM  gl_sets_of_books sob,
6159                                             gl_periods gl
6160                                     WHERE   sob.set_of_books_id = p_sob_id
6161                                     AND     gl.period_set_name= sob.period_set_name
6162                                     AND     gl.period_type = sob.accounted_period_type
6163                                     AND    (l_cc_det_pf_lines_rec.cc_det_pf_date between gl.start_date and gl.end_date);
6164                END;
6165               IF l_orig_fiscal_year <> l_new_fiscal_year
6166               THEN
6167                                             x_valid_cc      := FND_API.G_FALSE;
6168                                             x_return_status := FND_API.G_RET_STS_ERROR;
6169                   fnd_message.set_name('IGC', 'IGC_CC_FISCAL_YRS_NE');
6170                   fnd_message.set_TOKEN('ENCMBRNCDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date),FALSE);
6171                                             IF(g_error_level >= g_debug_level) THEN
6172                                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6173                                             END IF;
6174                   fnd_msg_pub.add;
6175               END IF; -- Fiscal Year Mismatch valdn ends here.
6176             END IF; -- Encumbrance Amt is greater than zero ends here.
6177           END IF; -- Encumbrance turned ON validation ends here.
6178 
6179         END LOOP; -- Payment Forecast Loop end here.
6180 
6181         CLOSE c_det_pf_lines;
6182 
6183       END IF;
6184                         -- Performance Tuning, Replaced view
6185                         -- igc_cc_det_pf_v with
6186                         -- igc_cc_det_pf and replaced the line
6187                         -- below.
6188       SELECT SUM(NVL(CC_DET_PF_ENTERED_AMT,0))
6189       INTO l_total_pf_entered_amt
6190       FROM igc_cc_det_pf
6191       WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
6192 
6193       IF ( l_total_pf_entered_amt  +
6194                              NVL(l_cc_acct_lines_rec.cc_ent_withheld_amt,0)) <> NVL(l_cc_acct_lines_rec.cc_acct_entered_amt,0)
6195                         -- '+' added for 2043221, Bidisha S , 12 Oct 2001
6196                         -- This validation now needs to include the withheld amount
6197                         THEN
6198                            x_valid_cc      := FND_API.G_FALSE;
6199                            x_return_status := FND_API.G_RET_STS_ERROR;
6200            fnd_message.set_name('IGC', 'IGC_CC_AMT_MISMATCH');
6201            fnd_message.set_token('ACCT_NUM',to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
6202                            IF(g_error_level >= g_debug_level) THEN
6203                               FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6204                            END IF;
6205            fnd_msg_pub.add;
6206       END IF;
6207 
6208        END LOOP;
6209 
6210        CLOSE c_account_lines;
6211 
6212        IF (l_cc_acct_cnt = 0)  THEN
6213                         x_valid_cc      := FND_API.G_FALSE;
6214                         x_return_status := FND_API.G_RET_STS_ERROR;
6215       fnd_message.set_name('IGC', 'IGC_CC_NO_ACCT_LINES');
6216       fnd_message.set_token('CC_NUM', l_cc_headers_rec.cc_num,TRUE);
6217                     IF(g_error_level >= g_debug_level) THEN
6218                        FND_LOG.MESSAGE(g_error_level, g_debug_level, FALSE);
6219                     END IF;
6220       fnd_msg_pub.add;
6221         END IF;
6222     END IF;
6223 
6224   ELSIF  p_mode = 'A'   OR p_mode = 'B' THEN
6225 
6226   -- When Mode of call to the procedure is either 'A' stands for 'Approval'  or 'B' for 'Encumbrance'
6227   -- the following validations should be performed.
6228 
6229 
6230   -- Common Payment Forecast Date Validations.
6231 
6232     BEGIN
6233       SELECT *
6234       INTO l_cc_headers_rec
6235       FROM igc_cc_headers
6236       WHERE cc_header_id = p_cc_header_id;
6237       EXCEPTION
6238                        WHEN no_data_found THEN
6239                                  x_valid_cc      := FND_API.G_FALSE;
6240                                  x_return_status := FND_API.G_RET_STS_ERROR;
6241                  fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
6242                  fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
6243                                  IF(g_error_level >= g_debug_level) THEN
6244                                     FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6245                                  END IF;
6246                  l_error_message := fnd_message.get;
6247                  FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name, l_error_message);
6248                  RAISE E_CC_NOT_FOUND;
6249 
6250     END;
6251 
6252     -- Check only for provisional and confirmed states
6253 
6254     IF (l_cc_headers_rec.cc_state = 'PR') OR (l_cc_headers_rec.cc_state = 'CM')  THEN
6255 
6256     l_cc_acct_cnt   := 0;
6257 
6258       OPEN c_account_lines(p_cc_header_id);
6259       LOOP
6260         l_total_pf_entered_amt := 0;
6261 
6262         FETCH c_account_lines INTO l_cc_acct_lines_rec;
6263 
6264         EXIT WHEN c_account_lines%NOTFOUND;
6265         l_cc_acct_cnt   := l_cc_acct_cnt + 1;
6266 
6267         l_cc_det_pf_cnt   := 0;
6268 
6269         BEGIN
6270                                         -- Performance Tuning, Replaced view
6271                                         -- igc_cc_det_pf_v with
6272                                         -- igc_cc_det_pf and replaced the line
6273                                         -- below.
6274           SELECT count(*)
6275           INTO l_cc_det_pf_cnt
6276           FROM igc_cc_det_pf
6277           WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
6278           EXCEPTION
6279              WHEN NO_DATA_FOUND THEN
6280                  l_cc_det_pf_cnt := 0;
6281                                      IF ( g_unexp_level >= g_debug_level ) THEN
6282                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
6283                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
6284                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
6285                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
6286                                      END IF;
6287         END;
6288         IF (NVL(l_cc_det_pf_cnt ,0) = 0)
6289                                 AND l_cc_acct_lines_rec.cc_ent_withheld_amt <> l_cc_acct_lines_rec.cc_acct_entered_amt
6290                                 -- And clause added for 2043221, Bidisha S , 12 Oct 2001
6291                                 -- Perfom this validation only if the withheld amount is not equal to
6292                                 -- the amount in the account line
6293                                 THEN
6294                                         x_valid_cc      := FND_API.G_FALSE;
6295                                         x_return_status := FND_API.G_RET_STS_ERROR;
6296           fnd_message.set_name('IGC', 'IGC_CC_NO_PF');
6297           fnd_message.set_token('ACCT_NUM', to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
6298                             IF(g_error_level >= g_debug_level) THEN
6299                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6300                             END IF;
6301           fnd_msg_pub.add;
6302         ELSIF (NVL(l_cc_det_pf_cnt,0) > 0) THEN
6303 
6304           OPEN c_det_pf_lines(l_cc_acct_lines_rec.cc_acct_line_id);
6305           LOOP
6306 
6307             FETCH c_det_pf_lines INTO l_cc_det_pf_lines_rec;
6308 
6309             EXIT WHEN c_det_pf_lines%NOTFOUND;
6310             l_cc_det_pf_cnt   := l_cc_det_pf_cnt + 1;
6311 
6312             -- PF Date vs Start Date Validation.
6313 
6314             IF (l_cc_det_pf_lines_rec.cc_det_pf_date < p_start_date) THEN
6315                                         x_valid_cc      := FND_API.G_FALSE;
6316                                         x_return_status := FND_API.G_RET_STS_ERROR;
6317                               fnd_message.set_name('IGC', 'IGC_CC_DET_PF_START_DATE');
6318                       fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
6319                                         IF(g_error_level >= g_debug_level) THEN
6320                                            FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6321                                         END IF;
6322                   fnd_msg_pub.add;
6323             END IF;
6324 
6325             -- PF Date vs End Date Validation.
6326 
6327             IF ( (l_cc_det_pf_lines_rec.cc_det_pf_date > p_end_date) AND
6328                                  (p_end_date IS NOT NULL)
6329                                    ) THEN
6330                                     x_valid_cc      := FND_API.G_FALSE;
6331                                     x_return_status := FND_API.G_RET_STS_ERROR;
6332               fnd_message.set_name('IGC', 'IGC_CC_DET_PF_END_DATE');
6333               fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
6334                                     IF(g_error_level >= g_debug_level) THEN
6335                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6336                                     END IF;
6337               fnd_msg_pub.add;
6338             END IF;
6339 
6340                         -- bug 5667529
6341                         -- changes done by kasbalas
6342               -- the validation for the pf date to be in a open period
6343               -- is done here instead of in the if loop below.
6344               -- this is beign done here since the check needs to be
6345               -- maintained even of the DBc is disabled or the
6346               -- computed fucntional amount and encumberence amount
6347               -- match or mismatch
6348 			IF ( NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) <>               -- Added for Bug 9366764
6349 			   NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) ) THEN
6350 
6351               BEGIN
6352 -- Performance Tuning, replaced
6353                              -- view gl_period_statuses_v with
6354                              -- gl_period_statuses
6355                         SELECT  count(*)
6356                               INTO  l_COUNT
6357                               FROM  gl_sets_of_books sob,
6358                         gl_period_statuses gl,
6359                       igc_cc_periods cp
6360                      WHERE  sob.set_of_books_id = p_sob_id
6361                    AND  gl.set_of_books_id = sob.set_of_books_id
6362                                AND  gl.application_id  = l_gl_application_id   -- Bug 1830385
6363                    AND  cp.org_id = p_org_id
6364                      AND  cp.period_set_name = sob.period_set_name
6365                    AND  cp.period_name = gl.period_name
6366                      AND  cp.cc_period_status IN ('O','F')
6367                      AND  gl.closing_status IN ('O','F')
6368                      AND  (l_cc_det_pf_lines_rec.cc_det_pf_date
6369                      BETWEEN gl.start_date AND gl.end_date
6370                      );
6371                         EXCEPTION
6372                            WHEN OTHERS THEN
6373                    l_COUNT := 0;
6374                                IF ( g_unexp_level >= g_debug_level ) THEN
6375                                    FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
6376                                    FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
6377                                    FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
6378                                    FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
6379                                 END IF;
6380               END;
6381               IF NVL(l_COUNT,0) = 0  THEN
6382                             x_valid_cc      := FND_API.G_FALSE;
6383                             x_return_status := FND_API.G_RET_STS_ERROR;
6384                   fnd_message.set_name('IGC', 'IGC_CC_DET_PF_DATE');
6385                             IF(g_error_level >= g_debug_level) THEN
6386                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6387                             END IF;
6388                         fnd_msg_pub.add;
6389               END IF;
6390 			  END IF; -- End of the If condition added for bug 9366764
6391             -- Encumbrance turned ON.
6392             -- Bug 1623034. Commitment Type should not be a RELEASE.
6393 
6394             IF p_encumbrance_flag = FND_API.G_TRUE  AND
6395                    (  (l_sbc_enable_flag = 'Y' )  AND
6396                         ( l_cbc_enable_flag IN ('Y','N') AND
6397                               (l_cc_prov_encmbrnc_flag IN ('Y','N') AND
6398                        (l_cc_conf_encmbrnc_flag = 'Y')
6399                       )
6400                         )
6401                      ) AND
6402                   l_cc_headers_rec.cc_type <> 'R'
6403             THEN
6404 
6405               -- Encumbrance turned ON.
6406               -- Standard budgetary control is on
6407               -- Commitment budgetary control is on or off.
6408               -- Provisional contract can encumber or not.
6409               -- Confirmed contract must encumber.
6410 
6411               IF ( NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) <>
6412                  NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) )
6413               THEN
6414                   -- Bug 5667529
6415                   -- changes done by kasbalas
6416                   -- removed teh pf validation code to be outside
6417                   -- this if loop since the check needs to be
6418                       -- maintained even of the DBc is disabled or the
6419                     -- computed fucntional amount and encumberence
6420                 -- amount match or mismatch
6421                 NULL;
6422 
6423               -- PF Functional and Encumbered Amt Different ends here.
6424 
6425               ELSIF (NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) =
6426                      NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) )
6427               THEN
6428               -- PF Functional and Encumbered Amt  are same starts here.
6429                 IF ( ( ( l_cc_prov_encmbrnc_flag  = 'Y'  AND
6430                                  (l_cc_conf_encmbrnc_flag = 'Y')
6431                   ) OR
6432                        ( (l_cc_prov_encmbrnc_flag = 'N') AND
6433                          (l_cc_conf_encmbrnc_flag = 'Y') AND
6434                          (l_cc_headers_rec.cc_state = 'CM')
6435                   )
6436                       ) AND
6437                      (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_status <> 'T')
6438                    )
6439                 THEN
6440                      IF TRUNC(l_cc_det_pf_lines_rec.cc_det_pf_date ) <>
6441                   TRUNC (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date)
6442                      THEN
6443                                                                            x_valid_cc      := FND_API.G_FALSE;
6444                                                                            x_return_status := FND_API.G_RET_STS_ERROR;
6445                      fnd_message.set_name('IGC',
6446                       'IGC_CC_DET_PF_DATE_NO_UPDATE');
6447                      fnd_message.set_TOKEN('ENCMBRNCDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date),FALSE);
6448                                                IF(g_error_level >= g_debug_level) THEN
6449                                                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6450                                                END IF;
6451                                fnd_msg_pub.add;
6452                      END IF;
6453                 END IF;
6454               END IF ; -- PF Functional and Encumbered Amt  are same.
6455 
6456               -- Encumbrance Amount is greater than zero.
6457               IF NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) >  0
6458               THEN
6459                  -- Original Fiscal Year
6460                  BEGIN
6461                                                                 -- Performance Tuning, Replaced
6462                                                                 -- the following query with the
6463                                                                 -- one below as we are only
6464                                                                 -- interested in the fiscal years.
6465                 -- SELECT   DISTINCT cp.period_year
6466                 -- INTO   l_orig_fiscal_year
6467                 -- FROM   gl_sets_of_books sob,
6468                 --  gl_period_statuses_v gl,
6469                 --  igc_cc_periods_v cp
6470                 -- WHERE  sob.set_of_books_id = p_sob_id
6471                 -- AND     gl.set_of_books_id = sob.set_of_books_id
6472                                                                 -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
6473                 -- AND     cp.org_id = p_org_id
6474                 -- AND     cp.period_set_name= sob.period_set_name
6475                 -- AND     cp.period_name = gl.period_name
6476                 -- AND  (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date
6477                 --    BETWEEN cp.start_date AND cp.end_date
6478                       -- );
6479                                          SELECT   distinct gl.period_year
6480                        INTO   l_orig_fiscal_year
6481                                          FROM   gl_sets_of_books sob,
6482                                                 gl_periods gl
6483                                          WHERE  sob.set_of_books_id = p_sob_id
6484                                          AND     gl.period_set_name= sob.period_set_name
6485                                          AND     gl.period_type = sob.accounted_period_type
6486                                          AND    (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date between gl.start_date and gl.end_date);
6487                    END;
6488                  -- New Fiscal Year if any.
6489                  BEGIN
6490                                                                 -- Performance Tuning, Replaced
6491                                                                 -- the following query with the
6492                                                                 -- one below as we are only
6493                                                                 -- interested in the fiscal years.
6494                 -- SELECT   DISTINCT cp.period_year
6495                 -- INTO   l_new_fiscal_year
6496                 -- FROM   gl_sets_of_books sob,
6497                 --  gl_period_statuses_v gl,
6498                 --  igc_cc_periods_v cp
6499                 -- WHERE  sob.set_of_books_id = p_sob_id
6500                 -- AND     gl.set_of_books_id = sob.set_of_books_id
6501                                                                 -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
6502                 -- AND     cp.org_id = p_org_id
6503                 -- AND     cp.period_set_name= sob.period_set_name
6504                 -- AND     cp.period_name = gl.period_name
6505                 -- AND  (l_cc_det_pf_lines_rec.cc_det_pf_date
6506                 --    BETWEEN cp.start_date AND cp.end_date
6507                       --  );
6508                                           SELECT  distinct gl.period_year
6509                         INTO    l_new_fiscal_year
6510                                           FROM      gl_sets_of_books sob,
6511                                                     gl_periods gl
6512                                           WHERE   sob.set_of_books_id = p_sob_id
6513                                           AND     gl.period_set_name= sob.period_set_name
6514                                           AND     gl.period_type = sob.accounted_period_type
6515                                           AND    (l_cc_det_pf_lines_rec.cc_det_pf_date between gl.start_date and gl.end_date);
6516                   END;
6517                 IF l_orig_fiscal_year <> l_new_fiscal_year
6518                 THEN
6519                                             x_valid_cc      := FND_API.G_FALSE;
6520                                             x_return_status := FND_API.G_RET_STS_ERROR;
6521                   fnd_message.set_name('IGC', 'IGC_CC_FISCAL_YRS_NE');
6522                   fnd_message.set_TOKEN('ENCMBRNCDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date),FALSE);
6523                                             IF(g_error_level >= g_debug_level) THEN
6524                                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6525                                             END IF;
6526                   fnd_msg_pub.add;
6527                 END IF; -- Fiscal Year Mismatch valdn ends here.
6528               END IF; -- Encumbrance Amt is greater than zero ends here.
6529             END IF; -- Encumbrance turned ON validation ends here.
6530 
6531           END LOOP; -- Payment Forecast Loop end here.
6532 
6533           CLOSE c_det_pf_lines;
6534 
6535         END IF;
6536                                 -- Performance Tuning, Replaced view
6537                                 -- igc_cc_det_pf_v with igc_cc_det_pf
6538         SELECT SUM(NVL(CC_DET_PF_ENTERED_AMT,0))
6539         INTO l_total_pf_entered_amt
6540         FROM igc_cc_det_pf
6541         WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
6542 
6543         IF ( l_total_pf_entered_amt
6544                                      + NVL(l_cc_acct_lines_rec.cc_ent_withheld_amt,0) )
6545                                       <> (NVL(l_cc_acct_lines_rec.cc_acct_entered_amt,0))
6546                                      -- '+' added for 2043221, Bidisha S , 12 Oct 2001
6547                                      -- This validation now needs to include the withheld amount
6548         THEN
6549                             x_valid_cc      := FND_API.G_FALSE;
6550                             x_return_status := FND_API.G_RET_STS_ERROR;
6551           fnd_message.set_name('IGC', 'IGC_CC_AMT_MISMATCH');
6552           fnd_message.set_token('ACCT_NUM',to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
6553                             IF(g_error_level >= g_debug_level) THEN
6554                                 FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6555                             END IF;
6556           fnd_msg_pub.add;
6557         END IF;
6558 
6559       END LOOP;
6560 
6561       CLOSE c_account_lines;
6562 
6563       IF (l_cc_acct_cnt = 0)  THEN
6564                         x_valid_cc      := FND_API.G_FALSE;
6565                         x_return_status := FND_API.G_RET_STS_ERROR;
6566         fnd_message.set_name('IGC', 'IGC_CC_NO_ACCT_LINES');
6567         fnd_message.set_token('CC_NUM', l_cc_headers_rec.cc_num,TRUE);
6568                         IF(g_error_level >= g_debug_level) THEN
6569                            FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6570                         END IF;
6571         fnd_msg_pub.add;
6572       END IF;
6573 
6574     END IF;
6575 
6576   END IF;
6577 
6578     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data  => x_msg_data );
6579 
6580   EXCEPTION
6581            WHEN E_CC_NOT_FOUND OR E_CC_INVALID_SET_UP THEN
6582           x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6583           x_valid_cc        := FND_API.G_FALSE;
6584           FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6585                                                 p_data  => x_msg_data );
6586            CLOSE c_account_lines;
6587                 IF (g_excep_level >=  g_debug_level ) THEN
6588                    FND_LOG.STRING (g_excep_level,l_full_path,'E_CC_NOT_FOUND OR E_CC_INVALID_SET_UP Exception Raised');
6589                 END IF;
6590 
6591      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6592           x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6593                 x_valid_cc        := FND_API.G_FALSE;
6594           FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6595                                           p_data  => x_msg_data );
6596           CLOSE c_account_lines;
6597                 IF (g_excep_level >=  g_debug_level ) THEN
6598                    FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR Exception Raised');
6599                 END IF;
6600 
6601      WHEN OTHERS THEN
6602           x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6603           x_valid_cc        := FND_API.G_FALSE;
6604 
6605       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6606       THEN
6607         FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME, l_api_name);
6608       END IF;
6609 
6610       FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6611                                             p_data  => x_msg_data );
6612       CLOSE c_account_lines;
6613 
6614                     IF ( g_unexp_level >= g_debug_level ) THEN
6615                        FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
6616                        FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
6617                        FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
6618                        FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
6619                     END IF;
6620 
6621 END Validate_CC;
6622 
6623 -- This procedure calculates the non recoverable tax given an amount.
6624 -- Bug 2409502
6625 PROCEDURE calculate_nonrec_tax (
6626                                 p_api_version       IN       NUMBER,
6627                                 p_init_msg_list     IN       VARCHAR2 := FND_API.G_FALSE,
6628                                 p_commit            IN       VARCHAR2 := FND_API.G_FALSE,
6629                                 p_validation_level  IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6630                                 x_return_status     OUT NOCOPY      VARCHAR2,
6631                                 x_msg_count         OUT NOCOPY      NUMBER,
6632                                 x_msg_data          OUT NOCOPY      VARCHAR2,
6633                                 p_tax_id            IN       ap_tax_codes.tax_id%TYPE,
6634                                 p_amount            IN       NUMBER,
6635                                 p_tax_amount        OUT NOCOPY      NUMBER)
6636 IS
6637    CURSOR c_get_tax IS
6638    SELECT Nvl(tax_recovery_rate,100),
6639           Nvl(tax_rate,0)
6640    FROM   ap_tax_codes a,
6641           financials_system_parameters b
6642    WHERE  a.set_of_books_id = b.set_of_books_id
6643    AND    a.tax_id          = p_tax_id;
6644 
6645 
6646    l_api_name                 CONSTANT VARCHAR2(30)   := 'Calculate_Nonrec_Tax';
6647    l_api_version              CONSTANT NUMBER         := 1.0;
6648    l_tax_recovery_rate        ap_tax_codes.tax_recovery_rate%TYPE;
6649    l_tax_rate                 ap_tax_codes.tax_rate%TYPE;
6650    l_full_path                VARCHAR2(255);
6651 
6652 BEGIN
6653 
6654     l_full_path := g_path || 'calculate_nonrec_tax';
6655 
6656     IF FND_API.to_Boolean(p_init_msg_list)
6657     THEN
6658   FND_MSG_PUB.initialize;
6659     END IF;
6660 
6661     IF NOT FND_API.Compatible_API_Call(l_api_version,
6662            p_api_version,
6663            l_api_name,
6664            G_PKG_NAME)
6665     THEN
6666   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6667     END IF;
6668 
6669     x_return_status := FND_API.G_RET_STS_SUCCESS;
6670 
6671     -- Get the tax rates
6672     OPEN c_get_tax;
6673     FETCH c_get_tax INTO l_tax_recovery_rate,
6674                          l_tax_rate;
6675     CLOSE c_get_tax;
6676 
6677     IF l_tax_recovery_rate <> 100
6678     THEN
6679         p_tax_amount := ((100 - l_tax_recovery_rate)/100) *
6680                            (l_tax_rate/100) * p_amount;
6681     END IF;
6682 
6683 
6684     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data  => x_msg_data );
6685 
6686 EXCEPTION
6687     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6688     x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6689     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6690         p_data  => x_msg_data );
6691     IF (g_excep_level >=  g_debug_level ) THEN
6692        FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR Exception Raised');
6693     END IF;
6694 
6695     WHEN OTHERS THEN
6696     x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6697 
6698     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6699     THEN
6700       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME, l_api_name);
6701     END IF;
6702 
6703     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6704         p_data  => x_msg_data );
6705 
6706     IF ( g_unexp_level >= g_debug_level ) THEN
6707        FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
6708        FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
6709        FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
6710        FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
6711     END IF;
6712 
6713 END calculate_nonrec_tax;
6714 
6715 END IGC_CC_BUDGETARY_CTRL_PKG;