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