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