[Home] [Help]
PACKAGE BODY: APPS.FA_GCCID_PKG
Source
1 PACKAGE BODY FA_GCCID_PKG as
2 /* $Header: FAFBGCB.pls 120.8 2010/12/21 09:51:48 gigupta ship $tpershad ship */
3
4 G_check_dist_accts boolean := TRUE;
5 g_custom_gen_ccid boolean := fa_cache_pkg.fa_custom_gen_ccid;
6 g_profile_init boolean := fa_cache_pkg.fa_profile_init;
7 g_log_level_rec fa_api_types.log_level_rec_type;
8
9 FUNCTION fafb_load_functions(p_log_level_rec IN
10 fa_api_types.log_level_rec_type default null)
11 return boolean is
12 h_i BINARY_INTEGER:=0; /* Index to the table */
13 begin <<load_functions>>
14 h_i:= h_i+1; /* h_i=1 */
15 fafb_accts(h_i).type_name := 'AP_INTERCOMPANY_ACCT';
16 fafb_accts(h_i).type_code := 'AP_INTERCO';
17 fafb_accts(h_i).flag := 'N';
18 h_i:=h_i+1;
19 fafb_accts(h_i).type_name := 'AR_INTERCOMPANY_ACCT';
20 fafb_accts(h_i).type_code := 'AR_INTERCO';
21 fafb_accts(h_i).flag := 'N';
22 h_i:=h_i+1;
23 fafb_accts(h_i).type_name := 'COST_OF_REMOVAL_CLEARING_ACCT';
24 fafb_accts(h_i).type_code := 'COR_CLEARING';
25 fafb_accts(h_i).flag := 'G';
26 h_i:=h_i+1; /* h_i=4 */
27 fafb_accts(h_i).type_name := 'COST_OF_REMOVAL_GAIN_ACCT';
28 fafb_accts(h_i).type_code := 'COR_GAIN';
29 fafb_accts(h_i).flag := 'G';
30 h_i:=h_i+1; /* h_i=5 */
31 fafb_accts(h_i).type_name := 'COST_OF_REMOVAL_LOSS_ACCT';
32 fafb_accts(h_i).type_code := 'COR_LOSS';
33 fafb_accts(h_i).flag := 'G';
34 h_i:=h_i+1; /* h_i=6 */
35 fafb_accts(h_i).type_name := 'DEFERRED_DEPRN_EXPENSE_ACCT';
36 fafb_accts(h_i).type_code := 'DEF_DEPRN_EXP';
37 fafb_accts(h_i).flag := 'N';
38 h_i:=h_i+1; /* h_i=7 */
39 fafb_accts(h_i).type_name := 'DEFERRED_DEPRN_RESERVE_ACCT';
40 fafb_accts(h_i).type_code := 'DEF_DEPRN_RSV';
41 fafb_accts(h_i).flag := 'N';
42 h_i:=h_i+1; /* h_i=8 */
43 fafb_accts(h_i).type_name := 'NBV_RETIRED_GAIN_ACCT';
44 fafb_accts(h_i).type_code := 'NBV_GAIN';
45 fafb_accts(h_i).flag := 'G';
46 h_i:=h_i+1;
47 fafb_accts(h_i).type_name := 'NBV_RETIRED_LOSS_ACCT';
48 fafb_accts(h_i).type_code := 'NBV_LOSS';
49 fafb_accts(h_i).flag := 'G';
50 h_i:=h_i+1; /* h_i=10 */
51 fafb_accts(h_i).type_name := 'PROCEEDS_OF_SALE_CLEARING_ACCT';
52 fafb_accts(h_i).type_code := 'POS_CLEARING';
53 fafb_accts(h_i).flag := 'G';
54 h_i:=h_i+1; /* h_i=11 */
55 fafb_accts(h_i).type_name := 'PROCEEDS_OF_SALE_GAIN_ACCT';
56 fafb_accts(h_i).type_code := 'POS_GAIN';
57 fafb_accts(h_i).flag := 'G';
58 h_i:=h_i+1;
59 fafb_accts(h_i).type_name := 'PROCEEDS_OF_SALE_LOSS_ACCT';
60 fafb_accts(h_i).type_code := 'POS_LOSS';
61 fafb_accts(h_i).flag := 'G';
62 h_i:=h_i+1;
63 fafb_accts(h_i).type_name := 'REVAL_RSV_RETIRED_GAIN_ACCT';
64 fafb_accts(h_i).type_code := 'REV_RSV_GAIN';
65 fafb_accts(h_i).flag := 'A';
66 h_i:=h_i+1; /* h_i=14 */
67 fafb_accts(h_i).type_name := 'REVAL_RSV_RETIRED_LOSS_ACCT';
68 fafb_accts(h_i).type_code := 'REV_RSV_LOSS';
69 fafb_accts(h_i).flag := 'A';
70 h_i:=h_i+1;
71 fafb_accts(h_i).type_name := 'ASSET_CLEARING_ACCT';
72 fafb_accts(h_i).type_code := 'ASSET_CLEARING';
73 fafb_accts(h_i).flag := 'A';
74 h_i:=h_i+1;
75 fafb_accts(h_i).type_name := 'ASSET_COST_ACCT';
76 fafb_accts(h_i).type_code := 'ASSET_COST';
77 fafb_accts(h_i).flag := 'A';
78 h_i:=h_i+1; /* h_i=17 */
79 fafb_accts(h_i).type_name := 'CIP_CLEARING_ACCT';
80 fafb_accts(h_i).type_code := 'CIP_CLEARING';
81 fafb_accts(h_i).flag := 'A';
82 h_i:=h_i+1;
83 fafb_accts(h_i).type_name := 'CIP_COST_ACCT';
84 fafb_accts(h_i).type_code := 'CIP_COST';
85 fafb_accts(h_i).flag := 'A';
86 h_i:=h_i+1;
87 fafb_accts(h_i).type_name := 'DEPRN_RESERVE_ACCT';
88 fafb_accts(h_i).type_code := 'DEPRN_RSV';
89 fafb_accts(h_i).flag := 'A';
90 h_i:=h_i+1; /* h_i=20 */
91 fafb_accts(h_i).type_name := 'BONUS_DEPRN_RESERVE_ACCT';
92 fafb_accts(h_i).type_code := 'BONUS_DEPRN_RSV';
93 fafb_accts(h_i).flag := 'A';
94 h_i:=h_i+1;
95 fafb_accts(h_i).type_name := 'REVAL_AMORTIZATION_ACCT';
96 fafb_accts(h_i).type_code := 'REV_AMORT';
97 fafb_accts(h_i).flag := 'A';
98 h_i:=h_i+1;
99 fafb_accts(h_i).type_name := 'REVAL_RESERVE_ACCT';
100 fafb_accts(h_i).type_code := 'REV_RSV';
101 fafb_accts(h_i).flag := 'A';
102 h_i:=h_i+1; /* h_i=23 */
103 fafb_accts(h_i).type_name := 'DEPRN_EXPENSE_ACCT';
104 fafb_accts(h_i).type_code := 'DEPRN_EXP';
105 fafb_accts(h_i).flag := 'D';
106 h_i:=h_i+1;
107 fafb_accts(h_i).type_name := 'BONUS_DEPRN_EXPENSE_ACCT';
108 fafb_accts(h_i).type_code := 'BONUS_DEPRN_EXP';
109 fafb_accts(h_i).flag := 'D';
110 h_i:=h_i+1; /* h_i=25 */
111 fafb_accts(h_i).type_name := 'DEPRN_ADJUSTMENT_ACCT';
112 fafb_accts(h_i).type_code := 'DEPRN_ADJ';
113 fafb_accts(h_i).flag := 'N';
114 h_i:=h_i+1;
115 fafb_accts(h_i).type_name := 'IMPAIR_EXPENSE_ACCT';
116 fafb_accts(h_i).type_code := 'IMPAIR_EXP';
117 fafb_accts(h_i).flag := 'D';
118 h_i:=h_i+1; /* h_i=27 */
119 fafb_accts(h_i).type_name := 'IMPAIR_RESERVE_ACCT';
120 fafb_accts(h_i).type_code := 'IMPAIR_RSV';
121 fafb_accts(h_i).flag := 'A';
122 h_i:=h_i+1;
123 fafb_accts(h_i).type_name := 'CAPITAL_ADJ_ACCT'; -- Bug 6666666 : Added for
124 fafb_accts(h_i).type_code := 'CAPITAL_ADJ'; -- SORP Compliance Project
125 fafb_accts(h_i).flag := 'A';
126 h_i:=h_i+1; /* h_i=29 */
127 fafb_accts(h_i).type_name := 'GENERAL_FUND_ACCT'; -- Bug 6666666 : Added for
128 fafb_accts(h_i).type_code := 'GENERAL_FUND'; -- SORP Compliance Project
129 fafb_accts(h_i).flag := 'A';
130 h_i:=h_i+1; /* h_i=30 */
131 fafb_accts(h_i).type_name := 'REVAL_LOSS_ACCT';
132 fafb_accts(h_i).type_code := 'REVAL_LOSS';
133 fafb_accts(h_i).flag := 'A';
134
135 return TRUE;
136 EXCEPTION
137 WHEN OTHERS THEN
138 FA_SRVR_MSG.ADD_SQL_ERROR
139 ( CALLING_FN => 'FA_GCCID_PKG.fafb_load_functions', p_log_level_rec => p_log_level_rec);
140 return FALSE;
141 end fafb_load_functions;
142
143 ------------------------------------------------------------------
144 FUNCTION fafb_search_functions(X_fin_trx_code varchar2,
145 X_function_code out nocopy varchar2, p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
146 return boolean
147 is
148 h_i binary_integer:=0;
149 h_j binary_integer:=0;
150 begin <<fafb_search_functions>>
151 FOR h_i in 1..FA_FLEX_TYPE.NUM_ACCTS+1
152 LOOP
153 h_j:=h_i;
154 EXIT WHEN h_i > FA_FLEX_TYPE.NUM_ACCTS;
155 if fafb_accts(h_i).type_name = X_fin_trx_code
156 then
157 X_function_code := fafb_accts(h_i).type_code;
158 exit;
159 end if;
160 END LOOP;
161
162 if h_j > FA_FLEX_TYPE.NUM_ACCTS then
163 FA_SRVR_MSG.ADD_MESSAGE
164 (CALLING_FN => 'FA_GCCID_PKG.fafb_search_functions',
165 NAME => 'FA_FLEX_NO_ACCOUNT', p_log_level_rec => p_log_level_rec);
166 return FALSE;
167 end if;
168 return TRUE;
169 EXCEPTION
170 WHEN OTHERS THEN
171 FA_SRVR_MSG.ADD_SQL_ERROR
172 ( CALLING_FN => 'FA_GCCID_PKG.fafb_search_functions', p_log_level_rec => p_log_level_rec);
173 return FALSE;
174 end fafb_search_functions;
175
176 -------------------------------------------------------------------
177 FUNCTION fafbgcc (X_book_type_code in fa_book_controls.book_type_code%type,
178 X_fn_trx_code in varchar2,
179 X_dist_ccid in number,
180 X_acct_segval in varchar2,
181 X_account_ccid in number,
182 X_distribution_id in number,
183 X_rtn_ccid out nocopy number
184 , p_log_level_rec IN FA_API_TYPES.log_level_rec_type)
185 return boolean
186 is
187 h_acct_segval varchar2(30);
188 h_dist_ccid number;
189 h_dist_id number;
190 h_acct_ccid number;
191 h_segs_def_ccid number;
192 h_rtn_ccid number;
193 h_flex_num number:=null;
194 h_flex_function_code varchar2(30);
195 h_ret_value boolean;
196 h_ccid_success boolean := FALSE;
197 h_ccid_found boolean := FALSE;
198 h_gen_expense varchar2(1) := NULL;
199 h_val_date date;
200
201 h_ccid_valid varchar2(10) := NULL;
202
203 CURSOR validate_ccid IS
204 SELECT 'VALID'
205 FROM gl_code_combinations glcc
206 WHERE glcc.code_combination_id = X_rtn_ccid
207 AND glcc.enabled_flag = 'Y'
208 AND nvl(glcc.end_date_active, h_val_date) >=
209 h_val_date;
210
211 BEGIN <<fafbgcc>>
212
213
214 h_dist_ccid := X_dist_ccid;
215 h_acct_segval := X_acct_segval;
216 h_dist_id := X_distribution_id;
217 h_acct_ccid := X_account_ccid;
218
219 h_ret_value := fafb_load_functions(p_log_level_rec);
220 if not h_ret_value then
221 FA_SRVR_MSG.ADD_MESSAGE
222 (CALLING_FN => 'FA_GCCID_PKG.fafbgcc', p_log_level_rec => p_log_level_rec);
223 end if;
224
225 -- no need to call the cache here as it will already be loaded
226 h_flex_num := FA_CACHE_PKG.fazcbc_record.accounting_flex_structure;
227 h_segs_def_ccid := FA_CACHE_PKG.fazcbc_record.flexbuilder_defaults_ccid;
228
229 h_ret_value := fafb_search_functions(X_fin_trx_code=>X_fn_trx_code,
230 X_function_code=>h_flex_function_code,
231 p_log_level_rec => p_log_level_rec);
232 if not h_ret_value then
233 FA_SRVR_MSG.ADD_MESSAGE
234 (CALLING_FN => 'FA_GCCID_PKG.fafbgcc', p_log_level_rec => p_log_level_rec);
235 return FALSE;
236 end if;
237 if (p_log_level_rec.statement_level)
238 then
239 FA_DEBUG_PKG.ADD(
240 fname => 'FA_GCCID_PKG.fafbgcc',
241 element => 'dist_ccid in fafbgcc is ',
242 value => X_dist_ccid, p_log_level_rec => p_log_level_rec);
243 FA_DEBUG_PKG.ADD(
244 fname => 'FA_GCCID_PKG.fafbgcc',
245 element => 'flexbuilder defs ccid ',
246 value => h_segs_def_ccid, p_log_level_rec => p_log_level_rec);
247 end if;
248
249 -- BUG# 2215671
250 -- Pass the validation date to start process to use the correct
251 -- period date instead of system date. G_validation_date will
252 -- only be populated from FAPOST which is the only code where
253 -- generation can occur for ccids from a prior or future period.
254 -- bridgway
255
256 if (G_validation_date is null) then
257 if not fa_cache_pkg.fazcdp
258 (x_book_type_code => x_book_type_code,
259 x_period_counter => null,
260 x_effective_date => null, p_log_level_rec => p_log_level_rec) then
261 fa_srvr_msg.add_message(calling_fn => 'fa_gccid_pkg.fafbgcc', p_log_level_rec => p_log_level_rec);
262 return false;
263 end if;
264 h_val_date := fa_cache_pkg.fazcdp_record.calendar_period_close_date;
265 else
266 h_val_date := to_date(G_validation_date, 'DD/MM/RRRR'); --bug#5863965
267 end if;
268
269 /*
270 Call the START_PROCESS which will start the flex workflow process
271 */
272 if (p_log_level_rec.statement_level)
273 then
274 FA_DEBUG_PKG.ADD (
275 fname => 'FA_GCCID_PKG.fafbgcc',
276 element => 'validation_date in fafbgcb is ',
277 value =>h_val_date, p_log_level_rec => p_log_level_rec);
278
279 FA_DEBUG_PKG.ADD (
280 fname => 'FA_GCCID_PKG.fafbgcc',
281 element => 'distribution ccid in fafbgcc is ',
282 value =>X_dist_ccid, p_log_level_rec => p_log_level_rec);
283 FA_DEBUG_PKG.ADD (
284 fname => 'FA_GCCID_PKG.fafbgcc',
285 element => 'Acct Type in fafbgcc is ',
286 value =>h_flex_function_code, p_log_level_rec => p_log_level_rec);
287 FA_DEBUG_PKG.ADD (
288 fname => 'FA_GCCID_PKG.fafbgcc',
289 element => 'segval in fafbgcc is ',
290 value =>h_acct_segval, p_log_level_rec => p_log_level_rec);
291 FA_DEBUG_PKG.ADD (
292 fname => 'FA_GCCID_PKG.fafbgcc',
293 element => 'seg defs ccid in fafbgcc is ',
294 value =>h_segs_def_ccid, p_log_level_rec => p_log_level_rec);
295 FA_DEBUG_PKG.ADD (
296 fname => 'FA_GCCID_PKG.fafbgcc',
297 element => 'acct ccid in fafbgcc is ',
298 value =>h_acct_ccid, p_log_level_rec => p_log_level_rec);
299 FA_DEBUG_PKG.ADD (
300 fname => 'FA_GCCID_PKG.fafbgcc',
301 element => 'flex num in fafbgcc is ',
302 value =>h_flex_num, p_log_level_rec => p_log_level_rec);
303 end if;
304
305 -- call get_ccid to check if ccid exists in fa_distribution_accounts
306 -- G_check_dist_accts will be true when called from form transactions
307 -- and false when called from fafbgcc_proc. When called from fafbgcc_proc
308 -- not necessary to check fa_distribution_accounts again since get_ccid
309 -- is already called in fafbgcc_proc
310
311 --- BEGIN USE CUSTOM GEN CCID
312 if not g_profile_init then
313 if not fa_cache_pkg.fazprof then
314 null;
315 end if;
316 g_custom_gen_ccid := fa_cache_pkg.fa_custom_gen_ccid;
317 g_profile_init := TRUE;
318 end if;
319
320 if (g_custom_gen_ccid) then
321
322 if (p_log_level_rec.statement_level) then
323 FA_DEBUG_PKG.ADD(
324 fname => 'FA_GCCID_PKG.fafbgcc',
325 element => 'entering ',
326 value => 'custom gen ccid logic', p_log_level_rec => p_log_level_rec);
327 end if;
328
329
330 h_ret_value := FA_CUSTOM_GEN_CCID_PKG.gen_ccid(
331 X_fn_trx_code=>X_fn_trx_code,
332 X_book_type_code=>X_book_type_code,
333 X_flex_num=>h_flex_num,
334 X_dist_ccid=>h_dist_ccid,
335 X_acct_segval=>h_acct_segval,
336 X_default_ccid=>h_segs_def_ccid,
337 X_account_ccid=>h_acct_ccid,
338 X_distribution_id=>h_dist_id,
339 X_rtn_ccid=>h_rtn_ccid, p_log_level_rec => p_log_level_rec);
340
341 if not h_ret_value then
342
343 X_rtn_ccid := -1;
344 h_ret_value := FALSE;
345
346 else
347
348 X_rtn_ccid := h_rtn_ccid;
349
350 if (X_rtn_ccid is NULL) OR (X_rtn_ccid <= 0) THEN
351
352 h_ret_value := FALSE;
353
354 else -- (X_rtn_ccid > 0)
355
356 open validate_ccid;
357 fetch validate_ccid into h_ccid_valid;
358 if (validate_ccid%NOTFOUND) then
359
360 h_ret_value := FALSE;
361
362 else
363
364 h_ret_value := TRUE;
365
366 end if;
367
368 close validate_ccid;
369
370 end if;
371
372 end if;
373
374 if (not h_ret_value) then
375 FA_SRVR_MSG.ADD_MESSAGE
376 (CALLING_FN => 'FAFLEX_PKG_WF.START_PROCESS',
377 NAME => 'FA_FLEXBUILDER_FAIL_CCID',
378 TOKEN1 => 'ACCOUNT_TYPE',
379 VALUE1 => X_fn_trx_code,
380 TOKEN2 => 'BOOK_TYPE_CODE',
381 VALUE2 => X_book_type_code,
382 TOKEN3 => 'DIST_ID',
383 VALUE3 => h_dist_id,
384 TOKEN4 => 'CONCAT_SEGS',
385 VALUE4 => 'from custom gen ccid'
386 , p_log_level_rec => p_log_level_rec);
387 end if;
388
389 return h_ret_value;
390
391 --- ELSE DO NOT USE CUSTOM GEN CCID
392 else
393
394 if (G_check_dist_accts) then
395 h_ccid_success := FA_GCCID_PKG.get_ccid(
396 X_book_type_code,
397 X_distribution_id,
398 X_fn_trx_code,
399 h_val_date,
400 h_ccid_found,
401 X_rtn_ccid, p_log_level_rec => p_log_level_rec);
402 end if;
403
404 -- Call workflow to generate ccid only when ccid is not in
405 -- fa_distribution_accounts
406 if (not h_ccid_found OR X_rtn_ccid = -1) then
407 -- Bonus: BONUS_DEPRN_EXP_ACCT is not included in fa_distribution_accounts
408
409 if (X_fn_trx_code = 'DEPRN_EXPENSE_ACCT') then
410
411 --fnd_profile.get('FA_GEN_EXPENSE_ACCOUNT', h_gen_expense);
412 if (not fa_cache_pkg.fa_gen_expense_account) then
413 X_rtn_ccid := X_dist_ccid;
414 return TRUE;
415 end if;
416 end if;
417
418 h_ret_value := FAFLEX_PKG_WF.START_PROCESS(
419 X_flex_account_type=>h_flex_function_code,
420 X_book_type_code=>X_book_type_code,
421 X_flex_num=>h_flex_num,
422 X_dist_ccid=>h_dist_ccid,
423 X_acct_segval=>h_acct_segval,
424 X_default_ccid=>h_segs_def_ccid,
425 X_account_ccid=>h_acct_ccid,
426 X_distribution_id=>h_dist_id,
427 X_validation_date=>h_val_date,
428 X_return_ccid=>h_rtn_ccid,
429 p_log_level_rec=>p_log_level_rec);
430 if (p_log_level_rec.statement_level)
431 then
432 FA_DEBUG_PKG.ADD (
433 fname => 'FA_GCCID_PKG.fafbgcc',
434 element => ' return from Start Process ',
435 value =>h_ret_value, p_log_level_rec => p_log_level_rec);
436 end if;
437 if not h_ret_value then
438 /* BUG# 1504839
439 this error is not needed. We already dump an error to the
440 stack in FAFLEX_WF_PKG
441
442 Flexbuilder failed to generate the code combination id. Pls
443 inform your systems administrator
444
445 FA_SRVR_MSG.ADD_MESSAGE
446 (CALLING_FN => 'FA_GCCID_PKG.fafbgcc',
447 NAME => 'FA_FLEX_FUNCTION_FAILED', p_log_level_rec => p_log_level_rec);
448 */
449
450 X_rtn_ccid := -1;
451 return FALSE;
452 end if;
453 X_rtn_ccid := h_rtn_ccid;
454 if (X_rtn_ccid is null)
455 then
456 return FALSE;
457 end if;
458 else
459 -- not h_ccid_success is the case where ccid is found in
460 -- fa_distribution_accounts but it is not valid. Otherwise ccid
461 -- is valid.
462 if (not h_ccid_success) then
463 h_ret_value := FALSE;
464 else
465 -- ccid is valid
466 h_ret_value := TRUE;
467 end if;
468 end if;
469 end if; -- custom_gen_ccid
470
471 -- in case there is some problem return false when ccid is -1
472 if (X_rtn_ccid = -1) then
473 h_ret_value := FALSE;
474 end if;
475
476 return h_ret_value;
477
478 EXCEPTION
479 WHEN OTHERS THEN
480 FA_SRVR_MSG.ADD_SQL_ERROR ( CALLING_FN => 'FA_GCCID_PKG.fafbgcc', p_log_level_rec => p_log_level_rec);
481 return FALSE;
482
483 END ; /* fafbgcc */
484
485 -------------------------------------------------------------------
486 PROCEDURE fafbgcc_proc
487 (X_book_type_code in fa_book_controls.book_type_code%type,
488 X_fn_trx_code in varchar2,
489 X_dist_ccid in integer,
490 X_acct_segval in varchar2,
491 X_account_ccid in integer,
492 X_distribution_id in integer,
493 X_rtn_ccid out nocopy number,
494 X_concat_segs out nocopy varchar2,
495 X_return_value out nocopy integer)
496 as
497 h_ret_value boolean;
498 h_rtn_ccid integer;
499 h_ccid_success boolean;
500 h_ccid_found boolean;
501
502 h_val_date date;
503 error_found exception;
504
505 begin
506 -- initialize out variables to failure condition
507 X_rtn_ccid := -1;
508 h_rtn_ccid := -1;
509 X_return_value := 0;
510
511
512 if (not g_log_level_rec.initialized) then
513 if (NOT fa_util_pub.get_log_level_rec (
514 x_log_level_rec => g_log_level_rec
515 )) then
516 raise error_found;
517 end if;
518 end if;
519
520 -- for pro*c, we need to load the plsql cache for
521 -- book controls and profile options
522 if not FA_CACHE_PKG.fazcbc(X_book_type_code, p_log_level_rec => g_log_level_rec) then
523 FA_SRVR_MSG.ADD_MESSAGE
524 (CALLING_FN => 'FA_GCCID_PKG.fafbgcc', p_log_level_rec => g_log_level_rec);
525 X_return_value := 0;
526 return;
527 end if;
528
529 g_custom_gen_ccid := fa_cache_pkg.fa_custom_gen_ccid;
530 g_profile_init := TRUE;
531
532 -- BUG# 2215671
533 -- Pass the validation date to start process to use the correct
534 -- period date instead of system date. G_validation_date will
535 -- only be populated from FAPOST which is the only code where
536 -- generation can occur for ccids from a prior or future period.
537 -- bridgway
538
539 if (G_validation_date is null) then
540 if not fa_cache_pkg.fazcdp
541 (x_book_type_code => x_book_type_code,
542 x_period_counter => null,
543 x_effective_date => null, p_log_level_rec => g_log_level_rec) then
544 X_return_value := 0;
545 fa_srvr_msg.add_message(calling_fn => 'fa_gccid_pkg.fafbgcc', p_log_level_rec => g_log_level_rec);
546 return;
547 end if;
548 h_val_date := fa_cache_pkg.fazcdp_record.calendar_period_close_date;
549 else
550 h_val_date := to_date(G_validation_date, 'DD/MM/RRRR'); --bug#5863965
551 end if;
552
553 -- set G_check_dist_accts to FALSE so get_ccid does not get
554 -- called again if ccid is not in fa_distribution_accounts
555 -- and need to call fafbgcc to generate the ccid
556
557 if not g_custom_gen_ccid then
558 G_check_dist_accts := FALSE;
559 h_ccid_success := FA_GCCID_PKG.get_ccid(
560 X_book_type_code,
561 to_number(X_distribution_id),
562 X_fn_trx_code,
563 h_val_date,
564 h_ccid_found,
565 h_rtn_ccid);
566 end if;
567
568 if (not h_ccid_found OR h_rtn_ccid = -1) then
569 h_ret_value := FA_GCCID_PKG.fafbgcc(X_book_type_code,
570 X_fn_trx_code,
571 to_number(X_dist_ccid),
572 X_acct_segval,
573 to_number(X_account_ccid),
574 to_number(X_distribution_id),
575 h_rtn_ccid);
576 if (h_ret_value) then
577 X_return_value := 1; /* True */
578 else
579 X_return_value := 0; /* False */
580 end if;
581 X_rtn_ccid := h_rtn_ccid;
582 X_concat_segs := FA_GCCID_PKG.global_concat_segs;
583 elsif (not h_ccid_success) then
584 X_rtn_ccid := h_rtn_ccid;
585 X_concat_segs := FA_GCCID_PKG.global_concat_segs;
586 X_return_value := 0; /* False */
587 else
588 X_rtn_ccid := h_rtn_ccid;
589 X_concat_segs := FA_GCCID_PKG.global_concat_segs;
590 X_return_value := 1; /* True */
591 end if;
592
593 -- in case there is some problem and ccid is not generated
594 -- return false.
595 if (X_rtn_ccid = -1) then
596 X_return_value := 0; /* False */
597 end if;
598
599 if (g_log_level_rec.statement_level)
600 then
601 FA_DEBUG_PKG.ADD (
602 fname => 'fafbgcc_proc',
603 element=>'rtn ccid',
604 value=>h_rtn_ccid, p_log_level_rec => g_log_level_rec);
605 end if;
606 return;
607 EXCEPTION
608
609 WHEN ERROR_FOUND THEN
610 raise;
611
612 WHEN OTHERS THEN
613 if (g_log_level_rec.statement_level)
614 then
615 FA_DEBUG_PKG.ADD (
616 fname => 'fafbgcc_proc',
617 element=>'Errored',
618 value=>1, p_log_level_rec => g_log_level_rec);
619 end if;
620 X_return_value := 0;
621 return;
622 END fafbgcc_proc;
623
624 --------------------------------------------------------------------------
625 FUNCTION get_ccid (X_book_type_code IN VARCHAR2,
626 X_distribution_id IN NUMBER,
627 X_fn_trx_code IN VARCHAR2,
628 X_validation_date IN DATE,
629 X_ccid_found OUT NOCOPY BOOLEAN,
630 X_rtn_ccid OUT NOCOPY NUMBER
631 ,p_log_level_rec IN fa_api_types.log_level_rec_type default null)
632 RETURN BOOLEAN is
633 h_cost_ccid number :=0;
634 h_clearing_ccid number :=0;
635 h_expense_ccid number :=0;
636 h_reserve_ccid number :=0;
637 h_cip_cost_ccid number :=0;
638 h_cip_clearing_ccid number :=0;
639 h_nbv_retired_gain_ccid number :=0;
640 h_nbv_retired_loss_ccid number :=0;
641 h_pos_gain_ccid number :=0;
642 h_pos_loss_ccid number :=0;
643 h_cost_removal_gain_ccid number :=0;
644 h_cost_removal_loss_ccid number :=0;
645 h_cor_clearing_ccid number :=0;
646 h_pos_clearing_ccid number :=0;
647
648 h_reval_rsv_ret_gain_ccid number := 0;
649 h_reval_rsv_ret_loss_ccid number := 0;
650 h_deferred_dep_exp_ccid number := 0;
651 h_deferred_dep_rsv_ccid number := 0;
652 h_deprn_adjustment_ccid number := 0;
653 h_reval_amortization_ccid number := 0;
654 h_reval_reserve_ccid number := 0;
655 h_bonus_deprn_expense_ccid number := 0;
656 h_bonus_deprn_reserve_ccid number := 0;
657 h_impair_expense_ccid number := 0;
658 h_impair_reserve_ccid number := 0;
659 h_capital_adj_ccid number := 0; -- Bug 6666666 : Added for SORP
660 h_general_fund_ccid number := 0; -- Bug 6666666 : Added for SORP
661 h_reval_loss_ccid number := 0;
662
663 -- added following variables for fix to bug 969990
664 h_flex_num number := null;
665 h_ccid_valid varchar2(10) := NULL;
666 n_segs number;
667 all_segments fnd_flex_ext.SegmentArray;
668 delim varchar2(1);
669 get_segs_success boolean;
670 h_ret_value boolean := FALSE;
671
672 -- added the following for bug 1085809
673 h_pregen boolean := TRUE;
674
675
676 CURSOR get_accounts IS
677 SELECT nvl(ASSET_COST_ACCOUNT_CCID, -1),
678 nvl(ASSET_CLEARING_ACCOUNT_CCID, -1),
679 nvl(DEPRN_EXPENSE_ACCOUNT_CCID, -1),
680 nvl(DEPRN_RESERVE_ACCOUNT_CCID, -1),
681 nvl(CIP_COST_ACCOUNT_CCID, -1),
682 nvl(CIP_CLEARING_ACCOUNT_CCID, -1),
683 nvl(NBV_RETIRED_GAIN_CCID,-1),
684 nvl(NBV_RETIRED_LOSS_CCID,-1),
685 nvl(PROCEEDS_SALE_GAIN_CCID,-1),
686 nvl(PROCEEDS_SALE_LOSS_CCID,-1),
687 nvl(COST_REMOVAL_GAIN_CCID,-1),
688 nvl(COST_REMOVAL_LOSS_CCID,-1),
689 nvl(COST_REMOVAL_CLEARING_CCID,-1),
690 nvl(PROCEEDS_SALE_CLEARING_CCID,-1),
691 nvl(REVAL_RSV_GAIN_ACCOUNT_CCID, -1),
692 nvl(REVAL_RSV_LOSS_ACCOUNT_CCID, -1),
693 nvl(DEFERRED_EXP_ACCOUNT_CCID, -1),
694 nvl(DEFERRED_RSV_ACCOUNT_CCID, -1),
695 nvl(DEPRN_ADJ_ACCOUNT_CCID, -1),
696 nvl(REVAL_AMORT_ACCOUNT_CCID, -1),
697 nvl(REVAL_RSV_ACCOUNT_CCID, -1),
698 nvl(BONUS_EXP_ACCOUNT_CCID, -1),
699 nvl(BONUS_RSV_ACCOUNT_CCID, -1),
700 nvl(IMPAIR_EXPENSE_ACCOUNT_CCID, -1),
701 nvl(IMPAIR_RESERVE_ACCOUNT_CCID, -1),
702 nvl(CAPITAL_ADJ_ACCOUNT_CCID, -1), -- Bug 6666666 : SORP
703 nvl(GENERAL_FUND_ACCOUNT_CCID, -1), -- Bug 6666666 : SORP
704 nvl(REVAL_LOSS_ACCOUNT_CCID, -1),
705 accounting_flex_structure
706 FROM FA_DISTRIBUTION_ACCOUNTS da,
707 FA_BOOK_CONTROLS bc
708 WHERE bc.book_type_code = X_book_type_code
709 AND da.book_type_code = bc.book_type_code
710 AND da.distribution_id = X_distribution_id;
711
712 CURSOR validate_ccid IS
713 SELECT 'VALID'
714 FROM gl_code_combinations glcc
715 WHERE glcc.code_combination_id = X_rtn_ccid
716 AND glcc.enabled_flag = 'Y'
717 AND nvl(glcc.end_date_active, X_validation_date) >=
718 X_validation_date;
719
720 BEGIN
721 -- initialize out variables to failure condition
722 X_rtn_ccid := -1;
723 X_ccid_found := FALSE;
724
725 -- bug# 1085809: do not check distribution_accounts for an account if
726 -- the associated pregeneration profile option is set to 'N'
727
728 if (X_fn_trx_code = 'DEPRN_EXPENSE_ACCT') then
729 -- fnd_profile.get('FA_PREGEN_ASSET_ACCOUNT', h_pregen);
730 h_pregen := fa_cache_pkg.fa_pregen_asset_account;
731 end if;
732
733 if (X_fn_trx_code in ('ASSET_COST_ACCT',
734 'ASSET_CLEARING_ACCT',
735 'DEPRN_RESERVE_ACCT',
736 'CIP_COST_ACCT',
737 'CIP_CLEARING_ACCT',
738 'REVAL_AMORTIZATION_ACCT',
739 'REVAL_RESERVE_ACCT',
740 'BONUS_DEPRN_EXPENSE_ACCT',
741 'BONUS_DEPRN_RESERVE_ACCT',
742 'IMPAIR_EXPENSE_ACCT',
743 'IMPAIR_RESERVE_ACCT',
744 'CAPITAL_ADJ_ACCT', -- Bug 6666666 : Added for SORP
745 'GENERAL_FUND_ACCT', -- Bug 6666666 : Added for SORP
746 'REVAL_LOSS_ACCT'
747 )) then
748 --fnd_profile.get('FA_PREGEN_CAT_ACCOUNT', h_pregen);
749 h_pregen := fa_cache_pkg.fa_pregen_cat_account;
750 end if;
751
752 if (X_fn_trx_code in ('NBV_RETIRED_GAIN_ACCT',
753 'NBV_RETIRED_LOSS_ACCT',
754 'PROCEEDS_OF_SALE_GAIN_ACCT',
755 'PROCEEDS_OF_SALE_LOSS_ACCT',
756 'COST_OF_REMOVAL_GAIN_ACCT',
757 'COST_OF_REMOVAL_LOSS_ACCT',
758 'COST_OF_REMOVAL_CLEARING_ACCT',
759 'PROCEEDS_OF_SALE_CLEARING_ACCT',
760 'REVAL_RSV_RETIRED_GAIN_ACCT',
761 'REVAL_RSV_RETIRED_LOSS_ACCT',
762 'DEFERRED_DEPRN_EXPENSE_ACCT',
763 'DEFERRED_DEPRN_RESERVE_ACCT',
764 'DEPRN_ADJUSTMENT_ACCT'
765 )) then
766 --fnd_profile.get('FA_PREGEN_BOOK_ACCOUNT', h_pregen);
767 h_pregen := fa_cache_pkg.fa_pregen_book_account;
768 end if;
769
770 if (h_pregen) then
771 OPEN get_accounts;
772 FETCH get_accounts into
773 h_cost_ccid,
774 h_clearing_ccid,
775 h_expense_ccid,
776 h_reserve_ccid,
777 h_cip_cost_ccid,
778 h_cip_clearing_ccid,
779 h_nbv_retired_gain_ccid,
780 h_nbv_retired_loss_ccid,
781 h_pos_gain_ccid,
782 h_pos_loss_ccid,
783 h_cost_removal_gain_ccid,
784 h_cost_removal_loss_ccid,
785 h_cor_clearing_ccid,
786 h_pos_clearing_ccid,
787 h_reval_rsv_ret_gain_ccid,
788 h_reval_rsv_ret_loss_ccid,
789 h_deferred_dep_exp_ccid,
790 h_deferred_dep_rsv_ccid,
791 h_deprn_adjustment_ccid,
792 h_reval_amortization_ccid,
793 h_reval_reserve_ccid,
794 h_bonus_deprn_expense_ccid,
795 h_bonus_deprn_reserve_ccid,
796 h_impair_expense_ccid,
797 h_impair_reserve_ccid,
798 h_capital_adj_ccid, -- Bug 6666666 : Added for SORP
799 h_general_fund_ccid, -- Bug 6666666 : Added for SORP
800 h_reval_loss_ccid,
801 h_flex_num;
802
803 if (get_accounts%FOUND) then
804 if (X_fn_trx_code = 'ASSET_COST_ACCT') then
805 X_rtn_ccid := h_cost_ccid;
806 elsif (X_fn_trx_code = 'ASSET_CLEARING_ACCT') then
807 X_rtn_ccid := h_clearing_ccid;
808 elsif (X_fn_trx_code = 'DEPRN_RESERVE_ACCT') then
809 X_rtn_ccid := h_reserve_ccid;
810 elsif (X_fn_trx_code = 'DEPRN_EXPENSE_ACCT') then
811 X_rtn_ccid := h_expense_ccid;
812 elsif (X_fn_trx_code = 'CIP_COST_ACCT') then
813 X_rtn_ccid := h_cip_cost_ccid;
814 elsif (X_fn_trx_code = 'CIP_CLEARING_ACCT') then
815 X_rtn_ccid := h_cip_clearing_ccid;
816 elsif (X_fn_trx_code = 'NBV_RETIRED_GAIN_ACCT') then
817 X_rtn_ccid := h_nbv_retired_gain_ccid;
818 elsif (X_fn_trx_code = 'NBV_RETIRED_LOSS_ACCT') then
819 X_rtn_ccid := h_nbv_retired_loss_ccid;
820 elsif (X_fn_trx_code = 'PROCEEDS_OF_SALE_GAIN_ACCT') then
821 X_rtn_ccid := h_pos_gain_ccid;
822 elsif (X_fn_trx_code = 'PROCEEDS_OF_SALE_LOSS_ACCT') then
823 X_rtn_ccid := h_pos_loss_ccid;
824 elsif (X_fn_trx_code = 'COST_OF_REMOVAL_GAIN_ACCT') then
825 X_rtn_ccid := h_cost_removal_gain_ccid;
826 elsif (X_fn_trx_code = 'COST_OF_REMOVAL_LOSS_ACCT') then
827 X_rtn_ccid := h_cost_removal_loss_ccid; --BUG# 1390143
828 elsif (X_fn_trx_code = 'COST_OF_REMOVAL_CLEARING_ACCT') then
829 X_rtn_ccid := h_cor_clearing_ccid;
830 elsif (X_fn_trx_code = 'PROCEEDS_OF_SALE_CLEARING_ACCT') then
831 X_rtn_ccid := h_pos_clearing_ccid;
832 elsif (X_fn_trx_code = 'REVAL_RSV_RETIRED_GAIN_ACCT') then
833 X_rtn_ccid := h_reval_rsv_ret_gain_ccid;
834 elsif (X_fn_trx_code = 'REVAL_RSV_RETIRED_LOSS_ACCT') then
835 X_rtn_ccid := h_reval_rsv_ret_loss_ccid;
836 elsif (X_fn_trx_code = 'DEFERRED_DEPRN_EXPENSE_ACCT') then
837 X_rtn_ccid := h_deferred_dep_exp_ccid;
838 elsif (X_fn_trx_code = 'DEFERRED_DEPRN_RESERVE_ACCT') then
839 X_rtn_ccid := h_deferred_dep_rsv_ccid;
840 elsif (X_fn_trx_code = 'DEPRN_ADJUSTMENT_ACCT') then
841 X_rtn_ccid := h_deprn_adjustment_ccid;
842 elsif (X_fn_trx_code = 'REVAL_AMORTIZATION_ACCT') then
843 X_rtn_ccid := h_reval_amortization_ccid;
844 elsif (X_fn_trx_code = 'REVAL_RESERVE_ACCT') then
845 X_rtn_ccid := h_reval_reserve_ccid;
846 elsif (X_fn_trx_code = 'BONUS_DEPRN_EXPENSE_ACCT') then
847 X_rtn_ccid := h_bonus_deprn_expense_ccid;
848 elsif (X_fn_trx_code = 'BONUS_DEPRN_RESERVE_ACCT') then
849 X_rtn_ccid := h_bonus_deprn_reserve_ccid;
850 elsif (X_fn_trx_code = 'IMPAIR_EXPENSE_ACCT') then
851 X_rtn_ccid := h_impair_expense_ccid;
852 elsif (X_fn_trx_code = 'IMPAIR_RESERVE_ACCT') then
853 X_rtn_ccid := h_impair_reserve_ccid;
854 elsif (X_fn_trx_code = 'CAPITAL_ADJ_ACCT') then -- Bug 6666666 :
855 X_rtn_ccid := h_capital_adj_ccid; -- Added for SORP
856 elsif (X_fn_trx_code = 'GENERAL_FUND_ACCT') then -- Bug 6666666 :
857 X_rtn_ccid := h_general_fund_ccid;
858 elsif (X_fn_trx_code = 'REVAL_LOSS_ACCT') then
859 X_rtn_ccid := h_reval_loss_ccid;
860 end if;
861
862 if (X_rtn_ccid > 0) then
863 -- fix for bug 969990
864 X_ccid_found := TRUE;
865 open validate_ccid;
866 fetch validate_ccid into h_ccid_valid;
867 if (validate_ccid%NOTFOUND) then
868 get_segs_success := FND_FLEX_EXT.get_segments(
869 application_short_name => 'SQLGL',
870 key_flex_code => 'GL#',
871 structure_number => h_flex_num,
872 combination_id => X_rtn_ccid,
873 n_segments => n_segs,
874 segments => all_segments);
875 delim := FND_FLEX_EXT.get_delimiter(
876 application_short_name => 'SQLGL',
877 key_flex_code => 'GL#',
878 structure_number => h_flex_num);
879 FA_GCCID_PKG.global_concat_segs :=
880 FND_FLEX_EXT.concatenate_segments(
881 n_segments => n_segs,
882 segments => all_segments,
883 delimiter => delim);
884
885 FA_SRVR_MSG.ADD_MESSAGE
886 (CALLING_FN=>'FAFLEX_PKG_WF.START_PROCESS',
887 NAME=>'FA_FLEXBUILDER_FAIL_CCID',
888 TOKEN1 => 'ACCOUNT_TYPE',
889 VALUE1 => X_fn_trx_code,
890 TOKEN2 => 'BOOK_TYPE_CODE',
891 VALUE2 => X_book_type_code,
892 TOKEN3 => 'DIST_ID',
893 VALUE3 => X_distribution_id,
894 TOKEN4 => 'CONCAT_SEGS',
895 VALUE4 => FA_GCCID_PKG.global_concat_segs
896 , p_log_level_rec => p_log_level_rec);
897
898 fnd_message.set_name('FND', 'FLEX-COMBINATION DISABLED');
899 fnd_msg_pub.add; -- end 1504839
900
901
902 h_ret_value := FALSE;
903 else
904 h_ret_value := TRUE;
905 end if;
906 close validate_ccid;
907 else
908 h_ret_value := FALSE;
909 end if;
910 else
911 h_ret_value := FALSE;
912 end if;
913 CLOSE get_accounts;
914 else
915 h_ret_value := FALSE;
916 end if; -- pregen profile
917 RETURN h_ret_value;
918 END get_ccid;
919
920 --------------------------------------------------------------------------
921
922 PROCEDURE fafbgcc_proc_msg(X_mesg_count IN OUT NOCOPY number,
923 X_mesg_string IN OUT NOCOPY VARCHAR2) IS
924
925 begin
926
927 X_mesg_count := fnd_msg_pub.count_msg;
928
929 if (X_mesg_count > 0) then
930
931 X_mesg_string := fnd_global.Local_Chr(10) || substr(fnd_msg_pub.get
932 (fnd_msg_pub.G_FIRST, fnd_api.G_FALSE),
933 1, 512);
934
935 for i in 1..2 loop -- (X_mesg_count - 1) loop
936
937 X_mesg_string := X_mesg_string || fnd_global.Local_Chr(10) ||
938 substr(fnd_msg_pub.get
939 (fnd_msg_pub.G_NEXT,
940 fnd_api.G_FALSE), 1, 512);
941 end loop;
942
943 fnd_msg_pub.delete_msg();
944
945 else
946 X_mesg_count := 0;
947 X_mesg_string := 'NONE';
948 end if;
949
950 end fafbgcc_proc_msg;
951
952 END FA_GCCID_PKG;