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