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.34 2008/02/11 06:08:09 dvjoshi 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                     SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_billed_amt,
1543                                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_func_billed_amt,
1544                                 cc_acct_func_amt
1545       INTO   l_billed_amt, l_func_billed_amt, l_func_amt
1546       FROM   igc_cc_acct_lines ccal
1547       WHERE  ccal.cc_acct_line_id = p_cc_acct_lines_rec.cc_acct_line_id;
1548 
1549         l_unbilled_amt       :=  l_func_amt - l_func_billed_amt;
1550 
1551     END IF;
1552 
1553   END IF;
1554 
1555   IF (p_type = 'P')
1556   THEN
1557     l_cc_interface_rec.cc_acct_line_id          :=  p_cc_acct_lines_rec.cc_acct_line_id;  --Bug 5464993
1558 --    l_cc_interface_rec.cc_acct_line_id          :=  NULL;
1559     l_cc_interface_rec.cc_det_pf_line_id        :=  p_cc_pmt_fcst_rec.cc_det_pf_line_id;
1560     l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
1561     l_cc_interface_rec.budget_dest_flag         :=  'S';
1562     l_enc_amt                                   :=  NVL(p_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_amt,0);
1563     l_func_amt                                  :=  NVL(p_cc_pmt_fcst_rec.cc_det_pf_comp_func_amt,0);
1564     l_cc_interface_rec.reference_1              :=  p_cc_headers_rec.cc_header_id;
1565     l_cc_interface_rec.reference_2              :=  p_cc_acct_lines_rec.cc_acct_line_id;
1566     l_cc_interface_rec.reference_3              :=  p_cc_headers_rec.cc_version_num;
1567 
1568 --    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
1569     l_cc_interface_rec.reference_4        :=  p_cc_headers_rec.cc_num;
1570 
1571 
1572     IF (p_cc_headers_rec.cc_state = 'CT')
1573     THEN
1574       l_billed_amt      := 0;
1575                         l_func_billed_amt := 0;
1576                         l_func_amt        := 0;
1577 
1578                         -- Performance Tuning, Replaced view
1579                         -- igc_cc_acct_lines_v with
1580                         -- igc_cc_acct_lines and replaced the line
1581                         -- below.
1582       -- SELECT cc_det_pf_billed_amt, cc_det_pf_func_billed_amt , cc_det_pf_func_amt
1583                     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,
1584                                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,
1585                               ccdpf.cc_det_pf_func_amt
1586         INTO l_billed_amt, l_func_billed_amt, l_func_amt
1587       FROM igc_cc_det_pf ccdpf
1588       WHERE ccdpf.cc_det_pf_line_id = p_cc_pmt_fcst_rec.cc_det_pf_line_id;
1589 
1590         l_unbilled_amt       :=   l_func_amt - l_func_billed_amt;
1591     END IF;
1592   END IF;
1593 
1594         /*EB Tax uptake - Bug No : 6472296*/
1595   -- Bug 2409502, On the 3 amounts, calculate the non recoverable tax
1596         -- Calculate on the l_enc_amt
1597 /*  igc_cc_budgetary_ctrl_pkg.calculate_nonrec_tax
1598     (p_api_version       => 1.0,
1599     p_init_msg_list     => FND_API.G_FALSE,
1600     p_commit            => FND_API.G_FALSE,
1601     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
1602     x_return_status     => l_return_status,
1603     x_msg_count         => l_msg_count,
1604     x_msg_data          => l_msg_data,
1605     p_tax_id            => p_cc_acct_lines_rec.tax_id,
1606     p_amount            => l_enc_amt,
1607     p_tax_amount        => l_enc_tax_amt);
1608 */
1609   l_taxable_flag := nvl(p_cc_acct_lines_rec.cc_acct_taxable_flag,'N');
1610   /* Bug 6719456 Added one more condition here. Call Tax calculation api only when l_enc_amt <> 0 */
1611   l_enc_tax_amt := 0;
1612   IF (l_taxable_flag = 'Y' AND l_enc_amt <> 0) THEN
1613     IGC_ETAX_UTIL_PKG.Calculate_Tax
1614       (P_CC_Header_Rec  =>p_cc_headers_rec,
1615       P_Calling_Mode    =>null,
1616       P_Amount    =>l_enc_amt,
1617       P_Line_Id   =>l_cc_interface_rec.cc_acct_line_id,
1618       P_Tax_Amount    =>l_enc_tax_amt,
1619       P_Return_Status   =>l_return_status,
1620       P_Error_Code            =>P_Error_Code);
1621     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
1622     THEN
1623         RAISE FND_API.G_EXC_ERROR;
1624     END IF;
1625   END IF;
1626         l_enc_amt := l_enc_amt + Nvl(l_enc_tax_amt,0);
1627 
1628         -- Calculate on the l_func_amt
1629         /*igc_cc_budgetary_ctrl_pkg.calculate_nonrec_tax
1630     (p_api_version       => 1.0,
1631     p_init_msg_list     => FND_API.G_FALSE,
1632     p_commit            => FND_API.G_FALSE,
1633     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
1634     x_return_status     => l_return_status,
1635     x_msg_count         => l_msg_count,
1636     x_msg_data          => l_msg_data,
1637     p_tax_id            => p_cc_acct_lines_rec.tax_id,
1638     p_amount            => l_func_amt,
1639     p_tax_amount        => l_func_tax_amt);
1640   */
1641   /* Bug 6719456 Added one more condition here. Call Tax calculation api only when l_func_amt <> 0 */
1642   l_func_tax_amt := 0;
1643   IF (l_taxable_flag = 'Y' AND l_func_amt <> 0) THEN
1644     IGC_ETAX_UTIL_PKG.Calculate_Tax
1645       (P_CC_Header_Rec  =>p_cc_headers_rec,
1646       P_Calling_Mode    =>null,
1647       P_Amount    =>l_func_amt,
1648       P_Line_Id   =>l_cc_interface_rec.cc_acct_line_id,
1649       P_Tax_Amount    =>l_func_tax_amt,
1650       P_Return_Status   =>l_return_status,
1651       P_Error_Code            =>P_Error_Code);
1652     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
1653     THEN
1654         RAISE FND_API.G_EXC_ERROR;
1655     END IF;
1656   END IF;
1657         l_func_amt := l_func_amt + Nvl(l_func_tax_amt,0);
1658 
1659         -- Calculate on the l_unbilled_amt
1660         /*igc_cc_budgetary_ctrl_pkg.calculate_nonrec_tax
1661     (p_api_version       => 1.0,
1662     p_init_msg_list     => FND_API.G_FALSE,
1663     p_commit            => FND_API.G_FALSE,
1664     p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
1665     x_return_status     => l_return_status,
1666     x_msg_count         => l_msg_count,
1667     x_msg_data          => l_msg_data,
1668     p_tax_id            => p_cc_acct_lines_rec.tax_id,
1669     p_amount            => l_unbilled_amt,
1670     p_tax_amount        => l_unbilled_tax_amt);
1671   */
1672   /* Bug 6719456 Added one more condition here. Call Tax calculation api only when l_unbilled_amt <> 0 */
1673   l_unbilled_tax_amt := 0;
1674   IF (l_taxable_flag = 'Y' AND l_unbilled_amt <> 0) THEN
1675     IGC_ETAX_UTIL_PKG.Calculate_Tax
1676       (P_CC_Header_Rec  =>p_cc_headers_rec,
1677       P_Calling_Mode    =>null,
1678       P_Amount    =>l_unbilled_amt,
1679       P_Line_Id   =>l_cc_interface_rec.cc_acct_line_id,
1680       P_Tax_Amount    =>l_unbilled_tax_amt,
1681       P_Return_Status   =>l_return_status,
1682       P_Error_Code            =>P_Error_Code);
1683     IF (l_return_status <> FND_API.G_RET_STS_SUCCESS)
1684     THEN
1685         RAISE FND_API.G_EXC_ERROR;
1686     END IF;
1687   END IF;
1688   /*EB Tax uptake - Bug No : 6472296 END*/
1689         l_unbilled_amt := l_unbilled_amt + Nvl(l_unbilled_tax_amt,0);
1690 
1691 
1692         -- End Bug 2409502, 20 Aug 2002
1693 
1694   IF (p_mode = 'R') OR (p_mode = 'C')
1695   THEN
1696 
1697     /* Confirmed state */
1698     IF (p_cc_headers_rec.cc_state = 'CM')
1699     THEN
1700             /* Transition to Confirmed state  */
1701       IF   ( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'T')
1702       THEN
1703         /* Provisional CC has been encumbered */
1704 
1705         IF (NVL(l_enc_amt,0) >= 0)  AND
1706                                    /* Begin fix for bug 1757526 */
1707                                    ( ((p_cc_acct_lines_rec.cc_acct_encmbrnc_date IS NOT NULL) AND p_type = 'A') OR
1708                                       ((p_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_date IS NOT NULL) AND p_type = 'P')
1709                                     )
1710                                    /* End fix for bug 1757526 */
1711 
1712         THEN
1713 
1714                             /* Reverse COMMITMENT Encumbrance against CBC */
1715 
1716           g_line_num := g_line_num + 1;
1717 
1718           l_cc_interface_rec.batch_line_num           :=  g_line_num;
1719           l_cc_interface_rec.cc_func_dr_amt           :=  NULL;
1720           l_cc_interface_rec.cc_func_cr_amt           :=  l_enc_amt;
1721           --l_cc_interface_rec.je_category_name         := 'Provisional';  Bug 6341012  commented this line
1722 
1723           Insert_Interface_Row(l_cc_interface_rec,
1724                                                              x_msg_count,
1725                                                              x_msg_data,
1726                                                              l_return_status);
1727 
1728                                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1729                                            RAISE FND_API.G_EXC_ERROR;
1730                                         END IF;
1731 
1732         END IF;
1733 
1734         /* Create ACTUAL Encumbrance against CBC */
1735 
1736               g_line_num := g_line_num + 1;
1737 
1738         l_cc_interface_rec.batch_line_num           :=  g_line_num;
1739         l_cc_interface_rec.cc_func_cr_amt           :=  NULL;
1740         l_cc_interface_rec.cc_func_dr_amt           :=  l_func_amt;
1741         --l_cc_interface_rec.je_category_name         := 'Confirmed';   Bug Number 6341012 commented this line
1742 
1743         Insert_Interface_Row(l_cc_interface_rec,
1744                                                      x_msg_count,
1745                                                      x_msg_data,
1746                                                      l_return_status);
1747 
1748                          IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1749                              RAISE FND_API.G_EXC_ERROR;
1750                          END IF;
1751 
1752       ELSE
1753         /*Increase Adjustment */
1754 
1755         IF
1756              (( NVL(p_cc_headers_rec.cc_encmbrnc_status, 'N')  = 'N') AND
1757                               ( NVL(l_enc_amt,0) <= NVL(l_func_amt,0) )
1758                       )
1759               THEN
1760                 g_line_num := g_line_num + 1;
1761 
1762           l_cc_interface_rec.batch_line_num           :=  g_line_num;
1763           l_cc_interface_rec.cc_func_cr_amt           :=  NULL;
1764           l_cc_interface_rec.cc_func_dr_amt           := abs(l_func_amt - l_enc_amt);
1765           --l_cc_interface_rec.je_category_name         := 'Confirmed'; Bug Number 6341012 commented this line
1766 
1767           Insert_Interface_Row(l_cc_interface_rec,
1768                                                              x_msg_count,
1769                                                              x_msg_data,
1770                                                              l_return_status);
1771                             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1772                                RAISE FND_API.G_EXC_ERROR;
1773                             END IF;
1774         ELSIF
1775              (( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'N') AND
1776                               ( NVL(l_enc_amt,0) >= NVL(l_func_amt,0) )
1777                       )
1778               THEN
1779                             /* Decrease Adjustment */
1780 
1781                 g_line_num := g_line_num + 1;
1782 
1783           l_cc_interface_rec.batch_line_num           :=  g_line_num;
1784 /* Commented By 6341012 to test confirm state with decrease/increase amount
1785           l_cc_interface_rec.cc_func_dr_amt           :=  NULL;
1786           l_cc_interface_rec.cc_func_cr_amt           := abs(l_func_amt - l_enc_amt);
1787 */
1788           l_cc_interface_rec.cc_func_dr_amt           := l_func_amt - l_enc_amt;
1789           l_cc_interface_rec.cc_func_cr_amt           := NULL;
1790           --l_cc_interface_rec.je_category_name         := 'Confirmed'; Bug Number 6341012 commented this line
1791 
1792           Insert_Interface_Row(l_cc_interface_rec,
1793                                                              x_msg_count,
1794                                                              x_msg_data,
1795                                                              l_return_status);
1796 
1797                             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1798                                RAISE FND_API.G_EXC_ERROR;
1799                             END IF;
1800         END IF;
1801       END IF;
1802     END IF; /* Confirmed State */
1803 
1804     /* Funds reservation in Provisional state */
1805     IF (p_cc_headers_rec.cc_state = 'PR')
1806     THEN
1807       IF
1808               ( ( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'N') AND
1809                         ( NVL(l_enc_amt,0) <= NVL(l_func_amt,0) )
1810                  )
1811             THEN
1812                           /* Increase Adjustment*/
1813 
1814               g_line_num := g_line_num + 1;
1815 
1816         l_cc_interface_rec.batch_line_num           :=  g_line_num;
1817         l_cc_interface_rec.cc_func_cr_amt           :=  NULL;
1818         l_cc_interface_rec.cc_func_dr_amt           :=  abs(l_func_amt - l_enc_amt);
1819         --l_cc_interface_rec.je_category_name         :=  'Provisional'; Bug Number 6341012 commented this line
1820 
1821         Insert_Interface_Row(l_cc_interface_rec,
1822                                                      x_msg_count,
1823                                                      x_msg_data,
1824                                                      l_return_status);
1825 
1826                                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1827                                    RAISE FND_API.G_EXC_ERROR;
1828                                 END IF;
1829 
1830             ELSIF
1831               ( ( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'N') AND
1832                         ( NVL(l_enc_amt,0) >= NVL(l_func_amt,0) )
1833                  )
1834       THEN
1835                           /* Decrease Adjustment */
1836               g_line_num := g_line_num + 1;
1837 
1838         l_cc_interface_rec.batch_line_num           :=  g_line_num;
1839         l_cc_interface_rec.cc_func_dr_amt           :=  NULL;
1840         l_cc_interface_rec.cc_func_cr_amt           :=  abs(l_func_amt - l_enc_amt);
1841         --l_cc_interface_rec.je_category_name         :=  'Provisional'; 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 
1852       END IF;
1853     END IF; /* Provisional state */
1854 
1855     /* Un-reserving Funds in Cancelled state */
1856 
1857     IF ( ( p_cc_headers_rec.cc_state = 'CL') AND
1858                ( NVL(l_enc_amt,0) >= 0)
1859        )
1860     THEN
1861             /* Decrease Adjustment */
1862       g_line_num := g_line_num + 1;
1863 
1864       l_cc_interface_rec.batch_line_num           :=  g_line_num;
1865       l_cc_interface_rec.cc_func_cr_amt           :=  NULL;
1866       l_cc_interface_rec.cc_func_dr_amt           :=  -1 * l_enc_amt;
1867       --l_cc_interface_rec.je_category_name         :=  'Provisional'; Bug Number 6341012 commented this line
1868 
1869       IF (p_type = 'A')
1870       THEN
1871                     l_cc_interface_rec.cc_transaction_date      :=  p_accounting_date;
1872       END IF;
1873 
1874       IF (p_type = 'P')
1875       THEN
1876 
1877                     IF (p_accounting_date IS NOT NULL)
1878         THEN
1879           IF (p_cc_pmt_fcst_rec.cc_det_pf_date < p_accounting_date)
1880           THEN
1881             l_cc_interface_rec.cc_transaction_date      :=  p_accounting_date;
1882           ELSE
1883             l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
1884           END IF;
1885         END IF;
1886 
1887                     IF (p_accounting_date IS NULL)
1888         THEN
1889           IF (p_cc_pmt_fcst_rec.cc_det_pf_date < sysdate)
1890           THEN
1891             l_cc_interface_rec.cc_transaction_date      :=  sysdate;
1892           ELSE
1893             l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
1894 
1895           END IF;
1896         END IF;
1897 
1898       END IF;
1899 
1900       Insert_Interface_Row(l_cc_interface_rec,
1901                                              x_msg_count,
1902                                              x_msg_data,
1903                                              l_return_status);
1904 
1905                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1906                            RAISE FND_API.G_EXC_ERROR;
1907                         END IF;
1908 
1909     END IF; /*Cancel State */
1910 
1911     /* Liquidating Funds in Complete state */
1912     IF ( (p_cc_headers_rec.cc_state = 'CT') AND
1913          ( NVL(p_cc_headers_rec.cc_encmbrnc_status,'N') = 'C') AND
1914                ( nvl(l_enc_amt,0) >= 0)
1915        )
1916     THEN
1917       g_line_num := g_line_num + 1;
1918 
1919       l_cc_interface_rec.batch_line_num           :=  g_line_num;
1920       l_cc_interface_rec.cc_func_dr_amt           :=  NULL;
1921       l_cc_interface_rec.cc_func_cr_amt           :=  l_unbilled_amt;
1922       --l_cc_interface_rec.je_category_name         :=  'Confirmed'; Bug Number 6341012 commented this line
1923 
1924       IF (p_type = 'A')
1925       THEN
1926                           l_cc_interface_rec.cc_transaction_date      :=  p_accounting_date;
1927       END IF;
1928 
1929       IF (p_type = 'P')
1930       THEN
1931 
1932                     IF (p_accounting_date IS NOT NULL)
1933         THEN
1934           IF (p_cc_pmt_fcst_rec.cc_det_pf_date < p_accounting_date)
1935           THEN
1936             l_cc_interface_rec.cc_transaction_date      :=  p_accounting_date;
1937           ELSE
1938             l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
1939           END IF;
1940         END IF;
1941 
1942                     IF (p_accounting_date IS NULL)
1943         THEN
1944           IF (p_cc_pmt_fcst_rec.cc_det_pf_date < sysdate)
1945           THEN
1946             l_cc_interface_rec.cc_transaction_date      :=  sysdate;
1947           ELSE
1948             l_cc_interface_rec.cc_transaction_date      :=  p_cc_pmt_fcst_rec.cc_det_pf_date;
1949 
1950           END IF;
1951         END IF;
1952 
1953       END IF;
1954 
1955       Insert_Interface_Row(l_cc_interface_rec,
1956                                              x_msg_count,
1957                                              x_msg_data,
1958                                              l_return_status);
1959 
1960                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1961                            RAISE FND_API.G_EXC_ERROR;
1962                         END IF;
1963 
1964     END IF; /* Completion of CC */
1965 
1966   END IF; /* p_mode = 'R' */
1967 
1968         RETURN;
1969 
1970 EXCEPTION
1971 
1972         WHEN FND_API.G_EXC_ERROR
1973         THEN
1974             x_return_status  := FND_API.G_RET_STS_ERROR;
1975 
1976             FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
1977                                         p_data  => x_msg_data );
1978 
1979             RETURN;
1980             IF (g_excep_level >=  g_debug_level ) THEN
1981                FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_ERROR Exception Raised');
1982             END IF;
1983 
1984         WHEN OTHERS
1985         THEN
1986             x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
1987 
1988             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1989             THEN
1990                FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
1991                                          l_api_name);
1992             END IF;
1993 
1994             FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
1995                                         p_data  => x_msg_data );
1996 
1997             IF ( g_unexp_level >= g_debug_level ) THEN
1998                FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
1999                FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
2000                FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
2001                FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
2002             END IF;
2003             RETURN;
2004 
2005 END Process_Interface_Row;
2006 
2007 PROCEDURE Execute_Budgetary_Ctrl
2008 (
2009   p_api_version                   IN       NUMBER,
2010   p_init_msg_list                 IN       VARCHAR2 := FND_API.G_FALSE,
2011   p_commit                        IN       VARCHAR2 := FND_API.G_FALSE,
2012   p_validation_level              IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
2013   x_return_status                 OUT NOCOPY      VARCHAR2,
2014   x_bc_status                     OUT NOCOPY      VARCHAR2 ,
2015   x_msg_count                     OUT NOCOPY      NUMBER,
2016   x_msg_data                      OUT NOCOPY      VARCHAR2,
2017   p_cc_header_id                  IN       NUMBER,
2018   p_accounting_date               IN       DATE,
2019   p_mode                          IN       VARCHAR2,
2020   p_notes                         IN       VARCHAR2
2021 )
2022 IS
2023   l_api_name                      CONSTANT VARCHAR2(30)   := 'Execute_Budgetary_Ctrl';
2024   l_api_version                   CONSTANT NUMBER         :=  1.0;
2025 
2026   l_enable_budg_control_flag      gl_sets_of_books.enable_budgetary_control_flag%TYPE;
2027   l_cc_bc_enable_flag             igc_cc_bc_enable.cc_bc_enable_flag%TYPE;
2028   l_req_encumbrance_flag        financials_system_params_all.req_encumbrance_flag%TYPE;
2029   l_purch_encumbrance_flag      financials_system_params_all.purch_encumbrance_flag%TYPE;
2030 --  l_cc_prov_enc_enable_flag       igc_cc_encmbrnc_ctrls.cc_prov_encmbrnc_enable_flag%TYPE;
2031 --  l_cc_conf_enc_enable_flag       igc_cc_encmbrnc_ctrls.cc_conf_encmbrnc_enable_flag%TYPE;
2032 
2033   l_cc_header_id          igc_cc_headers.cc_header_id%TYPE;
2034   l_cc_acct_line_id       igc_cc_acct_lines_v.cc_acct_line_id%TYPE;
2035   l_cc_det_pf_line_id       igc_cc_det_pf_v.cc_det_pf_line_id%TYPE;
2036   l_budget_dest_flag        igc_cc_interface.budget_dest_flag%TYPE;
2037   l_cc_transaction_date   igc_cc_interface.cc_transaction_date%TYPE;
2038 
2039   l_cc_acct_comp_func_amt     igc_cc_acct_lines_v.cc_acct_comp_func_amt%TYPE;
2040   l_cc_acct_enc_amt         igc_cc_acct_lines_v.cc_acct_encmbrnc_amt%TYPE;
2041 
2042   l_cc_det_pf_comp_func_amt   igc_cc_det_pf_v.cc_det_pf_comp_func_amt%TYPE;
2043   l_cc_det_pf_enc_amt         igc_cc_det_pf_v.cc_det_pf_encmbrnc_amt%TYPE;
2044 
2045   l_flag        BOOLEAN := FALSE;
2046   l_cbc_on      BOOLEAN := FALSE;
2047 
2048   l_rowid                         VARCHAR2(18);
2049 
2050   l_batch_result_code           VARCHAR2(3);
2051   l_encumbrance_on                VARCHAR2(1);
2052   l_encumbrance_status            VARCHAR2(1);
2053   l_bc_return_status              VARCHAR2(2);
2054   l_bc_success                    BOOLEAN;
2055 
2056   l_billed_amt                    NUMBER;
2057   l_func_billed_amt               NUMBER;
2058   l_interface_row_count       NUMBER;
2059   l_org_id                    NUMBER;
2060   l_sob_id                  NUMBER;
2061   l_cc_state                  VARCHAR2(2);
2062 
2063   l_cc_headers_rec                igc_cc_headers%ROWTYPE;
2064   l_cc_acct_lines_rec             igc_cc_acct_lines_v%ROWTYPE;
2065   l_cc_pmt_fcst_rec               igc_cc_det_pf_v%ROWTYPE;
2066   l_cc_interface_rec              igc_cc_interface%ROWTYPE;
2067 
2068   l_debug                   VARCHAR2(1);
2069 
2070   l_currency_code               gl_sets_of_books.currency_code%TYPE;
2071   l_error_message                 VARCHAR2(2000);
2072 
2073   l_cc_apprvl_status_old          igc_cc_headers.cc_apprvl_status%TYPE;
2074   l_encumbrance_status_old        VARCHAR2(1);
2075     -- bug 2689651, start 1
2076     l_pa_mode                       VARCHAR2(1);
2077     l_unencumbered_amount           NUMBER;
2078     l_project_id                    NUMBER;
2079     -- bug 2689651,  end 1
2080 
2081 -- -------------------------------------------------------------------------
2082 -- Variables to be used in calls to the table wrapper procedures.
2083 -- -------------------------------------------------------------------------
2084     l_validation_level              NUMBER;
2085     l_return_status                 VARCHAR2(1);
2086     l_msg_count                     NUMBER;
2087     l_msg_data                      VARCHAR2(2000);
2088     l_row_id                        VARCHAR2(18);
2089     l_update_flag                   VARCHAR2(1);
2090     l_update_login                  igc_cc_acct_lines.last_update_login%TYPE;
2091     l_update_by                     igc_cc_acct_lines.last_updated_by%TYPE;
2092 
2093 -- -------------------------------------------------------------------------
2094 -- Record definitions to be used for CURSORS getting single record for
2095 -- the table wrappers.  These record definitions are NOT the same as the
2096 -- ones above when getting data from the views.
2097 -- -------------------------------------------------------------------------
2098     l_det_pf_rec                    igc_cc_det_pf%ROWTYPE;
2099     l_acct_line_rec                 igc_cc_acct_lines%ROWTYPE;
2100 
2101     e_cc_invalid_set_up             EXCEPTION;
2102   e_no_budgetary_control          EXCEPTION;
2103   e_cc_not_found                  EXCEPTION;
2104   e_invalid_mode                  EXCEPTION;
2105   e_bc_execution                  EXCEPTION;
2106   e_update                        EXCEPTION;
2107   e_delete                        EXCEPTION;
2108   e_sbc_data                      EXCEPTION;
2109   e_sbc_data1                     EXCEPTION;
2110   e_cbc_data                      EXCEPTION;
2111   e_cbc_data1                     EXCEPTION;
2112   e_process_row                   EXCEPTION;
2113   e_update_cc_tables              EXCEPTION;
2114   e_others                      EXCEPTION;
2115   e_check_budg_ctrl             EXCEPTION;
2116 
2117   /*Budgetary Control Interface   */
2118   CURSOR c_cc_interface(t_cc_header_id NUMBER) IS
2119   SELECT distinct cc_header_id, cc_acct_line_id, cc_det_pf_line_id, budget_dest_flag, cc_transaction_date
2120   FROM igc_cc_interface
2121   WHERE cc_header_id =  t_cc_header_id AND
2122         actual_flag = 'E';
2123 
2124         /* Current year payment forecast lines only */
2125 
2126   /* Contract Commitment detail payment forecast  */
2127   CURSOR c_payment_forecast(t_cc_acct_line_id NUMBER) IS
2128         -- Performance Tuning, Replaced view igc_cc_det_pf_v with
2129         -- igc_cc_det_pf
2130   -- SELECT *
2131   -- FROM igc_cc_det_pf_v
2132   -- WHERE cc_acct_line_id =  t_cc_acct_line_id;
2133 
2134         SELECT ccdpf.ROWID,
2135                ccdpf.cc_det_pf_line_id,
2136                ccdpf.cc_det_pf_line_num,
2137                NULL  cc_acct_line_num,
2138                ccdpf.cc_acct_line_id,
2139                NULL  parent_det_pf_line_num,
2140                ccdpf.parent_det_pf_line_id,
2141                ccdpf.parent_acct_line_id,
2142                ccdpf.cc_det_pf_entered_amt,
2143                ccdpf.cc_det_pf_func_amt,
2144                ccdpf.cc_det_pf_date,
2145                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,
2146                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,
2147                ccdpf.cc_det_pf_unbilled_amt,
2148                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,
2149                ccdpf.cc_det_pf_encmbrnc_amt,
2150                ( IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT ( p_cc_header_id, NVL(ccdpf.cc_det_pf_entered_amt,0) ) -
2151                NVL(ccdpf.cc_det_pf_encmbrnc_amt,0) ) cc_det_pf_unencmbrd_amt ,
2152                ccdpf.cc_det_pf_encmbrnc_date,
2153                ccdpf.cc_det_pf_encmbrnc_status,
2154                ccdpf.context,
2155                ccdpf.attribute1,
2156                ccdpf.attribute2,
2157                ccdpf.attribute3,
2158                ccdpf.attribute4,
2159                ccdpf.attribute5,
2160                ccdpf.attribute6,
2161                ccdpf.attribute7,
2162                ccdpf.attribute8,
2163                ccdpf.attribute9,
2164                ccdpf.attribute10,
2165                ccdpf.attribute11,
2166                ccdpf.attribute12,
2167                ccdpf.attribute13,
2168                ccdpf.attribute14,
2169                ccdpf.attribute15,
2170                ccdpf.last_update_date,
2171                ccdpf.last_updated_by,
2172                ccdpf.last_update_login,
2173                ccdpf.creation_date,
2174                ccdpf.created_by
2175         FROM igc_cc_det_pf ccdpf
2176         WHERE ccdpf.cc_acct_line_id =  t_cc_acct_line_id;
2177 
2178                /* Current year payment forecast lines only */
2179 
2180   /* Contract Commitment account lines  */
2181 
2182 -- Bug 2885953 - cursor below amended for performance enhancements
2183 --    CURSOR c_account_lines(t_cc_header_id NUMBER) IS
2184 --    SELECT *
2185 --        FROM  igc_cc_acct_lines_v ccac
2186 --        WHERE ccac.cc_header_id = t_cc_header_id;
2187   CURSOR c_account_lines(t_cc_header_id NUMBER) IS
2188   SELECT ccac.ROWID,
2189                ccac.cc_header_id,
2190                NULL org_id,
2191                NULL cc_type,
2192                NULL cc_type_code,
2193                NULL cc_num,
2194                ccac.cc_acct_line_id,
2195                ccac.cc_acct_line_num,
2196                ccac.cc_acct_desc,
2197                ccac.parent_header_id,
2198                ccac.parent_acct_line_id,
2199                NULL parent_cc_acct_line_num,
2200                NULL cc_budget_acct_desc,
2201                ccac.cc_budget_code_combination_id,
2202                NULL cc_charge_acct_desc,
2203                ccac.cc_charge_code_combination_id,
2204                ccac.cc_acct_entered_amt,
2205                ccac.cc_acct_func_amt,
2206                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_billed_amt,
2207                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_func_billed_amt,
2208                ccac.cc_acct_encmbrnc_amt,
2209                (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,
2210                ccac.cc_acct_unbilled_amt,
2211                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0))
2212                cc_acct_comp_func_amt,
2213                NULL project_number,
2214                ccac.project_id,
2215                NULL task_number,
2216                ccac.task_id,
2217                ccac.expenditure_type,
2218                NULL expenditure_org_name,
2219                ccac.expenditure_org_id,
2220                ccac.expenditure_item_date,
2221                ccac.cc_acct_taxable_flag,
2222                NULL tax_name,
2223                ccac.tax_id,
2224                ccac.cc_acct_encmbrnc_status,
2225                ccac.cc_acct_encmbrnc_date,
2226                ccac.context,
2227                ccac.attribute1,
2228                ccac.attribute2,
2229                ccac.attribute3,
2230                ccac.attribute4,
2231                ccac.attribute5,
2232                ccac.attribute6,
2233                ccac.attribute7,
2234                ccac.attribute8,
2235                ccac.attribute9,
2236                ccac.attribute10,
2237                ccac.attribute11,
2238                ccac.attribute12,
2239                ccac.attribute13,
2240                ccac.attribute14,
2241                ccac.attribute15,
2242                ccac.created_by,
2243                ccac.creation_date,
2244                ccac.last_updated_by,
2245                ccac.last_update_date,
2246                ccac.last_update_login,
2247                ccac.cc_func_withheld_amt,
2248                ccac.cc_ent_withheld_amt,
2249                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_func_withheld_amt,0)) cc_comp_func_whld_amt,
2250                ccac.Tax_Classif_Code
2251         FROM  igc_cc_acct_lines ccac
2252         WHERE ccac.cc_header_id = t_cc_header_id;
2253 
2254 -- -------------------------------------------------------------------------
2255 -- Cursors used for obtaining a single line to be passed into the wrapper
2256 -- functions for updating, inserting, deleting records from tables.
2257 -- -------------------------------------------------------------------------
2258         CURSOR c_cc_acct_line IS
2259           SELECT *
2260             FROM igc_cc_acct_lines
2261            WHERE cc_acct_line_id = l_cc_acct_line_id;
2262 
2263         CURSOR c_det_pf_line IS
2264           SELECT *
2265             FROM igc_cc_det_pf
2266            WHERE cc_det_pf_line_id = l_cc_det_pf_line_id;
2267 
2268         CURSOR c_cc_acct_line_rec_input IS
2269           SELECT *
2270             FROM igc_cc_acct_lines
2271            WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
2272 
2273         CURSOR c_det_pf_line_rec_input IS
2274           SELECT *
2275             FROM igc_cc_det_pf
2276            WHERE cc_det_pf_line_id = l_cc_pmt_fcst_rec.cc_det_pf_line_id;
2277 
2278    -- bug 2689651,  start 2
2279    CURSOR c_unencumbered_amount(cp_cc_header_id   igc_cc_headers.cc_header_id%TYPE)
2280    IS
2281    SELECT SUM(( IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(cp_cc_header_id, NVL(cc_det_pf_entered_amt,0) ) -
2282                NVL(cc_det_pf_encmbrnc_amt,0) )) cc_det_pf_unencmbrd_amt
2283    FROM igc_cc_det_pf
2284    WHERE cc_acct_line_id IN (SELECT cc_acct_line_id
2285                              FROM igc_cc_acct_lines
2286                              WHERE cc_header_id = cp_cc_header_id);
2287    -- bug 2689651,  end 2
2288 
2289    l_full_path         VARCHAR2(255);
2290 BEGIN
2291     l_full_path := g_path || 'Execute_Budgetary_Ctrl';
2292 
2293   SAVEPOINT Execute_Budgetary_Ctrl1;
2294 
2295   IF FND_API.to_Boolean(p_init_msg_list)
2296   THEN
2297     FND_MSG_PUB.initialize;
2298   END IF;
2299 
2300   IF NOT FND_API.Compatible_API_Call(l_api_version,
2301              p_api_version,
2302              l_api_name,
2303              G_PKG_NAME)
2304   THEN
2305     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2306   END IF;
2307 
2308   x_return_status           := FND_API.G_RET_STS_SUCCESS;
2309   x_bc_status               := FND_API.G_TRUE;
2310   g_line_num                := 0;
2311 --        l_debug                   := FND_PROFILE.VALUE('IGC_DEBUG_ENABLED');
2312 --        IF (l_debug = 'Y') THEN
2313     IF (g_debug_mode = 'Y') THEN
2314            l_debug := FND_API.G_TRUE;
2315     ELSE
2316            l_debug := FND_API.G_FALSE;
2317     END IF;
2318 --        IGC_MSGS_PKG.g_debug_mode := FND_API.TO_BOOLEAN(l_debug);
2319     l_validation_level        := p_validation_level;
2320     l_update_login            := FND_GLOBAL.LOGIN_ID;
2321     l_update_by               := FND_GLOBAL.USER_ID;
2322 
2323   IF ( (p_mode <> 'C') AND (p_mode <> 'R') )
2324   THEN
2325     fnd_message.set_name('IGC', 'IGC_CC_INVALID_MODE');
2326     fnd_message.set_token('MODE', p_mode,TRUE);
2327         IF(g_error_level >= g_debug_level) THEN
2328                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
2329         END IF;
2330     fnd_msg_pub.add;
2331       RAISE E_INVALID_MODE;
2332   END IF;
2333 
2334     BEGIN
2335     SELECT *
2336     INTO l_cc_headers_rec
2337     FROM igc_cc_headers
2338     WHERE cc_header_id = p_cc_header_id;
2339 
2340     l_cc_apprvl_status_old   := l_cc_headers_rec.cc_apprvl_status;
2341                 l_encumbrance_status_old := l_cc_headers_rec.cc_encmbrnc_status;
2342   EXCEPTION
2343     WHEN OTHERS
2344     THEN
2345       fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
2346       fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
2347                     IF(g_error_level >= g_debug_level) THEN
2348                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
2349                     END IF;
2350       fnd_msg_pub.add;
2351       RAISE E_CC_NOT_FOUND;
2352 
2353   END;
2354 
2355   IF (l_cc_apprvl_status_old <> 'IP')
2356   THEN
2357            l_cc_headers_rec.cc_apprvl_status   := 'IP';
2358            l_cc_headers_rec.last_update_date   := SYSDATE;
2359            l_cc_headers_rec.last_update_login  := l_update_login;
2360            l_cc_headers_rec.last_updated_by    := l_update_by;
2361 
2362            SELECT rowid
2363            INTO l_row_id
2364            FROM igc_cc_headers
2365            WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
2366 
2367            Header_Wrapper (p_api_version      => l_api_version,
2368                            p_init_msg_list    => FND_API.G_FALSE,
2369                            p_commit           => FND_API.G_FALSE,
2370                            p_validation_level => l_validation_level,
2371                            x_return_status    => l_return_status,
2372                            x_msg_count        => l_msg_count,
2373                            x_msg_data         => l_msg_data,
2374                            x_rowid            => l_row_id,
2375                            p_action_flag      => 'U',
2376                            p_cc_header_rec    => l_cc_headers_rec,
2377                            p_update_flag      => l_update_flag
2378                           );
2379 
2380            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2381               x_msg_data  := l_msg_data;
2382               x_msg_count := l_msg_count;
2383               IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2384               THEN
2385                  FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2386                                            l_api_name);
2387               END IF;
2388               RAISE E_UPDATE;
2389            END IF;
2390 
2391   END IF;
2392 
2393   IF (l_cc_headers_rec.cc_type <> 'R')
2394   THEN
2395     BEGIN
2396       DELETE igc_cc_interface
2397       WHERE cc_header_id = p_cc_header_id AND
2398             actual_flag = 'E';
2399     EXCEPTION
2400       WHEN OTHERS THEN
2401                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2402                   FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2403                                             l_api_name);
2404                END IF;
2405                IF ( g_unexp_level >= g_debug_level ) THEN
2406                   FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
2407                   FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
2408                   FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
2409                   FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
2410                END IF;
2411                RAISE E_DELETE;
2412     END;
2413   END IF;
2414 
2415   IF FND_API.To_Boolean(p_commit) THEN
2416        COMMIT WORK;
2417     END IF;
2418 
2419   SAVEPOINT Execute_Budgetary_Ctrl2;
2420 
2421   l_org_id   := l_cc_headers_rec.org_id;
2422   l_sob_id   := l_cc_headers_rec.set_of_books_id;
2423   l_cc_State := l_cc_headers_rec.cc_state;
2424 
2425   Check_Budgetary_Ctrl_On(1.0,
2426                             FND_API.G_FALSE,
2427                             FND_API.G_VALID_LEVEL_FULL,
2428                             x_return_status,
2429                             x_msg_count,
2430                             x_msg_data,
2431                             l_org_id,
2432                             l_sob_id,
2433                             l_cc_state,
2434                             l_encumbrance_on
2435                             );
2436 
2437   IF (x_return_status = FND_API.G_RET_STS_SUCCESS)
2438   THEN
2439     IF (l_encumbrance_on = FND_API.G_FALSE)
2440     THEN
2441       x_return_status := FND_API.G_RET_STS_SUCCESS;
2442       x_bc_status     := FND_API.G_TRUE;
2443       RETURN;
2444     END IF;
2445   ELSE
2446         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2447         THEN
2448            FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2449                                      l_api_name);
2450         END IF;
2451     RAISE E_CHECK_BUDG_CTRL;
2452   END IF;
2453 
2454     BEGIN
2455     SELECT  enable_budgetary_control_flag,currency_code
2456     INTO    l_enable_budg_control_flag, l_currency_code
2457     FROM    gl_sets_of_books
2458     WHERE   set_of_books_id = l_cc_headers_rec.set_of_books_id;
2459   EXCEPTION
2460     WHEN NO_DATA_FOUND
2461     THEN
2462       fnd_message.set_name('IGC', 'IGC_CC_INVALID_GL_DATA');
2463                     IF(g_error_level >= g_debug_level) THEN
2464                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
2465                     END IF;
2466       fnd_msg_pub.add;
2467       RAISE E_CC_INVALID_SET_UP;
2468   END;
2469 
2470   /* Check whether CBC is turned on */
2471   BEGIN
2472     l_cbc_on := FALSE;
2473     l_cc_bc_enable_flag := 'N';
2474 
2475     SELECT  cc_bc_enable_flag
2476     INTO    l_cc_bc_enable_flag
2477     FROM    igc_cc_bc_enable
2478     WHERE   set_of_books_id = l_cc_headers_rec.set_of_books_id;
2479   EXCEPTION
2480     WHEN NO_DATA_FOUND
2481     THEN
2482       l_cc_bc_enable_flag := 'N';
2483   END;
2484 
2485   IF (NVL(l_cc_bc_enable_flag,'N') = 'Y')
2486   THEN
2487     l_cbc_on := TRUE;
2488   END IF;
2489 
2490   /* Begin fix for bug 1509057 */
2491   IF (l_cc_headers_rec.cc_state = 'PR')
2492   THEN
2493     l_encumbrance_status := 'P';
2494   END IF;
2495 
2496   IF (l_cc_headers_rec.cc_state = 'CL')
2497   THEN
2498     l_encumbrance_status := 'N';
2499   END IF;
2500 
2501   IF (l_cc_headers_rec.cc_state = 'CM')
2502   THEN
2503     l_encumbrance_status := 'C';
2504   END IF;
2505 
2506         IF (l_cc_headers_rec.cc_state = 'CT')
2507   THEN
2508     l_encumbrance_status := 'N';
2509   END IF;
2510 
2511   /* End fix for bug 1509057 */
2512   IF (l_cc_headers_rec.cc_type = 'R')
2513   THEN
2514     Execute_Rel_Budgetary_Ctrl(1.0,
2515                                    FND_API.G_FALSE,
2516                                    FND_API.G_FALSE,
2517                                    FND_API.G_VALID_LEVEL_FULL,
2518                                    x_return_status,
2519                                    x_msg_count,
2520                                    x_msg_data,
2521                                    p_cc_header_id,
2522                                    p_accounting_date,
2523                                    l_cbc_on,
2524                                    l_currency_code
2525                                    );
2526 
2527     IF (x_return_status = FND_API.G_RET_STS_SUCCESS)
2528     THEN
2529       x_bc_status     := FND_API.G_TRUE;
2530     ELSE
2531       x_bc_status     := FND_API.G_FALSE;
2532     END IF;
2533 
2534     IF (l_cc_apprvl_status_old <> 'IP')
2535     THEN
2536       /* begin fix for bug 1567120 */
2537             BEGIN
2538         SELECT *
2539         INTO l_cc_headers_rec
2540         FROM igc_cc_headers
2541                     WHERE cc_header_id = p_cc_header_id;
2542           EXCEPTION
2543             WHEN OTHERS THEN
2544           fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
2545           fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
2546                     IF(g_error_level >= g_debug_level) THEN
2547                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
2548                     END IF;
2549           fnd_msg_pub.add;
2550           RAISE E_CC_NOT_FOUND;
2551       END;
2552 
2553       /* end fix for bug 1567120 */
2554             l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
2555             l_cc_headers_rec.last_update_date   := SYSDATE;
2556             l_cc_headers_rec.last_update_login  := l_update_login;
2557             l_cc_headers_rec.last_updated_by    := l_update_by;
2558 
2559             SELECT rowid
2560             INTO l_row_id
2561             FROM igc_cc_headers
2562             WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
2563 
2564             Header_Wrapper (p_api_version      => l_api_version,
2565                             p_init_msg_list    => FND_API.G_FALSE,
2566                             p_commit           => FND_API.G_FALSE,
2567                             p_validation_level => l_validation_level,
2568                             x_return_status    => l_return_status,
2569                             x_msg_count        => l_msg_count,
2570                             x_msg_data         => l_msg_data,
2571                             x_rowid            => l_row_id,
2572                             p_action_flag      => 'U',
2573                             p_cc_header_rec    => l_cc_headers_rec,
2574                             p_update_flag      => l_update_flag
2575                             );
2576 
2577             IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2578                 x_msg_data  := l_msg_data;
2579                 x_msg_count := l_msg_count;
2580                       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2581                       THEN
2582                          FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2583                                                    l_api_name);
2584                       END IF;
2585                       RAISE E_UPDATE;
2586                    END IF;
2587 
2588                    IF FND_API.To_Boolean(p_commit)
2589                    THEN
2590                       COMMIT WORK;
2591                    END IF;
2592 
2593     END IF;
2594     RETURN;
2595   END IF;
2596 
2597   SAVEPOINT Execute_Budgetary_Ctrl3;
2598   /* Process Interface Rows */
2599   OPEN c_account_lines(p_cc_header_id);
2600   LOOP
2601     FETCH c_account_lines INTO l_cc_acct_lines_rec;
2602     EXIT WHEN c_account_lines%NOTFOUND;
2603       IF ( (l_cbc_on = TRUE)  AND (l_enable_budg_control_flag = 'Y') )
2604     THEN
2605       IF ( ( (NVL(l_cc_acct_lines_rec.cc_acct_encmbrnc_status,'N') <> 'P') AND
2606              (l_cc_headers_rec.cc_state = 'PR')
2607             )
2608             OR
2609             ( ( (NVL(l_cc_acct_lines_rec.cc_acct_encmbrnc_status,'N') <> 'C') OR
2610                 (NVL(l_cc_acct_lines_rec.cc_acct_encmbrnc_status,'N')  = 'T') OR
2611                 (NVL(l_cc_acct_lines_rec.cc_acct_encmbrnc_status,'N')  = 'N')
2612                                  )
2613                                  AND
2614               (l_cc_headers_rec.cc_state = 'CM')
2615              )
2616             OR
2617              ( (l_cc_headers_rec.cc_state = 'CL') AND
2618                                  /* Fix for bug 1722709 */
2619                                  (l_cc_acct_lines_rec.cc_acct_encmbrnc_date IS NOT NULL)
2620                                )
2621             OR
2622              (l_cc_headers_rec.cc_state = 'CT')
2623           )
2624       THEN
2625         BEGIN
2626               Process_Interface_Row(
2627                                           l_currency_code,
2628                                           l_cc_headers_rec,
2629                                           l_cc_acct_lines_rec,
2630                                           l_cc_pmt_fcst_rec,
2631                                           p_mode,
2632                                           'A',
2633                                           p_accounting_date,
2634                                           x_msg_count,
2635                                           x_msg_data,
2636                                           l_return_status);
2637                      IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
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_PROCESS_ROW;
2644                      END IF;
2645         END;
2646       END IF;
2647     END IF;
2648 
2649     OPEN c_payment_forecast(l_cc_acct_lines_rec.cc_acct_line_id);
2650     LOOP
2651       FETCH c_payment_forecast INTO l_cc_pmt_fcst_rec;
2652       EXIT WHEN c_payment_forecast%NOTFOUND;
2653       IF (l_enable_budg_control_flag = 'Y')
2654       THEN
2655         IF ( ( (NVL(l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status,'N') <> 'P') AND
2656                      (l_cc_headers_rec.cc_state = 'PR')
2657                                       )
2658               OR
2659                     ( ( (NVL(l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status,'N') <> 'C') OR
2660                         (NVL(l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status,'N')  = 'T') OR
2661                         (NVL(l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status,'N')  = 'N')
2662                                          ) AND
2663                        (l_cc_headers_rec.cc_state = 'CM')
2664                     )
2665               OR
2666                           (l_cc_headers_rec.cc_state = 'CT')
2667                     OR
2668                           ( (l_cc_headers_rec.cc_state = 'CL') AND
2669                                         /* Fix for bug 1722709 */
2670                                         (l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_date IS NOT NULL)
2671                                       )
2672                         )
2673         THEN
2674           BEGIN
2675                    Process_Interface_Row(
2676                                                l_currency_code,
2677                                                l_cc_headers_rec,
2678                                                l_cc_acct_lines_rec,
2679                                                l_cc_pmt_fcst_rec,
2680                                                p_mode,
2681                                                'P',
2682                                                p_accounting_date,
2683                                                x_msg_count,
2684                                                x_msg_data,
2685                                                l_return_status);
2686 
2687                            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2688                               IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2689                               THEN
2690                                  FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2691                                                            l_api_name);
2692                               END IF;
2693                               RAISE E_PROCESS_ROW;
2694                            END IF;
2695           END;
2696         END IF;
2697           END IF;
2698     END LOOP;
2699     CLOSE c_payment_forecast;
2700   END LOOP;
2701   CLOSE c_account_lines;
2702 
2703 -- COMMIT is suppose to be done here.....  IF NOT then Bug 1543646 will happen.
2704     COMMIT WORK;
2705 
2706   l_interface_row_count := 0;
2707 
2708   select count(*)
2709   INTO l_interface_row_count
2710   FROM igc_cc_interface
2711   WHERE cc_header_id = p_cc_header_id;
2712 
2713   SAVEPOINT Execute_Budgetary_Ctrl4;
2714   /* Execute budgetary control */
2715 
2716     BEGIN
2717         IF (l_interface_row_count <> 0)
2718     THEN
2719       l_batch_result_code := NULL;
2720 
2721             -- bug 2689651, start 3
2722             OPEN c_unencumbered_amount(l_cc_headers_rec.cc_header_id);
2723             FETCH c_unencumbered_amount INTO l_unencumbered_amount;
2724             IF c_unencumbered_amount%NOTFOUND THEN
2725                l_unencumbered_amount := -1;
2726             END IF;
2727             CLOSE c_unencumbered_amount;
2728             -- set the pa mode based on whether a payment shift has happened
2729             -- if yes mode is F else default p_mode
2730             l_pa_mode := p_mode;
2731             IF (p_mode <> 'C' AND l_unencumbered_amount = 0) THEN
2732                l_pa_mode := 'F';
2733             ELSE
2734                l_pa_mode := p_mode;
2735             END IF;
2736             -- bug 2689651,  end 3
2737 
2738             -- The call to IGCFCK updated to IGCPAFCK for bug 1844214.
2739             -- Bidisha S , 21 June 2001
2740             -- bug 2689651, change p_mode to l_pa_mode
2741 --      l_bc_success := IGC_CBC_FUNDS_CHECKER.IGCFCK( p_sobid      =>  l_cc_headers_rec.set_of_books_id,
2742       l_bc_success := IGC_CBC_PA_BC_PKG.IGCPAFCK( p_sobid             =>  l_cc_headers_rec.set_of_books_id,
2743                                               p_header_id         =>  l_cc_headers_rec.cc_header_id,
2744                                                         p_mode              => l_pa_mode,
2745                                                         p_actual_flag       =>  'E',
2746                                         p_ret_status        =>  l_bc_return_status,
2747                                         p_batch_result_code => l_batch_result_code,
2748                                         p_doc_type          =>  'CC',
2749                                         p_debug             =>   l_debug,
2750                                           p_conc_proc         =>   FND_API.G_FALSE);
2751              IF l_bc_success = TRUE  --No fatal errors
2752               AND substr(l_bc_return_status,1,1) IN ('N','S','A') --CBC successfull
2753                     AND substr(l_bc_return_status,2,1) IN ('N','S','A') --SBC successfull
2754                         AND l_interface_row_count <> 0 -- remained from the previous version ????
2755              THEN
2756                  x_bc_status     := FND_API.G_TRUE;
2757              ELSE
2758                  x_bc_status     := FND_API.G_FALSE;
2759              END IF;
2760 
2761         ELSE
2762       x_return_status := FND_API.G_RET_STS_SUCCESS;
2763       x_bc_status     := FND_API.G_TRUE;
2764         END IF;
2765 
2766   /*EXCEPTION
2767     WHEN OTHERS
2768     THEN
2769       RAISE E_OTHERS;*/
2770     END;
2771 
2772 --        IF (IGC_MSGS_PKG.g_debug_mode) THEN
2773     IF (g_debug_mode = 'Y') THEN
2774 --           g_debug_msg := ' Finished call to IGCFCK ';
2775            g_debug_msg := ' Finished call to IGCPAFCK ';
2776            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2777     END IF;
2778 
2779   /* Budgetary Control Successfully executed */
2780   /* Update CC Tables with feedback from igc_cc_interface */
2781 
2782   /* If mode = Reservation then update CC Tables encumbrance status, encumbered_amount */
2783 
2784   BEGIN
2785 
2786   IF ( (p_mode = 'R') AND (x_bc_status = FND_API.G_TRUE) AND (l_interface_row_count <> 0) )
2787   THEN
2788 
2789     OPEN c_cc_interface(p_cc_header_id);
2790 
2791     LOOP
2792       FETCH c_cc_interface
2793                          INTO l_cc_header_id,
2794                               l_cc_acct_line_id,
2795                               l_cc_det_pf_line_id,
2796             l_budget_dest_flag,
2797                               l_cc_transaction_date;
2798 
2799 --                        IF (IGC_MSGS_PKG.g_debug_mode) THEN
2800                         IF (g_debug_mode = 'Y') THEN
2801                            g_debug_msg := ' Fetching Interface records ';
2802                            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2803                         END IF;
2804 
2805       EXIT WHEN c_cc_interface%NOTFOUND;
2806 
2807 --                        IF (IGC_MSGS_PKG.g_debug_mode) THEN
2808                         IF (g_debug_mode = 'Y') THEN
2809                            g_debug_msg := ' Check acct line id 1.......';
2810                            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2811                         END IF;
2812 
2813       /* Update CC Tables with the feedback */
2814 /*      IF ((l_cc_acct_line_id IS NOT NULL) AND
2815             (l_budget_dest_flag = 'C'))
2816       THEN */--Bug 5464993. Update amounts even when cbc is disabled
2817 
2818                                 -- Performance Tuning, Replaced view
2819                                 -- igc_cc_acct_lines_v with
2820                                 -- igc_cc_acct_lines and replaced the line
2821                                 -- below.
2822         -- SELECT cc_acct_comp_func_amt
2823                         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
2824       INTO  l_cc_acct_comp_func_amt
2825       FROM igc_cc_acct_lines ccal
2826       WHERE ccal.cc_acct_line_id = l_cc_acct_line_id;
2827 
2828 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
2829                         IF (g_debug_mode = 'Y') THEN
2830                               g_debug_msg := ' Getting CC_ACCT_COMP_FUNC_AMT';
2831                               Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2832                         END IF;
2833 
2834 -- ----------------------------------------------------------------------------------
2835 -- Obtain the actual account line record based upon the data that was just retrieved
2836 -- from the view.
2837 -- ----------------------------------------------------------------------------------
2838                         OPEN c_cc_acct_line;
2839                         FETCH c_cc_acct_line
2840                         INTO l_acct_line_rec;
2841 
2842                         IF (c_cc_acct_line%NOTFOUND) THEN
2843                               EXIT;
2844                         END IF;
2845 
2846                         CLOSE c_cc_acct_line;
2847 
2848       IF (l_cc_headers_rec.cc_state = 'CL') THEN
2849 
2850         l_cc_acct_enc_amt  := 0;
2851 
2852                                         -- Added for Bug 3219208
2853                                         -- Entered Amt should be set to 0 when the CC is being
2854                                         -- cancelled.
2855         l_acct_line_rec.cc_acct_entered_amt     := 0;
2856                   l_acct_line_rec.cc_acct_func_amt        := 0;
2857 
2858                 IF l_budget_dest_flag = 'C' THEN
2859                                         l_acct_line_rec.cc_acct_encmbrnc_amt    := 0;
2860                                         l_acct_line_rec.cc_acct_encmbrnc_status := 'N';
2861                                         l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2862         END IF;
2863                                 l_acct_line_rec.last_update_date        := SYSDATE;
2864                                 l_acct_line_rec.last_update_login       := l_update_login;
2865                                 l_acct_line_rec.last_updated_by         := l_update_by;
2866 
2867       ELSIF (l_cc_headers_rec.cc_state = 'PR') THEN
2868 
2869                 IF l_budget_dest_flag = 'C' THEN
2870           l_cc_acct_enc_amt  := l_cc_acct_comp_func_amt;
2871                                   l_acct_line_rec.cc_acct_encmbrnc_amt    := l_cc_acct_comp_func_amt;
2872                                   l_acct_line_rec.cc_acct_encmbrnc_status := l_encumbrance_status;
2873                                   l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2874                                   l_acct_line_rec.last_update_date        := SYSDATE;
2875                             l_acct_line_rec.last_update_login       := l_update_login;
2876                                   l_acct_line_rec.last_updated_by         := l_update_by;
2877         END IF;
2878 
2879       ELSIF (l_cc_headers_rec.cc_state = 'CM') THEN
2880 
2881                 IF l_budget_dest_flag = 'C' THEN
2882           l_cc_acct_enc_amt  := l_cc_acct_comp_func_amt;
2883                                         l_acct_line_rec.cc_acct_encmbrnc_amt    := l_cc_acct_comp_func_amt;
2884                                         l_acct_line_rec.cc_acct_encmbrnc_status := l_encumbrance_status;
2885                                         l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2886                                   l_acct_line_rec.last_update_date        := SYSDATE;
2887                                   l_acct_line_rec.last_update_login       := l_update_login;
2888                                   l_acct_line_rec.last_updated_by         := l_update_by;
2889         END IF;
2890 
2891       ELSIF (l_cc_headers_rec.cc_state = 'CT') THEN
2892 
2893               l_billed_amt      := 0;
2894               l_func_billed_amt := 0;
2895 
2896                                 -- Performance Tuning, Replaced view
2897                                 -- igc_cc_acct_lines_v with
2898                                 -- igc_cc_acct_lines and replaced the line
2899                                 -- below.
2900         -- SELECT cc_acct_billed_amt ,cc_acct_func_billed_amt
2901                               SELECT IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_billed_amt,
2902                                    IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT( ccal.cc_acct_line_id) cc_acct_func_billed_amt
2903         INTO   l_billed_amt, l_func_billed_amt
2904         FROM   igc_cc_acct_lines ccal
2905         WHERE  ccal.cc_acct_line_id = l_cc_acct_line_id;
2906 
2907         IF (l_currency_code <> l_cc_headers_rec.currency_code)
2908         THEN
2909                                   l_cc_acct_comp_func_Amt := l_func_billed_amt;
2910                                   l_cc_acct_enc_Amt       := l_func_billed_amt;
2911                                         l_acct_line_rec.cc_acct_entered_amt     := l_billed_amt;
2912                                         l_acct_line_rec.cc_acct_func_amt        := l_func_billed_amt;
2913                   IF l_budget_dest_flag = 'C' THEN
2914                                                 l_acct_line_rec.cc_acct_encmbrnc_amt    := l_func_billed_amt;
2915                                                 l_acct_line_rec.cc_acct_encmbrnc_status := 'N';
2916                                           l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2917           END IF;
2918                                         l_acct_line_rec.last_update_date        := SYSDATE;
2919                                         l_acct_line_rec.last_update_login       := l_update_login;
2920                                         l_acct_line_rec.last_updated_by         := l_update_by;
2921 
2922                                                 -- 2043221, Bidisha , 19 Oct 2001
2923                                                 -- Withheld amount should be set to 0 if the CC
2924                                                 -- is completed.
2925                                         l_acct_line_rec.cc_func_withheld_amt    := 0;
2926                                         l_acct_line_rec.cc_ent_withheld_amt     := 0;
2927         ELSE
2928                                   l_cc_acct_comp_func_Amt := l_func_billed_amt;
2929                                   l_cc_acct_enc_Amt       := l_func_billed_amt;
2930                                         l_acct_line_rec.cc_acct_entered_amt     := l_func_billed_amt;
2931                                         l_acct_line_rec.cc_acct_func_amt        := l_func_billed_amt;
2932 
2933                   IF l_budget_dest_flag = 'C' THEN
2934                                                 l_acct_line_rec.cc_acct_encmbrnc_amt    := l_func_billed_amt;
2935                                           l_acct_line_rec.cc_acct_encmbrnc_status := 'N';
2936                                           l_acct_line_rec.cc_acct_encmbrnc_date   := l_cc_transaction_date;
2937           END IF;
2938                                         l_acct_line_rec.last_update_date        := SYSDATE;
2939                                         l_acct_line_rec.last_update_login       := l_update_login;
2940                                         l_acct_line_rec.last_updated_by         := l_update_by;
2941 
2942                                                 -- 2043221, Bidisha , 19 Oct 2001
2943                                                 -- Withheld amount should be set to 0 if the CC
2944                                                 -- is completed.
2945                                         l_acct_line_rec.cc_func_withheld_amt    := 0;
2946                                         l_acct_line_rec.cc_ent_withheld_amt     := 0;
2947         END IF;
2948 
2949                         ELSE
2950 
2951 -- -----------------------------------------------------------------------------
2952 -- Unknown CC State in the Header record for the Acct Line update.  Exit Process.
2953 -- -----------------------------------------------------------------------------
2954 --                                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
2955                                 IF (g_debug_mode = 'Y') THEN
2956                                       g_debug_msg := ' Bad CC State for Update';
2957                                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2958                                 END IF;
2959                                 RAISE E_UPDATE_CC_TABLES;
2960 
2961       END IF;
2962 
2963                          SELECT rowid
2964                          INTO l_row_id
2965                          FROM igc_cc_acct_lines
2966                          WHERE cc_acct_line_id = l_acct_line_rec.cc_acct_line_id;
2967 
2968 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
2969                          IF (g_debug_mode = 'Y') THEN
2970                                g_debug_msg := ' Updating Acct Line ';
2971                                Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2972                          END IF;
2973 
2974                          Account_Line_Wrapper (p_api_version       => l_api_version,
2975                                                p_init_msg_list     => FND_API.G_FALSE,
2976                                                p_commit            => FND_API.G_FALSE,
2977                                                p_validation_level  => l_validation_level,
2978                                                x_return_status     => l_return_status,
2979                                                x_msg_count         => l_msg_count,
2980                                                x_msg_data          => l_msg_data,
2981                                                x_rowid             => l_row_id,
2982                                                p_action_flag       => 'U',
2983                                                p_cc_acct_lines_rec => l_acct_line_rec,
2984                                                p_update_flag       => l_update_flag
2985                                               );
2986 
2987                          IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
2988                                x_msg_data  := l_msg_data;
2989                                x_msg_count := l_msg_count;
2990 --                                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
2991                                IF (g_debug_mode = 'Y') THEN
2992                                    g_debug_msg := ' FAILED Updated Acct Line ..... 1 ';
2993                                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
2994                                END IF;
2995                                IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2996                                THEN
2997                                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
2998                                                                l_api_name);
2999                                END IF;
3000                                RAISE E_UPDATE_CC_TABLES;
3001                           END IF;
3002 
3003 --      END IF;
3004 
3005 --                        IF (IGC_MSGS_PKG.g_debug_mode) THEN
3006                         IF (g_debug_mode = 'Y') THEN
3007                            g_debug_msg := ' Check det pf line id 1.......';
3008                            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3009                         END IF;
3010 
3011       IF ((l_cc_det_pf_line_id IS NOT NULL) AND
3012             (l_budget_dest_flag = 'S'))
3013       THEN
3014                                 -- Performance Tuning, Replaced view
3015                                 -- igc_cc_det_pf_v with
3016                                 -- igc_cc_det_pf and replaced the line
3017                                 -- below.
3018         -- SELECT cc_det_pf_comp_func_amt
3019                                 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
3020         INTO l_cc_det_pf_comp_func_amt
3021         FROM igc_cc_det_pf ccdpf
3022         WHERE ccdpf.cc_det_pf_line_id = l_cc_det_pf_line_id;
3023 
3024 -- ----------------------------------------------------------------------------------
3025 -- Obtain the actual Det PF line record based upon the data that was just retrieved
3026 -- from the view.
3027 -- ----------------------------------------------------------------------------------
3028                                 OPEN c_det_pf_line;
3029                                 FETCH c_det_pf_line
3030                                  INTO l_det_pf_rec;
3031 
3032                                 IF (c_det_pf_line%NOTFOUND) THEN
3033                                    EXIT;
3034                                 END IF;
3035 
3036                                 CLOSE c_det_pf_line;
3037 
3038 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3039                                 IF (g_debug_mode = 'Y') THEN
3040                                    g_debug_msg := ' Getting Det PF Line Info ';
3041                                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3042                                 END IF;
3043 
3044         IF (l_cc_headers_rec.cc_state = 'CL') THEN
3045 
3046                                         -- Added for Bug 3219208
3047                                         -- Entered Amt should be set to 0 when the CC is being
3048                                         -- cancelled.
3049           l_det_pf_rec.cc_det_pf_entered_amt     := 0;
3050           l_det_pf_rec.cc_det_pf_func_amt     := 0;
3051           l_cc_det_pf_enc_amt := 0;
3052                             l_det_pf_rec.cc_det_pf_encmbrnc_amt    := 0;
3053                             l_det_pf_rec.cc_det_pf_encmbrnc_status := 'N';
3054                             l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3055                             l_det_pf_rec.cc_det_pf_date            := l_cc_transaction_date;
3056                             l_det_pf_rec.last_update_date          := SYSDATE;
3057                             l_det_pf_rec.last_update_login         := l_update_login;
3058                             l_det_pf_rec.last_updated_by           := l_update_by;
3059 
3060         ELSIF (l_cc_headers_rec.cc_state = 'PR') THEN
3061 
3062           l_cc_det_pf_enc_amt := l_cc_det_pf_comp_func_amt;
3063                             l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_cc_det_pf_comp_func_amt;
3064                             l_det_pf_rec.cc_det_pf_encmbrnc_status := l_encumbrance_status;
3065                             l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3066                             l_det_pf_rec.last_update_date          := SYSDATE;
3067                             l_det_pf_rec.last_update_login         := l_update_login;
3068                             l_det_pf_rec.last_updated_by           := l_update_by;
3069 
3070         ELSIF (l_cc_headers_rec.cc_state = 'CM') THEN
3071 
3072           l_cc_det_pf_enc_amt := l_cc_det_pf_comp_func_amt;
3073                             l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_cc_det_pf_comp_func_amt;
3074                                         l_det_pf_rec.cc_det_pf_encmbrnc_status := l_encumbrance_status;
3075                                         l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3076                                         l_det_pf_rec.last_update_date          := SYSDATE;
3077                                         l_det_pf_rec.last_update_login         := l_update_login;
3078                                         l_det_pf_rec.last_updated_by           := l_update_by;
3079 
3080         ELSIF (l_cc_headers_rec.cc_state = 'CT') THEN
3081 
3082           l_billed_amt      := 0;
3083                                         l_func_billed_amt := 0;
3084 
3085                                         -- Performance Tuning, Replaced view
3086                                         -- igc_cc_det_pf_v with
3087                                         -- igc_cc_det_pf and replaced the line
3088                                         -- below.
3089           -- SELECT cc_det_pf_billed_amt , cc_det_pf_func_billed_amt
3090                             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,
3091                                    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
3092           INTO l_billed_amt, l_func_billed_amt
3093           FROM igc_cc_det_pf ccdpf
3094           WHERE ccdpf.cc_det_pf_line_id = l_cc_det_pf_line_id;
3095 
3096           IF (l_currency_code <> l_cc_headers_rec.currency_code) THEN
3097 
3098                                                 l_cc_det_pf_comp_func_amt := l_func_billed_amt;
3099                                                 l_cc_det_pf_enc_amt       := l_func_billed_amt;
3100 
3101                                                 l_det_pf_rec.cc_det_pf_entered_amt     := l_billed_amt;
3102                                                 l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_func_billed_amt;
3103                                                 l_det_pf_rec.cc_det_pf_func_amt        := l_func_billed_amt;
3104                                                 l_det_pf_rec.cc_det_pf_encmbrnc_status := 'N';
3105                                                 l_det_pf_rec.cc_det_pf_date            := l_cc_transaction_date;
3106                                                 l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3107                                                 l_det_pf_rec.last_update_date          := SYSDATE;
3108                                                 l_det_pf_rec.last_update_login         := l_update_login;
3109                                                 l_det_pf_rec.last_updated_by           := l_update_by;
3110 
3111                                                 -- 2043221, Bidisha , 19 Oct 2001
3112                                                 -- Withheld amount should be set to 0 if the CC
3113                                                 -- is completed.
3114                                                 l_acct_line_rec.cc_func_withheld_amt    := 0;
3115                                                 l_acct_line_rec.cc_ent_withheld_amt     := 0;
3116           ELSE
3117 
3118                                                 l_cc_det_pf_comp_func_amt := l_func_billed_amt;
3119                                                 l_cc_det_pf_enc_amt       := l_func_billed_amt;
3120 
3121                                                 l_det_pf_rec.cc_det_pf_entered_amt     := l_func_billed_amt;
3122                                                 l_det_pf_rec.cc_det_pf_encmbrnc_amt    := l_func_billed_amt;
3123                                                 l_det_pf_rec.cc_det_pf_func_amt        := l_func_billed_amt;
3124                                                 l_det_pf_rec.cc_det_pf_encmbrnc_status := 'N';
3125                                                 l_det_pf_rec.cc_det_pf_date            := l_cc_transaction_date;
3126                                                 l_det_pf_rec.cc_det_pf_encmbrnc_date   := l_cc_transaction_date;
3127                                                 l_det_pf_rec.last_update_date          := SYSDATE;
3128                                                 l_det_pf_rec.last_update_login         := l_update_login;
3129                                                 l_det_pf_rec.last_updated_by           := l_update_by;
3130 
3131                                                 -- 2043221, Bidisha , 19 Oct 2001
3132                                                 -- Withheld amount should be set to 0 if the CC
3133                                                 -- is completed.
3134                                                 l_acct_line_rec.cc_func_withheld_amt    := 0;
3135                                                 l_acct_line_rec.cc_ent_withheld_amt     := 0;
3136           END IF;
3137 
3138                                 ELSE
3139 
3140 -- -----------------------------------------------------------------------------
3141 -- Unknown CC State in the Header record for the Det PF update.  Exit Process.
3142 -- -----------------------------------------------------------------------------
3143 --                                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3144                                    IF (g_debug_mode = 'Y') THEN
3145                                       g_debug_msg := ' Bad CC State ...... 2';
3146                                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3147                                    END IF;
3148 
3149                                    RAISE E_UPDATE_CC_TABLES;
3150 
3151         END IF;
3152 
3153                                 SELECT rowid
3154                                   INTO l_row_id
3155                                   FROM igc_cc_det_pf
3156                                  WHERE cc_det_pf_line_id = l_det_pf_rec.cc_det_pf_line_id;
3157 
3158 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3159                                 IF (g_debug_mode = 'Y') THEN
3160                                    g_debug_msg := ' Updating DET PF Line';
3161                                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3162                                 END IF;
3163 
3164                                 Det_Pf_Wrapper (p_api_version      => l_api_version,
3165                                                 p_init_msg_list    => FND_API.G_FALSE,
3166                                                 p_commit           => FND_API.G_FALSE,
3167                                                 p_validation_level => l_validation_level,
3168                                                 x_return_status    => l_return_status,
3169                                                 x_msg_count        => l_msg_count,
3170                                                 x_msg_data         => l_msg_data,
3171                                                 x_rowid            => l_row_id,
3172                                                 p_action_flag      => 'U',
3173                                                 p_cc_pmt_fcst_rec  => l_det_pf_rec,
3174                                                 p_update_flag      => l_update_flag
3175                                                );
3176 
3177                                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3178                                    x_msg_data  := l_msg_data;
3179                                    x_msg_count := l_msg_count;
3180 
3181 --                                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3182                                    IF (g_debug_mode = 'Y') THEN
3183                                       g_debug_msg := ' FAILURE updating DET PF line ...... 1 ';
3184                                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3185                                    END IF;
3186 
3187                                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3188                                    THEN
3189                                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3190                                                                 l_api_name);
3191                                    END IF;
3192                                    RAISE E_UPDATE_CC_TABLES;
3193                                 END IF;
3194 
3195       END IF;
3196 
3197     END LOOP;
3198 
3199 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3200                 IF (g_debug_mode = 'Y') THEN
3201                    g_debug_msg := ' End LOOP ...... 1 ';
3202                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3203                 END IF;
3204 
3205     CLOSE c_cc_interface;
3206 
3207                 IF (c_det_pf_line%ISOPEN) THEN
3208                     CLOSE c_det_pf_line;
3209                 END IF;
3210                 IF (c_cc_acct_line%ISOPEN) THEN
3211                    CLOSE c_cc_acct_line;
3212                 END IF;
3213 
3214 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3215                 IF (g_debug_mode = 'Y') THEN
3216                    g_debug_msg := ' Done Updating for Phase 1 Acct Lines and PF Lines.....';
3217                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3218                 END IF;
3219 
3220     IF ((l_cc_headers_rec.cc_state = 'CT') OR
3221                     (l_cc_headers_rec.cc_state = 'CL')) THEN
3222 
3223                    l_cc_headers_rec.cc_encmbrnc_status := 'N';
3224                    l_cc_headers_rec.last_update_date   := SYSDATE;
3225                    l_cc_headers_rec.last_update_login  := l_update_login;
3226                    l_cc_headers_rec.last_updated_by    := l_update_by;
3227 
3228     ELSIF ((l_cc_headers_rec.cc_state = 'PR') OR
3229                        (l_cc_headers_rec.cc_state = 'CM')) THEN
3230 
3231                    l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status;
3232                    l_cc_headers_rec.last_update_date   := SYSDATE;
3233                    l_cc_headers_rec.last_update_login  := l_update_login;
3234                    l_cc_headers_rec.last_updated_by    := l_update_by;
3235 
3236                 ELSE
3237 
3238 -- -----------------------------------------------------------------------------
3239 -- Unknown CC State in the Header record for the Det PF update.  Exit Process.
3240 -- -----------------------------------------------------------------------------
3241 --                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3242                    IF (g_debug_mode = 'Y') THEN
3243                       g_debug_msg := ' Bad CCC State....... 3 ';
3244                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3245                    END IF;
3246 
3247                    RAISE E_UPDATE_CC_TABLES;
3248 
3249     END IF;
3250 
3251                 SELECT rowid
3252                   INTO l_row_id
3253                   FROM igc_cc_headers
3254                  WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3255 
3256 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3257                 IF (g_debug_mode = 'Y') THEN
3258                    g_debug_msg := ' Updating Header Record....... 1';
3259                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3260                 END IF;
3261 
3262                 l_cc_headers_rec.cc_acct_date := p_accounting_date;
3263 
3264                 Header_Wrapper (p_api_version      => l_api_version,
3265                                 p_init_msg_list    => FND_API.G_FALSE,
3266                                 p_commit           => FND_API.G_FALSE,
3267                                 p_validation_level => l_validation_level,
3268                                 x_return_status    => l_return_status,
3269                                 x_msg_count        => l_msg_count,
3270                                 x_msg_data         => l_msg_data,
3271                                 x_rowid            => l_row_id,
3272                                 p_action_flag      => 'U',
3273                                 p_cc_header_rec    => l_cc_headers_rec,
3274                                 p_update_flag      => l_update_flag
3275                                );
3276 
3277                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3278                    x_msg_data  := l_msg_data;
3279                    x_msg_count := l_msg_count;
3280                    l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status_old;
3281 
3282 --                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3283                    IF (g_debug_mode = 'Y') THEN
3284                       g_debug_msg := ' Failure UPDATING Header record..... 1';
3285                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3286                    END IF;
3287                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3288                    THEN
3289                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3290                                                 l_api_name);
3291                    END IF;
3292                    RAISE E_UPDATE_CC_TABLES;
3293                 END IF;
3294 
3295 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3296                 IF (g_debug_mode = 'Y') THEN
3297                    g_debug_msg := ' Inserting Actions Record.....';
3298                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3299                 END IF;
3300 
3301     IGC_CC_ACTIONS_PKG.Insert_Row
3302                     (1.0,
3303            FND_API.G_FALSE,
3304            FND_API.G_FALSE,
3305            FND_API.G_VALID_LEVEL_FULL,
3306            l_return_status,
3307            l_msg_count,
3308            l_msg_data,
3309            l_rowid,
3310            p_cc_header_id,
3311            l_cc_headers_rec.cc_version_num,
3312            'EC',
3313                      l_cc_headers_rec.cc_state,
3314            l_cc_headers_rec.cc_ctrl_status,
3315            l_cc_headers_rec.cc_apprvl_status,
3316            p_notes,
3317            sysdate,
3318            fnd_global.user_id,
3319            fnd_global.login_id,
3320            sysdate,
3321            fnd_global.user_id
3322           );
3323 
3324                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3325                    x_msg_data  := l_msg_data;
3326                    x_msg_count := l_msg_count;
3327 
3328 --                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3329                    IF (g_debug_mode = 'Y') THEN
3330                       g_debug_msg := ' Falure Inserting Actions Row..... 1 ';
3331                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3332                    END IF;
3333 
3334                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3335                    THEN
3336                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3337                                                 l_api_name);
3338                    END IF;
3339                    RAISE E_UPDATE_CC_TABLES;
3340                 END IF;
3341 
3342   END IF; /* Update CC Tables */
3343 
3344   EXCEPTION
3345     WHEN OTHERS
3346     THEN
3347                         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3348                         THEN
3349                            FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3350                                                      l_api_name);
3351                         END IF;
3352                         IF ( g_unexp_level >= g_debug_level ) THEN
3353                            FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
3354                            FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
3355                            FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
3356                            FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
3357                         END IF;
3358 
3359       RAISE E_UPDATE_CC_TABLES;
3360   END;
3361 
3362 --        IF (IGC_MSGS_PKG.g_debug_mode) THEN
3363         IF (g_debug_mode = 'Y') THEN
3364            g_debug_msg := ' Beginning Phase 2....... Updates';
3365            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3366         END IF;
3367 
3368   IF ( (l_interface_row_count = 0) AND (p_mode = 'R') )
3369   THEN
3370 
3371     OPEN c_account_lines(p_cc_header_id);
3372 
3373     LOOP
3374       FETCH c_account_lines INTO l_cc_acct_lines_rec;
3375 
3376       EXIT WHEN c_account_lines%NOTFOUND;
3377 
3378 -- ----------------------------------------------------------------------------------
3379 -- Obtain the actual account line record based upon the data that was just retrieved
3380 -- from the view.
3381 -- ----------------------------------------------------------------------------------
3382                         OPEN c_cc_acct_line_rec_input;
3383                         FETCH c_cc_acct_line_rec_input
3384                          INTO l_acct_line_rec;
3385 
3386                         IF (c_cc_acct_line_rec_input%NOTFOUND) THEN
3387                            EXIT;
3388                         END IF;
3389 
3390 --                        IF (IGC_MSGS_PKG.g_debug_mode) THEN
3391                         IF (g_debug_mode = 'Y') THEN
3392                            g_debug_msg := ' Retrieving Account Line info 2......';
3393                            Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3394                         END IF;
3395 
3396                         CLOSE c_cc_acct_line_rec_input;
3397 
3398                         IF ((l_cc_acct_lines_rec.cc_acct_encmbrnc_amt =
3399                              l_cc_acct_lines_rec.cc_acct_comp_func_amt) AND
3400                             (l_cc_acct_lines_rec.cc_acct_encmbrnc_status = 'N')) THEN
3401 
3402                            l_acct_line_rec.cc_acct_encmbrnc_status := l_encumbrance_status;
3403                            l_acct_line_rec.last_update_date        := SYSDATE;
3404                            l_acct_line_rec.last_update_login       := l_update_login;
3405                            l_acct_line_rec.last_updated_by         := l_update_by;
3406 
3407                            SELECT rowid
3408                              INTO l_row_id
3409                              FROM igc_cc_acct_lines
3410                             WHERE cc_acct_line_id = l_acct_line_rec.cc_acct_line_id;
3411 
3412 --                           IF (IGC_MSGS_PKG.g_debug_mode) THEN
3413                            IF (g_debug_mode = 'Y') THEN
3414                               g_debug_msg := ' Updating Acct Line........ 2';
3415                               Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3416                            END IF;
3417 
3418                            Account_Line_Wrapper (p_api_version       => l_api_version,
3419                                                  p_init_msg_list     => FND_API.G_FALSE,
3420                                                  p_commit            => FND_API.G_FALSE,
3421                                                  p_validation_level  => l_validation_level,
3422                                                  x_return_status     => l_return_status,
3423                                                  x_msg_count         => l_msg_count,
3424                                                  x_msg_data          => l_msg_data,
3425                                                  x_rowid             => l_row_id,
3426                                                  p_action_flag       => 'U',
3427                                                  p_cc_acct_lines_rec => l_acct_line_rec,
3428                                                  p_update_flag       => l_update_flag
3429                                                 );
3430 
3431                            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3432                               x_msg_data  := l_msg_data;
3433                               x_msg_count := l_msg_count;
3434 
3435 --                              IF (IGC_MSGS_PKG.g_debug_mode) THEN
3436                               IF (g_debug_mode = 'Y') THEN
3437                                  g_debug_msg := ' FAILED update accout line ........ 2';
3438                                  Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3439                               END IF;
3440 
3441                               IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3442                               THEN
3443                                  FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3444                                                            l_api_name);
3445                               END IF;
3446                               RAISE E_UPDATE_CC_TABLES;
3447                            END IF;
3448 
3449                         END IF;
3450 
3451       OPEN c_payment_forecast(l_cc_acct_lines_rec.cc_acct_line_id);
3452 
3453       LOOP
3454         FETCH c_payment_forecast INTO l_cc_pmt_fcst_rec;
3455 
3456         EXIT WHEN c_payment_forecast%NOTFOUND;
3457 
3458 -- ----------------------------------------------------------------------------------
3459 -- Obtain the actual Det PF line record based upon the data that was just retrieved
3460 -- from the view.
3461 -- ----------------------------------------------------------------------------------
3462                                 OPEN c_det_pf_line_rec_input;
3463                                 FETCH c_det_pf_line_rec_input
3464                                  INTO l_det_pf_rec;
3465 
3466                                 IF (c_det_pf_line_rec_input%NOTFOUND) THEN
3467                                    EXIT;
3468                                 END IF;
3469 
3470                                 CLOSE c_det_pf_line_rec_input;
3471 
3472 --                                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3473                                 IF (g_debug_mode = 'Y') THEN
3474                                    g_debug_msg := ' Getting the DET PF Line INFO ...... 2 ';
3475                                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3476                                 END IF;
3477 
3478                                 IF ((l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_amt =
3479                                      l_cc_pmt_fcst_rec.cc_det_pf_comp_func_amt) AND
3480                                     (l_cc_pmt_fcst_rec.cc_det_pf_encmbrnc_status = 'N')) THEN
3481 
3482                                    l_det_pf_rec.cc_det_pf_encmbrnc_status := l_encumbrance_status;
3483                                    l_det_pf_rec.last_update_date          := SYSDATE;
3484                                    l_det_pf_rec.last_update_login         := l_update_login;
3485                                    l_det_pf_rec.last_updated_by           := l_update_by;
3486 
3487                                    SELECT rowid
3488                                      INTO l_row_id
3489                                      FROM igc_cc_det_pf
3490                                     WHERE cc_det_pf_line_id = l_det_pf_rec.cc_det_pf_line_id;
3491 
3492                                    Det_Pf_Wrapper (p_api_version      => l_api_version,
3493                                                    p_init_msg_list    => FND_API.G_FALSE,
3494                                                    p_commit           => FND_API.G_FALSE,
3495                                                    p_validation_level => l_validation_level,
3496                                                    x_return_status    => l_return_status,
3497                                                    x_msg_count        => l_msg_count,
3498                                                    x_msg_data         => l_msg_data,
3499                                                    x_rowid            => l_row_id,
3500                                                    p_action_flag      => 'U',
3501                                                    p_cc_pmt_fcst_rec  => l_det_pf_rec,
3502                                                    p_update_flag      => l_update_flag
3503                                                   );
3504 
3505                                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3506                                       x_msg_data  := l_msg_data;
3507                                       x_msg_count := l_msg_count;
3508 
3509 --                                      IF (IGC_MSGS_PKG.g_debug_mode) THEN
3510                                       IF (g_debug_mode = 'Y') THEN
3511                                          g_debug_msg := ' FAILED Updating DET PF Line INFO ...... 2 ';
3512                                          Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3513                                       END IF;
3514 
3515                                       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3516                                       THEN
3517                                          FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3518                                                                    l_api_name);
3519                                       END IF;
3520                                       RAISE E_UPDATE_CC_TABLES;
3521                                    END IF;
3522 
3523                                 END IF;
3524 
3525       END LOOP;
3526 
3527       CLOSE c_payment_forecast;
3528                         IF (c_det_pf_line_rec_input%ISOPEN) THEN
3529                            CLOSE c_det_pf_line_rec_input;
3530                         END IF;
3531 
3532     END LOOP;
3533 
3534     CLOSE c_account_lines;
3535                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3536                    CLOSE c_cc_acct_line_rec_input;
3537                 END IF;
3538                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3539                    CLOSE c_det_pf_line_rec_input;
3540                 END IF;
3541 
3542                 l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status;
3543                 l_cc_headers_rec.last_update_date   := SYSDATE;
3544                 l_cc_headers_rec.last_update_login  := l_update_login;
3545                 l_cc_headers_rec.last_updated_by    := l_update_by;
3546 
3547                 SELECT rowid
3548                   INTO l_row_id
3549                   FROM igc_cc_headers
3550                  WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3551 
3552 --                IF (IGC_MSGS_PKG.g_debug_mode) THEN
3553                 IF (g_debug_mode = 'Y') THEN
3554                    g_debug_msg := ' Updating Header Line INFO ...... 3 ';
3555                    Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3556                 END IF;
3557 
3558                 Header_Wrapper (p_api_version      => l_api_version,
3559                                 p_init_msg_list    => FND_API.G_FALSE,
3560                                 p_commit           => FND_API.G_FALSE,
3561                                 p_validation_level => l_validation_level,
3562                                 x_return_status    => l_return_status,
3563                                 x_msg_count        => l_msg_count,
3564                                 x_msg_data         => l_msg_data,
3565                                 x_rowid            => l_row_id,
3566                                 p_action_flag      => 'U',
3567                                 p_cc_header_rec    => l_cc_headers_rec,
3568                                 p_update_flag      => l_update_flag
3569                                );
3570 
3571                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3572                    x_msg_data  := l_msg_data;
3573                    x_msg_count := l_msg_count;
3574 
3575 --                   IF (IGC_MSGS_PKG.g_debug_mode) THEN
3576                    IF (g_debug_mode = 'Y') THEN
3577                       g_debug_msg := ' FAILED Updated Header Line INFO ...... 3 ';
3578                       Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3579                    END IF;
3580 
3581                    l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status_old;
3582                    IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3583                    THEN
3584                       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3585                                                 l_api_name);
3586                    END IF;
3587                    RAISE E_UPDATE_CC_TABLES;
3588                 END IF;
3589 
3590   END IF;
3591 
3592   IF (l_cc_apprvl_status_old <> 'IP')
3593   THEN
3594 
3595            l_cc_headers_rec.cc_apprvl_status    := l_cc_apprvl_status_old;
3596            l_cc_headers_rec.last_update_date    := SYSDATE;
3597            l_cc_headers_rec.last_update_login   := l_update_login;
3598            l_cc_headers_rec.last_updated_by     := l_update_by;
3599 
3600            SELECT rowid
3601            INTO l_row_id
3602            FROM igc_cc_headers
3603            WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3604 
3605            Header_Wrapper (p_api_version      => l_api_version,
3606                            p_init_msg_list    => FND_API.G_FALSE,
3607                            p_commit           => FND_API.G_FALSE,
3608                            p_validation_level => l_validation_level,
3609                            x_return_status    => l_return_status,
3610                            x_msg_count        => l_msg_count,
3611                            x_msg_data         => l_msg_data,
3612                            x_rowid            => l_row_id,
3613                            p_action_flag      => 'U',
3614                            p_cc_header_rec    => l_cc_headers_rec,
3615                            p_update_flag      => l_update_flag
3616                           );
3617 
3618            IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3619               x_msg_data  := l_msg_data;
3620               x_msg_count := l_msg_count;
3621 --              IF (IGC_MSGS_PKG.g_debug_mode) THEN
3622               IF (g_debug_mode = 'Y') THEN
3623                  g_debug_msg := ' FAILED Update Header Line Info ...... 4 ';
3624                  Output_Debug (l_full_path, p_debug_msg => g_debug_msg);
3625               END IF;
3626 
3627               l_cc_headers_rec.cc_encmbrnc_status := l_encumbrance_status_old;
3628               IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3629               THEN
3630                  FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3631                                            l_api_name);
3632               END IF;
3633               RAISE E_UPDATE_CC_TABLES;
3634            END IF;
3635 
3636   END IF;
3637 
3638   IF ( (l_batch_result_code IS NOT NULL) AND (l_interface_row_count <> 0) )
3639   THEN
3640     IF (l_batch_result_code = 'HXX')
3641     THEN
3642       fnd_message.set_name('IGC', 'IGC_CC_CBC_RESULT_CODE_INVALID');
3643                     IF(g_state_level >= g_debug_level) THEN
3644                        FND_LOG.MESSAGE(g_state_level, l_full_path, FALSE);
3645                     END IF;
3646       fnd_msg_pub.add;
3647     ELSE
3648       fnd_message.set_name('IGC', 'IGC_CC_CBC_RESULT_CODE_'||l_batch_result_code);
3649                     IF(g_state_level >= g_debug_level) THEN
3650                        FND_LOG.MESSAGE(g_state_level, l_full_path, FALSE);
3651                     END IF;
3652       fnd_msg_pub.add;
3653     END IF;
3654 
3655   END IF;
3656 
3657   IF FND_API.To_Boolean(p_commit)
3658   THEN
3659            COMMIT WORK;
3660   END IF;
3661 
3662         FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3663                                     p_data  => x_msg_data );
3664 
3665         RETURN;
3666 
3667 EXCEPTION
3668 
3669   WHEN FND_API.G_EXC_UNEXPECTED_ERROR OR E_CC_NOT_FOUND OR  E_INVALID_MODE OR E_UPDATE OR E_DELETE
3670   THEN
3671     ROLLBACK TO Execute_Budgetary_Ctrl1;
3672     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3673     x_bc_status      := FND_API.G_FALSE;
3674                 IF (c_payment_forecast%ISOPEN) THEN
3675                    CLOSE c_payment_forecast;
3676                 END IF;
3677                 IF (c_account_lines%ISOPEN) THEN
3678                    CLOSE c_account_lines;
3679                 END IF;
3680                 IF (c_cc_acct_line%ISOPEN) THEN
3681                    CLOSE c_cc_acct_line;
3682                 END IF;
3683                 IF (c_det_pf_line%ISOPEN) THEN
3684                    CLOSE c_det_pf_line;
3685                 END IF;
3686                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3687                    CLOSE c_cc_acct_line_rec_input;
3688                 END IF;
3689                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3690                    CLOSE c_det_pf_line_rec_input;
3691                 END IF;
3692 
3693     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3694                                             p_data  => x_msg_data );
3695                 IF (g_excep_level >=  g_debug_level ) THEN
3696                      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');
3697                 END IF;
3698 
3699   WHEN  E_PROCESS_ROW
3700   THEN
3701     ROLLBACK TO Execute_Budgetary_Ctrl3;
3702     IF (l_cc_apprvl_status_old <> 'IP')
3703     THEN
3704 
3705                    l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
3706                    l_cc_headers_rec.last_update_date   := SYSDATE;
3707                    l_cc_headers_rec.last_update_login  := l_update_login;
3708                    l_cc_headers_rec.last_updated_by    := l_update_by;
3709 
3710                    SELECT rowid
3711                      INTO l_row_id
3712                      FROM igc_cc_headers
3713                     WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3714 
3715                    Header_Wrapper (p_api_version      => l_api_version,
3716                                    p_init_msg_list    => FND_API.G_FALSE,
3717                                    p_commit           => FND_API.G_TRUE,
3718                                    p_validation_level => l_validation_level,
3719                                    x_return_status    => l_return_status,
3720                                    x_msg_count        => l_msg_count,
3721                                    x_msg_data         => l_msg_data,
3722                                    x_rowid            => l_row_id,
3723                                    p_action_flag      => 'U',
3724                                    p_cc_header_rec    => l_cc_headers_rec,
3725                                    p_update_flag      => l_update_flag
3726                                   );
3727 
3728                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3729                       x_msg_data  := l_msg_data;
3730                       x_msg_count := l_msg_count;
3731                    END IF;
3732 
3733     END IF;
3734 
3735     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3736     x_bc_status      := FND_API.G_FALSE;
3737                 IF (c_payment_forecast%ISOPEN) THEN
3738                    CLOSE c_payment_forecast;
3739                 END IF;
3740                 IF (c_account_lines%ISOPEN) THEN
3741                    CLOSE c_account_lines;
3742                 END IF;
3743                 IF (c_cc_acct_line%ISOPEN) THEN
3744                    CLOSE c_cc_acct_line;
3745                 END IF;
3746                 IF (c_det_pf_line%ISOPEN) THEN
3747                    CLOSE c_det_pf_line;
3748                 END IF;
3749                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3750                    CLOSE c_cc_acct_line_rec_input;
3751                 END IF;
3752                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3753                    CLOSE c_det_pf_line_rec_input;
3754                 END IF;
3755 
3756     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3757                                             p_data  => x_msg_data );
3758                 IF (g_excep_level >=  g_debug_level ) THEN
3759                     FND_LOG.STRING (g_excep_level,l_full_path,'E_PROCESS_ROW Exception Raised');
3760                 END IF;
3761 
3762   WHEN  E_CC_INVALID_SET_UP OR E_NO_BUDGETARY_CONTROL
3763        OR E_SBC_DATA OR E_SBC_DATA1 OR E_CBC_DATA OR E_CBC_DATA1 OR E_CHECK_BUDG_CTRL
3764   THEN
3765     ROLLBACK TO Execute_Budgetary_Ctrl2;
3766 
3767     IF (l_cc_apprvl_status_old <> 'IP')
3768     THEN
3769 
3770                    l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
3771                    l_cc_headers_rec.last_update_date   := SYSDATE;
3772                    l_cc_headers_rec.last_update_login  := l_update_login;
3773                    l_cc_headers_rec.last_updated_by    := l_update_by;
3774 
3775                    SELECT rowid
3776                      INTO l_row_id
3777                      FROM igc_cc_headers
3778                     WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3779 
3780                    Header_Wrapper (p_api_version      => l_api_version,
3781                                    p_init_msg_list    => FND_API.G_FALSE,
3782                                    p_commit           => FND_API.G_TRUE,
3783                                    p_validation_level => l_validation_level,
3784                                    x_return_status    => l_return_status,
3785                                    x_msg_count        => l_msg_count,
3786                                    x_msg_data         => l_msg_data,
3787                                    x_rowid            => l_row_id,
3788                                    p_action_flag      => 'U',
3789                                    p_cc_header_rec    => l_cc_headers_rec,
3790                                    p_update_flag      => l_update_flag
3791                                   );
3792 
3793                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3794                       x_msg_data  := l_msg_data;
3795                       x_msg_count := l_msg_count;
3796                    END IF;
3797 
3798     END IF;
3799 
3800     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3801     x_bc_status      := FND_API.G_FALSE;
3802                 IF (c_payment_forecast%ISOPEN) THEN
3803                    CLOSE c_payment_forecast;
3804                 END IF;
3805                 IF (c_account_lines%ISOPEN) THEN
3806                    CLOSE c_account_lines;
3807                 END IF;
3808                 IF (c_cc_acct_line%ISOPEN) THEN
3809                    CLOSE c_cc_acct_line;
3810                 END IF;
3811                 IF (c_det_pf_line%ISOPEN) THEN
3812                    CLOSE c_det_pf_line;
3813                 END IF;
3814                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3815                    CLOSE c_cc_acct_line_rec_input;
3816                 END IF;
3817                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3818                    CLOSE c_det_pf_line_rec_input;
3819                 END IF;
3820 
3821     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3822                                       p_data  => x_msg_data );
3823                 IF (g_excep_level >=  g_debug_level ) THEN
3824                     FND_LOG.STRING (g_excep_level,l_full_path,
3825                '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');
3826                 END IF;
3827 
3828   WHEN E_BC_EXECUTION /*OR E_UPDATE_CC_TABLES */
3829   THEN
3830     --ROLLBACK TO Execute_Budgetary_Ctrl4;
3831     select count(*)
3832     INTO x_msg_count
3833     FROM igc_cc_interface
3834     WHERE cc_header_id = p_cc_header_id;
3835 
3836     IF (l_cc_apprvl_status_old <> 'IP')
3837     THEN
3838 
3839                    l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
3840                    l_cc_headers_rec.last_update_date   := SYSDATE;
3841                    l_cc_headers_rec.last_update_login  := l_update_login;
3842                    l_cc_headers_rec.last_updated_by    := l_update_by;
3843 
3844                    SELECT rowid
3845                      INTO l_row_id
3846                      FROM igc_cc_headers
3847                     WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3848 
3849                    Header_Wrapper (p_api_version      => l_api_version,
3850                                    p_init_msg_list    => FND_API.G_FALSE,
3851                                    p_commit           => FND_API.G_TRUE,
3852                                    p_validation_level => l_validation_level,
3853                                    x_return_status    => l_return_status,
3854                                    x_msg_count        => l_msg_count,
3855                                    x_msg_data         => l_msg_data,
3856                                    x_rowid            => l_row_id,
3857                                    p_action_flag      => 'U',
3858                                    p_cc_header_rec    => l_cc_headers_rec,
3859                                    p_update_flag      => l_update_flag
3860                                   );
3861 
3862                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3863                       x_msg_data  := l_msg_data;
3864                       x_msg_count := l_msg_count;
3865                    END IF;
3866 
3867     END IF;
3868 
3869     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3870     x_bc_status      := FND_API.G_FALSE;
3871                 IF (c_payment_forecast%ISOPEN) THEN
3872                    CLOSE c_payment_forecast;
3873                 END IF;
3874                 IF (c_account_lines%ISOPEN) THEN
3875                    CLOSE c_account_lines;
3876                 END IF;
3877                 IF (c_cc_acct_line%ISOPEN) THEN
3878                    CLOSE c_cc_acct_line;
3879                 END IF;
3880                 IF (c_det_pf_line%ISOPEN) THEN
3881                    CLOSE c_det_pf_line;
3882                 END IF;
3883                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3884                    CLOSE c_cc_acct_line_rec_input;
3885                 END IF;
3886                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3887                    CLOSE c_det_pf_line_rec_input;
3888                 END IF;
3889 
3890     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3891                                       p_data  => x_msg_data );
3892                 IF (g_excep_level >=  g_debug_level ) THEN
3893                    FND_LOG.STRING (g_excep_level,l_full_path,'E_BC_EXECUTION Exception Raised');
3894                 END IF;
3895 
3896         WHEN OTHERS
3897   THEN
3898     ROLLBACK;
3899 
3900     IF (l_cc_apprvl_status_old <> 'IP')
3901     THEN
3902 
3903                    l_cc_headers_rec.cc_apprvl_status   := l_cc_apprvl_status_old;
3904                    l_cc_headers_rec.last_update_date   := SYSDATE;
3905                    l_cc_headers_rec.last_update_login  := l_update_login;
3906                    l_cc_headers_rec.last_updated_by    := l_update_by;
3907 
3908                    SELECT rowid
3909                      INTO l_row_id
3910                      FROM igc_cc_headers
3911                     WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
3912 
3913                    Header_Wrapper (p_api_version      => l_api_version,
3914                                    p_init_msg_list    => FND_API.G_FALSE,
3915                                    p_commit           => FND_API.G_TRUE,
3916                                    p_validation_level => l_validation_level,
3917                                    x_return_status    => l_return_status,
3918                                    x_msg_count        => l_msg_count,
3919                                    x_msg_data         => l_msg_data,
3920                                    x_rowid            => l_row_id,
3921                                    p_action_flag      => 'U',
3922                                    p_cc_header_rec    => l_cc_headers_rec,
3923                                    p_update_flag      => l_update_flag
3924                                   );
3925 
3926                    IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3927                       x_msg_data  := l_msg_data;
3928                       x_msg_count := l_msg_count;
3929                    END IF;
3930 
3931     END IF;
3932 
3933     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
3934     x_bc_status      := FND_API.G_FALSE;
3935                 IF (c_payment_forecast%ISOPEN) THEN
3936                    CLOSE c_payment_forecast;
3937                 END IF;
3938                 IF (c_account_lines%ISOPEN) THEN
3939                    CLOSE c_account_lines;
3940                 END IF;
3941                 IF (c_cc_acct_line%ISOPEN) THEN
3942                    CLOSE c_cc_acct_line;
3943                 END IF;
3944                 IF (c_det_pf_line%ISOPEN) THEN
3945                    CLOSE c_det_pf_line;
3946                 END IF;
3947                 IF (c_cc_acct_line_rec_input%ISOPEN) THEN
3948                    CLOSE c_cc_acct_line_rec_input;
3949                 END IF;
3950                 IF (c_det_pf_line_rec_input%ISOPEN) THEN
3951                    CLOSE c_det_pf_line_rec_input;
3952                 END IF;
3953 
3954     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3955     THEN
3956       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
3957                                                   l_api_name);
3958     END IF;
3959 
3960     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
3961                                             p_data  => x_msg_data );
3962                 IF ( g_unexp_level >= g_debug_level ) THEN
3963                    FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
3964                    FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
3965                    FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
3966                    FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
3967                 END IF;
3968 
3969 END Execute_Budgetary_Ctrl;
3970 
3971 
3972 PROCEDURE Check_Budgetary_Ctrl_On
3973 (
3974   p_api_version                         IN       NUMBER,
3975   p_init_msg_list                       IN       VARCHAR2 := FND_API.G_FALSE,
3976   p_validation_level                    IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
3977   x_return_status                       OUT NOCOPY      VARCHAR2,
3978   x_msg_count                           OUT NOCOPY      NUMBER,
3979   x_msg_data                            OUT NOCOPY      VARCHAR2,
3980   p_org_id                              IN       NUMBER,
3981   p_sob_id                              IN       NUMBER,
3982   p_cc_state                            IN       VARCHAR2,
3983   x_encumbrance_on                      OUT NOCOPY      VARCHAR2
3984 )
3985 IS
3986   l_api_name                      CONSTANT VARCHAR2(30)   := 'Check_Budgetary_Ctrl_On';
3987   l_api_version                   CONSTANT NUMBER         :=  1.0;
3988 
3989   l_enable_budg_control_flag      gl_sets_of_books.enable_budgetary_control_flag%TYPE;
3990   l_cc_bc_enable_flag             igc_cc_bc_enable.cc_bc_enable_flag%TYPE;
3991   l_req_encumbrance_flag        financials_system_params_all.req_encumbrance_flag%TYPE;
3992   l_purch_encumbrance_flag      financials_system_params_all.purch_encumbrance_flag%TYPE;
3993 --  l_cc_prov_enc_enable_flag       igc_cc_encmbrnc_ctrls.cc_prov_encmbrnc_enable_flag%TYPE;
3994 --  l_cc_conf_enc_enable_flag       igc_cc_encmbrnc_ctrls.cc_conf_encmbrnc_enable_flag%TYPE;
3995 
3996   l_error_message                 VARCHAR2(2000);
3997 
3998   e_cc_not_found                  EXCEPTION;
3999   e_cc_invalid_set_up             EXCEPTION;
4000   e_gl_data                   EXCEPTION;
4001   e_null_parameter                EXCEPTION;
4002 
4003         l_full_path                     VARCHAR2(255);
4004 BEGIN
4005 
4006    l_full_path := g_path || 'Check_Budgetary_Ctrl_On';
4007 
4008   x_encumbrance_on           := FND_API.G_TRUE;
4009   x_return_status            := FND_API.G_RET_STS_SUCCESS;
4010   l_enable_budg_control_flag := 'N';
4011 
4012   IF FND_API.to_Boolean(p_init_msg_list)
4013   THEN
4014     FND_MSG_PUB.initialize;
4015   END IF;
4016 
4017   IF NOT FND_API.Compatible_API_Call(l_api_version,
4018              p_api_version,
4019              l_api_name,
4020              G_PKG_NAME)
4021   THEN
4022     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4023   END IF;
4024 
4025   IF (p_org_id IS NULL)
4026   THEN
4027     fnd_message.set_name('IGC', 'IGC_CC_NO_ORG_ID');
4028                 IF(g_error_level >= g_debug_level) THEN
4029                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4030                 END IF;
4031     fnd_msg_pub.add;
4032     RAISE E_NULL_PARAMETER;
4033   END IF;
4034 
4035   IF (p_sob_id IS NULL)
4036   THEN
4037     fnd_message.set_name('IGC', 'IGC_CC_NO_SOB_ID');
4038                 IF(g_error_level >= g_debug_level) THEN
4039                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4040                 END IF;
4041     fnd_msg_pub.add;
4042     RAISE E_NULL_PARAMETER;
4043   END IF;
4044 
4045   IF (p_cc_state IS NULL)
4046   THEN
4047     fnd_message.set_name('IGC', 'IGC_CC_NO_CC_STATE');
4048                 IF(g_error_level >= g_debug_level) THEN
4049                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4050                 END IF;
4051     fnd_msg_pub.add;
4052     RAISE E_NULL_PARAMETER;
4053   END IF;
4054 
4055   /* Check whether SBC is turned on */
4056 
4057   BEGIN
4058 
4059     SELECT  NVL(enable_budgetary_control_flag,'N')
4060     INTO    l_enable_budg_control_flag
4061     FROM    gl_sets_of_books
4062     WHERE   set_of_books_id = p_sob_id;
4063 
4064   EXCEPTION
4065 
4066     WHEN NO_DATA_FOUND
4067     THEN
4068       fnd_message.set_name('IGC', 'IGC_CC_INVALID_GL_DATA');
4069       IF(g_error_level >= g_debug_level) THEN
4070         FND_LOG.MESSAGE(g_error_level, l_full_path || 'Msg4', FALSE);
4071       END IF;
4072       fnd_msg_pub.add;
4073       RAISE E_CC_INVALID_SET_UP;
4074   END;
4075 
4076 
4077   IF ( NVL(l_enable_budg_control_flag,'N') = 'Y')
4078   THEN
4079     BEGIN
4080       SELECT  req_encumbrance_flag, purch_encumbrance_flag
4081       INTO      l_req_encumbrance_flag, l_purch_encumbrance_flag
4082       FROM    financials_system_params_all
4083       WHERE   set_of_books_id = p_sob_id AND
4084           org_id = p_org_id;
4085     EXCEPTION
4086       WHEN NO_DATA_FOUND
4087       THEN
4088         x_encumbrance_on            := FND_API.G_FALSE;
4089     END;
4090 
4091     /* Check whether CBC is turned on */
4092 
4093       BEGIN
4094         SELECT  cc_bc_enable_flag
4095         INTO    l_cc_bc_enable_flag
4096         FROM    igc_cc_bc_enable
4097         WHERE   set_of_books_id = p_sob_id;
4098       EXCEPTION
4099         WHEN NO_DATA_FOUND
4100         THEN
4101           l_cc_bc_enable_flag := 'N';
4102       END;
4103 
4104       IF ( (p_cc_state = 'PR') OR (p_cc_state = 'CL') )
4105       THEN
4106         IF (NVL(l_req_encumbrance_flag,'N') = 'Y')
4107         THEN
4108           x_encumbrance_on := FND_API.G_TRUE;
4109         ELSE
4110           x_encumbrance_on := FND_API.G_FALSE;
4111         END IF;
4112       END IF;
4113 
4114       IF ( (p_cc_state = 'CM') OR (p_cc_state = 'CT') )
4115       THEN
4116         IF (NVL(l_purch_encumbrance_flag,'N') = 'Y')
4117         THEN
4118           x_encumbrance_on := FND_API.G_TRUE;
4119         ELSE
4120           x_encumbrance_on := FND_API.G_FALSE;
4121         END IF;
4122       END IF;
4123     ELSE
4124       x_encumbrance_on := FND_API.G_FALSE;
4125     END IF;
4126 
4127 EXCEPTION
4128 
4129   WHEN E_CC_NOT_FOUND OR E_CC_INVALID_SET_UP OR E_GL_DATA OR E_NULL_PARAMETER
4130   THEN
4131     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4132     x_encumbrance_on := FND_API.G_FALSE;
4133     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4134                                             p_data  => x_msg_data );
4135         IF (g_excep_level >=  g_debug_level ) THEN
4136            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');
4137         END IF;
4138 
4139   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
4140   THEN
4141     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4142     x_encumbrance_on := FND_API.G_FALSE;
4143 
4144     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4145                                       p_data  => x_msg_data );
4146         IF (g_excep_level >=  g_debug_level ) THEN
4147            FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR Exception Raised');
4148         END IF;
4149 
4150   WHEN OTHERS
4151   THEN
4152     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4153     x_encumbrance_on := FND_API.G_FALSE;
4154 
4155     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4156     THEN
4157       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
4158                                                   l_api_name);
4159     END IF;
4160 
4161     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4162                                             p_data  => x_msg_data );
4163         IF ( g_unexp_level >= g_debug_level ) THEN
4164            FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
4165            FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
4166            FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
4167            FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
4168         END IF;
4169 
4170 END Check_Budgetary_Ctrl_On;
4171 
4172 
4173 PROCEDURE Set_Encumbrance_Status
4174 (
4175   p_api_version                         IN       NUMBER,
4176   p_init_msg_list                       IN       VARCHAR2 := FND_API.G_FALSE,
4177   p_commit                              IN       VARCHAR2 := FND_API.G_FALSE,
4178   p_validation_level                    IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
4179   x_return_status                       OUT NOCOPY      VARCHAR2,
4180   x_msg_count                           OUT NOCOPY      NUMBER,
4181   x_msg_data                            OUT NOCOPY      VARCHAR2,
4182   p_cc_header_id                        IN       NUMBER,
4183   p_encumbrance_status_code             IN       VARCHAR2
4184 )
4185 IS
4186   l_api_name                      CONSTANT VARCHAR2(30)   := 'Set_Encumbrance_Status';
4187   l_api_version                   CONSTANT NUMBER         :=  1.0;
4188 
4189   l_cc_headers_rec                igc_cc_headers%ROWTYPE;
4190   l_cc_acct_lines_rec             igc_cc_acct_lines_v%ROWTYPE;
4191   l_cc_pmt_fcst_rec               igc_cc_det_pf_v%ROWTYPE;
4192 
4193   l_error_message                 VARCHAR2(2000);
4194 
4195 -- -------------------------------------------------------------------------
4196 -- Variables to be used in calls to the table wrapper procedures.
4197 -- -------------------------------------------------------------------------
4198         l_validation_level              NUMBER;
4199         l_return_status                 VARCHAR2(1);
4200         l_msg_count                     NUMBER;
4201         l_msg_data                      VARCHAR2(2000);
4202         l_row_id                        VARCHAR2(18);
4203         l_update_flag                   VARCHAR2(1);
4204         l_update_login                  igc_cc_acct_lines.last_update_login%TYPE;
4205         l_update_by                     igc_cc_acct_lines.last_updated_by%TYPE;
4206 
4207 -- -------------------------------------------------------------------------
4208 -- Record definitions to be used for CURSORS getting single record for
4209 -- the table wrappers.  These record definitions are NOT the same as the
4210 -- ones above when getting data from the views.
4211 -- -------------------------------------------------------------------------
4212         l_det_pf_rec                    igc_cc_det_pf%ROWTYPE;
4213         l_header_rec                    igc_cc_headers%ROWTYPE;
4214         l_acct_line_rec                 igc_cc_acct_lines%ROWTYPE;
4215 
4216   e_cc_not_found                  EXCEPTION;
4217   e_invalid_status_code           EXCEPTION;
4218 
4219   /* Contract Commitment detail payment forecast  */
4220   CURSOR c_payment_forecast(t_cc_acct_line_id NUMBER) IS
4221 
4222         -- Performance Tuning, Replaced view igc_cc_det_pf_v with
4223         -- igc_cc_det_pf and replaced the line below.
4224   -- SELECT *
4225   -- FROM igc_cc_det_pf_v
4226   -- WHERE cc_acct_line_id =  t_cc_acct_line_id;
4227 
4228         SELECT ccdpf.ROWID,
4229                ccdpf.cc_det_pf_line_id,
4230                ccdpf.cc_det_pf_line_num,
4231                NULL  cc_acct_line_num,
4232                ccdpf.cc_acct_line_id,
4233                NULL  parent_det_pf_line_num,
4234                ccdpf.parent_det_pf_line_id,
4235                ccdpf.parent_acct_line_id,
4236                ccdpf.cc_det_pf_entered_amt,
4237                ccdpf.cc_det_pf_func_amt,
4238                ccdpf.cc_det_pf_date,
4239                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,
4240                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,
4241                ccdpf.cc_det_pf_unbilled_amt,
4242                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,
4243                ccdpf.cc_det_pf_encmbrnc_amt,
4244                ( IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT ( p_cc_header_id, NVL(ccdpf.cc_det_pf_entered_amt,0) ) -
4245                NVL(ccdpf.cc_det_pf_encmbrnc_amt,0) ) cc_det_pf_unencmbrd_amt ,
4246                ccdpf.cc_det_pf_encmbrnc_date,
4247                ccdpf.cc_det_pf_encmbrnc_status,
4248                ccdpf.context,
4249                ccdpf.attribute1,
4250                ccdpf.attribute2,
4251                ccdpf.attribute3,
4252                ccdpf.attribute4,
4253                ccdpf.attribute5,
4254                ccdpf.attribute6,
4255                ccdpf.attribute7,
4256                ccdpf.attribute8,
4257                ccdpf.attribute9,
4258                ccdpf.attribute10,
4259                ccdpf.attribute11,
4260                ccdpf.attribute12,
4261                ccdpf.attribute13,
4262                ccdpf.attribute14,
4263                ccdpf.attribute15,
4264                ccdpf.last_update_date,
4265                ccdpf.last_updated_by,
4266                ccdpf.last_update_login,
4267                ccdpf.creation_date,
4268                ccdpf.created_by
4269         FROM igc_cc_det_pf ccdpf
4270   WHERE ccdpf.cc_acct_line_id =  t_cc_acct_line_id;
4271 
4272   /* Contract Commitment account lines  */
4273 
4274 -- Bug 2885953 - cursor below amended for performance enhancements
4275 --    CURSOR c_account_lines(t_cc_header_id NUMBER) IS
4276 --    SELECT *
4277 --        FROM  igc_cc_acct_lines_v ccac
4278 --        WHERE ccac.cc_header_id = t_cc_header_id;
4279   CURSOR c_account_lines(t_cc_header_id NUMBER) IS
4280   SELECT ccac.ROWID,
4281                ccac.cc_header_id,
4282                NULL org_id,
4283                NULL cc_type,
4284                NULL cc_type_code,
4285                NULL cc_num,
4286                ccac.cc_acct_line_id,
4287                ccac.cc_acct_line_num,
4288                ccac.cc_acct_desc,
4289                ccac.parent_header_id,
4290                ccac.parent_acct_line_id,
4291                NULL parent_cc_acct_line_num,
4292                NULL cc_budget_acct_desc,
4293                ccac.cc_budget_code_combination_id,
4294                NULL cc_charge_acct_desc,
4295                ccac.cc_charge_code_combination_id,
4296                ccac.cc_acct_entered_amt,
4297                ccac.cc_acct_func_amt,
4298                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_billed_amt,
4299                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_func_billed_amt,
4300                ccac.cc_acct_encmbrnc_amt,
4301                (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,
4302                ccac.cc_acct_unbilled_amt,
4303                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0))
4304                cc_acct_comp_func_amt,
4305                NULL project_number,
4306                ccac.project_id,
4307                NULL task_number,
4308                ccac.task_id,
4309                ccac.expenditure_type,
4310                NULL expenditure_org_name,
4311                ccac.expenditure_org_id,
4312                ccac.expenditure_item_date,
4313                ccac.cc_acct_taxable_flag,
4314                NULL tax_name,
4315                ccac.tax_id,
4316                ccac.cc_acct_encmbrnc_status,
4317                ccac.cc_acct_encmbrnc_date,
4318                ccac.context,
4319                ccac.attribute1,
4320                ccac.attribute2,
4321                ccac.attribute3,
4322                ccac.attribute4,
4323                ccac.attribute5,
4324                ccac.attribute6,
4325                ccac.attribute7,
4326                ccac.attribute8,
4327                ccac.attribute9,
4328                ccac.attribute10,
4329                ccac.attribute11,
4330                ccac.attribute12,
4331                ccac.attribute13,
4332                ccac.attribute14,
4333                ccac.attribute15,
4334                ccac.created_by,
4335                ccac.creation_date,
4336                ccac.last_updated_by,
4337                ccac.last_update_date,
4338                ccac.last_update_login,
4339                ccac.cc_func_withheld_amt,
4340                ccac.cc_ent_withheld_amt,
4341                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_func_withheld_amt,0)) cc_comp_func_whld_amt,
4342                ccac.Tax_Classif_Code
4343         FROM  igc_cc_acct_lines ccac
4344         WHERE ccac.cc_header_id = t_cc_header_id;
4345 
4346 -- -------------------------------------------------------------------------
4347 -- Cursors used for obtaining a single line to be passed into the wrapper
4348 -- functions for updating, inserting, deleting records from tables.
4349 -- -------------------------------------------------------------------------
4350         CURSOR c_cc_acct_line IS
4351           SELECT *
4352             FROM igc_cc_acct_lines
4353            WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
4354 
4355         CURSOR c_det_pf_line IS
4356           SELECT *
4357             FROM igc_cc_det_pf
4358            WHERE cc_det_pf_line_id = l_cc_pmt_fcst_rec.cc_det_pf_line_id;
4359 
4360    l_full_path         VARCHAR2(255);
4361 
4362 BEGIN
4363 
4364     l_full_path := g_path || 'Set_Encumbrance_Status';
4365 
4366   SAVEPOINT Set_Encumbrance_Status;
4367 
4368   IF FND_API.to_Boolean(p_init_msg_list)
4369   THEN
4370     FND_MSG_PUB.initialize;
4371   END IF;
4372 
4373   IF NOT FND_API.Compatible_API_Call(l_api_version,
4374              p_api_version,
4375              l_api_name,
4376              G_PKG_NAME)
4377   THEN
4378     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4379   END IF;
4380 
4381   x_return_status    := FND_API.G_RET_STS_SUCCESS;
4382         l_validation_level := p_validation_level;
4383         l_update_login     := FND_GLOBAL.LOGIN_ID;
4384         l_update_by        := FND_GLOBAL.USER_ID;
4385 
4386   IF ( (NVL(p_encumbrance_status_code,'X') <> 'P') AND
4387        (NVL(p_encumbrance_status_code,'X') <> 'T') )
4388   THEN
4389     fnd_message.set_name('IGC', 'IGC_CC_INVALID_STATUS_CODE');
4390     fnd_message.set_token('CODE', p_encumbrance_status_code,TRUE);
4391                 IF(g_error_level >= g_debug_level) THEN
4392                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4393                 END IF;
4394     fnd_msg_pub.add;
4395     RAISE E_INVALID_STATUS_CODE;
4396 
4397   END IF;
4398 
4399         BEGIN
4400 
4401     SELECT *
4402     INTO l_cc_headers_rec
4403     FROM igc_cc_headers
4404     WHERE cc_header_id = p_cc_header_id;
4405 
4406   EXCEPTION
4407 
4408     WHEN no_data_found
4409     THEN
4410       fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
4411       fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
4412                     IF(g_excep_level >= g_debug_level) THEN
4413                        FND_LOG.MESSAGE(g_excep_level, l_full_path, FALSE);
4414                     END IF;
4415       fnd_msg_pub.add;
4416       RAISE E_CC_NOT_FOUND;
4417 
4418   END;
4419 
4420   OPEN c_account_lines(p_cc_header_id);
4421 
4422   LOOP
4423     FETCH c_account_lines INTO l_cc_acct_lines_rec;
4424 
4425     EXIT WHEN c_account_lines%NOTFOUND;
4426 
4427 -- ----------------------------------------------------------------------------------
4428 -- Obtain the actual account line record based upon the data that was just retrieved
4429 -- from the view.
4430 -- ----------------------------------------------------------------------------------
4431                 OPEN c_cc_acct_line;
4432                 FETCH c_cc_acct_line
4433                  INTO l_acct_line_rec;
4434 
4435                 IF (c_cc_acct_line%NOTFOUND) THEN
4436                    EXIT;
4437                 END IF;
4438 
4439                 CLOSE c_cc_acct_line;
4440 
4441                 l_acct_line_rec.cc_acct_encmbrnc_status := p_encumbrance_status_code;
4442                 l_acct_line_rec.last_update_date        := SYSDATE;
4443                 l_acct_line_rec.last_update_login       := l_update_login;
4444                 l_acct_line_rec.last_updated_by         := l_update_by;
4445 
4446                 SELECT rowid
4447                   INTO l_row_id
4448                   FROM igc_cc_acct_lines
4449                  WHERE cc_acct_line_id = l_acct_line_rec.cc_acct_line_id;
4450 
4451                 Account_Line_Wrapper (p_api_version       => l_api_version,
4452                                       p_init_msg_list     => FND_API.G_FALSE,
4453                                       p_commit            => FND_API.G_FALSE,
4454                                       p_validation_level  => l_validation_level,
4455                                       x_return_status     => l_return_status,
4456                                       x_msg_count         => l_msg_count,
4457                                       x_msg_data          => l_msg_data,
4458                                       x_rowid             => l_row_id,
4459                                       p_action_flag       => 'U',
4460                                       p_cc_acct_lines_rec => l_acct_line_rec,
4461                                       p_update_flag       => l_update_flag
4462                                      );
4463 
4464                 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4465                    x_msg_data  := l_msg_data;
4466                    x_msg_count := l_msg_count;
4467                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4468                 END IF;
4469 
4470     OPEN c_payment_forecast(l_cc_acct_lines_rec.cc_acct_line_id);
4471 
4472     LOOP
4473       FETCH c_payment_forecast INTO l_cc_pmt_fcst_rec;
4474 
4475       EXIT WHEN c_payment_forecast%NOTFOUND;
4476 
4477 -- ----------------------------------------------------------------------------------
4478 -- Obtain the actual Det PF line record based upon the data that was just retrieved
4479 -- from the view.
4480 -- ----------------------------------------------------------------------------------
4481                         OPEN c_det_pf_line;
4482                         FETCH c_det_pf_line
4483                          INTO l_det_pf_rec;
4484 
4485                         IF (c_det_pf_line%NOTFOUND) THEN
4486                            EXIT;
4487                         END IF;
4488 
4489                         CLOSE c_det_pf_line;
4490 
4491                         l_det_pf_rec.cc_det_pf_encmbrnc_status := p_encumbrance_status_code;
4492                         l_det_pf_rec.last_update_date          := SYSDATE;
4493                         l_det_pf_rec.last_update_login         := l_update_login;
4494                         l_det_pf_rec.last_updated_by           := l_update_by;
4495 
4496                         SELECT rowid
4497                           INTO l_row_id
4498                           FROM igc_cc_det_pf
4499                          WHERE cc_det_pf_line_id = l_det_pf_rec.cc_det_pf_line_id;
4500 
4501                         Det_Pf_Wrapper (p_api_version      => l_api_version,
4502                                         p_init_msg_list    => FND_API.G_FALSE,
4503                                         p_commit           => FND_API.G_FALSE,
4504                                         p_validation_level => l_validation_level,
4505                                         x_return_status    => l_return_status,
4506                                         x_msg_count        => l_msg_count,
4507                                         x_msg_data         => l_msg_data,
4508                                         x_rowid            => l_row_id,
4509                                         p_action_flag      => 'U',
4510                                         p_cc_pmt_fcst_rec  => l_det_pf_rec,
4511                                         p_update_flag      => l_update_flag
4512                                        );
4513 
4514                         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4515                            x_msg_data  := l_msg_data;
4516                            x_msg_count := l_msg_count;
4517                            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4518                         END IF;
4519 
4520     END LOOP;
4521 
4522     CLOSE c_payment_forecast;
4523                 IF (c_det_pf_line%ISOPEN) THEN
4524                    CLOSE c_det_pf_line;
4525                 END IF;
4526 
4527   END LOOP;
4528 
4529   CLOSE c_account_lines;
4530         IF (c_cc_acct_line%ISOPEN) THEN
4531            CLOSE c_cc_acct_line;
4532         END IF;
4533 
4534         l_cc_headers_rec.cc_encmbrnc_status := p_encumbrance_status_code;
4535         l_cc_headers_rec.last_update_date   := SYSDATE;
4536         l_cc_headers_rec.last_update_login  := l_update_login;
4537         l_cc_headers_rec.last_updated_by    := l_update_by;
4538 
4539         SELECT rowid
4540           INTO l_row_id
4541           FROM igc_cc_headers
4542          WHERE cc_header_id = l_cc_headers_rec.cc_header_id;
4543 
4544         Header_Wrapper (p_api_version      => l_api_version,
4545                         p_init_msg_list    => FND_API.G_FALSE,
4546                         p_commit           => FND_API.G_FALSE,
4547                         p_validation_level => l_validation_level,
4548                         x_return_status    => l_return_status,
4549                         x_msg_count        => l_msg_count,
4550                         x_msg_data         => l_msg_data,
4551                         x_rowid            => l_row_id,
4552                         p_action_flag      => 'U',
4553                         p_cc_header_rec    => l_cc_headers_rec,
4554                         p_update_flag      => l_update_flag
4555                        );
4556 
4557         IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4558            x_msg_data  := l_msg_data;
4559            x_msg_count := l_msg_count;
4560            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4561         END IF;
4562 
4563   IF FND_API.To_Boolean(p_commit)
4564   THEN
4565            COMMIT WORK;
4566   END IF;
4567 
4568         RETURN;
4569 
4570 EXCEPTION
4571 
4572   WHEN E_CC_NOT_FOUND OR E_INVALID_STATUS_CODE
4573   THEN
4574     ROLLBACK TO Set_Encumbrance_Status;
4575     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4576                 IF (c_payment_forecast%ISOPEN) THEN
4577                    CLOSE c_payment_forecast;
4578                 END IF;
4579                 IF (c_det_pf_line%ISOPEN) THEN
4580                    CLOSE c_det_pf_line;
4581                 END IF;
4582                 IF (c_account_lines%ISOPEN) THEN
4583                    CLOSE c_account_lines;
4584                 END IF;
4585                 IF (c_cc_acct_line%ISOPEN) THEN
4586                    CLOSE c_cc_acct_line;
4587                 END IF;
4588     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4589                                             p_data  => x_msg_data );
4590         IF (g_excep_level >=  g_debug_level ) THEN
4591            FND_LOG.STRING (g_excep_level,l_full_path,'E_CC_NOT_FOUND OR E_INVALID_STATUS_CODE  Exception Raised');
4592         END IF;
4593 
4594   WHEN FND_API.G_EXC_UNEXPECTED_ERROR
4595   THEN
4596     ROLLBACK TO Set_Encumbrance_Status;
4597     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4598                 IF (c_payment_forecast%ISOPEN) THEN
4599                    CLOSE c_payment_forecast;
4600                 END IF;
4601                 IF (c_det_pf_line%ISOPEN) THEN
4602                    CLOSE c_det_pf_line;
4603                 END IF;
4604                 IF (c_account_lines%ISOPEN) THEN
4605                    CLOSE c_account_lines;
4606                 END IF;
4607                 IF (c_cc_acct_line%ISOPEN) THEN
4608                    CLOSE c_cc_acct_line;
4609                 END IF;
4610     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4611                                       p_data  => x_msg_data );
4612         IF (g_excep_level >=  g_debug_level ) THEN
4613            FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR  Exception Raised');
4614         END IF;
4615 
4616   WHEN OTHERS
4617   THEN
4618     ROLLBACK TO Set_Encumbrance_Status;
4619     x_return_status  := FND_API.G_RET_STS_UNEXP_ERROR;
4620                 IF (c_payment_forecast%ISOPEN) THEN
4621                    CLOSE c_payment_forecast;
4622                 END IF;
4623                 IF (c_det_pf_line%ISOPEN) THEN
4624                    CLOSE c_det_pf_line;
4625                 END IF;
4626                 IF (c_account_lines%ISOPEN) THEN
4627                    CLOSE c_account_lines;
4628                 END IF;
4629                 IF (c_cc_acct_line%ISOPEN) THEN
4630                    CLOSE c_cc_acct_line;
4631                 END IF;
4632 
4633     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4634     THEN
4635       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME,
4636                                                   l_api_name);
4637     END IF;
4638 
4639     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
4640                                             p_data  => x_msg_data );
4641                 IF ( g_unexp_level >= g_debug_level ) THEN
4642                    FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
4643                    FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
4644                    FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
4645                    FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
4646                 END IF;
4647 
4648 END Set_Encumbrance_Status;
4649 
4650 
4651 PROCEDURE   Validate_CC
4652 (
4653   p_api_version                 IN             NUMBER,
4654   p_init_msg_list               IN             VARCHAR2   := FND_API.G_FALSE,
4655   p_validation_level            IN             NUMBER     := FND_API.G_VALID_LEVEL_FULL,
4656   x_return_status               OUT NOCOPY     VARCHAR2,
4657   x_msg_count                   OUT NOCOPY     NUMBER,
4658   x_msg_data                    OUT NOCOPY     VARCHAR2,
4659   p_cc_header_id                IN             NUMBER,
4660   x_valid_cc                    OUT NOCOPY     VARCHAR2,
4661   p_mode              IN             VARCHAR2,
4662   p_field_from              IN             VARCHAR2,
4663   p_encumbrance_flag        IN             VARCHAR2,
4664   p_sob_id                      IN             NUMBER,
4665   p_org_id              IN             NUMBER,
4666   p_start_date              IN             DATE,
4667   p_end_date              IN             DATE,
4668   p_cc_type_code            IN             VARCHAR2,
4669   p_parent_cc_header_id       IN             NUMBER,
4670   p_cc_det_pf_date            IN             DATE,
4671   p_acct_date             IN             DATE,
4672   p_prev_acct_date            IN             DATE,
4673   p_cc_state              IN             VARCHAR2
4674 )
4675 IS
4676   l_api_name              CONSTANT VARCHAR2(30)     := 'Validate_CC';
4677   l_api_version           CONSTANT NUMBER           :=  1.0;
4678   l_cc_headers_rec        igc_cc_headers%ROWTYPE;
4679   l_cc_acct_lines_rec     igc_cc_acct_lines_v%ROWTYPE;
4680   l_cc_det_pf_lines_rec igc_cc_det_pf_v%ROWTYPE;
4681   l_cc_pmt_fcst_rec       igc_cc_det_pf_v%ROWTYPE;
4682   l_cc_acct_cnt         NUMBER := 0;
4683   l_total_pf_entered_amt  NUMBER := 0;
4684   l_cc_det_pf_cnt       NUMBER := 0;
4685   l_min_pf_date       DATE;
4686   l_max_pf_date       DATE;
4687   l_error_message         VARCHAR2(2000);
4688   e_cc_invalid_set_up     EXCEPTION;
4689   e_cc_not_found          EXCEPTION;
4690   e_no_det_pf           EXCEPTION;
4691   e_amt_mismatch          EXCEPTION;
4692 
4693   l_sbc_enable_flag   gl_sets_of_books.enable_budgetary_control_flag%TYPE := 'N';
4694   l_cbc_enable_flag igc_cc_bc_enable.cc_bc_enable_flag%TYPE     := 'N';
4695 --  l_cc_prov_encmbrnc_flag igc_cc_encmbrnc_ctrls.cc_prov_encmbrnc_enable_flag%TYPE := 'N';
4696 --  l_cc_conf_encmbrnc_flag igc_cc_encmbrnc_ctrls.cc_conf_encmbrnc_enable_flag%TYPE := 'N';
4697   l_cc_prov_encmbrnc_flag VARCHAR2(1);
4698   l_cc_conf_encmbrnc_flag VARCHAR2(1);
4699   l_orig_fiscal_year      gl_periods.period_year%TYPE;
4700   l_new_fiscal_year gl_periods.period_year%TYPE;
4701 
4702   l_COUNT     NUMBER;
4703   l_min_rel_start_date  DATE;
4704   l_cover_start_date  DATE;
4705 
4706   l_cover_end_date  DATE;
4707   l_max_rel_end_date  DATE;
4708 
4709         -- Bug 1830385, Bidisha S, 2 Jul 2001
4710         l_gl_application_id    fnd_application.application_id%TYPE := NULL;
4711 
4712 
4713   --  Contract Commitment account lines
4714 
4715 -- Bug 2885953 - cursor below amended for performance enhancements
4716 --    CURSOR c_account_lines(t_cc_header_id NUMBER) IS
4717 --    SELECT *
4718 --          FROM  igc_cc_acct_lines_v ccac
4719 --          WHERE ccac.cc_header_id = t_cc_header_id;
4720   CURSOR c_account_lines(t_cc_header_id NUMBER) IS
4721   SELECT ccac.ROWID,
4722                ccac.cc_header_id,
4723                NULL org_id,
4724                NULL cc_type,
4725                NULL cc_type_code,
4726                NULL cc_num,
4727                ccac.cc_acct_line_id,
4728                ccac.cc_acct_line_num,
4729                ccac.cc_acct_desc,
4730                ccac.parent_header_id,
4731                ccac.parent_acct_line_id,
4732                NULL parent_cc_acct_line_num,
4733                NULL cc_budget_acct_desc,
4734                ccac.cc_budget_code_combination_id,
4735                NULL cc_charge_acct_desc,
4736                ccac.cc_charge_code_combination_id,
4737                ccac.cc_acct_entered_amt,
4738                ccac.cc_acct_func_amt,
4739                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_billed_amt,
4740                IGC_CC_COMP_AMT_PKG.COMPUTE_ACCT_FUNC_BILLED_AMT(ccac.cc_acct_line_id) cc_acct_func_billed_amt,
4741                ccac.cc_acct_encmbrnc_amt,
4742                (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,
4743                ccac.cc_acct_unbilled_amt,
4744                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_acct_entered_amt,0))
4745                cc_acct_comp_func_amt,
4746                NULL project_number,
4747                ccac.project_id,
4748                NULL task_number,
4749                ccac.task_id,
4750                ccac.expenditure_type,
4751                NULL expenditure_org_name,
4752                ccac.expenditure_org_id,
4753                ccac.expenditure_item_date,
4754                ccac.cc_acct_taxable_flag,
4755                NULL tax_name,
4756                ccac.tax_id,
4757                ccac.cc_acct_encmbrnc_status,
4758                ccac.cc_acct_encmbrnc_date,
4759                ccac.context,
4760                ccac.attribute1,
4761                ccac.attribute2,
4762                ccac.attribute3,
4763                ccac.attribute4,
4764                ccac.attribute5,
4765                ccac.attribute6,
4766                ccac.attribute7,
4767                ccac.attribute8,
4768                ccac.attribute9,
4769                ccac.attribute10,
4770                ccac.attribute11,
4771                ccac.attribute12,
4772                ccac.attribute13,
4773                ccac.attribute14,
4774                ccac.attribute15,
4775                ccac.created_by,
4776                ccac.creation_date,
4777                ccac.last_updated_by,
4778                ccac.last_update_date,
4779                ccac.last_update_login,
4780                ccac.cc_func_withheld_amt,
4781                ccac.cc_ent_withheld_amt,
4782                IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT(ccac.cc_header_id, NVL(ccac.cc_func_withheld_amt,0)) cc_comp_func_whld_amt,
4783                ccac.Tax_Classif_Code
4784         FROM  igc_cc_acct_lines ccac
4785         WHERE ccac.cc_header_id = t_cc_header_id;
4786 
4787   CURSOR c_det_pf_lines(t_cc_acct_line_id NUMBER) IS
4788         -- Performance Tuning, Replaced view
4789         -- igc_cc_det_pf_v with
4790         -- igc_cc_det_pf and replaced the line
4791         -- below.
4792   -- SELECT *
4793   -- FROM igc_cc_det_pf_v ccdpf
4794   -- WHERE ccdpf.cc_acct_line_id = t_cc_acct_line_id;
4795 
4796         SELECT ccdpf.ROWID,
4797                ccdpf.cc_det_pf_line_id,
4798                ccdpf.cc_det_pf_line_num,
4799                NULL  cc_acct_line_num,
4800                ccdpf.cc_acct_line_id,
4801                NULL  parent_det_pf_line_num,
4802                ccdpf.parent_det_pf_line_id,
4803                ccdpf.parent_acct_line_id,
4804                ccdpf.cc_det_pf_entered_amt,
4805                ccdpf.cc_det_pf_func_amt,
4806                ccdpf.cc_det_pf_date,
4807                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,
4808                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,
4809                ccdpf.cc_det_pf_unbilled_amt,
4810                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,
4811                ccdpf.cc_det_pf_encmbrnc_amt,
4812                ( IGC_CC_COMP_AMT_PKG.COMPUTE_FUNCTIONAL_AMT ( p_cc_header_id, NVL(ccdpf.cc_det_pf_entered_amt,0) ) -
4813                NVL(ccdpf.cc_det_pf_encmbrnc_amt,0) ) cc_det_pf_unencmbrd_amt ,
4814                ccdpf.cc_det_pf_encmbrnc_date,
4815                ccdpf.cc_det_pf_encmbrnc_status,
4816                ccdpf.context,
4817                ccdpf.attribute1,
4818                ccdpf.attribute2,
4819                ccdpf.attribute3,
4820                ccdpf.attribute4,
4821                ccdpf.attribute5,
4822                ccdpf.attribute6,
4823                ccdpf.attribute7,
4824                ccdpf.attribute8,
4825                ccdpf.attribute9,
4826                ccdpf.attribute10,
4827                ccdpf.attribute11,
4828                ccdpf.attribute12,
4829                ccdpf.attribute13,
4830                ccdpf.attribute14,
4831                ccdpf.attribute15,
4832                ccdpf.last_update_date,
4833                ccdpf.last_updated_by,
4834                ccdpf.last_update_login,
4835                ccdpf.creation_date,
4836                ccdpf.created_by
4837         FROM igc_cc_det_pf ccdpf
4838   WHERE ccdpf.cc_acct_line_id = t_cc_acct_line_id;
4839 
4840         -- Bug 1830385, Bidisha S, 2 Jul 2001
4841         CURSOR c_gl_app_id IS
4842         SELECT application_id
4843         FROM   fnd_application
4844         WHERE  application_short_name = 'SQLGL';
4845 
4846         l_full_path         VARCHAR2(255);
4847 
4848 
4849   BEGIN
4850 
4851       l_full_path := g_path || 'Validate_CC';
4852 
4853     IF FND_API.to_Boolean(p_init_msg_list) THEN
4854       FND_MSG_PUB.initialize;
4855     END IF;
4856 
4857     IF NOT FND_API.Compatible_API_Call(l_api_version,p_api_version, l_api_name, G_PKG_NAME) THEN
4858       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4859     END IF;
4860 
4861     x_return_status := FND_API.G_RET_STS_SUCCESS;
4862     x_valid_cc      := FND_API.G_TRUE;
4863 
4864                 -- Get the application id that will be used throughout the process.
4865                 -- Bug 1830385, Bidisha S, 2 Jul 2001
4866                 OPEN   c_gl_app_id;
4867                 FETCH  c_gl_app_id INTO l_gl_application_id;
4868                 CLOSE  c_gl_app_id;
4869 
4870   -- If encumbrance is enabled , the following validations helps in determining the  individual
4871   -- options like standard budgetary control , commitment budgetary control, provisional contract
4872   -- encumbrance set-up, confirmed contract encumbrance setups or enabled or not.
4873   -- If encumbrance is not enabled then the individual setups are defaulted to 'N'.
4874 
4875     IF p_encumbrance_flag = FND_API.G_TRUE THEN
4876 
4877       -- Standard Budgetary Control enabled or not
4878 
4879       BEGIN
4880       SELECT  NVL(enable_budgetary_control_flag,'N')
4881         INTO    l_sbc_enable_flag
4882         FROM    gl_sets_of_books
4883         WHERE   set_of_books_id = p_sob_id;
4884         EXCEPTION
4885                 WHEN NO_DATA_FOUND THEN
4886                                              x_valid_cc      := FND_API.G_FALSE;
4887                                              x_return_status := FND_API.G_RET_STS_ERROR;
4888                fnd_message.set_name('IGC', 'IGC_CC_INVALID_GL_DATA');
4889                                   IF(g_error_level >= g_debug_level) THEN
4890                                      FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
4891                               END IF;
4892                            fnd_msg_pub.add;
4893                            RAISE E_CC_INVALID_SET_UP;
4894       END;
4895 
4896       --  Commitment Budgetary Control enabled or not
4897 
4898       IF ( NVL(l_sbc_enable_flag,'N') = 'Y')
4899       THEN
4900         BEGIN
4901           SELECT  cc_bc_enable_flag
4902           INTO     l_cbc_enable_flag
4903           FROM    igc_cc_bc_enable
4904           WHERE   set_of_books_id = p_sob_id;
4905           EXCEPTION
4906                   WHEN NO_DATA_FOUND THEN
4907                 l_cbc_enable_flag := 'N';
4908         END;
4909 
4910 
4911         -- Provisional Contract and Confirmed Contract can encumber or not.
4912 
4913                                 IF l_cbc_enable_flag = 'Y'
4914                                 THEN
4915 /*Bug No : 6341012. SLA Uptake. IGC_CC_ENCMBRNC_CTRLS_V no more exists*/
4916           l_cc_prov_encmbrnc_flag := 'Y';
4917           l_cc_conf_encmbrnc_flag := 'Y';
4918 
4919 /*            BEGIN
4920           SELECT cc_prov_encmbrnc_enable_flag,
4921                        cc_conf_encmbrnc_enable_flag
4922           INTO  l_cc_prov_encmbrnc_flag,
4923                         l_cc_conf_encmbrnc_flag
4924           FROM     igc_cc_encmbrnc_ctrls_v
4925           WHERE    org_id = p_org_id;
4926           EXCEPTION
4927                   WHEN NO_DATA_FOUND THEN
4928                   l_cc_prov_encmbrnc_flag := NULL;
4929                         l_cc_conf_encmbrnc_flag := NULL;
4930                                     END;
4931    */                           ELSE
4932             l_cc_prov_encmbrnc_flag := NULL;
4933                   l_cc_conf_encmbrnc_flag := NULL;
4934 
4935         END IF;
4936       END IF;  -- Commitment Budgetary Control enabled or not check ends here.
4937 
4938     END IF; -- Individual options setup based on encumbrance allowed or not check ends here.
4939 
4940         l_cc_prov_encmbrnc_flag := Nvl(l_cc_prov_encmbrnc_flag,'N');
4941         l_cc_conf_encmbrnc_flag := Nvl(l_cc_conf_encmbrnc_flag,'N');
4942 
4943   -- Date Validation begins here.
4944 
4945 
4946   IF p_mode = 'E'  AND p_field_from IS NOT NULL THEN          -- Entry Mode
4947 
4948          -- When Mode of call to the procedure is 'Entry' the following  validations should be performed.
4949 
4950   -- Start Date Validations begins here.
4951 
4952     IF ( p_start_date IS NOT NULL) AND p_field_from = 'START_DATE' THEN
4953 
4954       IF (p_end_date IS NOT NULL) THEN
4955                       IF p_end_date < p_start_date THEN
4956                                         x_valid_cc      := FND_API.G_FALSE;
4957                                         x_return_status := FND_API.G_RET_STS_ERROR;
4958                         fnd_message.set_name('IGC', 'IGC_CC_EFFECTIVE_START_DATE');
4959                   fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE (P_START_DATE),FALSE);
4960                             IF(g_state_level >= g_debug_level) THEN
4961                               FND_LOG.MESSAGE(g_state_level, l_full_path, FALSE);
4962                             END IF;
4963             fnd_msg_pub.add;
4964         END IF;
4965       END IF;
4966 
4967       -- Encumbrance turned on or not check begins here.
4968 
4969       IF (p_encumbrance_flag = FND_API.G_FALSE) THEN
4970 
4971       -- Encumbrance is turned OFF.
4972       -- If encumbrance is off
4973       -- then start date is validated only against
4974       -- commitment budget and not against standard budget.
4975 
4976         BEGIN
4977                           SELECT count(*)
4978                           INTO l_COUNT
4979                           FROM gl_sets_of_books sob, gl_periods gp, igc_cc_periods cp
4980               WHERE sob.set_of_books_id = p_sob_id
4981           AND   sob.period_set_name = gp.period_set_name
4982           AND   cp.org_id = p_org_id
4983           AND  gp.period_set_name = cp.period_set_name
4984           AND  cp.period_name = gp.period_name
4985               AND  cp.cc_period_status IN ('O','F')
4986           AND  (p_start_date BETWEEN gp.start_date AND gp.end_date);
4987           EXCEPTION
4988                                            WHEN OTHERS THEN
4989                  l_COUNT := 0;
4990         END;
4991 
4992                           IF (NVL(l_COUNT,0) = 0) THEN
4993                                      x_valid_cc      := FND_API.G_FALSE;
4994                                      x_return_status := FND_API.G_RET_STS_ERROR;
4995                  fnd_message.set_name('IGC', 'IGC_CC_EFF_CCPER_START_DATE');
4996                  fnd_message.set_token('STARTDATE', FND_DATE.DATE_TO_CHARDATE (P_START_DATE),FALSE);
4997                                      IF(g_state_level >= g_debug_level) THEN
4998                                         FND_LOG.MESSAGE(g_state_level, l_full_path, FALSE);
4999                                      END IF;
5000                      fnd_msg_pub.add;
5001           END IF;
5002 
5003       ELSIF p_encumbrance_flag = FND_API.G_TRUE  AND
5004                  ( l_sbc_enable_flag = 'Y' )  AND
5005               ( l_cbc_enable_flag IN ('Y','N') AND
5006                   (l_cc_prov_encmbrnc_flag IN ('Y','N') AND l_cc_conf_encmbrnc_flag = 'Y')
5007                     )
5008       THEN
5009 
5010       -- Encumbrance turned ON.
5011       -- Standard budgetary control is on
5012       -- Commitment budgetary control is on or off.
5013       -- Provisional contract can encumber or not.
5014       -- Confirmed contract must encumber.
5015 
5016         BEGIN
5017                           SELECT  count(*)
5018                           INTO  l_COUNT
5019                           FROM  gl_sets_of_books sob,
5020                                                 gl_period_statuses gl,
5021                                                 igc_cc_periods cp
5022               WHERE   sob.set_of_books_id = p_sob_id
5023           AND   gl.set_of_books_id = sob.set_of_books_id
5024                             AND     gl.application_id = 101
5025           AND     cp.org_id = p_org_id
5026           AND   cp.period_set_name = sob.period_set_name
5027           AND   cp.period_name = gl.period_name
5028             AND     cp.cc_period_status IN ('O','F')
5029           AND     gl.closing_status IN ('O','F')
5030             AND     (p_start_date BETWEEN gl.start_date AND gl.end_date);
5031                         EXCEPTION
5032                                WHEN OTHERS THEN
5033                  l_COUNT := 0;
5034                                      IF ( g_unexp_level >= g_debug_level ) THEN
5035                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5036                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5037                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5038                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5039                                      END IF;
5040         END;
5041 
5042                          IF (NVL(l_COUNT,0) = 0) THEN
5043                                         x_valid_cc      := FND_API.G_FALSE;
5044                                         x_return_status := FND_API.G_RET_STS_ERROR;
5045              fnd_message.set_name('IGC', 'IGC_CC_EFF_CCGLPER_START_DATE');
5046              fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE(p_start_date),FALSE);
5047                                IF(g_error_level >= g_debug_level) THEN
5048                                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5049                                END IF;
5050                  fnd_msg_pub.add;
5051                         END IF;
5052 
5053       END IF; -- Encumbrance turned on or not condition ends here.
5054 
5055 
5056         IF (p_cc_type_code = 'C') AND (p_cc_header_id IS NOT NULL)
5057       THEN
5058         l_min_rel_start_date := NULL;
5059         BEGIN
5060               SELECT MIN(cch.cc_start_date)
5061               INTO  l_min_rel_start_date
5062               FROM igc_cc_headers  cch
5063               WHERE cch.parent_header_id = p_cc_header_id;
5064           EXCEPTION
5065              WHEN NO_DATA_FOUND THEN
5066                  l_min_rel_start_date := NULL;
5067         END ;
5068 
5069         IF (p_start_date > NVL(l_min_rel_start_date,p_start_date) )
5070         THEN
5071                                 x_valid_cc      := FND_API.G_FALSE;
5072                                 x_return_status := FND_API.G_RET_STS_ERROR;
5073                 fnd_message.set_name('IGC', 'IGC_CC_EFF_COVER_START_DATE');
5074                     fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE(P_START_DATE),FALSE);
5075                                 IF(g_error_level >= g_debug_level) THEN
5076                                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5077                                 END IF;
5078                 fnd_msg_pub.add;
5079         END IF;
5080         END IF; -- Commitment Type is Cover
5081 
5082 
5083       IF (p_cc_type_code = 'R') THEN
5084         l_cover_start_date := NULL;
5085         BEGIN
5086               SELECT cch.cc_start_date
5087               INTO  l_cover_start_date
5088               FROM igc_cc_headers  cch
5089               WHERE cch.cc_header_id = p_parent_cc_header_id;
5090           EXCEPTION
5091              WHEN NO_DATA_FOUND THEN
5092                  l_cover_start_date := NULL;
5093         END ;
5094 
5095         IF (p_start_date <  NVL(l_cover_start_date,p_start_date) )
5096         THEN
5097                                 x_valid_cc      := FND_API.G_FALSE;
5098                                 x_return_status := FND_API.G_RET_STS_ERROR;
5099                 fnd_message.set_name('IGC', 'IGC_CC_EFF_REL_START_DATE');
5100                 fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE (P_START_DATE),FALSE);
5101                                 IF(g_error_level >= g_debug_level) THEN
5102                                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5103                                 END IF;
5104                 fnd_msg_pub.add;
5105         END IF;
5106         END IF;  -- Commitment Type is Release.
5107 
5108     ELSIF ( p_start_date IS  NULL) THEN
5109                     x_valid_cc      := FND_API.G_FALSE;
5110                     x_return_status := FND_API.G_RET_STS_ERROR;
5111       fnd_message.set_name('IGC', 'IGC_CC_NO_START_DATE');
5112                     IF(g_error_level >= g_debug_level) THEN
5113                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5114                     END IF;
5115       fnd_msg_pub.add;
5116 
5117     END IF; -- Start Date is Not Null. Start Date Validations ends here.
5118 
5119     -- End Date Validations begins here.
5120 
5121     IF (p_end_date IS NOT NULL)  AND p_field_from = 'END_DATE' THEN
5122 
5123                   IF p_end_date < p_start_date THEN
5124                             x_valid_cc      := FND_API.G_FALSE;
5125                             x_return_status := FND_API.G_RET_STS_ERROR;
5126                         fnd_message.set_name('IGC', 'IGC_CC_EFFECTIVE_END_DATE');
5127               fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE (P_START_DATE),FALSE);
5128                         fnd_message.set_token('ENDDATE',FND_DATE.DATE_TO_CHARDATE (P_END_DATE),FALSE);
5129                             IF(g_error_level >= g_debug_level) THEN
5130                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5131                             END IF;
5132                 fnd_msg_pub.add;
5133                   END IF;
5134 
5135       IF (p_cc_type_code = 'C') AND  (p_cc_header_id IS NOT NULL)
5136       THEN
5137         l_max_rel_end_date := NULL;
5138         BEGIN
5139               SELECT MAX(cch.cc_end_date)
5140               INTO  l_max_rel_end_date
5141               FROM igc_cc_headers  cch
5142               WHERE cch.parent_header_id = p_cc_header_id;
5143           EXCEPTION
5144              WHEN NO_DATA_FOUND THEN
5145                  l_max_rel_end_date := NULL;
5146         END ;
5147 
5148         IF (p_end_date < NVL(l_max_rel_end_date,p_end_date) )
5149         THEN
5150                                     x_valid_cc      := FND_API.G_FALSE;
5151                                     x_return_status := FND_API.G_RET_STS_ERROR;
5152                   fnd_message.set_name('IGC', 'IGC_CC_EFF_COVER_END_DATE');
5153                                     IF(g_error_level >= g_debug_level) THEN
5154                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5155                                     END IF;
5156                       fnd_msg_pub.add;
5157         END IF;
5158       END IF;  -- Commitment Type is Cover
5159 
5160       IF (p_cc_type_code = 'R') THEN
5161         l_cover_end_date := NULL;
5162         BEGIN
5163           SELECT cch.cc_end_date
5164             INTO  l_cover_end_date
5165               FROM igc_cc_headers  cch
5166               WHERE cch.cc_header_id = p_parent_cc_header_id;
5167           EXCEPTION
5168              WHEN NO_DATA_FOUND THEN
5169                  l_cover_end_date := NULL;
5170         END ;
5171 
5172         IF (p_end_date > NVL(l_cover_end_date,p_end_date) )
5173         THEN
5174                                     x_valid_cc      := FND_API.G_FALSE;
5175                                     x_return_status := FND_API.G_RET_STS_ERROR;
5176                   fnd_message.set_name('IGC', 'IGC_CC_EFF_REL_END_DATE');
5177                                     IF(g_error_level >= g_debug_level) THEN
5178                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5179                                     END IF;
5180                     fnd_msg_pub.add;
5181         END IF;
5182       END IF; -- Commitment Type is Release
5183 
5184                 END IF; -- End Date is NOT NULL. End Date Validations ends here.
5185 
5186 
5187     -- Payment Forecast Date Validations begins here.
5188     IF ( p_cc_det_pf_date IS NOT NULL) AND p_field_from = 'DET_PF_DATE'  THEN
5189 
5190       -- Basic Validations
5191 
5192       IF (p_cc_det_pf_date < p_start_date) THEN
5193                             x_valid_cc      := FND_API.G_FALSE;
5194                             x_return_status := FND_API.G_RET_STS_ERROR;
5195                         fnd_message.set_name('IGC', 'IGC_CC_DET_PF_START_DATE');
5196                 fnd_message.set_token('PFDATE',FND_DATE.DATE_TO_CHARDATE(p_cc_det_pf_date),FALSE);
5197                             IF(g_error_level >= g_debug_level) THEN
5198                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5199                             END IF;
5200             fnd_msg_pub.add;
5201                   END IF;
5202       IF ( (p_cc_det_pf_date > p_end_date) AND
5203                            (p_end_date IS NOT NULL)
5204                          ) THEN
5205                             x_valid_cc      := FND_API.G_FALSE;
5206                             x_return_status := FND_API.G_RET_STS_ERROR;
5207                         fnd_message.set_name('IGC', 'IGC_CC_DET_PF_END_DATE');
5208             fnd_message.set_token('PFDATE',FND_DATE.DATE_TO_CHARDATE(p_cc_det_pf_date),FALSE);
5209                             IF(g_error_level >= g_debug_level) THEN
5210                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5211                             END IF;
5212                     fnd_msg_pub.add;
5213       END IF;
5214 
5215       -- Budgetary Control  turned on.
5216 
5217       IF p_encumbrance_flag = FND_API.G_TRUE THEN
5218         BEGIN
5219                                         -- Performance Tuning, replaced
5220                                         -- view gl_period_statuses_v with
5221                                         -- gl_period_statuses
5222                     SELECT  count(*)
5223                         INTO  l_COUNT
5224           FROM  gl_sets_of_books sob,
5225                                     gl_period_statuses gl,
5226                                     igc_cc_periods cp
5227             WHERE   sob.set_of_books_id = p_sob_id
5228           AND   gl.set_of_books_id = sob.set_of_books_id
5229                             AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5230           AND     cp.org_id = p_org_id
5231           AND   cp.period_set_name = sob.period_set_name
5232           AND   cp.period_name = gl.period_name
5233             AND     cp.cc_period_status IN ('O','F')
5234           AND     gl.closing_status IN ('O','F')
5235                         AND     (p_cc_det_pf_date BETWEEN gl.start_date AND gl.end_date);
5236                       EXCEPTION
5237                        WHEN OTHERS THEN
5238             l_COUNT := 0;
5239                                 IF ( g_unexp_level >= g_debug_level ) THEN
5240                                     FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5241                                     FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5242                                     FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5243                                     FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5244                                 END IF;
5245         END;
5246         IF NVL(l_COUNT,0) = 0  THEN
5247                                 x_valid_cc      := FND_API.G_FALSE;
5248                                 x_return_status := FND_API.G_RET_STS_ERROR;
5249               fnd_message.set_name('IGC', 'IGC_CC_DET_PF_DATE');
5250                                 IF(g_error_level >= g_debug_level) THEN
5251                                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5252                                 END IF;
5253                       fnd_msg_pub.add;
5254         END IF;
5255       END IF; -- Budgetary Control turned on.
5256     END IF; -- Payment Forecast Date is NOT NULL. Payment Forecast Date Validations ends here.
5257 
5258     -- Encumbrance Accounting Date Validations begins here.
5259 
5260     IF  p_field_from = 'ENCUMBRANCE' THEN
5261                         IF NVL(l_cbc_enable_flag,'N') = 'Y' THEN
5262 
5263                          -- Bug # 1678518.
5264 
5265                              IF  (p_cc_state = 'PR'  OR p_cc_state = 'CM') THEN
5266         IF ( ( p_acct_date < NVL(p_start_date,p_acct_date) )  OR
5267                    ( p_acct_date > NVL(p_end_date,p_acct_date)   )
5268                            )
5269                  OR ( p_acct_date IS NULL)
5270                  OR (p_acct_date < p_prev_acct_date AND
5271                p_prev_acct_date IS NOT NULL)
5272         THEN
5273                                     x_valid_cc      := FND_API.G_FALSE;
5274                                     x_return_status := FND_API.G_RET_STS_ERROR;
5275                   fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE');
5276                   fnd_message.set_token('ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_ACCT_DATE),FALSE);
5277                   fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE(P_START_DATE),FALSE);
5278                               fnd_message.set_token('ENDDATE',FND_DATE.DATE_TO_CHARDATE(P_END_DATE),FALSE);
5279                                     IF(g_error_level >= g_debug_level) THEN
5280                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5281                                     END IF;
5282                       fnd_msg_pub.add;
5283         END IF;
5284 
5285                          -- Bug # 1678518.
5286 
5287            ELSIF (p_cc_state = 'CL'  OR p_cc_state = 'CT') THEN
5288         IF ( p_acct_date IS NULL)
5289                  OR ( (p_acct_date  NOT BETWEEN p_prev_acct_date AND SYSDATE) AND
5290                  p_prev_acct_date IS NOT NULL AND
5291                                    p_prev_acct_date < SYSDATE)
5292         THEN
5293                                         x_valid_cc      := FND_API.G_FALSE;
5294                                         x_return_status := FND_API.G_RET_STS_ERROR;
5295                       fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_CL_CT');
5296                       fnd_message.set_token('ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_ACCT_DATE),FALSE);
5297                       fnd_message.set_token('PREV_ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_PREV_ACCT_DATE),FALSE);
5298                                         IF(g_error_level >= g_debug_level) THEN
5299                                            FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5300                                         END IF;
5301                           fnd_msg_pub.add;
5302               END IF;
5303             END IF;
5304       END IF;
5305 
5306       -- Encumbrance turned ON.
5307 
5308       IF p_encumbrance_flag = FND_API.G_TRUE  AND
5309            (l_sbc_enable_flag = 'Y' )  AND
5310              ( l_cbc_enable_flag IN ('Y','N') AND
5311                       (l_cc_prov_encmbrnc_flag IN ('Y','N') AND (l_cc_conf_encmbrnc_flag = 'Y'))
5312          )
5313           THEN
5314 
5315         -- Encumbrance turned ON.
5316         -- Standard budgetary control is on
5317         -- Commitment budgetary control is on or off.
5318         -- Provisional contract can encumber or not.
5319         -- Confirmed contract must encumber.
5320         IF (p_cc_state = 'PR'  OR p_cc_state = 'CL') AND
5321                  (l_cc_prov_encmbrnc_flag ='Y' AND l_cc_conf_encmbrnc_flag = 'Y')
5322         THEN
5323           BEGIN
5324                                                 -- Performance Tuning, replaced
5325                                                 -- view gl_period_statuses_v with
5326                                                 -- gl_period_statuses
5327                               SELECT  count(*)
5328                             INTO  l_COUNT
5329                 FROM  gl_sets_of_books sob,
5330                         gl_period_statuses gl,
5331                         igc_cc_periods cp
5332                 WHERE   sob.set_of_books_id = p_sob_id
5333             AND   gl.set_of_books_id = sob.set_of_books_id
5334                                 AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5335             AND     cp.org_id = p_org_id
5336             AND   cp.period_set_name = sob.period_set_name
5337             AND   cp.period_name = gl.period_name
5338               AND     cp.cc_period_status IN ('O','F')
5339             AND     gl.closing_status IN ('O','F')
5340                           AND     (p_acct_date BETWEEN gl.start_date AND gl.end_date);
5341                           EXCEPTION
5342                              WHEN OTHERS THEN
5343                l_COUNT := 0;
5344                                      IF ( g_unexp_level >= g_debug_level ) THEN
5345                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5346                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5347                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5348                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5349                                      END IF;
5350 
5351                       END;
5352           IF NVL(l_COUNT,0) = 0  THEN
5353                                 x_valid_cc      := FND_API.G_FALSE;
5354                                 x_return_status := FND_API.G_RET_STS_ERROR;
5355             fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_OF');
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 
5362           -- Bug # 1619201.
5363           -- If Previously been encumbered.
5364           -- Fiscal Year Mismatch Valdn begins here.
5365           IF p_prev_acct_date IS NOT NULL
5366           THEN
5367             -- Original Fiscal Year
5368             BEGIN
5369                                                         -- Performance Tuning, Replaced
5370                                                         -- the following query with the
5371                                                         -- one below as we are only
5372                                                         -- interested in the fiscal years.
5373               -- SELECT   DISTINCT cp.period_year
5374               -- INTO   l_orig_fiscal_year
5375               -- FROM   gl_sets_of_books sob,
5376               --  gl_period_statuses_v gl,
5377               --  igc_cc_periods_v cp
5378               -- WHERE  sob.set_of_books_id = p_sob_id
5379               -- AND     gl.set_of_books_id = sob.set_of_books_id
5380                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5381               -- AND     cp.org_id = p_org_id
5382               -- AND     cp.period_set_name= sob.period_set_name
5383               -- AND     cp.period_name = gl.period_name
5384               -- AND  (p_prev_acct_date BETWEEN cp.start_date AND cp.end_date
5385                     --  );
5386                                                         SELECT  distinct gl.period_year
5387                                   INTO    l_orig_fiscal_year
5388                                                         FROM  gl_sets_of_books sob,
5389                                                                 gl_periods gl
5390                                                         WHERE   sob.set_of_books_id = p_sob_id
5391                                                         AND     gl.period_set_name= sob.period_set_name
5392                                                         AND     gl.period_type = sob.accounted_period_type
5393                                                         AND    (p_prev_acct_date between gl.start_date and gl.end_date);
5394             END;
5395             -- New Fiscal Year if any.
5396             BEGIN
5397                                                         -- Performance Tuning, Replaced
5398                                                         -- the following query with the
5399                                                         -- one below as we are only
5400                                                         -- interested in the fiscal years.
5401               -- SELECT   DISTINCT cp.period_year
5402               -- INTO   l_new_fiscal_year
5403               -- FROM   gl_sets_of_books sob,
5404               --  gl_period_statuses_v gl,
5405               --  igc_cc_periods_v cp
5406               -- WHERE  sob.set_of_books_id = p_sob_id
5407               -- AND     gl.set_of_books_id = sob.set_of_books_id
5408                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5409               -- AND     cp.org_id = p_org_id
5410               -- AND     cp.period_set_name= sob.period_set_name
5411               -- AND     cp.period_name = gl.period_name
5412               -- AND  (p_acct_date BETWEEN cp.start_date AND cp.end_date
5413               --         );
5414                                                         SELECT  distinct gl.period_year
5415                                   INTO    l_new_fiscal_year
5416                                                         FROM  gl_sets_of_books sob,
5417                                                                 gl_periods gl
5418                                                         WHERE   sob.set_of_books_id = p_sob_id
5419                                                         AND     gl.period_set_name= sob.period_set_name
5420                                                         AND     gl.period_type = sob.accounted_period_type
5421                                                         AND    (p_acct_date between gl.start_date and gl.end_date);
5422             END;
5423             IF l_orig_fiscal_year <> l_new_fiscal_year
5424             THEN
5425                                     x_valid_cc      := FND_API.G_FALSE;
5426                                     x_return_status := FND_API.G_RET_STS_ERROR;
5427               fnd_message.set_name('IGC', 'IGC_CC_ACCT_FISCAL_YRS_NE');
5428               fnd_message.set_TOKEN('PREVACTDATE',FND_DATE.DATE_TO_CHARDATE (p_prev_acct_date),FALSE);
5429                                     IF(g_error_level >= g_debug_level) THEN
5430                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5431                                     END IF;
5432               fnd_msg_pub.add;
5433             END IF; -- Fiscal Year Mismatch valdn ends here.
5434           END IF; -- If Previously been encumbered. Bug # 1619201.
5435 
5436         ELSIF (p_cc_state = 'CM' OR p_cc_state = 'CT')
5437         THEN
5438           BEGIN
5439                                                 -- Performance Tuning, replaced
5440                                                 -- view gl_period_statuses_v with
5441                                                 -- gl_period_statuses
5442                             SELECT  count(*)
5443                           INTO  l_COUNT
5444             FROM  gl_sets_of_books sob,
5445                         gl_period_statuses gl,
5446                         igc_cc_periods cp
5447               WHERE   sob.set_of_books_id = p_sob_id
5448             AND   gl.set_of_books_id = sob.set_of_books_id
5449                                 AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5450             AND     cp.org_id = p_org_id
5451             AND   cp.period_set_name = sob.period_set_name
5452             AND   cp.period_name = gl.period_name
5453               AND     cp.cc_period_status = 'O'
5454             AND     gl.closing_status = 'O'
5455                           AND     (p_acct_date BETWEEN gl.start_date AND gl.end_date);
5456                           EXCEPTION
5457                              WHEN OTHERS THEN
5458                  l_COUNT := 0;
5459                                      IF ( g_unexp_level >= g_debug_level ) THEN
5460                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5461                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5462                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5463                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5464                                      END IF;
5465                       END;
5466           IF NVL(l_COUNT,0) = 0  THEN
5467                                     x_valid_cc      := FND_API.G_FALSE;
5468                                     x_return_status := FND_API.G_RET_STS_ERROR;
5469                 fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_O');
5470                                     IF(g_error_level >= g_debug_level) THEN
5471                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5472                                     END IF;
5473                         fnd_msg_pub.add;
5474           END IF;
5475         END IF;
5476       END IF; -- Encumbrance turned on.
5477     END IF;  -- Encumbrance Account Date Validations ends here.
5478 
5479     -- Approval Accounting Date Validations begins here.
5480 
5481     IF p_field_from = 'APPROVAL' THEN
5482       IF NVL(l_cbc_enable_flag,'N') = 'Y' THEN
5483 
5484                          -- Bug # 1678518.
5485 
5486            IF (p_cc_state = 'PR'  OR p_cc_state = 'CM') THEN
5487         IF ( ( p_acct_date < NVL(p_start_date,p_acct_date) ) OR
5488                    ( p_acct_date > NVL(p_end_date,p_acct_date) )
5489                  )
5490                OR ( p_acct_date IS NULL)
5491                OR (p_acct_date < p_prev_acct_date AND
5492                p_prev_acct_date IS NOT NULL)
5493         THEN
5494                                 x_valid_cc      := FND_API.G_FALSE;
5495                                 x_return_status := FND_API.G_RET_STS_ERROR;
5496               fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE');
5497               fnd_message.set_token('ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_ACCT_DATE),FALSE);
5498               fnd_message.set_token('STARTDATE',FND_DATE.DATE_TO_CHARDATE(P_START_DATE),FALSE);
5499               fnd_message.set_token('ENDDATE',FND_DATE.DATE_TO_CHARDATE(P_END_DATE),FALSE);
5500                                 IF(g_error_level >= g_debug_level) THEN
5501                                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5502                                 END IF;
5503               fnd_msg_pub.add;
5504                       END IF;
5505 
5506                          -- Bug # 1678518.
5507 
5508            ELSIF (p_cc_state = 'CL'  OR p_cc_state = 'CT') THEN
5509         IF ( p_acct_date IS NULL)
5510                  OR ( (p_acct_date  NOT BETWEEN p_prev_acct_date AND SYSDATE) AND
5511                  p_prev_acct_date IS NOT NULL AND
5512                                          p_prev_acct_date < SYSDATE)
5513         THEN
5514                                  x_valid_cc      := FND_API.G_FALSE;
5515                                  x_return_status := FND_API.G_RET_STS_ERROR;
5516                fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_CL_CT');
5517                fnd_message.set_token('ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_ACCT_DATE),FALSE);
5518                fnd_message.set_token('PREV_ACCTDATE',FND_DATE.DATE_TO_CHARDATE(P_PREV_ACCT_DATE),FALSE);
5519                                  IF(g_error_level >= g_debug_level) THEN
5520                                     FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5521                                  END IF;
5522                      fnd_msg_pub.add;
5523               END IF;
5524             END IF;
5525       END IF;
5526 
5527       -- Encumbrance turned ON.
5528 
5529       IF p_encumbrance_flag = FND_API.G_TRUE  AND
5530                 (l_sbc_enable_flag = 'Y' )  AND
5531                 ( l_cbc_enable_flag IN ('Y','N') AND
5532                (l_cc_prov_encmbrnc_flag IN ('Y','N') AND (l_cc_conf_encmbrnc_flag = 'Y'))
5533         )
5534             THEN
5535 
5536         -- Encumbrance turned ON.
5537         -- Standard budgetary control is on
5538         -- Commitment budgetary control is on or off.
5539         -- Provisional contract can encumber or not.
5540         -- Confirmed contract must encumber.
5541         IF (p_cc_state = 'PR'  OR p_cc_state = 'CL') AND
5542                  (l_cc_prov_encmbrnc_flag ='Y' AND l_cc_conf_encmbrnc_flag = 'Y')
5543         THEN
5544           BEGIN
5545                                                 -- Performance Tuning, replaced
5546                                                 -- view gl_period_statuses_v with
5547                                                 -- gl_period_statuses
5548                             SELECT  count(*)
5549                           INTO  l_COUNT
5550             FROM  gl_sets_of_books sob,
5551                         gl_period_statuses gl,
5552                         igc_cc_periods cp
5553               WHERE   sob.set_of_books_id = p_sob_id
5554             AND   gl.set_of_books_id = sob.set_of_books_id
5555                                 AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5556             AND      cp.org_id = p_org_id
5557             AND   cp.period_set_name = sob.period_set_name
5558             AND   cp.period_name = gl.period_name
5559               AND      cp.cc_period_status IN ('O','F')
5560             AND      gl.closing_status IN ('O','F')
5561                           AND      (p_acct_date BETWEEN gl.start_date AND gl.end_date);
5562                           EXCEPTION
5563                              WHEN OTHERS THEN
5564                  l_COUNT := 0;
5565                                      IF ( g_unexp_level >= g_debug_level ) THEN
5566                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5567                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5568                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5569                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5570                                      END IF;
5571                       END;
5572           IF NVL(l_COUNT,0) = 0  THEN
5573                                     x_valid_cc      := FND_API.G_FALSE;
5574                                     x_return_status := FND_API.G_RET_STS_ERROR;
5575                 fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_OF');
5576                                     IF(g_error_level >= g_debug_level) THEN
5577                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5578                                     END IF;
5579                         fnd_msg_pub.add;
5580           END IF;
5581 
5582           -- Bug # 1619201.
5583           -- If Previously been encumbered.
5584           -- Fiscal Year Mismatch Valdn begins here.
5585           IF p_prev_acct_date IS NOT NULL
5586           THEN
5587             -- Original Fiscal Year
5588             BEGIN
5589                                                         -- Performance Tuning, Replaced
5590                                                         -- the following query with the
5591                                                         -- one below as we are only
5592                                                         -- interested in the fiscal years.
5593               -- SELECT   DISTINCT cp.period_year
5594               -- INTO   l_orig_fiscal_year
5595               -- FROM   gl_sets_of_books sob,
5596               --  gl_period_statuses_v gl,
5597               --  igc_cc_periods_v cp
5598               -- WHERE  sob.set_of_books_id = p_sob_id
5599               -- AND     gl.set_of_books_id = sob.set_of_books_id
5600                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5601               -- AND     cp.org_id = p_org_id
5602               -- AND     cp.period_set_name= sob.period_set_name
5603               -- AND     cp.period_name = gl.period_name
5604               -- AND  (p_prev_acct_date BETWEEN cp.start_date AND cp.end_date
5605                     --  );
5606                                     SELECT  distinct gl.period_year
5607               INTO    l_orig_fiscal_year
5608                                     FROM  gl_sets_of_books sob,
5609                                             gl_periods gl
5610                                     WHERE   sob.set_of_books_id = p_sob_id
5611                                     AND     gl.period_set_name= sob.period_set_name
5612                                     AND     gl.period_type = sob.accounted_period_type
5613                                     AND     (p_prev_acct_date between gl.start_date and gl.end_date);
5614             END;
5615             -- New Fiscal Year if any.
5616             BEGIN
5617                                                         -- Performance Tuning, Replaced
5618                                                         -- the following query with the
5619                                                         -- one below as we are only
5620                                                         -- interested in the fiscal years.
5621               -- SELECT   DISTINCT cp.period_year
5622               -- INTO   l_new_fiscal_year
5623               -- FROM   gl_sets_of_books sob,
5624               --  gl_period_statuses_v gl,
5625               --  igc_cc_periods_v cp
5626               -- WHERE  sob.set_of_books_id = p_sob_id
5627               -- AND     gl.set_of_books_id = sob.set_of_books_id
5628                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5629               -- AND     cp.org_id = p_org_id
5630               -- AND     cp.period_set_name= sob.period_set_name
5631               -- AND     cp.period_name = gl.period_name
5632               -- AND  (p_acct_date BETWEEN cp.start_date AND cp.end_date
5633               --         );
5634                                     SELECT  distinct gl.period_year
5635               INTO    l_new_fiscal_year
5636                                     FROM  gl_sets_of_books sob,
5637                                             gl_periods gl
5638                                     WHERE   sob.set_of_books_id = p_sob_id
5639                                     AND     gl.period_set_name= sob.period_set_name
5640                                     AND     gl.period_type = sob.accounted_period_type
5641                                     AND    (p_acct_date between gl.start_date and gl.end_date);
5642             END;
5643             IF l_orig_fiscal_year <> l_new_fiscal_year
5644             THEN
5645                                     x_valid_cc      := FND_API.G_FALSE;
5646                                     x_return_status := FND_API.G_RET_STS_ERROR;
5647               fnd_message.set_name('IGC', 'IGC_CC_ACCT_FISCAL_YRS_NE');
5648               fnd_message.set_TOKEN('PREVACTDATE',FND_DATE.DATE_TO_CHARDATE (p_prev_acct_date),FALSE);
5649                                     IF(g_error_level >= g_debug_level) THEN
5650                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5651                                     END IF;
5652               fnd_msg_pub.add;
5653             END IF; -- Fiscal Year Mismatch valdn ends here.
5654           END IF; -- If Previously been encumbered. Bug # 1619201.
5655 
5656         ELSIF (p_cc_state = 'CM' OR p_cc_state = 'CT')
5657         THEN
5658           BEGIN
5659                                                 -- Performance Tuning, replaced
5660                                                 -- view gl_period_statuses_v with
5661                                                 -- gl_period_statuses
5662                             SELECT  count(*)
5663                           INTO  l_COUNT
5664             FROM  gl_sets_of_books sob,
5665                       gl_period_statuses gl,
5666                             igc_cc_periods cp
5667               WHERE   sob.set_of_books_id = p_sob_id
5668             AND   gl.set_of_books_id = sob.set_of_books_id
5669                                 AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
5670             AND     cp.org_id = p_org_id
5671             AND   cp.period_set_name = sob.period_set_name
5672             AND   cp.period_name = gl.period_name
5673               AND      cp.cc_period_status = 'O'
5674             AND      gl.closing_status = 'O'
5675                           AND      (p_acct_date BETWEEN gl.start_date AND gl.end_date);
5676                           EXCEPTION
5677                              WHEN OTHERS THEN
5678                l_COUNT := 0;
5679                                      IF ( g_unexp_level >= g_debug_level ) THEN
5680                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5681                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5682                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5683                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5684                                      END IF;
5685                       END;
5686           IF NVL(l_COUNT,0) = 0  THEN
5687                                     x_valid_cc      := FND_API.G_FALSE;
5688                                     x_return_status := FND_API.G_RET_STS_ERROR;
5689                 fnd_message.set_name('IGC', 'IGC_CC_ACCT_DATE_O');
5690                                     IF(g_error_level >= g_debug_level) THEN
5691                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5692                                     END IF;
5693                         fnd_msg_pub.add;
5694           END IF;
5695         END IF;
5696       END IF; -- Encumbrance turned on.
5697     END IF;  -- Approval Accounting Date Validations ends here.
5698 
5699   ELSIF p_mode = 'T'  THEN
5700 
5701   -- When Mode of call to the procedure is 'T' stands for 'Transition' the following validations should be
5702   -- performed.
5703     BEGIN
5704       SELECT *
5705       INTO l_cc_headers_rec
5706       FROM igc_cc_headers
5707       WHERE cc_header_id = p_cc_header_id;
5708       EXCEPTION
5709                        WHEN no_data_found THEN
5710                                 x_valid_cc      := FND_API.G_FALSE;
5711                                 x_return_status := FND_API.G_RET_STS_ERROR;
5712                 fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
5713                 fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
5714                                 IF(g_error_level >= g_debug_level) THEN
5715                                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5716                                 END IF;
5717                 l_error_message := fnd_message.get;
5718                 FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name, l_error_message);
5719                 RAISE E_CC_NOT_FOUND;
5720 
5721     END;
5722 
5723 
5724     -- Check only for Contract that are transition to confirmed and
5725           -- has an approval status of incomplete and
5726                 -- has an encumbrance status as 'T'.
5727 
5728     IF ((l_cc_headers_rec.cc_state = 'CM') AND
5729                    (l_cc_headers_rec.cc_apprvl_status = 'IN') AND
5730                    (l_cc_headers_rec.cc_encmbrnc_status = 'T')) OR
5731                 -- Bug 2656232, following 2 lines added.
5732                    (l_cc_headers_rec.cc_state = 'PR' AND
5733                     l_cc_headers_rec.cc_apprvl_status = 'IN')
5734                 THEN
5735 
5736         l_cc_acct_cnt   := 0;
5737 
5738         OPEN c_account_lines(p_cc_header_id);
5739         LOOP
5740       l_total_pf_entered_amt := 0;
5741 
5742       FETCH c_account_lines INTO l_cc_acct_lines_rec;
5743 
5744       EXIT WHEN c_account_lines%NOTFOUND;
5745       l_cc_acct_cnt   := l_cc_acct_cnt + 1;
5746 
5747       l_cc_det_pf_cnt   := 0;
5748 
5749       BEGIN
5750                                 -- Performance Tuning, Replaced view
5751                                 -- igc_cc_det_pf_v with
5752                                 -- igc_cc_det_pf
5753         SELECT count(*)
5754         INTO l_cc_det_pf_cnt
5755         FROM igc_cc_det_pf
5756         WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
5757         EXCEPTION
5758            WHEN NO_DATA_FOUND THEN
5759                l_cc_det_pf_cnt := 0;
5760       END;
5761       IF (NVL(l_cc_det_pf_cnt ,0) = 0)
5762                         AND l_cc_acct_lines_rec.cc_ent_withheld_amt <> l_cc_acct_lines_rec.cc_acct_entered_amt
5763                         -- And clause added for 2043221, Bidisha S , 12 Oct 2001
5764                         -- Perform this validation only if the withheld amount is not equal to
5765                         -- the amount in the account line
5766                         THEN
5767                              x_valid_cc      := FND_API.G_FALSE;
5768                              x_return_status := FND_API.G_RET_STS_ERROR;
5769              fnd_message.set_name('IGC', 'IGC_CC_NO_PF');
5770              fnd_message.set_token('ACCT_NUM', to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
5771                              IF(g_error_level >= g_debug_level) THEN
5772                                 FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5773                              END IF;
5774              fnd_msg_pub.add;
5775       ELSIF (NVL(l_cc_det_pf_cnt,0) > 0) THEN
5776 
5777         OPEN c_det_pf_lines(l_cc_acct_lines_rec.cc_acct_line_id);
5778         LOOP
5779 
5780           FETCH c_det_pf_lines INTO l_cc_det_pf_lines_rec;
5781 
5782           EXIT WHEN c_det_pf_lines%NOTFOUND;
5783           l_cc_det_pf_cnt   := l_cc_det_pf_cnt + 1;
5784 
5785           -- PF Date vs Accounting Date Validation.
5786 
5787           IF (l_cc_det_pf_lines_rec.cc_det_pf_date < p_acct_date) THEN
5788                                 x_valid_cc      := FND_API.G_FALSE;
5789                                 x_return_status := FND_API.G_RET_STS_ERROR;
5790                         fnd_message.set_name('IGC', 'IGC_CC_DET_PF_ACCT_DATE');
5791                 fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
5792                 fnd_message.set_TOKEN('ACCTDATE',FND_DATE.DATE_TO_CHARDATE (p_acct_date),FALSE);
5793                                 IF(g_error_level >= g_debug_level) THEN
5794                                    FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5795                                 END IF;
5796             fnd_msg_pub.add;
5797           END IF;
5798 
5799 
5800         END LOOP; -- Payment Forecast Loop end here.
5801 
5802         CLOSE c_det_pf_lines;
5803 
5804       END IF;
5805 
5806        END LOOP;
5807 
5808        CLOSE c_account_lines;
5809 
5810        IF (l_cc_acct_cnt = 0)  THEN
5811                         x_valid_cc      := FND_API.G_FALSE;
5812                         x_return_status := FND_API.G_RET_STS_ERROR;
5813       fnd_message.set_name('IGC', 'IGC_CC_NO_ACCT_LINES');
5814       fnd_message.set_token('CC_NUM', l_cc_headers_rec.cc_num,TRUE);
5815                     IF(g_error_level >= g_debug_level) THEN
5816                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5817                     END IF;
5818       fnd_msg_pub.add;
5819         END IF;
5820     END IF;
5821 
5822 
5823   ELSIF p_mode = 'V'  THEN
5824 
5825   -- When Mode of call to the procedure is 'V' stands for 'Validate' the following validations should be
5826   -- performed.
5827     BEGIN
5828       SELECT *
5829       INTO l_cc_headers_rec
5830       FROM igc_cc_headers
5831       WHERE cc_header_id = p_cc_header_id;
5832       EXCEPTION
5833                        WHEN no_data_found THEN
5834                                      x_valid_cc      := FND_API.G_FALSE;
5835                                      x_return_status := FND_API.G_RET_STS_ERROR;
5836                      fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
5837                      fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
5838                                      IF(g_error_level >= g_debug_level) THEN
5839                                          FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5840                                      END IF;
5841                      l_error_message := fnd_message.get;
5842                      FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name, l_error_message);
5843                      RAISE E_CC_NOT_FOUND;
5844 
5845     END;
5846 
5847 
5848     -- Check only for provisional and confirmed states
5849 
5850     IF (l_cc_headers_rec.cc_state = 'PR') OR (l_cc_headers_rec.cc_state = 'CM')  THEN
5851 
5852         l_cc_acct_cnt   := 0;
5853 
5854         OPEN c_account_lines(p_cc_header_id);
5855         LOOP
5856       l_total_pf_entered_amt := 0;
5857 
5858       FETCH c_account_lines INTO l_cc_acct_lines_rec;
5859 
5860       EXIT WHEN c_account_lines%NOTFOUND;
5861       l_cc_acct_cnt   := l_cc_acct_cnt + 1;
5862 
5863       l_cc_det_pf_cnt   := 0;
5864 
5865       BEGIN
5866                                 -- Performance Tuning, Replaced view
5867                                 -- igc_cc_det_pf_v with
5868                                 -- igc_cc_det_pf and replaced the line
5869                                 -- below.
5870         SELECT count(*)
5871         INTO l_cc_det_pf_cnt
5872         FROM igc_cc_det_pf
5873         WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
5874         EXCEPTION
5875            WHEN NO_DATA_FOUND THEN
5876                l_cc_det_pf_cnt := 0;
5877       END;
5878       IF (NVL(l_cc_det_pf_cnt ,0) = 0)
5879                         AND l_cc_acct_lines_rec.cc_ent_withheld_amt <> l_cc_acct_lines_rec.cc_acct_entered_amt
5880                         -- And clause added for 2043221, Bidisha S , 12 Oct 2001
5881                         -- Perfom this validation only if the withheld amount is not equal to
5882                         -- the amount in the account line
5883                         THEN
5884                               x_valid_cc      := FND_API.G_FALSE;
5885                               x_return_status := FND_API.G_RET_STS_ERROR;
5886               fnd_message.set_name('IGC', 'IGC_CC_NO_PF');
5887               fnd_message.set_token('ACCT_NUM', to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
5888                               IF(g_error_level >= g_debug_level) THEN
5889                                  FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5890                               END IF;
5891               fnd_msg_pub.add;
5892       ELSIF (NVL(l_cc_det_pf_cnt,0) > 0) THEN
5893 
5894         OPEN c_det_pf_lines(l_cc_acct_lines_rec.cc_acct_line_id);
5895         LOOP
5896 
5897           FETCH c_det_pf_lines INTO l_cc_det_pf_lines_rec;
5898 
5899           EXIT WHEN c_det_pf_lines%NOTFOUND;
5900           l_cc_det_pf_cnt   := l_cc_det_pf_cnt + 1;
5901 
5902           -- PF Date vs Start Date Validation.
5903 
5904           IF (l_cc_det_pf_lines_rec.cc_det_pf_date < p_start_date) THEN
5905                                 x_valid_cc      := FND_API.G_FALSE;
5906                                 x_return_status := FND_API.G_RET_STS_ERROR;
5907                         fnd_message.set_name('IGC', 'IGC_CC_DET_PF_START_DATE');
5908                 fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
5909                                 IF (g_error_level >= g_debug_level) THEN
5910                                     FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5911                                 END IF;
5912             fnd_msg_pub.add;
5913           END IF;
5914 
5915           -- PF Date vs End Date Validation.
5916 
5917           IF ( (l_cc_det_pf_lines_rec.cc_det_pf_date > p_end_date) AND
5918                                (p_end_date IS NOT NULL)
5919                            ) THEN
5920                                   x_valid_cc      := FND_API.G_FALSE;
5921                                   x_return_status := FND_API.G_RET_STS_ERROR;
5922                             fnd_message.set_name('IGC', 'IGC_CC_DET_PF_END_DATE');
5923               fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
5924                                   IF(g_error_level >= g_debug_level) THEN
5925                                      FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5926                                   END IF;
5927               fnd_msg_pub.add;
5928           END IF;
5929 
5930                     -- bug 5667529
5931                     -- changes done by kasbalas
5932           -- the validation for the pf date to be in a open period
5933           -- is done here instead of in the if loop below.
5934           -- this is beign done here since the check needs to be
5935           -- maintained even of the DBc is disabled or the
5936           -- computed fucntional amount and encumberence amount
5937           -- match or mismatch
5938 
5939           BEGIN
5940                              -- Performance Tuning, replaced
5941                              -- view gl_period_statuses_v with
5942                              -- gl_period_statuses
5943                     SELECT  count(*)
5944                           INTO  l_COUNT
5945                           FROM  gl_sets_of_books sob,
5946                     gl_period_statuses gl,
5947                   igc_cc_periods cp
5948                  WHERE  sob.set_of_books_id = p_sob_id
5949                AND  gl.set_of_books_id = sob.set_of_books_id
5950                            AND  gl.application_id  = l_gl_application_id   -- Bug 1830385
5951                AND  cp.org_id = p_org_id
5952                  AND  cp.period_set_name = sob.period_set_name
5953                AND  cp.period_name = gl.period_name
5954                  AND  cp.cc_period_status IN ('O','F')
5955                  AND  gl.closing_status IN ('O','F')
5956                  AND  (l_cc_det_pf_lines_rec.cc_det_pf_date
5957                  BETWEEN gl.start_date AND gl.end_date
5958                  );
5959                     EXCEPTION
5960                        WHEN OTHERS THEN
5961                l_COUNT := 0;
5962                            IF ( g_unexp_level >= g_debug_level ) THEN
5963                                FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
5964                                FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
5965                                FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
5966                                FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
5967                             END IF;
5968           END;
5969           IF NVL(l_COUNT,0) = 0  THEN
5970                         x_valid_cc      := FND_API.G_FALSE;
5971                         x_return_status := FND_API.G_RET_STS_ERROR;
5972               fnd_message.set_name('IGC', 'IGC_CC_DET_PF_DATE');
5973                         IF(g_error_level >= g_debug_level) THEN
5974                            FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
5975                         END IF;
5976                     fnd_msg_pub.add;
5977           END IF;
5978 
5979           -- Encumbrance turned ON.
5980           -- Bug 1623034. Commitment Type should not be a RELEASE.
5981 
5982           IF p_encumbrance_flag = FND_API.G_TRUE  AND
5983                  (  (l_sbc_enable_flag = 'Y' )  AND
5984                       ( ( l_cbc_enable_flag IN ('Y','N') AND
5985                             (l_cc_prov_encmbrnc_flag IN ('Y','N') AND
5986                      (l_cc_conf_encmbrnc_flag = 'Y')
5987               )
5988                   )
5989                       )
5990                    ) AND
5991              l_cc_headers_rec.cc_type <> 'R'
5992           THEN
5993 
5994             -- Encumbrance turned ON.
5995             -- Standard budgetary control is on
5996             -- Commitment budgetary control is on or off.
5997             -- Provisional contract can encumber or not.
5998             -- Confirmed contract must encumber.
5999 
6000             IF ( NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) <>
6001                NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) )
6002             THEN
6003                 -- Bug 5667529
6004                 -- changes done by kasbalas
6005                 -- removed teh pf validation code to be outside
6006                 -- this if loop since the check needs to be
6007                     -- maintained even of the DBc is disabled or the
6008                   -- computed fucntional amount and encumberence
6009               -- amount match or mismatch
6010               NULL;
6011 
6012             -- PF Functional and Encumbered Amt Different ends here.
6013 
6014             ELSIF (NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) =
6015                 NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) )
6016             THEN
6017             -- PF Functional and Encumbered Amt  are same starts here.
6018               IF ( ( ( l_cc_prov_encmbrnc_flag  = 'Y'  AND
6019                                (l_cc_conf_encmbrnc_flag = 'Y')
6020                 ) OR
6021                            ( (l_cc_prov_encmbrnc_flag = 'N') AND
6022                              (l_cc_conf_encmbrnc_flag = 'Y') AND
6023                              (l_cc_headers_rec.cc_state = 'CM')
6024                 )
6025                        ) AND
6026                            (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_status <> 'T')
6027                  )
6028               THEN
6029                    IF TRUNC(l_cc_det_pf_lines_rec.cc_det_pf_date ) <>
6030                 TRUNC(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date)
6031                    THEN
6032                                              x_valid_cc      := FND_API.G_FALSE;
6033                                              x_return_status := FND_API.G_RET_STS_ERROR;
6034                      fnd_message.set_name('IGC','IGC_CC_DET_PF_DATE_NO_UPDATE');
6035                      fnd_message.set_TOKEN('ENCMBRNCDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date),FALSE);
6036                                              IF(g_error_level >= g_debug_level) THEN
6037                                                 FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6038                                              END IF;
6039                              fnd_msg_pub.add;
6040                    END IF;
6041               END IF;
6042             END IF ; -- PF Functional and Encumbered Amt  are same.
6043 
6044             -- Encumbrance Amount is greater than zero.
6045             IF NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) >  0
6046             THEN
6047                  -- Original Fiscal Year
6048                BEGIN
6049                                                         -- Performance Tuning, Replaced
6050                                                         -- the following query with the
6051                                                         -- one below as we are only
6052                                                         -- interested in the fiscal years.
6053               -- SELECT   DISTINCT cp.period_year
6054               -- INTO   l_orig_fiscal_year
6055               -- FROM   gl_sets_of_books sob,
6056               --  gl_period_statuses_v gl,
6057               --  igc_cc_periods_v cp
6058               -- WHERE  sob.set_of_books_id = p_sob_id
6059               -- AND     gl.set_of_books_id = sob.set_of_books_id
6060                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
6061               -- AND     cp.org_id = p_org_id
6062               -- AND     cp.period_set_name= sob.period_set_name
6063               -- AND     cp.period_name = gl.period_name
6064               -- AND  (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date
6065               -- BETWEEN cp.start_date AND cp.end_date
6066                     -- );
6067                                     SELECT  distinct gl.period_year
6068               INTO    l_orig_fiscal_year
6069                                     FROM  gl_sets_of_books sob,
6070                                             gl_periods gl
6071                                     WHERE   sob.set_of_books_id = p_sob_id
6072                                     AND     gl.period_set_name= sob.period_set_name
6073                                     AND     gl.period_type = sob.accounted_period_type
6074                                     AND    (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date between gl.start_date and gl.end_date);
6075                  END;
6076               -- New Fiscal Year if any.
6077                BEGIN
6078                                                         -- Performance Tuning, Replaced
6079                                                         -- the following query with the
6080                                                         -- one below as we are only
6081                                                         -- interested in the fiscal years.
6082               -- SELECT   DISTINCT cp.period_year
6083               -- INTO   l_new_fiscal_year
6084               -- FROM   gl_sets_of_books sob,
6085               --  gl_period_statuses_v gl,
6086               --  igc_cc_periods_v cp
6087               -- WHERE  sob.set_of_books_id = p_sob_id
6088               -- AND     gl.set_of_books_id = sob.set_of_books_id
6089                                                         -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
6090               -- AND     cp.org_id = p_org_id
6091               -- AND     cp.period_set_name= sob.period_set_name
6092               -- AND     cp.period_name = gl.period_name
6093               -- AND  ( l_cc_det_pf_lines_rec.cc_det_pf_date
6094               --    BETWEEN cp.start_date AND cp.end_date
6095                     -- );
6096                                     SELECT  distinct gl.period_year
6097               INTO    l_new_fiscal_year
6098                                     FROM  gl_sets_of_books sob,
6099                                             gl_periods gl
6100                                     WHERE   sob.set_of_books_id = p_sob_id
6101                                     AND     gl.period_set_name= sob.period_set_name
6102                                     AND     gl.period_type = sob.accounted_period_type
6103                                     AND    (l_cc_det_pf_lines_rec.cc_det_pf_date between gl.start_date and gl.end_date);
6104                END;
6105               IF l_orig_fiscal_year <> l_new_fiscal_year
6106               THEN
6107                                             x_valid_cc      := FND_API.G_FALSE;
6108                                             x_return_status := FND_API.G_RET_STS_ERROR;
6109                   fnd_message.set_name('IGC', 'IGC_CC_FISCAL_YRS_NE');
6110                   fnd_message.set_TOKEN('ENCMBRNCDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date),FALSE);
6111                                             IF(g_error_level >= g_debug_level) THEN
6112                                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6113                                             END IF;
6114                   fnd_msg_pub.add;
6115               END IF; -- Fiscal Year Mismatch valdn ends here.
6116             END IF; -- Encumbrance Amt is greater than zero ends here.
6117           END IF; -- Encumbrance turned ON validation ends here.
6118 
6119         END LOOP; -- Payment Forecast Loop end here.
6120 
6121         CLOSE c_det_pf_lines;
6122 
6123       END IF;
6124                         -- Performance Tuning, Replaced view
6125                         -- igc_cc_det_pf_v with
6126                         -- igc_cc_det_pf and replaced the line
6127                         -- below.
6128       SELECT SUM(NVL(CC_DET_PF_ENTERED_AMT,0))
6129       INTO l_total_pf_entered_amt
6130       FROM igc_cc_det_pf
6131       WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
6132 
6133       IF ( l_total_pf_entered_amt  +
6134                              NVL(l_cc_acct_lines_rec.cc_ent_withheld_amt,0)) <> NVL(l_cc_acct_lines_rec.cc_acct_entered_amt,0)
6135                         -- '+' added for 2043221, Bidisha S , 12 Oct 2001
6136                         -- This validation now needs to include the withheld amount
6137                         THEN
6138                            x_valid_cc      := FND_API.G_FALSE;
6139                            x_return_status := FND_API.G_RET_STS_ERROR;
6140            fnd_message.set_name('IGC', 'IGC_CC_AMT_MISMATCH');
6141            fnd_message.set_token('ACCT_NUM',to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
6142                            IF(g_error_level >= g_debug_level) THEN
6143                               FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6144                            END IF;
6145            fnd_msg_pub.add;
6146       END IF;
6147 
6148        END LOOP;
6149 
6150        CLOSE c_account_lines;
6151 
6152        IF (l_cc_acct_cnt = 0)  THEN
6153                         x_valid_cc      := FND_API.G_FALSE;
6154                         x_return_status := FND_API.G_RET_STS_ERROR;
6155       fnd_message.set_name('IGC', 'IGC_CC_NO_ACCT_LINES');
6156       fnd_message.set_token('CC_NUM', l_cc_headers_rec.cc_num,TRUE);
6157                     IF(g_error_level >= g_debug_level) THEN
6158                        FND_LOG.MESSAGE(g_error_level, g_debug_level, FALSE);
6159                     END IF;
6160       fnd_msg_pub.add;
6161         END IF;
6162     END IF;
6163 
6164   ELSIF  p_mode = 'A'   OR p_mode = 'B' THEN
6165 
6166   -- When Mode of call to the procedure is either 'A' stands for 'Approval'  or 'B' for 'Encumbrance'
6167   -- the following validations should be performed.
6168 
6169 
6170   -- Common Payment Forecast Date Validations.
6171 
6172     BEGIN
6173       SELECT *
6174       INTO l_cc_headers_rec
6175       FROM igc_cc_headers
6176       WHERE cc_header_id = p_cc_header_id;
6177       EXCEPTION
6178                        WHEN no_data_found THEN
6179                                  x_valid_cc      := FND_API.G_FALSE;
6180                                  x_return_status := FND_API.G_RET_STS_ERROR;
6181                  fnd_message.set_name('IGC', 'IGC_CC_NOT_FOUND');
6182                  fnd_message.set_token('CC_NUM', to_char(p_cc_header_id),TRUE);
6183                                  IF(g_error_level >= g_debug_level) THEN
6184                                     FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6185                                  END IF;
6186                  l_error_message := fnd_message.get;
6187                  FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name, l_error_message);
6188                  RAISE E_CC_NOT_FOUND;
6189 
6190     END;
6191 
6192     -- Check only for provisional and confirmed states
6193 
6194     IF (l_cc_headers_rec.cc_state = 'PR') OR (l_cc_headers_rec.cc_state = 'CM')  THEN
6195 
6196     l_cc_acct_cnt   := 0;
6197 
6198       OPEN c_account_lines(p_cc_header_id);
6199       LOOP
6200         l_total_pf_entered_amt := 0;
6201 
6202         FETCH c_account_lines INTO l_cc_acct_lines_rec;
6203 
6204         EXIT WHEN c_account_lines%NOTFOUND;
6205         l_cc_acct_cnt   := l_cc_acct_cnt + 1;
6206 
6207         l_cc_det_pf_cnt   := 0;
6208 
6209         BEGIN
6210                                         -- Performance Tuning, Replaced view
6211                                         -- igc_cc_det_pf_v with
6212                                         -- igc_cc_det_pf and replaced the line
6213                                         -- below.
6214           SELECT count(*)
6215           INTO l_cc_det_pf_cnt
6216           FROM igc_cc_det_pf
6217           WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
6218           EXCEPTION
6219              WHEN NO_DATA_FOUND THEN
6220                  l_cc_det_pf_cnt := 0;
6221                                      IF ( g_unexp_level >= g_debug_level ) THEN
6222                                         FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
6223                                         FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
6224                                         FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
6225                                         FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
6226                                      END IF;
6227         END;
6228         IF (NVL(l_cc_det_pf_cnt ,0) = 0)
6229                                 AND l_cc_acct_lines_rec.cc_ent_withheld_amt <> l_cc_acct_lines_rec.cc_acct_entered_amt
6230                                 -- And clause added for 2043221, Bidisha S , 12 Oct 2001
6231                                 -- Perfom this validation only if the withheld amount is not equal to
6232                                 -- the amount in the account line
6233                                 THEN
6234                                         x_valid_cc      := FND_API.G_FALSE;
6235                                         x_return_status := FND_API.G_RET_STS_ERROR;
6236           fnd_message.set_name('IGC', 'IGC_CC_NO_PF');
6237           fnd_message.set_token('ACCT_NUM', to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
6238                             IF(g_error_level >= g_debug_level) THEN
6239                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6240                             END IF;
6241           fnd_msg_pub.add;
6242         ELSIF (NVL(l_cc_det_pf_cnt,0) > 0) THEN
6243 
6244           OPEN c_det_pf_lines(l_cc_acct_lines_rec.cc_acct_line_id);
6245           LOOP
6246 
6247             FETCH c_det_pf_lines INTO l_cc_det_pf_lines_rec;
6248 
6249             EXIT WHEN c_det_pf_lines%NOTFOUND;
6250             l_cc_det_pf_cnt   := l_cc_det_pf_cnt + 1;
6251 
6252             -- PF Date vs Start Date Validation.
6253 
6254             IF (l_cc_det_pf_lines_rec.cc_det_pf_date < p_start_date) THEN
6255                                         x_valid_cc      := FND_API.G_FALSE;
6256                                         x_return_status := FND_API.G_RET_STS_ERROR;
6257                               fnd_message.set_name('IGC', 'IGC_CC_DET_PF_START_DATE');
6258                       fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
6259                                         IF(g_error_level >= g_debug_level) THEN
6260                                            FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6261                                         END IF;
6262                   fnd_msg_pub.add;
6263             END IF;
6264 
6265             -- PF Date vs End Date Validation.
6266 
6267             IF ( (l_cc_det_pf_lines_rec.cc_det_pf_date > p_end_date) AND
6268                                  (p_end_date IS NOT NULL)
6269                                    ) THEN
6270                                     x_valid_cc      := FND_API.G_FALSE;
6271                                     x_return_status := FND_API.G_RET_STS_ERROR;
6272               fnd_message.set_name('IGC', 'IGC_CC_DET_PF_END_DATE');
6273               fnd_message.set_TOKEN('PFDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_date),FALSE);
6274                                     IF(g_error_level >= g_debug_level) THEN
6275                                        FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6276                                     END IF;
6277               fnd_msg_pub.add;
6278             END IF;
6279 
6280                         -- bug 5667529
6281                         -- changes done by kasbalas
6282               -- the validation for the pf date to be in a open period
6283               -- is done here instead of in the if loop below.
6284               -- this is beign done here since the check needs to be
6285               -- maintained even of the DBc is disabled or the
6286               -- computed fucntional amount and encumberence amount
6287               -- match or mismatch
6288 
6289               BEGIN
6290                              -- Performance Tuning, replaced
6291                              -- view gl_period_statuses_v with
6292                              -- gl_period_statuses
6293                         SELECT  count(*)
6294                               INTO  l_COUNT
6295                               FROM  gl_sets_of_books sob,
6296                         gl_period_statuses gl,
6297                       igc_cc_periods cp
6298                      WHERE  sob.set_of_books_id = p_sob_id
6299                    AND  gl.set_of_books_id = sob.set_of_books_id
6300                                AND  gl.application_id  = l_gl_application_id   -- Bug 1830385
6301                    AND  cp.org_id = p_org_id
6302                      AND  cp.period_set_name = sob.period_set_name
6303                    AND  cp.period_name = gl.period_name
6304                      AND  cp.cc_period_status IN ('O','F')
6305                      AND  gl.closing_status IN ('O','F')
6306                      AND  (l_cc_det_pf_lines_rec.cc_det_pf_date
6307                      BETWEEN gl.start_date AND gl.end_date
6308                      );
6309                         EXCEPTION
6310                            WHEN OTHERS THEN
6311                    l_COUNT := 0;
6312                                IF ( g_unexp_level >= g_debug_level ) THEN
6313                                    FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
6314                                    FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
6315                                    FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
6316                                    FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
6317                                 END IF;
6318               END;
6319               IF NVL(l_COUNT,0) = 0  THEN
6320                             x_valid_cc      := FND_API.G_FALSE;
6321                             x_return_status := FND_API.G_RET_STS_ERROR;
6322                   fnd_message.set_name('IGC', 'IGC_CC_DET_PF_DATE');
6323                             IF(g_error_level >= g_debug_level) THEN
6324                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6325                             END IF;
6326                         fnd_msg_pub.add;
6327               END IF;
6328 
6329             -- Encumbrance turned ON.
6330             -- Bug 1623034. Commitment Type should not be a RELEASE.
6331 
6332             IF p_encumbrance_flag = FND_API.G_TRUE  AND
6333                    (  (l_sbc_enable_flag = 'Y' )  AND
6334                         ( l_cbc_enable_flag IN ('Y','N') AND
6335                               (l_cc_prov_encmbrnc_flag IN ('Y','N') AND
6336                        (l_cc_conf_encmbrnc_flag = 'Y')
6337                       )
6338                         )
6339                      ) AND
6340                   l_cc_headers_rec.cc_type <> 'R'
6341             THEN
6342 
6343               -- Encumbrance turned ON.
6344               -- Standard budgetary control is on
6345               -- Commitment budgetary control is on or off.
6346               -- Provisional contract can encumber or not.
6347               -- Confirmed contract must encumber.
6348 
6349               IF ( NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) <>
6350                  NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) )
6351               THEN
6352                   -- Bug 5667529
6353                   -- changes done by kasbalas
6354                   -- removed teh pf validation code to be outside
6355                   -- this if loop since the check needs to be
6356                       -- maintained even of the DBc is disabled or the
6357                     -- computed fucntional amount and encumberence
6358                 -- amount match or mismatch
6359                 NULL;
6360 
6361               -- PF Functional and Encumbered Amt Different ends here.
6362 
6363               ELSIF (NVL(l_cc_det_pf_lines_rec.cc_det_pf_comp_func_amt,0) =
6364                      NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) )
6365               THEN
6366               -- PF Functional and Encumbered Amt  are same starts here.
6367                 IF ( ( ( l_cc_prov_encmbrnc_flag  = 'Y'  AND
6368                                  (l_cc_conf_encmbrnc_flag = 'Y')
6369                   ) OR
6370                        ( (l_cc_prov_encmbrnc_flag = 'N') AND
6371                          (l_cc_conf_encmbrnc_flag = 'Y') AND
6372                          (l_cc_headers_rec.cc_state = 'CM')
6373                   )
6374                       ) AND
6375                      (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_status <> 'T')
6376                    )
6377                 THEN
6378                      IF TRUNC(l_cc_det_pf_lines_rec.cc_det_pf_date ) <>
6379                   TRUNC (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date)
6380                      THEN
6381                                                                            x_valid_cc      := FND_API.G_FALSE;
6382                                                                            x_return_status := FND_API.G_RET_STS_ERROR;
6383                      fnd_message.set_name('IGC',
6384                       'IGC_CC_DET_PF_DATE_NO_UPDATE');
6385                      fnd_message.set_TOKEN('ENCMBRNCDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date),FALSE);
6386                                                IF(g_error_level >= g_debug_level) THEN
6387                                                   FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6388                                                END IF;
6389                                fnd_msg_pub.add;
6390                      END IF;
6391                 END IF;
6392               END IF ; -- PF Functional and Encumbered Amt  are same.
6393 
6394               -- Encumbrance Amount is greater than zero.
6395               IF NVL(l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_amt,0) >  0
6396               THEN
6397                  -- Original Fiscal Year
6398                  BEGIN
6399                                                                 -- Performance Tuning, Replaced
6400                                                                 -- the following query with the
6401                                                                 -- one below as we are only
6402                                                                 -- interested in the fiscal years.
6403                 -- SELECT   DISTINCT cp.period_year
6404                 -- INTO   l_orig_fiscal_year
6405                 -- FROM   gl_sets_of_books sob,
6406                 --  gl_period_statuses_v gl,
6407                 --  igc_cc_periods_v cp
6408                 -- WHERE  sob.set_of_books_id = p_sob_id
6409                 -- AND     gl.set_of_books_id = sob.set_of_books_id
6410                                                                 -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
6411                 -- AND     cp.org_id = p_org_id
6412                 -- AND     cp.period_set_name= sob.period_set_name
6413                 -- AND     cp.period_name = gl.period_name
6414                 -- AND  (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date
6415                 --    BETWEEN cp.start_date AND cp.end_date
6416                       -- );
6417                                          SELECT   distinct gl.period_year
6418                        INTO   l_orig_fiscal_year
6419                                          FROM   gl_sets_of_books sob,
6420                                                 gl_periods gl
6421                                          WHERE  sob.set_of_books_id = p_sob_id
6422                                          AND     gl.period_set_name= sob.period_set_name
6423                                          AND     gl.period_type = sob.accounted_period_type
6424                                          AND    (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date between gl.start_date and gl.end_date);
6425                    END;
6426                  -- New Fiscal Year if any.
6427                  BEGIN
6428                                                                 -- Performance Tuning, Replaced
6429                                                                 -- the following query with the
6430                                                                 -- one below as we are only
6431                                                                 -- interested in the fiscal years.
6432                 -- SELECT   DISTINCT cp.period_year
6433                 -- INTO   l_new_fiscal_year
6434                 -- FROM   gl_sets_of_books sob,
6435                 --  gl_period_statuses_v gl,
6436                 --  igc_cc_periods_v cp
6437                 -- WHERE  sob.set_of_books_id = p_sob_id
6438                 -- AND     gl.set_of_books_id = sob.set_of_books_id
6439                                                                 -- AND     gl.application_id  = l_gl_application_id   -- Bug 1830385
6440                 -- AND     cp.org_id = p_org_id
6441                 -- AND     cp.period_set_name= sob.period_set_name
6442                 -- AND     cp.period_name = gl.period_name
6443                 -- AND  (l_cc_det_pf_lines_rec.cc_det_pf_date
6444                 --    BETWEEN cp.start_date AND cp.end_date
6445                       --  );
6446                                           SELECT  distinct gl.period_year
6447                         INTO    l_new_fiscal_year
6448                                           FROM      gl_sets_of_books sob,
6449                                                     gl_periods gl
6450                                           WHERE   sob.set_of_books_id = p_sob_id
6451                                           AND     gl.period_set_name= sob.period_set_name
6452                                           AND     gl.period_type = sob.accounted_period_type
6453                                           AND    (l_cc_det_pf_lines_rec.cc_det_pf_date between gl.start_date and gl.end_date);
6454                   END;
6455                 IF l_orig_fiscal_year <> l_new_fiscal_year
6456                 THEN
6457                                             x_valid_cc      := FND_API.G_FALSE;
6458                                             x_return_status := FND_API.G_RET_STS_ERROR;
6459                   fnd_message.set_name('IGC', 'IGC_CC_FISCAL_YRS_NE');
6460                   fnd_message.set_TOKEN('ENCMBRNCDATE',FND_DATE.DATE_TO_CHARDATE (l_cc_det_pf_lines_rec.cc_det_pf_encmbrnc_date),FALSE);
6461                                             IF(g_error_level >= g_debug_level) THEN
6462                                                FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6463                                             END IF;
6464                   fnd_msg_pub.add;
6465                 END IF; -- Fiscal Year Mismatch valdn ends here.
6466               END IF; -- Encumbrance Amt is greater than zero ends here.
6467             END IF; -- Encumbrance turned ON validation ends here.
6468 
6469           END LOOP; -- Payment Forecast Loop end here.
6470 
6471           CLOSE c_det_pf_lines;
6472 
6473         END IF;
6474                                 -- Performance Tuning, Replaced view
6475                                 -- igc_cc_det_pf_v with igc_cc_det_pf
6476         SELECT SUM(NVL(CC_DET_PF_ENTERED_AMT,0))
6477         INTO l_total_pf_entered_amt
6478         FROM igc_cc_det_pf
6479         WHERE cc_acct_line_id = l_cc_acct_lines_rec.cc_acct_line_id;
6480 
6481         IF ( l_total_pf_entered_amt
6482                                      + NVL(l_cc_acct_lines_rec.cc_ent_withheld_amt,0) )
6483                                       <> (NVL(l_cc_acct_lines_rec.cc_acct_entered_amt,0))
6484                                      -- '+' added for 2043221, Bidisha S , 12 Oct 2001
6485                                      -- This validation now needs to include the withheld amount
6486         THEN
6487                             x_valid_cc      := FND_API.G_FALSE;
6488                             x_return_status := FND_API.G_RET_STS_ERROR;
6489           fnd_message.set_name('IGC', 'IGC_CC_AMT_MISMATCH');
6490           fnd_message.set_token('ACCT_NUM',to_char(l_cc_acct_lines_rec.cc_acct_line_num),TRUE);
6491                             IF(g_error_level >= g_debug_level) THEN
6492                                 FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6493                             END IF;
6494           fnd_msg_pub.add;
6495         END IF;
6496 
6497       END LOOP;
6498 
6499       CLOSE c_account_lines;
6500 
6501       IF (l_cc_acct_cnt = 0)  THEN
6502                         x_valid_cc      := FND_API.G_FALSE;
6503                         x_return_status := FND_API.G_RET_STS_ERROR;
6504         fnd_message.set_name('IGC', 'IGC_CC_NO_ACCT_LINES');
6505         fnd_message.set_token('CC_NUM', l_cc_headers_rec.cc_num,TRUE);
6506                         IF(g_error_level >= g_debug_level) THEN
6507                            FND_LOG.MESSAGE(g_error_level, l_full_path, FALSE);
6508                         END IF;
6509         fnd_msg_pub.add;
6510       END IF;
6511 
6512     END IF;
6513 
6514   END IF;
6515 
6516     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data  => x_msg_data );
6517 
6518   EXCEPTION
6519            WHEN E_CC_NOT_FOUND OR E_CC_INVALID_SET_UP THEN
6520           x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6521           x_valid_cc        := FND_API.G_FALSE;
6522           FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6523                                                 p_data  => x_msg_data );
6524            CLOSE c_account_lines;
6525                 IF (g_excep_level >=  g_debug_level ) THEN
6526                    FND_LOG.STRING (g_excep_level,l_full_path,'E_CC_NOT_FOUND OR E_CC_INVALID_SET_UP Exception Raised');
6527                 END IF;
6528 
6529      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6530           x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6531                 x_valid_cc        := FND_API.G_FALSE;
6532           FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6533                                           p_data  => x_msg_data );
6534           CLOSE c_account_lines;
6535                 IF (g_excep_level >=  g_debug_level ) THEN
6536                    FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR Exception Raised');
6537                 END IF;
6538 
6539      WHEN OTHERS THEN
6540           x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6541           x_valid_cc        := FND_API.G_FALSE;
6542 
6543       IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6544       THEN
6545         FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME, l_api_name);
6546       END IF;
6547 
6548       FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6549                                             p_data  => x_msg_data );
6550       CLOSE c_account_lines;
6551 
6552                     IF ( g_unexp_level >= g_debug_level ) THEN
6553                        FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
6554                        FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
6555                        FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
6556                        FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
6557                     END IF;
6558 
6559 END Validate_CC;
6560 
6561 -- This procedure calculates the non recoverable tax given an amount.
6562 -- Bug 2409502
6563 PROCEDURE calculate_nonrec_tax (
6564                                 p_api_version       IN       NUMBER,
6565                                 p_init_msg_list     IN       VARCHAR2 := FND_API.G_FALSE,
6566                                 p_commit            IN       VARCHAR2 := FND_API.G_FALSE,
6567                                 p_validation_level  IN       NUMBER   := FND_API.G_VALID_LEVEL_FULL,
6568                                 x_return_status     OUT NOCOPY      VARCHAR2,
6569                                 x_msg_count         OUT NOCOPY      NUMBER,
6570                                 x_msg_data          OUT NOCOPY      VARCHAR2,
6571                                 p_tax_id            IN       ap_tax_codes.tax_id%TYPE,
6572                                 p_amount            IN       NUMBER,
6573                                 p_tax_amount        OUT NOCOPY      NUMBER)
6574 IS
6575    CURSOR c_get_tax IS
6576    SELECT Nvl(tax_recovery_rate,100),
6577           Nvl(tax_rate,0)
6578    FROM   ap_tax_codes a,
6579           financials_system_parameters b
6580    WHERE  a.set_of_books_id = b.set_of_books_id
6581    AND    a.tax_id          = p_tax_id;
6582 
6583 
6584    l_api_name                 CONSTANT VARCHAR2(30)   := 'Calculate_Nonrec_Tax';
6585    l_api_version              CONSTANT NUMBER         := 1.0;
6586    l_tax_recovery_rate        ap_tax_codes.tax_recovery_rate%TYPE;
6587    l_tax_rate                 ap_tax_codes.tax_rate%TYPE;
6588    l_full_path                VARCHAR2(255);
6589 
6590 BEGIN
6591 
6592     l_full_path := g_path || 'calculate_nonrec_tax';
6593 
6594     IF FND_API.to_Boolean(p_init_msg_list)
6595     THEN
6596   FND_MSG_PUB.initialize;
6597     END IF;
6598 
6599     IF NOT FND_API.Compatible_API_Call(l_api_version,
6600            p_api_version,
6601            l_api_name,
6602            G_PKG_NAME)
6603     THEN
6604   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6605     END IF;
6606 
6607     x_return_status := FND_API.G_RET_STS_SUCCESS;
6608 
6609     -- Get the tax rates
6610     OPEN c_get_tax;
6611     FETCH c_get_tax INTO l_tax_recovery_rate,
6612                          l_tax_rate;
6613     CLOSE c_get_tax;
6614 
6615     IF l_tax_recovery_rate <> 100
6616     THEN
6617         p_tax_amount := ((100 - l_tax_recovery_rate)/100) *
6618                            (l_tax_rate/100) * p_amount;
6619     END IF;
6620 
6621 
6622     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count, p_data  => x_msg_data );
6623 
6624 EXCEPTION
6625     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6626     x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6627     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6628         p_data  => x_msg_data );
6629     IF (g_excep_level >=  g_debug_level ) THEN
6630        FND_LOG.STRING (g_excep_level,l_full_path,'FND_API.G_EXC_UNEXPECTED_ERROR Exception Raised');
6631     END IF;
6632 
6633     WHEN OTHERS THEN
6634     x_return_status   := FND_API.G_RET_STS_UNEXP_ERROR;
6635 
6636     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6637     THEN
6638       FND_MSG_PUB.Add_Exc_Msg ( G_PKG_NAME, l_api_name);
6639     END IF;
6640 
6641     FND_MSG_PUB.Count_And_Get ( p_count => x_msg_count,
6642         p_data  => x_msg_data );
6643 
6644     IF ( g_unexp_level >= g_debug_level ) THEN
6645        FND_MESSAGE.SET_NAME('IGC','IGC_LOGGING_UNEXP_ERROR');
6646        FND_MESSAGE.SET_TOKEN('CODE',SQLCODE);
6647        FND_MESSAGE.SET_TOKEN('MSG',  SQLERRM);
6648        FND_LOG.MESSAGE ( g_unexp_level,l_full_path, TRUE);
6649     END IF;
6650 
6651 END calculate_nonrec_tax;
6652 
6653 END IGC_CC_BUDGETARY_CTRL_PKG;